diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..9dad3047e29 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,37 @@ +# see http://editorconfig.org/ for docs on this file + +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf ; help with sharing files across os's (i.e. network share or through local vm) +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# trailing whitespace is significant in markdown (bad choice, bad!) +[*.{md,markdown}] +trim_trailing_whitespace = false + +# keep these and the VS stuff below in sync with .hgeol's CRLF extensions +[*.{vcproj,bat,cmd,xaml,tt,t4,ttinclude}] +end_of_line = crlf + +# this VS-specific stuff is based on experiments to see how VS will modify a file after it has been manually edited. +# the settings are meant to closely match what VS does to minimize unnecessary diffs. this duplicates some settings in * +# but let's be explicit here to be safe (in case someone wants to copy-paste this out to another .editorconfig). +[*.{vcxproj,vcxproj.filters,csproj,props,targets}] +indent_style = space +indent_size = 2 +end_of_line = crlf +charset = utf-8-bom +trim_trailing_whitespace = true +insert_final_newline = false +[*.{sln,sln.template}] +indent_style = tab +indent_size = 4 +end_of_line = crlf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = false diff --git a/.gitignore b/.gitignore index bd082f0b22a..f2276c79ae6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,19 +4,7 @@ Temp/* *.csproj *.sln *.suo -DataSource/app.info -DataSource/globalgamemanagers -DataSource/globalgamemanagers.assets -DataSource/level0 -DataSource/Mono/etc/mono/config -DataSource/Mono/etc/mono/mconfig/config.xml -DataSource/PlayerConnectionConfigFile -DataSource/Resources/unity default resources -DataSource/sharedassets0.assets -DataSource/Resources/unity_builtin_extra -DataSource/Mono/etc/mono/1.0/machine.config -DataSource/Mono/etc/mono/2.0/machine.config -DataSource/Mono/etc/mono/2.0/web.config +DataSource/* *.mdb *.browser *.map @@ -24,6 +12,8 @@ DataSource/Mono/etc/mono/2.0/web.config *.resS *.exe *.aspx +*.sdf +*.userprefs Assets/UnityHDRI.meta Assets/UnityHDRI/Gareoult/GareoultWhiteBalanced.exr diff --git a/Assets/Editor/Tests/RenderloopTests/CullResultsTest.cs b/Assets/Editor/Tests/RenderloopTests/CullResultsTest.cs index 4cb1eec0625..46873d3585a 100644 --- a/Assets/Editor/Tests/RenderloopTests/CullResultsTest.cs +++ b/Assets/Editor/Tests/RenderloopTests/CullResultsTest.cs @@ -1,42 +1,38 @@ -using UnityEngine; -using UnityEditor; -using UnityEngine.Rendering; -using System.Collections.Generic; -using System.Linq; +using UnityEngine; +using UnityEngine.Experimental.Rendering; using NUnit.Framework; [TestFixture] public class CullResultsTest { - void InspectCullResults(Camera camera, CullResults cullResults, RenderLoop renderLoop) - { - VisibleReflectionProbe[] probes = cullResults.culledReflectionProbes; + void InspectCullResults(Camera camera, CullResults cullResults, RenderLoop renderLoop) + { + VisibleReflectionProbe[] probes = cullResults.visibleReflectionProbes; - Assert.AreEqual(1, probes.Length, "Incorrect reflection probe count"); + Assert.AreEqual(1, probes.Length, "Incorrect reflection probe count"); - VisibleReflectionProbe probeA = probes[0]; - Assert.NotNull(probeA.texture, "probe texture"); + VisibleReflectionProbe probeA = probes[0]; + Assert.NotNull(probeA.texture, "probe texture"); - ActiveLight[] lights = cullResults.culledLights; + VisibleLight[] lights = cullResults.visibleLights; Assert.AreEqual(3, lights.Length, "Incorrect light count"); LightType[] expectedTypes = new LightType[] { LightType.Directional, LightType.Spot, LightType.Point }; for (int i = 0; i != 2; i++) { - Assert.AreEqual(expectedTypes[i], lights[i].lightType, + Assert.AreEqual(expectedTypes[i], lights[i].lightType, "Incorrect light type for light " + i.ToString() + " (" + lights[i].light.name + ")"); } - - // @TODO.. - } + // @TODO.. + } - [Test] - public void TestReflectionProbes() - { - UnityEditor.SceneManagement.EditorSceneManager.OpenScene("Assets/Editor/Tests/TestScene.unity"); + [Test] + public void TestReflectionProbes() + { + UnityEditor.SceneManagement.EditorSceneManager.OpenScene("Assets/Editor/Tests/TestScene.unity"); - // Asserts.ExpectLogError("Boing"); + // Asserts.ExpectLogError("Boing"); RenderLoopTestFixture.Run(InspectCullResults); } diff --git a/Assets/Editor/Tests/RenderloopTests/RenderloopTestFixture.cs b/Assets/Editor/Tests/RenderloopTests/RenderloopTestFixture.cs index 3b5f6b4627b..772f63f36ec 100644 --- a/Assets/Editor/Tests/RenderloopTests/RenderloopTestFixture.cs +++ b/Assets/Editor/Tests/RenderloopTests/RenderloopTestFixture.cs @@ -1,41 +1,41 @@ -using System.Collections; +using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; -using UnityEngine.Rendering; +using UnityEngine.Experimental.Rendering; using NUnit.Framework; [ExecuteInEditMode] public class RenderLoopTestFixture : MonoBehaviour { - public delegate void TestDelegate(Camera camera, CullResults cullResults, RenderLoop renderLoop); - private static TestDelegate callback; - - public static void Render(RenderLoopWrapper wrapper, Camera[] cameras, RenderLoop renderLoop) - { - foreach (Camera camera in cameras) - { - CullingParameters cullingParams; - bool gotCullingParams = CullResults.GetCullingParameters(camera, out cullingParams); - Assert.IsTrue(gotCullingParams); - - CullResults cullResults = CullResults.Cull(ref cullingParams, renderLoop); - - callback(camera, cullResults, renderLoop); - } - - renderLoop.Submit(); - } - - public static void Run(TestDelegate renderCallback) - { + public delegate void TestDelegate(Camera camera, CullResults cullResults, RenderLoop renderLoop); + private static TestDelegate s_Callback; + + public static void Render(RenderLoopWrapper wrapper, Camera[] cameras, RenderLoop renderLoop) + { + foreach (var camera in cameras) + { + CullingParameters cullingParams; + bool gotCullingParams = CullResults.GetCullingParameters(camera, out cullingParams); + Assert.IsTrue(gotCullingParams); + + CullResults cullResults = CullResults.Cull(ref cullingParams, renderLoop); + + s_Callback(camera, cullResults, renderLoop); + } + + renderLoop.Submit(); + } + + public static void Run(TestDelegate renderCallback) + { var sceneCamera = Camera.main; var camObject = sceneCamera.gameObject; - var instance = camObject.AddComponent(); - instance.callback = Render; - callback = renderCallback; - instance.enabled = true; + var instance = camObject.AddComponent(); + instance.callback = Render; + s_Callback = renderCallback; + instance.enabled = true; Transform t = camObject.transform; @@ -44,7 +44,7 @@ public static void Run(TestDelegate renderCallback) float fov = 90; // hardcoded in SceneView float camDist = size / Mathf.Tan(fov * 0.5f * Mathf.Deg2Rad); SceneView.lastActiveSceneView.LookAtDirect(t.position + t.forward * camDist, t.rotation, size); - + // Invoke renderer try { @@ -56,4 +56,3 @@ public static void Run(TestDelegate renderCallback) } } } - diff --git a/Assets/Editor/Tests/ShaderGeneratorTests/ShaderGeneratorTests.cs b/Assets/Editor/Tests/ShaderGeneratorTests/ShaderGeneratorTests.cs index 5334dd054d4..9f40eb6c211 100644 --- a/Assets/Editor/Tests/ShaderGeneratorTests/ShaderGeneratorTests.cs +++ b/Assets/Editor/Tests/ShaderGeneratorTests/ShaderGeneratorTests.cs @@ -1,158 +1,157 @@ -using System; +using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Reflection; using UnityEngine; using UnityEditor; -using UnityEngine.Rendering; -using UnityEngine.ScriptableRenderLoop; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Experimental.ScriptableRenderLoop; using NUnit.Framework; [TestFixture] public class ShaderGeneratorTests { - struct FailureTypes - { - // Non-primitive type in nested struct - internal struct NestedWithNonPrimitiveType - { - public struct Data - { - public string s; - } - public Data contents; - } - - // Unsupported primitive type in nested struct - internal struct UnsupportedPrimitiveType - { - public struct Data - { - public IntPtr intPtr; - } - public Data contents; - } - - // Mixed types in nested struct - internal struct MixedTypesInNestedStruct - { - public struct Data - { - public float f; - public int i; - } - public Data contents; - } - - // More than 4 primitive fields in nested struct - internal struct TooManyFields - { - public struct Data - { - public float f1, f2, f3, f4, f5; - } - public Data contents; - } - - // Merge failure due to incompatible types - internal struct MergeIncompatibleTypes - { - public float f; - public Vector2 v; - public int i; - } - - // Merge failure due to register boundary crossing - internal struct MergeCrossBoundary - { - public Vector2 u; - public Vector3 v; - } - } - - // @TODO: should probably switch to exceptions... - static bool HasErrorString(List errors, string errorSubstring) - { - if (errors == null) - return false; - - bool foundError = false; - foreach (var error in errors) - { - if (error.IndexOf(errorSubstring) >= 0) - { - foundError = true; - break; - } - } - - return foundError; - } - - [Test(Description = "Disallow non-primitive types in nested structs")] + struct FailureTypes + { + // Non-primitive type in nested struct + internal struct NestedWithNonPrimitiveType + { + public struct Data + { + public string s; + } + public Data contents; + } + + // Unsupported primitive type in nested struct + internal struct UnsupportedPrimitiveType + { + public struct Data + { + public IntPtr intPtr; + } + public Data contents; + } + + // Mixed types in nested struct + internal struct MixedTypesInNestedStruct + { + public struct Data + { + public float f; + public int i; + } + public Data contents; + } + + // More than 4 primitive fields in nested struct + internal struct TooManyFields + { + public struct Data + { + public float f1, f2, f3, f4, f5; + } + public Data contents; + } + + // Merge failure due to incompatible types + internal struct MergeIncompatibleTypes + { + public float f; + public Vector2 v; + public int i; + } + + // Merge failure due to register boundary crossing + internal struct MergeCrossBoundary + { + public Vector2 u; + public Vector3 v; + } + } + + // @TODO: should probably switch to exceptions... + static bool HasErrorString(List errors, string errorSubstring) + { + if (errors == null) + return false; + + bool foundError = false; + foreach (var error in errors) + { + if (error.IndexOf(errorSubstring) >= 0) + { + foundError = true; + break; + } + } + + return foundError; + } + + [Test(Description = "Disallow non-primitive types in nested structs")] public void Fail_NestedWithNonPrimitiveType() - { - string source; - List errors; + { + string source; + List errors; - bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.NestedWithNonPrimitiveType), new GenerateHLSL(PackingRules.Exact), out source, out errors); - Assert.IsFalse(success); - Assert.IsTrue(HasErrorString(errors, "contains a non-primitive field type")); - } + bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.NestedWithNonPrimitiveType), new GenerateHLSL(PackingRules.Exact), out source, out errors); + Assert.IsFalse(success); + Assert.IsTrue(HasErrorString(errors, "contains a non-primitive field type")); + } - [Test(Description = "Check for unsupported types in primitive structs")] + [Test(Description = "Check for unsupported types in primitive structs")] public void Fail_UnsupportedPrimitiveType() - { - string source; - List errors; - - bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.UnsupportedPrimitiveType), new GenerateHLSL(PackingRules.Exact), out source, out errors); - Assert.IsFalse(success); - Assert.IsTrue(HasErrorString(errors, "contains an unsupported field type")); - } - - [Test(Description = "Disallow mixed types in nested structs")] - public void Fail_MixedTypesInNestedStruct() - { - string source; - List errors; - - bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.MixedTypesInNestedStruct), new GenerateHLSL(PackingRules.Exact), out source, out errors); - Assert.IsFalse(success); - Assert.IsTrue(HasErrorString(errors, "contains mixed basic types")); - } - - [Test(Description = "Disallow more than 16 bytes worth of fields in nested structs")] + { + string source; + List errors; + + bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.UnsupportedPrimitiveType), new GenerateHLSL(PackingRules.Exact), out source, out errors); + Assert.IsFalse(success); + Assert.IsTrue(HasErrorString(errors, "contains an unsupported field type")); + } + + [Test(Description = "Disallow mixed types in nested structs")] + public void Fail_MixedTypesInNestedStruct() + { + string source; + List errors; + + bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.MixedTypesInNestedStruct), new GenerateHLSL(PackingRules.Exact), out source, out errors); + Assert.IsFalse(success); + Assert.IsTrue(HasErrorString(errors, "contains mixed basic types")); + } + + [Test(Description = "Disallow more than 16 bytes worth of fields in nested structs")] public void Fail_TooManyFields() - { - string source; - List errors; + { + string source; + List errors; - bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.TooManyFields), new GenerateHLSL(PackingRules.Exact), out source, out errors); - Assert.IsFalse(success); - Assert.IsTrue(HasErrorString(errors, "more than 4 fields")); - } + bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.TooManyFields), new GenerateHLSL(PackingRules.Exact), out source, out errors); + Assert.IsFalse(success); + Assert.IsTrue(HasErrorString(errors, "more than 4 fields")); + } - [Test(Description = "Disallow merging incompatible types when doing aggressive packing")] + [Test(Description = "Disallow merging incompatible types when doing aggressive packing")] public void Fail_MergeIncompatibleTypes() - { - string source; - List errors; + { + string source; + List errors; - bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.MergeIncompatibleTypes), new GenerateHLSL(PackingRules.Aggressive), out source, out errors); - Assert.IsFalse(success); - Assert.IsTrue(HasErrorString(errors, "incompatible types")); - } + bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.MergeIncompatibleTypes), new GenerateHLSL(PackingRules.Aggressive), out source, out errors); + Assert.IsFalse(success); + Assert.IsTrue(HasErrorString(errors, "incompatible types")); + } - [Test(Description = "Disallow placing fields across register boundaries when merging")] + [Test(Description = "Disallow placing fields across register boundaries when merging")] public void Fail_MergeCrossBoundary() - { - string source; - List errors; - - bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.MergeCrossBoundary), new GenerateHLSL(PackingRules.Aggressive), out source, out errors); - Assert.IsFalse(success); - Assert.IsTrue(HasErrorString(errors, "cross register boundary")); - } - + { + string source; + List errors; + + bool success = CSharpToHLSL.GenerateHLSL(typeof(FailureTypes.MergeCrossBoundary), new GenerateHLSL(PackingRules.Aggressive), out source, out errors); + Assert.IsFalse(success); + Assert.IsTrue(HasErrorString(errors, "cross register boundary")); + } } diff --git a/Assets/ScriptableRenderLoop/AdditionalLightData.cs b/Assets/ScriptableRenderLoop/AdditionalLightData.cs index 08938afc20c..8bdeb87153b 100644 --- a/Assets/ScriptableRenderLoop/AdditionalLightData.cs +++ b/Assets/ScriptableRenderLoop/AdditionalLightData.cs @@ -1,35 +1,31 @@ -using System; - -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - //@TODO: We should continously move these values - // into the engine when we can see them being generally useful - [RequireComponent(typeof(Light))] - public class AdditionalLightData : MonoBehaviour - { - public const int defaultShadowResolution = 512; + //@TODO: We should continously move these values + // into the engine when we can see them being generally useful + [RequireComponent(typeof(Light))] + public class AdditionalLightData : MonoBehaviour + { + public const int DefaultShadowResolution = 512; - public int shadowResolution = defaultShadowResolution; + public int shadowResolution = DefaultShadowResolution; - [RangeAttribute(0.0F, 100.0F)] - public float innerSpotPercent = 0.0F; + [RangeAttribute(0.0F, 100.0F)] + public float innerSpotPercent = 0.0F; - public static float GetInnerSpotPercent01(AdditionalLightData lightData) - { - if (lightData != null) - return Mathf.Clamp( lightData.innerSpotPercent, 0.0f, 100.0f ) / 100.0f; - else - return 0.0F; - } + public static float GetInnerSpotPercent01(AdditionalLightData lightData) + { + if (lightData != null) + return Mathf.Clamp(lightData.innerSpotPercent, 0.0f, 100.0f) / 100.0f; + else + return 0.0F; + } - public static int GetShadowResolution(AdditionalLightData lightData) - { - if (lightData != null) - return lightData.shadowResolution; - else - return defaultShadowResolution; - } - } + public static int GetShadowResolution(AdditionalLightData lightData) + { + if (lightData != null) + return lightData.shadowResolution; + else + return DefaultShadowResolution; + } + } } - - diff --git a/Assets/ScriptableRenderLoop/ForwardRenderLoop/ForwardRenderLoop.cs b/Assets/ScriptableRenderLoop/ForwardRenderLoop/ForwardRenderLoop.cs index e84509d781e..93fc7458e3b 100644 --- a/Assets/ScriptableRenderLoop/ForwardRenderLoop/ForwardRenderLoop.cs +++ b/Assets/ScriptableRenderLoop/ForwardRenderLoop/ForwardRenderLoop.cs @@ -1,244 +1,241 @@ -using UnityEngine; -using System.Collections; -using UnityEngine.Rendering; -using System.Collections.Generic; +using UnityEngine.Experimental.Rendering; using System; -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - public class ForwardRenderLoop : ScriptableRenderLoop - { + public class ForwardRenderLoop : ScriptableRenderLoop + { #if UNITY_EDITOR - [UnityEditor.MenuItem("Renderloop/CreateForwardRenderLoop")] - static void CreateForwardRenderLoop() - { - var instance = ScriptableObject.CreateInstance(); - UnityEditor.AssetDatabase.CreateAsset(instance, "Assets/forwardrenderloop.asset"); - } + [UnityEditor.MenuItem("Renderloop/CreateForwardRenderLoop")] + static void CreateForwardRenderLoop() + { + var instance = ScriptableObject.CreateInstance(); + UnityEditor.AssetDatabase.CreateAsset(instance, "Assets/forwardrenderloop.asset"); + } + #endif - [SerializeField] - ShadowSettings m_ShadowSettings = ShadowSettings.Default; - ShadowRenderPass m_ShadowPass; - - - const int MAX_LIGHTS = 10; - const int MAX_SHADOWMAP_PER_LIGHTS = 6; - const int MAX_DIRECTIONAL_SPLIT = 4; - // Directional lights become spotlights at a far distance. This is the distance we pull back to set the spotlight origin. - const float DIRECTIONAL_LIGHT_PULLBACK_DISTANCE = 10000.0f; - - [NonSerialized] private int m_nWarnedTooManyLights = 0; - - - void OnEnable() - { - Rebuild (); - } - - void OnValidate() - { - Rebuild (); - } - - public override void Rebuild() - { - m_ShadowPass = new ShadowRenderPass (m_ShadowSettings); - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - void UpdateLightConstants(ActiveLight[] activeLights, ref ShadowOutput shadow) - { - int nNumLightsIncludingTooMany = 0; - - int g_nNumLights = 0; - - Vector4[] g_vLightColor = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vLightPosition_flInvRadius = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vLightDirection = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vLightShadowIndex_vLightParams = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vLightFalloffParams = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vSpotLightInnerOuterConeCosines = new Vector4[ MAX_LIGHTS ]; - Matrix4x4[] g_matWorldToShadow = new Matrix4x4[ MAX_LIGHTS * MAX_SHADOWMAP_PER_LIGHTS ]; - Vector4[] g_vDirShadowSplitSpheres = new Vector4[ MAX_DIRECTIONAL_SPLIT ]; - - for ( int nLight = 0; nLight < activeLights.Length; nLight++ ) - { - - nNumLightsIncludingTooMany++; - if ( nNumLightsIncludingTooMany > MAX_LIGHTS ) - continue; - - ActiveLight light = activeLights [nLight]; - LightType lightType = light.lightType; - Vector3 position = light.light.transform.position; - Vector3 lightDir = light.light.transform.forward.normalized; - AdditionalLightData additionalLightData = light.light.GetComponent (); - - // Setup shadow data arrays - bool hasShadows = shadow.GetShadowSliceCountLightIndex (nLight) != 0; - - if ( lightType == LightType.Directional ) - { - g_vLightColor[ g_nNumLights ] = light.finalColor; - g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( - position.x - ( lightDir.x * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), - position.y - ( lightDir.y * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), - position.z - ( lightDir.z * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), - -1.0f ); - g_vLightDirection[ g_nNumLights ] = new Vector4( lightDir.x, lightDir.y, lightDir.z ); - g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); - g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 0.0f, 0.0f, float.MaxValue, (float)lightType ); - g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( 0.0f, -1.0f, 1.0f ); - - if (hasShadows) - { - for (int s = 0; s < MAX_DIRECTIONAL_SPLIT; ++s) - { - g_vDirShadowSplitSpheres[s] = shadow.directionalShadowSplitSphereSqr[s]; - } - } - } - else if ( lightType == LightType.Point ) - { - g_vLightColor[ g_nNumLights ] = light.finalColor; - - g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( position.x, position.y, position.z, 1.0f / light.range ); - g_vLightDirection[ g_nNumLights ] = new Vector4( 0.0f, 0.0f, 0.0f ); - g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); - g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 1.0f, 0.0f, light.range * light.range, (float)lightType ); - g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( 0.0f, -1.0f, 1.0f ); - } - else if ( lightType == LightType.Spot ) - { - g_vLightColor[ g_nNumLights ] = light.finalColor; - g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( position.x, position.y, position.z, 1.0f / light.range ); - g_vLightDirection[ g_nNumLights ] = new Vector4( lightDir.x, lightDir.y, lightDir.z ); - g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); - g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 1.0f, 0.0f, light.range * light.range, (float)lightType ); - - float flInnerConePercent = AdditionalLightData.GetInnerSpotPercent01(additionalLightData); - float spotAngle = light.light.spotAngle; - float flPhiDot = Mathf.Clamp( Mathf.Cos( spotAngle * 0.5f * Mathf.Deg2Rad ), 0.0f, 1.0f ); // outer cone - float flThetaDot = Mathf.Clamp( Mathf.Cos( spotAngle * 0.5f * flInnerConePercent * Mathf.Deg2Rad ), 0.0f, 1.0f ); // inner cone - g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( flThetaDot, flPhiDot, 1.0f / Mathf.Max( 0.01f, flThetaDot - flPhiDot ) ); - - } - - if ( hasShadows ) - { - // Enable shadows - g_vLightShadowIndex_vLightParams[ g_nNumLights ].x = 1; - for(int s=0; s < shadow.GetShadowSliceCountLightIndex (nLight); ++s) - { - int shadowSliceIndex = shadow.GetShadowSliceIndex (nLight, s); - g_matWorldToShadow [g_nNumLights * MAX_SHADOWMAP_PER_LIGHTS + s] = shadow.shadowSlices[shadowSliceIndex].shadowTransform.transpose; - } - } - - g_nNumLights++; - } - - // Warn if too many lights found - if ( nNumLightsIncludingTooMany > MAX_LIGHTS ) - { - if ( nNumLightsIncludingTooMany > m_nWarnedTooManyLights ) - { - Debug.LogError( "ERROR! Found " + nNumLightsIncludingTooMany + " runtime lights! Valve renderer supports up to " + MAX_LIGHTS + - " active runtime lights at a time!\nDisabling " + ( nNumLightsIncludingTooMany - MAX_LIGHTS ) + " runtime light" + - ( ( nNumLightsIncludingTooMany - MAX_LIGHTS ) > 1 ? "s" : "" ) + "!\n" ); - } - m_nWarnedTooManyLights = nNumLightsIncludingTooMany; - } - else - { - if ( m_nWarnedTooManyLights > 0 ) - { - m_nWarnedTooManyLights = 0; - Debug.Log( "SUCCESS! Found " + nNumLightsIncludingTooMany + " runtime lights which is within the supported number of lights, " + MAX_LIGHTS + ".\n\n" ); - } - } - - // Send constants to shaders - Shader.SetGlobalInt( "g_nNumLights", g_nNumLights ); - - // New method for Unity 5.4 to set arrays of constants - Shader.SetGlobalVectorArray( "g_vLightPosition_flInvRadius", g_vLightPosition_flInvRadius ); - Shader.SetGlobalVectorArray( "g_vLightColor", g_vLightColor ); - Shader.SetGlobalVectorArray( "g_vLightDirection", g_vLightDirection ); - Shader.SetGlobalVectorArray( "g_vLightShadowIndex_vLightParams", g_vLightShadowIndex_vLightParams ); - Shader.SetGlobalVectorArray( "g_vLightFalloffParams", g_vLightFalloffParams ); - Shader.SetGlobalVectorArray( "g_vSpotLightInnerOuterConeCosines", g_vSpotLightInnerOuterConeCosines ); - Shader.SetGlobalMatrixArray( "g_matWorldToShadow", g_matWorldToShadow ); - Shader.SetGlobalVectorArray( "g_vDirShadowSplitSpheres", g_vDirShadowSplitSpheres ); - - // Time - #if ( UNITY_EDITOR ) - { - Shader.SetGlobalFloat( "g_flTime", Time.realtimeSinceStartup ); - //Debug.Log( "Time " + Time.realtimeSinceStartup ); - } - #else - { - Shader.SetGlobalFloat( "g_flTime", Time.timeSinceLevelLoad ); - //Debug.Log( "Time " + Time.timeSinceLevelLoad ); - } - #endif - - // PCF 3x3 Shadows - float flTexelEpsilonX = 1.0f / m_ShadowSettings.shadowAtlasWidth; - float flTexelEpsilonY = 1.0f / m_ShadowSettings.shadowAtlasHeight; - Vector4 g_vShadow3x3PCFTerms0 = new Vector4( 20.0f / 267.0f, 33.0f / 267.0f, 55.0f / 267.0f, 0.0f ); - Vector4 g_vShadow3x3PCFTerms1 = new Vector4( flTexelEpsilonX, flTexelEpsilonY, -flTexelEpsilonX, -flTexelEpsilonY ); - Vector4 g_vShadow3x3PCFTerms2 = new Vector4( flTexelEpsilonX, flTexelEpsilonY, 0.0f, 0.0f ); - Vector4 g_vShadow3x3PCFTerms3 = new Vector4( -flTexelEpsilonX, -flTexelEpsilonY, 0.0f, 0.0f ); - - Shader.SetGlobalVector( "g_vShadow3x3PCFTerms0", g_vShadow3x3PCFTerms0 ); - Shader.SetGlobalVector( "g_vShadow3x3PCFTerms1", g_vShadow3x3PCFTerms1 ); - Shader.SetGlobalVector( "g_vShadow3x3PCFTerms2", g_vShadow3x3PCFTerms2 ); - Shader.SetGlobalVector( "g_vShadow3x3PCFTerms3", g_vShadow3x3PCFTerms3 ); - } - - public override void Render(Camera[] cameras, RenderLoop renderLoop) - { - foreach (var camera in cameras) - { - CullResults cullResults; - CullingParameters cullingParams; - if (!CullResults.GetCullingParameters (camera, out cullingParams)) - continue; - - m_ShadowPass.UpdateCullingParameters (ref cullingParams); - - cullResults = CullResults.Cull (ref cullingParams, renderLoop); - - ShadowOutput shadows; - m_ShadowPass.Render (renderLoop, cullResults, out shadows); - - renderLoop.SetupCameraProperties (camera); - - UpdateLightConstants(cullResults.culledLights, ref shadows); - - DrawRendererSettings settings = new DrawRendererSettings (cullResults, camera, new ShaderPassName("ForwardBase")); - settings.rendererConfiguration = RendererConfiguration.ConfigureOneLightProbePerRenderer | RendererConfiguration.ConfigureReflectionProbesProbePerRenderer; - settings.sorting.sortOptions = SortOptions.SortByMaterialThenMesh; - - renderLoop.DrawRenderers (ref settings); - renderLoop.Submit (); - } - - // Post effects - } - - #if UNITY_EDITOR - public override UnityEditor.SupportedRenderingFeatures GetSupportedRenderingFeatures() - { - var features = new UnityEditor.SupportedRenderingFeatures(); - - features.reflectionProbe = UnityEditor.SupportedRenderingFeatures.ReflectionProbe.Rotation; - - return features; - } - #endif - } -} \ No newline at end of file + [SerializeField] + ShadowSettings m_ShadowSettings = ShadowSettings.Default; + ShadowRenderPass m_ShadowPass; + + const int k_MaxLights = 10; + const int k_MaxShadowmapPerLights = 6; + const int k_MaxDirectionalSplit = 4; + // Directional lights become spotlights at a far distance. This is the distance we pull back to set the spotlight origin. + const float k_DirectionalLightPullbackDistance = 10000.0f; + + [NonSerialized] private int m_WarnedTooManyLights = 0; + + + void OnEnable() + { + Rebuild(); + } + + void OnValidate() + { + Rebuild(); + } + + public override void Rebuild() + { + m_ShadowPass = new ShadowRenderPass(m_ShadowSettings); + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + void UpdateLightConstants(VisibleLight[] visibleLights, ref ShadowOutput shadow) + { + var numLightsIncludingTooMany = 0; + + var numLights = 0; + + var lightColor = new Vector4[k_MaxLights]; + var lightPosition_invRadius = new Vector4[k_MaxLights]; + var lightDirection = new Vector4[k_MaxLights]; + var lightShadowIndex_lightParams = new Vector4[k_MaxLights]; + var lightFalloffParams = new Vector4[k_MaxLights]; + var spotLightInnerOuterConeCosines = new Vector4[k_MaxLights]; + var matWorldToShadow = new Matrix4x4[k_MaxLights * k_MaxShadowmapPerLights]; + var dirShadowSplitSpheres = new Vector4[k_MaxDirectionalSplit]; + + for (int nLight = 0; nLight < visibleLights.Length; nLight++) + { + numLightsIncludingTooMany++; + if (numLightsIncludingTooMany > k_MaxLights) + continue; + + var light = visibleLights[nLight]; + var lightType = light.lightType; + var position = light.light.transform.position; + var lightDir = light.light.transform.forward.normalized; + var additionalLightData = light.light.GetComponent(); + + // Setup shadow data arrays + var hasShadows = shadow.GetShadowSliceCountLightIndex(nLight) != 0; + + if (lightType == LightType.Directional) + { + lightColor[numLights] = light.finalColor; + lightPosition_invRadius[numLights] = new Vector4( + position.x - (lightDir.x * k_DirectionalLightPullbackDistance), + position.y - (lightDir.y * k_DirectionalLightPullbackDistance), + position.z - (lightDir.z * k_DirectionalLightPullbackDistance), + -1.0f); + lightDirection[numLights] = new Vector4(lightDir.x, lightDir.y, lightDir.z); + lightShadowIndex_lightParams[numLights] = new Vector4(0, 0, 1, 1); + lightFalloffParams[numLights] = new Vector4(0.0f, 0.0f, float.MaxValue, (float)lightType); + spotLightInnerOuterConeCosines[numLights] = new Vector4(0.0f, -1.0f, 1.0f); + + if (hasShadows) + { + for (int s = 0; s < k_MaxDirectionalSplit; ++s) + { + dirShadowSplitSpheres[s] = shadow.directionalShadowSplitSphereSqr[s]; + } + } + } + else if (lightType == LightType.Point) + { + lightColor[numLights] = light.finalColor; + + lightPosition_invRadius[numLights] = new Vector4(position.x, position.y, position.z, 1.0f / light.range); + lightDirection[numLights] = new Vector4(0.0f, 0.0f, 0.0f); + lightShadowIndex_lightParams[numLights] = new Vector4(0, 0, 1, 1); + lightFalloffParams[numLights] = new Vector4(1.0f, 0.0f, light.range * light.range, (float)lightType); + spotLightInnerOuterConeCosines[numLights] = new Vector4(0.0f, -1.0f, 1.0f); + } + else if (lightType == LightType.Spot) + { + lightColor[numLights] = light.finalColor; + lightPosition_invRadius[numLights] = new Vector4(position.x, position.y, position.z, 1.0f / light.range); + lightDirection[numLights] = new Vector4(lightDir.x, lightDir.y, lightDir.z); + lightShadowIndex_lightParams[numLights] = new Vector4(0, 0, 1, 1); + lightFalloffParams[numLights] = new Vector4(1.0f, 0.0f, light.range * light.range, (float)lightType); + + var flInnerConePercent = AdditionalLightData.GetInnerSpotPercent01(additionalLightData); + var spotAngle = light.light.spotAngle; + var flPhiDot = Mathf.Clamp(Mathf.Cos(spotAngle * 0.5f * Mathf.Deg2Rad), 0.0f, 1.0f); // outer cone + var flThetaDot = Mathf.Clamp(Mathf.Cos(spotAngle * 0.5f * flInnerConePercent * Mathf.Deg2Rad), 0.0f, 1.0f); // inner cone + spotLightInnerOuterConeCosines[numLights] = new Vector4(flThetaDot, flPhiDot, 1.0f / Mathf.Max(0.01f, flThetaDot - flPhiDot)); + } + + if (hasShadows) + { + // Enable shadows + lightShadowIndex_lightParams[numLights].x = 1; + for (int s = 0; s < shadow.GetShadowSliceCountLightIndex(nLight); ++s) + { + var shadowSliceIndex = shadow.GetShadowSliceIndex(nLight, s); + matWorldToShadow[numLights * k_MaxShadowmapPerLights + s] = shadow.shadowSlices[shadowSliceIndex].shadowTransform.transpose; + } + } + + numLights++; + } + + // Warn if too many lights found + if (numLightsIncludingTooMany > k_MaxLights) + { + if (numLightsIncludingTooMany > m_WarnedTooManyLights) + { + Debug.LogError("ERROR! Found " + numLightsIncludingTooMany + " runtime lights! Valve renderer supports up to " + k_MaxLights + + " active runtime lights at a time!\nDisabling " + (numLightsIncludingTooMany - k_MaxLights) + " runtime light" + + ((numLightsIncludingTooMany - k_MaxLights) > 1 ? "s" : "") + "!\n"); + } + m_WarnedTooManyLights = numLightsIncludingTooMany; + } + else + { + if (m_WarnedTooManyLights > 0) + { + m_WarnedTooManyLights = 0; + Debug.Log("SUCCESS! Found " + numLightsIncludingTooMany + " runtime lights which is within the supported number of lights, " + k_MaxLights + ".\n\n"); + } + } + + // Send constants to shaders + Shader.SetGlobalInt("g_nNumLights", numLights); + + // New method for Unity 5.4 to set arrays of constants + Shader.SetGlobalVectorArray("g_vLightPosition_flInvRadius", lightPosition_invRadius); + Shader.SetGlobalVectorArray("g_vLightColor", lightColor); + Shader.SetGlobalVectorArray("g_vLightDirection", lightDirection); + Shader.SetGlobalVectorArray("g_vLightShadowIndex_vLightParams", lightShadowIndex_lightParams); + Shader.SetGlobalVectorArray("g_vLightFalloffParams", lightFalloffParams); + Shader.SetGlobalVectorArray("g_vSpotLightInnerOuterConeCosines", spotLightInnerOuterConeCosines); + Shader.SetGlobalMatrixArray("g_matWorldToShadow", matWorldToShadow); + Shader.SetGlobalVectorArray("g_vDirShadowSplitSpheres", dirShadowSplitSpheres); + + // Time + #if (UNITY_EDITOR) + { + Shader.SetGlobalFloat("g_flTime", Time.realtimeSinceStartup); + //Debug.Log( "Time " + Time.realtimeSinceStartup ); + } + #else + { + Shader.SetGlobalFloat("g_flTime", Time.timeSinceLevelLoad); + //Debug.Log( "Time " + Time.timeSinceLevelLoad ); + } + #endif + + // PCF 3x3 Shadows + var texelEpsilonX = 1.0f / m_ShadowSettings.shadowAtlasWidth; + var texelEpsilonY = 1.0f / m_ShadowSettings.shadowAtlasHeight; + var shadow3x3PCFTerms0 = new Vector4(20.0f / 267.0f, 33.0f / 267.0f, 55.0f / 267.0f, 0.0f); + var shadow3x3PCFTerms1 = new Vector4(texelEpsilonX, texelEpsilonY, -texelEpsilonX, -texelEpsilonY); + var shadow3x3PCFTerms2 = new Vector4(texelEpsilonX, texelEpsilonY, 0.0f, 0.0f); + var shadow3x3PCFTerms3 = new Vector4(-texelEpsilonX, -texelEpsilonY, 0.0f, 0.0f); + + Shader.SetGlobalVector("g_vShadow3x3PCFTerms0", shadow3x3PCFTerms0); + Shader.SetGlobalVector("g_vShadow3x3PCFTerms1", shadow3x3PCFTerms1); + Shader.SetGlobalVector("g_vShadow3x3PCFTerms2", shadow3x3PCFTerms2); + Shader.SetGlobalVector("g_vShadow3x3PCFTerms3", shadow3x3PCFTerms3); + } + + public override void Render(Camera[] cameras, RenderLoop renderLoop) + { + foreach (var camera in cameras) + { + CullResults cullResults; + CullingParameters cullingParams; + if (!CullResults.GetCullingParameters(camera, out cullingParams)) + continue; + + m_ShadowPass.UpdateCullingParameters(ref cullingParams); + + cullResults = CullResults.Cull(ref cullingParams, renderLoop); + + ShadowOutput shadows; + m_ShadowPass.Render(renderLoop, cullResults, out shadows); + + renderLoop.SetupCameraProperties(camera); + + UpdateLightConstants(cullResults.visibleLights, ref shadows); + + var settings = new DrawRendererSettings(cullResults, camera, new ShaderPassName("ForwardBase")); + settings.rendererConfiguration = RendererConfiguration.PerObjectLightProbe | RendererConfiguration.PerObjectReflectionProbes; + settings.sorting.sortOptions = SortOptions.SortByMaterialThenMesh; + + renderLoop.DrawRenderers(ref settings); + renderLoop.Submit(); + } + + // Post effects + } + + #if UNITY_EDITOR + public override UnityEditor.SupportedRenderingFeatures GetSupportedRenderingFeatures() + { + var features = new UnityEditor.SupportedRenderingFeatures + { + reflectionProbe = UnityEditor.SupportedRenderingFeatures.ReflectionProbe.Rotation + }; + + return features; + } + + #endif + } +} diff --git a/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_lighting.cginc b/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_lighting.cginc index b06f00a6148..f2d168551ca 100755 --- a/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_lighting.cginc +++ b/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_lighting.cginc @@ -57,39 +57,39 @@ float g_flCubeMapScalar = 1.0; //------------------------------------------------------------------------------------------------------------------------------------------------------------- struct LightingTerms_t { - float3 vDiffuse; - float3 vSpecular; - float3 vIndirectDiffuse; - float3 vIndirectSpecular; - float3 vTransmissiveSunlight; + float3 vDiffuse; + float3 vSpecular; + float3 vIndirectDiffuse; + float3 vIndirectSpecular; + float3 vTransmissiveSunlight; }; //--------------------------------------------------------------------------------------------------------------------------------------------------------- float CalculateGeometricRoughnessFactor(float3 vGeometricNormalWs) { - float3 vNormalWsDdx = ddx(vGeometricNormalWs.xyz); - float3 vNormalWsDdy = ddy(vGeometricNormalWs.xyz); - float flGeometricRoughnessFactor = pow(saturate(max(dot(vNormalWsDdx.xyz, vNormalWsDdx.xyz), dot(vNormalWsDdy.xyz, vNormalWsDdy.xyz))), 0.333); - return flGeometricRoughnessFactor; + float3 vNormalWsDdx = ddx(vGeometricNormalWs.xyz); + float3 vNormalWsDdy = ddy(vGeometricNormalWs.xyz); + float flGeometricRoughnessFactor = pow(saturate(max(dot(vNormalWsDdx.xyz, vNormalWsDdx.xyz), dot(vNormalWsDdy.xyz, vNormalWsDdy.xyz))), 0.333); + return flGeometricRoughnessFactor; } float2 AdjustRoughnessByGeometricNormal(float2 vRoughness, float3 vGeometricNormalWs) { - float flGeometricRoughnessFactor = CalculateGeometricRoughnessFactor(vGeometricNormalWs.xyz); + float flGeometricRoughnessFactor = CalculateGeometricRoughnessFactor(vGeometricNormalWs.xyz); - //if ( Blink( 1.0 ) ) - //vRoughness.xy = min( vRoughness.xy + flGeometricRoughnessFactor.xx, float2( 1.0, 1.0 ) ); - //else - vRoughness.xy = max(vRoughness.xy, flGeometricRoughnessFactor.xx); - return vRoughness.xy; + //if ( Blink( 1.0 ) ) + //vRoughness.xy = min( vRoughness.xy + flGeometricRoughnessFactor.xx, float2( 1.0, 1.0 ) ); + //else + vRoughness.xy = max(vRoughness.xy, flGeometricRoughnessFactor.xx); + return vRoughness.xy; } //--------------------------------------------------------------------------------------------------------------------------------------------------------- void RoughnessEllipseToScaleAndExp(float2 vRoughness, out float2 o_vDiffuseExponentOut, out float2 o_vSpecularExponentOut, out float2 o_vSpecularScaleOut) { - o_vDiffuseExponentOut.xy = ((1.0 - vRoughness.xy) * 0.8) + 0.6; // 0.8 and 0.6 are magic numbers - o_vSpecularExponentOut.xy = exp2(pow(float2(1.0, 1.0) - vRoughness.xy, float2(1.5, 1.5)) * float2(14.0, 14.0)); // Outputs 1-16384 - o_vSpecularScaleOut.xy = 1.0 - saturate(vRoughness.xy * 0.5); // This is an energy conserving scalar for the roughness exponent. + o_vDiffuseExponentOut.xy = ((1.0 - vRoughness.xy) * 0.8) + 0.6; // 0.8 and 0.6 are magic numbers + o_vSpecularExponentOut.xy = exp2(pow(float2(1.0, 1.0) - vRoughness.xy, float2(1.5, 1.5)) * float2(14.0, 14.0)); // Outputs 1-16384 + o_vSpecularScaleOut.xy = 1.0 - saturate(vRoughness.xy * 0.5); // This is an energy conserving scalar for the roughness exponent. } //--------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -97,103 +97,103 @@ void RoughnessEllipseToScaleAndExp(float2 vRoughness, out float2 o_vDiffuseExpon //--------------------------------------------------------------------------------------------------------------------------------------------------------- float BlinnPhongModifiedNormalizationFactor(float k) { - float flNumer = (k + 2.0) * (k + 4.0); - float flDenom = 8 * (exp2(-k * 0.5) + k); - return flNumer / flDenom; + float flNumer = (k + 2.0) * (k + 4.0); + float flDenom = 8 * (exp2(-k * 0.5) + k); + return flNumer / flDenom; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float DistanceFalloff(float flDistToLightSq, float flLightInvRadius, float2 vFalloffParams) { - // AV - My approximation to Unity's falloff function (I'll experiment with putting this into a texture later) - return lerp(1.0, (1.0 - pow(flDistToLightSq * flLightInvRadius * flLightInvRadius, 0.175)), vFalloffParams.x); - - // AV - This is the VR Aperture Demo falloff function - //flDistToLightSq = max( flDistToLightSq, 8.0f ); // Can't be inside the light source (assuming radius^2 == 8.0f) - // - //float2 vInvRadiusAndInvRadiusSq = float2( flLightInvRadius, flLightInvRadius * flLightInvRadius ); - //float2 vLightDistAndLightDistSq = float2( sqrt( flDistToLightSq ), flDistToLightSq ); - // - //float flTruncation = dot( vFalloffParams.xy, vInvRadiusAndInvRadiusSq.xy ); // Constant amount to subtract to ensure that the light is zero past the light radius - //float flFalloff = dot( vFalloffParams.xy, vLightDistAndLightDistSq.xy ); - // - //return saturate( ( 1.0f / flFalloff ) - flTruncation ); + // AV - My approximation to Unity's falloff function (I'll experiment with putting this into a texture later) + return lerp(1.0, (1.0 - pow(flDistToLightSq * flLightInvRadius * flLightInvRadius, 0.175)), vFalloffParams.x); + + // AV - This is the VR Aperture Demo falloff function + //flDistToLightSq = max( flDistToLightSq, 8.0f ); // Can't be inside the light source (assuming radius^2 == 8.0f) + // + //float2 vInvRadiusAndInvRadiusSq = float2( flLightInvRadius, flLightInvRadius * flLightInvRadius ); + //float2 vLightDistAndLightDistSq = float2( sqrt( flDistToLightSq ), flDistToLightSq ); + // + //float flTruncation = dot( vFalloffParams.xy, vInvRadiusAndInvRadiusSq.xy ); // Constant amount to subtract to ensure that the light is zero past the light radius + //float flFalloff = dot( vFalloffParams.xy, vLightDistAndLightDistSq.xy ); + // + //return saturate( ( 1.0f / flFalloff ) - flTruncation ); } //--------------------------------------------------------------------------------------------------------------------------------------------------------- // Anisotropic diffuse and specular lighting based on 2D tangent-space axis-aligned roughness //--------------------------------------------------------------------------------------------------------------------------------------------------------- float4 ComputeDiffuseAndSpecularTerms(bool bDiffuse, bool bSpecular, - float3 vNormalWs, float3 vEllipseUWs, float3 vEllipseVWs, float3 vPositionToLightDirWs, float3 vPositionToCameraDirWs, - float2 vDiffuseExponent, float2 vSpecularExponent, float2 vSpecularScale, float3 vReflectance, float flFresnelExponent) + float3 vNormalWs, float3 vEllipseUWs, float3 vEllipseVWs, float3 vPositionToLightDirWs, float3 vPositionToCameraDirWs, + float2 vDiffuseExponent, float2 vSpecularExponent, float2 vSpecularScale, float3 vReflectance, float flFresnelExponent) { - float flNDotL = ClampToPositive(dot(vNormalWs.xyz, vPositionToLightDirWs.xyz)); - - // Diffuse - float flDiffuseTerm = 0.0; - if (bDiffuse) - { - /* Disabling anisotropic diffuse until we have a need for it. Isotropic diffuse should be enough. - // Project light vector onto each tangent plane - float3 vDiffuseNormalX = vPositionToLightDirWs.xyz - ( vEllipseUWs.xyz * dot( vPositionToLightDirWs.xyz, vEllipseUWs.xyz ) ); // Not normalized on purpose - float3 vDiffuseNormalY = vPositionToLightDirWs.xyz - ( vEllipseVWs.xyz * dot( vPositionToLightDirWs.xyz, vEllipseVWs.xyz ) ); // Not normalized on purpose - - float flNDotLX = ClampToPositive( dot( vDiffuseNormalX.xyz, vPositionToLightDirWs.xyz ) ); - flNDotLX = pow( flNDotLX, vDiffuseExponent.x * 0.5 ); - - float flNDotLY = ClampToPositive( dot( vDiffuseNormalY.xyz, vPositionToLightDirWs.xyz ) ); - flNDotLY = pow( flNDotLY, vDiffuseExponent.y * 0.5 ); - - flDiffuseTerm = flNDotLX * flNDotLY; - flDiffuseTerm *= ( ( vDiffuseExponent.x * 0.5 + vDiffuseExponent.y * 0.5 ) + 1.0 ) * 0.5; - flDiffuseTerm *= flNDotL; - //*/ - - float flDiffuseExponent = (vDiffuseExponent.x + vDiffuseExponent.y) * 0.5; - flDiffuseTerm = pow(flNDotL, flDiffuseExponent) * ((flDiffuseExponent + 1.0) * 0.5); - } - - // Specular - float3 vSpecularTerm = float3(0.0, 0.0, 0.0); - [branch] if (bSpecular) - { - float3 vHalfAngleDirWs = normalize(vPositionToLightDirWs.xyz + vPositionToCameraDirWs.xyz); - - float flSpecularTerm = 0.0; + float flNDotL = ClampToPositive(dot(vNormalWs.xyz, vPositionToLightDirWs.xyz)); + + // Diffuse + float flDiffuseTerm = 0.0; + if (bDiffuse) + { + /* Disabling anisotropic diffuse until we have a need for it. Isotropic diffuse should be enough. + // Project light vector onto each tangent plane + float3 vDiffuseNormalX = vPositionToLightDirWs.xyz - ( vEllipseUWs.xyz * dot( vPositionToLightDirWs.xyz, vEllipseUWs.xyz ) ); // Not normalized on purpose + float3 vDiffuseNormalY = vPositionToLightDirWs.xyz - ( vEllipseVWs.xyz * dot( vPositionToLightDirWs.xyz, vEllipseVWs.xyz ) ); // Not normalized on purpose + + float flNDotLX = ClampToPositive( dot( vDiffuseNormalX.xyz, vPositionToLightDirWs.xyz ) ); + flNDotLX = pow( flNDotLX, vDiffuseExponent.x * 0.5 ); + + float flNDotLY = ClampToPositive( dot( vDiffuseNormalY.xyz, vPositionToLightDirWs.xyz ) ); + flNDotLY = pow( flNDotLY, vDiffuseExponent.y * 0.5 ); + + flDiffuseTerm = flNDotLX * flNDotLY; + flDiffuseTerm *= ( ( vDiffuseExponent.x * 0.5 + vDiffuseExponent.y * 0.5 ) + 1.0 ) * 0.5; + flDiffuseTerm *= flNDotL; + //*/ + + float flDiffuseExponent = (vDiffuseExponent.x + vDiffuseExponent.y) * 0.5; + flDiffuseTerm = pow(flNDotL, flDiffuseExponent) * ((flDiffuseExponent + 1.0) * 0.5); + } + + // Specular + float3 vSpecularTerm = float3(0.0, 0.0, 0.0); + [branch] if (bSpecular) + { + float3 vHalfAngleDirWs = normalize(vPositionToLightDirWs.xyz + vPositionToCameraDirWs.xyz); + + float flSpecularTerm = 0.0; #if ( S_ANISOTROPIC_GLOSS ) // Adds 34 asm instructions compared to isotropic spec in #else below - { - float3 vSpecularNormalX = vHalfAngleDirWs.xyz - (vEllipseUWs.xyz * dot(vHalfAngleDirWs.xyz, vEllipseUWs.xyz)); // Not normalized on purpose - float3 vSpecularNormalY = vHalfAngleDirWs.xyz - (vEllipseVWs.xyz * dot(vHalfAngleDirWs.xyz, vEllipseVWs.xyz)); // Not normalized on purpose + { + float3 vSpecularNormalX = vHalfAngleDirWs.xyz - (vEllipseUWs.xyz * dot(vHalfAngleDirWs.xyz, vEllipseUWs.xyz)); // Not normalized on purpose + float3 vSpecularNormalY = vHalfAngleDirWs.xyz - (vEllipseVWs.xyz * dot(vHalfAngleDirWs.xyz, vEllipseVWs.xyz)); // Not normalized on purpose - float flNDotHX = ClampToPositive(dot(vSpecularNormalX.xyz, vHalfAngleDirWs.xyz)); - float flNDotHkX = pow(flNDotHX, vSpecularExponent.x * 0.5); - flNDotHkX *= vSpecularScale.x; + float flNDotHX = ClampToPositive(dot(vSpecularNormalX.xyz, vHalfAngleDirWs.xyz)); + float flNDotHkX = pow(flNDotHX, vSpecularExponent.x * 0.5); + flNDotHkX *= vSpecularScale.x; - float flNDotHY = ClampToPositive(dot(vSpecularNormalY.xyz, vHalfAngleDirWs.xyz)); - float flNDotHkY = pow(flNDotHY, vSpecularExponent.y * 0.5); - flNDotHkY *= vSpecularScale.y; + float flNDotHY = ClampToPositive(dot(vSpecularNormalY.xyz, vHalfAngleDirWs.xyz)); + float flNDotHkY = pow(flNDotHY, vSpecularExponent.y * 0.5); + flNDotHkY *= vSpecularScale.y; - flSpecularTerm = flNDotHkX * flNDotHkY; - } + flSpecularTerm = flNDotHkX * flNDotHkY; + } #else - { - float flNDotH = saturate(dot(vNormalWs.xyz, vHalfAngleDirWs.xyz)); - float flNDotHk = pow(flNDotH, dot(vSpecularExponent.xy, float2(0.5, 0.5))); - flNDotHk *= dot(vSpecularScale.xy, float2(0.33333, 0.33333)); // The 0.33333 is to match the spec of the aniso algorithm above with isotropic roughness values - flSpecularTerm = flNDotHk; - } + { + float flNDotH = saturate(dot(vNormalWs.xyz, vHalfAngleDirWs.xyz)); + float flNDotHk = pow(flNDotH, dot(vSpecularExponent.xy, float2(0.5, 0.5))); + flNDotHk *= dot(vSpecularScale.xy, float2(0.33333, 0.33333)); // The 0.33333 is to match the spec of the aniso algorithm above with isotropic roughness values + flSpecularTerm = flNDotHk; + } #endif - flSpecularTerm *= flNDotL; // This makes it modified Blinn-Phong - flSpecularTerm *= BlinnPhongModifiedNormalizationFactor(vSpecularExponent.x * 0.5 + vSpecularExponent.y * 0.5); + flSpecularTerm *= flNDotL; // This makes it modified Blinn-Phong + flSpecularTerm *= BlinnPhongModifiedNormalizationFactor(vSpecularExponent.x * 0.5 + vSpecularExponent.y * 0.5); - float flLDotH = ClampToPositive(dot(vPositionToLightDirWs.xyz, vHalfAngleDirWs.xyz)); - float3 vMaxReflectance = vReflectance.rgb / (Luminance(vReflectance.rgb) + 0.0001); - float3 vFresnel = lerp(vReflectance.rgb, vMaxReflectance.rgb, pow(1.0 - flLDotH, flFresnelExponent)); - vSpecularTerm.rgb = flSpecularTerm * vFresnel.rgb; - } + float flLDotH = ClampToPositive(dot(vPositionToLightDirWs.xyz, vHalfAngleDirWs.xyz)); + float3 vMaxReflectance = vReflectance.rgb / (Luminance(vReflectance.rgb) + 0.0001); + float3 vFresnel = lerp(vReflectance.rgb, vMaxReflectance.rgb, pow(1.0 - flLDotH, flFresnelExponent)); + vSpecularTerm.rgb = flSpecularTerm * vFresnel.rgb; + } - return float4(flDiffuseTerm, vSpecularTerm.rgb); + return float4(flDiffuseTerm, vSpecularTerm.rgb); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -208,70 +208,70 @@ VALVE_DECLARE_SHADOWMAP(g_tShadowBuffer); float ComputeShadow_PCF_3x3_Gaussian(float3 vPositionWs, float4x4 matWorldToShadow) { - float4 vPositionTextureSpace = mul(float4(vPositionWs.xyz, 1.0), matWorldToShadow); - vPositionTextureSpace.xyz /= vPositionTextureSpace.w; - - float2 shadowMapCenter = vPositionTextureSpace.xy; - - //if ( ( frac( shadowMapCenter.x ) != shadowMapCenter.x ) || ( frac( shadowMapCenter.y ) != shadowMapCenter.y ) ) - if ((shadowMapCenter.x < 0.0f) || (shadowMapCenter.x > 1.0f) || (shadowMapCenter.y < 0.0f) || (shadowMapCenter.y > 1.0f)) - return 1.0f; - - //float objDepth = saturate( vPositionTextureSpace.z - 0.000001 ); - float objDepth = 1 - vPositionTextureSpace.z; - - /* // Depth texture visualization - if ( 1 ) - { - #define NUM_SAMPLES 128.0 - float flSum = 0.0; - for ( int j = 0; j < NUM_SAMPLES; j++ ) - { - flSum += ( 1.0 / NUM_SAMPLES ) * ( VALVE_SAMPLE_SHADOW( g_tShadowBuffer, float3( shadowMapCenter.xy, j / NUM_SAMPLES ) ).r ); - } - return flSum; - } - //*/ - - //float flTexelEpsilonX = 1.0 / 4096.0; - //float flTexelEpsilonY = 1.0 / 4096.0; - //g_vShadow3x3PCFTerms0 = float4( 20.0 / 267.0, 33.0 / 267.0, 55.0 / 267.0, 0.0 ); - //g_vShadow3x3PCFTerms1 = float4( flTexelEpsilonX, flTexelEpsilonY, -flTexelEpsilonX, -flTexelEpsilonY ); - //g_vShadow3x3PCFTerms2 = float4( flTexelEpsilonX, flTexelEpsilonY, 0.0, 0.0 ); - //g_vShadow3x3PCFTerms3 = float4( -flTexelEpsilonX, -flTexelEpsilonY, 0.0, 0.0 ); - - float4 v20Taps; - v20Taps.x = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.xy, objDepth)).x; // 1 1 - v20Taps.y = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.zy, objDepth)).x; // -1 1 - v20Taps.z = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.xw, objDepth)).x; // 1 -1 - v20Taps.w = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.zw, objDepth)).x; // -1 -1 - float flSum = dot(v20Taps.xyzw, float4(0.25, 0.25, 0.25, 0.25)); - if ((flSum == 0.0) || (flSum == 1.0)) - return flSum; - flSum *= g_vShadow3x3PCFTerms0.x * 4.0; - - float4 v33Taps; - v33Taps.x = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms2.xz, objDepth)).x; // 1 0 - v33Taps.y = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms3.xz, objDepth)).x; // -1 0 - v33Taps.z = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms3.zy, objDepth)).x; // 0 -1 - v33Taps.w = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms2.zy, objDepth)).x; // 0 1 - flSum += dot(v33Taps.xyzw, g_vShadow3x3PCFTerms0.yyyy); - - flSum += VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy, objDepth)).x * g_vShadow3x3PCFTerms0.z; - - return flSum; + float4 vPositionTextureSpace = mul(float4(vPositionWs.xyz, 1.0), matWorldToShadow); + vPositionTextureSpace.xyz /= vPositionTextureSpace.w; + + float2 shadowMapCenter = vPositionTextureSpace.xy; + + //if ( ( frac( shadowMapCenter.x ) != shadowMapCenter.x ) || ( frac( shadowMapCenter.y ) != shadowMapCenter.y ) ) + if ((shadowMapCenter.x < 0.0f) || (shadowMapCenter.x > 1.0f) || (shadowMapCenter.y < 0.0f) || (shadowMapCenter.y > 1.0f)) + return 1.0f; + + //float objDepth = saturate( vPositionTextureSpace.z - 0.000001 ); + float objDepth = 1 - vPositionTextureSpace.z; + + /* // Depth texture visualization + if ( 1 ) + { + #define NUM_SAMPLES 128.0 + float flSum = 0.0; + for ( int j = 0; j < NUM_SAMPLES; j++ ) + { + flSum += ( 1.0 / NUM_SAMPLES ) * ( VALVE_SAMPLE_SHADOW( g_tShadowBuffer, float3( shadowMapCenter.xy, j / NUM_SAMPLES ) ).r ); + } + return flSum; + } + //*/ + + //float flTexelEpsilonX = 1.0 / 4096.0; + //float flTexelEpsilonY = 1.0 / 4096.0; + //g_vShadow3x3PCFTerms0 = float4( 20.0 / 267.0, 33.0 / 267.0, 55.0 / 267.0, 0.0 ); + //g_vShadow3x3PCFTerms1 = float4( flTexelEpsilonX, flTexelEpsilonY, -flTexelEpsilonX, -flTexelEpsilonY ); + //g_vShadow3x3PCFTerms2 = float4( flTexelEpsilonX, flTexelEpsilonY, 0.0, 0.0 ); + //g_vShadow3x3PCFTerms3 = float4( -flTexelEpsilonX, -flTexelEpsilonY, 0.0, 0.0 ); + + float4 v20Taps; + v20Taps.x = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.xy, objDepth)).x; // 1 1 + v20Taps.y = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.zy, objDepth)).x; // -1 1 + v20Taps.z = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.xw, objDepth)).x; // 1 -1 + v20Taps.w = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.zw, objDepth)).x; // -1 -1 + float flSum = dot(v20Taps.xyzw, float4(0.25, 0.25, 0.25, 0.25)); + if ((flSum == 0.0) || (flSum == 1.0)) + return flSum; + flSum *= g_vShadow3x3PCFTerms0.x * 4.0; + + float4 v33Taps; + v33Taps.x = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms2.xz, objDepth)).x; // 1 0 + v33Taps.y = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms3.xz, objDepth)).x; // -1 0 + v33Taps.z = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms3.zy, objDepth)).x; // 0 -1 + v33Taps.w = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms2.zy, objDepth)).x; // 0 1 + flSum += dot(v33Taps.xyzw, g_vShadow3x3PCFTerms0.yyyy); + + flSum += VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy, objDepth)).x * g_vShadow3x3PCFTerms0.z; + + return flSum; } //--------------------------------------------------------------------------------------------------------------------------------------------------------- float3 ComputeOverrideLightmap(float2 vLightmapUV) { - float4 vLightmapTexel = tex2D(g_tOverrideLightmap, vLightmapUV.xy); + float4 vLightmapTexel = tex2D(g_tOverrideLightmap, vLightmapUV.xy); - // This path looks over-saturated - //return g_vOverrideLightmapScale * ( unity_Lightmap_HDR.x * pow( vLightmapTexel.a, unity_Lightmap_HDR.y ) ) * vLightmapTexel.rgb; + // This path looks over-saturated + //return g_vOverrideLightmapScale * ( unity_Lightmap_HDR.x * pow( vLightmapTexel.a, unity_Lightmap_HDR.y ) ) * vLightmapTexel.rgb; - // This path looks less broken - return g_vOverrideLightmapScale * (unity_Lightmap_HDR.x * vLightmapTexel.a) * sqrt(vLightmapTexel.rgb); + // This path looks less broken + return g_vOverrideLightmapScale * (unity_Lightmap_HDR.x * vLightmapTexel.a) * sqrt(vLightmapTexel.rgb); } //--------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -281,408 +281,408 @@ float3 ComputeOverrideLightmap(float2 vLightmapUV) */ float GetSplitSphereIndexForDirshadows(float3 wpos) { - float3 fromCenter0 = wpos.xyz - g_vDirShadowSplitSpheres[0].xyz; - float3 fromCenter1 = wpos.xyz - g_vDirShadowSplitSpheres[1].xyz; - float3 fromCenter2 = wpos.xyz - g_vDirShadowSplitSpheres[2].xyz; - float3 fromCenter3 = wpos.xyz - g_vDirShadowSplitSpheres[3].xyz; - float4 distances2 = float4(dot(fromCenter0, fromCenter0), dot(fromCenter1, fromCenter1), dot(fromCenter2, fromCenter2), dot(fromCenter3, fromCenter3)); - - float4 vDirShadowSplitSphereSqRadii; - vDirShadowSplitSphereSqRadii.x = g_vDirShadowSplitSpheres[0].w; - vDirShadowSplitSphereSqRadii.y = g_vDirShadowSplitSpheres[1].w; - vDirShadowSplitSphereSqRadii.z = g_vDirShadowSplitSpheres[2].w; - vDirShadowSplitSphereSqRadii.w = g_vDirShadowSplitSpheres[3].w; - fixed4 weights = float4(distances2 < vDirShadowSplitSphereSqRadii); - weights.yzw = saturate(weights.yzw - weights.xyz); - return 4 - dot(weights, float4(4, 3, 2, 1)); + float3 fromCenter0 = wpos.xyz - g_vDirShadowSplitSpheres[0].xyz; + float3 fromCenter1 = wpos.xyz - g_vDirShadowSplitSpheres[1].xyz; + float3 fromCenter2 = wpos.xyz - g_vDirShadowSplitSpheres[2].xyz; + float3 fromCenter3 = wpos.xyz - g_vDirShadowSplitSpheres[3].xyz; + float4 distances2 = float4(dot(fromCenter0, fromCenter0), dot(fromCenter1, fromCenter1), dot(fromCenter2, fromCenter2), dot(fromCenter3, fromCenter3)); + + float4 vDirShadowSplitSphereSqRadii; + vDirShadowSplitSphereSqRadii.x = g_vDirShadowSplitSpheres[0].w; + vDirShadowSplitSphereSqRadii.y = g_vDirShadowSplitSpheres[1].w; + vDirShadowSplitSphereSqRadii.z = g_vDirShadowSplitSpheres[2].w; + vDirShadowSplitSphereSqRadii.w = g_vDirShadowSplitSpheres[3].w; + fixed4 weights = float4(distances2 < vDirShadowSplitSphereSqRadii); + weights.yzw = saturate(weights.yzw - weights.xyz); + return 4 - dot(weights, float4(4, 3, 2, 1)); } //--------------------------------------------------------------------------------------------------------------------------------------------------------- void OverrideLightColorWithSplitDebugInfo(inout float3 lightColor, int shadowSplitIndex) { - #if DEBUG_SHADOWS_SPLIT - // Slightly intensified colors of ShadowCascadeSplitGUI + 2 new for point light (ie splitIndex 4 and 5) - const fixed3 kSplitColors[6] = - { - fixed3(0.5, 0.5, 0.7), - fixed3(0.5, 0.7, 0.5), - fixed3(0.7, 0.7, 0.5), - fixed3(0.7, 0.5, 0.5), - - fixed3(0.7, 0.5, 0.7), - fixed3(0.5, 0.7, 0.7), - }; - lightColor = kSplitColors[shadowSplitIndex]; - #endif + #if DEBUG_SHADOWS_SPLIT + // Slightly intensified colors of ShadowCascadeSplitGUI + 2 new for point light (ie splitIndex 4 and 5) + const fixed3 kSplitColors[6] = + { + fixed3(0.5, 0.5, 0.7), + fixed3(0.5, 0.7, 0.5), + fixed3(0.7, 0.7, 0.5), + fixed3(0.7, 0.5, 0.5), + + fixed3(0.7, 0.5, 0.7), + fixed3(0.5, 0.7, 0.7), + }; + lightColor = kSplitColors[shadowSplitIndex]; + #endif } //--------------------------------------------------------------------------------------------------------------------------------------------------------- LightingTerms_t ComputeLighting(float3 vPositionWs, float3 vNormalWs, float3 vTangentUWs, float3 vTangentVWs, float2 vRoughness, - float3 vReflectance, float flFresnelExponent, float4 vLightmapUV) + float3 vReflectance, float flFresnelExponent, float4 vLightmapUV) { - LightingTerms_t o; - o.vDiffuse = float3(0.0, 0.0, 0.0); - o.vSpecular = float3(0.0, 0.0, 0.0); - o.vIndirectDiffuse = float3(0.0, 0.0, 0.0); - o.vIndirectSpecular = float3(0.0, 0.0, 0.0); - o.vTransmissiveSunlight = float3(0.0, 0.0, 0.0); - - // Convert roughness to scale and exp - float2 vDiffuseExponent; - float2 vSpecularExponent; - float2 vSpecularScale; - RoughnessEllipseToScaleAndExp(vRoughness.xy, vDiffuseExponent.xy, vSpecularExponent.xy, vSpecularScale.xy); - - // Get positions between the clip planes of the frustum in 0..1 coordinates - //float3 vPositionCs = float3( vPosition4Cs.xy / vPosition4Cs.w, vPosition4Cs.z ); - //vPositionCs.xy = ( vPositionCs.xy * 0.5 ) + 0.5; - - float3 vPositionToCameraDirWs = CalculatePositionToCameraDirWs(vPositionWs.xyz); - - // Compute tangent frame relative to per-pixel normal - float3 vEllipseUWs = normalize(cross(vTangentVWs.xyz, vNormalWs.xyz)); - float3 vEllipseVWs = normalize(cross(vNormalWs.xyz, vTangentUWs.xyz)); - - //-------------------------------------// - // Point, spot, and directional lights // - //-------------------------------------// - int nNumLightsUsed = 0; - [loop] for (int i = 0; i < g_nNumLights; i++) - { - float3 vPositionToLightRayWs = g_vLightPosition_flInvRadius[i].xyz - vPositionWs.xyz; - float flDistToLightSq = dot(vPositionToLightRayWs.xyz, vPositionToLightRayWs.xyz); - if (flDistToLightSq > g_vLightFalloffParams[i].z) // .z stores radius squared of light - { - // Outside light range - continue; - } - - if (dot(vNormalWs.xyz, vPositionToLightRayWs.xyz) <= 0.0) - { - // Backface cull pixel to this light - continue; - } - - float3 vPositionToLightDirWs = normalize(vPositionToLightRayWs.xyz); - float flOuterConeCos = g_vSpotLightInnerOuterConeCosines[i].y; - float flTemp = dot(vPositionToLightDirWs.xyz, -g_vLightDirection[i].xyz) - flOuterConeCos; - if (flTemp <= 0.0) - { - // Outside spotlight cone - continue; - } - float3 vSpotAtten = saturate(flTemp * g_vSpotLightInnerOuterConeCosines[i].z).xxx; - - nNumLightsUsed++; - - //[branch] if ( g_vLightShadowIndex_vLightParams[ i ].y != 0 ) // If has light cookie - //{ - // // Light cookie - // float4 vPositionTextureSpace = mul( float4( vPositionWs.xyz, 1.0 ), g_matWorldToLightCookie[ i ] ); - // vPositionTextureSpace.xyz /= vPositionTextureSpace.w; - // vSpotAtten.rgb = Tex3DLevel( g_tVrLightCookieTexture, vPositionTextureSpace.xyz, 0.0 ).rgb; - //} - - float flLightFalloff = DistanceFalloff(flDistToLightSq, g_vLightPosition_flInvRadius[i].w, g_vLightFalloffParams[i].xy); - - float flShadowScalar = 1.0; - int shadowSplitIndex = 0; - if (g_vLightShadowIndex_vLightParams[i].x != 0.0) - { - if (g_vLightFalloffParams[i].w == LIGHT_TYPE_DIRECTIONAL) - { - shadowSplitIndex = GetSplitSphereIndexForDirshadows(vPositionWs); - } - - if (g_vLightFalloffParams[i].w == LIGHT_TYPE_POINT) - { - float3 absPos = abs(vPositionToLightDirWs); - shadowSplitIndex = (vPositionToLightDirWs.z > 0) ? CUBEMAPFACE_NEGATIVE_Z : CUBEMAPFACE_POSITIVE_Z; - if (absPos.x > absPos.y) - { - if (absPos.x > absPos.z) - { - shadowSplitIndex = (vPositionToLightDirWs.x > 0) ? CUBEMAPFACE_NEGATIVE_X : CUBEMAPFACE_POSITIVE_X; - } - } - else - { - if (absPos.y > absPos.z) - { - shadowSplitIndex = (vPositionToLightDirWs.y > 0) ? CUBEMAPFACE_NEGATIVE_Y : CUBEMAPFACE_POSITIVE_Y; - } - } - } - - flShadowScalar = ComputeShadow_PCF_3x3_Gaussian(vPositionWs.xyz, g_matWorldToShadow[i * MAX_SHADOWMAP_PER_LIGHTS + shadowSplitIndex]); - - if (flShadowScalar <= 0.0) - continue; - } - - float4 vLightingTerms = ComputeDiffuseAndSpecularTerms(g_vLightShadowIndex_vLightParams[i].z != 0.0, g_vLightShadowIndex_vLightParams[i].w != 0.0, - vNormalWs.xyz, vEllipseUWs.xyz, vEllipseVWs.xyz, - vPositionToLightDirWs.xyz, vPositionToCameraDirWs.xyz, - vDiffuseExponent.xy, vSpecularExponent.xy, vSpecularScale.xy, vReflectance.rgb, flFresnelExponent); - - float3 vLightColor = g_vLightColor[i].rgb; - OverrideLightColorWithSplitDebugInfo(vLightColor, shadowSplitIndex); - - float3 vLightMask = vLightColor.rgb * flShadowScalar * flLightFalloff * vSpotAtten.rgb; - o.vDiffuse.rgb += vLightingTerms.xxx * vLightMask.rgb; - o.vSpecular.rgb += vLightingTerms.yzw * vLightMask.rgb; - } - - /* // Visualize number of lights for the first 7 as RGBCMYW - if ( nNumLightsUsed == 0 ) - o.vDiffuse.rgb = float3( 0.0, 0.0, 0.0 ); - else if ( nNumLightsUsed == 1 ) - o.vDiffuse.rgb = float3( 1.0, 0.0, 0.0 ); - else if ( nNumLightsUsed == 2 ) - o.vDiffuse.rgb = float3( 0.0, 1.0, 0.0 ); - else if ( nNumLightsUsed == 3 ) - o.vDiffuse.rgb = float3( 0.0, 0.0, 1.0 ); - else if ( nNumLightsUsed == 4 ) - o.vDiffuse.rgb = float3( 0.0, 1.0, 1.0 ); - else if ( nNumLightsUsed == 5 ) - o.vDiffuse.rgb = float3( 1.0, 0.0, 1.0 ); - else if ( nNumLightsUsed == 6 ) - o.vDiffuse.rgb = float3( 1.0, 1.0, 0.0 ); - else - o.vDiffuse.rgb = float3( 1.0, 1.0, 1.0 ); - o.vDiffuse.rgb *= float3( 2.0, 2.0, 2.0 ); - o.vSpecular.rgb = float3( 0.0, 0.0, 0.0 ); - return o; - //*/ - - // Apply specular reflectance to diffuse term (specular term already accounts for this in the fresnel equation) - o.vDiffuse.rgb *= (float3(1.0, 1.0, 1.0) - vReflectance.rgb); - - //------------------// - // Indirect diffuse // - //------------------// + LightingTerms_t o; + o.vDiffuse = float3(0.0, 0.0, 0.0); + o.vSpecular = float3(0.0, 0.0, 0.0); + o.vIndirectDiffuse = float3(0.0, 0.0, 0.0); + o.vIndirectSpecular = float3(0.0, 0.0, 0.0); + o.vTransmissiveSunlight = float3(0.0, 0.0, 0.0); + + // Convert roughness to scale and exp + float2 vDiffuseExponent; + float2 vSpecularExponent; + float2 vSpecularScale; + RoughnessEllipseToScaleAndExp(vRoughness.xy, vDiffuseExponent.xy, vSpecularExponent.xy, vSpecularScale.xy); + + // Get positions between the clip planes of the frustum in 0..1 coordinates + //float3 vPositionCs = float3( vPosition4Cs.xy / vPosition4Cs.w, vPosition4Cs.z ); + //vPositionCs.xy = ( vPositionCs.xy * 0.5 ) + 0.5; + + float3 vPositionToCameraDirWs = CalculatePositionToCameraDirWs(vPositionWs.xyz); + + // Compute tangent frame relative to per-pixel normal + float3 vEllipseUWs = normalize(cross(vTangentVWs.xyz, vNormalWs.xyz)); + float3 vEllipseVWs = normalize(cross(vNormalWs.xyz, vTangentUWs.xyz)); + + //-------------------------------------// + // Point, spot, and directional lights // + //-------------------------------------// + int nNumLightsUsed = 0; + [loop] for (int i = 0; i < g_nNumLights; i++) + { + float3 vPositionToLightRayWs = g_vLightPosition_flInvRadius[i].xyz - vPositionWs.xyz; + float flDistToLightSq = dot(vPositionToLightRayWs.xyz, vPositionToLightRayWs.xyz); + if (flDistToLightSq > g_vLightFalloffParams[i].z) // .z stores radius squared of light + { + // Outside light range + continue; + } + + if (dot(vNormalWs.xyz, vPositionToLightRayWs.xyz) <= 0.0) + { + // Backface cull pixel to this light + continue; + } + + float3 vPositionToLightDirWs = normalize(vPositionToLightRayWs.xyz); + float flOuterConeCos = g_vSpotLightInnerOuterConeCosines[i].y; + float flTemp = dot(vPositionToLightDirWs.xyz, -g_vLightDirection[i].xyz) - flOuterConeCos; + if (flTemp <= 0.0) + { + // Outside spotlight cone + continue; + } + float3 vSpotAtten = saturate(flTemp * g_vSpotLightInnerOuterConeCosines[i].z).xxx; + + nNumLightsUsed++; + + //[branch] if ( g_vLightShadowIndex_vLightParams[ i ].y != 0 ) // If has light cookie + //{ + // // Light cookie + // float4 vPositionTextureSpace = mul( float4( vPositionWs.xyz, 1.0 ), g_matWorldToLightCookie[ i ] ); + // vPositionTextureSpace.xyz /= vPositionTextureSpace.w; + // vSpotAtten.rgb = Tex3DLevel( g_tVrLightCookieTexture, vPositionTextureSpace.xyz, 0.0 ).rgb; + //} + + float flLightFalloff = DistanceFalloff(flDistToLightSq, g_vLightPosition_flInvRadius[i].w, g_vLightFalloffParams[i].xy); + + float flShadowScalar = 1.0; + int shadowSplitIndex = 0; + if (g_vLightShadowIndex_vLightParams[i].x != 0.0) + { + if (g_vLightFalloffParams[i].w == LIGHT_TYPE_DIRECTIONAL) + { + shadowSplitIndex = GetSplitSphereIndexForDirshadows(vPositionWs); + } + + if (g_vLightFalloffParams[i].w == LIGHT_TYPE_POINT) + { + float3 absPos = abs(vPositionToLightDirWs); + shadowSplitIndex = (vPositionToLightDirWs.z > 0) ? CUBEMAPFACE_NEGATIVE_Z : CUBEMAPFACE_POSITIVE_Z; + if (absPos.x > absPos.y) + { + if (absPos.x > absPos.z) + { + shadowSplitIndex = (vPositionToLightDirWs.x > 0) ? CUBEMAPFACE_NEGATIVE_X : CUBEMAPFACE_POSITIVE_X; + } + } + else + { + if (absPos.y > absPos.z) + { + shadowSplitIndex = (vPositionToLightDirWs.y > 0) ? CUBEMAPFACE_NEGATIVE_Y : CUBEMAPFACE_POSITIVE_Y; + } + } + } + + flShadowScalar = ComputeShadow_PCF_3x3_Gaussian(vPositionWs.xyz, g_matWorldToShadow[i * MAX_SHADOWMAP_PER_LIGHTS + shadowSplitIndex]); + + if (flShadowScalar <= 0.0) + continue; + } + + float4 vLightingTerms = ComputeDiffuseAndSpecularTerms(g_vLightShadowIndex_vLightParams[i].z != 0.0, g_vLightShadowIndex_vLightParams[i].w != 0.0, + vNormalWs.xyz, vEllipseUWs.xyz, vEllipseVWs.xyz, + vPositionToLightDirWs.xyz, vPositionToCameraDirWs.xyz, + vDiffuseExponent.xy, vSpecularExponent.xy, vSpecularScale.xy, vReflectance.rgb, flFresnelExponent); + + float3 vLightColor = g_vLightColor[i].rgb; + OverrideLightColorWithSplitDebugInfo(vLightColor, shadowSplitIndex); + + float3 vLightMask = vLightColor.rgb * flShadowScalar * flLightFalloff * vSpotAtten.rgb; + o.vDiffuse.rgb += vLightingTerms.xxx * vLightMask.rgb; + o.vSpecular.rgb += vLightingTerms.yzw * vLightMask.rgb; + } + + /* // Visualize number of lights for the first 7 as RGBCMYW + if ( nNumLightsUsed == 0 ) + o.vDiffuse.rgb = float3( 0.0, 0.0, 0.0 ); + else if ( nNumLightsUsed == 1 ) + o.vDiffuse.rgb = float3( 1.0, 0.0, 0.0 ); + else if ( nNumLightsUsed == 2 ) + o.vDiffuse.rgb = float3( 0.0, 1.0, 0.0 ); + else if ( nNumLightsUsed == 3 ) + o.vDiffuse.rgb = float3( 0.0, 0.0, 1.0 ); + else if ( nNumLightsUsed == 4 ) + o.vDiffuse.rgb = float3( 0.0, 1.0, 1.0 ); + else if ( nNumLightsUsed == 5 ) + o.vDiffuse.rgb = float3( 1.0, 0.0, 1.0 ); + else if ( nNumLightsUsed == 6 ) + o.vDiffuse.rgb = float3( 1.0, 1.0, 0.0 ); + else + o.vDiffuse.rgb = float3( 1.0, 1.0, 1.0 ); + o.vDiffuse.rgb *= float3( 2.0, 2.0, 2.0 ); + o.vSpecular.rgb = float3( 0.0, 0.0, 0.0 ); + return o; + //*/ + + // Apply specular reflectance to diffuse term (specular term already accounts for this in the fresnel equation) + o.vDiffuse.rgb *= (float3(1.0, 1.0, 1.0) - vReflectance.rgb); + + //------------------// + // Indirect diffuse // + //------------------// #if ( S_OVERRIDE_LIGHTMAP ) - { - o.vIndirectDiffuse.rgb += ComputeOverrideLightmap(vLightmapUV.xy); - } + { + o.vIndirectDiffuse.rgb += ComputeOverrideLightmap(vLightmapUV.xy); + } #elif ( LIGHTMAP_ON ) - { - // Baked lightmaps - float4 bakedColorTex = Tex2DLevel(unity_Lightmap, vLightmapUV.xy, 0.0); - float3 bakedColor = DecodeLightmap(bakedColorTex); + { + // Baked lightmaps + float4 bakedColorTex = Tex2DLevel(unity_Lightmap, vLightmapUV.xy, 0.0); + float3 bakedColor = DecodeLightmap(bakedColorTex); #if ( DIRLIGHTMAP_OFF ) // Directional Mode = Non Directional - { - o.vIndirectDiffuse.rgb += bakedColor.rgb; - - //o_gi.indirect.diffuse = bakedColor; - // - //#ifdef SHADOWS_SCREEN - // o_gi.indirect.diffuse = MixLightmapWithRealtimeAttenuation (o_gi.indirect.diffuse, data.atten, bakedColorTex); - //#endif // SHADOWS_SCREEN - } + { + o.vIndirectDiffuse.rgb += bakedColor.rgb; + + //o_gi.indirect.diffuse = bakedColor; + // + //#ifdef SHADOWS_SCREEN + // o_gi.indirect.diffuse = MixLightmapWithRealtimeAttenuation (o_gi.indirect.diffuse, data.atten, bakedColorTex); + //#endif // SHADOWS_SCREEN + } #elif ( DIRLIGHTMAP_COMBINED ) // Directional Mode = Directional - { - //o.vIndirectDiffuse.rgb = float3( 0.0, 1.0, 0.0 ); + { + //o.vIndirectDiffuse.rgb = float3( 0.0, 1.0, 0.0 ); - float4 bakedDirTex = Tex2DLevelFromSampler(unity_LightmapInd, unity_Lightmap, vLightmapUV.xy, 0.0); - //float flHalfLambert = dot( vNormalWs.xyz, bakedDirTex.xyz - 0.5 ) + 0.5; - //o.vIndirectDiffuse.rgb += bakedColor.rgb * flHalfLambert / bakedDirTex.w; + float4 bakedDirTex = Tex2DLevelFromSampler(unity_LightmapInd, unity_Lightmap, vLightmapUV.xy, 0.0); + //float flHalfLambert = dot( vNormalWs.xyz, bakedDirTex.xyz - 0.5 ) + 0.5; + //o.vIndirectDiffuse.rgb += bakedColor.rgb * flHalfLambert / bakedDirTex.w; - float flHalfLambert = dot(vNormalWs.xyz, normalize(bakedDirTex.xyz - 0.5));// + ( 1.0 - length( bakedDirTex.xyz - 0.5 ) ); - o.vIndirectDiffuse.rgb += bakedColor.rgb * flHalfLambert / (bakedDirTex.w); + float flHalfLambert = dot(vNormalWs.xyz, normalize(bakedDirTex.xyz - 0.5));// + ( 1.0 - length( bakedDirTex.xyz - 0.5 ) ); + o.vIndirectDiffuse.rgb += bakedColor.rgb * flHalfLambert / (bakedDirTex.w); - //#ifdef SHADOWS_SCREEN - // o_gi.indirect.diffuse = MixLightmapWithRealtimeAttenuation (o_gi.indirect.diffuse, data.atten, bakedColorTex); - //#endif // SHADOWS_SCREEN - } + //#ifdef SHADOWS_SCREEN + // o_gi.indirect.diffuse = MixLightmapWithRealtimeAttenuation (o_gi.indirect.diffuse, data.atten, bakedColorTex); + //#endif // SHADOWS_SCREEN + } #elif ( DIRLIGHTMAP_SEPARATE ) // Directional Mode = Directional Specular - { - // Left halves of both intensity and direction lightmaps store direct light; right halves store indirect. - float2 vUvDirect = vLightmapUV.xy; - float2 vUvIndirect = vLightmapUV.xy + float2(0.5, 0.0); - - // Direct Diffuse - float4 bakedDirTex = float4(0.0, 0.0, 0.0, 0.0); - if (!g_bIndirectLightmaps) - { - bakedDirTex = Tex2DLevelFromSampler(unity_LightmapInd, unity_Lightmap, vUvDirect.xy, 0.0); - //float flHalfLambert = dot( vNormalWs.xyz, bakedDirTex.xyz - 0.5 ) + 0.5; - //o.vDiffuse.rgb += bakedColor.rgb * flHalfLambert / bakedDirTex.w; - - float flHalfLambert = ClampToPositive(dot(vNormalWs.xyz, normalize(bakedDirTex.xyz - 0.5)));// + ( 1.0 - length( bakedDirTex.xyz - 0.5 ) ); - o.vDiffuse.rgb += bakedColor.rgb * flHalfLambert / (bakedDirTex.w); - } - - // Indirect Diffuse - float4 bakedIndirTex = float4(0.0, 0.0, 0.0, 0.0); - float3 vBakedIndirectColor = float3(0.0, 0.0, 0.0); - if (1) - { - vBakedIndirectColor.rgb = DecodeLightmap(Tex2DLevel(unity_Lightmap, vUvIndirect.xy, 0.0)); - bakedIndirTex = Tex2DLevelFromSampler(unity_LightmapInd, unity_Lightmap, vUvIndirect.xy, 0.0); - - //float flHalfLambert = dot( vNormalWs.xyz, bakedIndirTex.xyz - 0.5 ) + 0.5; - //o.vIndirectDiffuse.rgb += vBakedIndirectColor.rgb * flHalfLambert / bakedIndirTex.w; - - float flHalfLambert = dot(vNormalWs.xyz, normalize(bakedIndirTex.xyz - 0.5));// + ( 1.0 - length( bakedIndirTex.xyz - 0.5 ) ); - o.vIndirectDiffuse.rgb += vBakedIndirectColor.rgb * flHalfLambert / (bakedIndirTex.w); - } - - // Direct Specular - if (!g_bIndirectLightmaps) - { - UnityLight o_light; - o.vIndirectDiffuse.rgb += DecodeDirectionalSpecularLightmap(bakedColor, bakedDirTex, vNormalWs, false, 0, o_light); - - float4 vLightingTerms = ComputeDiffuseAndSpecularTerms(false, true, - vNormalWs.xyz, vEllipseUWs.xyz, vEllipseVWs.xyz, - o_light.dir.xyz, vPositionToCameraDirWs.xyz, - vDiffuseExponent.xy, vSpecularExponent.xy, vSpecularScale.xy, vReflectance.rgb, flFresnelExponent); - - float3 vLightColor = o_light.color; - float3 vLightMask = vLightColor.rgb; - o.vSpecular.rgb += vLightingTerms.yzw * vLightMask.rgb; - } - - // Indirect Specular - //if ( 1 ) - //{ - // UnityLight o_light; - // o.vIndirectSpecular.rgb += DecodeDirectionalSpecularLightmap( vBakedIndirectColor, bakedIndirTex, vNormalWs, false, 0, o_light ); - //} - } + { + // Left halves of both intensity and direction lightmaps store direct light; right halves store indirect. + float2 vUvDirect = vLightmapUV.xy; + float2 vUvIndirect = vLightmapUV.xy + float2(0.5, 0.0); + + // Direct Diffuse + float4 bakedDirTex = float4(0.0, 0.0, 0.0, 0.0); + if (!g_bIndirectLightmaps) + { + bakedDirTex = Tex2DLevelFromSampler(unity_LightmapInd, unity_Lightmap, vUvDirect.xy, 0.0); + //float flHalfLambert = dot( vNormalWs.xyz, bakedDirTex.xyz - 0.5 ) + 0.5; + //o.vDiffuse.rgb += bakedColor.rgb * flHalfLambert / bakedDirTex.w; + + float flHalfLambert = ClampToPositive(dot(vNormalWs.xyz, normalize(bakedDirTex.xyz - 0.5)));// + ( 1.0 - length( bakedDirTex.xyz - 0.5 ) ); + o.vDiffuse.rgb += bakedColor.rgb * flHalfLambert / (bakedDirTex.w); + } + + // Indirect Diffuse + float4 bakedIndirTex = float4(0.0, 0.0, 0.0, 0.0); + float3 vBakedIndirectColor = float3(0.0, 0.0, 0.0); + if (1) + { + vBakedIndirectColor.rgb = DecodeLightmap(Tex2DLevel(unity_Lightmap, vUvIndirect.xy, 0.0)); + bakedIndirTex = Tex2DLevelFromSampler(unity_LightmapInd, unity_Lightmap, vUvIndirect.xy, 0.0); + + //float flHalfLambert = dot( vNormalWs.xyz, bakedIndirTex.xyz - 0.5 ) + 0.5; + //o.vIndirectDiffuse.rgb += vBakedIndirectColor.rgb * flHalfLambert / bakedIndirTex.w; + + float flHalfLambert = dot(vNormalWs.xyz, normalize(bakedIndirTex.xyz - 0.5));// + ( 1.0 - length( bakedIndirTex.xyz - 0.5 ) ); + o.vIndirectDiffuse.rgb += vBakedIndirectColor.rgb * flHalfLambert / (bakedIndirTex.w); + } + + // Direct Specular + if (!g_bIndirectLightmaps) + { + UnityLight o_light; + o.vIndirectDiffuse.rgb += DecodeDirectionalSpecularLightmap(bakedColor, bakedDirTex, vNormalWs, false, 0, o_light); + + float4 vLightingTerms = ComputeDiffuseAndSpecularTerms(false, true, + vNormalWs.xyz, vEllipseUWs.xyz, vEllipseVWs.xyz, + o_light.dir.xyz, vPositionToCameraDirWs.xyz, + vDiffuseExponent.xy, vSpecularExponent.xy, vSpecularScale.xy, vReflectance.rgb, flFresnelExponent); + + float3 vLightColor = o_light.color; + float3 vLightMask = vLightColor.rgb; + o.vSpecular.rgb += vLightingTerms.yzw * vLightMask.rgb; + } + + // Indirect Specular + //if ( 1 ) + //{ + // UnityLight o_light; + // o.vIndirectSpecular.rgb += DecodeDirectionalSpecularLightmap( vBakedIndirectColor, bakedIndirTex, vNormalWs, false, 0, o_light ); + //} + } #endif - } + } #elif ( UNITY_SHOULD_SAMPLE_SH ) - { - // Light probe - o.vIndirectDiffuse.rgb += ShadeSH9(float4(vNormalWs.xyz, 1.0)); - } + { + // Light probe + o.vIndirectDiffuse.rgb += ShadeSH9(float4(vNormalWs.xyz, 1.0)); + } #endif #if ( DYNAMICLIGHTMAP_ON ) - { - float4 realtimeColorTex = Tex2DLevel(unity_DynamicLightmap, vLightmapUV.zw, 0.0); - float3 realtimeColor = DecodeRealtimeLightmap(realtimeColorTex); + { + float4 realtimeColorTex = Tex2DLevel(unity_DynamicLightmap, vLightmapUV.zw, 0.0); + float3 realtimeColor = DecodeRealtimeLightmap(realtimeColorTex); #if ( DIRLIGHTMAP_OFF ) - { - o.vIndirectDiffuse.rgb += realtimeColor.rgb; - } + { + o.vIndirectDiffuse.rgb += realtimeColor.rgb; + } #elif ( DIRLIGHTMAP_COMBINED ) - { - float4 realtimeDirTex = Tex2DLevelFromSampler(unity_DynamicDirectionality, unity_DynamicLightmap, vLightmapUV.zw, 0.0); - o.vIndirectDiffuse.rgb += DecodeDirectionalLightmap(realtimeColor, realtimeDirTex, vNormalWs); - } + { + float4 realtimeDirTex = Tex2DLevelFromSampler(unity_DynamicDirectionality, unity_DynamicLightmap, vLightmapUV.zw, 0.0); + o.vIndirectDiffuse.rgb += DecodeDirectionalLightmap(realtimeColor, realtimeDirTex, vNormalWs); + } #elif ( DIRLIGHTMAP_SEPARATE ) - { - float4 realtimeDirTex = Tex2DLevelFromSampler(unity_DynamicDirectionality, unity_DynamicLightmap, vLightmapUV.zw, 0.0); - o.vIndirectDiffuse.rgb += DecodeDirectionalLightmap(realtimeColor, realtimeDirTex, vNormalWs); - - UnityLight o_light; - float4 realtimeNormalTex = Tex2DLevelFromSampler(unity_DynamicNormal, unity_DynamicLightmap, vLightmapUV.zw, 0.0); - o.vIndirectSpecular.rgb += DecodeDirectionalSpecularLightmap(realtimeColor, realtimeDirTex, vNormalWs, true, realtimeNormalTex, o_light); - - float4 vLightingTerms = ComputeDiffuseAndSpecularTerms(false, true, - vNormalWs.xyz, vEllipseUWs.xyz, vEllipseVWs.xyz, - o_light.dir.xyz, vPositionToCameraDirWs.xyz, - vDiffuseExponent.xy, vSpecularExponent.xy, vSpecularScale.xy, vReflectance.rgb, flFresnelExponent); - - float3 vLightColor = o_light.color; - float3 vLightMask = vLightColor.rgb; - o.vSpecular.rgb += vLightingTerms.yzw * vLightMask.rgb; - } + { + float4 realtimeDirTex = Tex2DLevelFromSampler(unity_DynamicDirectionality, unity_DynamicLightmap, vLightmapUV.zw, 0.0); + o.vIndirectDiffuse.rgb += DecodeDirectionalLightmap(realtimeColor, realtimeDirTex, vNormalWs); + + UnityLight o_light; + float4 realtimeNormalTex = Tex2DLevelFromSampler(unity_DynamicNormal, unity_DynamicLightmap, vLightmapUV.zw, 0.0); + o.vIndirectSpecular.rgb += DecodeDirectionalSpecularLightmap(realtimeColor, realtimeDirTex, vNormalWs, true, realtimeNormalTex, o_light); + + float4 vLightingTerms = ComputeDiffuseAndSpecularTerms(false, true, + vNormalWs.xyz, vEllipseUWs.xyz, vEllipseVWs.xyz, + o_light.dir.xyz, vPositionToCameraDirWs.xyz, + vDiffuseExponent.xy, vSpecularExponent.xy, vSpecularScale.xy, vReflectance.rgb, flFresnelExponent); + + float3 vLightColor = o_light.color; + float3 vLightMask = vLightColor.rgb; + o.vSpecular.rgb += vLightingTerms.yzw * vLightMask.rgb; + } #endif - } + } #endif - //-------------------// - // Indirect specular // - //-------------------// + //-------------------// + // Indirect specular // + //-------------------// #if ( 1 ) - { - float flRoughness = dot(vRoughness.xy, float2(0.5, 0.5)); + { + float flRoughness = dot(vRoughness.xy, float2(0.5, 0.5)); - float3 vReflectionDirWs = CalculateCameraReflectionDirWs(vPositionWs.xyz, vNormalWs.xyz); - float3 vReflectionDirWs0 = vReflectionDirWs.xyz; + float3 vReflectionDirWs = CalculateCameraReflectionDirWs(vPositionWs.xyz, vNormalWs.xyz); + float3 vReflectionDirWs0 = vReflectionDirWs.xyz; #if ( UNITY_SPECCUBE_BOX_PROJECTION ) - { - vReflectionDirWs0.xyz = BoxProjectedCubemapDirection(vReflectionDirWs.xyz, vPositionWs.xyz, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); - } + { + vReflectionDirWs0.xyz = BoxProjectedCubemapDirection(vReflectionDirWs.xyz, vPositionWs.xyz, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + } #endif - float3 vEnvMap0 = max(0.0, Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), unity_SpecCube0_HDR, vReflectionDirWs0, flRoughness)); + float3 vEnvMap0 = max(0.0, Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), unity_SpecCube0_HDR, vReflectionDirWs0, flRoughness)); #if ( 0 ) - { - const float flBlendFactor = 0.99999; - float flBlendLerp = saturate(unity_SpecCube0_BoxMin.w); - UNITY_BRANCH - if (flBlendLerp < flBlendFactor) - { - float3 vReflectionDirWs1 = vReflectionDirWs.xyz; + { + const float flBlendFactor = 0.99999; + float flBlendLerp = saturate(unity_SpecCube0_BoxMin.w); + UNITY_BRANCH + if (flBlendLerp < flBlendFactor) + { + float3 vReflectionDirWs1 = vReflectionDirWs.xyz; #if ( UNITY_SPECCUBE_BOX_PROJECTION ) - { - vReflectionDirWs1.xyz = BoxProjectedCubemapDirection(vReflectionDirWs.xyz, vPositionWs.xyz, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); - } + { + vReflectionDirWs1.xyz = BoxProjectedCubemapDirection(vReflectionDirWs.xyz, vPositionWs.xyz, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + } #endif - float3 vEnvMap1 = max(0.0, Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube1), unity_SpecCube1_HDR, vReflectionDirWs1, flRoughness)); - o.vIndirectSpecular.rgb += lerp(vEnvMap1.rgb, vEnvMap0.rgb, flBlendLerp); - } - else - { - o.vIndirectSpecular.rgb += vEnvMap0.rgb; - } - } + float3 vEnvMap1 = max(0.0, Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube1), unity_SpecCube1_HDR, vReflectionDirWs1, flRoughness)); + o.vIndirectSpecular.rgb += lerp(vEnvMap1.rgb, vEnvMap0.rgb, flBlendLerp); + } + else + { + o.vIndirectSpecular.rgb += vEnvMap0.rgb; + } + } #else - { - o.vIndirectSpecular.rgb += vEnvMap0.rgb; - } + { + o.vIndirectSpecular.rgb += vEnvMap0.rgb; + } #endif - } + } #endif - // Apply fresnel to indirect specular - float flVDotN = saturate(dot(vPositionToCameraDirWs.xyz, vNormalWs.xyz)); - float3 vMaxReflectance = vReflectance.rgb / (Luminance(vReflectance.rgb) + 0.0001); - float3 vFresnel = lerp(vReflectance.rgb, vMaxReflectance.rgb, pow(1.0 - flVDotN, flFresnelExponent)); + // Apply fresnel to indirect specular + float flVDotN = saturate(dot(vPositionToCameraDirWs.xyz, vNormalWs.xyz)); + float3 vMaxReflectance = vReflectance.rgb / (Luminance(vReflectance.rgb) + 0.0001); + float3 vFresnel = lerp(vReflectance.rgb, vMaxReflectance.rgb, pow(1.0 - flVDotN, flFresnelExponent)); - o.vIndirectSpecular.rgb *= vFresnel.rgb; - o.vIndirectSpecular.rgb *= g_flCubeMapScalar; // !!! FIXME: This also contains lightmap spec + o.vIndirectSpecular.rgb *= vFresnel.rgb; + o.vIndirectSpecular.rgb *= g_flCubeMapScalar; // !!! FIXME: This also contains lightmap spec - // Since we have indirect specular, apply reflectance to indirect diffuse - o.vIndirectDiffuse.rgb *= (float3(1.0, 1.0, 1.0) - vReflectance.rgb); + // Since we have indirect specular, apply reflectance to indirect diffuse + o.vIndirectDiffuse.rgb *= (float3(1.0, 1.0, 1.0) - vReflectance.rgb); - return o; + return o; } //--------------------------------------------------------------------------------------------------------------------------------------------------------- LightingTerms_t ComputeLightingDiffuseOnly(float3 vPositionWs, float3 vNormalWs, float3 vTangentUWs, float3 vTangentVWs, float2 vRoughness, float4 vLightmapUV) { - LightingTerms_t lightingTerms = ComputeLighting(vPositionWs, vNormalWs, vTangentUWs, vTangentVWs, vRoughness, 0.0, 1.0, vLightmapUV.xyzw); + LightingTerms_t lightingTerms = ComputeLighting(vPositionWs, vNormalWs, vTangentUWs, vTangentVWs, vRoughness, 0.0, 1.0, vLightmapUV.xyzw); - lightingTerms.vSpecular = float3(0.0, 0.0, 0.0); - lightingTerms.vIndirectSpecular = float3(0.0, 0.0, 0.0); + lightingTerms.vSpecular = float3(0.0, 0.0, 0.0); + lightingTerms.vIndirectSpecular = float3(0.0, 0.0, 0.0); - return lightingTerms; + return lightingTerms; } //--------------------------------------------------------------------------------------------------------------------------------------------------------- float3 CubeMapBoxProjection(float3 vPositionCubemapLocal, float3 vNormalCubemapLocal, float3 vCameraPositionCubemapLocal, float3 vBoxMins, float3 vBoxMaxs) { - float3 vCameraToPositionRayCubemapLocal = vPositionCubemapLocal.xyz - vCameraPositionCubemapLocal.xyz; - float3 vCameraToPositionRayReflectedCubemapLocal = reflect(vCameraToPositionRayCubemapLocal.xyz, vNormalCubemapLocal.xyz); + float3 vCameraToPositionRayCubemapLocal = vPositionCubemapLocal.xyz - vCameraPositionCubemapLocal.xyz; + float3 vCameraToPositionRayReflectedCubemapLocal = reflect(vCameraToPositionRayCubemapLocal.xyz, vNormalCubemapLocal.xyz); - float3 vIntersectA = (vBoxMaxs.xyz - vPositionCubemapLocal.xyz) / vCameraToPositionRayReflectedCubemapLocal.xyz; - float3 vIntersectB = (vBoxMins.xyz - vPositionCubemapLocal.xyz) / vCameraToPositionRayReflectedCubemapLocal.xyz; + float3 vIntersectA = (vBoxMaxs.xyz - vPositionCubemapLocal.xyz) / vCameraToPositionRayReflectedCubemapLocal.xyz; + float3 vIntersectB = (vBoxMins.xyz - vPositionCubemapLocal.xyz) / vCameraToPositionRayReflectedCubemapLocal.xyz; - float3 vIntersect = max(vIntersectA.xyz, vIntersectB.xyz); - float flDistance = min(vIntersect.x, min(vIntersect.y, vIntersect.z)); + float3 vIntersect = max(vIntersectA.xyz, vIntersectB.xyz); + float flDistance = min(vIntersect.x, min(vIntersect.y, vIntersect.z)); - float3 vReflectDirectionWs = vPositionCubemapLocal.xyz + vCameraToPositionRayReflectedCubemapLocal.xyz * flDistance; + float3 vReflectDirectionWs = vPositionCubemapLocal.xyz + vCameraToPositionRayReflectedCubemapLocal.xyz * flDistance; - return vReflectDirectionWs; + return vReflectDirectionWs; } #endif diff --git a/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_standard.shader b/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_standard.shader index f257ced61ab..0211ee7876d 100755 --- a/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_standard.shader +++ b/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_standard.shader @@ -1,634 +1,634 @@ -// Copyright (c) Valve Corporation, All rights reserved. ====================================================================================================== +// Copyright (c) Valve Corporation, All rights reserved. ====================================================================================================== Shader "Valve/vr_standard" { - Properties - { - [Toggle( S_UNLIT )] g_bUnlit( "g_bUnlit", Int ) = 0 - - _Color( "Color", Color ) = ( 1, 1, 1, 1 ) - _MainTex( "Albedo", 2D ) = "white" {} - - _Cutoff( "Alpha Cutoff", Range( 0.0, 1.0 ) ) = 0.5 - - _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 - _SpecColor("Specular", Color) = (0.2,0.2,0.2) - _SpecGlossMap("Specular", 2D) = "white" {} - - g_flReflectanceMin( "g_flReflectanceMin", Range( 0.0, 1.0 ) ) = 0.0 - g_flReflectanceMax( "g_flReflectanceMax", Range( 0.0, 1.0 ) ) = 1.0 - [HideInInspector] g_flReflectanceScale( "g_flReflectanceScale", Range( 0.0, 1.0 ) ) = 0.0 - [HideInInspector] g_flReflectanceBias( "g_flReflectanceBias", Range( 0.0, 1.0 ) ) = 1.0 - - [Gamma] _Metallic( "Metallic", Range( 0.0, 1.0 ) ) = 0.0 - _MetallicGlossMap( "Metallic", 2D ) = "white" {} - - _BumpScale( "Scale", Float ) = 1.0 - [Normal] _BumpMap( "Normal Map", 2D ) = "bump" {} - - _Parallax ( "Height Scale", Range ( 0.005, 0.08 ) ) = 0.02 - _ParallaxMap ( "Height Map", 2D ) = "black" {} - - _OcclusionStrength( "Strength", Range( 0.0, 1.0 ) ) = 1.0 - _OcclusionMap( "Occlusion", 2D ) = "white" {} - _OcclusionStrengthDirectDiffuse( "StrengthDirectDiffuse", Range( 0.0, 1.0 ) ) = 1.0 - _OcclusionStrengthDirectSpecular( "StrengthDirectSpecular", Range( 0.0, 1.0 ) ) = 1.0 - _OcclusionStrengthIndirectDiffuse( "StrengthIndirectDiffuse", Range( 0.0, 1.0 ) ) = 1.0 - _OcclusionStrengthIndirectSpecular( "StrengthIndirectSpecular", Range( 0.0, 1.0 ) ) = 1.0 - - g_flCubeMapScalar( "Cube Map Scalar", Range( 0.0, 2.0 ) ) = 1.0 - - _EmissionColor( "Color", Color ) = ( 0, 0, 0 ) - _EmissionMap( "Emission", 2D ) = "white" {} - - _DetailMask( "Detail Mask", 2D ) = "white" {} - - _DetailAlbedoMap( "Detail Albedo x2", 2D ) = "grey" {} - _DetailNormalMapScale( "Scale", Float ) = 1.0 - _DetailNormalMap( "Normal Map", 2D ) = "bump" {} - - g_tOverrideLightmap( "Override Lightmap", 2D ) = "white" {} - - [Enum(UV0,0,UV1,1)] _UVSec ( "UV Set for secondary textures", Float ) = 0 - - [Toggle( S_WORLD_ALIGNED_TEXTURE )] g_bWorldAlignedTexture( "g_bWorldAlignedTexture", Int ) = 0 - g_vWorldAlignedTextureSize( "g_vWorldAlignedTextureSize", Vector ) = ( 1.0, 1.0, 1.0, 0.0 ) - g_vWorldAlignedTextureNormal( "g_vWorldAlignedTextureNormal", Vector ) = ( 0.0, 1.0, 0.0, 0.0 ) - g_vWorldAlignedTexturePosition( "g_vWorldAlignedTexturePosition", Vector ) = ( 0.0, 0.0, 0.0, 0.0 ) - [HideInInspector] g_vWorldAlignedNormalTangentU( "g_vWorldAlignedNormalTangentU", Vector ) = ( -1.0, 0.0, 0.0, 0.0) - [HideInInspector] g_vWorldAlignedNormalTangentV( "g_vWorldAlignedNormalTangentV", Vector ) = ( 0.0, 0.0, 1.0, 0.0) - - //g_tShadowBuffer( "g_tShadowBuffer", 2D ) = "white" {} - - [HideInInspector] _SpecularMode( "__specularmode", Int ) = 1.0 - - // Blending state - [HideInInspector] _Mode ( "__mode", Float ) = 0.0 - [HideInInspector] _SrcBlend ( "__src", Float ) = 1.0 - [HideInInspector] _DstBlend ( "__dst", Float ) = 0.0 - [HideInInspector] _ZWrite ( "__zw", Float ) = 1.0 - } - - SubShader - { - Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" } - LOD 300 - - //------------------------------------------------------------------------------------------------------------------------------------------------------------- - // Base forward pass (directional light, emission, lightmaps, ...) - //------------------------------------------------------------------------------------------------------------------------------------------------------------- - Pass - { - Name "FORWARD" - Tags { "LightMode" = "ForwardBase" } - - Blend [_SrcBlend] [_DstBlend] - ZWrite [_ZWrite] - - CGPROGRAM - #pragma target 4.0 - //#pragma only_renderers d3d11 - //#pragma exclude_renderers gles - - //------------------------------------------------------------------------------------------------------------------------------------------------------------- - #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON - #pragma shader_feature _NORMALMAP - #pragma shader_feature _METALLICGLOSSMAP - #pragma shader_feature _SPECGLOSSMAP - #pragma shader_feature _EMISSION - #pragma shader_feature _DETAIL_MULX2 - //#pragma shader_feature _PARALLAXMAP - - #pragma shader_feature S_SPECULAR_NONE S_SPECULAR_BLINNPHONG S_SPECULAR_METALLIC - #pragma shader_feature S_UNLIT - #pragma shader_feature S_OVERRIDE_LIGHTMAP - #pragma shader_feature S_WORLD_ALIGNED_TEXTURE - #pragma shader_feature S_OCCLUSION - - #pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON - #pragma multi_compile DIRLIGHTMAP_OFF DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE - #pragma multi_compile DYNAMICLIGHTMAP_OFF DYNAMICLIGHTMAP_ON - - #pragma multi_compile _ D_HOLOGRAM_FX - - #pragma skip_variants SHADOWS_SOFT - - #pragma vertex MainVs - #pragma fragment MainPs - - // Dynamic combo skips (Static combo skips happen in ValveShaderGUI.cs in SetMaterialKeywords()) - #if ( S_UNLIT ) - #undef LIGHTMAP_OFF - #define LIGHTMAP_OFF 1 - #undef LIGHTMAP_ON - - #undef DIRLIGHTMAP_OFF - #define DIRLIGHTMAP_OFF 1 - #undef DIRLIGHTMAP_COMBINED - #undef DIRLIGHTMAP_SEPARATE - - #undef DYNAMICLIGHTMAP_OFF - #define DYNAMICLIGHTMAP_OFF 1 - #undef DYNAMICLIGHTMAP_ON - #endif - - // Includes ------------------------------------------------------------------------------------------------------------------------------------------------- - #include "UnityCG.cginc" - #include "UnityLightingCommon.cginc" - #include "UnityStandardUtils.cginc" - #include "UnityStandardInput.cginc" - #include "vr_utils.cginc" - #include "vr_lighting.cginc" - - // Structs -------------------------------------------------------------------------------------------------------------------------------------------------- - struct VS_INPUT - { - float4 vPositionOs : POSITION; - float3 vNormalOs : NORMAL; - float2 vTexCoord0 : TEXCOORD0; - #if ( _DETAIL || S_OVERRIDE_LIGHTMAP || LIGHTMAP_ON ) - float2 vTexCoord1 : TEXCOORD1; - #endif - #if ( DYNAMICLIGHTMAP_ON || UNITY_PASS_META ) - float2 vTexCoord2 : TEXCOORD2; - #endif - - #if ( _NORMALMAP ) - float4 vTangentUOs_flTangentVSign : TANGENT; - #endif - - }; - - struct PS_INPUT - { - float4 vPositionPs : SV_Position; - - #if ( !S_UNLIT || D_HOLOGRAM_FX ) - float3 vPositionWs : TEXCOORD0; - float3 vNormalWs : TEXCOORD1; - #endif - - #if ( _DETAIL ) - float4 vTextureCoords : TEXCOORD2; - #else - float2 vTextureCoords : TEXCOORD2; - #endif - - #if ( S_OVERRIDE_LIGHTMAP || LIGHTMAP_ON || DYNAMICLIGHTMAP_ON ) - #if ( DYNAMICLIGHTMAP_ON ) - centroid float4 vLightmapUV : TEXCOORD3; - #else - centroid float2 vLightmapUV : TEXCOORD3; - #endif - #endif - - #if ( _NORMALMAP ) - float3 vTangentUWs : TEXCOORD4; - float3 vTangentVWs : TEXCOORD5; - #endif - }; - - // World-aligned texture - float3 g_vWorldAlignedTextureSize = float3( 1.0, 1.0, 1.0 ); - float3 g_vWorldAlignedNormalTangentU = float3( -1.0, 0.0, 0.0 ); - float3 g_vWorldAlignedNormalTangentV = float3( 0.0, 0.0, 1.0 ); - float3 g_vWorldAlignedTexturePosition = float3( 0.0, 0.0, 0.0 ); - - uniform sampler3D g_tHologramNoise3D; - float3 g_vHologramTransmissionSource; - float g_flHologramTransmissionDistance; - float g_flHologramTransmissionFrontier; - - // MainVs --------------------------------------------------------------------------------------------------------------------------------------------------- - PS_INPUT MainVs( VS_INPUT i ) - { - PS_INPUT o = ( PS_INPUT )0; - - // Position - float3 vPositionWs = mul( unity_ObjectToWorld, i.vPositionOs.xyzw ).xyz; - #if ( !S_UNLIT || D_HOLOGRAM_FX ) - { - o.vPositionWs.xyz = vPositionWs.xyz; - } - #endif - o.vPositionPs.xyzw = mul( UNITY_MATRIX_MVP, i.vPositionOs.xyzw ); - - // Normal - float3 vNormalWs = UnityObjectToWorldNormal( i.vNormalOs.xyz ); - #if ( !S_UNLIT || D_HOLOGRAM_FX ) - { - o.vNormalWs.xyz = vNormalWs.xyz; - } - #endif - - #if ( _NORMALMAP ) - { - // TangentU and TangentV - float3 vTangentUWs = UnityObjectToWorldDir( i.vTangentUOs_flTangentVSign.xyz ); // Transform tangentU into world space - //vTangentUWs.xyz = normalize( vTangentUWs.xyz - ( vNormalWs.xyz * dot( vTangentUWs.xyz, vNormalWs.xyz ) ) ); // Force tangentU perpendicular to normal and normalize - - o.vTangentUWs.xyz = vTangentUWs.xyz; - o.vTangentVWs.xyz = cross( vNormalWs.xyz, vTangentUWs.xyz ) * i.vTangentUOs_flTangentVSign.w; - } - #endif - - #if ( S_WORLD_ALIGNED_TEXTURE ) - { - float3 vTexturePositionScaledWs = ( vPositionWs.xyz - g_vWorldAlignedTexturePosition.xyz ) / g_vWorldAlignedTextureSize.xyz; - o.vTextureCoords.x = dot( vTexturePositionScaledWs.xyz, g_vWorldAlignedNormalTangentU.xyz ); - o.vTextureCoords.y = dot( vTexturePositionScaledWs.xyz, g_vWorldAlignedNormalTangentV.xyz ); - #if ( _DETAIL ) - { - o.vTextureCoords.zw = TRANSFORM_TEX( o.vTextureCoords.xy, _DetailAlbedoMap ); - } - #endif - } - #else - { - // Texture coords (Copied from Unity's TexCoords() helper function) - o.vTextureCoords.xy = TRANSFORM_TEX( i.vTexCoord0, _MainTex ); - #if ( _DETAIL ) - { - o.vTextureCoords.zw = TRANSFORM_TEX( ( ( _UVSec == 0 ) ? i.vTexCoord0 : i.vTexCoord1 ), _DetailAlbedoMap ); - } - #endif - } - #endif - - // Indirect lighting uv's or light probe - #if ( S_OVERRIDE_LIGHTMAP ) - { - o.vLightmapUV.xy = i.vTexCoord1.xy; - } - #elif ( LIGHTMAP_ON ) - { - // Static lightmaps - o.vLightmapUV.xy = i.vTexCoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; - } - #endif - - #if ( DYNAMICLIGHTMAP_ON ) - { - o.vLightmapUV.zw = i.vTexCoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; - } - #endif - - return o; - } - - // MainPs --------------------------------------------------------------------------------------------------------------------------------------------------- - #define g_vColorTint _Color - #define g_tColor _MainTex - #define g_tNormalMap _BumpMap - #define g_flBumpScale _BumpScale - #define g_vReflectance _SpecColor - #define g_tReflectanceGloss _SpecGlossMap - #define g_flGlossScale _Glossiness - #define g_tDetailAlbedo _DetailAlbedoMap - #define g_tDetailNormal _DetailNormalMap - #define g_flDetailNormalScale _DetailNormalMapScale - - float g_flReflectanceScale = 1.0; - float g_flReflectanceBias = 0.0; - - float _OcclusionStrengthDirectDiffuse = 1.0; - float _OcclusionStrengthDirectSpecular = 1.0; - float _OcclusionStrengthIndirectDiffuse = 1.0; - float _OcclusionStrengthIndirectSpecular = 1.0; - - struct PS_OUTPUT - { - float4 vColor : SV_Target0; - }; - - PS_OUTPUT MainPs( PS_INPUT i ) - { - PS_OUTPUT o = ( PS_OUTPUT )0; - - //--------// - // Albedo // - //--------// - float4 vAlbedoTexel = tex2D( g_tColor, i.vTextureCoords.xy ) * g_vColorTint.rgba; - float3 vAlbedo = vAlbedoTexel.rgb; - - // Apply detail to albedo - #if ( _DETAIL ) - { - float flDetailMask = DetailMask( i.vTextureCoords.xy ); - float3 vDetailAlbedo = tex2D( g_tDetailAlbedo, i.vTextureCoords.zw ).rgb; - #if ( _DETAIL_MULX2 ) - vAlbedo.rgb *= LerpWhiteTo( vDetailAlbedo.rgb * unity_ColorSpaceDouble.rgb, flDetailMask ); - #elif ( _DETAIL_MUL ) - vAlbedo.rgb *= LerpWhiteTo( vDetailAlbedo.rgb, flDetailMask ); - #elif ( _DETAIL_ADD ) - vAlbedo.rgb += vDetailAlbedo.rgb * flDetailMask; - #elif ( _DETAIL_LERP ) - vAlbedo.rgb = lerp( vAlbedo.rgb, vDetailAlbedo.rgb, flDetailMask ); - #endif - } - #endif - - //--------------// - // Translucency // - //--------------// - #if ( _ALPHATEST_ON ) - { - clip( vAlbedoTexel.a - _Cutoff ); - } - #endif - - #if ( _ALPHAPREMULTIPLY_ON ) - { - vAlbedo.rgb *= vAlbedoTexel.a; - } - #endif - - #if ( _ALPHABLEND_ON || _ALPHAPREMULTIPLY_ON ) - { - o.vColor.a = vAlbedoTexel.a; - } - #else - { - o.vColor.a = 1.0; - } - #endif - - //---------------// - // Tangent Space // - //---------------// - float3 vTangentUWs = float3( 1.0, 0.0, 0.0 ); - float3 vTangentVWs = float3( 0.0, 1.0, 0.0 ); - #if ( _NORMALMAP ) - { - vTangentUWs.xyz = i.vTangentUWs.xyz; - vTangentVWs.xyz = i.vTangentVWs.xyz; - } - #endif - - //--------// - // Normal // - //--------// - float3 vGeometricNormalWs = float3( 0.0, 0.0, 1.0 ); - #if ( !S_UNLIT ) - { - i.vNormalWs.xyz = normalize( i.vNormalWs.xyz ); - vGeometricNormalWs.xyz = i.vNormalWs.xyz; - } - #endif - - float3 vNormalWs = vGeometricNormalWs.xyz; - float3 vNormalTs = float3( 0.0, 0.0, 1.0 ); - #if ( _NORMALMAP ) - { - vNormalTs.xyz = UnpackScaleNormal( tex2D( g_tNormalMap, i.vTextureCoords.xy ), g_flBumpScale ); - //vNormalTs.y = -vNormalTs.y; - - // Apply detail to tangent normal - #if ( _DETAIL ) - { - float flDetailMask = DetailMask( i.vTextureCoords.xy ); - float3 vDetailNormalTs = UnpackScaleNormal( tex2D( g_tDetailNormal, i.vTextureCoords.zw ), g_flDetailNormalScale ); - #if ( _DETAIL_LERP ) - { - vNormalTs.xyz = lerp( vNormalTs.xyz, vDetailNormalTs.xyz, flDetailMask ); - } - #else - { - vNormalTs.xyz = lerp( vNormalTs.xyz, BlendNormals( vNormalTs.xyz, vDetailNormalTs.xyz ), flDetailMask ); - } - #endif - } - #endif - - // Convert to world space - vNormalWs.xyz = Vec3TsToWsNormalized( vNormalTs.xyz, vGeometricNormalWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz ); - } - #endif - - //-----------// - // Roughness // - //-----------// - float2 vRoughness = float2( 0.6, 0.6 );// vNormalTexel.rb; - //#if ( S_HIGH_QUALITY_GLOSS ) - //{ - // float4 vGlossTexel = Tex2D( g_tGloss, i.vTextureCoords.xy ); - // vRoughness.xy += vGlossTexel.ag; - //} - //#endif - - // Reflectance and gloss - float3 vReflectance = float3( 0.0, 0.0, 0.0 ); - float flGloss = 0.0; - #if ( S_SPECULAR_METALLIC ) - { - float2 vMetallicGloss = MetallicGloss( i.vTextureCoords.xy ); - - float flOneMinusReflectivity; - float3 vSpecColor; - float3 diffColor = DiffuseAndSpecularFromMetallic( vAlbedo.rgb, vMetallicGloss.x, /*out*/ vSpecColor, /*out*/ flOneMinusReflectivity); - vAlbedo = diffColor.rgb; - - vReflectance.rgb = vSpecColor.rgb; - flGloss = vMetallicGloss.y; - } - #elif ( S_SPECULAR_BLINNPHONG ) - { - float4 vReflectanceGloss = SpecularGloss( i.vTextureCoords.xy ); - vReflectanceGloss.rgb = ( vReflectanceGloss.rgb * g_flReflectanceScale.xxx ) + g_flReflectanceBias.xxx; - vReflectance.rgb = vReflectanceGloss.rgb; - flGloss = vReflectanceGloss.a; - } - #endif - - vRoughness.xy = ( 1.0 - flGloss ).xx; - #if ( !S_SPECULAR_NONE ) - { - vRoughness.xy = AdjustRoughnessByGeometricNormal( vRoughness.xy, vGeometricNormalWs.xyz ); - } - #endif - - //----------// - // Lighting // - //----------// - LightingTerms_t lightingTerms; - lightingTerms.vDiffuse.rgb = float3( 1.0, 1.0, 1.0 ); - lightingTerms.vSpecular.rgb = float3( 0.0, 0.0, 0.0 ); - lightingTerms.vIndirectDiffuse.rgb = float3( 0.0, 0.0, 0.0 ); - lightingTerms.vIndirectSpecular.rgb = float3( 0.0, 0.0, 0.0 ); - lightingTerms.vTransmissiveSunlight.rgb = float3( 0.0, 0.0, 0.0 ); - - float flFresnelExponent = 5.0; - float flMetalness = 0.0f; - - #if ( !S_UNLIT ) - { - float4 vLightmapUV = float4( 0.0, 0.0, 0.0, 0.0 ); - #if ( S_OVERRIDE_LIGHTMAP || LIGHTMAP_ON || DYNAMICLIGHTMAP_ON ) - { - vLightmapUV.xy = i.vLightmapUV.xy; - #if ( DYNAMICLIGHTMAP_ON ) - { - vLightmapUV.zw = i.vLightmapUV.zw; - } - #endif - } - #endif - - // Compute lighting - lightingTerms = ComputeLighting( i.vPositionWs.xyz, vNormalWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vRoughness.xy, vReflectance.rgb, flFresnelExponent, vLightmapUV.xyzw ); - - #if ( S_OCCLUSION ) - { - float flOcclusion = tex2D( _OcclusionMap, i.vTextureCoords.xy ).g; - lightingTerms.vDiffuse.rgb *= LerpOneTo( flOcclusion, _OcclusionStrength * _OcclusionStrengthDirectDiffuse ); - lightingTerms.vSpecular.rgb *= LerpOneTo( flOcclusion, _OcclusionStrength * _OcclusionStrengthDirectSpecular ); - lightingTerms.vIndirectDiffuse.rgb *= LerpOneTo( flOcclusion, _OcclusionStrength * _OcclusionStrengthIndirectDiffuse ); - lightingTerms.vIndirectSpecular.rgb *= LerpOneTo( flOcclusion, _OcclusionStrength * _OcclusionStrengthIndirectSpecular ); - } - #endif - } - #endif - - // Diffuse - o.vColor.rgb = ( lightingTerms.vDiffuse.rgb + lightingTerms.vIndirectDiffuse.rgb ) * vAlbedo.rgb; - - // Specular - #if ( !S_SPECULAR_NONE ) - { - o.vColor.rgb += lightingTerms.vSpecular.rgb; - } - #endif - o.vColor.rgb += lightingTerms.vIndirectSpecular.rgb; // Indirect specular applies its own fresnel in the forward lighting header file - - // Emission - Unity just adds the emissive term at the end instead of adding it to the diffuse lighting term. Artists may want both options. - float3 vEmission = Emission( i.vTextureCoords.xy ); - o.vColor.rgb += vEmission.rgb; - - #if ( D_HOLOGRAM_FX ) - { - float flNoise = - 0.35 * tex3D(g_tHologramNoise3D, 0.016 * i.vPositionWs.xyz + float3(0.756, 0.159, 0.871)).x + - 0.25 * tex3D(g_tHologramNoise3D, 0.032 * i.vPositionWs.xyz + float3(0.147, 0.051, 0.273)).x + - 0.20 * tex3D(g_tHologramNoise3D, 0.064 * i.vPositionWs.xyz + float3(0.230, 0.700, 0.809)).x + - 0.15 * tex3D(g_tHologramNoise3D, 0.128 * i.vPositionWs.xyz + float3(0.938, 0.117, 0.952)).x + - 0.05 * tex3D(g_tHologramNoise3D, 0.256 * i.vPositionWs.xyz + float3(0.867, 0.363, 0.502)).x; - - float EDGE = 1.0; - float HEIGHT_BIAS = 4.0; - - float flAvgColor = saturate( dot( float3( 0.3333333, 0.3333333, 0.3333333 ), o.vColor.rgb ) ); - - float3 vTransmissionRayWs = i.vPositionWs.xyz - g_vHologramTransmissionSource; - vTransmissionRayWs.y *= HEIGHT_BIAS; - float flTransmissionDistance = length( vTransmissionRayWs.xyz ); - flTransmissionDistance -= g_flHologramTransmissionFrontier * 0.5 * ( flNoise + flAvgColor ); - - clip( g_flHologramTransmissionDistance - flTransmissionDistance ); - float flEdgeAmount = saturate( EDGE * ( g_flHologramTransmissionDistance - flTransmissionDistance ) ); - float3 vCyan = float3( 0.0, 1.0, 1.0 ); - o.vColor.rgb = lerp( vCyan.rgb, o.vColor.rgb, flEdgeAmount ); - } - #endif - - // Dither to fix banding artifacts - o.vColor.rgb += ScreenSpaceDither( i.vPositionPs.xy ); - - return o; - } - ENDCG - } - - //------------------------------------------------------------------------------------------------------------------------------------------------------------- - // Extracts information for lightmapping, GI (emission, albedo, ...) - // This pass it not used during regular rendering. - //------------------------------------------------------------------------------------------------------------------------------------------------------------- - Pass - { - Name "META" - Tags { "LightMode"="Meta" } - - Cull Off - - CGPROGRAM - #pragma vertex vert_meta - #pragma fragment frag_meta - - #pragma shader_feature _EMISSION - #pragma shader_feature _METALLICGLOSSMAP - #pragma shader_feature ___ _DETAIL_MULX2 - - #include "UnityStandardMeta.cginc" - ENDCG - } - - Pass - { - Name "ShadowCaster" - Tags { "LightMode" = "ShadowCaster" } - //Tags { "LightMode" = "ShadowCaster" } - - ZWrite On - ZTest LEqual - ColorMask 0 - Blend Off - Offset 2.5, 1 // http://docs.unity3d.com/Manual/SL-CullAndDepth.html - - CGPROGRAM - #pragma target 4.0 - //#pragma only_renderers d3d11 - //#pragma multi_compile_shadowcaster - - #pragma vertex MainVs - #pragma fragment MainPs - - #include "UnityCG.cginc" - - struct VertexInput - { - float4 vPositionOs : POSITION; - float3 vNormalOs : NORMAL; - }; - - struct VertexOutput - { - float4 vPositionPs : SV_POSITION; - }; - - float3 g_vLightDirWs = float3( 0.0, 0.0, 0.0 ); - - float2 GetShadowOffsets( float3 N, float3 L ) - { - // From: Ignacio Castaño http://the-witness.net/news/2013/09/shadow-mapping-summary-part-1/ - float cos_alpha = saturate( dot( N, L ) ); - float offset_scale_N = sqrt( 1 - ( cos_alpha * cos_alpha ) ); // sin( acos( L·N ) ) - float offset_scale_L = offset_scale_N / cos_alpha; // tan( acos( L·N ) ) - return float2( offset_scale_N, min( 2.0, offset_scale_L ) ); - } - - VertexOutput MainVs( VertexInput i ) - { - VertexOutput o; - - //o.vPositionPs.xyzw = mul( UNITY_MATRIX_MVP, i.vPositionOs.xyzw ); - - float3 vNormalWs = UnityObjectToWorldNormal( i.vNormalOs.xyz ); - float3 vPositionWs = mul( unity_ObjectToWorld, i.vPositionOs.xyzw ).xyz; - float2 vShadowOffsets = GetShadowOffsets( vNormalWs.xyz, g_vLightDirWs.xyz ); - vPositionWs.xyz -= vShadowOffsets.x * vNormalWs.xyz / 100; - vPositionWs.xyz += vShadowOffsets.y * g_vLightDirWs.xyz / 1000; - o.vPositionPs.xyzw = mul( UNITY_MATRIX_MVP, float4( mul( unity_WorldToObject, float4( vPositionWs.xyz, 1.0 ) ).xyz, 1.0 ) ); - return o; - } - - float4 MainPs( VertexOutput i ) : SV_Target - { - return float4( 0.0, 0.0, 0.0, 0.0 ); - } - ENDCG - } - - } - - - CustomEditor "ValveShaderGUI" + Properties + { + [Toggle( S_UNLIT )] g_bUnlit( "g_bUnlit", Int ) = 0 + + _Color( "Color", Color ) = ( 1, 1, 1, 1 ) + _MainTex( "Albedo", 2D ) = "white" {} + + _Cutoff( "Alpha Cutoff", Range( 0.0, 1.0 ) ) = 0.5 + + _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 + _SpecColor("Specular", Color) = (0.2,0.2,0.2) + _SpecGlossMap("Specular", 2D) = "white" {} + + g_flReflectanceMin( "g_flReflectanceMin", Range( 0.0, 1.0 ) ) = 0.0 + g_flReflectanceMax( "g_flReflectanceMax", Range( 0.0, 1.0 ) ) = 1.0 + [HideInInspector] g_flReflectanceScale( "g_flReflectanceScale", Range( 0.0, 1.0 ) ) = 0.0 + [HideInInspector] g_flReflectanceBias( "g_flReflectanceBias", Range( 0.0, 1.0 ) ) = 1.0 + + [Gamma] _Metallic( "Metallic", Range( 0.0, 1.0 ) ) = 0.0 + _MetallicGlossMap( "Metallic", 2D ) = "white" {} + + _BumpScale( "Scale", Float ) = 1.0 + [Normal] _BumpMap( "Normal Map", 2D ) = "bump" {} + + _Parallax ( "Height Scale", Range ( 0.005, 0.08 ) ) = 0.02 + _ParallaxMap ( "Height Map", 2D ) = "black" {} + + _OcclusionStrength( "Strength", Range( 0.0, 1.0 ) ) = 1.0 + _OcclusionMap( "Occlusion", 2D ) = "white" {} + _OcclusionStrengthDirectDiffuse( "StrengthDirectDiffuse", Range( 0.0, 1.0 ) ) = 1.0 + _OcclusionStrengthDirectSpecular( "StrengthDirectSpecular", Range( 0.0, 1.0 ) ) = 1.0 + _OcclusionStrengthIndirectDiffuse( "StrengthIndirectDiffuse", Range( 0.0, 1.0 ) ) = 1.0 + _OcclusionStrengthIndirectSpecular( "StrengthIndirectSpecular", Range( 0.0, 1.0 ) ) = 1.0 + + g_flCubeMapScalar( "Cube Map Scalar", Range( 0.0, 2.0 ) ) = 1.0 + + _EmissionColor( "Color", Color ) = ( 0, 0, 0 ) + _EmissionMap( "Emission", 2D ) = "white" {} + + _DetailMask( "Detail Mask", 2D ) = "white" {} + + _DetailAlbedoMap( "Detail Albedo x2", 2D ) = "grey" {} + _DetailNormalMapScale( "Scale", Float ) = 1.0 + _DetailNormalMap( "Normal Map", 2D ) = "bump" {} + + g_tOverrideLightmap( "Override Lightmap", 2D ) = "white" {} + + [Enum(UV0,0,UV1,1)] _UVSec ( "UV Set for secondary textures", Float ) = 0 + + [Toggle( S_WORLD_ALIGNED_TEXTURE )] g_bWorldAlignedTexture( "g_bWorldAlignedTexture", Int ) = 0 + g_vWorldAlignedTextureSize( "g_vWorldAlignedTextureSize", Vector ) = ( 1.0, 1.0, 1.0, 0.0 ) + g_vWorldAlignedTextureNormal( "g_vWorldAlignedTextureNormal", Vector ) = ( 0.0, 1.0, 0.0, 0.0 ) + g_vWorldAlignedTexturePosition( "g_vWorldAlignedTexturePosition", Vector ) = ( 0.0, 0.0, 0.0, 0.0 ) + [HideInInspector] g_vWorldAlignedNormalTangentU( "g_vWorldAlignedNormalTangentU", Vector ) = ( -1.0, 0.0, 0.0, 0.0) + [HideInInspector] g_vWorldAlignedNormalTangentV( "g_vWorldAlignedNormalTangentV", Vector ) = ( 0.0, 0.0, 1.0, 0.0) + + //g_tShadowBuffer( "g_tShadowBuffer", 2D ) = "white" {} + + [HideInInspector] _SpecularMode( "__specularmode", Int ) = 1.0 + + // Blending state + [HideInInspector] _Mode ( "__mode", Float ) = 0.0 + [HideInInspector] _SrcBlend ( "__src", Float ) = 1.0 + [HideInInspector] _DstBlend ( "__dst", Float ) = 0.0 + [HideInInspector] _ZWrite ( "__zw", Float ) = 1.0 + } + + SubShader + { + Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" } + LOD 300 + + //------------------------------------------------------------------------------------------------------------------------------------------------------------- + // Base forward pass (directional light, emission, lightmaps, ...) + //------------------------------------------------------------------------------------------------------------------------------------------------------------- + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + + CGPROGRAM + #pragma target 4.0 + //#pragma only_renderers d3d11 + //#pragma exclude_renderers gles + + //------------------------------------------------------------------------------------------------------------------------------------------------------------- + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _NORMALMAP + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _SPECGLOSSMAP + #pragma shader_feature _EMISSION + #pragma shader_feature _DETAIL_MULX2 + //#pragma shader_feature _PARALLAXMAP + + #pragma shader_feature S_SPECULAR_NONE S_SPECULAR_BLINNPHONG S_SPECULAR_METALLIC + #pragma shader_feature S_UNLIT + #pragma shader_feature S_OVERRIDE_LIGHTMAP + #pragma shader_feature S_WORLD_ALIGNED_TEXTURE + #pragma shader_feature S_OCCLUSION + + #pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON + #pragma multi_compile DIRLIGHTMAP_OFF DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE + #pragma multi_compile DYNAMICLIGHTMAP_OFF DYNAMICLIGHTMAP_ON + + #pragma multi_compile _ D_HOLOGRAM_FX + + #pragma skip_variants SHADOWS_SOFT + + #pragma vertex MainVs + #pragma fragment MainPs + + // Dynamic combo skips (Static combo skips happen in ValveShaderGUI.cs in SetMaterialKeywords()) + #if ( S_UNLIT ) + #undef LIGHTMAP_OFF + #define LIGHTMAP_OFF 1 + #undef LIGHTMAP_ON + + #undef DIRLIGHTMAP_OFF + #define DIRLIGHTMAP_OFF 1 + #undef DIRLIGHTMAP_COMBINED + #undef DIRLIGHTMAP_SEPARATE + + #undef DYNAMICLIGHTMAP_OFF + #define DYNAMICLIGHTMAP_OFF 1 + #undef DYNAMICLIGHTMAP_ON + #endif + + // Includes ------------------------------------------------------------------------------------------------------------------------------------------------- + #include "UnityCG.cginc" + #include "UnityLightingCommon.cginc" + #include "UnityStandardUtils.cginc" + #include "UnityStandardInput.cginc" + #include "vr_utils.cginc" + #include "vr_lighting.cginc" + + // Structs -------------------------------------------------------------------------------------------------------------------------------------------------- + struct VS_INPUT + { + float4 vPositionOs : POSITION; + float3 vNormalOs : NORMAL; + float2 vTexCoord0 : TEXCOORD0; + #if ( _DETAIL || S_OVERRIDE_LIGHTMAP || LIGHTMAP_ON ) + float2 vTexCoord1 : TEXCOORD1; + #endif + #if ( DYNAMICLIGHTMAP_ON || UNITY_PASS_META ) + float2 vTexCoord2 : TEXCOORD2; + #endif + + #if ( _NORMALMAP ) + float4 vTangentUOs_flTangentVSign : TANGENT; + #endif + + }; + + struct PS_INPUT + { + float4 vPositionPs : SV_Position; + + #if ( !S_UNLIT || D_HOLOGRAM_FX ) + float3 vPositionWs : TEXCOORD0; + float3 vNormalWs : TEXCOORD1; + #endif + + #if ( _DETAIL ) + float4 vTextureCoords : TEXCOORD2; + #else + float2 vTextureCoords : TEXCOORD2; + #endif + + #if ( S_OVERRIDE_LIGHTMAP || LIGHTMAP_ON || DYNAMICLIGHTMAP_ON ) + #if ( DYNAMICLIGHTMAP_ON ) + centroid float4 vLightmapUV : TEXCOORD3; + #else + centroid float2 vLightmapUV : TEXCOORD3; + #endif + #endif + + #if ( _NORMALMAP ) + float3 vTangentUWs : TEXCOORD4; + float3 vTangentVWs : TEXCOORD5; + #endif + }; + + // World-aligned texture + float3 g_vWorldAlignedTextureSize = float3( 1.0, 1.0, 1.0 ); + float3 g_vWorldAlignedNormalTangentU = float3( -1.0, 0.0, 0.0 ); + float3 g_vWorldAlignedNormalTangentV = float3( 0.0, 0.0, 1.0 ); + float3 g_vWorldAlignedTexturePosition = float3( 0.0, 0.0, 0.0 ); + + uniform sampler3D g_tHologramNoise3D; + float3 g_vHologramTransmissionSource; + float g_flHologramTransmissionDistance; + float g_flHologramTransmissionFrontier; + + // MainVs --------------------------------------------------------------------------------------------------------------------------------------------------- + PS_INPUT MainVs( VS_INPUT i ) + { + PS_INPUT o = ( PS_INPUT )0; + + // Position + float3 vPositionWs = mul( unity_ObjectToWorld, i.vPositionOs.xyzw ).xyz; + #if ( !S_UNLIT || D_HOLOGRAM_FX ) + { + o.vPositionWs.xyz = vPositionWs.xyz; + } + #endif + o.vPositionPs.xyzw = mul( UNITY_MATRIX_MVP, i.vPositionOs.xyzw ); + + // Normal + float3 vNormalWs = UnityObjectToWorldNormal( i.vNormalOs.xyz ); + #if ( !S_UNLIT || D_HOLOGRAM_FX ) + { + o.vNormalWs.xyz = vNormalWs.xyz; + } + #endif + + #if ( _NORMALMAP ) + { + // TangentU and TangentV + float3 vTangentUWs = UnityObjectToWorldDir( i.vTangentUOs_flTangentVSign.xyz ); // Transform tangentU into world space + //vTangentUWs.xyz = normalize( vTangentUWs.xyz - ( vNormalWs.xyz * dot( vTangentUWs.xyz, vNormalWs.xyz ) ) ); // Force tangentU perpendicular to normal and normalize + + o.vTangentUWs.xyz = vTangentUWs.xyz; + o.vTangentVWs.xyz = cross( vNormalWs.xyz, vTangentUWs.xyz ) * i.vTangentUOs_flTangentVSign.w; + } + #endif + + #if ( S_WORLD_ALIGNED_TEXTURE ) + { + float3 vTexturePositionScaledWs = ( vPositionWs.xyz - g_vWorldAlignedTexturePosition.xyz ) / g_vWorldAlignedTextureSize.xyz; + o.vTextureCoords.x = dot( vTexturePositionScaledWs.xyz, g_vWorldAlignedNormalTangentU.xyz ); + o.vTextureCoords.y = dot( vTexturePositionScaledWs.xyz, g_vWorldAlignedNormalTangentV.xyz ); + #if ( _DETAIL ) + { + o.vTextureCoords.zw = TRANSFORM_TEX( o.vTextureCoords.xy, _DetailAlbedoMap ); + } + #endif + } + #else + { + // Texture coords (Copied from Unity's TexCoords() helper function) + o.vTextureCoords.xy = TRANSFORM_TEX( i.vTexCoord0, _MainTex ); + #if ( _DETAIL ) + { + o.vTextureCoords.zw = TRANSFORM_TEX( ( ( _UVSec == 0 ) ? i.vTexCoord0 : i.vTexCoord1 ), _DetailAlbedoMap ); + } + #endif + } + #endif + + // Indirect lighting uv's or light probe + #if ( S_OVERRIDE_LIGHTMAP ) + { + o.vLightmapUV.xy = i.vTexCoord1.xy; + } + #elif ( LIGHTMAP_ON ) + { + // Static lightmaps + o.vLightmapUV.xy = i.vTexCoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + } + #endif + + #if ( DYNAMICLIGHTMAP_ON ) + { + o.vLightmapUV.zw = i.vTexCoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + } + #endif + + return o; + } + + // MainPs --------------------------------------------------------------------------------------------------------------------------------------------------- + #define g_vColorTint _Color + #define g_tColor _MainTex + #define g_tNormalMap _BumpMap + #define g_flBumpScale _BumpScale + #define g_vReflectance _SpecColor + #define g_tReflectanceGloss _SpecGlossMap + #define g_flGlossScale _Glossiness + #define g_tDetailAlbedo _DetailAlbedoMap + #define g_tDetailNormal _DetailNormalMap + #define g_flDetailNormalScale _DetailNormalMapScale + + float g_flReflectanceScale = 1.0; + float g_flReflectanceBias = 0.0; + + float _OcclusionStrengthDirectDiffuse = 1.0; + float _OcclusionStrengthDirectSpecular = 1.0; + float _OcclusionStrengthIndirectDiffuse = 1.0; + float _OcclusionStrengthIndirectSpecular = 1.0; + + struct PS_OUTPUT + { + float4 vColor : SV_Target0; + }; + + PS_OUTPUT MainPs( PS_INPUT i ) + { + PS_OUTPUT o = ( PS_OUTPUT )0; + + //--------// + // Albedo // + //--------// + float4 vAlbedoTexel = tex2D( g_tColor, i.vTextureCoords.xy ) * g_vColorTint.rgba; + float3 vAlbedo = vAlbedoTexel.rgb; + + // Apply detail to albedo + #if ( _DETAIL ) + { + float flDetailMask = DetailMask( i.vTextureCoords.xy ); + float3 vDetailAlbedo = tex2D( g_tDetailAlbedo, i.vTextureCoords.zw ).rgb; + #if ( _DETAIL_MULX2 ) + vAlbedo.rgb *= LerpWhiteTo( vDetailAlbedo.rgb * unity_ColorSpaceDouble.rgb, flDetailMask ); + #elif ( _DETAIL_MUL ) + vAlbedo.rgb *= LerpWhiteTo( vDetailAlbedo.rgb, flDetailMask ); + #elif ( _DETAIL_ADD ) + vAlbedo.rgb += vDetailAlbedo.rgb * flDetailMask; + #elif ( _DETAIL_LERP ) + vAlbedo.rgb = lerp( vAlbedo.rgb, vDetailAlbedo.rgb, flDetailMask ); + #endif + } + #endif + + //--------------// + // Translucency // + //--------------// + #if ( _ALPHATEST_ON ) + { + clip( vAlbedoTexel.a - _Cutoff ); + } + #endif + + #if ( _ALPHAPREMULTIPLY_ON ) + { + vAlbedo.rgb *= vAlbedoTexel.a; + } + #endif + + #if ( _ALPHABLEND_ON || _ALPHAPREMULTIPLY_ON ) + { + o.vColor.a = vAlbedoTexel.a; + } + #else + { + o.vColor.a = 1.0; + } + #endif + + //---------------// + // Tangent Space // + //---------------// + float3 vTangentUWs = float3( 1.0, 0.0, 0.0 ); + float3 vTangentVWs = float3( 0.0, 1.0, 0.0 ); + #if ( _NORMALMAP ) + { + vTangentUWs.xyz = i.vTangentUWs.xyz; + vTangentVWs.xyz = i.vTangentVWs.xyz; + } + #endif + + //--------// + // Normal // + //--------// + float3 vGeometricNormalWs = float3( 0.0, 0.0, 1.0 ); + #if ( !S_UNLIT ) + { + i.vNormalWs.xyz = normalize( i.vNormalWs.xyz ); + vGeometricNormalWs.xyz = i.vNormalWs.xyz; + } + #endif + + float3 vNormalWs = vGeometricNormalWs.xyz; + float3 vNormalTs = float3( 0.0, 0.0, 1.0 ); + #if ( _NORMALMAP ) + { + vNormalTs.xyz = UnpackScaleNormal( tex2D( g_tNormalMap, i.vTextureCoords.xy ), g_flBumpScale ); + //vNormalTs.y = -vNormalTs.y; + + // Apply detail to tangent normal + #if ( _DETAIL ) + { + float flDetailMask = DetailMask( i.vTextureCoords.xy ); + float3 vDetailNormalTs = UnpackScaleNormal( tex2D( g_tDetailNormal, i.vTextureCoords.zw ), g_flDetailNormalScale ); + #if ( _DETAIL_LERP ) + { + vNormalTs.xyz = lerp( vNormalTs.xyz, vDetailNormalTs.xyz, flDetailMask ); + } + #else + { + vNormalTs.xyz = lerp( vNormalTs.xyz, BlendNormals( vNormalTs.xyz, vDetailNormalTs.xyz ), flDetailMask ); + } + #endif + } + #endif + + // Convert to world space + vNormalWs.xyz = Vec3TsToWsNormalized( vNormalTs.xyz, vGeometricNormalWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz ); + } + #endif + + //-----------// + // Roughness // + //-----------// + float2 vRoughness = float2( 0.6, 0.6 );// vNormalTexel.rb; + //#if ( S_HIGH_QUALITY_GLOSS ) + //{ + // float4 vGlossTexel = Tex2D( g_tGloss, i.vTextureCoords.xy ); + // vRoughness.xy += vGlossTexel.ag; + //} + //#endif + + // Reflectance and gloss + float3 vReflectance = float3( 0.0, 0.0, 0.0 ); + float flGloss = 0.0; + #if ( S_SPECULAR_METALLIC ) + { + float2 vMetallicGloss = MetallicGloss( i.vTextureCoords.xy ); + + float flOneMinusReflectivity; + float3 vSpecColor; + float3 diffColor = DiffuseAndSpecularFromMetallic( vAlbedo.rgb, vMetallicGloss.x, /*out*/ vSpecColor, /*out*/ flOneMinusReflectivity); + vAlbedo = diffColor.rgb; + + vReflectance.rgb = vSpecColor.rgb; + flGloss = vMetallicGloss.y; + } + #elif ( S_SPECULAR_BLINNPHONG ) + { + float4 vReflectanceGloss = SpecularGloss( i.vTextureCoords.xy ); + vReflectanceGloss.rgb = ( vReflectanceGloss.rgb * g_flReflectanceScale.xxx ) + g_flReflectanceBias.xxx; + vReflectance.rgb = vReflectanceGloss.rgb; + flGloss = vReflectanceGloss.a; + } + #endif + + vRoughness.xy = ( 1.0 - flGloss ).xx; + #if ( !S_SPECULAR_NONE ) + { + vRoughness.xy = AdjustRoughnessByGeometricNormal( vRoughness.xy, vGeometricNormalWs.xyz ); + } + #endif + + //----------// + // Lighting // + //----------// + LightingTerms_t lightingTerms; + lightingTerms.vDiffuse.rgb = float3( 1.0, 1.0, 1.0 ); + lightingTerms.vSpecular.rgb = float3( 0.0, 0.0, 0.0 ); + lightingTerms.vIndirectDiffuse.rgb = float3( 0.0, 0.0, 0.0 ); + lightingTerms.vIndirectSpecular.rgb = float3( 0.0, 0.0, 0.0 ); + lightingTerms.vTransmissiveSunlight.rgb = float3( 0.0, 0.0, 0.0 ); + + float flFresnelExponent = 5.0; + float flMetalness = 0.0f; + + #if ( !S_UNLIT ) + { + float4 vLightmapUV = float4( 0.0, 0.0, 0.0, 0.0 ); + #if ( S_OVERRIDE_LIGHTMAP || LIGHTMAP_ON || DYNAMICLIGHTMAP_ON ) + { + vLightmapUV.xy = i.vLightmapUV.xy; + #if ( DYNAMICLIGHTMAP_ON ) + { + vLightmapUV.zw = i.vLightmapUV.zw; + } + #endif + } + #endif + + // Compute lighting + lightingTerms = ComputeLighting( i.vPositionWs.xyz, vNormalWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vRoughness.xy, vReflectance.rgb, flFresnelExponent, vLightmapUV.xyzw ); + + #if ( S_OCCLUSION ) + { + float flOcclusion = tex2D( _OcclusionMap, i.vTextureCoords.xy ).g; + lightingTerms.vDiffuse.rgb *= LerpOneTo( flOcclusion, _OcclusionStrength * _OcclusionStrengthDirectDiffuse ); + lightingTerms.vSpecular.rgb *= LerpOneTo( flOcclusion, _OcclusionStrength * _OcclusionStrengthDirectSpecular ); + lightingTerms.vIndirectDiffuse.rgb *= LerpOneTo( flOcclusion, _OcclusionStrength * _OcclusionStrengthIndirectDiffuse ); + lightingTerms.vIndirectSpecular.rgb *= LerpOneTo( flOcclusion, _OcclusionStrength * _OcclusionStrengthIndirectSpecular ); + } + #endif + } + #endif + + // Diffuse + o.vColor.rgb = ( lightingTerms.vDiffuse.rgb + lightingTerms.vIndirectDiffuse.rgb ) * vAlbedo.rgb; + + // Specular + #if ( !S_SPECULAR_NONE ) + { + o.vColor.rgb += lightingTerms.vSpecular.rgb; + } + #endif + o.vColor.rgb += lightingTerms.vIndirectSpecular.rgb; // Indirect specular applies its own fresnel in the forward lighting header file + + // Emission - Unity just adds the emissive term at the end instead of adding it to the diffuse lighting term. Artists may want both options. + float3 vEmission = Emission( i.vTextureCoords.xy ); + o.vColor.rgb += vEmission.rgb; + + #if ( D_HOLOGRAM_FX ) + { + float flNoise = + 0.35 * tex3D(g_tHologramNoise3D, 0.016 * i.vPositionWs.xyz + float3(0.756, 0.159, 0.871)).x + + 0.25 * tex3D(g_tHologramNoise3D, 0.032 * i.vPositionWs.xyz + float3(0.147, 0.051, 0.273)).x + + 0.20 * tex3D(g_tHologramNoise3D, 0.064 * i.vPositionWs.xyz + float3(0.230, 0.700, 0.809)).x + + 0.15 * tex3D(g_tHologramNoise3D, 0.128 * i.vPositionWs.xyz + float3(0.938, 0.117, 0.952)).x + + 0.05 * tex3D(g_tHologramNoise3D, 0.256 * i.vPositionWs.xyz + float3(0.867, 0.363, 0.502)).x; + + float EDGE = 1.0; + float HEIGHT_BIAS = 4.0; + + float flAvgColor = saturate( dot( float3( 0.3333333, 0.3333333, 0.3333333 ), o.vColor.rgb ) ); + + float3 vTransmissionRayWs = i.vPositionWs.xyz - g_vHologramTransmissionSource; + vTransmissionRayWs.y *= HEIGHT_BIAS; + float flTransmissionDistance = length( vTransmissionRayWs.xyz ); + flTransmissionDistance -= g_flHologramTransmissionFrontier * 0.5 * ( flNoise + flAvgColor ); + + clip( g_flHologramTransmissionDistance - flTransmissionDistance ); + float flEdgeAmount = saturate( EDGE * ( g_flHologramTransmissionDistance - flTransmissionDistance ) ); + float3 vCyan = float3( 0.0, 1.0, 1.0 ); + o.vColor.rgb = lerp( vCyan.rgb, o.vColor.rgb, flEdgeAmount ); + } + #endif + + // Dither to fix banding artifacts + o.vColor.rgb += ScreenSpaceDither( i.vPositionPs.xy ); + + return o; + } + ENDCG + } + + //------------------------------------------------------------------------------------------------------------------------------------------------------------- + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + //------------------------------------------------------------------------------------------------------------------------------------------------------------- + Pass + { + Name "META" + Tags { "LightMode"="Meta" } + + Cull Off + + CGPROGRAM + #pragma vertex vert_meta + #pragma fragment frag_meta + + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature ___ _DETAIL_MULX2 + + #include "UnityStandardMeta.cginc" + ENDCG + } + + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + //Tags { "LightMode" = "ShadowCaster" } + + ZWrite On + ZTest LEqual + ColorMask 0 + Blend Off + Offset 2.5, 1 // http://docs.unity3d.com/Manual/SL-CullAndDepth.html + + CGPROGRAM + #pragma target 4.0 + //#pragma only_renderers d3d11 + //#pragma multi_compile_shadowcaster + + #pragma vertex MainVs + #pragma fragment MainPs + + #include "UnityCG.cginc" + + struct VertexInput + { + float4 vPositionOs : POSITION; + float3 vNormalOs : NORMAL; + }; + + struct VertexOutput + { + float4 vPositionPs : SV_POSITION; + }; + + float3 g_vLightDirWs = float3( 0.0, 0.0, 0.0 ); + + float2 GetShadowOffsets( float3 N, float3 L ) + { + // From: Ignacio Castaño http://the-witness.net/news/2013/09/shadow-mapping-summary-part-1/ + float cos_alpha = saturate( dot( N, L ) ); + float offset_scale_N = sqrt( 1 - ( cos_alpha * cos_alpha ) ); // sin( acos( L·N ) ) + float offset_scale_L = offset_scale_N / cos_alpha; // tan( acos( L·N ) ) + return float2( offset_scale_N, min( 2.0, offset_scale_L ) ); + } + + VertexOutput MainVs( VertexInput i ) + { + VertexOutput o; + + //o.vPositionPs.xyzw = mul( UNITY_MATRIX_MVP, i.vPositionOs.xyzw ); + + float3 vNormalWs = UnityObjectToWorldNormal( i.vNormalOs.xyz ); + float3 vPositionWs = mul( unity_ObjectToWorld, i.vPositionOs.xyzw ).xyz; + float2 vShadowOffsets = GetShadowOffsets( vNormalWs.xyz, g_vLightDirWs.xyz ); + vPositionWs.xyz -= vShadowOffsets.x * vNormalWs.xyz / 100; + vPositionWs.xyz += vShadowOffsets.y * g_vLightDirWs.xyz / 1000; + o.vPositionPs.xyzw = mul( UNITY_MATRIX_MVP, float4( mul( unity_WorldToObject, float4( vPositionWs.xyz, 1.0 ) ).xyz, 1.0 ) ); + return o; + } + + float4 MainPs( VertexOutput i ) : SV_Target + { + return float4( 0.0, 0.0, 0.0, 0.0 ); + } + ENDCG + } + + } + + + CustomEditor "ValveShaderGUI" } diff --git a/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_utils.cginc b/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_utils.cginc index 8bcde76da2b..be5b3e59bf0 100755 --- a/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_utils.cginc +++ b/Assets/ScriptableRenderLoop/ForwardRenderLoop/Shaders/vr_utils.cginc @@ -18,17 +18,17 @@ float g_flTime = 0.0; // Set by ValveCamera.cs //--------------------------------------------------------------------------------------------------------------------------------------------------------- float3 ScreenSpaceDither( float2 vScreenPos ) { - //if ( Blink( 1.5 ) ) - // return 0.0; + //if ( Blink( 1.5 ) ) + // return 0.0; - //if ( ( int )vScreenPos.y == 840 ) - // return 0.3; - //if ( vScreenPos.y < 840 ) - // return 0.0; + //if ( ( int )vScreenPos.y == 840 ) + // return 0.3; + //if ( vScreenPos.y < 840 ) + // return 0.0; - float3 vDither = dot( float2( 171.0, 231.0 ), vScreenPos.xy + g_flTime.xx ).xxx; - vDither.rgb = frac( vDither.rgb / float3( 103.0, 71.0, 97.0 ) ) - float3( 0.5, 0.5, 0.5 ); - return ( vDither.rgb / 255.0 ) * 0.375; + float3 vDither = dot( float2( 171.0, 231.0 ), vScreenPos.xy + g_flTime.xx ).xxx; + vDither.rgb = frac( vDither.rgb / float3( 103.0, 71.0, 97.0 ) ) - float3( 0.5, 0.5, 0.5 ); + return ( vDither.rgb / 255.0 ) * 0.375; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -36,7 +36,7 @@ float3 ScreenSpaceDither( float2 vScreenPos ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float Blink( float flNumSeconds ) { - return step( 0.5, frac( g_flTime * 0.5 / flNumSeconds ) ); + return step( 0.5, frac( g_flTime * 0.5 / flNumSeconds ) ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -44,47 +44,47 @@ float Blink( float flNumSeconds ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 Vec3WsToTs( float3 vVectorWs, float3 vNormalWs, float3 vTangentUWs, float3 vTangentVWs ) { - float3 vVectorTs; - vVectorTs.x = dot( vVectorWs.xyz, vTangentUWs.xyz ); - vVectorTs.y = dot( vVectorWs.xyz, vTangentVWs.xyz ); - vVectorTs.z = dot( vVectorWs.xyz, vNormalWs.xyz ); - return vVectorTs.xyz; // Return without normalizing + float3 vVectorTs; + vVectorTs.x = dot( vVectorWs.xyz, vTangentUWs.xyz ); + vVectorTs.y = dot( vVectorWs.xyz, vTangentVWs.xyz ); + vVectorTs.z = dot( vVectorWs.xyz, vNormalWs.xyz ); + return vVectorTs.xyz; // Return without normalizing } float3 Vec3WsToTsNormalized( float3 vVectorWs, float3 vNormalWs, float3 vTangentUWs, float3 vTangentVWs ) { - return normalize( Vec3WsToTs( vVectorWs.xyz, vNormalWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz ) ); + return normalize( Vec3WsToTs( vVectorWs.xyz, vNormalWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz ) ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 Vec3TsToWs( float3 vVectorTs, float3 vNormalWs, float3 vTangentUWs, float3 vTangentVWs ) { - float3 vVectorWs; - vVectorWs.xyz = vVectorTs.x * vTangentUWs.xyz; - vVectorWs.xyz += vVectorTs.y * vTangentVWs.xyz; - vVectorWs.xyz += vVectorTs.z * vNormalWs.xyz; - return vVectorWs.xyz; // Return without normalizing + float3 vVectorWs; + vVectorWs.xyz = vVectorTs.x * vTangentUWs.xyz; + vVectorWs.xyz += vVectorTs.y * vTangentVWs.xyz; + vVectorWs.xyz += vVectorTs.z * vNormalWs.xyz; + return vVectorWs.xyz; // Return without normalizing } float3 Vec3TsToWsNormalized( float3 vVectorTs, float3 vNormalWs, float3 vTangentUWs, float3 vTangentVWs ) { - return normalize( Vec3TsToWs( vVectorTs.xyz, vNormalWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz ) ); + return normalize( Vec3TsToWs( vVectorTs.xyz, vNormalWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz ) ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 ComputeTangentVFromSign( float3 vNormalWs, float3 vTangentUWs, float flTangentFlip ) { - return normalize( cross( vTangentUWs.xyz, vNormalWs.xyz ) ) * flTangentFlip; + return normalize( cross( vTangentUWs.xyz, vNormalWs.xyz ) ) * flTangentFlip; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 DecodeHemiOctahedronNormal( float2 vHemiOct ) { - // Rotate and scale the unit square back to the center diamond - vHemiOct.xy = ( vHemiOct.xy * 2.0 ) - 1.0; - float2 temp = float2( vHemiOct.x + vHemiOct.y, vHemiOct.x - vHemiOct.y ) * 0.5; - float3 v = float3( temp.xy, 1.0 - abs( temp.x ) - abs( temp.y ) ); - return normalize( v ); + // Rotate and scale the unit square back to the center diamond + vHemiOct.xy = ( vHemiOct.xy * 2.0 ) - 1.0; + float2 temp = float2( vHemiOct.x + vHemiOct.y, vHemiOct.x - vHemiOct.y ) * 0.5; + float3 v = float3( temp.xy, 1.0 - abs( temp.x ) - abs( temp.y ) ); + return normalize( v ); } // Defines ---------------------------------------------------------------------------------------------------------------------------------------------------- @@ -97,12 +97,12 @@ float3 DecodeHemiOctahedronNormal( float2 vHemiOct ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float MAX( float flA, float flB ) { - return max( flA, flB ); + return max( flA, flB ); } float MIN( float flA, float flB ) { - return min( flA, flB ); + return min( flA, flB ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -110,69 +110,69 @@ float MIN( float flA, float flB ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 NormalizeSafe( float3 vVec ) { - float3 vResult; + float3 vResult; - //[flatten] - if ( length( vVec.xyz ) == 0.0 ) - { - vResult.xyz = float3( 0.0, 0.0, 0.0 ); - } - else - { - vResult.xyz = normalize( vVec.xyz ); - } + //[flatten] + if ( length( vVec.xyz ) == 0.0 ) + { + vResult.xyz = float3( 0.0, 0.0, 0.0 ); + } + else + { + vResult.xyz = normalize( vVec.xyz ); + } - return vResult.xyz; + return vResult.xyz; } float2 NormalizeSafe( float2 vVec ) { - float2 vResult; + float2 vResult; - //[flatten] - if ( length( vVec.xy ) == 0.0 ) - { - vResult.xy = float2( 0.0, 0.0 ); - } - else - { - vResult.xy = normalize( vVec.xy ); - } + //[flatten] + if ( length( vVec.xy ) == 0.0 ) + { + vResult.xy = float2( 0.0, 0.0 ); + } + else + { + vResult.xy = normalize( vVec.xy ); + } - return vResult.xy; + return vResult.xy; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float ClampToPositive( float flValue ) { - return max( 0.0, flValue ); + return max( 0.0, flValue ); } float2 ClampToPositive( float2 vValue ) { - return max( float2( 0.0, 0.0 ), vValue.xy ); + return max( float2( 0.0, 0.0 ), vValue.xy ); } float3 ClampToPositive( float3 vValue ) { - return max( float3( 0.0, 0.0, 0.0 ), vValue.xyz ); + return max( float3( 0.0, 0.0, 0.0 ), vValue.xyz ); } float4 ClampToPositive( float4 vValue ) { - return max( float4( 0.0, 0.0, 0.0, 0.0 ), vValue.xyzw ); + return max( float4( 0.0, 0.0, 0.0, 0.0 ), vValue.xyzw ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float LinearRamp( float flMin, float flMax, float flInput ) { - return saturate( ( flInput - flMin ) / ( flMax - flMin ) ); + return saturate( ( flInput - flMin ) / ( flMax - flMin ) ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float fsel( float flComparand, float flValGE, float flLT ) { - return ( flComparand >= 0.0 ) ? flValGE : flLT; + return ( flComparand >= 0.0 ) ? flValGE : flLT; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -180,11 +180,11 @@ float fsel( float flComparand, float flValGE, float flLT ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float RemapVal( float flOldVal, float flOldMin, float flOldMax, float flNewMin, float flNewMax ) { - // Put the old val into 0-1 range based on the old min/max - float flValNormalized = ( flOldVal - flOldMin ) / ( flOldMax - flOldMin ); + // Put the old val into 0-1 range based on the old min/max + float flValNormalized = ( flOldVal - flOldMin ) / ( flOldMax - flOldMin ); - // Map 0-1 range into new min/max - return ( flValNormalized * ( flNewMax - flNewMin ) ) + flNewMin; + // Map 0-1 range into new min/max + return ( flValNormalized * ( flNewMax - flNewMin ) ) + flNewMin; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -192,77 +192,77 @@ float RemapVal( float flOldVal, float flOldMin, float flOldMax, float flNewMin, //------------------------------------------------------------------------------------------------------------------------------------------------------------- float RemapValClamped( float flOldVal, float flOldMin, float flOldMax, float flNewMin, float flNewMax ) { - // Put the old val into 0-1 range based on the old min/max - float flValNormalized = saturate( ( flOldVal - flOldMin ) / ( flOldMax - flOldMin ) ); + // Put the old val into 0-1 range based on the old min/max + float flValNormalized = saturate( ( flOldVal - flOldMin ) / ( flOldMax - flOldMin ) ); - // Map 0-1 range into new min/max - return ( flValNormalized * ( flNewMax - flNewMin ) ) + flNewMin; + // Map 0-1 range into new min/max + return ( flValNormalized * ( flNewMax - flNewMin ) ) + flNewMin; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float4 PackToColor( float4 vValue ) { - return ( ( vValue.xyzw * 0.5 ) + 0.5 ); + return ( ( vValue.xyzw * 0.5 ) + 0.5 ); } float3 PackToColor( float3 vValue ) { - return ( ( vValue.xyz * 0.5 ) + 0.5 ); + return ( ( vValue.xyz * 0.5 ) + 0.5 ); } float2 PackToColor( float2 vValue ) { - return ( ( vValue.xy * 0.5 ) + 0.5 ); + return ( ( vValue.xy * 0.5 ) + 0.5 ); } float PackToColor( float flValue ) { - return ( ( flValue * 0.5 ) + 0.5 ); + return ( ( flValue * 0.5 ) + 0.5 ); } float4 UnpackFromColor( float4 cColor ) { - return ( ( cColor.xyzw * 2.0 ) - 1.0 ); + return ( ( cColor.xyzw * 2.0 ) - 1.0 ); } float3 UnpackFromColor( float3 cColor ) { - return ( ( cColor.xyz * 2.0 ) - 1.0 ); + return ( ( cColor.xyz * 2.0 ) - 1.0 ); } float2 UnpackFromColor( float2 cColor ) { - return ( ( cColor.xy * 2.0 ) - 1.0 ); + return ( ( cColor.xy * 2.0 ) - 1.0 ); } float UnpackFromColor( float flColor ) { - return ( ( flColor * 2.0 ) - 1.0 ); + return ( ( flColor * 2.0 ) - 1.0 ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float Luminance( float3 cColor ) { - // Formula for calculating luminance based on NTSC standard - float3 tmpv = float3( 0.2125, 0.7154, 0.0721 ); - float flLuminance = dot( cColor.rgb, tmpv.rgb ); + // Formula for calculating luminance based on NTSC standard + float3 tmpv = float3( 0.2125, 0.7154, 0.0721 ); + float flLuminance = dot( cColor.rgb, tmpv.rgb ); - // Alternate formula for calculating luminance for linear RGB space (Widely used in color hue and saturation computations) - //float3 tmpv = float3( 0.3086, 0.6094, 0.0820 );; - //float flLuminance = dot( cColor.rgb, tmpv.rgb ); + // Alternate formula for calculating luminance for linear RGB space (Widely used in color hue and saturation computations) + //float3 tmpv = float3( 0.3086, 0.6094, 0.0820 );; + //float flLuminance = dot( cColor.rgb, tmpv.rgb ); - // Simple average - //float3 tmpv = float3( 0.333, 0.333, 0.333 ); - //float flLuminance = dot( cColor.rgb, tmpv.rgb ); + // Simple average + //float3 tmpv = float3( 0.333, 0.333, 0.333 ); + //float flLuminance = dot( cColor.rgb, tmpv.rgb ); - return flLuminance; + return flLuminance; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 SaturateColor( float3 cColor, float flTargetSaturation ) { - float lum = Luminance( cColor.rgb ); - return lerp( float3( lum, lum, lum ), cColor.rgb, flTargetSaturation.xxx ); + float lum = Luminance( cColor.rgb ); + return lerp( float3( lum, lum, lum ), cColor.rgb, flTargetSaturation.xxx ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -270,32 +270,32 @@ float3 SaturateColor( float3 cColor, float flTargetSaturation ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float LinearToGamma20( float vLinear ) { - return pow( vLinear, 0.5 ); + return pow( vLinear, 0.5 ); } float3 LinearToGamma20( float3 vLinear ) { - return pow( vLinear.rgb, float3( 0.5, 0.5, 0.5 ) ); + return pow( vLinear.rgb, float3( 0.5, 0.5, 0.5 ) ); } float4 LinearToGamma20( float4 vLinear ) { - return float4( pow( vLinear.rgb, float3( 0.5, 0.5, 0.5 ) ), vLinear.a ); + return float4( pow( vLinear.rgb, float3( 0.5, 0.5, 0.5 ) ), vLinear.a ); } float Gamma20ToLinear( float vGamma ) { - return vGamma * vGamma; + return vGamma * vGamma; } float3 Gamma20ToLinear( float3 vGamma ) { - return vGamma.rgb * vGamma.rgb; + return vGamma.rgb * vGamma.rgb; } float4 Gamma20ToLinear( float4 vGamma ) { - return float4( vGamma.rgb * vGamma.rgb, vGamma.a ); + return float4( vGamma.rgb * vGamma.rgb, vGamma.a ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -303,32 +303,32 @@ float4 Gamma20ToLinear( float4 vGamma ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float LinearToGamma22( float vLinear ) { - return pow( vLinear, 0.454545454545455 ); + return pow( vLinear, 0.454545454545455 ); } float3 LinearToGamma22( float3 vLinear ) { - return pow( vLinear.rgb, float3( 0.454545454545455, 0.454545454545455, 0.454545454545455 ) ); + return pow( vLinear.rgb, float3( 0.454545454545455, 0.454545454545455, 0.454545454545455 ) ); } float4 LinearToGamma22( float4 vLinear ) { - return float4( pow( vLinear.rgb, float3( 0.454545454545455, 0.454545454545455, 0.454545454545455 ) ), vLinear.a ); + return float4( pow( vLinear.rgb, float3( 0.454545454545455, 0.454545454545455, 0.454545454545455 ) ), vLinear.a ); } float Gamma22ToLinear( float vGamma ) { - return pow( vGamma, 2.2 ); + return pow( vGamma, 2.2 ); } float3 Gamma22ToLinear( float3 vGamma ) { - return pow( vGamma.rgb, float3( 2.2, 2.2, 2.2 ) ); + return pow( vGamma.rgb, float3( 2.2, 2.2, 2.2 ) ); } float4 Gamma22ToLinear( float4 vGamma ) { - return float4( pow( vGamma.rgb, float3( 2.2, 2.2, 2.2 ) ), vGamma.a ); + return float4( pow( vGamma.rgb, float3( 2.2, 2.2, 2.2 ) ), vGamma.a ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -336,28 +336,28 @@ float4 Gamma22ToLinear( float4 vGamma ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 SrgbGammaToLinear( float3 vSrgbGammaColor ) { - // 15 asm instructions - float3 vLinearSegment = vSrgbGammaColor.rgb / 12.92; - float3 vExpSegment = pow( ( ( vSrgbGammaColor.rgb / 1.055 ) + ( 0.055 / 1.055 ) ), float3( 2.4, 2.4, 2.4 ) ); + // 15 asm instructions + float3 vLinearSegment = vSrgbGammaColor.rgb / 12.92; + float3 vExpSegment = pow( ( ( vSrgbGammaColor.rgb / 1.055 ) + ( 0.055 / 1.055 ) ), float3( 2.4, 2.4, 2.4 ) ); - float3 vLinearColor = float3( ( vSrgbGammaColor.r <= 0.04045 ) ? vLinearSegment.r : vExpSegment.r, - ( vSrgbGammaColor.g <= 0.04045 ) ? vLinearSegment.g : vExpSegment.g, - ( vSrgbGammaColor.b <= 0.04045 ) ? vLinearSegment.b : vExpSegment.b ); + float3 vLinearColor = float3( ( vSrgbGammaColor.r <= 0.04045 ) ? vLinearSegment.r : vExpSegment.r, + ( vSrgbGammaColor.g <= 0.04045 ) ? vLinearSegment.g : vExpSegment.g, + ( vSrgbGammaColor.b <= 0.04045 ) ? vLinearSegment.b : vExpSegment.b ); - return vLinearColor.rgb; + return vLinearColor.rgb; } float3 SrgbLinearToGamma( float3 vLinearColor ) { - // 15 asm instructions - float3 vLinearSegment = vLinearColor.rgb * 12.92; - float3 vExpSegment = ( 1.055 * pow( vLinearColor.rgb, float3 ( 1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4 ) ) ) - 0.055; + // 15 asm instructions + float3 vLinearSegment = vLinearColor.rgb * 12.92; + float3 vExpSegment = ( 1.055 * pow( vLinearColor.rgb, float3 ( 1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4 ) ) ) - 0.055; - float3 vGammaColor = float3( ( vLinearColor.r <= 0.0031308 ) ? vLinearSegment.r : vExpSegment.r, - ( vLinearColor.g <= 0.0031308 ) ? vLinearSegment.g : vExpSegment.g, - ( vLinearColor.b <= 0.0031308 ) ? vLinearSegment.b : vExpSegment.b ); + float3 vGammaColor = float3( ( vLinearColor.r <= 0.0031308 ) ? vLinearSegment.r : vExpSegment.r, + ( vLinearColor.g <= 0.0031308 ) ? vLinearSegment.g : vExpSegment.g, + ( vLinearColor.b <= 0.0031308 ) ? vLinearSegment.b : vExpSegment.b ); - return vGammaColor.rgb; + return vGammaColor.rgb; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -365,25 +365,25 @@ float3 SrgbLinearToGamma( float3 vLinearColor ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float4 RGBMEncode( float3 vLinearColor ) { - vLinearColor.rgb = sqrt( vLinearColor.rgb ); - vLinearColor.rgb = saturate( vLinearColor.rgb * ( 1.0 / 6.0 ) ); + vLinearColor.rgb = sqrt( vLinearColor.rgb ); + vLinearColor.rgb = saturate( vLinearColor.rgb * ( 1.0 / 6.0 ) ); - float4 vRGBM; + float4 vRGBM; - vRGBM.a = max( max( vLinearColor.r, vLinearColor.g ), max( vLinearColor.b, 1.0 / 6.0 ) ); - vRGBM.a = ceil( vRGBM.a * 255.0 ) / 255.0; - vRGBM.rgb = vLinearColor.rgb / vRGBM.a; + vRGBM.a = max( max( vLinearColor.r, vLinearColor.g ), max( vLinearColor.b, 1.0 / 6.0 ) ); + vRGBM.a = ceil( vRGBM.a * 255.0 ) / 255.0; + vRGBM.rgb = vLinearColor.rgb / vRGBM.a; - return vRGBM; + return vRGBM; } float3 RGBMDecode( float4 vRGBM ) { - float3 vLinearColor = vRGBM.rgb * 6.0 * vRGBM.a; + float3 vLinearColor = vRGBM.rgb * 6.0 * vRGBM.a; - vLinearColor.rgb *= vLinearColor.rgb; + vLinearColor.rgb *= vLinearColor.rgb; - return vLinearColor.rgb; + return vLinearColor.rgb; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -391,106 +391,106 @@ float3 RGBMDecode( float4 vRGBM ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float2 UnpackNormal2D( float2 vNormal ) { - return ( ( vNormal.xy * 2.0 ) - 1.0 ); + return ( ( vNormal.xy * 2.0 ) - 1.0 ); } float2 PackNormal2D( float2 vNormal ) { - return ( ( vNormal.xy * 0.5 ) + 0.5 ); + return ( ( vNormal.xy * 0.5 ) + 0.5 ); } float3 UnpackNormal3D( float3 vNormal ) { - return ( ( vNormal.xyz * 2.0 ) - 1.0 ); + return ( ( vNormal.xyz * 2.0 ) - 1.0 ); } float3 PackNormal3D( float3 vNormal ) { - return ( ( vNormal.xyz * 0.5 ) + 0.5 ); + return ( ( vNormal.xyz * 0.5 ) + 0.5 ); } float3 ComputeNormalFromXY( float2 vXY ) { - float3 vNormalTs; + float3 vNormalTs; - vNormalTs.xy = vXY.xy; - vNormalTs.z = sqrt( saturate( 1.0 - dot( vNormalTs.xy, vNormalTs.xy ) ) ); + vNormalTs.xy = vXY.xy; + vNormalTs.z = sqrt( saturate( 1.0 - dot( vNormalTs.xy, vNormalTs.xy ) ) ); - return vNormalTs.xyz; + return vNormalTs.xyz; } float3 ComputeNormalFromRGTexture( float2 vRGPixel ) { - float3 vNormalTs; + float3 vNormalTs; - vNormalTs.xy = UnpackNormal2D( vRGPixel.rg ); - vNormalTs.z = sqrt( saturate( 1.0 - dot( vNormalTs.xy, vNormalTs.xy ) ) ); + vNormalTs.xy = UnpackNormal2D( vRGPixel.rg ); + vNormalTs.z = sqrt( saturate( 1.0 - dot( vNormalTs.xy, vNormalTs.xy ) ) ); - return vNormalTs.xyz; + return vNormalTs.xyz; } float3 ComputeNormalFromDXT5Texture( float4 vDXT5Pixel ) { - return ComputeNormalFromRGTexture( vDXT5Pixel.ag ); + return ComputeNormalFromRGTexture( vDXT5Pixel.ag ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 ConvertSphericalToNormal( float2 vSpherical ) { - float2 sincosTheta; - sincos( vSpherical.x * M_PI, sincosTheta.x, sincosTheta.y ); - float2 sincosPhi = float2( sqrt( 1.0 - ( vSpherical.y * vSpherical.y ) ), vSpherical.y ); + float2 sincosTheta; + sincos( vSpherical.x * M_PI, sincosTheta.x, sincosTheta.y ); + float2 sincosPhi = float2( sqrt( 1.0 - ( vSpherical.y * vSpherical.y ) ), vSpherical.y ); - return float3( sincosTheta.y * sincosPhi.x, sincosTheta.x * sincosPhi.x, sincosPhi.y ); + return float3( sincosTheta.y * sincosPhi.x, sincosTheta.x * sincosPhi.x, sincosPhi.y ); } float2 ConvertNormalToSphericalRGTexture( float3 vNormal ) { - // TODO: atan2 isn't defined at 0,0. Is this a problem? - float flAtanYX = atan2( vNormal.y, vNormal.x ) / M_PI; + // TODO: atan2 isn't defined at 0,0. Is this a problem? + float flAtanYX = atan2( vNormal.y, vNormal.x ) / M_PI; - return PackToColor( float2( flAtanYX, vNormal.z ) ); + return PackToColor( float2( flAtanYX, vNormal.z ) ); } float3 ComputeNormalFromSphericalRGTexture( float2 vRGPixel ) { - float2 vUnpackedSpherical = UnpackNormal2D( vRGPixel.rg ); + float2 vUnpackedSpherical = UnpackNormal2D( vRGPixel.rg ); - return ConvertSphericalToNormal( vUnpackedSpherical.xy ); + return ConvertSphericalToNormal( vUnpackedSpherical.xy ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 CalculateCameraToPositionRayWs( float3 vPositionWs ) { - return ( vPositionWs.xyz - g_vCameraPositionWs.xyz ); + return ( vPositionWs.xyz - g_vCameraPositionWs.xyz ); } float3 CalculateCameraToPositionDirWs( float3 vPositionWs ) { - return normalize( CalculateCameraToPositionRayWs( vPositionWs.xyz ) ); + return normalize( CalculateCameraToPositionRayWs( vPositionWs.xyz ) ); } float3 CalculateCameraToPositionRayTs( float3 vPositionWs, float3 vTangentUWs, float3 vTangentVWs, float3 vNormalWs ) { - float3 vViewVectorWs = CalculateCameraToPositionRayWs( vPositionWs.xyz ); // Not normalized - return Vec3WsToTs( vViewVectorWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vNormalWs.xyz ); // Not Normalized + float3 vViewVectorWs = CalculateCameraToPositionRayWs( vPositionWs.xyz ); // Not normalized + return Vec3WsToTs( vViewVectorWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vNormalWs.xyz ); // Not Normalized } float3 CalculateCameraToPositionDirTs( float3 vPositionWs, float3 vTangentUWs, float3 vTangentVWs, float3 vNormalWs ) { - return normalize( CalculateCameraToPositionRayTs( vPositionWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vNormalWs.xyz ) ); + return normalize( CalculateCameraToPositionRayTs( vPositionWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vNormalWs.xyz ) ); } float3 CalculateCameraToPositionRayWsMultiview( uint nView, float3 vPositionWs ) { - // TODO! - return CalculateCameraToPositionRayWs( vPositionWs.xyz ); - //return ( vPositionWs.xyz - g_vCameraPositionWsMultiview[ nView ].xyz ); + // TODO! + return CalculateCameraToPositionRayWs( vPositionWs.xyz ); + //return ( vPositionWs.xyz - g_vCameraPositionWsMultiview[ nView ].xyz ); } float3 CalculateCameraToPositionDirWsMultiview( uint nView, float3 vPositionWs ) { - return normalize( CalculateCameraToPositionRayWsMultiview( nView, vPositionWs.xyz ) ); + return normalize( CalculateCameraToPositionRayWsMultiview( nView, vPositionWs.xyz ) ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -498,53 +498,53 @@ float3 CalculateCameraToPositionDirWsMultiview( uint nView, float3 vPositionWs ) //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 CalculatePositionToCameraRayWs( float3 vPositionWs ) { - return -CalculateCameraToPositionRayWs( vPositionWs.xyz ); + return -CalculateCameraToPositionRayWs( vPositionWs.xyz ); } float3 CalculatePositionToCameraDirWs( float3 vPositionWs ) { - return -CalculateCameraToPositionDirWs( vPositionWs.xyz ); + return -CalculateCameraToPositionDirWs( vPositionWs.xyz ); } float3 CalculatePositionToCameraRayTs( float3 vPositionWs, float3 vTangentUWs, float3 vTangentVWs, float3 vNormalWs ) { - return -CalculateCameraToPositionRayTs( vPositionWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vNormalWs.xyz ); + return -CalculateCameraToPositionRayTs( vPositionWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vNormalWs.xyz ); } float3 CalculatePositionToCameraDirTs( float3 vPositionWs, float3 vTangentUWs, float3 vTangentVWs, float3 vNormalWs ) { - return -CalculateCameraToPositionDirTs( vPositionWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vNormalWs.xyz ); + return -CalculateCameraToPositionDirTs( vPositionWs.xyz, vTangentUWs.xyz, vTangentVWs.xyz, vNormalWs.xyz ); } float3 CalculatePositionToCameraRayWsMultiview( uint nView, float3 vPositionWs ) { - return -CalculateCameraToPositionRayWsMultiview( nView, vPositionWs.xyz ); + return -CalculateCameraToPositionRayWsMultiview( nView, vPositionWs.xyz ); } float3 CalculatePositionToCameraDirWsMultiview( uint nView, float3 vPositionWs ) { - return -CalculateCameraToPositionDirWsMultiview( nView, vPositionWs.xyz ); + return -CalculateCameraToPositionDirWsMultiview( nView, vPositionWs.xyz ); } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float3 CalculateCameraReflectionDirWs( float3 vPositionWs, float3 vNormalWs ) { - float3 vViewVectorWs = CalculateCameraToPositionDirWs( vPositionWs.xyz ); - float3 vReflectionVectorWs = reflect( vViewVectorWs.xyz, vNormalWs.xyz ); - return vReflectionVectorWs.xyz; + float3 vViewVectorWs = CalculateCameraToPositionDirWs( vPositionWs.xyz ); + float3 vReflectionVectorWs = reflect( vViewVectorWs.xyz, vNormalWs.xyz ); + return vReflectionVectorWs.xyz; } float3 CalculateCameraReflectionDirWsMultiview( uint nView, float3 vPositionWs, float3 vNormalWs ) { - float3 vViewVectorWs = CalculateCameraToPositionDirWsMultiview( nView, vPositionWs.xyz ); - float3 vReflectionVectorWs = reflect( vViewVectorWs.xyz, vNormalWs.xyz ); - return vReflectionVectorWs.xyz; + float3 vViewVectorWs = CalculateCameraToPositionDirWsMultiview( nView, vPositionWs.xyz ); + float3 vReflectionVectorWs = reflect( vViewVectorWs.xyz, vNormalWs.xyz ); + return vReflectionVectorWs.xyz; } //------------------------------------------------------------------------------------------------------------------------------------------------------------- float CalculateDistanceToCamera( float3 vPositionWs ) { - return length( g_vCameraPositionWs.xyz - vPositionWs.xyz ); + return length( g_vCameraPositionWs.xyz - vPositionWs.xyz ); } #endif diff --git a/Assets/ScriptableRenderLoop/ForwardRenderLoop/ValveMenuTools.cs b/Assets/ScriptableRenderLoop/ForwardRenderLoop/ValveMenuTools.cs index cf6551cd3af..5d9f589ba6f 100755 --- a/Assets/ScriptableRenderLoop/ForwardRenderLoop/ValveMenuTools.cs +++ b/Assets/ScriptableRenderLoop/ForwardRenderLoop/ValveMenuTools.cs @@ -1,6 +1,6 @@ -// Copyright (c) Valve Corporation, All rights reserved. ====================================================================================================== +// Copyright (c) Valve Corporation, All rights reserved. ====================================================================================================== -#if ( UNITY_EDITOR ) +#if (UNITY_EDITOR) using UnityEngine; using System; @@ -11,610 +11,610 @@ //--------------------------------------------------------------------------------------------------------------------------------------------------- public class ValveRefreshStandardShader { - static void SaveAssetsAndFreeMemory() - { - UnityEditor.AssetDatabase.SaveAssets(); - GC.Collect(); - UnityEditor.EditorUtility.UnloadUnusedAssetsImmediate(); - UnityEditor.AssetDatabase.Refresh(); - } - - private static void RenameShadersInAllMaterials( string nameBefore, string nameAfter ) - { - Shader destShader = Shader.Find( nameAfter ); - if ( destShader == null ) - { - return; - } - - int i = 0; - int nCount = 0; - foreach ( string s in UnityEditor.AssetDatabase.GetAllAssetPaths() ) - { - if ( s.EndsWith( ".mat", StringComparison.OrdinalIgnoreCase ) ) - { - nCount++; - } - } - - foreach ( string s in UnityEditor.AssetDatabase.GetAllAssetPaths() ) - { - if ( s.EndsWith( ".mat", StringComparison.OrdinalIgnoreCase ) ) - { - i++; - if ( UnityEditor.EditorUtility.DisplayCancelableProgressBar( "Valve Material Conversion", string.Format( "({0} of {1}) {2}", i, nCount, s ), ( float )i / ( float )nCount ) ) - { - break; - } - - Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath( s ) as Material; - //Debug.Log( m.name + "\n" ); - //Debug.Log( m.shader.name + "\n" ); - if ( m.shader.name.Equals( nameBefore ) ) - { - Debug.Log( "Converting from \"" + nameBefore + "\"-->\"" + nameAfter + "\": " + m.name + "\n" ); - m.shader = destShader; - SaveAssetsAndFreeMemory(); - } - } - } - - //object[] obj = GameObject.FindObjectsOfType( typeof( GameObject ) ); - //foreach ( object o in obj ) - //{ - // GameObject g = ( GameObject )o; - // - // Renderer[] renderers = g.GetComponents(); - // foreach ( Renderer r in renderers ) - // { - // foreach ( Material m in r.sharedMaterials ) - // { - // //Debug.Log( m.name + "\n" ); - // //Debug.Log( m.shader.name + "\n" ); - // if ( m.shader.name.Equals( "Standard" ) ) - // { - // Debug.Log( "Refreshing Standard shader for material: " + m.name + "\n" ); - // m.shader = destShader; - // SaveAssetsAndFreeMemory(); - // } - // } - // } - //} - - UnityEditor.EditorUtility.ClearProgressBar(); - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - public static bool StandardToValveSingleMaterial( Material m, Shader srcShader, Shader destShader, bool bRecordUnknownShaders, List unknownShaders ) - { - string n = srcShader.name; - - if ( n.Equals( destShader.name ) ) - { - // Do nothing - //Debug.Log( " Skipping " + m.name + "\n" ); - return false; - } - else if ( n.Equals( "Standard" ) || n.Equals( "Valve/VR/Standard" ) ) - { - // Metallic specular - Debug.Log( " Converting from \"" + n + "\"-->\"" + destShader.name + "\": " + m.name + "\n" ); - - m.shader = destShader; - m.SetOverrideTag( "OriginalShader", n ); - - m.SetInt( "_SpecularMode", 2 ); - m.DisableKeyword( "S_SPECULAR_NONE" ); - m.DisableKeyword( "S_SPECULAR_BLINNPHONG" ); - m.EnableKeyword( "S_SPECULAR_METALLIC" ); - return true; - } - else if ( n.Equals( "Standard (Specular setup)" ) || n.Equals( "Legacy Shaders/Bumped Diffuse" ) || n.Equals( "Legacy Shaders/Transparent/Diffuse" ) ) - { - // Regular specular - Debug.Log( " Converting from \"" + n + "\"-->\"" + destShader.name + "\": " + m.name + "\n" ); - - m.shader = destShader; - m.SetOverrideTag( "OriginalShader", n ); - - m.SetInt( "_SpecularMode", 1 ); - m.DisableKeyword( "S_SPECULAR_NONE" ); - m.EnableKeyword( "S_SPECULAR_BLINNPHONG" ); - m.DisableKeyword( "S_SPECULAR_METALLIC" ); - - if ( n.Equals( "Legacy Shaders/Transparent/Diffuse" ) ) - { - m.SetFloat( "_Mode", 2 ); - m.SetOverrideTag( "RenderType", "Transparent" ); - m.SetInt( "_SrcBlend", ( int )UnityEngine.Rendering.BlendMode.SrcAlpha ); - m.SetInt( "_DstBlend", ( int )UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha ); - m.SetInt( "_ZWrite", 0 ); - m.DisableKeyword( "_ALPHATEST_ON" ); - m.EnableKeyword( "_ALPHABLEND_ON" ); - m.DisableKeyword( "_ALPHAPREMULTIPLY_ON" ); - m.renderQueue = 3000; - } - return true; - } - else if ( n.Equals( "Unlit/Color" ) || n.Equals( "Unlit/Texture" ) || n.Equals( "Unlit/Transparent" ) || n.Equals( "Unlit/Transparent Cutout" ) ) - { - // Unlit - Debug.Log( " Converting from \"" + n + "\"-->\"" + destShader.name + "\": " + m.name + "\n" ); - - m.shader = destShader; - m.SetOverrideTag( "OriginalShader", n ); - m.SetInt( "g_bUnlit", 1 ); - m.EnableKeyword( "S_UNLIT" ); - - m.SetColor( "_EmissionColor", Color.black ); - - if ( n.Equals( "Unlit/Color" ) ) - { - m.SetTexture( "_MainTex", Texture2D.whiteTexture ); - } - else - { - m.SetColor( "_Color", Color.white ); - - if ( n.Equals( "Unlit/Transparent Cutout" ) ) - { - m.SetFloat( "_Mode", 1 ); - m.SetOverrideTag( "RenderType", "TransparentCutout" ); - m.SetInt( "_SrcBlend", ( int )UnityEngine.Rendering.BlendMode.One ); - m.SetInt( "_DstBlend", ( int )UnityEngine.Rendering.BlendMode.Zero ); - m.SetInt( "_ZWrite", 1 ); - m.EnableKeyword( "_ALPHATEST_ON" ); - m.DisableKeyword( "_ALPHABLEND_ON" ); - m.DisableKeyword( "_ALPHAPREMULTIPLY_ON" ); - m.renderQueue = 2450; - } - else if ( n.Equals( "Unlit/Transparent" ) ) - { - m.SetFloat( "_Mode", 2 ); - m.SetOverrideTag( "RenderType", "Transparent" ); - m.SetInt( "_SrcBlend", ( int )UnityEngine.Rendering.BlendMode.SrcAlpha ); - m.SetInt( "_DstBlend", ( int )UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha ); - m.SetInt( "_ZWrite", 0 ); - m.DisableKeyword( "_ALPHATEST_ON" ); - m.EnableKeyword( "_ALPHABLEND_ON" ); - m.DisableKeyword( "_ALPHAPREMULTIPLY_ON" ); - m.renderQueue = 3000; - } - } - - return true; - } - else if ( bRecordUnknownShaders ) - { - // Don't know how to convert, so add to list to spew at the end - Debug.LogWarning( " Don't know how to convert shader \"" + n + "\"" + " in material \"" + m.name + "\"" + "\n" ); - if ( !unknownShaders.Contains( n ) ) - { - unknownShaders.Add( n ); - } - return false; - } - - return false; - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - private static void StandardToValve( bool bConvertAllMaterials ) - { - int nNumMaterialsConverted = 0; - Debug.Log( "Begin Convert to Valve Shaders\n\n" + Time.realtimeSinceStartup ); - - Shader destShader = Shader.Find( "Valve/vr_standard" ); - if ( destShader == null ) - { - Debug.LogWarning( " ERROR! Cannot find the \"Valve/vr_standard\" shader!" + "\n" ); - return; - } - - List< string > unknownShaders = new List< string >(); - List< string > alreadyConvertedMaterials = new List(); - - if ( bConvertAllMaterials ) - { - int i = 0; - int nCount = 0; - foreach ( string s in UnityEditor.AssetDatabase.GetAllAssetPaths() ) - { - if ( s.EndsWith( ".mat", StringComparison.OrdinalIgnoreCase ) ) - { - nCount++; - } - } - - foreach ( string s in UnityEditor.AssetDatabase.GetAllAssetPaths() ) - { - if ( s.EndsWith( ".mat", StringComparison.OrdinalIgnoreCase ) ) - { - i++; - if ( UnityEditor.EditorUtility.DisplayCancelableProgressBar( "Valve Material Conversion to Valve Shaders", string.Format( "({0} of {1}) {2}", i, nCount, s ), ( float )i / ( float )nCount ) ) - { - break; - } - - Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath( s ) as Material; - - if ( ( m == null ) || ( m.shader == null ) ) - continue; - - if ( !m.name.StartsWith( "" ) ) - continue; - - if ( alreadyConvertedMaterials.Contains( m.name ) ) - continue; - alreadyConvertedMaterials.Add( m.name ); - - if ( StandardToValveSingleMaterial( m, m.shader, destShader, true, unknownShaders ) ) - { - nNumMaterialsConverted++; - } - - SaveAssetsAndFreeMemory(); - } - } - } - else - { - int i = 0; - int nCount = 0; - Renderer[] renderers = GameObject.FindObjectsOfType(); - List countedMaterials = new List(); - foreach ( Renderer r in renderers ) - { - if ( r.sharedMaterials == null ) - continue; - - foreach ( Material m in r.sharedMaterials ) - { - if ( ( m == null ) || ( m.shader == null ) ) - continue; - - if ( !m.name.StartsWith( "" ) ) - continue; - - if ( countedMaterials.Contains( m.name ) ) - continue; - countedMaterials.Add( m.name ); - - string assetPath = UnityEditor.AssetDatabase.GetAssetPath( m ); - Material mainAsset = UnityEditor.AssetDatabase.LoadMainAssetAtPath( assetPath ) as Material; - if ( !mainAsset ) - { - Debug.LogError( "Error calling LoadMainAssetAtPath( " + assetPath + " )!\n\n" ); - continue; - } - - nCount++; - } - } - - bool bCanceled = false; - foreach ( Renderer r in renderers ) - { - if ( r.sharedMaterials == null ) - continue; - - foreach ( Material m in r.sharedMaterials ) - { - if ( ( m == null ) || ( m.shader == null ) ) - continue; - - if ( !m.name.StartsWith( "" ) ) - continue; - - if ( alreadyConvertedMaterials.Contains( m.name ) ) - continue; - alreadyConvertedMaterials.Add( m.name ); - - string assetPath = UnityEditor.AssetDatabase.GetAssetPath( m ); - Material mainAsset = UnityEditor.AssetDatabase.LoadMainAssetAtPath( assetPath ) as Material; - if ( !mainAsset ) - { - Debug.LogError( "Error calling LoadMainAssetAtPath( " + assetPath + " )!\n\n" ); - continue; - } - - i++; - if ( UnityEditor.EditorUtility.DisplayCancelableProgressBar( "Valve Material Conversion to Valve Shaders", string.Format( "({0} of {1}) {2}", i, nCount, assetPath ), ( float )i / ( float )nCount ) ) - { - bCanceled = true; - break; - } - - if ( StandardToValveSingleMaterial( mainAsset, mainAsset.shader, destShader, true, unknownShaders ) ) - { - nNumMaterialsConverted++; - } - - SaveAssetsAndFreeMemory(); - } - - if ( bCanceled ) - break; - } - } - - foreach ( string s in unknownShaders ) - { - Debug.LogWarning( " Don't know how to convert shader \"" + s + "\"" + "\n" ); - } - - Debug.Log( "Converted " + nNumMaterialsConverted + " materials to Valve Shaders\n\n" + Time.realtimeSinceStartup ); - - UnityEditor.EditorUtility.ClearProgressBar(); - } - - [UnityEditor.MenuItem( "Valve/Shader Dev/Convert Active Materials to Valve Shaders", false, 50 )] - private static void StandardToValveCurrent() - { - StandardToValve( false ); - } - - [UnityEditor.MenuItem( "Valve/Shader Dev/Convert All Materials to Valve Shaders", false, 100 )] - private static void StandardToValveAll() - { - StandardToValve( true ); - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - private static bool ValveToStandardSingleMaterial( Material m, Shader destShaderStandard, Shader destShaderStandardSpecular ) - { - if ( m.shader.name.Equals( "Valve/vr_standard" ) ) - { - if ( ( m.GetTag( "OriginalShader", true ) != null ) && ( m.GetTag( "OriginalShader", true ).Length > 0 ) ) - { - Debug.Log( " Converting from \"" + m.shader.name + "\"-->\"" + m.GetTag( "OriginalShader", true ) + "\": " + m.name + "\n" ); - m.shader = Shader.Find( m.GetTag( "OriginalShader", true ) ); - return true; - } - else if ( m.GetInt( "_SpecularMode" ) == 2 ) - { - // Metallic specular - Debug.Log( " Converting from \"" + m.shader.name + "\"-->\"" + destShaderStandard.name + "\": " + m.name + "\n" ); - m.shader = destShaderStandard; - return true; - } - else - { - // Regular specular - Debug.Log( " Converting from \"" + m.shader.name + "\"-->\"" + destShaderStandardSpecular.name + "\": " + m.name + "\n" ); - m.shader = destShaderStandardSpecular; - return true; - } - } - - return false; - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - [UnityEditor.MenuItem( "Valve/Shader Dev/Convert All Materials Back to Unity Shaders", false, 101 )] - private static void ValveToStandard( bool bConvertAllMaterials ) - { - int nNumMaterialsConverted = 0; - Debug.Log( "Begin Convert to Unity Shaders\n\n" + Time.realtimeSinceStartup ); - - Shader destShaderStandard = Shader.Find( "Standard" ); - if ( destShaderStandard == null ) - { - Debug.LogWarning( " ERROR! Cannot find the \"Standard\" shader!" + "\n" ); - return; - } - - Shader destShaderStandardSpecular = Shader.Find( "Standard (Specular setup)" ); - if ( destShaderStandardSpecular == null ) - { - Debug.LogWarning( " ERROR! Cannot find the \"Standard (Specular setup)\" shader!" + "\n" ); - return; - } - - List alreadyConvertedMaterials = new List(); - - if ( bConvertAllMaterials ) - { - int i = 0; - int nCount = 0; - foreach ( string s in UnityEditor.AssetDatabase.GetAllAssetPaths() ) - { - if ( s.EndsWith( ".mat", StringComparison.OrdinalIgnoreCase ) ) - { - nCount++; - } - } - - foreach ( string s in UnityEditor.AssetDatabase.GetAllAssetPaths() ) - { - if ( s.EndsWith( ".mat", StringComparison.OrdinalIgnoreCase ) ) - { - i++; - if ( UnityEditor.EditorUtility.DisplayCancelableProgressBar( "Valve Material Conversion Back to Unity Shaders", string.Format( "({0} of {1}) {2}", i, nCount, s ), ( float )i / ( float )nCount ) ) - { - break; - } - - Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath( s ) as Material; - if ( ValveToStandardSingleMaterial( m, destShaderStandard, destShaderStandardSpecular ) ) - { - nNumMaterialsConverted++; - } - - SaveAssetsAndFreeMemory(); - } - } - } - else - { - int i = 0; - int nCount = 0; - Renderer[] renderers = GameObject.FindObjectsOfType(); - List countedMaterials = new List(); - foreach ( Renderer r in renderers ) - { - if ( r.sharedMaterials == null ) - continue; - - foreach ( Material m in r.sharedMaterials ) - { - if ( ( m == null ) || ( m.shader == null ) ) - continue; - - if ( !m.name.StartsWith( "" ) ) - continue; - - if ( countedMaterials.Contains( m.name ) ) - continue; - countedMaterials.Add( m.name ); - - string assetPath = UnityEditor.AssetDatabase.GetAssetPath( m ); - Material mainAsset = UnityEditor.AssetDatabase.LoadMainAssetAtPath( assetPath ) as Material; - if ( !mainAsset ) - { - Debug.LogError( "Error calling LoadMainAssetAtPath( " + assetPath + " )!\n\n" ); - continue; - } - - nCount++; - } - } - - bool bCanceled = false; - foreach ( Renderer r in renderers ) - { - if ( r.sharedMaterials == null ) - continue; - - foreach ( Material m in r.sharedMaterials ) - { - if ( ( m == null ) || ( m.shader == null ) ) - continue; - - if ( !m.name.StartsWith( "" ) ) - continue; - - if ( alreadyConvertedMaterials.Contains( m.name ) ) - continue; - alreadyConvertedMaterials.Add( m.name ); - - string assetPath = UnityEditor.AssetDatabase.GetAssetPath( m ); - Material mainAsset = UnityEditor.AssetDatabase.LoadMainAssetAtPath( assetPath ) as Material; - if ( !mainAsset ) - { - Debug.LogError( "Error calling LoadMainAssetAtPath( " + assetPath + " )!\n\n" ); - continue; - } - - i++; - if ( UnityEditor.EditorUtility.DisplayCancelableProgressBar( "Valve Material Conversion Back to Unity Shaders", string.Format( "({0} of {1}) {2}", i, nCount, assetPath ), ( float )i / ( float )nCount ) ) - { - bCanceled = true; - break; - } - - if ( ValveToStandardSingleMaterial( mainAsset, destShaderStandard, destShaderStandardSpecular ) ) - { - nNumMaterialsConverted++; - } - - SaveAssetsAndFreeMemory(); - } - - if ( bCanceled ) - break; - } - } - - Debug.Log( "Converted " + nNumMaterialsConverted + " materials to Unity Shaders\n\n" + Time.realtimeSinceStartup ); - - UnityEditor.EditorUtility.ClearProgressBar(); - } - - [UnityEditor.MenuItem( "Valve/Shader Dev/Convert Active Materials Back to Unity Shaders", false, 51 )] - private static void ValveToStandardCurrent() - { - ValveToStandard( false ); - } - - [UnityEditor.MenuItem( "Valve/Shader Dev/Convert All Materials Back to Unity Shaders", false, 101 )] - private static void ValveToStandardAll() - { - ValveToStandard( true ); - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - //[UnityEditor.MenuItem( "Valve/Shader Dev/Refresh Standard", false, 150 )] - //private static void RefreshStandard() - //{ - // RenameShadersInAllMaterials( "Standard", "Standard" ); - //} - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - [UnityEditor.MenuItem( "Valve/Shader Dev/Ensure Consistency in Valve Materials", false, 200 )] - private static void EnsureConsistencyInValveMaterials() - { - int nNumMaterialChanges = 0; - Debug.Log( "Begin consistency check for all Valve materials\n\n" + Time.realtimeSinceStartup ); - - int i = 0; - int nCount = 0; - foreach ( string s in UnityEditor.AssetDatabase.GetAllAssetPaths() ) - { - if ( s.EndsWith( ".mat", StringComparison.OrdinalIgnoreCase ) ) - { - nCount++; - } - } - - foreach ( string s in UnityEditor.AssetDatabase.GetAllAssetPaths() ) - { - if ( s.EndsWith( ".mat", StringComparison.OrdinalIgnoreCase ) ) - { - i++; - if ( UnityEditor.EditorUtility.DisplayCancelableProgressBar( "Consistency check for all Valve materials", string.Format( "({0} of {1}) {2}", i, nCount, s ), ( float )i / ( float )nCount ) ) - { - break; - } - - Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath( s ) as Material; - if ( m.shader.name.Equals( "Valve/vr_standard" ) ) - { - // Convert old metallic bool to new specular mode - if ( ( m.HasProperty( "g_bEnableMetallic" ) && m.GetInt( "g_bEnableMetallic" ) == 1 ) || ( m.IsKeywordEnabled( "_METALLIC_ENABLED" ) ) ) - { - Debug.Log( " Converting old metallic checkbox to specular mode on material \"" + m.name + "\"\n" ); - m.DisableKeyword( "_METALLIC_ENABLED" ); - m.SetInt( "g_bEnableMetallic", 0 ); - m.SetInt( "_SpecularMode", 2 ); - m.EnableKeyword( "S_SPECULAR_METALLIC" ); - nNumMaterialChanges++; - } - else if ( !m.IsKeywordEnabled( "S_SPECULAR_NONE" ) && !m.IsKeywordEnabled( "S_SPECULAR_BLINNPHONG" ) && !m.IsKeywordEnabled( "S_SPECULAR_METALLIC" ) ) - { - Debug.Log( " Converting old specular to BlinnPhong specular mode on material \"" + m.name + "\"\n" ); - m.SetInt( "_SpecularMode", 1 ); - m.EnableKeyword( "S_SPECULAR_BLINNPHONG" ); - nNumMaterialChanges++; - } - - // If occlusion map is set, enable S_OCCLUSION static combo - if ( m.GetTexture( "_OcclusionMap" ) && !m.IsKeywordEnabled( "S_OCCLUSION" ) ) - { - Debug.Log( " Enabling new occlusion combo S_OCCLUSION on material \"" + m.name + "\"\n" ); - m.EnableKeyword( "S_OCCLUSION" ); - nNumMaterialChanges++; - } - - SaveAssetsAndFreeMemory(); - } - } - } - - Debug.Log( "Consistency check made " + nNumMaterialChanges + " changes to Valve materials\n\n" + Time.realtimeSinceStartup ); - - UnityEditor.EditorUtility.ClearProgressBar(); - } + static void SaveAssetsAndFreeMemory() + { + UnityEditor.AssetDatabase.SaveAssets(); + GC.Collect(); + UnityEditor.EditorUtility.UnloadUnusedAssetsImmediate(); + UnityEditor.AssetDatabase.Refresh(); + } + + private static void RenameShadersInAllMaterials(string nameBefore, string nameAfter) + { + Shader destShader = Shader.Find(nameAfter); + if (destShader == null) + { + return; + } + + int i = 0; + int nCount = 0; + foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) + { + if (s.EndsWith(".mat", StringComparison.OrdinalIgnoreCase)) + { + nCount++; + } + } + + foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) + { + if (s.EndsWith(".mat", StringComparison.OrdinalIgnoreCase)) + { + i++; + if (UnityEditor.EditorUtility.DisplayCancelableProgressBar("Valve Material Conversion", string.Format("({0} of {1}) {2}", i, nCount, s), (float)i / (float)nCount)) + { + break; + } + + Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(s) as Material; + //Debug.Log( m.name + "\n" ); + //Debug.Log( m.shader.name + "\n" ); + if (m.shader.name.Equals(nameBefore)) + { + Debug.Log("Converting from \"" + nameBefore + "\"-->\"" + nameAfter + "\": " + m.name + "\n"); + m.shader = destShader; + SaveAssetsAndFreeMemory(); + } + } + } + + //object[] obj = GameObject.FindObjectsOfType( typeof( GameObject ) ); + //foreach ( object o in obj ) + //{ + // GameObject g = ( GameObject )o; + // + // Renderer[] renderers = g.GetComponents(); + // foreach ( Renderer r in renderers ) + // { + // foreach ( Material m in r.sharedMaterials ) + // { + // //Debug.Log( m.name + "\n" ); + // //Debug.Log( m.shader.name + "\n" ); + // if ( m.shader.name.Equals( "Standard" ) ) + // { + // Debug.Log( "Refreshing Standard shader for material: " + m.name + "\n" ); + // m.shader = destShader; + // SaveAssetsAndFreeMemory(); + // } + // } + // } + //} + + UnityEditor.EditorUtility.ClearProgressBar(); + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + public static bool StandardToValveSingleMaterial(Material m, Shader srcShader, Shader destShader, bool bRecordUnknownShaders, List unknownShaders) + { + string n = srcShader.name; + + if (n.Equals(destShader.name)) + { + // Do nothing + //Debug.Log( " Skipping " + m.name + "\n" ); + return false; + } + else if (n.Equals("Standard") || n.Equals("Valve/VR/Standard")) + { + // Metallic specular + Debug.Log(" Converting from \"" + n + "\"-->\"" + destShader.name + "\": " + m.name + "\n"); + + m.shader = destShader; + m.SetOverrideTag("OriginalShader", n); + + m.SetInt("_SpecularMode", 2); + m.DisableKeyword("S_SPECULAR_NONE"); + m.DisableKeyword("S_SPECULAR_BLINNPHONG"); + m.EnableKeyword("S_SPECULAR_METALLIC"); + return true; + } + else if (n.Equals("Standard (Specular setup)") || n.Equals("Legacy Shaders/Bumped Diffuse") || n.Equals("Legacy Shaders/Transparent/Diffuse")) + { + // Regular specular + Debug.Log(" Converting from \"" + n + "\"-->\"" + destShader.name + "\": " + m.name + "\n"); + + m.shader = destShader; + m.SetOverrideTag("OriginalShader", n); + + m.SetInt("_SpecularMode", 1); + m.DisableKeyword("S_SPECULAR_NONE"); + m.EnableKeyword("S_SPECULAR_BLINNPHONG"); + m.DisableKeyword("S_SPECULAR_METALLIC"); + + if (n.Equals("Legacy Shaders/Transparent/Diffuse")) + { + m.SetFloat("_Mode", 2); + m.SetOverrideTag("RenderType", "Transparent"); + m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + m.SetInt("_ZWrite", 0); + m.DisableKeyword("_ALPHATEST_ON"); + m.EnableKeyword("_ALPHABLEND_ON"); + m.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + m.renderQueue = 3000; + } + return true; + } + else if (n.Equals("Unlit/Color") || n.Equals("Unlit/Texture") || n.Equals("Unlit/Transparent") || n.Equals("Unlit/Transparent Cutout")) + { + // Unlit + Debug.Log(" Converting from \"" + n + "\"-->\"" + destShader.name + "\": " + m.name + "\n"); + + m.shader = destShader; + m.SetOverrideTag("OriginalShader", n); + m.SetInt("g_bUnlit", 1); + m.EnableKeyword("S_UNLIT"); + + m.SetColor("_EmissionColor", Color.black); + + if (n.Equals("Unlit/Color")) + { + m.SetTexture("_MainTex", Texture2D.whiteTexture); + } + else + { + m.SetColor("_Color", Color.white); + + if (n.Equals("Unlit/Transparent Cutout")) + { + m.SetFloat("_Mode", 1); + m.SetOverrideTag("RenderType", "TransparentCutout"); + m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + m.SetInt("_ZWrite", 1); + m.EnableKeyword("_ALPHATEST_ON"); + m.DisableKeyword("_ALPHABLEND_ON"); + m.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + m.renderQueue = 2450; + } + else if (n.Equals("Unlit/Transparent")) + { + m.SetFloat("_Mode", 2); + m.SetOverrideTag("RenderType", "Transparent"); + m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + m.SetInt("_ZWrite", 0); + m.DisableKeyword("_ALPHATEST_ON"); + m.EnableKeyword("_ALPHABLEND_ON"); + m.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + m.renderQueue = 3000; + } + } + + return true; + } + else if (bRecordUnknownShaders) + { + // Don't know how to convert, so add to list to spew at the end + Debug.LogWarning(" Don't know how to convert shader \"" + n + "\"" + " in material \"" + m.name + "\"" + "\n"); + if (!unknownShaders.Contains(n)) + { + unknownShaders.Add(n); + } + return false; + } + + return false; + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + private static void StandardToValve(bool bConvertAllMaterials) + { + int nNumMaterialsConverted = 0; + Debug.Log("Begin Convert to Valve Shaders\n\n" + Time.realtimeSinceStartup); + + Shader destShader = Shader.Find("Valve/vr_standard"); + if (destShader == null) + { + Debug.LogWarning(" ERROR! Cannot find the \"Valve/vr_standard\" shader!" + "\n"); + return; + } + + List unknownShaders = new List(); + List alreadyConvertedMaterials = new List(); + + if (bConvertAllMaterials) + { + int i = 0; + int nCount = 0; + foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) + { + if (s.EndsWith(".mat", StringComparison.OrdinalIgnoreCase)) + { + nCount++; + } + } + + foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) + { + if (s.EndsWith(".mat", StringComparison.OrdinalIgnoreCase)) + { + i++; + if (UnityEditor.EditorUtility.DisplayCancelableProgressBar("Valve Material Conversion to Valve Shaders", string.Format("({0} of {1}) {2}", i, nCount, s), (float)i / (float)nCount)) + { + break; + } + + Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(s) as Material; + + if ((m == null) || (m.shader == null)) + continue; + + if (!m.name.StartsWith("")) + continue; + + if (alreadyConvertedMaterials.Contains(m.name)) + continue; + alreadyConvertedMaterials.Add(m.name); + + if (StandardToValveSingleMaterial(m, m.shader, destShader, true, unknownShaders)) + { + nNumMaterialsConverted++; + } + + SaveAssetsAndFreeMemory(); + } + } + } + else + { + int i = 0; + int nCount = 0; + Renderer[] renderers = GameObject.FindObjectsOfType(); + List countedMaterials = new List(); + foreach (Renderer r in renderers) + { + if (r.sharedMaterials == null) + continue; + + foreach (Material m in r.sharedMaterials) + { + if ((m == null) || (m.shader == null)) + continue; + + if (!m.name.StartsWith("")) + continue; + + if (countedMaterials.Contains(m.name)) + continue; + countedMaterials.Add(m.name); + + string assetPath = UnityEditor.AssetDatabase.GetAssetPath(m); + Material mainAsset = UnityEditor.AssetDatabase.LoadMainAssetAtPath(assetPath) as Material; + if (!mainAsset) + { + Debug.LogError("Error calling LoadMainAssetAtPath( " + assetPath + " )!\n\n"); + continue; + } + + nCount++; + } + } + + bool bCanceled = false; + foreach (Renderer r in renderers) + { + if (r.sharedMaterials == null) + continue; + + foreach (Material m in r.sharedMaterials) + { + if ((m == null) || (m.shader == null)) + continue; + + if (!m.name.StartsWith("")) + continue; + + if (alreadyConvertedMaterials.Contains(m.name)) + continue; + alreadyConvertedMaterials.Add(m.name); + + string assetPath = UnityEditor.AssetDatabase.GetAssetPath(m); + Material mainAsset = UnityEditor.AssetDatabase.LoadMainAssetAtPath(assetPath) as Material; + if (!mainAsset) + { + Debug.LogError("Error calling LoadMainAssetAtPath( " + assetPath + " )!\n\n"); + continue; + } + + i++; + if (UnityEditor.EditorUtility.DisplayCancelableProgressBar("Valve Material Conversion to Valve Shaders", string.Format("({0} of {1}) {2}", i, nCount, assetPath), (float)i / (float)nCount)) + { + bCanceled = true; + break; + } + + if (StandardToValveSingleMaterial(mainAsset, mainAsset.shader, destShader, true, unknownShaders)) + { + nNumMaterialsConverted++; + } + + SaveAssetsAndFreeMemory(); + } + + if (bCanceled) + break; + } + } + + foreach (string s in unknownShaders) + { + Debug.LogWarning(" Don't know how to convert shader \"" + s + "\"" + "\n"); + } + + Debug.Log("Converted " + nNumMaterialsConverted + " materials to Valve Shaders\n\n" + Time.realtimeSinceStartup); + + UnityEditor.EditorUtility.ClearProgressBar(); + } + + [UnityEditor.MenuItem("Valve/Shader Dev/Convert Active Materials to Valve Shaders", false, 50)] + private static void StandardToValveCurrent() + { + StandardToValve(false); + } + + [UnityEditor.MenuItem("Valve/Shader Dev/Convert All Materials to Valve Shaders", false, 100)] + private static void StandardToValveAll() + { + StandardToValve(true); + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + private static bool ValveToStandardSingleMaterial(Material m, Shader destShaderStandard, Shader destShaderStandardSpecular) + { + if (m.shader.name.Equals("Valve/vr_standard")) + { + if ((m.GetTag("OriginalShader", true) != null) && (m.GetTag("OriginalShader", true).Length > 0)) + { + Debug.Log(" Converting from \"" + m.shader.name + "\"-->\"" + m.GetTag("OriginalShader", true) + "\": " + m.name + "\n"); + m.shader = Shader.Find(m.GetTag("OriginalShader", true)); + return true; + } + else if (m.GetInt("_SpecularMode") == 2) + { + // Metallic specular + Debug.Log(" Converting from \"" + m.shader.name + "\"-->\"" + destShaderStandard.name + "\": " + m.name + "\n"); + m.shader = destShaderStandard; + return true; + } + else + { + // Regular specular + Debug.Log(" Converting from \"" + m.shader.name + "\"-->\"" + destShaderStandardSpecular.name + "\": " + m.name + "\n"); + m.shader = destShaderStandardSpecular; + return true; + } + } + + return false; + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + [UnityEditor.MenuItem("Valve/Shader Dev/Convert All Materials Back to Unity Shaders", false, 101)] + private static void ValveToStandard(bool bConvertAllMaterials) + { + int nNumMaterialsConverted = 0; + Debug.Log("Begin Convert to Unity Shaders\n\n" + Time.realtimeSinceStartup); + + Shader destShaderStandard = Shader.Find("Standard"); + if (destShaderStandard == null) + { + Debug.LogWarning(" ERROR! Cannot find the \"Standard\" shader!" + "\n"); + return; + } + + Shader destShaderStandardSpecular = Shader.Find("Standard (Specular setup)"); + if (destShaderStandardSpecular == null) + { + Debug.LogWarning(" ERROR! Cannot find the \"Standard (Specular setup)\" shader!" + "\n"); + return; + } + + List alreadyConvertedMaterials = new List(); + + if (bConvertAllMaterials) + { + int i = 0; + int nCount = 0; + foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) + { + if (s.EndsWith(".mat", StringComparison.OrdinalIgnoreCase)) + { + nCount++; + } + } + + foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) + { + if (s.EndsWith(".mat", StringComparison.OrdinalIgnoreCase)) + { + i++; + if (UnityEditor.EditorUtility.DisplayCancelableProgressBar("Valve Material Conversion Back to Unity Shaders", string.Format("({0} of {1}) {2}", i, nCount, s), (float)i / (float)nCount)) + { + break; + } + + Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(s) as Material; + if (ValveToStandardSingleMaterial(m, destShaderStandard, destShaderStandardSpecular)) + { + nNumMaterialsConverted++; + } + + SaveAssetsAndFreeMemory(); + } + } + } + else + { + int i = 0; + int nCount = 0; + Renderer[] renderers = GameObject.FindObjectsOfType(); + List countedMaterials = new List(); + foreach (Renderer r in renderers) + { + if (r.sharedMaterials == null) + continue; + + foreach (Material m in r.sharedMaterials) + { + if ((m == null) || (m.shader == null)) + continue; + + if (!m.name.StartsWith("")) + continue; + + if (countedMaterials.Contains(m.name)) + continue; + countedMaterials.Add(m.name); + + string assetPath = UnityEditor.AssetDatabase.GetAssetPath(m); + Material mainAsset = UnityEditor.AssetDatabase.LoadMainAssetAtPath(assetPath) as Material; + if (!mainAsset) + { + Debug.LogError("Error calling LoadMainAssetAtPath( " + assetPath + " )!\n\n"); + continue; + } + + nCount++; + } + } + + bool bCanceled = false; + foreach (Renderer r in renderers) + { + if (r.sharedMaterials == null) + continue; + + foreach (Material m in r.sharedMaterials) + { + if ((m == null) || (m.shader == null)) + continue; + + if (!m.name.StartsWith("")) + continue; + + if (alreadyConvertedMaterials.Contains(m.name)) + continue; + alreadyConvertedMaterials.Add(m.name); + + string assetPath = UnityEditor.AssetDatabase.GetAssetPath(m); + Material mainAsset = UnityEditor.AssetDatabase.LoadMainAssetAtPath(assetPath) as Material; + if (!mainAsset) + { + Debug.LogError("Error calling LoadMainAssetAtPath( " + assetPath + " )!\n\n"); + continue; + } + + i++; + if (UnityEditor.EditorUtility.DisplayCancelableProgressBar("Valve Material Conversion Back to Unity Shaders", string.Format("({0} of {1}) {2}", i, nCount, assetPath), (float)i / (float)nCount)) + { + bCanceled = true; + break; + } + + if (ValveToStandardSingleMaterial(mainAsset, destShaderStandard, destShaderStandardSpecular)) + { + nNumMaterialsConverted++; + } + + SaveAssetsAndFreeMemory(); + } + + if (bCanceled) + break; + } + } + + Debug.Log("Converted " + nNumMaterialsConverted + " materials to Unity Shaders\n\n" + Time.realtimeSinceStartup); + + UnityEditor.EditorUtility.ClearProgressBar(); + } + + [UnityEditor.MenuItem("Valve/Shader Dev/Convert Active Materials Back to Unity Shaders", false, 51)] + private static void ValveToStandardCurrent() + { + ValveToStandard(false); + } + + [UnityEditor.MenuItem("Valve/Shader Dev/Convert All Materials Back to Unity Shaders", false, 101)] + private static void ValveToStandardAll() + { + ValveToStandard(true); + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + //[UnityEditor.MenuItem( "Valve/Shader Dev/Refresh Standard", false, 150 )] + //private static void RefreshStandard() + //{ + // RenameShadersInAllMaterials( "Standard", "Standard" ); + //} + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + [UnityEditor.MenuItem("Valve/Shader Dev/Ensure Consistency in Valve Materials", false, 200)] + private static void EnsureConsistencyInValveMaterials() + { + int nNumMaterialChanges = 0; + Debug.Log("Begin consistency check for all Valve materials\n\n" + Time.realtimeSinceStartup); + + int i = 0; + int nCount = 0; + foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) + { + if (s.EndsWith(".mat", StringComparison.OrdinalIgnoreCase)) + { + nCount++; + } + } + + foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) + { + if (s.EndsWith(".mat", StringComparison.OrdinalIgnoreCase)) + { + i++; + if (UnityEditor.EditorUtility.DisplayCancelableProgressBar("Consistency check for all Valve materials", string.Format("({0} of {1}) {2}", i, nCount, s), (float)i / (float)nCount)) + { + break; + } + + Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(s) as Material; + if (m.shader.name.Equals("Valve/vr_standard")) + { + // Convert old metallic bool to new specular mode + if ((m.HasProperty("g_bEnableMetallic") && m.GetInt("g_bEnableMetallic") == 1) || (m.IsKeywordEnabled("_METALLIC_ENABLED"))) + { + Debug.Log(" Converting old metallic checkbox to specular mode on material \"" + m.name + "\"\n"); + m.DisableKeyword("_METALLIC_ENABLED"); + m.SetInt("g_bEnableMetallic", 0); + m.SetInt("_SpecularMode", 2); + m.EnableKeyword("S_SPECULAR_METALLIC"); + nNumMaterialChanges++; + } + else if (!m.IsKeywordEnabled("S_SPECULAR_NONE") && !m.IsKeywordEnabled("S_SPECULAR_BLINNPHONG") && !m.IsKeywordEnabled("S_SPECULAR_METALLIC")) + { + Debug.Log(" Converting old specular to BlinnPhong specular mode on material \"" + m.name + "\"\n"); + m.SetInt("_SpecularMode", 1); + m.EnableKeyword("S_SPECULAR_BLINNPHONG"); + nNumMaterialChanges++; + } + + // If occlusion map is set, enable S_OCCLUSION static combo + if (m.GetTexture("_OcclusionMap") && !m.IsKeywordEnabled("S_OCCLUSION")) + { + Debug.Log(" Enabling new occlusion combo S_OCCLUSION on material \"" + m.name + "\"\n"); + m.EnableKeyword("S_OCCLUSION"); + nNumMaterialChanges++; + } + + SaveAssetsAndFreeMemory(); + } + } + } + + Debug.Log("Consistency check made " + nNumMaterialChanges + " changes to Valve materials\n\n" + Time.realtimeSinceStartup); + + UnityEditor.EditorUtility.ClearProgressBar(); + } } #endif diff --git a/Assets/ScriptableRenderLoop/ForwardRenderLoop/ValveShaderGUI.cs b/Assets/ScriptableRenderLoop/ForwardRenderLoop/ValveShaderGUI.cs index c34813f3d51..00bf90ccf2d 100755 --- a/Assets/ScriptableRenderLoop/ForwardRenderLoop/ValveShaderGUI.cs +++ b/Assets/ScriptableRenderLoop/ForwardRenderLoop/ValveShaderGUI.cs @@ -1,6 +1,6 @@ // Copyright (c) Valve Corporation, All rights reserved. ====================================================================================================== -#if ( UNITY_EDITOR ) +#if (UNITY_EDITOR) using System; using System.Collections.Generic; @@ -8,558 +8,557 @@ namespace UnityEditor { -internal class ValveShaderGUI : ShaderGUI -{ - public enum BlendMode - { - Opaque, - AlphaTest, - AlphaBlend, - Glass, - Additive - // TODO: MaskedGlass that will require an additional grayscale texture to act as a standard alpha blend mask - } - - public enum SpecularMode - { - None, - BlinnPhong, - Metallic - //Anisotropic - } - - private static class Styles - { - public static GUIStyle optionsButton = "PaneOptions"; - public static GUIContent uvSetLabel = new GUIContent("UV Set"); - public static GUIContent[] uvSetOptions = new GUIContent[] { new GUIContent("UV channel 0"), new GUIContent("UV channel 1") }; - - public static GUIContent unlitText = new GUIContent( "Unlit", "" ); - - public static string emptyTootip = ""; - public static GUIContent albedoText = new GUIContent("Albedo", "Albedo (RGB) and Transparency (A)"); - public static GUIContent alphaCutoffText = new GUIContent("Alpha Cutoff", "Threshold for alpha cutoff"); - public static GUIContent specularMapText = new GUIContent("Specular", "Reflectance (RGB) and Gloss (A)"); - public static GUIContent reflectanceMinText = new GUIContent( "Reflectance Min", "" ); - public static GUIContent reflectanceMaxText = new GUIContent( "Reflectance Max", "" ); - public static GUIContent metallicMapText = new GUIContent( "Metallic", "Metallic (R) and Gloss (A)" ); - public static GUIContent smoothnessText = new GUIContent("Gloss", ""); - public static GUIContent normalMapText = new GUIContent("Normal", "Normal Map"); - //public static GUIContent heightMapText = new GUIContent("Height Map", "Height Map (G)"); - public static GUIContent cubeMapScalarText = new GUIContent( "Cube Map Scalar", "" ); - public static GUIContent occlusionText = new GUIContent("Occlusion", "Occlusion (G)"); - public static GUIContent occlusionStrengthDirectDiffuseText = new GUIContent( "Occlusion Direct Diffuse", "" ); - public static GUIContent occlusionStrengthDirectSpecularText = new GUIContent( "Occlusion Direct Specular", "" ); - public static GUIContent occlusionStrengthIndirectDiffuseText = new GUIContent( "Occlusion Indirect Diffuse", "" ); - public static GUIContent occlusionStrengthIndirectSpecularText = new GUIContent( "Occlusion Indirect Specular", "" ); - public static GUIContent emissionText = new GUIContent( "Emission", "Emission (RGB)" ); - public static GUIContent detailMaskText = new GUIContent("Detail Mask", "Mask for Secondary Maps (A)"); - public static GUIContent detailAlbedoText = new GUIContent("Detail Albedo", "Detail Albedo (RGB) multiplied by 2"); - public static GUIContent detailNormalMapText = new GUIContent("Detail Normal", "Detail Normal Map"); - public static GUIContent overrideLightmapText = new GUIContent( "Override Lightmap", "Requires ValveOverrideLightmap.cs scrip on object" ); - public static GUIContent worldAlignedTextureText = new GUIContent( "World Aligned Texture", "" ); - public static GUIContent worldAlignedTextureSizeText = new GUIContent( "Size", "" ); - public static GUIContent worldAlignedTextureNormalText = new GUIContent( "Normal", "" ); - public static GUIContent worldAlignedTexturePositionText = new GUIContent( "World Position", "" ); - - public static string whiteSpaceString = " "; - public static string primaryMapsText = "Main Maps"; - public static string secondaryMapsText = "Secondary Maps"; - public static string renderingMode = "Rendering Mode"; - public static string specularModeText = "Specular Mode"; - public static GUIContent emissiveWarning = new GUIContent( "Emissive value is animated but the material has not been configured to support emissive. Please make sure the material itself has some amount of emissive." ); - public static GUIContent emissiveColorWarning = new GUIContent ("Ensure emissive color is non-black for emission to have effect."); - public static readonly string[] blendNames = Enum.GetNames (typeof (BlendMode)); - public static readonly string[] specularNames = Enum.GetNames( typeof( SpecularMode ) ); - } - - MaterialProperty unlit = null; - MaterialProperty blendMode = null; - MaterialProperty specularMode = null; - MaterialProperty albedoMap = null; - MaterialProperty albedoColor = null; - MaterialProperty alphaCutoff = null; - MaterialProperty specularMap = null; - MaterialProperty specularColor = null; - MaterialProperty reflectanceMin = null; - MaterialProperty reflectanceMax = null; - MaterialProperty metallicMap = null; - MaterialProperty metallic = null; - MaterialProperty smoothness = null; - MaterialProperty bumpScale = null; - MaterialProperty bumpMap = null; - MaterialProperty cubeMapScalar = null; - MaterialProperty occlusionStrength = null; - MaterialProperty occlusionMap = null; - MaterialProperty occlusionStrengthDirectDiffuse = null; - MaterialProperty occlusionStrengthDirectSpecular = null; - MaterialProperty occlusionStrengthIndirectDiffuse = null; - MaterialProperty occlusionStrengthIndirectSpecular = null; - //MaterialProperty heigtMapScale = null; - //MaterialProperty heightMap = null; - MaterialProperty emissionColorForRendering = null; - MaterialProperty emissionMap = null; - MaterialProperty detailMask = null; - MaterialProperty detailAlbedoMap = null; - MaterialProperty detailNormalMapScale = null; - MaterialProperty detailNormalMap = null; - MaterialProperty uvSetSecondary = null; - MaterialProperty overrideLightmap = null; - MaterialProperty worldAlignedTexture = null; - MaterialProperty worldAlignedTextureSize = null; - MaterialProperty worldAlignedTextureNormal = null; - MaterialProperty worldAlignedTexturePosition = null; - - MaterialEditor m_MaterialEditor; - ColorPickerHDRConfig m_ColorPickerHDRConfig = new ColorPickerHDRConfig(0f, 99f, 1/99f, 3f); - - bool m_FirstTimeApply = true; - - public void FindProperties (MaterialProperty[] props) - { - unlit = FindProperty( "g_bUnlit", props ); - blendMode = FindProperty( "_Mode", props ); - specularMode = FindProperty( "_SpecularMode", props ); - albedoMap = FindProperty( "_MainTex", props ); - albedoColor = FindProperty ("_Color", props); - alphaCutoff = FindProperty ("_Cutoff", props); - specularMap = FindProperty ("_SpecGlossMap", props, false); - specularColor = FindProperty ("_SpecColor", props, false); - reflectanceMin = FindProperty( "g_flReflectanceMin", props ); - reflectanceMax = FindProperty( "g_flReflectanceMax", props ); - metallicMap = FindProperty ("_MetallicGlossMap", props, false); - metallic = FindProperty ("_Metallic", props, false); - smoothness = FindProperty ("_Glossiness", props); - bumpScale = FindProperty ("_BumpScale", props); - bumpMap = FindProperty ("_BumpMap", props); - //heigtMapScale = FindProperty ("_Parallax", props); - //heightMap = FindProperty("_ParallaxMap", props); - cubeMapScalar = FindProperty( "g_flCubeMapScalar", props ); - occlusionStrength = FindProperty ("_OcclusionStrength", props); - occlusionStrengthDirectDiffuse = FindProperty( "_OcclusionStrengthDirectDiffuse", props ); - occlusionStrengthDirectSpecular = FindProperty( "_OcclusionStrengthDirectSpecular", props ); - occlusionStrengthIndirectDiffuse = FindProperty( "_OcclusionStrengthIndirectDiffuse", props ); - occlusionStrengthIndirectSpecular = FindProperty( "_OcclusionStrengthIndirectSpecular", props ); - occlusionMap = FindProperty ("_OcclusionMap", props); - emissionColorForRendering = FindProperty ("_EmissionColor", props); - emissionMap = FindProperty ("_EmissionMap", props); - detailMask = FindProperty ("_DetailMask", props); - detailAlbedoMap = FindProperty ("_DetailAlbedoMap", props); - detailNormalMapScale = FindProperty ("_DetailNormalMapScale", props); - detailNormalMap = FindProperty ("_DetailNormalMap", props); - uvSetSecondary = FindProperty ("_UVSec", props); - overrideLightmap = FindProperty( "g_tOverrideLightmap", props ); - worldAlignedTexture = FindProperty( "g_bWorldAlignedTexture", props, false ); - worldAlignedTextureSize = FindProperty( "g_vWorldAlignedTextureSize", props, worldAlignedTexture != null ); - worldAlignedTextureNormal = FindProperty( "g_vWorldAlignedTextureNormal", props, worldAlignedTexture != null ); - worldAlignedTexturePosition = FindProperty( "g_vWorldAlignedTexturePosition", props, worldAlignedTexture != null ); - } - - public override void OnGUI (MaterialEditor materialEditor, MaterialProperty[] props) - { - FindProperties (props); // MaterialProperties can be animated so we do not cache them but fetch them every event to ensure animated values are updated correctly - m_MaterialEditor = materialEditor; - Material material = materialEditor.target as Material; - - ShaderPropertiesGUI (material); - - // Make sure that needed keywords are set up if we're switching some existing - // material to a standard shader. - if (m_FirstTimeApply) - { - SetMaterialKeywords (material); - m_FirstTimeApply = false; - } - } - - public void Vector3GUI( GUIContent label, MaterialProperty materialProperty ) - { - Vector4 v4 = materialProperty.vectorValue; - Vector3 v3 = EditorGUILayout.Vector3Field( label, new Vector3( v4.x, v4.y, v4.z ) ); - materialProperty.vectorValue = new Vector4( v3.x, v3.y, v3.z, 0.0f ); - } - - public void ShaderPropertiesGUI (Material material) - { - // Use default labelWidth - EditorGUIUtility.labelWidth = 0f; - - // Detect any changes to the material - EditorGUI.BeginChangeCheck(); - { - m_MaterialEditor.ShaderProperty( unlit, Styles.unlitText.text ); - bool bUnlit = ( unlit.floatValue != 0.0f ); - - BlendModePopup(); - - if ( !bUnlit ) - { - SpecularModePopup(); - } - - EditorGUILayout.Space(); - - //GUILayout.Label( Styles.primaryMapsText, EditorStyles.boldLabel ); - DoAlbedoArea( material ); - if ( !bUnlit ) - { - m_MaterialEditor.TexturePropertySingleLine( Styles.normalMapText, bumpMap, bumpMap.textureValue != null ? bumpScale : null ); - DoSpecularMetallicArea( material ); - m_MaterialEditor.TexturePropertySingleLine( Styles.occlusionText, occlusionMap, occlusionMap.textureValue != null ? occlusionStrength : null ); - if ( occlusionMap.textureValue != null ) - { - m_MaterialEditor.ShaderProperty( occlusionStrengthDirectDiffuse, Styles.occlusionStrengthDirectDiffuseText.text, 2 ); - m_MaterialEditor.ShaderProperty( occlusionStrengthDirectSpecular, Styles.occlusionStrengthDirectSpecularText.text, 2 ); - m_MaterialEditor.ShaderProperty( occlusionStrengthIndirectDiffuse, Styles.occlusionStrengthIndirectDiffuseText.text, 2 ); - m_MaterialEditor.ShaderProperty( occlusionStrengthIndirectSpecular, Styles.occlusionStrengthIndirectSpecularText.text, 2 ); - } - m_MaterialEditor.ShaderProperty( cubeMapScalar, Styles.cubeMapScalarText.text, 0 ); - } - //m_MaterialEditor.TexturePropertySingleLine(Styles.heightMapText, heightMap, heightMap.textureValue != null ? heigtMapScale : null); - DoEmissionArea( material ); - m_MaterialEditor.TexturePropertySingleLine( Styles.detailMaskText, detailMask ); - if ( !bUnlit ) - { - m_MaterialEditor.TexturePropertySingleLine( Styles.overrideLightmapText, overrideLightmap ); - } - - EditorGUI.BeginChangeCheck(); // !!! AV - This is from Unity's script. Can these Begin/End calls be nested like this? - m_MaterialEditor.TextureScaleOffsetProperty( albedoMap ); - if ( EditorGUI.EndChangeCheck() ) - { - emissionMap.textureScaleAndOffset = albedoMap.textureScaleAndOffset; // Apply the main texture scale and offset to the emission texture as well, for Enlighten's sake - } - - if ( worldAlignedTexture != null ) - { - m_MaterialEditor.ShaderProperty( worldAlignedTexture, Styles.worldAlignedTextureText.text ); - - if ( worldAlignedTexture.floatValue != 0.0f ) - { - EditorGUI.indentLevel = 2; - Vector3GUI( Styles.worldAlignedTextureSizeText, worldAlignedTextureSize ); - Vector3GUI( Styles.worldAlignedTextureNormalText, worldAlignedTextureNormal ); - Vector3GUI( Styles.worldAlignedTexturePositionText, worldAlignedTexturePosition ); - EditorGUI.indentLevel = 0; - } - } - - EditorGUILayout.Space(); - - // Secondary properties - GUILayout.Label( Styles.secondaryMapsText, EditorStyles.boldLabel ); - m_MaterialEditor.TexturePropertySingleLine( Styles.detailAlbedoText, detailAlbedoMap ); - if ( !bUnlit ) - { - m_MaterialEditor.TexturePropertySingleLine( Styles.detailNormalMapText, detailNormalMap, detailNormalMapScale ); - } - m_MaterialEditor.TextureScaleOffsetProperty( detailAlbedoMap ); - m_MaterialEditor.ShaderProperty( uvSetSecondary, Styles.uvSetLabel.text ); - } - if ( EditorGUI.EndChangeCheck() ) - { - foreach ( var obj in blendMode.targets ) - { - MaterialChanged( ( Material )obj ); - } - - foreach ( var obj in specularMode.targets ) - { - MaterialChanged( ( Material )obj ); - } - } - } - - public override void AssignNewShaderToMaterial (Material material, Shader oldShader, Shader newShader) - { - base.AssignNewShaderToMaterial( material, oldShader, newShader ); - - if ( oldShader == null ) - return; - - // Convert to vr_standard - if ( newShader.name.Equals( "Valve/vr_standard" ) ) - { - List unknownShaders = new List(); - ValveRefreshStandardShader.StandardToValveSingleMaterial( material, oldShader, newShader, false, unknownShaders ); - } - - // Legacy shaders - if ( !oldShader.name.Contains( "Legacy Shaders/" ) ) - return; - - BlendMode blendMode = BlendMode.Opaque; - if (oldShader.name.Contains("/Transparent/Cutout/")) - { - blendMode = BlendMode.AlphaTest; - } - else if (oldShader.name.Contains("/Transparent/")) - { - // NOTE: legacy shaders did not provide physically based transparency - // therefore Fade mode - blendMode = BlendMode.AlphaBlend; - } - material.SetFloat("_Mode", (float)blendMode); - - MaterialChanged(material); - } - - void BlendModePopup() - { - EditorGUI.showMixedValue = blendMode.hasMixedValue; - var mode = (BlendMode)blendMode.floatValue; - - EditorGUI.BeginChangeCheck(); - mode = (BlendMode)EditorGUILayout.Popup(Styles.renderingMode, (int)mode, Styles.blendNames); - if (EditorGUI.EndChangeCheck()) - { - m_MaterialEditor.RegisterPropertyChangeUndo("Rendering Mode"); - blendMode.floatValue = (float)mode; - } - - EditorGUI.showMixedValue = false; - } - - void SpecularModePopup() - { - EditorGUI.showMixedValue = specularMode.hasMixedValue; - var mode = ( SpecularMode )specularMode.floatValue; - - EditorGUI.BeginChangeCheck(); - mode = ( SpecularMode )EditorGUILayout.Popup( Styles.specularModeText, ( int )mode, Styles.specularNames ); - if ( EditorGUI.EndChangeCheck() ) - { - m_MaterialEditor.RegisterPropertyChangeUndo( "Specular Mode" ); - specularMode.floatValue = ( float )mode; - } - - EditorGUI.showMixedValue = false; - } - - void DoAlbedoArea(Material material) - { - m_MaterialEditor.TexturePropertySingleLine(Styles.albedoText, albedoMap, albedoColor); - if (((BlendMode)material.GetFloat("_Mode") == BlendMode.AlphaTest)) - { - m_MaterialEditor.ShaderProperty(alphaCutoff, Styles.alphaCutoffText.text, MaterialEditor.kMiniTextureFieldLabelIndentLevel+1); - } - } - - void DoEmissionArea(Material material) - { - float brightness = emissionColorForRendering.colorValue.maxColorComponent; - bool showHelpBox = !HasValidEmissiveKeyword(material); - bool showEmissionColorAndGIControls = brightness > 0.0f; - - bool hadEmissionTexture = emissionMap.textureValue != null; - - // Texture and HDR color controls - m_MaterialEditor.TexturePropertyWithHDRColor(Styles.emissionText, emissionMap, emissionColorForRendering, m_ColorPickerHDRConfig, false); - - // If texture was assigned and color was black set color to white - if (emissionMap.textureValue != null && !hadEmissionTexture && brightness <= 0f) - emissionColorForRendering.colorValue = Color.white; - - // Dynamic Lightmapping mode - if (showEmissionColorAndGIControls) - { - bool shouldEmissionBeEnabled = ShouldEmissionBeEnabled(emissionColorForRendering.colorValue); - using ( new EditorGUI.DisabledScope( !shouldEmissionBeEnabled ) ) - { - m_MaterialEditor.LightmapEmissionProperty( MaterialEditor.kMiniTextureFieldLabelIndentLevel + 1 ); - } - } - - if (showHelpBox) - { - EditorGUILayout.HelpBox(Styles.emissiveWarning.text, MessageType.Warning); - } - } - - void DoSpecularMetallicArea( Material material ) - { - SpecularMode specularMode = ( SpecularMode )material.GetInt( "_SpecularMode" ); - if ( specularMode == SpecularMode.BlinnPhong ) - { - if (specularMap.textureValue == null) - { - m_MaterialEditor.TexturePropertyTwoLines( Styles.specularMapText, specularMap, specularColor, Styles.smoothnessText, smoothness ); - } - else - { - m_MaterialEditor.TexturePropertySingleLine( Styles.specularMapText, specularMap ); - m_MaterialEditor.ShaderProperty( reflectanceMin, Styles.reflectanceMinText.text, 2 ); - m_MaterialEditor.ShaderProperty( reflectanceMax, Styles.reflectanceMaxText.text, 2 ); - } - } - else if ( specularMode == SpecularMode.Metallic ) - { - if (metallicMap.textureValue == null) - m_MaterialEditor.TexturePropertyTwoLines(Styles.metallicMapText, metallicMap, metallic, Styles.smoothnessText, smoothness); - else - m_MaterialEditor.TexturePropertySingleLine(Styles.metallicMapText, metallicMap); - } - } - - public static void SetupMaterialWithBlendMode(Material material, BlendMode blendMode) - { - switch (blendMode) - { - case BlendMode.Opaque: - material.SetOverrideTag("RenderType", ""); - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); - material.SetInt("_ZWrite", 1); - material.DisableKeyword("_ALPHATEST_ON"); - material.DisableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); - material.renderQueue = -1; - break; - case BlendMode.AlphaTest: - material.SetOverrideTag("RenderType", "TransparentCutout"); - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); - material.SetInt("_ZWrite", 1); - material.EnableKeyword("_ALPHATEST_ON"); - material.DisableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); - material.renderQueue = 2450; - break; - case BlendMode.AlphaBlend: - material.SetOverrideTag("RenderType", "Transparent"); - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); - material.SetInt("_ZWrite", 0); - material.DisableKeyword("_ALPHATEST_ON"); - material.EnableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); - material.renderQueue = 3000; - break; - case BlendMode.Glass: - material.SetOverrideTag("RenderType", "Transparent"); - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); - material.SetInt("_ZWrite", 0); - material.DisableKeyword("_ALPHATEST_ON"); - material.DisableKeyword("_ALPHABLEND_ON"); - material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); - material.renderQueue = 3000; - break; - case BlendMode.Additive: - material.SetOverrideTag( "RenderType", "Transparent" ); - material.SetInt( "_SrcBlend", ( int )UnityEngine.Rendering.BlendMode.One ); - material.SetInt( "_DstBlend", ( int )UnityEngine.Rendering.BlendMode.One ); - material.SetInt( "_ZWrite", 0 ); - material.DisableKeyword( "_ALPHATEST_ON" ); - material.DisableKeyword( "_ALPHABLEND_ON" ); - material.DisableKeyword( "_ALPHAPREMULTIPLY_ON" ); - material.renderQueue = 3000; - break; - } - } - - static bool ShouldEmissionBeEnabled (Color color) - { - return color.maxColorComponent > (0.1f / 255.0f); - } - - static void SetMaterialKeywords(Material material) - { - // Note: keywords must be based on Material value not on MaterialProperty due to multi-edit & material animation - // (MaterialProperty value might come from renderer material property block) - SetKeyword (material, "_NORMALMAP", material.GetTexture ("_BumpMap") || material.GetTexture ("_DetailNormalMap")); - - SpecularMode specularMode = ( SpecularMode )material.GetInt( "_SpecularMode" ); - if ( specularMode == SpecularMode.BlinnPhong ) - { - SetKeyword( material, "_SPECGLOSSMAP", material.GetTexture( "_SpecGlossMap" ) ); - } - else if ( specularMode == SpecularMode.Metallic ) - { - SetKeyword( material, "_METALLICGLOSSMAP", material.GetTexture( "_MetallicGlossMap" ) ); - } - SetKeyword( material, "S_SPECULAR_NONE", specularMode == SpecularMode.None ); - SetKeyword( material, "S_SPECULAR_BLINNPHONG", specularMode == SpecularMode.BlinnPhong ); - SetKeyword( material, "S_SPECULAR_METALLIC", specularMode == SpecularMode.Metallic ); - SetKeyword( material, "S_OCCLUSION", material.GetTexture("_OcclusionMap") ); - - SetKeyword( material, "_PARALLAXMAP", material.GetTexture("_ParallaxMap")); - SetKeyword( material, "_DETAIL_MULX2", material.GetTexture("_DetailAlbedoMap") || material.GetTexture("_DetailNormalMap")); - SetKeyword( material, "S_OVERRIDE_LIGHTMAP", material.GetTexture( "g_tOverrideLightmap" ) ); - - SetKeyword( material, "S_UNLIT", material.GetInt( "g_bUnlit" ) == 1 ); - SetKeyword( material, "S_WORLD_ALIGNED_TEXTURE", material.GetInt( "g_bWorldAlignedTexture" ) == 1 ); - - bool shouldEmissionBeEnabled = ShouldEmissionBeEnabled (material.GetColor("_EmissionColor")); - SetKeyword (material, "_EMISSION", shouldEmissionBeEnabled); - - // Setup lightmap emissive flags - MaterialGlobalIlluminationFlags flags = material.globalIlluminationFlags; - if ((flags & (MaterialGlobalIlluminationFlags.BakedEmissive | MaterialGlobalIlluminationFlags.RealtimeEmissive)) != 0) - { - flags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; - if (!shouldEmissionBeEnabled) - flags |= MaterialGlobalIlluminationFlags.EmissiveIsBlack; - - material.globalIlluminationFlags = flags; - } - - // Reflectance constants - float flReflectanceMin = material.GetFloat( "g_flReflectanceMin" ); - float flReflectanceMax = material.GetFloat( "g_flReflectanceMax" ); - material.SetFloat( "g_flReflectanceScale", Mathf.Max( flReflectanceMin, flReflectanceMax ) - flReflectanceMin ); - material.SetFloat( "g_flReflectanceBias", flReflectanceMin ); - - // World aligned texture constants - Vector4 worldAlignedTextureNormal = material.GetVector( "g_vWorldAlignedTextureNormal" ); - Vector3 normal = new Vector3( worldAlignedTextureNormal.x, worldAlignedTextureNormal.y, worldAlignedTextureNormal.z ); - normal = ( normal.sqrMagnitude > 0.0f ) ? normal : Vector3.up; - Vector3 tangentU = Vector3.zero, tangentV = Vector3.zero; - Vector3.OrthoNormalize( ref normal, ref tangentU, ref tangentV ); - material.SetVector( "g_vWorldAlignedNormalTangentU", new Vector4( tangentU.x, tangentU.y, tangentU.z, 0.0f ) ); - material.SetVector( "g_vWorldAlignedNormalTangentV", new Vector4( tangentV.x, tangentV.y, tangentV.z, 0.0f ) ); - - // Static combo skips - if ( material.GetInt( "g_bUnlit" ) == 1 ) - { - material.DisableKeyword( "_NORMALMAP" ); - material.EnableKeyword( "S_SPECULAR_NONE" ); - material.DisableKeyword( "S_SPECULAR_BLINNPHONG" ); - material.DisableKeyword( "S_SPECULAR_METALLIC" ); - material.DisableKeyword( "_METALLICGLOSSMAP" ); - material.DisableKeyword( "_SPECGLOSSMAP" ); - material.DisableKeyword( "S_OVERRIDE_LIGHTMAP" ); - } - } - - bool HasValidEmissiveKeyword (Material material) - { - // Material animation might be out of sync with the material keyword. - // So if the emission support is disabled on the material, but the property blocks have a value that requires it, then we need to show a warning. - // (note: (Renderer MaterialPropertyBlock applies its values to emissionColorForRendering)) - bool hasEmissionKeyword = material.IsKeywordEnabled ("_EMISSION"); - if (!hasEmissionKeyword && ShouldEmissionBeEnabled (emissionColorForRendering.colorValue)) - return false; - else - return true; - } - - static void MaterialChanged(Material material) - { - SetupMaterialWithBlendMode(material, (BlendMode)material.GetFloat("_Mode")); - - SetMaterialKeywords(material); - } - - static void SetKeyword(Material m, string keyword, bool state) - { - if (state) - m.EnableKeyword (keyword); - else - m.DisableKeyword (keyword); - } -} - + internal class ValveShaderGUI : ShaderGUI + { + public enum BlendMode + { + Opaque, + AlphaTest, + AlphaBlend, + Glass, + Additive + // TODO: MaskedGlass that will require an additional grayscale texture to act as a standard alpha blend mask + } + + public enum SpecularMode + { + None, + BlinnPhong, + Metallic + //Anisotropic + } + + private static class Styles + { + public static GUIStyle optionsButton = "PaneOptions"; + public static GUIContent uvSetLabel = new GUIContent("UV Set"); + public static GUIContent[] uvSetOptions = new GUIContent[] { new GUIContent("UV channel 0"), new GUIContent("UV channel 1") }; + + public static GUIContent unlitText = new GUIContent("Unlit", ""); + + public static string emptyTootip = ""; + public static GUIContent albedoText = new GUIContent("Albedo", "Albedo (RGB) and Transparency (A)"); + public static GUIContent alphaCutoffText = new GUIContent("Alpha Cutoff", "Threshold for alpha cutoff"); + public static GUIContent specularMapText = new GUIContent("Specular", "Reflectance (RGB) and Gloss (A)"); + public static GUIContent reflectanceMinText = new GUIContent("Reflectance Min", ""); + public static GUIContent reflectanceMaxText = new GUIContent("Reflectance Max", ""); + public static GUIContent metallicMapText = new GUIContent("Metallic", "Metallic (R) and Gloss (A)"); + public static GUIContent smoothnessText = new GUIContent("Gloss", ""); + public static GUIContent normalMapText = new GUIContent("Normal", "Normal Map"); + //public static GUIContent heightMapText = new GUIContent("Height Map", "Height Map (G)"); + public static GUIContent cubeMapScalarText = new GUIContent("Cube Map Scalar", ""); + public static GUIContent occlusionText = new GUIContent("Occlusion", "Occlusion (G)"); + public static GUIContent occlusionStrengthDirectDiffuseText = new GUIContent("Occlusion Direct Diffuse", ""); + public static GUIContent occlusionStrengthDirectSpecularText = new GUIContent("Occlusion Direct Specular", ""); + public static GUIContent occlusionStrengthIndirectDiffuseText = new GUIContent("Occlusion Indirect Diffuse", ""); + public static GUIContent occlusionStrengthIndirectSpecularText = new GUIContent("Occlusion Indirect Specular", ""); + public static GUIContent emissionText = new GUIContent("Emission", "Emission (RGB)"); + public static GUIContent detailMaskText = new GUIContent("Detail Mask", "Mask for Secondary Maps (A)"); + public static GUIContent detailAlbedoText = new GUIContent("Detail Albedo", "Detail Albedo (RGB) multiplied by 2"); + public static GUIContent detailNormalMapText = new GUIContent("Detail Normal", "Detail Normal Map"); + public static GUIContent overrideLightmapText = new GUIContent("Override Lightmap", "Requires ValveOverrideLightmap.cs scrip on object"); + public static GUIContent worldAlignedTextureText = new GUIContent("World Aligned Texture", ""); + public static GUIContent worldAlignedTextureSizeText = new GUIContent("Size", ""); + public static GUIContent worldAlignedTextureNormalText = new GUIContent("Normal", ""); + public static GUIContent worldAlignedTexturePositionText = new GUIContent("World Position", ""); + + public static string whiteSpaceString = " "; + public static string primaryMapsText = "Main Maps"; + public static string secondaryMapsText = "Secondary Maps"; + public static string renderingMode = "Rendering Mode"; + public static string specularModeText = "Specular Mode"; + public static GUIContent emissiveWarning = new GUIContent("Emissive value is animated but the material has not been configured to support emissive. Please make sure the material itself has some amount of emissive."); + public static GUIContent emissiveColorWarning = new GUIContent("Ensure emissive color is non-black for emission to have effect."); + public static readonly string[] blendNames = Enum.GetNames(typeof(BlendMode)); + public static readonly string[] specularNames = Enum.GetNames(typeof(SpecularMode)); + } + + MaterialProperty unlit = null; + MaterialProperty blendMode = null; + MaterialProperty specularMode = null; + MaterialProperty albedoMap = null; + MaterialProperty albedoColor = null; + MaterialProperty alphaCutoff = null; + MaterialProperty specularMap = null; + MaterialProperty specularColor = null; + MaterialProperty reflectanceMin = null; + MaterialProperty reflectanceMax = null; + MaterialProperty metallicMap = null; + MaterialProperty metallic = null; + MaterialProperty smoothness = null; + MaterialProperty bumpScale = null; + MaterialProperty bumpMap = null; + MaterialProperty cubeMapScalar = null; + MaterialProperty occlusionStrength = null; + MaterialProperty occlusionMap = null; + MaterialProperty occlusionStrengthDirectDiffuse = null; + MaterialProperty occlusionStrengthDirectSpecular = null; + MaterialProperty occlusionStrengthIndirectDiffuse = null; + MaterialProperty occlusionStrengthIndirectSpecular = null; + //MaterialProperty heigtMapScale = null; + //MaterialProperty heightMap = null; + MaterialProperty emissionColorForRendering = null; + MaterialProperty emissionMap = null; + MaterialProperty detailMask = null; + MaterialProperty detailAlbedoMap = null; + MaterialProperty detailNormalMapScale = null; + MaterialProperty detailNormalMap = null; + MaterialProperty uvSetSecondary = null; + MaterialProperty overrideLightmap = null; + MaterialProperty worldAlignedTexture = null; + MaterialProperty worldAlignedTextureSize = null; + MaterialProperty worldAlignedTextureNormal = null; + MaterialProperty worldAlignedTexturePosition = null; + + MaterialEditor m_MaterialEditor; + ColorPickerHDRConfig m_ColorPickerHDRConfig = new ColorPickerHDRConfig(0f, 99f, 1 / 99f, 3f); + + bool m_FirstTimeApply = true; + + public void FindProperties(MaterialProperty[] props) + { + unlit = FindProperty("g_bUnlit", props); + blendMode = FindProperty("_Mode", props); + specularMode = FindProperty("_SpecularMode", props); + albedoMap = FindProperty("_MainTex", props); + albedoColor = FindProperty("_Color", props); + alphaCutoff = FindProperty("_Cutoff", props); + specularMap = FindProperty("_SpecGlossMap", props, false); + specularColor = FindProperty("_SpecColor", props, false); + reflectanceMin = FindProperty("g_flReflectanceMin", props); + reflectanceMax = FindProperty("g_flReflectanceMax", props); + metallicMap = FindProperty("_MetallicGlossMap", props, false); + metallic = FindProperty("_Metallic", props, false); + smoothness = FindProperty("_Glossiness", props); + bumpScale = FindProperty("_BumpScale", props); + bumpMap = FindProperty("_BumpMap", props); + //heigtMapScale = FindProperty ("_Parallax", props); + //heightMap = FindProperty("_ParallaxMap", props); + cubeMapScalar = FindProperty("g_flCubeMapScalar", props); + occlusionStrength = FindProperty("_OcclusionStrength", props); + occlusionStrengthDirectDiffuse = FindProperty("_OcclusionStrengthDirectDiffuse", props); + occlusionStrengthDirectSpecular = FindProperty("_OcclusionStrengthDirectSpecular", props); + occlusionStrengthIndirectDiffuse = FindProperty("_OcclusionStrengthIndirectDiffuse", props); + occlusionStrengthIndirectSpecular = FindProperty("_OcclusionStrengthIndirectSpecular", props); + occlusionMap = FindProperty("_OcclusionMap", props); + emissionColorForRendering = FindProperty("_EmissionColor", props); + emissionMap = FindProperty("_EmissionMap", props); + detailMask = FindProperty("_DetailMask", props); + detailAlbedoMap = FindProperty("_DetailAlbedoMap", props); + detailNormalMapScale = FindProperty("_DetailNormalMapScale", props); + detailNormalMap = FindProperty("_DetailNormalMap", props); + uvSetSecondary = FindProperty("_UVSec", props); + overrideLightmap = FindProperty("g_tOverrideLightmap", props); + worldAlignedTexture = FindProperty("g_bWorldAlignedTexture", props, false); + worldAlignedTextureSize = FindProperty("g_vWorldAlignedTextureSize", props, worldAlignedTexture != null); + worldAlignedTextureNormal = FindProperty("g_vWorldAlignedTextureNormal", props, worldAlignedTexture != null); + worldAlignedTexturePosition = FindProperty("g_vWorldAlignedTexturePosition", props, worldAlignedTexture != null); + } + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) + { + FindProperties(props); // MaterialProperties can be animated so we do not cache them but fetch them every event to ensure animated values are updated correctly + m_MaterialEditor = materialEditor; + Material material = materialEditor.target as Material; + + ShaderPropertiesGUI(material); + + // Make sure that needed keywords are set up if we're switching some existing + // material to a standard shader. + if (m_FirstTimeApply) + { + SetMaterialKeywords(material); + m_FirstTimeApply = false; + } + } + + public void Vector3GUI(GUIContent label, MaterialProperty materialProperty) + { + Vector4 v4 = materialProperty.vectorValue; + Vector3 v3 = EditorGUILayout.Vector3Field(label, new Vector3(v4.x, v4.y, v4.z)); + materialProperty.vectorValue = new Vector4(v3.x, v3.y, v3.z, 0.0f); + } + + public void ShaderPropertiesGUI(Material material) + { + // Use default labelWidth + EditorGUIUtility.labelWidth = 0f; + + // Detect any changes to the material + EditorGUI.BeginChangeCheck(); + { + m_MaterialEditor.ShaderProperty(unlit, Styles.unlitText.text); + bool bUnlit = (unlit.floatValue != 0.0f); + + BlendModePopup(); + + if (!bUnlit) + { + SpecularModePopup(); + } + + EditorGUILayout.Space(); + + //GUILayout.Label( Styles.primaryMapsText, EditorStyles.boldLabel ); + DoAlbedoArea(material); + if (!bUnlit) + { + m_MaterialEditor.TexturePropertySingleLine(Styles.normalMapText, bumpMap, bumpMap.textureValue != null ? bumpScale : null); + DoSpecularMetallicArea(material); + m_MaterialEditor.TexturePropertySingleLine(Styles.occlusionText, occlusionMap, occlusionMap.textureValue != null ? occlusionStrength : null); + if (occlusionMap.textureValue != null) + { + m_MaterialEditor.ShaderProperty(occlusionStrengthDirectDiffuse, Styles.occlusionStrengthDirectDiffuseText.text, 2); + m_MaterialEditor.ShaderProperty(occlusionStrengthDirectSpecular, Styles.occlusionStrengthDirectSpecularText.text, 2); + m_MaterialEditor.ShaderProperty(occlusionStrengthIndirectDiffuse, Styles.occlusionStrengthIndirectDiffuseText.text, 2); + m_MaterialEditor.ShaderProperty(occlusionStrengthIndirectSpecular, Styles.occlusionStrengthIndirectSpecularText.text, 2); + } + m_MaterialEditor.ShaderProperty(cubeMapScalar, Styles.cubeMapScalarText.text, 0); + } + //m_MaterialEditor.TexturePropertySingleLine(Styles.heightMapText, heightMap, heightMap.textureValue != null ? heigtMapScale : null); + DoEmissionArea(material); + m_MaterialEditor.TexturePropertySingleLine(Styles.detailMaskText, detailMask); + if (!bUnlit) + { + m_MaterialEditor.TexturePropertySingleLine(Styles.overrideLightmapText, overrideLightmap); + } + + EditorGUI.BeginChangeCheck(); // !!! AV - This is from Unity's script. Can these Begin/End calls be nested like this? + m_MaterialEditor.TextureScaleOffsetProperty(albedoMap); + if (EditorGUI.EndChangeCheck()) + { + emissionMap.textureScaleAndOffset = albedoMap.textureScaleAndOffset; // Apply the main texture scale and offset to the emission texture as well, for Enlighten's sake + } + + if (worldAlignedTexture != null) + { + m_MaterialEditor.ShaderProperty(worldAlignedTexture, Styles.worldAlignedTextureText.text); + + if (worldAlignedTexture.floatValue != 0.0f) + { + EditorGUI.indentLevel = 2; + Vector3GUI(Styles.worldAlignedTextureSizeText, worldAlignedTextureSize); + Vector3GUI(Styles.worldAlignedTextureNormalText, worldAlignedTextureNormal); + Vector3GUI(Styles.worldAlignedTexturePositionText, worldAlignedTexturePosition); + EditorGUI.indentLevel = 0; + } + } + + EditorGUILayout.Space(); + + // Secondary properties + GUILayout.Label(Styles.secondaryMapsText, EditorStyles.boldLabel); + m_MaterialEditor.TexturePropertySingleLine(Styles.detailAlbedoText, detailAlbedoMap); + if (!bUnlit) + { + m_MaterialEditor.TexturePropertySingleLine(Styles.detailNormalMapText, detailNormalMap, detailNormalMapScale); + } + m_MaterialEditor.TextureScaleOffsetProperty(detailAlbedoMap); + m_MaterialEditor.ShaderProperty(uvSetSecondary, Styles.uvSetLabel.text); + } + if (EditorGUI.EndChangeCheck()) + { + foreach (var obj in blendMode.targets) + { + MaterialChanged((Material)obj); + } + + foreach (var obj in specularMode.targets) + { + MaterialChanged((Material)obj); + } + } + } + + public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) + { + base.AssignNewShaderToMaterial(material, oldShader, newShader); + + if (oldShader == null) + return; + + // Convert to vr_standard + if (newShader.name.Equals("Valve/vr_standard")) + { + List unknownShaders = new List(); + ValveRefreshStandardShader.StandardToValveSingleMaterial(material, oldShader, newShader, false, unknownShaders); + } + + // Legacy shaders + if (!oldShader.name.Contains("Legacy Shaders/")) + return; + + BlendMode blendMode = BlendMode.Opaque; + if (oldShader.name.Contains("/Transparent/Cutout/")) + { + blendMode = BlendMode.AlphaTest; + } + else if (oldShader.name.Contains("/Transparent/")) + { + // NOTE: legacy shaders did not provide physically based transparency + // therefore Fade mode + blendMode = BlendMode.AlphaBlend; + } + material.SetFloat("_Mode", (float)blendMode); + + MaterialChanged(material); + } + + void BlendModePopup() + { + EditorGUI.showMixedValue = blendMode.hasMixedValue; + var mode = (BlendMode)blendMode.floatValue; + + EditorGUI.BeginChangeCheck(); + mode = (BlendMode)EditorGUILayout.Popup(Styles.renderingMode, (int)mode, Styles.blendNames); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialEditor.RegisterPropertyChangeUndo("Rendering Mode"); + blendMode.floatValue = (float)mode; + } + + EditorGUI.showMixedValue = false; + } + + void SpecularModePopup() + { + EditorGUI.showMixedValue = specularMode.hasMixedValue; + var mode = (SpecularMode)specularMode.floatValue; + + EditorGUI.BeginChangeCheck(); + mode = (SpecularMode)EditorGUILayout.Popup(Styles.specularModeText, (int)mode, Styles.specularNames); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialEditor.RegisterPropertyChangeUndo("Specular Mode"); + specularMode.floatValue = (float)mode; + } + + EditorGUI.showMixedValue = false; + } + + void DoAlbedoArea(Material material) + { + m_MaterialEditor.TexturePropertySingleLine(Styles.albedoText, albedoMap, albedoColor); + if (((BlendMode)material.GetFloat("_Mode") == BlendMode.AlphaTest)) + { + m_MaterialEditor.ShaderProperty(alphaCutoff, Styles.alphaCutoffText.text, MaterialEditor.kMiniTextureFieldLabelIndentLevel + 1); + } + } + + void DoEmissionArea(Material material) + { + float brightness = emissionColorForRendering.colorValue.maxColorComponent; + bool showHelpBox = !HasValidEmissiveKeyword(material); + bool showEmissionColorAndGIControls = brightness > 0.0f; + + bool hadEmissionTexture = emissionMap.textureValue != null; + + // Texture and HDR color controls + m_MaterialEditor.TexturePropertyWithHDRColor(Styles.emissionText, emissionMap, emissionColorForRendering, m_ColorPickerHDRConfig, false); + + // If texture was assigned and color was black set color to white + if (emissionMap.textureValue != null && !hadEmissionTexture && brightness <= 0f) + emissionColorForRendering.colorValue = Color.white; + + // Dynamic Lightmapping mode + if (showEmissionColorAndGIControls) + { + bool shouldEmissionBeEnabled = ShouldEmissionBeEnabled(emissionColorForRendering.colorValue); + using (new EditorGUI.DisabledScope(!shouldEmissionBeEnabled)) + { + m_MaterialEditor.LightmapEmissionProperty(MaterialEditor.kMiniTextureFieldLabelIndentLevel + 1); + } + } + + if (showHelpBox) + { + EditorGUILayout.HelpBox(Styles.emissiveWarning.text, MessageType.Warning); + } + } + + void DoSpecularMetallicArea(Material material) + { + SpecularMode specularMode = (SpecularMode)material.GetInt("_SpecularMode"); + if (specularMode == SpecularMode.BlinnPhong) + { + if (specularMap.textureValue == null) + { + m_MaterialEditor.TexturePropertyTwoLines(Styles.specularMapText, specularMap, specularColor, Styles.smoothnessText, smoothness); + } + else + { + m_MaterialEditor.TexturePropertySingleLine(Styles.specularMapText, specularMap); + m_MaterialEditor.ShaderProperty(reflectanceMin, Styles.reflectanceMinText.text, 2); + m_MaterialEditor.ShaderProperty(reflectanceMax, Styles.reflectanceMaxText.text, 2); + } + } + else if (specularMode == SpecularMode.Metallic) + { + if (metallicMap.textureValue == null) + m_MaterialEditor.TexturePropertyTwoLines(Styles.metallicMapText, metallicMap, metallic, Styles.smoothnessText, smoothness); + else + m_MaterialEditor.TexturePropertySingleLine(Styles.metallicMapText, metallicMap); + } + } + + public static void SetupMaterialWithBlendMode(Material material, BlendMode blendMode) + { + switch (blendMode) + { + case BlendMode.Opaque: + material.SetOverrideTag("RenderType", ""); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + material.SetInt("_ZWrite", 1); + material.DisableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = -1; + break; + case BlendMode.AlphaTest: + material.SetOverrideTag("RenderType", "TransparentCutout"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + material.SetInt("_ZWrite", 1); + material.EnableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = 2450; + break; + case BlendMode.AlphaBlend: + material.SetOverrideTag("RenderType", "Transparent"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + material.SetInt("_ZWrite", 0); + material.DisableKeyword("_ALPHATEST_ON"); + material.EnableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = 3000; + break; + case BlendMode.Glass: + material.SetOverrideTag("RenderType", "Transparent"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + material.SetInt("_ZWrite", 0); + material.DisableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = 3000; + break; + case BlendMode.Additive: + material.SetOverrideTag("RenderType", "Transparent"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_ZWrite", 0); + material.DisableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = 3000; + break; + } + } + + static bool ShouldEmissionBeEnabled(Color color) + { + return color.maxColorComponent > (0.1f / 255.0f); + } + + static void SetMaterialKeywords(Material material) + { + // Note: keywords must be based on Material value not on MaterialProperty due to multi-edit & material animation + // (MaterialProperty value might come from renderer material property block) + SetKeyword(material, "_NORMALMAP", material.GetTexture("_BumpMap") || material.GetTexture("_DetailNormalMap")); + + SpecularMode specularMode = (SpecularMode)material.GetInt("_SpecularMode"); + if (specularMode == SpecularMode.BlinnPhong) + { + SetKeyword(material, "_SPECGLOSSMAP", material.GetTexture("_SpecGlossMap")); + } + else if (specularMode == SpecularMode.Metallic) + { + SetKeyword(material, "_METALLICGLOSSMAP", material.GetTexture("_MetallicGlossMap")); + } + SetKeyword(material, "S_SPECULAR_NONE", specularMode == SpecularMode.None); + SetKeyword(material, "S_SPECULAR_BLINNPHONG", specularMode == SpecularMode.BlinnPhong); + SetKeyword(material, "S_SPECULAR_METALLIC", specularMode == SpecularMode.Metallic); + SetKeyword(material, "S_OCCLUSION", material.GetTexture("_OcclusionMap")); + + SetKeyword(material, "_PARALLAXMAP", material.GetTexture("_ParallaxMap")); + SetKeyword(material, "_DETAIL_MULX2", material.GetTexture("_DetailAlbedoMap") || material.GetTexture("_DetailNormalMap")); + SetKeyword(material, "S_OVERRIDE_LIGHTMAP", material.GetTexture("g_tOverrideLightmap")); + + SetKeyword(material, "S_UNLIT", material.GetInt("g_bUnlit") == 1); + SetKeyword(material, "S_WORLD_ALIGNED_TEXTURE", material.GetInt("g_bWorldAlignedTexture") == 1); + + bool shouldEmissionBeEnabled = ShouldEmissionBeEnabled(material.GetColor("_EmissionColor")); + SetKeyword(material, "_EMISSION", shouldEmissionBeEnabled); + + // Setup lightmap emissive flags + MaterialGlobalIlluminationFlags flags = material.globalIlluminationFlags; + if ((flags & (MaterialGlobalIlluminationFlags.BakedEmissive | MaterialGlobalIlluminationFlags.RealtimeEmissive)) != 0) + { + flags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; + if (!shouldEmissionBeEnabled) + flags |= MaterialGlobalIlluminationFlags.EmissiveIsBlack; + + material.globalIlluminationFlags = flags; + } + + // Reflectance constants + float flReflectanceMin = material.GetFloat("g_flReflectanceMin"); + float flReflectanceMax = material.GetFloat("g_flReflectanceMax"); + material.SetFloat("g_flReflectanceScale", Mathf.Max(flReflectanceMin, flReflectanceMax) - flReflectanceMin); + material.SetFloat("g_flReflectanceBias", flReflectanceMin); + + // World aligned texture constants + Vector4 worldAlignedTextureNormal = material.GetVector("g_vWorldAlignedTextureNormal"); + Vector3 normal = new Vector3(worldAlignedTextureNormal.x, worldAlignedTextureNormal.y, worldAlignedTextureNormal.z); + normal = (normal.sqrMagnitude > 0.0f) ? normal : Vector3.up; + Vector3 tangentU = Vector3.zero, tangentV = Vector3.zero; + Vector3.OrthoNormalize(ref normal, ref tangentU, ref tangentV); + material.SetVector("g_vWorldAlignedNormalTangentU", new Vector4(tangentU.x, tangentU.y, tangentU.z, 0.0f)); + material.SetVector("g_vWorldAlignedNormalTangentV", new Vector4(tangentV.x, tangentV.y, tangentV.z, 0.0f)); + + // Static combo skips + if (material.GetInt("g_bUnlit") == 1) + { + material.DisableKeyword("_NORMALMAP"); + material.EnableKeyword("S_SPECULAR_NONE"); + material.DisableKeyword("S_SPECULAR_BLINNPHONG"); + material.DisableKeyword("S_SPECULAR_METALLIC"); + material.DisableKeyword("_METALLICGLOSSMAP"); + material.DisableKeyword("_SPECGLOSSMAP"); + material.DisableKeyword("S_OVERRIDE_LIGHTMAP"); + } + } + + bool HasValidEmissiveKeyword(Material material) + { + // Material animation might be out of sync with the material keyword. + // So if the emission support is disabled on the material, but the property blocks have a value that requires it, then we need to show a warning. + // (note: (Renderer MaterialPropertyBlock applies its values to emissionColorForRendering)) + bool hasEmissionKeyword = material.IsKeywordEnabled("_EMISSION"); + if (!hasEmissionKeyword && ShouldEmissionBeEnabled(emissionColorForRendering.colorValue)) + return false; + else + return true; + } + + static void MaterialChanged(Material material) + { + SetupMaterialWithBlendMode(material, (BlendMode)material.GetFloat("_Mode")); + + SetMaterialKeywords(material); + } + + static void SetKeyword(Material m, string keyword, bool state) + { + if (state) + m.EnableKeyword(keyword); + else + m.DisableKeyword(keyword); + } + } } // namespace UnityEditor #endif diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset b/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset index 694d6fc4efc..103746b9e0a 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset @@ -11,5 +11,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 558064ecdbf6b6742892d699acb39aed, type: 3} m_Name: HDRenderLoop m_EditorClassIdentifier: - enableTonemap: 0 - exposure: 0 + m_TextureSettings: + spotCookieSize: 128 + pointCookieSize: 512 + reflectionCubemapSize: 128 diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset.meta index b56d278dba7..69f7454039b 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset.meta +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 2400b74f5ce370c4481e5dc417d03703 -timeCreated: 1474923798 +timeCreated: 1476885643 licenseType: Pro NativeFormatImporter: userData: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.cs index 68c473032c3..55b5caf3fc9 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.cs +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.cs @@ -1,83 +1,76 @@ -using UnityEngine; -using System.Collections; using UnityEngine.Rendering; +using UnityEngine.Experimental.Rendering; using System.Collections.Generic; using System; using UnityEditor; -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - [ExecuteInEditMode] + [ExecuteInEditMode] // This HDRenderLoop assume linear lighting. Don't work with gamma. - public class HDRenderLoop : ScriptableRenderLoop - { - private static string m_HDRenderLoopPath = "Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset"; - - // Debugging - public enum MaterialDebugMode - { - None = 0, - DiffuseColor = 1, - Normal = 2, - Depth = 3, - AmbientOcclusion = 4, - SpecularColor = 5, - SpecularOcclustion = 6, - Smoothness = 7, - MaterialId = 8, - UV0 = 9, - Tangent = 10, - Bitangent = 11 - } - - public enum GBufferDebugMode - { - None = 0, - DiffuseColor = 1, - Normal = 2, - Depth = 3, - BakedDiffuse = 4, - SpecularColor = 5, - SpecularOcclustion = 6, - Smoothness = 7, - MaterialId = 8, - } - - public class DebugParameters - { - // Material Debugging - public MaterialDebugMode materialDebugMode = MaterialDebugMode.None; - public GBufferDebugMode gBufferDebugMode = GBufferDebugMode.None; - public bool displayMaterialDebugForTransparent = false; - - // Rendering debugging - public bool displayOpaqueObjects = true; - public bool displayTransparentObjects = true; - } - - private DebugParameters m_DebugParameters = new DebugParameters(); - public DebugParameters debugParameters - { - get { return m_DebugParameters; } - } - - #if UNITY_EDITOR - [MenuItem("Renderloop/CreateHDRenderLoop")] - static void CreateHDRenderLoop() - { - var instance = ScriptableObject.CreateInstance(); - UnityEditor.AssetDatabase.CreateAsset(instance, m_HDRenderLoopPath); - } - #endif + public class HDRenderLoop : ScriptableRenderLoop + { + private const string k_HDRenderLoopPath = "Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset"; + + // Must be in sync with DebugViewMaterial.hlsl + public enum DebugViewVaryingMode + { + Depth = 1, + TexCoord0 = 2, + TexCoord1 = 3, + TexCoord2 = 4, + VertexTangentWS = 5, + VertexBitangentWS = 6, + VertexNormalWS = 7, + VertexColor = 8, + } + + // Must be in sync with DebugViewMaterial.hlsl + public enum DebugViewGbufferMode + { + Depth = 9, + BakeDiffuseLighting = 10, + } + + public class DebugParameters + { + // Material Debugging + public int debugViewMaterial = 0; + + // Rendering debugging + public bool displayOpaqueObjects = true; + public bool displayTransparentObjects = true; + + public bool useForwardRenderingOnly = false; + + public bool enableTonemap = true; + public float exposure = 0; + } + + private DebugParameters m_DebugParameters = new DebugParameters(); + public DebugParameters debugParameters + { + get { return m_DebugParameters; } + } + + #if UNITY_EDITOR + [MenuItem("Renderloop/CreateHDRenderLoop")] + static void CreateHDRenderLoop() + { + var instance = ScriptableObject.CreateInstance(); + UnityEditor.AssetDatabase.CreateAsset(instance, k_HDRenderLoopPath); + } + + #endif public class GBufferManager { public const int MaxGbuffer = 8; - public void SetBufferDescription(int index, string stringID, RenderTextureFormat inFormat, RenderTextureReadWrite inSRGBWrite) + public void SetBufferDescription(int index, string stringId, RenderTextureFormat inFormat, RenderTextureReadWrite inSRGBWrite) { - IDs[index] = Shader.PropertyToID(stringID); + IDs[index] = Shader.PropertyToID(stringId); RTIDs[index] = new RenderTargetIdentifier(IDs[index]); formats[index] = inFormat; sRGBWrites[index] = inSRGBWrite; @@ -112,7 +105,7 @@ public void BindBuffers(Material mat) } */ - + public int gbufferCount { get; set; } int[] IDs = new int[MaxGbuffer]; RenderTargetIdentifier[] RTIDs = new RenderTargetIdentifier[MaxGbuffer]; @@ -121,85 +114,111 @@ public void BindBuffers(Material mat) } public const int MaxLights = 32; + public const int MaxProbes = 32; - public bool enableTonemap = true; - public float exposure = 0; + //[SerializeField] + //ShadowSettings m_ShadowSettings = ShadowSettings.Default; + //ShadowRenderPass m_ShadowPass; - //[SerializeField] - //ShadowSettings m_ShadowSettings = ShadowSettings.Default; - //ShadowRenderPass m_ShadowPass; + [SerializeField] + TextureSettings m_TextureSettings = TextureSettings.Default; Material m_DeferredMaterial; Material m_FinalPassMaterial; - // Debug - Material m_GBufferDebugMaterial; + // TODO: Find a way to automatically create/iterate through these kind of class + Lit.RenderLoop m_LitRenderLoop; + + // Debug + Material m_DebugViewMaterialGBuffer; - GBufferManager gbufferManager = new GBufferManager(); + GBufferManager m_gbufferManager = new GBufferManager(); static private int s_CameraColorBuffer; static private int s_CameraDepthBuffer; static private ComputeBuffer s_punctualLightList; + static private ComputeBuffer s_envLightList; - void OnEnable() - { - Rebuild (); - } + private TextureCacheCubemap m_cubeReflTexArray; - void OnValidate() - { - Rebuild (); - } + void OnEnable() + { + Rebuild(); + } + + void OnValidate() + { + Rebuild(); + } void ClearComputeBuffers() { if (s_punctualLightList != null) s_punctualLightList.Release(); + + if (s_envLightList != null) + s_envLightList.Release(); } - Material CreateEngineMaterial(string shaderPath) - { - Material mat = new Material(Shader.Find(shaderPath) as Shader); - mat.hideFlags = HideFlags.HideAndDontSave; - return mat; - } + Material CreateEngineMaterial(string shaderPath) + { + var mat = new Material(Shader.Find(shaderPath) as Shader) + { + hideFlags = HideFlags.HideAndDontSave + }; + return mat; + } - public override void Rebuild() - { + public override void Rebuild() + { ClearComputeBuffers(); - gbufferManager.gbufferCount = 4; - gbufferManager.SetBufferDescription(0, "_CameraGBufferTexture0", RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB); // Store diffuse color => sRGB - gbufferManager.SetBufferDescription(1, "_CameraGBufferTexture1", RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear); - gbufferManager.SetBufferDescription(2, "_CameraGBufferTexture2", RenderTextureFormat.ARGB2101010, RenderTextureReadWrite.Linear); // Store normal => higher precision - gbufferManager.SetBufferDescription(3, "_CameraGBufferTexture3", RenderTextureFormat.RGB111110Float, RenderTextureReadWrite.Linear); - s_CameraColorBuffer = Shader.PropertyToID("_CameraColorTexture"); s_CameraDepthBuffer = Shader.PropertyToID("_CameraDepthTexture"); s_punctualLightList = new ComputeBuffer(MaxLights, System.Runtime.InteropServices.Marshal.SizeOf(typeof(PunctualLightData))); + s_envLightList = new ComputeBuffer(MaxLights, System.Runtime.InteropServices.Marshal.SizeOf(typeof(EnvLightData))); - m_DeferredMaterial = CreateEngineMaterial("Hidden/Unity/LightingDeferred"); - m_FinalPassMaterial = CreateEngineMaterial("Hidden/Unity/FinalPass"); + m_DeferredMaterial = CreateEngineMaterial("Hidden/Unity/LightingDeferred"); + m_FinalPassMaterial = CreateEngineMaterial("Hidden/Unity/FinalPass"); - // Debug - m_GBufferDebugMaterial = CreateEngineMaterial("Hidden/Unity/GBufferDebug"); + // Debug + m_DebugViewMaterialGBuffer = CreateEngineMaterial("Hidden/Unity/DebugViewMaterialGBuffer"); // m_ShadowPass = new ShadowRenderPass (m_ShadowSettings); - } + + m_cubeReflTexArray = new TextureCacheCubemap(); + m_cubeReflTexArray.AllocTextureArray(32, (int)m_TextureSettings.reflectionCubemapSize, TextureFormat.BC6H, true); + + // Init Lit material buffer - GBuffer and init + m_LitRenderLoop = new Lit.RenderLoop(); // Our object can be garbacge collected, so need to be allocate here + + m_gbufferManager.gbufferCount = m_LitRenderLoop.GetGBufferCount(); + for (int gbufferIndex = 0; gbufferIndex < m_gbufferManager.gbufferCount; ++gbufferIndex) + { + m_gbufferManager.SetBufferDescription(gbufferIndex, "_CameraGBufferTexture" + gbufferIndex, m_LitRenderLoop.RTFormat[gbufferIndex], m_LitRenderLoop.RTReadWrite[gbufferIndex]); + } + + m_LitRenderLoop.Rebuild(); + } void OnDisable() { + m_LitRenderLoop.OnDisable(); + s_punctualLightList.Release(); + s_envLightList.Release(); if (m_DeferredMaterial) DestroyImmediate(m_DeferredMaterial); if (m_FinalPassMaterial) DestroyImmediate(m_FinalPassMaterial); + + m_cubeReflTexArray.Release(); } void InitAndClearBuffer(Camera camera, RenderLoop renderLoop) { - // We clear only the depth buffer, no need to clear the various color buffer as we overwrite them. + // We clear only the depth buffer, no need to clear the various color buffer as we overwrite them. // Clear depth/stencil and init buffers { var cmd = new CommandBuffer(); @@ -215,7 +234,7 @@ void InitAndClearBuffer(Camera camera, RenderLoop renderLoop) cmd.GetTemporaryRT(s_CameraColorBuffer, w, h, 0, FilterMode.Point, RenderTextureFormat.ARGBHalf, RenderTextureReadWrite.Default); cmd.GetTemporaryRT(s_CameraDepthBuffer, w, h, 24, FilterMode.Point, RenderTextureFormat.Depth); - gbufferManager.InitGBuffers(w, h, cmd); + m_gbufferManager.InitGBuffers(w, h, cmd); cmd.SetRenderTarget(new RenderTargetIdentifier(s_CameraColorBuffer), new RenderTargetIdentifier(s_CameraDepthBuffer)); cmd.ClearRenderTarget(true, false, new Color(0, 0, 0, 0)); @@ -242,7 +261,7 @@ void InitAndClearBuffer(Camera camera, RenderLoop renderLoop) var cmd = new CommandBuffer(); cmd.name = "Clear GBuffer"; // Write into the Camera Depth buffer - cmd.SetRenderTarget(gbufferManager.GetGBuffers(cmd), new RenderTargetIdentifier(s_CameraDepthBuffer)); + cmd.SetRenderTarget(m_gbufferManager.GetGBuffers(cmd), new RenderTargetIdentifier(s_CameraDepthBuffer)); // Clear everything // TODO: Clear is not required for color as we rewrite everything, will save performance. cmd.ClearRenderTarget(false, true, new Color(0, 0, 0, 0)); @@ -253,106 +272,125 @@ void InitAndClearBuffer(Camera camera, RenderLoop renderLoop) // END TEMP } + void RenderOpaqueRenderList(CullResults cull, Camera camera, RenderLoop renderLoop, string passName) + { + if (!debugParameters.displayOpaqueObjects) + return; + + DrawRendererSettings settings = new DrawRendererSettings(cull, camera, new ShaderPassName(passName)); + settings.sorting.sortOptions = SortOptions.SortByMaterialThenMesh; + settings.inputCullingOptions.SetQueuesOpaque(); + renderLoop.DrawRenderers(ref settings); + } + + void RenderTransparentRenderList(CullResults cull, Camera camera, RenderLoop renderLoop, string passName) + { + if (!debugParameters.displayTransparentObjects) + return; + + var settings = new DrawRendererSettings(cull, camera, new ShaderPassName(passName)) + { + rendererConfiguration = RendererConfiguration.PerObjectLightProbe | RendererConfiguration.PerObjectReflectionProbes, + sorting = { sortOptions = SortOptions.SortByMaterialThenMesh } + }; + settings.inputCullingOptions.SetQueuesTransparent(); + renderLoop.DrawRenderers(ref settings); + } + void RenderGBuffer(CullResults cull, Camera camera, RenderLoop renderLoop) - { - // setup GBuffer for rendering - var cmd = new CommandBuffer(); - cmd.name = "GBuffer Pass"; - cmd.SetRenderTarget(gbufferManager.GetGBuffers(cmd), new RenderTargetIdentifier(s_CameraDepthBuffer)); + { + if (debugParameters.useForwardRenderingOnly) + { + return ; + } + + // setup GBuffer for rendering + var cmd = new CommandBuffer { name = "GBuffer Pass" }; + cmd.SetRenderTarget(m_gbufferManager.GetGBuffers(cmd), new RenderTargetIdentifier(s_CameraDepthBuffer)); renderLoop.ExecuteCommandBuffer(cmd); - cmd.Dispose(); + cmd.Dispose(); - - // render opaque objects into GBuffer - DrawRendererSettings settings = new DrawRendererSettings(cull, camera, new ShaderPassName("GBuffer")); - settings.sorting.sortOptions = SortOptions.SortByMaterialThenMesh; - settings.inputCullingOptions.SetQueuesOpaque(); - renderLoop.DrawRenderers(ref settings); - } - - void RenderMaterialDebug(CullResults cull, Camera camera, RenderLoop renderLoop) - { - // setup GBuffer for rendering - var cmd = new CommandBuffer(); - cmd.name = "Debug Pass"; - cmd.GetTemporaryRT(s_CameraColorBuffer, -1, -1, 0, FilterMode.Point, RenderTextureFormat.ARGBHalf, RenderTextureReadWrite.Linear); - cmd.GetTemporaryRT(s_CameraDepthBuffer, -1, -1, 24, FilterMode.Point, RenderTextureFormat.Depth); - cmd.SetRenderTarget(new RenderTargetIdentifier(s_CameraColorBuffer), new RenderTargetIdentifier(s_CameraDepthBuffer)); - cmd.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); - renderLoop.ExecuteCommandBuffer(cmd); - cmd.Dispose(); - - Shader.SetGlobalInt("g_MaterialDebugMode", (int)debugParameters.materialDebugMode); - - DrawRendererSettings settings = new DrawRendererSettings(cull, camera, new ShaderPassName("Debug")); - settings.sorting.sortOptions = SortOptions.SortByMaterialThenMesh; - settings.inputCullingOptions.SetQueuesOpaque(); - renderLoop.DrawRenderers(ref settings); - - if(debugParameters.displayMaterialDebugForTransparent) - { - settings.sorting.sortOptions = SortOptions.BackToFront; - settings.inputCullingOptions.SetQueuesTransparent(); - renderLoop.DrawRenderers(ref settings); - } - - cmd = new CommandBuffer(); - cmd.name = "FinalPass"; - cmd.Blit(s_CameraColorBuffer, BuiltinRenderTextureType.CameraTarget, m_FinalPassMaterial, 0); - renderLoop.ExecuteCommandBuffer(cmd); - cmd.Dispose(); - } - - void RenderGBufferDebug(Camera camera, RenderLoop renderLoop) - { - Matrix4x4 invViewProj = GetViewProjectionMatrix(camera).inverse; - m_GBufferDebugMaterial.SetMatrix("_InvViewProjMatrix", invViewProj); - - Vector4 screenSize = ComputeScreenSize(camera); - m_GBufferDebugMaterial.SetVector("_ScreenSize", screenSize); - m_GBufferDebugMaterial.SetFloat("_DebugMode", (float)debugParameters.gBufferDebugMode); - - // gbufferManager.BindBuffers(m_DeferredMaterial); - // TODO: Bind depth textures - var cmd = new CommandBuffer(); - cmd.name = "GBuffer Debug"; - cmd.Blit(null, new RenderTargetIdentifier(s_CameraColorBuffer), m_GBufferDebugMaterial, 0); - renderLoop.ExecuteCommandBuffer(cmd); - cmd.Dispose(); - } + // render opaque objects into GBuffer + RenderOpaqueRenderList(cull, camera, renderLoop, "GBuffer"); + } + + void RenderDebugViewMaterial(CullResults cull, Camera camera, RenderLoop renderLoop) + { + // Render Opaque forward + { + var cmd = new CommandBuffer { name = "DebugView Material Mode Pass" }; + cmd.SetRenderTarget(new RenderTargetIdentifier(s_CameraColorBuffer), new RenderTargetIdentifier(s_CameraDepthBuffer)); + cmd.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); + renderLoop.ExecuteCommandBuffer(cmd); + cmd.Dispose(); + + Shader.SetGlobalInt("_DebugViewMaterial", (int)debugParameters.debugViewMaterial); + + RenderOpaqueRenderList(cull, camera, renderLoop, "DebugViewMaterial"); + } + + // Render GBUffer opaque + { + Vector4 screenSize = ComputeScreenSize(camera); + m_DebugViewMaterialGBuffer.SetVector("_ScreenSize", screenSize); + m_DebugViewMaterialGBuffer.SetFloat("_DebugViewMaterial", (float)debugParameters.debugViewMaterial); + + // m_gbufferManager.BindBuffers(m_DeferredMaterial); + // TODO: Bind depth textures + var cmd = new CommandBuffer { name = "GBuffer Debug Pass" }; + cmd.Blit(null, new RenderTargetIdentifier(s_CameraColorBuffer), m_DebugViewMaterialGBuffer, 0); + renderLoop.ExecuteCommandBuffer(cmd); + cmd.Dispose(); + } + + // Render forward transparent + { + RenderTransparentRenderList(cull, camera, renderLoop, "DebugViewMaterial"); + } + + // Last blit + { + var cmd = new CommandBuffer { name = "Blit DebugView Material Debug" }; + cmd.Blit(s_CameraColorBuffer, BuiltinRenderTextureType.CameraTarget); + renderLoop.ExecuteCommandBuffer(cmd); + cmd.Dispose(); + } + } Matrix4x4 GetViewProjectionMatrix(Camera camera) { // The actual projection matrix used in shaders is actually massaged a bit to work across all platforms // (different Z value ranges etc.) - Matrix4x4 gpuProj = GL.GetGPUProjectionMatrix(camera.projectionMatrix, false); - Matrix4x4 gpuVP = gpuProj * camera.worldToCameraMatrix; + var gpuProj = GL.GetGPUProjectionMatrix(camera.projectionMatrix, false); + var gpuVP = gpuProj * camera.worldToCameraMatrix; return gpuVP; } - Vector4 ComputeScreenSize(Camera camera) - { - Vector4 screenSize = new Vector4(); - screenSize.x = camera.pixelWidth; - screenSize.y = camera.pixelHeight; - screenSize.z = 1.0f / camera.pixelWidth; - screenSize.w = 1.0f / camera.pixelHeight; - return screenSize; - } + Vector4 ComputeScreenSize(Camera camera) + { + return new Vector4(camera.pixelWidth, camera.pixelHeight, 1.0f / camera.pixelWidth, 1.0f / camera.pixelHeight); + } void RenderDeferredLighting(Camera camera, RenderLoop renderLoop) { - Matrix4x4 invViewProj = GetViewProjectionMatrix(camera).inverse; + if (debugParameters.useForwardRenderingOnly) + { + return; + } + + // Bind material data + m_LitRenderLoop.Bind(); + + var invViewProj = GetViewProjectionMatrix(camera).inverse; m_DeferredMaterial.SetMatrix("_InvViewProjMatrix", invViewProj); - Vector4 screenSize = ComputeScreenSize(camera); + var screenSize = ComputeScreenSize(camera); m_DeferredMaterial.SetVector("_ScreenSize", screenSize); - // gbufferManager.BindBuffers(m_DeferredMaterial); + // m_gbufferManager.BindBuffers(m_DeferredMaterial); // TODO: Bind depth textures - var cmd = new CommandBuffer(); - cmd.name = "Deferred Ligthing Pass"; + var cmd = new CommandBuffer { name = "Deferred Ligthing Pass" }; cmd.Blit(null, new RenderTargetIdentifier(s_CameraColorBuffer), m_DeferredMaterial, 0); renderLoop.ExecuteCommandBuffer(cmd); cmd.Dispose(); @@ -360,401 +398,267 @@ void RenderDeferredLighting(Camera camera, RenderLoop renderLoop) void RenderForward(CullResults cullResults, Camera camera, RenderLoop renderLoop) { - // setup GBuffer for rendering - var cmd = new CommandBuffer(); - cmd.name = "Forward Pass"; + // Bind material data + m_LitRenderLoop.Bind(); + + var cmd = new CommandBuffer { name = "Forward Pass" }; cmd.SetRenderTarget(new RenderTargetIdentifier(s_CameraColorBuffer), new RenderTargetIdentifier(s_CameraDepthBuffer)); renderLoop.ExecuteCommandBuffer(cmd); cmd.Dispose(); - DrawRendererSettings settings = new DrawRendererSettings(cullResults, camera, new ShaderPassName("Forward")); - settings.rendererConfiguration = RendererConfiguration.ConfigureOneLightProbePerRenderer | RendererConfiguration.ConfigureReflectionProbesProbePerRenderer; - settings.sorting.sortOptions = SortOptions.SortByMaterialThenMesh; - settings.inputCullingOptions.SetQueuesTransparent(); + if (debugParameters.useForwardRenderingOnly) + { + RenderOpaqueRenderList(cullResults, camera, renderLoop, "Forward"); + } - renderLoop.DrawRenderers(ref settings); + RenderTransparentRenderList(cullResults, camera, renderLoop, "Forward"); } + void RenderForwardUnlit(CullResults cullResults, Camera camera, RenderLoop renderLoop) + { + // Bind material data + m_LitRenderLoop.Bind(); + + var cmd = new CommandBuffer { name = "Forward Unlit Pass" }; + cmd.SetRenderTarget(new RenderTargetIdentifier(s_CameraColorBuffer), new RenderTargetIdentifier(s_CameraDepthBuffer)); + renderLoop.ExecuteCommandBuffer(cmd); + cmd.Dispose(); + + RenderOpaqueRenderList(cullResults, camera, renderLoop, "ForwardUnlit"); + RenderTransparentRenderList(cullResults, camera, renderLoop, "ForwardUnlit"); + } + void FinalPass(RenderLoop renderLoop) { // Those could be tweakable for the neutral tonemapper, but in the case of the LookDev we don't need that - const float BlackIn = 0.02f; - const float WhiteIn = 10.0f; - const float BlackOut = 0.0f; - const float WhiteOut = 10.0f; - const float WhiteLevel = 5.3f; - const float WhiteClip = 10.0f; - const float DialUnits = 20.0f; - const float HalfDialUnits = DialUnits * 0.5f; + const float blackIn = 0.02f; + const float whiteIn = 10.0f; + const float blackOut = 0.0f; + const float whiteOut = 10.0f; + const float whiteLevel = 5.3f; + const float whiteClip = 10.0f; + const float dialUnits = 20.0f; + const float halfDialUnits = dialUnits * 0.5f; // converting from artist dial units to easy shader-lerps (0-1) - Vector4 tonemapCoeff1 = new Vector4((BlackIn * DialUnits) + 1.0f, (BlackOut * HalfDialUnits) + 1.0f, (WhiteIn / DialUnits), (1.0f - (WhiteOut / DialUnits))); - Vector4 tonemapCoeff2 = new Vector4(0.0f, 0.0f, WhiteLevel, WhiteClip / HalfDialUnits); + var tonemapCoeff1 = new Vector4((blackIn * dialUnits) + 1.0f, (blackOut * halfDialUnits) + 1.0f, (whiteIn / dialUnits), (1.0f - (whiteOut / dialUnits))); + var tonemapCoeff2 = new Vector4(0.0f, 0.0f, whiteLevel, whiteClip / halfDialUnits); m_FinalPassMaterial.SetVector("_ToneMapCoeffs1", tonemapCoeff1); m_FinalPassMaterial.SetVector("_ToneMapCoeffs2", tonemapCoeff2); - m_FinalPassMaterial.SetFloat("_EnableToneMap", enableTonemap ? 1.0f : 0.0f); - m_FinalPassMaterial.SetFloat("_Exposure", exposure); + m_FinalPassMaterial.SetFloat("_EnableToneMap", debugParameters.enableTonemap ? 1.0f : 0.0f); + m_FinalPassMaterial.SetFloat("_Exposure", debugParameters.exposure); + + var cmd = new CommandBuffer { name = "FinalPass" }; - CommandBuffer cmd = new CommandBuffer(); - cmd.name = "FinalPass"; // Resolve our HDR texture to CameraTarget. cmd.Blit(s_CameraColorBuffer, BuiltinRenderTextureType.CameraTarget, m_FinalPassMaterial, 0); renderLoop.ExecuteCommandBuffer(cmd); cmd.Dispose(); } - //--------------------------------------------------------------------------------------------------------------------------------------------------- + void NewFrame() + { + // update texture caches + m_cubeReflTexArray.NewFrame(); + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- - void UpdatePunctualLights(ActiveLight[] activeLights) + void UpdatePunctualLights(VisibleLight[] visibleLights) { - int punctualLightCount = 0; - List lights = new List(); + var lights = new List(); - for (int lightIndex = 0; lightIndex < Math.Min(activeLights.Length, MaxLights); lightIndex++) + for (int lightIndex = 0; lightIndex < Math.Min(visibleLights.Length, MaxLights); lightIndex++) { - ActiveLight light = activeLights[lightIndex]; - if (light.lightType == LightType.Spot || light.lightType == LightType.Point || light.lightType == LightType.Directional) + var light = visibleLights[lightIndex]; + if (light.lightType != LightType.Spot && light.lightType != LightType.Point && light.lightType != LightType.Directional) + continue; + + var l = new PunctualLightData(); + + if (light.lightType == LightType.Directional) + { + l.useDistanceAttenuation = 0.0f; + // positionWS store Light direction for directional and is opposite to the forward direction + l.positionWS = -light.light.transform.forward; + l.invSqrAttenuationRadius = 0.0f; + } + else + { + l.useDistanceAttenuation = 1.0f; + l.positionWS = light.light.transform.position; + l.invSqrAttenuationRadius = 1.0f / (light.range * light.range); + } + + // Correct intensity calculation (Different from Unity) + var lightColorR = light.light.intensity * Mathf.GammaToLinearSpace(light.light.color.r); + var lightColorG = light.light.intensity * Mathf.GammaToLinearSpace(light.light.color.g); + var lightColorB = light.light.intensity * Mathf.GammaToLinearSpace(light.light.color.b); + + l.color.Set(lightColorR, lightColorG, lightColorB); + + l.forward = light.light.transform.forward; // Note: Light direction is oriented backward (-Z) + l.up = light.light.transform.up; + l.right = light.light.transform.right; + + l.diffuseScale = 1.0f; + l.specularScale = 1.0f; + l.shadowDimmer = 1.0f; + + if (light.lightType == LightType.Spot) { - PunctualLightData l = new PunctualLightData(); - - if (light.lightType == LightType.Directional) - { - l.useDistanceAttenuation = 0.0f; - // positionWS store Light direction for directional and is opposite to the forward direction - l.positionWS = -light.light.transform.forward; - l.invSqrAttenuationRadius = 0.0f; - } - else - { - l.useDistanceAttenuation = 1.0f; - l.positionWS = light.light.transform.position; - l.invSqrAttenuationRadius = 1.0f / (light.range * light.range); - } - - // Correct intensity calculation (Different from Unity) - float lightColorR = light.light.intensity * Mathf.GammaToLinearSpace(light.light.color.r); - float lightColorG = light.light.intensity * Mathf.GammaToLinearSpace(light.light.color.g); - float lightColorB = light.light.intensity * Mathf.GammaToLinearSpace(light.light.color.b); - - l.color.Set(lightColorR, lightColorG, lightColorB); - - // Light direction is opposite to the forward direction - l.forward = -light.light.transform.forward; - // CAUTION: For IES as we inverse forward maybe this will need rotation. - l.up = light.light.transform.up; - l.right = light.light.transform.right; - - l.diffuseScale = 1.0f; - l.specularScale = 1.0f; - l.shadowDimmer = 1.0f; - - if (light.lightType == LightType.Spot) - { - float spotAngle = light.light.spotAngle; - AdditionalLightData additionalLightData = light.light.GetComponent(); - float innerConePercent = AdditionalLightData.GetInnerSpotPercent01(additionalLightData); - float cosSpotOuterHalfAngle = Mathf.Clamp(Mathf.Cos(spotAngle * 0.5f * Mathf.Deg2Rad), 0.0f, 1.0f); - float cosSpotInnerHalfAngle = Mathf.Clamp(Mathf.Cos(spotAngle * 0.5f * innerConePercent * Mathf.Deg2Rad), 0.0f, 1.0f); // inner cone - - float val = Mathf.Max(0.001f, (cosSpotInnerHalfAngle - cosSpotOuterHalfAngle)); - l.angleScale = 1.0f / val; - l.angleOffset = -cosSpotOuterHalfAngle * l.angleScale; - } - else - { - // 1.0f, 2.0f are neutral value allowing GetAngleAnttenuation in shader code to return 1.0 - l.angleScale = 1.0f; - l.angleOffset = 2.0f; - } - - lights.Add(l); - punctualLightCount++; + var spotAngle = light.light.spotAngle; + var additionalLightData = light.light.GetComponent(); + var innerConePercent = AdditionalLightData.GetInnerSpotPercent01(additionalLightData); + var cosSpotOuterHalfAngle = Mathf.Clamp(Mathf.Cos(spotAngle * 0.5f * Mathf.Deg2Rad), 0.0f, 1.0f); + var cosSpotInnerHalfAngle = Mathf.Clamp(Mathf.Cos(spotAngle * 0.5f * innerConePercent * Mathf.Deg2Rad), 0.0f, 1.0f); // inner cone + + var val = Mathf.Max(0.001f, (cosSpotInnerHalfAngle - cosSpotOuterHalfAngle)); + l.angleScale = 1.0f / val; + l.angleOffset = -cosSpotOuterHalfAngle * l.angleScale; } + else + { + // 1.0f, 2.0f are neutral value allowing GetAngleAnttenuation in shader code to return 1.0 + l.angleScale = 1.0f; + l.angleOffset = 2.0f; + } + + lights.Add(l); } s_punctualLightList.SetData(lights.ToArray()); - Shader.SetGlobalBuffer("g_punctualLightList", s_punctualLightList); - Shader.SetGlobalInt("g_punctualLightCount", punctualLightCount); + Shader.SetGlobalBuffer("_PunctualLightList", s_punctualLightList); + Shader.SetGlobalInt("_PunctualLightCount", lights.Count); } - void UpdateLightConstants(ActiveLight[] activeLights /*, ref ShadowOutput shadow */) - { - /* - int nNumLightsIncludingTooMany = 0; - - int g_nNumLights = 0; - - Vector4[] g_vLightColor = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vLightPosition_flInvRadius = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vLightDirection = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vLightShadowIndex_vLightParams = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vLightFalloffParams = new Vector4[ MAX_LIGHTS ]; - Vector4[] g_vSpotLightInnersuterConeCosines = new Vector4[ MAX_LIGHTS ]; - Matrix4x4[] g_matWorldToShadow = new Matrix4x4[ MAX_LIGHTS * MAX_SHADOWMAP_PER_LIGHTS ]; - Vector4[] g_vDirShadowSplitSpheres = new Vector4[ MAX_DIRECTIONAL_SPLIT ]; - - for ( int nLight = 0; nLight < activeLights.Length; nLight++ ) - { - - nNumLightsIncludingTooMany++; - if ( nNumLightsIncludingTooMany > MAX_LIGHTS ) - continue; - - ActiveLight light = activeLights [nLight]; - LightType lightType = light.lightType; - Vector3 position = light.light.transform.position; - Vector3 lightDir = light.light.transform.forward.normalized; - AdditionalLightData additionalLightData = light.light.GetComponent (); - - // Setup shadow data arrays - bool hasShadows = shadow.GetShadowSliceCountLightIndex (nLight) != 0; - - if ( lightType == LightType.Directional ) - { - g_vLightColor[ g_nNumLights ] = light.finalColor; - g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( - position.x - ( lightDir.x * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), - position.y - ( lightDir.y * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), - position.z - ( lightDir.z * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), - -1.0f ); - g_vLightDirection[ g_nNumLights ] = new Vector4( lightDir.x, lightDir.y, lightDir.z ); - g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); - g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 0.0f, 0.0f, float.MaxValue, (float)lightType ); - g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( 0.0f, -1.0f, 1.0f ); - - if (hasShadows) - { - for (int s = 0; s < MAX_DIRECTIONAL_SPLIT; ++s) - { - g_vDirShadowSplitSpheres[s] = shadow.directionalShadowSplitSphereSqr[s]; - } - } - } - else if ( lightType == LightType.Point ) - { - g_vLightColor[ g_nNumLights ] = light.finalColor; - - g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( position.x, position.y, position.z, 1.0f / light.range ); - g_vLightDirection[ g_nNumLights ] = new Vector4( 0.0f, 0.0f, 0.0f ); - g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); - g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 1.0f, 0.0f, light.range * light.range, (float)lightType ); - g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( 0.0f, -1.0f, 1.0f ); - } - else if ( lightType == LightType.Spot ) - { - g_vLightColor[ g_nNumLights ] = light.finalColor; - g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( position.x, position.y, position.z, 1.0f / light.range ); - g_vLightDirection[ g_nNumLights ] = new Vector4( lightDir.x, lightDir.y, lightDir.z ); - g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); - g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 1.0f, 0.0f, light.range * light.range, (float)lightType ); - - float flInnerConePercent = AdditionalLightData.GetInnerSpotPercent01(additionalLightData); - float spotAngle = light.light.spotAngle; - float flPhiDot = Mathf.Clamp( Mathf.Cos( spotAngle * 0.5f * Mathf.Deg2Rad ), 0.0f, 1.0f ); // outer cone - float flThetaDot = Mathf.Clamp( Mathf.Cos( spotAngle * 0.5f * flInnerConePercent * Mathf.Deg2Rad ), 0.0f, 1.0f ); // inner cone - g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( flThetaDot, flPhiDot, 1.0f / Mathf.Max( 0.01f, flThetaDot - flPhiDot ) ); - - } - - if ( hasShadows ) - { - // Enable shadows - g_vLightShadowIndex_vLightParams[ g_nNumLights ].x = 1; - for(int s=0; s < shadow.GetShadowSliceCountLightIndex (nLight); ++s) - { - int shadowSliceIndex = shadow.GetShadowSliceIndex (nLight, s); - g_matWorldToShadow [g_nNumLights * MAX_SHADOWMAP_PER_LIGHTS + s] = shadow.shadowSlices[shadowSliceIndex].shadowTransform.transpose; - } - } - - g_nNumLights++; - } - - // Warn if too many lights found - if ( nNumLightsIncludingTooMany > MAX_LIGHTS ) - { - if ( nNumLightsIncludingTooMany > m_nWarnedTooManyLights ) - { - Debug.LogError( "ERROR! Found " + nNumLightsIncludingTooMany + " runtime lights! Valve renderer supports up to " + MAX_LIGHTS + - " active runtime lights at a time!\nDisabling " + ( nNumLightsIncludingTooMany - MAX_LIGHTS ) + " runtime light" + - ( ( nNumLightsIncludingTooMany - MAX_LIGHTS ) > 1 ? "s" : "" ) + "!\n" ); - } - m_nWarnedTooManyLights = nNumLightsIncludingTooMany; - } - else - { - if ( m_nWarnedTooManyLights > 0 ) - { - m_nWarnedTooManyLights = 0; - Debug.Log( "SUCCESS! Found " + nNumLightsIncludingTooMany + " runtime lights which is within the supported number of lights, " + MAX_LIGHTS + ".\n\n" ); - } - } - - // Send constants to shaders - Shader.SetGlobalInt( "g_nNumLights", g_nNumLights ); - - // New method for Unity 5.4 to set arrays of constants - Shader.SetGlobalVectorArray( "g_vLightPosition_flInvRadius", g_vLightPosition_flInvRadius ); - Shader.SetGlobalVectorArray( "g_vLightColor", g_vLightColor ); - Shader.SetGlobalVectorArray( "g_vLightDirection", g_vLightDirection ); - Shader.SetGlobalVectorArray( "g_vLightShadowIndex_vLightParams", g_vLightShadowIndex_vLightParams ); - Shader.SetGlobalVectorArray( "g_vLightFalloffParams", g_vLightFalloffParams ); - Shader.SetGlobalVectorArray( "g_vSpotLightInnerOuterConeCosines", g_vSpotLightInnerOuterConeCosines ); - Shader.SetGlobalMatrixArray( "g_matWorldToShadow", g_matWorldToShadow ); - Shader.SetGlobalVectorArray( "g_vDirShadowSplitSpheres", g_vDirShadowSplitSpheres ); - - // Time - #if ( UNITY_EDITOR ) - { - Shader.SetGlobalFloat( "g_flTime", Time.realtimeSinceStartup ); - //Debug.Log( "Time " + Time.realtimeSinceStartup ); - } - #else - { - Shader.SetGlobalFloat( "g_flTime", Time.timeSinceLevelLoad ); - //Debug.Log( "Time " + Time.timeSinceLevelLoad ); - } - #endif - - // PCF 3x3 Shadows - float flTexelEpsilonX = 1.0f / m_ShadowSettings.shadowAtlasWidth; - float flTexelEpsilonY = 1.0f / m_ShadowSettings.shadowAtlasHeight; - Vector4 g_vShadow3x3PCFTerms0 = new Vector4( 20.0f / 267.0f, 33.0f / 267.0f, 55.0f / 267.0f, 0.0f ); - Vector4 g_vShadow3x3PCFTerms1 = new Vector4( flTexelEpsilonX, flTexelEpsilonY, -flTexelEpsilonX, -flTexelEpsilonY ); - Vector4 g_vShadow3x3PCFTerms2 = new Vector4( flTexelEpsilonX, flTexelEpsilonY, 0.0f, 0.0f ); - Vector4 g_vShadow3x3PCFTerms3 = new Vector4( -flTexelEpsilonX, -flTexelEpsilonY, 0.0f, 0.0f ); - - Shader.SetGlobalVector( "g_vShadow3x3PCFTerms0", g_vShadow3x3PCFTerms0 ); - Shader.SetGlobalVector( "g_vShadow3x3PCFTerms1", g_vShadow3x3PCFTerms1 ); - Shader.SetGlobalVector( "g_vShadow3x3PCFTerms2", g_vShadow3x3PCFTerms2 ); - Shader.SetGlobalVector( "g_vShadow3x3PCFTerms3", g_vShadow3x3PCFTerms3 ); - */ - } - - /* - void RenderDeferredLighting(Camera camera, CullingInputs inputs, RenderLoop loop) + void UpdateReflectionProbes(VisibleReflectionProbe[] activeReflectionProbes) { - var props = new MaterialPropertyBlock(); + var lights = new List(); - var cmd = new CommandBuffer(); - cmd.SetRenderTarget(new RenderTargetIdentifier(kGBufferEmission), new RenderTargetIdentifier(kGBufferZ)); - foreach (var cl in inputs.culledLights) + for (int lightIndex = 0; lightIndex < Math.Min(activeReflectionProbes.Length, MaxProbes); lightIndex++) { - bool renderAsQuad = (cl.flags & VisibleLightFlags.IntersectsNearPlane) != 0 || (cl.flags & VisibleLightFlags.IntersectsFarPlane) != 0 || (cl.lightType == LightType.Directional); - - Vector3 lightPos = cl.localToWorld.GetColumn(3); - float range = cl.range; - cmd.DisableShaderKeyword("POINT"); - cmd.DisableShaderKeyword("POINT_COOKIE"); - cmd.DisableShaderKeyword("SPOT"); - cmd.DisableShaderKeyword("DIRECTIONAL"); - cmd.DisableShaderKeyword("DIRECTIONAL_COOKIE"); - //cmd.EnableShaderKeyword ("UNITY_HDR_ON"); - switch (cl.lightType) - { - case LightType.Point: - cmd.EnableShaderKeyword("POINT"); - break; - case LightType.Spot: - cmd.EnableShaderKeyword("SPOT"); - break; - case LightType.Directional: - cmd.EnableShaderKeyword("DIRECTIONAL"); - break; - } - props.SetFloat("_LightAsQuad", renderAsQuad ? 1 : 0); - props.SetVector("_LightPos", new Vector4(lightPos.x, lightPos.y, lightPos.z, 1.0f / (range * range))); - props.SetVector("_LightColor", cl.finalColor); - Debug.Log("Light color : " + cl.finalColor.ToString()); - props.SetMatrix("_WorldToLight", cl.worldToLocal); + var probe = activeReflectionProbes[lightIndex]; - ///@TODO: cleanup, remove this from Internal-PrePassLighting shader - //DeferredPrivate::s_LightMaterial->SetTexture (ShaderLab::Property ("_LightTextureB0"), builtintex::GetAttenuationTexture ()); + if (probe.texture == null) + continue; - if (renderAsQuad) - { - cmd.DrawMesh(m_QuadMesh, Matrix4x4.identity, m_DeferredMaterial, 0, 0, props); - } - else + var l = new EnvLightData(); + + // CAUTION: localToWorld is the transform for the widget of the reflection probe. i.e the world position of the point use to do the cubemap capture (mean it include the local offset) + l.positionWS = probe.localToWorld.GetColumn(3); + + l.envShapeType = EnvShapeType.None; + + // TODO: Support sphere in the interface + if (probe.boxProjection != 0) { - var matrix = Matrix4x4.TRS(lightPos, Quaternion.identity, new Vector3(range, range, range)); - cmd.DrawMesh(m_PointLightMesh, matrix, m_DeferredMaterial, 0, 0, props); + l.envShapeType = EnvShapeType.Box; } + + // remove scale from the matrix (Scale in this matrix is use to scale the widget) + l.right = probe.localToWorld.GetColumn(0); + l.right.Normalize(); + l.up = probe.localToWorld.GetColumn(1); + l.up.Normalize(); + l.forward = probe.localToWorld.GetColumn(2); + l.forward.Normalize(); + + // Artists prefer to have blend distance inside the volume! + // So we let the current UI but we assume blendDistance is an inside factor instead + // Blend distance can't be larger than the max radius + // probe.bounds.extents is BoxSize / 2 + float maxBlendDist = Mathf.Min(probe.bounds.extents.x, Mathf.Min(probe.bounds.extents.y, probe.bounds.extents.z)); + float blendDistance = Mathf.Min(maxBlendDist, probe.blendDistance); + l.innerDistance = probe.bounds.extents - new Vector3(blendDistance, blendDistance, blendDistance); + + l.sliceIndex = m_cubeReflTexArray.FetchSlice(probe.texture); + + l.offsetLS = probe.center; // center is misnamed, it is the offset (in local space) from center of the bounding box to the cubemap capture point + l.blendDistance = blendDistance; + lights.Add(l); } - loop.ExecuteCommandBuffer(cmd); - cmd.Dispose(); + + s_envLightList.SetData(lights.ToArray()); + + Shader.SetGlobalBuffer("_EnvLightList", s_envLightList); + Shader.SetGlobalInt("_EnvLightCount", lights.Count); + Shader.SetGlobalTexture("_EnvTextures", m_cubeReflTexArray.GetTexCache()); } - */ - public override void Render(Camera[] cameras, RenderLoop renderLoop) - { - // Set Frame constant buffer + public override void Render(Camera[] cameras, RenderLoop renderLoop) + { + if (!m_LitRenderLoop.isInit) + { + m_LitRenderLoop.RenderInit(renderLoop); + } + + // Do anything we need to do upon a new frame. + NewFrame(); + + // Set Frame constant buffer // TODO... - foreach (var camera in cameras) - { - // Set camera constant buffer + foreach (var camera in cameras) + { + // Set camera constant buffer // TODO... - CullResults cullResults; - CullingParameters cullingParams; - if (!CullResults.GetCullingParameters (camera, out cullingParams)) - continue; + CullingParameters cullingParams; + if (!CullResults.GetCullingParameters(camera, out cullingParams)) + continue; - //m_ShadowPass.UpdateCullingParameters (ref cullingParams); + //m_ShadowPass.UpdateCullingParameters (ref cullingParams); - cullResults = CullResults.Cull (ref cullingParams, renderLoop); - - //ShadowOutput shadows; - //m_ShadowPass.Render (renderLoop, cullResults, out shadows); + var cullResults = CullResults.Cull(ref cullingParams, renderLoop); - renderLoop.SetupCameraProperties (camera); + //ShadowOutput shadows; + //m_ShadowPass.Render (renderLoop, cullResults, out shadows); - //UpdateLightConstants(cullResults.culledLights /*, ref shadows */); + renderLoop.SetupCameraProperties(camera); - if (debugParameters.materialDebugMode == MaterialDebugMode.None) - { - UpdatePunctualLights(cullResults.culledLights); + //UpdateLightConstants(cullResults.visibleLights /*, ref shadows */); - InitAndClearBuffer(camera, renderLoop); + UpdatePunctualLights(cullResults.visibleLights); + UpdateReflectionProbes(cullResults.visibleReflectionProbes); - if(debugParameters.displayOpaqueObjects) - RenderGBuffer(cullResults, camera, renderLoop); + InitAndClearBuffer(camera, renderLoop); - RenderDeferredLighting(camera, renderLoop); + RenderGBuffer(cullResults, camera, renderLoop); - if(debugParameters.displayTransparentObjects) - RenderForward(cullResults, camera, renderLoop); + if (debugParameters.debugViewMaterial != 0) + { + RenderDebugViewMaterial(cullResults, camera, renderLoop); + } + else + { + RenderDeferredLighting(camera, renderLoop); - if (debugParameters.gBufferDebugMode != GBufferDebugMode.None) - { - RenderGBufferDebug(camera, renderLoop); - } + RenderForward(cullResults, camera, renderLoop); + RenderForwardUnlit(cullResults, camera, renderLoop); - FinalPass(renderLoop); - } - else - { - RenderMaterialDebug(cullResults, camera, renderLoop); - } + FinalPass(renderLoop); + } - renderLoop.Submit (); - } + renderLoop.Submit(); + } - // Post effects - } + // Post effects + } - #if UNITY_EDITOR - public override UnityEditor.SupportedRenderingFeatures GetSupportedRenderingFeatures() - { - var features = new UnityEditor.SupportedRenderingFeatures(); + #if UNITY_EDITOR + public override UnityEditor.SupportedRenderingFeatures GetSupportedRenderingFeatures() + { + var features = new UnityEditor.SupportedRenderingFeatures + { + reflectionProbe = UnityEditor.SupportedRenderingFeatures.ReflectionProbe.Rotation + }; - features.reflectionProbe = UnityEditor.SupportedRenderingFeatures.ReflectionProbe.Rotation; + return features; + } - return features; - } - #endif - } + #endif + } } diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoopInspector.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoopInspector.cs index 31900f59e76..9a6b492a733 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoopInspector.cs +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoopInspector.cs @@ -1,104 +1,165 @@ -using UnityEngine; -using System.Collections; -using UnityEngine.Rendering; -using System.Collections.Generic; using System; - using UnityEditor; //using EditorGUIUtility=UnityEditor.EditorGUIUtility; -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - [CustomEditor(typeof(HDRenderLoop))] - public class HDRenderLoopInspector : Editor - { - private class Styles - { - public readonly GUIContent debugParameters = new GUIContent("Debug Parameters"); - public readonly GUIContent materialDebugMode = new GUIContent("Material Debug Mode", "Display various properties of Materials."); - public readonly GUIContent transparentMaterialDebugMode = new GUIContent("Transparent Material Debug", "Display material debug for transparent objects."); - public readonly GUIContent gBufferDebugMode = new GUIContent("GBuffer Debug Mode", "Display various properties of contained in the GBuffer."); - - public readonly GUIContent displayOpaqueObjects = new GUIContent("Display Opaque Objects", "Toggle opaque objects rendering on and off."); - public readonly GUIContent displayTransparentObjects = new GUIContent("Display Transparent Objects", "Toggle transparent objects rendering on and off."); - - public readonly GUIContent[] materialDebugStrings = { new GUIContent("None"), - new GUIContent("Diffuse Color"), - new GUIContent("Normal"), - new GUIContent("Depth"), - new GUIContent("Ambient Occlusion"), - new GUIContent("Specular Color"), - new GUIContent("Specular Occlusion"), - new GUIContent("Smoothness"), - new GUIContent("MaterialId"), - new GUIContent("UV0"), - new GUIContent("Tangent"), - new GUIContent("Bitangent") - }; - public readonly int[] materialDebugValues = { (int)HDRenderLoop.MaterialDebugMode.None, - (int)HDRenderLoop.MaterialDebugMode.DiffuseColor, - (int)HDRenderLoop.MaterialDebugMode.Normal, - (int)HDRenderLoop.MaterialDebugMode.Depth, - (int)HDRenderLoop.MaterialDebugMode.AmbientOcclusion, - (int)HDRenderLoop.MaterialDebugMode.SpecularColor, - (int)HDRenderLoop.MaterialDebugMode.SpecularOcclustion, - (int)HDRenderLoop.MaterialDebugMode.Smoothness, - (int)HDRenderLoop.MaterialDebugMode.MaterialId, - (int)HDRenderLoop.MaterialDebugMode.UV0, - (int)HDRenderLoop.MaterialDebugMode.Tangent, - (int)HDRenderLoop.MaterialDebugMode.Bitangent - }; - public readonly GUIContent[] gBufferDebugStrings = { new GUIContent("None"), - new GUIContent("Diffuse Color"), - new GUIContent("Normal"), - new GUIContent("Depth"), - new GUIContent("Baked Diffuse"), - new GUIContent("Specular Color"), - new GUIContent("Specular Occlusion"), - new GUIContent("Smoothness"), - new GUIContent("MaterialId") - }; - public readonly int[] gBufferDebugValues = { (int)HDRenderLoop.GBufferDebugMode.None, - (int)HDRenderLoop.GBufferDebugMode.DiffuseColor, - (int)HDRenderLoop.GBufferDebugMode.Normal, - (int)HDRenderLoop.GBufferDebugMode.Depth, - (int)HDRenderLoop.GBufferDebugMode.BakedDiffuse, - (int)HDRenderLoop.GBufferDebugMode.SpecularColor, - (int)HDRenderLoop.GBufferDebugMode.SpecularOcclustion, - (int)HDRenderLoop.GBufferDebugMode.Smoothness, - (int)HDRenderLoop.GBufferDebugMode.MaterialId - }; - } - - private static Styles s_Styles = null; - private static Styles styles { get { if (s_Styles == null) s_Styles = new Styles(); return s_Styles; } } - - public override void OnInspectorGUI() - { - HDRenderLoop renderLoop = target as HDRenderLoop; - if(renderLoop) - { - HDRenderLoop.DebugParameters debugParameters = renderLoop.debugParameters; - - EditorGUILayout.LabelField(styles.debugParameters); - EditorGUI.indentLevel++; - EditorGUI.BeginChangeCheck(); - - debugParameters.gBufferDebugMode = (HDRenderLoop.GBufferDebugMode)EditorGUILayout.IntPopup(styles.gBufferDebugMode, (int)debugParameters.gBufferDebugMode, styles.gBufferDebugStrings, styles.gBufferDebugValues); - debugParameters.materialDebugMode = (HDRenderLoop.MaterialDebugMode)EditorGUILayout.IntPopup(styles.materialDebugMode, (int)debugParameters.materialDebugMode, styles.materialDebugStrings, styles.materialDebugValues); - debugParameters.displayMaterialDebugForTransparent = EditorGUILayout.Toggle(styles.transparentMaterialDebugMode, debugParameters.displayMaterialDebugForTransparent); - - EditorGUILayout.Space(); - debugParameters.displayOpaqueObjects = EditorGUILayout.Toggle(styles.displayOpaqueObjects, debugParameters.displayOpaqueObjects); - debugParameters.displayTransparentObjects = EditorGUILayout.Toggle(styles.displayTransparentObjects, debugParameters.displayTransparentObjects); - - if(EditorGUI.EndChangeCheck()) - { - EditorUtility.SetDirty(renderLoop); // Repaint - } - EditorGUI.indentLevel--; - } - } - } + [CustomEditor(typeof(HDRenderLoop))] + public class HDRenderLoopInspector : Editor + { + private class Styles + { + public readonly GUIContent debugParameters = new GUIContent("Debug Parameters"); + public readonly GUIContent debugViewMaterial = new GUIContent("DebugView Material", "Display various properties of Materials."); + + public readonly GUIContent displayOpaqueObjects = new GUIContent("Display Opaque Objects", "Toggle opaque objects rendering on and off."); + public readonly GUIContent displayTransparentObjects = new GUIContent("Display Transparent Objects", "Toggle transparent objects rendering on and off."); + public readonly GUIContent enableTonemap = new GUIContent("Enable Tonemap"); + public readonly GUIContent exposure = new GUIContent("Exposure"); + + public readonly GUIContent useForwardRenderingOnly = new GUIContent("Use Forward Rendering Only"); + + public bool isDebugViewMaterialInit = false; + public GUIContent[] debugViewMaterialStrings = null; + public int[] debugViewMaterialValues = null; + } + + private static Styles s_Styles = null; + + private static Styles styles + { + get + { + if (s_Styles == null) + s_Styles = new Styles(); + return s_Styles; + } + } + + const float k_MaxExposure = 32.0f; + + void FillWithProperties(Type type, GUIContent[] debugViewMaterialStrings, int[] debugViewMaterialValues, bool isBSDFData, ref int index) + { + var attributes = type.GetCustomAttributes(true); + // Get attribute to get the start number of the value for the enum + var attr = attributes[0] as GenerateHLSL; + + if (!attr.needParamDefines) + { + return ; + } + + var fields = type.GetFields(); + + var subNamespace = type.Namespace.Substring(type.Namespace.LastIndexOf((".")) + 1); + + var localIndex = 0; + foreach (var field in fields) + { + var fieldName = field.Name; + + // Check if the display name have been override by the users + if (Attribute.IsDefined(field, typeof(SurfaceDataAttributes))) + { + var propertyAttr = (SurfaceDataAttributes[])field.GetCustomAttributes(typeof(SurfaceDataAttributes), false); + if (propertyAttr[0].displayName != "") + { + fieldName = propertyAttr[0].displayName; + } + } + + fieldName = (isBSDFData ? "Engine/" : "") + subNamespace + "/" + fieldName; + + debugViewMaterialStrings[index] = new GUIContent(fieldName); + debugViewMaterialValues[index] = attr.paramDefinesStart + (int)localIndex; + index++; + localIndex++; + } + } + + void FillWithPropertiesEnum(Type type, GUIContent[] debugViewMaterialStrings, int[] debugViewMaterialValues, bool isBSDFData, ref int index) + { + var names = Enum.GetNames(type); + + var localIndex = 0; + foreach (var value in Enum.GetValues(type)) + { + var valueName = (isBSDFData ? "Engine/" : "") + names[localIndex]; + + debugViewMaterialStrings[index] = new GUIContent(valueName); + debugViewMaterialValues[index] = (int)value; + index++; + localIndex++; + } + } + + public override void OnInspectorGUI() + { + var renderLoop = target as HDRenderLoop; + + if (!renderLoop) + return; + + var debugParameters = renderLoop.debugParameters; + + EditorGUILayout.LabelField(styles.debugParameters); + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + + if (!styles.isDebugViewMaterialInit) + { + var varyingNames = Enum.GetNames(typeof(HDRenderLoop.DebugViewVaryingMode)); + var gbufferNames = Enum.GetNames(typeof(HDRenderLoop.DebugViewGbufferMode)); + + // +1 for the zero case + var num = 1 + varyingNames.Length + + gbufferNames.Length + + typeof(Builtin.BuiltinData).GetFields().Length + + typeof(Lit.SurfaceData).GetFields().Length + + typeof(Lit.BSDFData).GetFields().Length + + typeof(Unlit.SurfaceData).GetFields().Length + + typeof(Unlit.BSDFData).GetFields().Length; + + styles.debugViewMaterialStrings = new GUIContent[num]; + styles.debugViewMaterialValues = new int[num]; + + var index = 0; + + // 0 is a reserved number + styles.debugViewMaterialStrings[0] = new GUIContent("None"); + styles.debugViewMaterialValues[0] = 0; + index++; + + FillWithPropertiesEnum(typeof(HDRenderLoop.DebugViewVaryingMode), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, false, ref index); + FillWithProperties(typeof(Builtin.BuiltinData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, false, ref index); + FillWithProperties(typeof(Lit.SurfaceData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, false, ref index); + FillWithProperties(typeof(Unlit.SurfaceData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, false, ref index); + + // Engine + FillWithPropertiesEnum(typeof(HDRenderLoop.DebugViewGbufferMode), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, true, ref index); + FillWithProperties(typeof(Lit.BSDFData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, true, ref index); + FillWithProperties(typeof(Unlit.BSDFData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, true, ref index); + + styles.isDebugViewMaterialInit = true; + } + + debugParameters.debugViewMaterial = EditorGUILayout.IntPopup(styles.debugViewMaterial, (int)debugParameters.debugViewMaterial, styles.debugViewMaterialStrings, styles.debugViewMaterialValues); + + EditorGUILayout.Space(); + debugParameters.enableTonemap = EditorGUILayout.Toggle(styles.enableTonemap, debugParameters.enableTonemap); + debugParameters.exposure = Mathf.Max(Mathf.Min(EditorGUILayout.FloatField(styles.exposure, debugParameters.exposure), k_MaxExposure), -k_MaxExposure); + + EditorGUILayout.Space(); + debugParameters.displayOpaqueObjects = EditorGUILayout.Toggle(styles.displayOpaqueObjects, debugParameters.displayOpaqueObjects); + debugParameters.displayTransparentObjects = EditorGUILayout.Toggle(styles.displayTransparentObjects, debugParameters.displayTransparentObjects); + debugParameters.useForwardRenderingOnly = EditorGUILayout.Toggle(styles.useForwardRenderingOnly, debugParameters.useForwardRenderingOnly); + + if (EditorGUI.EndChangeCheck()) + { + EditorUtility.SetDirty(renderLoop); // Repaint + } + EditorGUI.indentLevel--; + } + } } diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugCommon.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugCommon.hlsl deleted file mode 100644 index da36d482dd0..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugCommon.hlsl +++ /dev/null @@ -1,25 +0,0 @@ - -// List of material debug modes. Keep in sync with HDRenderLoop.MaterialDebugMode -#define MaterialDebugNone 0, -#define MaterialDebugDiffuseColor 1 -#define MaterialDebugNormal 2 -#define MaterialDebugDepth 3 -#define MaterialDebugAO 4 -#define MaterialDebugSpecularColor 5 -#define MaterialDebugSpecularOcclusion 6 -#define MaterialDebugSmoothness 7 -#define MaterialDebugMaterialId 8 -#define MaterialDebugUV0 9 -#define MaterialDebugTangent 10 -#define MaterialDebugBitangent 11 - -// List of GBuffer debug modes. Keep in sync with HDRenderLoop.GBufferDebugMode -#define GBufferDebugNone 0 -#define GBufferDebugDiffuseColor 1 -#define GBufferDebugNormal 2 -#define GBufferDebugDepth 3 -#define GBufferDebugBakedDiffuse 4 -#define GBufferDebugSpecularColor 5 -#define GBufferDebugSpecularOcclustion 6 -#define GBufferDebugSmoothness 7 -#define GBufferDebugMaterialId 8 diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterial.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterial.hlsl new file mode 100644 index 00000000000..e82df7bf24d --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterial.hlsl @@ -0,0 +1,16 @@ +// CAUTION: 0 is a reserved numbers meaning there is no debug view mode +// All number below folow each others! + +// Must be in sync with DebugViewVaryingMode +#define DEBUGVIEW_VARYING_DEPTH 1 +#define DEBUGVIEW_VARYING_TEXCOORD0 2 +#define DEBUGVIEW_VARYING_TEXCOORD1 3 +#define DEBUGVIEW_VARYING_TEXCOORD2 4 +#define DEBUGVIEW_VARYING_VERTEXTANGENTWS 5 +#define DEBUGVIEW_VARYING_VERTEXBITANGENTWS 6 +#define DEBUGVIEW_VARYING_VERTEXNORMALWS 7 +#define DEBUGVIEW_VARYING_VERTEXCOLOR 8 + +// These define are sepcific to GBuffer +#define DEBUGVIEW_GBUFFER_DEPTH 9 +#define DEBUGVIEW_GBUFFER_BAKEDIFFUSELIGHTING 10 diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Unlit.shader.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterial.hlsl.meta similarity index 67% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Unlit.shader.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterial.hlsl.meta index 672d492d5f8..b48f9865ad2 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Unlit.shader.meta +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterial.hlsl.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 1972af2d7b732904ab1f3d5d0f1f2ab0 -timeCreated: 1475766656 +guid: 9048292f91ac48d479ce668c5aabf122 +timeCreated: 1476053153 licenseType: Pro ShaderImporter: defaultTextures: [] diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterialGBuffer.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterialGBuffer.shader new file mode 100644 index 00000000000..6f561a1fdd8 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterialGBuffer.shader @@ -0,0 +1,99 @@ +Shader "Hidden/Unity/DebugViewMaterialGBuffer" +{ + SubShader + { + Pass + { + ZWrite Off + Blend SrcAlpha OneMinusSrcAlpha // We will lerp only the values that are valid + + HLSLPROGRAM + #pragma target 5.0 + #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev + + #pragma vertex VertDeferred + #pragma fragment FragDeferred + + #include "Color.hlsl" + // CAUTION: In case deferred lighting need to support various lighting model statically, we will require to do multicompile with different define like UNITY_MATERIAL_LIT + #define UNITY_MATERIAL_LIT // Need to be define before including Material.hlsl + #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl" // This include Material.hlsl + #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl" + #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterial.hlsl" + + DECLARE_GBUFFER_TEXTURE(_CameraGBufferTexture); + DECLARE_GBUFFER_BAKE_LIGHTING(_CameraGBufferTexture); + + UNITY_DECLARE_TEX2D(_CameraDepthTexture); + int _DebugViewMaterial; + + struct Attributes + { + float3 positionOS : POSITION; + }; + + struct Varyings + { + float4 positionHS : SV_POSITION; + }; + + Varyings VertDeferred(Attributes input) + { + // TODO: implement SV_vertexID full screen quad + Varyings output; + float3 positionWS = TransformObjectToWorld(input.positionOS); + output.positionHS = TransformWorldToHClip(positionWS); + + return output; + } + + float4 FragDeferred(Varyings input) : SV_Target + { + Coordinate coord = GetCoordinate(input.positionHS.xy, _ScreenSize.zw); + + float depth = _CameraDepthTexture.Load(uint3(coord.unPositionSS, 0)).x; + + FETCH_GBUFFER(gbuffer, _CameraGBufferTexture, coord.unPositionSS); + BSDFData bsdfData = DECODE_FROM_GBUFFER(gbuffer); + + // Init to not expected value + float3 result = float3(-666.0, 0.0, 0.0); + bool needLinearToSRGB = false; + + if (_DebugViewMaterial == DEBUGVIEW_GBUFFER_DEPTH) + { + float linearDepth = frac(LinearEyeDepth(depth, _ZBufferParams) * 0.1); + result = linearDepth.xxx; + } + else if (_DebugViewMaterial == DEBUGVIEW_GBUFFER_BAKEDIFFUSELIGHTING) + { + FETCH_BAKE_LIGHTING_GBUFFER(gbuffer, _CameraGBufferTexture, coord.unPositionSS); + result = DECODE_BAKE_LIGHTING_FROM_GBUFFER(gbuffer); + } + + GetBSDFDataDebug(_DebugViewMaterial, bsdfData, result, needLinearToSRGB); + + // f we haven't touch result, we don't blend it. This allow to have the GBuffer debug pass working with the regular forward debug pass. + // The forward debug pass will write its value and then the deferred will overwrite only touched texels. + if (result.x == -666.0) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + else + { + // TEMP! + // For now, the final blit in the backbuffer performs an sRGB write + // So in the meantime we apply the inverse transform to linear data to compensate. + if (!needLinearToSRGB) + result = SRGBToLinear(max(0, result)); + + return float4(result, 1.0); + } + } + + ENDHLSL + } + + } + Fallback Off +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugCommon.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterialGBuffer.shader.meta similarity index 67% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugCommon.hlsl.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterialGBuffer.shader.meta index b1fffd5600a..983019cd7a7 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugCommon.hlsl.meta +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterialGBuffer.shader.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 3babddf8b47eecd48ac0a07efc211c0c -timeCreated: 1475754031 +guid: 439949ea1bfa91b4ba0d04269fcde33d +timeCreated: 1476053153 licenseType: Pro ShaderImporter: defaultTextures: [] diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/GBufferDebug.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/GBufferDebug.shader deleted file mode 100644 index b709867165a..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/GBufferDebug.shader +++ /dev/null @@ -1,116 +0,0 @@ -Shader "Hidden/Unity/GBufferDebug" -{ - SubShader - { - - Pass - { - ZWrite Off - Blend One Zero - - HLSLPROGRAM - #pragma target 5.0 - #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev - - #pragma vertex VertDeferred - #pragma fragment FragDeferred - - // CAUTION: In case deferred lighting need to support various lighting model statically, we will require to do multicompile with different define like UNITY_MATERIAL_DISNEYGXX - #define UNITY_MATERIAL_DISNEYGGX // Need to be define before including Material.hlsl - #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl" // This include Material.hlsl - #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl" - #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugCommon.hlsl" - #include "Assets/ScriptableRenderLoop/ShaderLibrary/Color.hlsl" - - DECLARE_GBUFFER_TEXTURE(_CameraGBufferTexture); - DECLARE_GBUFFER_BAKE_LIGHTING(_CameraGBufferTexture); - Texture2D _CameraDepthTexture; - float4 _ScreenSize; - float _DebugMode; - float4x4 _InvViewProjMatrix; - - struct Attributes - { - float3 positionOS : POSITION; - }; - - struct Varyings - { - float4 positionHS : SV_POSITION; - }; - - Varyings VertDeferred(Attributes input) - { - // TODO: implement SV_vertexID full screen quad - // Lights are draw as one fullscreen quad - Varyings output; - float3 positionWS = TransformObjectToWorld(input.positionOS); - output.positionHS = TransformWorldToHClip(positionWS); - - return output; - } - - float4 FragDeferred(Varyings input) : SV_Target - { - Coordinate coord = GetCoordinate(input.positionHS.xy, _ScreenSize.zw); - - float depth = _CameraDepthTexture.Load(uint3(coord.unPositionSS, 0)).x; - - FETCH_GBUFFER(gbuffer, _CameraGBufferTexture, coord.unPositionSS); - BSDFData bsdfData = DECODE_FROM_GBUFFER(gbuffer); - - float3 result = float3(1.0, 1.0, 0.0); - bool outputIsLinear = false; - - if (_DebugMode == GBufferDebugDiffuseColor) - { - result = bsdfData.diffuseColor; - } - else if (_DebugMode == GBufferDebugNormal) - { - result = bsdfData.normalWS * 0.5 + 0.5; - outputIsLinear = true; - } - else if (_DebugMode == GBufferDebugDepth) - { - float linearDepth = frac(LinearEyeDepth(depth, _ZBufferParams) * 0.1); - result = linearDepth.xxx; - outputIsLinear = true; - } - else if (_DebugMode == GBufferDebugBakedDiffuse) - { - FETCH_BAKE_LIGHTING_GBUFFER(gbuffer, _CameraGBufferTexture, coord.unPositionSS); - result = DECODE_BAKE_LIGHTING_FROM_GBUFFER(gbuffer); - outputIsLinear = true; - } - else if (_DebugMode == GBufferDebugSpecularColor) - { - result = bsdfData.fresnel0; - } - else if (_DebugMode == GBufferDebugSpecularOcclustion) - { - result = bsdfData.specularOcclusion.xxx; - outputIsLinear = true; - } - else if (_DebugMode == GBufferDebugSmoothness) - { - result = (1.0 - bsdfData.perceptualRoughness).xxx; - outputIsLinear = true; - } - else if (_DebugMode == GBufferDebugMaterialId) - { - result = bsdfData.materialId.xxx; - outputIsLinear = true; - } - if (outputIsLinear) - result = SRGBToLinear(max(0, result)); - - return float4(result, 1.0); - } - - ENDHLSL - } - - } - Fallback Off -} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.cs deleted file mode 100644 index dda06d12844..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.cs +++ /dev/null @@ -1,411 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.Rendering; - -namespace UnityEditor -{ -internal class DisneyGGXGUI : ShaderGUI -{ - public enum SurfaceType - { - Opaque, - Transparent - } - public enum BlendMode - { - Lerp, - Add, - SoftAdd, - Multiply, - Premultiply - } - - public enum SmoothnessMapChannel - { - MaskAlpha, - AlbedoAlpha, - } - public enum EmissiveColorMode - { - UseEmissiveColor, - UseEmissiveMask, - } - public enum DoubleSidedMode - { - None, - DoubleSided, - DoubleSidedLightingFlip, - DoubleSidedLightingMirror, - } - - public enum NormalMapSpace - { - TangentSpace, - ObjectSpace, - } - - public enum HeightmapMode - { - Parallax, - Displacement, - } - - private static class Styles - { - public static string OptionText = "Options"; - public static string SurfaceTypeText = "Surface Type"; - public static string BlendModeText = "Blend Mode"; - - public static GUIContent alphaCutoffEnableText = new GUIContent("Alpha Cutoff Enable", "Threshold for alpha cutoff"); - public static GUIContent alphaCutoffText = new GUIContent("Alpha Cutoff", "Threshold for alpha cutoff"); - public static GUIContent doubleSidedModeText = new GUIContent("Double Sided", "This will render the two face of the objects (disable backface culling)"); - - public static readonly string[] surfaceTypeNames = Enum.GetNames(typeof(SurfaceType)); - public static readonly string[] blendModeNames = Enum.GetNames(typeof(BlendMode)); - - public static string InputsOptionsText = "Inputs options"; - - public static GUIContent smoothnessMapChannelText = new GUIContent("Smoothness Source", "Smoothness texture and channel"); - public static GUIContent emissiveColorModeText = new GUIContent("Emissive Color Usage", "Use emissive color or emissive mask"); - - public static string InputsText = "Inputs"; - - public static string InputsMapText = ""; - - public static GUIContent baseColorText = new GUIContent("Base Color", "Albedo (RGB) and Smoothness (A)"); - public static GUIContent baseColorSmoothnessText = new GUIContent("Base Color + Smoothness", "Albedo (RGB) and Smoothness (A)"); - - public static GUIContent mettalicText = new GUIContent("Mettalic", "Mettalic scale factor"); - public static GUIContent smoothnessText = new GUIContent("Smoothness", "Smoothness scale factor"); - public static GUIContent maskMapESText = new GUIContent("Mask Map - M(R), AO(G), E(B), S(A)", "Mask map"); - public static GUIContent maskMapEText = new GUIContent("Mask Map - M(R), AO(G), E(B)", "Mask map"); - public static GUIContent maskMapText = new GUIContent("Mask Map - M(R), AO(G)", "Mask map"); - public static GUIContent maskMapSText = new GUIContent("Mask Map - M(R), AO(G), S(A)", "Mask map"); - - public static GUIContent specularOcclusionMapText = new GUIContent("Specular Occlusion Map (RGBA)", "Specular Occlusion Map"); - - public static GUIContent normalMapText = new GUIContent("Normal Map", "Normal Map (BC5) - DXT5 for test"); - public static GUIContent normalMapSpaceText = new GUIContent("Normal Map space", ""); - - public static GUIContent heightMapText = new GUIContent("Height Map", "Height Map"); - public static GUIContent heightMapModeText = new GUIContent("Height Map Mode", ""); - - - // public static GUIContent diffuseLightingMapText = new GUIContent("DiffuseLightingMap", "Lightmap/Lightprobe data (fill by system is not done"); - - public static GUIContent emissiveText = new GUIContent("Emissive Color", "Emissive"); - public static GUIContent emissiveIntensityText = new GUIContent("Emissive Intensity", "Emissive"); - } - - MaterialProperty surfaceType = null; - MaterialProperty blendMode = null; - MaterialProperty alphaCutoff = null; - MaterialProperty alphaCutoffEnable = null; - MaterialProperty doubleSidedMode = null; - MaterialProperty smoothnessMapChannel = null; - MaterialProperty emissiveColorMode = null; - - MaterialProperty baseColor = null; - MaterialProperty baseColorMap = null; - MaterialProperty mettalic = null; - MaterialProperty smoothness = null; - MaterialProperty maskMap = null; - MaterialProperty specularOcclusionMap = null; - MaterialProperty normalMap = null; - MaterialProperty normalMapSpace = null; - MaterialProperty heightMap = null; - MaterialProperty heightScale = null; - MaterialProperty heightBias = null; - MaterialProperty heightMapMode = null; -// MaterialProperty diffuseLightingMap = null; - MaterialProperty emissiveColor = null; - MaterialProperty emissiveColorMap = null; - MaterialProperty emissiveIntensity = null; -// MaterialProperty subSurfaceRadius = null; -// MaterialProperty subSurfaceRadiusMap = null; - - - - MaterialEditor m_MaterialEditor; - - public void FindProperties (MaterialProperty[] props) - { - surfaceType = FindProperty("_SurfaceType", props); - blendMode = FindProperty("_BlendMode", props); - alphaCutoff = FindProperty("_AlphaCutoff", props); - alphaCutoffEnable = FindProperty("_AlphaCutoffEnable", props); - doubleSidedMode = FindProperty("_DoubleSidedMode", props); - smoothnessMapChannel = FindProperty("_SmoothnessTextureChannel", props); - emissiveColorMode = FindProperty("_EmissiveColorMode", props); - - baseColor = FindProperty("_BaseColor", props); - baseColorMap = FindProperty("_BaseColorMap", props); - mettalic = FindProperty("_Mettalic", props); - smoothness = FindProperty("_Smoothness", props); - maskMap = FindProperty("_MaskMap", props); - specularOcclusionMap = FindProperty("_SpecularOcclusionMap", props); - normalMap = FindProperty("_NormalMap", props); - normalMapSpace = FindProperty("_NormalMapSpace", props); - heightMap = FindProperty("_HeightMap", props); - heightScale = FindProperty("_HeightScale", props); - heightBias = FindProperty("_HeightBias", props); - heightMapMode = FindProperty("_HeightMapMode", props); - // diffuseLightingMap = FindProperty("_DiffuseLightingMap", props); - emissiveColor = FindProperty("_EmissiveColor", props); - emissiveColorMap = FindProperty("_EmissiveColorMap", props); - emissiveIntensity = FindProperty("_EmissiveIntensity", props); - } - - public override void OnGUI (MaterialEditor materialEditor, MaterialProperty[] props) - { - FindProperties (props); // MaterialProperties can be animated so we do not cache them but fetch them every event to ensure animated values are updated correctly - m_MaterialEditor = materialEditor; - Material material = materialEditor.target as Material; - - ShaderPropertiesGUI (material); - } - - public void ShaderPropertiesGUI (Material material) - { - // Use default labelWidth - EditorGUIUtility.labelWidth = 0f; - - // Detect any changes to the material - EditorGUI.BeginChangeCheck(); - { - GUILayout.Label(Styles.OptionText, EditorStyles.boldLabel); - SurfaceTypePopup(); - if ((SurfaceType)surfaceType.floatValue == SurfaceType.Transparent) - { - BlendModePopup(); - } - m_MaterialEditor.ShaderProperty(alphaCutoffEnable, Styles.alphaCutoffEnableText.text); - if (alphaCutoffEnable.floatValue == 1.0) - { - m_MaterialEditor.ShaderProperty(alphaCutoff, Styles.alphaCutoffText.text); - } - m_MaterialEditor.ShaderProperty(doubleSidedMode, Styles.doubleSidedModeText.text); - - GUILayout.Label(Styles.InputsOptionsText, EditorStyles.boldLabel); - m_MaterialEditor.ShaderProperty(smoothnessMapChannel, Styles.smoothnessMapChannelText.text); - m_MaterialEditor.ShaderProperty(emissiveColorMode, Styles.emissiveColorModeText.text); - - bool isAlbedoAlpha = (SmoothnessMapChannel)smoothnessMapChannel.floatValue == SmoothnessMapChannel.AlbedoAlpha; - bool useEmissiveMask = (EmissiveColorMode)emissiveColorMode.floatValue == EmissiveColorMode.UseEmissiveMask; - - GUILayout.Label(Styles.InputsText, EditorStyles.boldLabel); - m_MaterialEditor.TexturePropertySingleLine(isAlbedoAlpha ? Styles.baseColorSmoothnessText : Styles.baseColorText, baseColorMap, baseColor); - m_MaterialEditor.ShaderProperty(mettalic, Styles.mettalicText); - m_MaterialEditor.ShaderProperty(smoothness, Styles.smoothnessText); - - if (isAlbedoAlpha && useEmissiveMask) - m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapESText, maskMap); - else if (useEmissiveMask) - m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapEText, maskMap); - else if (isAlbedoAlpha) - m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapSText, maskMap); - else - m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapText, maskMap); - - m_MaterialEditor.TexturePropertySingleLine(Styles.specularOcclusionMapText, specularOcclusionMap); - - m_MaterialEditor.TexturePropertySingleLine(Styles.normalMapText, normalMap); - m_MaterialEditor.ShaderProperty(normalMapSpace, Styles.normalMapSpaceText.text); - - m_MaterialEditor.TexturePropertySingleLine(Styles.heightMapText, heightMap, heightScale, heightBias); - m_MaterialEditor.ShaderProperty(heightMapMode, Styles.heightMapModeText.text); - - if (!useEmissiveMask) - { - m_MaterialEditor.TexturePropertySingleLine(Styles.emissiveText, emissiveColorMap, emissiveColor); - } - m_MaterialEditor.ShaderProperty(emissiveIntensity, Styles.emissiveIntensityText); - } - - if (EditorGUI.EndChangeCheck()) - { - foreach (var obj in blendMode.targets) - MaterialChanged((Material)obj); - } - } - - // TODO: try to setup minimun value to fall back to standard shaders and reverse - public override void AssignNewShaderToMaterial (Material material, Shader oldShader, Shader newShader) - { - base.AssignNewShaderToMaterial(material, oldShader, newShader); - } - - void SurfaceTypePopup() - { - EditorGUI.showMixedValue = surfaceType.hasMixedValue; - var mode = (SurfaceType)surfaceType.floatValue; - - EditorGUI.BeginChangeCheck(); - mode = (SurfaceType)EditorGUILayout.Popup(Styles.SurfaceTypeText, (int)mode, Styles.surfaceTypeNames); - if (EditorGUI.EndChangeCheck()) - { - m_MaterialEditor.RegisterPropertyChangeUndo("Surface Type"); - surfaceType.floatValue = (float)mode; - } - - EditorGUI.showMixedValue = false; - } - - void BlendModePopup() - { - EditorGUI.showMixedValue = blendMode.hasMixedValue; - var mode = (BlendMode)blendMode.floatValue; - - EditorGUI.BeginChangeCheck(); - mode = (BlendMode)EditorGUILayout.Popup(Styles.BlendModeText, (int)mode, Styles.blendModeNames); - if (EditorGUI.EndChangeCheck()) - { - m_MaterialEditor.RegisterPropertyChangeUndo("Blend Mode"); - blendMode.floatValue = (float)mode; - } - - EditorGUI.showMixedValue = false; - } - - static public void SetupMaterial(Material material) - { - // Note: keywords must be based on Material value not on MaterialProperty due to multi-edit & material animation - // (MaterialProperty value might come from renderer material property block) - - bool alphaTestEnable = material.GetFloat("_AlphaCutoffEnable") == 1.0; - SurfaceType surfaceType = (SurfaceType)material.GetFloat("_SurfaceType"); - BlendMode blendMode = (BlendMode)material.GetFloat("_BlendMode"); - DoubleSidedMode doubleSidedMode = (DoubleSidedMode)material.GetFloat("_DoubleSidedMode"); - - if (surfaceType == SurfaceType.Opaque) - { - material.SetOverrideTag("RenderType", alphaTestEnable ? "TransparentCutout" : ""); - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); - material.SetInt("_ZWrite", 1); - material.renderQueue = alphaTestEnable ? (int)UnityEngine.Rendering.RenderQueue.AlphaTest : -1; - } - else - { - material.SetOverrideTag("RenderType", "Transparent"); - material.SetInt("_ZWrite", 0); - material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent; - - switch (blendMode) - { - case BlendMode.Lerp: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); - break; - - case BlendMode.Add: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); - break; - - case BlendMode.SoftAdd: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); - break; - - case BlendMode.Multiply: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); - break; - - case BlendMode.Premultiply: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); - break; - } - } - - if (doubleSidedMode == DoubleSidedMode.None) - { - material.SetInt("_CullMode", (int)UnityEngine.Rendering.CullMode.Back); - } - else - { - material.SetInt("_CullMode", (int)UnityEngine.Rendering.CullMode.Off); - } - - if (doubleSidedMode == DoubleSidedMode.DoubleSidedLightingFlip) - { - material.EnableKeyword("_DOUBLESIDED_LIGHTING_FLIP"); - material.DisableKeyword("_DOUBLESIDED_LIGHTING_MIRROR"); - } - else if (doubleSidedMode == DoubleSidedMode.DoubleSidedLightingMirror) - { - material.DisableKeyword("_DOUBLESIDED_LIGHTING_FLIP"); - material.EnableKeyword("_DOUBLESIDED_LIGHTING_MIRROR"); - } - else - { - material.DisableKeyword("_DOUBLESIDED_LIGHTING_FLIP"); - material.DisableKeyword("_DOUBLESIDED_LIGHTING_MIRROR"); - } - - SetKeyword(material, "_ALPHATEST_ON", alphaTestEnable); - SetKeyword(material, "_NORMALMAP", material.GetTexture("_NormalMap")); - SetKeyword(material, "_NORMALMAP_TANGENT_SPACE", (NormalMapSpace)material.GetFloat("_NormalMapSpace") == NormalMapSpace.TangentSpace); - SetKeyword(material, "_MASKMAP", material.GetTexture("_MaskMap")); - SetKeyword(material, "_SPECULAROCCLUSIONMAP", material.GetTexture("_SpecularOcclusionMap")); - SetKeyword(material, "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A", ((SmoothnessMapChannel)material.GetFloat("_SmoothnessTextureChannel")) == SmoothnessMapChannel.AlbedoAlpha); - SetKeyword(material, "_EMISSIVE_COLOR", ((EmissiveColorMode)material.GetFloat("_EmissiveColorMode")) == EmissiveColorMode.UseEmissiveColor); - SetKeyword(material, "_EMISSIVE_COLOR_MAP", material.GetTexture("_EmissiveColorMap")); - SetKeyword(material, "_HEIGHTMAP", material.GetTexture("_HeightMap")); - SetKeyword(material, "_HEIGHTMAP_AS_DISPLACEMENT", (HeightmapMode)material.GetFloat("_HeightMapMode") == HeightmapMode.Displacement); - - /* - // Setup lightmap emissive flags - MaterialGlobalIlluminationFlags flags = material.globalIlluminationFlags; - if ((flags & (MaterialGlobalIlluminationFlags.BakedEmissive | MaterialGlobalIlluminationFlags.RealtimeEmissive)) != 0) - { - flags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; - if (!shouldEmissionBeEnabled) - flags |= MaterialGlobalIlluminationFlags.EmissiveIsBlack; - - material.globalIlluminationFlags = flags; - } - */ - } - - static bool ShouldEmissionBeEnabled(Material mat, Color color) - { - //var realtimeEmission = (mat.globalIlluminationFlags & MaterialGlobalIlluminationFlags.RealtimeEmissive) > 0; - //return color.maxColorComponent > 0.1f / 255.0f || realtimeEmission; - - return false; - } - - bool HasValidEmissiveKeyword (Material material) - { - /* - // Material animation might be out of sync with the material keyword. - // So if the emission support is disabled on the material, but the property blocks have a value that requires it, then we need to show a warning. - // (note: (Renderer MaterialPropertyBlock applies its values to emissionColorForRendering)) - bool hasEmissionKeyword = material.IsKeywordEnabled ("_EMISSION"); - if (!hasEmissionKeyword && ShouldEmissionBeEnabled (material, emissionColorForRendering.colorValue)) - return false; - else - return true; - */ - - return true; - } - - static void MaterialChanged(Material material) - { - SetupMaterial(material); - } - - static void SetKeyword(Material m, string keyword, bool state) - { - if (state) - m.EnableKeyword (keyword); - else - m.DisableKeyword (keyword); - } -} - -} // namespace UnityEditor diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.shader deleted file mode 100644 index b1ee611b8ab..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.shader +++ /dev/null @@ -1,285 +0,0 @@ -Shader "Unity/DisneyGGX" -{ - Properties - { - // Following set of parameters represent the parameters node inside the MaterialGraph. - // They are use to fill a SurfaceData. With a MaterialGraph this should not exist. - - // Reminder. Color here are in linear but the UI (color picker) do the conversion sRGB to linear - _BaseColor("BaseColor", Color) = (1,1,1,1) - _BaseColorMap("BaseColorMap", 2D) = "white" {} - - _Mettalic("Mettalic", Range(0.0, 1.0)) = 0 - _Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5 - _MaskMap("MaskMap", 2D) = "white" {} - - _SpecularOcclusionMap("SpecularOcclusion", 2D) = "white" {} - - _NormalMap("NormalMap", 2D) = "bump" {} - [Enum(TangentSpace, 0, ObjectSpace, 1)] _NormalMapSpace("NormalMap space", Float) = 0 - - _HeightMap("HeightMap", 2D) = "black" {} - _HeightScale("Height Scale", Float) = 1 - _HeightBias("Height Bias", Float) = 0 - [Enum(Parallax, 0, Displacement, 1)] _HeightMapMode("Heightmap usage", Float) = 0 - - _SubSurfaceRadius("SubSurfaceRadius", Range(0.0, 1.0)) = 0 - _SubSurfaceRadiusMap("SubSurfaceRadiusMap", 2D) = "white" {} - //_Thickness("Thickness", Range(0.0, 1.0)) = 0 - //_ThicknessMap("ThicknessMap", 2D) = "white" {} - //_SubSurfaceProfile("SubSurfaceProfile", Float) = 0 - - //_CoatCoverage("CoatCoverage", Range(0.0, 1.0)) = 0 - //_CoatCoverageMap("CoatCoverageMapMap", 2D) = "white" {} - - //_CoatRoughness("CoatRoughness", Range(0.0, 1.0)) = 0 - //_CoatRoughnessMap("CoatRoughnessMap", 2D) = "white" {} - - // _DistortionVectorMap("DistortionVectorMap", 2D) = "white" {} - // _DistortionBlur("DistortionBlur", Range(0.0, 1.0)) = 0 - - // Following options are for the GUI inspector and different from the input parameters above - // These option below will cause different compilation flag. - - _DiffuseLightingMap("DiffuseLightingMap", 2D) = "black" {} - _EmissiveColor("EmissiveColor", Color) = (0, 0, 0) - _EmissiveColorMap("EmissiveColorMap", 2D) = "white" {} - _EmissiveIntensity("EmissiveIntensity", Float) = 0 - - [ToggleOff] _DistortionOnly("Distortion Only", Float) = 0.0 - [ToggleOff] _DistortionDepthTest("Distortion Only", Float) = 0.0 - - [ToggleOff] _AlphaCutoffEnable("Alpha Cutoff Enable", Float) = 0.0 - _AlphaCutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 - - // Blending state - [HideInInspector] _SurfaceType("__surfacetype", Float) = 0.0 - [HideInInspector] _BlendMode ("__blendmode", Float) = 0.0 - [HideInInspector] _SrcBlend ("__src", Float) = 1.0 - [HideInInspector] _DstBlend ("__dst", Float) = 0.0 - [HideInInspector] _ZWrite ("__zw", Float) = 1.0 - [HideInInspector] _CullMode("__cullmode", Float) = 2.0 - // Material Id - [HideInInspector] _MaterialId("_MaterialId", FLoat) = 0 - - [Enum(Mask Alpha, 0, BaseColor Alpha, 1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 1 - [Enum(Use Emissive Color, 0, Use Emissive Mask, 1)] _EmissiveColorMode("Emissive color mode", Float) = 1 - [Enum(None, 0, DoubleSided, 1, DoubleSidedLigthingFlip, 2, DoubleSidedLigthingMirror, 3)] _DoubleSidedMode("Double sided mode", Float) = 0 - } - - HLSLINCLUDE - - #pragma target 5.0 - #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev - - #pragma shader_feature _ALPHATEST_ON - #pragma shader_feature _ _DOUBLESIDED_LIGHTING_FLIP _DOUBLESIDED_LIGHTING_MIRROR - #pragma shader_feature _NORMALMAP - #pragma shader_feature _NORMALMAP_TANGENT_SPACE - #pragma shader_feature _MASKMAP - #pragma shader_feature _SPECULAROCCLUSIONMAP - #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A - #pragma shader_feature _EMISSIVE_COLOR - #pragma shader_feature _EMISSIVE_COLOR_MAP - #pragma shader_feature _HEIGHTMAP - #pragma shader_feature _HEIGHTMAP_AS_DISPLACEMENT - - #include "TemplateDisneyGGX.hlsl" - - ENDHLSL - - SubShader - { - Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } - LOD 300 - - // ------------------------------------------------------------------ - // forward pass - Pass - { - Name "Forward" // Name is not used - Tags { "LightMode" = "Forward" } // This will be only for transparent object based on the RenderQueue index - - Blend [_SrcBlend] [_DstBlend] - ZWrite [_ZWrite] - Cull [_CullMode] - - HLSLPROGRAM - - #pragma vertex VertDefault - #pragma fragment FragForward - - #if SHADER_STAGE_FRAGMENT - - float4 FragForward(PackedVaryings packedInput) : SV_Target - { - Varyings input = UnpackVaryings(packedInput); - float3 V = GetWorldSpaceNormalizeViewDir(input.positionWS); - float3 positionWS = input.positionWS; - - SurfaceData surfaceData; - BuiltinData builtinData; - GetSurfaceAndBuiltinData(input, surfaceData, builtinData); - - BSDFData bsdfData = ConvertSurfaceDataToBSDFData(surfaceData); - - float4 diffuseLighting; - float4 specularLighting; - ForwardLighting(V, positionWS, bsdfData, diffuseLighting, specularLighting); - - diffuseLighting.rgb += GetBakedDiffuseLigthing(surfaceData, builtinData); - - return float4(diffuseLighting.rgb + specularLighting.rgb, builtinData.opacity); - } - - #endif - - ENDHLSL - } - - // ------------------------------------------------------------------ - // Deferred pass - Pass - { - Name "GBuffer" // Name is not used - Tags { "LightMode" = "GBuffer" } // This will be only for opaque object based on the RenderQueue index - - Cull [_CullMode] - - HLSLPROGRAM - - #pragma vertex VertDefault - #pragma fragment FragDeferred - - #if SHADER_STAGE_FRAGMENT - - void FragDeferred( PackedVaryings packedInput, - OUTPUT_GBUFFER(outGBuffer) - #ifdef VELOCITY_IN_GBUFFER - , OUTPUT_GBUFFER_VELOCITY(outGBuffer) - #endif - , OUTPUT_GBUFFER_BAKE_LIGHTING(outGBuffer) - ) - { - Varyings input = UnpackVaryings(packedInput); - SurfaceData surfaceData; - BuiltinData builtinData; - GetSurfaceAndBuiltinData(input, surfaceData, builtinData); - - ENCODE_INTO_GBUFFER(surfaceData, outGBuffer); - #ifdef VELOCITY_IN_GBUFFER - ENCODE_VELOCITY_INTO_GBUFFER(builtinData.velocity, outGBuffer); - #endif - ENCODE_BAKE_LIGHTING_INTO_GBUFFER(GetBakedDiffuseLigthing(surfaceData, builtinData), outGBuffer); - } - - #endif - - ENDHLSL - } - - // ------------------------------------------------------------------ - // Debug pass - Pass - { - Name "Debug" - Tags { "LightMode" = "Debug" } - - Cull[_CullMode] - - HLSLPROGRAM - #pragma target 5.0 - #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev - - #pragma vertex VertDefault - #pragma fragment FragDebug - - int g_MaterialDebugMode; - - #include "Assets/ScriptableRenderLoop/ShaderLibrary/Color.hlsl" - #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugCommon.hlsl" - #include "TemplateDisneyGGX.hlsl" - - #if SHADER_STAGE_FRAGMENT - - float4 FragDebug( PackedVaryings packedInput ) : SV_Target - { - Varyings input = UnpackVaryings(packedInput); - SurfaceData surfaceData; - BuiltinData builtinData; - GetSurfaceAndBuiltinData(input, surfaceData, builtinData); - - float3 result = float3(1.0, 1.0, 0.0); - bool outputIsLinear = false; - - if(g_MaterialDebugMode == MaterialDebugDiffuseColor) - { - result = surfaceData.diffuseColor; - } - else if (g_MaterialDebugMode == MaterialDebugNormal) - { - result = surfaceData.normalWS * 0.5 + 0.5; - outputIsLinear = true; - } - else if (g_MaterialDebugMode == MaterialDebugDepth) - { - float linearDepth = frac(LinearEyeDepth(input.positionHS.z, _ZBufferParams) * 0.1); - result = linearDepth.xxx; - outputIsLinear = true; - } - else if (g_MaterialDebugMode == MaterialDebugAO) - { - result = surfaceData.ambientOcclusion.xxx; - outputIsLinear = true; - } - else if (g_MaterialDebugMode == MaterialDebugSpecularColor) - { - result = surfaceData.specularColor; - } - else if (g_MaterialDebugMode == MaterialDebugSpecularOcclusion) - { - result = surfaceData.specularOcclusion.xxx; - outputIsLinear = true; - } - else if (g_MaterialDebugMode == MaterialDebugSmoothness) - { - result = surfaceData.perceptualSmoothness.xxx; - outputIsLinear = true; - } - else if (g_MaterialDebugMode == MaterialDebugMaterialId) - { - result = surfaceData.materialId.xxx; - outputIsLinear = true; - } - else if (g_MaterialDebugMode == MaterialDebugUV0) - { - result = float3(input.texCoord0, 0.0); - outputIsLinear = true; - } - else if (g_MaterialDebugMode == MaterialDebugTangent) - { - result = input.tangentToWorld[0].xyz * 0.5 + 0.5; - outputIsLinear = true; - } - else if (g_MaterialDebugMode == MaterialDebugBitangent) - { - result = input.tangentToWorld[1].xyz * 0.5 + 0.5; - outputIsLinear = true; - } - - // For now, the final blit in the backbuffer performs an sRGB write - // So in the meantime we apply the inverse transform to linear data to compensate. - if(outputIsLinear) - result = SRGBToLinear(max(0, result)); - - return float4(result, 0.0); - } - - #endif - - ENDHLSL - } - } - - CustomEditor "DisneyGGXGUI" -} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs deleted file mode 100644 index a37202e0bea..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs +++ /dev/null @@ -1,49 +0,0 @@ -using UnityEngine; - -//----------------------------------------------------------------------------- -// structure definition -//----------------------------------------------------------------------------- -namespace UnityEngine.ScriptableRenderLoop -{ - // These structures share between C# and hlsl need to be align on float4, so we pad them. - [GenerateHLSL] - public struct PunctualLightData - { - public Vector3 positionWS; - public float invSqrAttenuationRadius; - - public Vector3 color; - public float useDistanceAttenuation; - - public Vector3 forward; - public float diffuseScale; - - public Vector3 up; - public float specularScale; - - public Vector3 right; - public float shadowDimmer; - - public float angleScale; - public float angleOffset; - public Vector2 unused2; - }; - - [GenerateHLSL] - public struct AreaLightData - { - public Vector3 positionWS; - }; - - [GenerateHLSL] - public struct EnvLightData - { - public Vector3 positionWS; - }; - - [GenerateHLSL] - public struct PlanarLightData - { - public Vector3 positionWS; - }; -} // namespace UnityEngine.ScriptableRenderLoop diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs.hlsl deleted file mode 100644 index 08681036caa..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs.hlsl +++ /dev/null @@ -1,125 +0,0 @@ -// -// This file was automatically generated from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs. Please don't edit by hand. -// - -// Generated from UnityEngine.ScriptableRenderLoop.PunctualLightData -// PackingRules = Exact -struct PunctualLightData -{ - float3 positionWS; - float invSqrAttenuationRadius; - float3 color; - float useDistanceAttenuation; - float3 forward; - float diffuseScale; - float3 up; - float specularScale; - float3 right; - float shadowDimmer; - float angleScale; - float angleOffset; - float2 unused2; -}; - -// Generated from UnityEngine.ScriptableRenderLoop.AreaLightData -// PackingRules = Exact -struct AreaLightData -{ - float3 positionWS; -}; - -// Generated from UnityEngine.ScriptableRenderLoop.EnvLightData -// PackingRules = Exact -struct EnvLightData -{ - float3 positionWS; -}; - -// Generated from UnityEngine.ScriptableRenderLoop.PlanarLightData -// PackingRules = Exact -struct PlanarLightData -{ - float3 positionWS; -}; - -// -// Accessors for UnityEngine.ScriptableRenderLoop.PunctualLightData -// -float3 GetPositionWS(PunctualLightData value) -{ - return value.positionWS; -} -float GetInvSqrAttenuationRadius(PunctualLightData value) -{ - return value.invSqrAttenuationRadius; -} -float3 GetColor(PunctualLightData value) -{ - return value.color; -} -float GetUseDistanceAttenuation(PunctualLightData value) -{ - return value.useDistanceAttenuation; -} -float3 GetForward(PunctualLightData value) -{ - return value.forward; -} -float GetDiffuseScale(PunctualLightData value) -{ - return value.diffuseScale; -} -float3 GetUp(PunctualLightData value) -{ - return value.up; -} -float GetSpecularScale(PunctualLightData value) -{ - return value.specularScale; -} -float3 GetRight(PunctualLightData value) -{ - return value.right; -} -float GetShadowDimmer(PunctualLightData value) -{ - return value.shadowDimmer; -} -float GetAngleScale(PunctualLightData value) -{ - return value.angleScale; -} -float GetAngleOffset(PunctualLightData value) -{ - return value.angleOffset; -} -float2 GetUnused2(PunctualLightData value) -{ - return value.unused2; -} - -// -// Accessors for UnityEngine.ScriptableRenderLoop.AreaLightData -// -float3 GetPositionWS(AreaLightData value) -{ - return value.positionWS; -} - -// -// Accessors for UnityEngine.ScriptableRenderLoop.EnvLightData -// -float3 GetPositionWS(EnvLightData value) -{ - return value.positionWS; -} - -// -// Accessors for UnityEngine.ScriptableRenderLoop.PlanarLightData -// -float3 GetPositionWS(PlanarLightData value) -{ - return value.positionWS; -} - - diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs new file mode 100644 index 00000000000..0aafe305f8a --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs @@ -0,0 +1,102 @@ +using UnityEngine; + +//----------------------------------------------------------------------------- +// structure definition +//----------------------------------------------------------------------------- +namespace UnityEngine.Experimental.ScriptableRenderLoop +{ + // These structures share between C# and hlsl need to be align on float4, so we pad them. + [GenerateHLSL] + public struct PunctualLightData + { + public Vector3 positionWS; + public float invSqrAttenuationRadius; + + public Vector3 color; + public float useDistanceAttenuation; + + public Vector3 forward; + public float diffuseScale; + + public Vector3 up; + public float specularScale; + + public Vector3 right; + public float shadowDimmer; + + public float angleScale; + public float angleOffset; + public Vector2 unused2; + }; + + [GenerateHLSL] + public enum AreaShapeType + { + Rectangle, + Line, + // Currently not supported in real time (just use for reference) + Sphere, + Disk, + Hemisphere, + Cylinder + }; + + [GenerateHLSL] + public struct AreaLightData + { + public Vector3 positionWS; + public float invSqrAttenuationRadius; + + public Vector3 color; + public AreaShapeType shapeType; + + public Vector3 forward; + public float diffuseScale; + + public Vector3 up; + public float specularScale; + + public Vector3 right; + public float shadowDimmer; + + public Vector2 size; + public float twoSided; + public float unused; + }; + + [GenerateHLSL] + public enum EnvShapeType + { + None, + Box, + Sphere + }; + + [GenerateHLSL] + public struct EnvLightData + { + public Vector3 positionWS; + public EnvShapeType envShapeType; + + public Vector3 forward; + public float unused2; + + public Vector3 up; + public float blendDistance; // blend transition outside the volume + + public Vector3 right; + public int sliceIndex; + + public Vector3 innerDistance; // equivalent to volume scale + public float unused0; + + public Vector3 offsetLS; + public float unused1; + }; + + [GenerateHLSL] + public struct PlanarLightData + { + public Vector3 positionWS; + }; +} // namespace UnityEngine.Experimental.ScriptableRenderLoop diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs.hlsl new file mode 100644 index 00000000000..63786977e1c --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs.hlsl @@ -0,0 +1,257 @@ +// +// This file was automatically generated from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs. Please don't edit by hand. +// + +// +// UnityEngine.Experimental.ScriptableRenderLoop.AreaShapeType: static fields +// +#define AREASHAPETYPE_RECTANGLE (0) +#define AREASHAPETYPE_LINE (1) +#define AREASHAPETYPE_SPHERE (2) +#define AREASHAPETYPE_DISK (3) +#define AREASHAPETYPE_HEMISPHERE (4) +#define AREASHAPETYPE_CYLINDER (5) + +// +// UnityEngine.Experimental.ScriptableRenderLoop.EnvShapeType: static fields +// +#define ENVSHAPETYPE_NONE (0) +#define ENVSHAPETYPE_BOX (1) +#define ENVSHAPETYPE_SPHERE (2) + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.PunctualLightData +// PackingRules = Exact +struct PunctualLightData +{ + float3 positionWS; + float invSqrAttenuationRadius; + float3 color; + float useDistanceAttenuation; + float3 forward; + float diffuseScale; + float3 up; + float specularScale; + float3 right; + float shadowDimmer; + float angleScale; + float angleOffset; + float2 unused2; +}; + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.AreaLightData +// PackingRules = Exact +struct AreaLightData +{ + float3 positionWS; + float invSqrAttenuationRadius; + float3 color; + int shapeType; + float3 forward; + float diffuseScale; + float3 up; + float specularScale; + float3 right; + float shadowDimmer; + float2 size; + float twoSided; + float unused; +}; + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.EnvLightData +// PackingRules = Exact +struct EnvLightData +{ + float3 positionWS; + int envShapeType; + float3 forward; + float unused2; + float3 up; + float blendDistance; + float3 right; + int sliceIndex; + float3 innerDistance; + float unused0; + float3 offsetLS; + float unused1; +}; + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.PlanarLightData +// PackingRules = Exact +struct PlanarLightData +{ + float3 positionWS; +}; + +// +// Accessors for UnityEngine.Experimental.ScriptableRenderLoop.PunctualLightData +// +float3 GetPositionWS(PunctualLightData value) +{ + return value.positionWS; +} +float GetInvSqrAttenuationRadius(PunctualLightData value) +{ + return value.invSqrAttenuationRadius; +} +float3 GetColor(PunctualLightData value) +{ + return value.color; +} +float GetUseDistanceAttenuation(PunctualLightData value) +{ + return value.useDistanceAttenuation; +} +float3 GetForward(PunctualLightData value) +{ + return value.forward; +} +float GetDiffuseScale(PunctualLightData value) +{ + return value.diffuseScale; +} +float3 GetUp(PunctualLightData value) +{ + return value.up; +} +float GetSpecularScale(PunctualLightData value) +{ + return value.specularScale; +} +float3 GetRight(PunctualLightData value) +{ + return value.right; +} +float GetShadowDimmer(PunctualLightData value) +{ + return value.shadowDimmer; +} +float GetAngleScale(PunctualLightData value) +{ + return value.angleScale; +} +float GetAngleOffset(PunctualLightData value) +{ + return value.angleOffset; +} +float2 GetUnused2(PunctualLightData value) +{ + return value.unused2; +} + +// +// Accessors for UnityEngine.Experimental.ScriptableRenderLoop.AreaLightData +// +float3 GetPositionWS(AreaLightData value) +{ + return value.positionWS; +} +float GetInvSqrAttenuationRadius(AreaLightData value) +{ + return value.invSqrAttenuationRadius; +} +float3 GetColor(AreaLightData value) +{ + return value.color; +} +int GetShapeType(AreaLightData value) +{ + return value.shapeType; +} +float3 GetForward(AreaLightData value) +{ + return value.forward; +} +float GetDiffuseScale(AreaLightData value) +{ + return value.diffuseScale; +} +float3 GetUp(AreaLightData value) +{ + return value.up; +} +float GetSpecularScale(AreaLightData value) +{ + return value.specularScale; +} +float3 GetRight(AreaLightData value) +{ + return value.right; +} +float GetShadowDimmer(AreaLightData value) +{ + return value.shadowDimmer; +} +float2 GetSize(AreaLightData value) +{ + return value.size; +} +float GetTwoSided(AreaLightData value) +{ + return value.twoSided; +} +float GetUnused(AreaLightData value) +{ + return value.unused; +} + +// +// Accessors for UnityEngine.Experimental.ScriptableRenderLoop.EnvLightData +// +float3 GetPositionWS(EnvLightData value) +{ + return value.positionWS; +} +int GetEnvShapeType(EnvLightData value) +{ + return value.envShapeType; +} +float3 GetForward(EnvLightData value) +{ + return value.forward; +} +float GetUnused2(EnvLightData value) +{ + return value.unused2; +} +float3 GetUp(EnvLightData value) +{ + return value.up; +} +float GetBlendDistance(EnvLightData value) +{ + return value.blendDistance; +} +float3 GetRight(EnvLightData value) +{ + return value.right; +} +int GetSliceIndex(EnvLightData value) +{ + return value.sliceIndex; +} +float3 GetInnerDistance(EnvLightData value) +{ + return value.innerDistance; +} +float GetUnused0(EnvLightData value) +{ + return value.unused0; +} +float3 GetOffsetLS(EnvLightData value) +{ + return value.offsetLS; +} +float GetUnused1(EnvLightData value) +{ + return value.unused1; +} + +// +// Accessors for UnityEngine.Experimental.ScriptableRenderLoop.PlanarLightData +// +float3 GetPositionWS(PlanarLightData value) +{ + return value.positionWS; +} + + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs.hlsl.meta similarity index 100% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs.hlsl.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs.hlsl.meta diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs.meta similarity index 100% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs.meta diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl index fd90e65809d..ab038f85a7f 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl @@ -1,8 +1,12 @@ -#ifndef UNITY_LIGHTING_INCLUDED +#ifndef UNITY_LIGHTING_INCLUDED #define UNITY_LIGHTING_INCLUDED +// We need to define the macro used for env map evaluation based on the different architecture. +// Like for material we have one define by architecture. +// TODO: who setup the define for a given architecture ? + #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Material.hlsl" -#include "LightingForward.hlsl" +#include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward/LightingForward.hlsl" -#endif // UNITY_LIGHTING_INCLUDED \ No newline at end of file +#endif // UNITY_LIGHTING_INCLUDED diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/DisneyGGX.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred.meta similarity index 58% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/DisneyGGX.hlsl.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred.meta index 22203a29822..38e3ebf9ef8 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/DisneyGGX.hlsl.meta +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred.meta @@ -1,6 +1,7 @@ fileFormatVersion: 2 -guid: 3d0985c9290aa0847969ac858555e87a -timeCreated: 1474465931 +guid: df85c88f855185249aad13cf37a4952a +folderAsset: yes +timeCreated: 1476653183 licenseType: Pro DefaultImporter: userData: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred.shader deleted file mode 100644 index 53009643c6c..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred.shader +++ /dev/null @@ -1,86 +0,0 @@ -Shader "Hidden/Unity/LightingDeferred" -{ - Properties - { - _SrcBlend("", Float) = 1 - _DstBlend("", Float) = 1 - } - - SubShader - { - - Pass - { - ZWrite Off - Blend[_SrcBlend][_DstBlend] - - HLSLPROGRAM - #pragma target 5.0 - #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev - - #pragma vertex VertDeferred - #pragma fragment FragDeferred - - // CAUTION: In case deferred lighting need to support various lighting model statically, we will require to do multicompile with different define like UNITY_MATERIAL_DISNEYGXX - #define UNITY_MATERIAL_DISNEYGGX // Need to be define before including Material.hlsl - #include "Lighting.hlsl" // This include Material.hlsl - #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl" - - DECLARE_GBUFFER_TEXTURE(_CameraGBufferTexture); - DECLARE_GBUFFER_BAKE_LIGHTING(_CameraGBufferTexture); - - Texture2D _CameraDepthTexture; - float4 _ScreenSize; - - float4x4 _InvViewProjMatrix; - - struct Attributes - { - float3 positionOS : POSITION; - }; - - struct Varyings - { - float4 positionHS : SV_POSITION; - }; - - Varyings VertDeferred(Attributes input) - { - // TODO: implement SV_vertexID full screen quad - // Lights are draw as one fullscreen quad - Varyings output; - float3 positionWS = TransformObjectToWorld(input.positionOS); - output.positionHS = TransformWorldToHClip(positionWS); - - return output; - } - - float4 FragDeferred(Varyings input) : SV_Target - { - Coordinate coord = GetCoordinate(input.positionHS.xy, _ScreenSize.zw); - - // No need to manage inverse depth, this is handled by the projection matrix - float depth = _CameraDepthTexture.Load(uint3(coord.unPositionSS, 0)).x; - float3 positionWS = UnprojectToWorld(depth, coord.positionSS, _InvViewProjMatrix); - float3 V = GetWorldSpaceNormalizeViewDir(positionWS); - - FETCH_GBUFFER(gbuffer, _CameraGBufferTexture, coord.unPositionSS); - BSDFData bsdfData = DECODE_FROM_GBUFFER(gbuffer); - - // NOTE: Currently calling the forward loop, same code... :) - float4 diffuseLighting; - float4 specularLighting; - ForwardLighting(V, positionWS, bsdfData, diffuseLighting, specularLighting); - - FETCH_BAKE_LIGHTING_GBUFFER(gbuffer, _CameraGBufferTexture, coord.unPositionSS); - diffuseLighting.rgb += DECODE_BAKE_LIGHTING_FROM_GBUFFER(gbuffer); - - return float4(diffuseLighting.rgb + specularLighting.rgb, 1.0); - } - - ENDHLSL - } - - } - Fallback Off -} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred/LightingDeferred.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred/LightingDeferred.shader new file mode 100644 index 00000000000..b87a52e19cf --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred/LightingDeferred.shader @@ -0,0 +1,87 @@ +Shader "Hidden/Unity/LightingDeferred" +{ + Properties + { + _SrcBlend("", Float) = 1 + _DstBlend("", Float) = 1 + } + + SubShader + { + + Pass + { + ZWrite Off + Blend[_SrcBlend][_DstBlend] + + HLSLPROGRAM + #pragma target 5.0 + #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev + + #pragma vertex VertDeferred + #pragma fragment FragDeferred + + // CAUTION: In case deferred lighting need to support various lighting model statically, we will require to do multicompile with different define like UNITY_MATERIAL_DISNEYGXX + #define UNITY_MATERIAL_LIT // Need to be define before including Material.hlsl + #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl" // This include Material.hlsl + #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl" + + DECLARE_GBUFFER_TEXTURE(_CameraGBufferTexture); + DECLARE_GBUFFER_BAKE_LIGHTING(_CameraGBufferTexture); + + UNITY_DECLARE_TEX2D(_CameraDepthTexture); + + float4x4 _InvViewProjMatrix; + + struct Attributes + { + float3 positionOS : POSITION; + }; + + struct Varyings + { + float4 positionHS : SV_POSITION; + }; + + Varyings VertDeferred(Attributes input) + { + // TODO: implement SV_vertexID full screen quad + // Lights are draw as one fullscreen quad + Varyings output; + float3 positionWS = TransformObjectToWorld(input.positionOS); + output.positionHS = TransformWorldToHClip(positionWS); + + return output; + } + + float4 FragDeferred(Varyings input) : SV_Target + { + Coordinate coord = GetCoordinate(input.positionHS.xy, _ScreenSize.zw); + + // No need to manage inverse depth, this is handled by the projection matrix + float depth = _CameraDepthTexture.Load(uint3(coord.unPositionSS, 0)).x; + float3 positionWS = UnprojectToWorld(depth, coord.positionSS, _InvViewProjMatrix); + float3 V = GetWorldSpaceNormalizeViewDir(positionWS); + + FETCH_GBUFFER(gbuffer, _CameraGBufferTexture, coord.unPositionSS); + BSDFData bsdfData = DECODE_FROM_GBUFFER(gbuffer); + + PreLightData preLightData = GetPreLightData(V, positionWS, coord, bsdfData); + + // NOTE: Currently calling the forward loop, same code... :) + float4 diffuseLighting; + float4 specularLighting; + ForwardLighting(V, positionWS, preLightData, bsdfData, diffuseLighting, specularLighting); + + FETCH_BAKE_LIGHTING_GBUFFER(gbuffer, _CameraGBufferTexture, coord.unPositionSS); + diffuseLighting.rgb += DECODE_BAKE_LIGHTING_FROM_GBUFFER(gbuffer); + + return float4(diffuseLighting.rgb + specularLighting.rgb, 1.0); + } + + ENDHLSL + } + + } + Fallback Off +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred.shader.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred/LightingDeferred.shader.meta similarity index 100% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred.shader.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingDeferred/LightingDeferred.shader.meta diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.hlsl deleted file mode 100644 index a3b54000341..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.hlsl +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef UNITY_LIGHTING_FORWARD_INCLUDED -#define UNITY_LIGHTING_FORWARD_INCLUDED - -//----------------------------------------------------------------------------- -// Simple forward loop architecture -//----------------------------------------------------------------------------- - -StructuredBuffer g_punctualLightList; -int g_punctualLightCount; - -// TODO: Think about how to apply Disney diffuse preconvolve on indirect diffuse => must be done during GBuffer layout! Else emissive will be fucked... -// That's mean we need to read DFG texture during Gbuffer... -void ForwardLighting( float3 V, float3 positionWS, BSDFData bsdfData, - out float4 diffuseLighting, - out float4 specularLighting) -{ - diffuseLighting = float4(0.0, 0.0, 0.0, 0.0); - specularLighting = float4(0.0, 0.0, 0.0, 0.0); - - for (int i = 0; i < g_punctualLightCount; ++i) - { - float4 localDiffuseLighting; - float4 localSpecularLighting; - EvaluateBSDF_Punctual(V, positionWS, g_punctualLightList[i], bsdfData, localDiffuseLighting, localSpecularLighting); - diffuseLighting += localDiffuseLighting; - specularLighting += localSpecularLighting; - } - - /* - for (int i = 0; i < 4; ++i) - { - float4 localDiffuseLighting; - float4 localSpecularLighting; - EvaluateBSDF_Area(V, positionWS, areaLightData[i], bsdfData, localDiffuseLighting, localSpecularLighting); - diffuseLighting += localDiffuseLighting; - specularLighting += localSpecularLighting; - } - */ -} - -#endif // UNITY_LIGHTING_FORWARD_INCLUDED \ No newline at end of file diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/TemplateDisneyGGX.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.meta similarity index 58% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/TemplateDisneyGGX.hlsl.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.meta index 34c60a21660..9dbea163e53 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/TemplateDisneyGGX.hlsl.meta +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.meta @@ -1,6 +1,7 @@ fileFormatVersion: 2 -guid: bc4a80ef70e37814e94ea45fc03abdaa -timeCreated: 1474456127 +guid: 8f27521401d2efc4fb35f246e296940e +folderAsset: yes +timeCreated: 1476653182 licenseType: Pro DefaultImporter: userData: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward/LightingForward.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward/LightingForward.hlsl new file mode 100644 index 00000000000..69bfafe4be3 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward/LightingForward.hlsl @@ -0,0 +1,59 @@ +#ifndef UNITY_LIGHTING_FORWARD_INCLUDED +#define UNITY_LIGHTING_FORWARD_INCLUDED + +//----------------------------------------------------------------------------- +// Simple forward loop architecture +//----------------------------------------------------------------------------- + +StructuredBuffer _PunctualLightList; +int _PunctualLightCount; + +UNITY_DECLARE_TEXCUBEARRAY(_EnvTextures); + +StructuredBuffer _EnvLightList; +int _EnvLightCount; + +void ForwardLighting( float3 V, float3 positionWS, PreLightData prelightData, BSDFData bsdfData, + out float4 diffuseLighting, + out float4 specularLighting) +{ + diffuseLighting = float4(0.0, 0.0, 0.0, 0.0); + specularLighting = float4(0.0, 0.0, 0.0, 0.0); + + for (int i = 0; i < _PunctualLightCount; ++i) + { + float4 localDiffuseLighting; + float4 localSpecularLighting; + EvaluateBSDF_Punctual(V, positionWS, prelightData, _PunctualLightList[i], bsdfData, localDiffuseLighting, localSpecularLighting); + diffuseLighting += localDiffuseLighting; + specularLighting += localSpecularLighting; + } + + /* + for (int i = 0; i < 4; ++i) + { + float4 localDiffuseLighting; + float4 localSpecularLighting; + EvaluateBSDF_Area(V, positionWS, areaLightData[i], bsdfData, localDiffuseLighting, localSpecularLighting); + diffuseLighting += localDiffuseLighting; + specularLighting += localSpecularLighting; + } + */ + + float4 iblDiffuseLighting = float4(0.0, 0.0, 0.0, 0.0); + float4 iblSpecularLighting = float4(0.0, 0.0, 0.0, 0.0); + + for (int j = 0; j < _EnvLightCount; ++j) + { + float4 localDiffuseLighting; + float4 localSpecularLighting; + EvaluateBSDF_Env(V, positionWS, prelightData, _EnvLightList[j], bsdfData, UNITY_PASS_TEXCUBEARRAY(_EnvTextures), localDiffuseLighting, localSpecularLighting); + iblDiffuseLighting.rgb = lerp(iblDiffuseLighting.rgb, localDiffuseLighting.rgb, localDiffuseLighting.a); // Should be remove by the compiler if it is smart as all is constant 0 + iblSpecularLighting.rgb = lerp(iblSpecularLighting.rgb, localSpecularLighting.rgb, localSpecularLighting.a); + } + + diffuseLighting += iblDiffuseLighting; + specularLighting += iblSpecularLighting; +} + +#endif // UNITY_LIGHTING_FORWARD_INCLUDED diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward/LightingForward.hlsl.meta similarity index 100% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.hlsl.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward/LightingForward.hlsl.meta diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin.meta new file mode 100644 index 00000000000..ed50b37b7a2 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: af4ee1f6f88b039449ba02003b0f332d +folderAsset: yes +timeCreated: 1476653183 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs new file mode 100644 index 00000000000..785c67ace31 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs @@ -0,0 +1,56 @@ +using UnityEngine; + +//----------------------------------------------------------------------------- +// structure definition +//----------------------------------------------------------------------------- +namespace UnityEngine.Experimental.ScriptableRenderLoop +{ + namespace Builtin + { + //----------------------------------------------------------------------------- + // BuiltinData + // This structure include common data that should be present in all material + // and are independent from the BSDF parametrization. + // Note: These parameters can be store in GBuffer if the writer wants + //----------------------------------------------------------------------------- + [GenerateHLSL(PackingRules.Exact, false, true, 100)] + public struct BuiltinData + { + [SurfaceDataAttributes("Opacity")] + public float opacity; + + // These are lighting data. + // We would prefer to split lighting and material information but for performance reasons, + // those lighting information are fill + // at the same time than material information. + [SurfaceDataAttributes("Bake Diffuse Lighting")] + public Vector3 bakeDiffuseLighting; // This is the result of sampling lightmap/lightprobe/proxyvolume + + [SurfaceDataAttributes("Emissive Color")] + public Vector3 emissiveColor; + [SurfaceDataAttributes("Emissive Intensity")] + public float emissiveIntensity; + + // These is required for motion blur and temporalAA + [SurfaceDataAttributes("Velocity")] + public Vector2 velocity; + + // Distortion + [SurfaceDataAttributes("Distortion")] + public Vector2 distortion; + [SurfaceDataAttributes("Distortion Blur")] + public float distortionBlur; // Define the color buffer mipmap level to use + }; + + //----------------------------------------------------------------------------- + // LighTransportData + // This struct is use to store information for Enlighten/Progressive light mapper. both at runtime or off line. + //----------------------------------------------------------------------------- + [GenerateHLSL(PackingRules.Exact, false, true, 120)] + public struct LighTransportData + { + public Vector3 diffuseColor; + public Vector3 emissiveColor; + }; + } +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.hlsl new file mode 100644 index 00000000000..e66e91d45b7 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.hlsl @@ -0,0 +1,43 @@ +// +// This file was automatically generated from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs. Please don't edit by hand. +// + +// +// UnityEngine.Experimental.ScriptableRenderLoop.Builtin.BuiltinData: static fields +// +#define DEBUGVIEW_BUILTIN_BUILTINDATA_OPACITY (100) +#define DEBUGVIEW_BUILTIN_BUILTINDATA_BAKE_DIFFUSE_LIGHTING (101) +#define DEBUGVIEW_BUILTIN_BUILTINDATA_EMISSIVE_COLOR (102) +#define DEBUGVIEW_BUILTIN_BUILTINDATA_EMISSIVE_INTENSITY (103) +#define DEBUGVIEW_BUILTIN_BUILTINDATA_VELOCITY (104) +#define DEBUGVIEW_BUILTIN_BUILTINDATA_DISTORTION (105) +#define DEBUGVIEW_BUILTIN_BUILTINDATA_DISTORTION_BLUR (106) + +// +// UnityEngine.Experimental.ScriptableRenderLoop.Builtin.LighTransportData: static fields +// +#define DEBUGVIEW_BUILTIN_LIGHTRANSPORTDATA_DIFFUSE_COLOR (120) +#define DEBUGVIEW_BUILTIN_LIGHTRANSPORTDATA_EMISSIVE_COLOR (121) + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.Builtin.BuiltinData +// PackingRules = Exact +struct BuiltinData +{ + float opacity; + float3 bakeDiffuseLighting; + float3 emissiveColor; + float emissiveIntensity; + float2 velocity; + float2 distortion; + float distortionBlur; +}; + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.Builtin.LighTransportData +// PackingRules = Exact +struct LighTransportData +{ + float3 diffuseColor; + float3 emissiveColor; +}; + + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.shader.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.hlsl.meta similarity index 67% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.shader.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.hlsl.meta index 516bdcb1ee6..a1b11ab5172 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.shader.meta +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.hlsl.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: e1a84346ee54f9f4993c2f05c59805a0 -timeCreated: 1474456127 +guid: 8683f17295ce92e48b6000424f8ba166 +timeCreated: 1476011766 licenseType: Pro ShaderImporter: defaultTextures: [] diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.cs.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.meta similarity index 75% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.cs.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.meta index 3e46155234b..e3d00c6346f 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/DisneyGGX.cs.meta +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 5a4257d1b13e9cf4d877271cc4ef55ec -timeCreated: 1475450550 +guid: 4e7ffefa010d39847ba8fc54d4aa8e46 +timeCreated: 1476011696 licenseType: Pro MonoImporter: serializedVersion: 2 diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.hlsl new file mode 100644 index 00000000000..3418ad631a6 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.hlsl @@ -0,0 +1,56 @@ +#ifndef UNITY_BUILTIN_DATA_INCLUDED +#define UNITY_BUILTIN_DATA_INCLUDED + +//----------------------------------------------------------------------------- +// BuiltinData +// This structure include common data that should be present in all material +// and are independent from the BSDF parametrization. +// Note: These parameters can be store in GBuffer if the writer wants +//----------------------------------------------------------------------------- + +#include "BuiltinData.cs.hlsl" + +void GetBuiltinDataDebug(uint paramId, BuiltinData builtinData, inout float3 result, inout bool needLinearToSRGB) +{ + switch (paramId) + { + case DEBUGVIEW_BUILTIN_BUILTINDATA_OPACITY: + result = builtinData.opacity.xxx; + break; + case DEBUGVIEW_BUILTIN_BUILTINDATA_BAKE_DIFFUSE_LIGHTING: + // TODO: require a remap + result = builtinData.bakeDiffuseLighting; + break; + case DEBUGVIEW_BUILTIN_BUILTINDATA_EMISSIVE_COLOR: + result = builtinData.emissiveColor; needLinearToSRGB = true; + break; + case DEBUGVIEW_BUILTIN_BUILTINDATA_EMISSIVE_INTENSITY: + result = builtinData.emissiveIntensity.xxx; + break; + case DEBUGVIEW_BUILTIN_BUILTINDATA_VELOCITY: + result = float3(builtinData.velocity, 0.0); + break; + case DEBUGVIEW_BUILTIN_BUILTINDATA_DISTORTION: + result = float3(builtinData.distortion, 0.0); + break; + case DEBUGVIEW_BUILTIN_BUILTINDATA_DISTORTION_BLUR: + result = builtinData.distortionBlur.xxx; + break; + } +} + +void GetLighTransportDataDebug(uint paramId, LighTransportData lightTransportData, inout float3 result, inout bool needLinearToSRGB) +{ + switch (paramId) + { + case DEBUGVIEW_BUILTIN_LIGHTRANSPORTDATA_DIFFUSE_COLOR: + result = lightTransportData.diffuseColor; needLinearToSRGB = true; + break; + case DEBUGVIEW_BUILTIN_LIGHTRANSPORTDATA_EMISSIVE_COLOR: + // TODO: Need a tonemap ? + result = lightTransportData.emissiveColor; + break; + } +} + +#endif // UNITY_BUILTIN_DATA_INCLUDED diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/BuiltinData.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.hlsl.meta similarity index 100% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/BuiltinData.hlsl.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Builtin/BuiltinData.hlsl.meta diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/BuiltinData.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/BuiltinData.hlsl deleted file mode 100644 index 9572077b038..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/BuiltinData.hlsl +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef UNITY_BUILTIN_DATA_INCLUDED -#define UNITY_BUILTIN_DATA_INCLUDED - -//----------------------------------------------------------------------------- -// BuiltinData -// This structure include common data that should be present in all material -// and are independent from the BSDF parametrization. -// Note: These parameters can be store in GBuffer if the writer wants -//----------------------------------------------------------------------------- - -struct BuiltinData -{ - float opacity; - - // These are lighting data. - // We would prefer to split lighting and material information but for performance reasons, - // those lighting information are fill - // at the same time than material information. - float3 bakeDiffuseLighting; // This is the result of sampling lightmap/lightprobe/proxyvolume - - float3 emissiveColor; - float emissiveIntensity; - - // These is required for motion blur and temporalAA - float2 velocity; - - // Distortion - float2 distortion; - float distortionBlur; // Define the color buffer mipmap level to use -}; - -#endif // UNITY_BUILTIN_DATA_INCLUDED \ No newline at end of file diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/DisneyGGX.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/DisneyGGX.hlsl deleted file mode 100644 index 6a09402c369..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/DisneyGGX.hlsl +++ /dev/null @@ -1,188 +0,0 @@ -#ifndef UNITY_MATERIAL_DISNEYGGX_INCLUDED -#define UNITY_MATERIAL_DISNEYGGX_INCLUDED - -//----------------------------------------------------------------------------- -// SurfaceData and BSDFData -//----------------------------------------------------------------------------- - - -// Main structure that store the user data (i.e user input of master node in material graph) -struct SurfaceData -{ - float3 diffuseColor; - float ambientOcclusion; - - float3 specularColor; - float specularOcclusion; - - float3 normalWS; - float perceptualSmoothness; - float materialId; - - // MaterialID SSS - When enable, we only need one channel for specColor, so one is free to store information. - float subSurfaceRadius; -// float thickness; -// int subSurfaceProfile; - - // MaterialID Clear coat -// float coatCoverage; -// float coatRoughness; -}; - -struct BSDFData -{ - float3 diffuseColor; - float matData0; - - float3 fresnel0; - float specularOcclusion; - //float matData1; - - float3 normalWS; - float perceptualRoughness; - float materialId; - - float roughness; -}; - -//----------------------------------------------------------------------------- -// conversion function for forward -//----------------------------------------------------------------------------- - -BSDFData ConvertSurfaceDataToBSDFData(SurfaceData input) -{ - BSDFData output; - - output.diffuseColor = input.diffuseColor; - output.matData0 = input.subSurfaceRadius; // TEMP - - output.fresnel0 = input.specularColor; - output.specularOcclusion = input.specularOcclusion; - //output.matData1 = input.matData1; - - output.normalWS = input.normalWS; - output.perceptualRoughness = PerceptualSmoothnessToPerceptualRoughness(input.perceptualSmoothness); - output.materialId = input.materialId; - - output.roughness = PerceptualRoughnessToRoughness(output.perceptualRoughness); - - return output; -} - -//----------------------------------------------------------------------------- -// Packing helper functions specific to this surfaceData -//----------------------------------------------------------------------------- - -float PackMaterialId(int materialId) -{ - return float(materialId) / 3.0; -} - -int UnpackMaterialId(float f) -{ - return int(round(f * 3.0)); -} - -//----------------------------------------------------------------------------- -// bake lighting function -//----------------------------------------------------------------------------- - -float3 GetBakedDiffuseLigthing(SurfaceData surfaceData, BuiltinData builtinData) -{ - return builtinData.bakeDiffuseLighting * surfaceData.ambientOcclusion * surfaceData.diffuseColor + builtinData.emissiveColor * builtinData.emissiveIntensity; -} - -//----------------------------------------------------------------------------- -// conversion function for deferred -//----------------------------------------------------------------------------- - -#define GBUFFER_MATERIAL_COUNT 3 - -// Encode SurfaceData (BSDF parameters) into GBuffer -void EncodeIntoGBuffer( SurfaceData surfaceData, - out float4 outGBuffer0, - out float4 outGBuffer1, - out float4 outGBuffer2) -{ - // RT0 - 8:8:8:8 sRGB - outGBuffer0 = float4(surfaceData.diffuseColor, surfaceData.subSurfaceRadius); - - // RT1 - 8:8:8:8: - outGBuffer1 = float4(surfaceData.specularColor, surfaceData.specularOcclusion /*, surfaceData.matData1 */); - - // RT2 - 10:10:10:2 - // Encode normal on 20bit with oct compression - float2 octNormal = PackNormalOctEncode(surfaceData.normalWS); - // We store perceptualRoughness instead of roughness because it save a sqrt ALU when decoding - // (as we want both perceptualRoughness and roughness for the lighting due to Disney Diffuse model) - outGBuffer2 = float4(octNormal * 0.5 + 0.5, PerceptualSmoothnessToPerceptualRoughness(surfaceData.perceptualSmoothness), PackMaterialId(surfaceData.materialId)); -} - -BSDFData DecodeFromGBuffer( float4 inGBuffer0, - float4 inGBuffer1, - float4 inGBuffer2) -{ - BSDFData bsdfData; - bsdfData.diffuseColor = inGBuffer0.rgb; - bsdfData.matData0 = inGBuffer0.a; - - bsdfData.fresnel0 = inGBuffer1.rgb; - bsdfData.specularOcclusion = inGBuffer1.a; - // bsdfData.matData1 = ?; - - bsdfData.normalWS = UnpackNormalOctEncode(float2(inGBuffer2.r * 2.0 - 1.0, inGBuffer2.g * 2 - 1)); - bsdfData.perceptualRoughness = inGBuffer2.b; - bsdfData.materialId = UnpackMaterialId(inGBuffer2.a); - - bsdfData.roughness = PerceptualRoughnessToRoughness(bsdfData.perceptualRoughness); - - return bsdfData; -} - -//----------------------------------------------------------------------------- -// EvaluateBSDF functions for each light type -//----------------------------------------------------------------------------- - -void EvaluateBSDF_Punctual( float3 V, float3 positionWS, PunctualLightData lightData, BSDFData bsdfData, - out float4 diffuseLighting, - out float4 specularLighting) -{ - // All punctual light type in the same formula, attenuation is neutral depends on light type. - // light.positionWS is the normalize light direction in case of directional light and invSqrAttenuationRadius is 0 - // mean dot(unL, unL) = 1 and mean GetDistanceAttenuation() will return 1 - // For point light and directional GetAngleAttenuation() return 1 - - float3 unL = lightData.positionWS - positionWS * lightData.useDistanceAttenuation; - float3 L = normalize(unL); - - float attenuation = GetDistanceAttenuation(unL, lightData.invSqrAttenuationRadius); - attenuation *= GetAngleAttenuation(L, lightData.forward, lightData.angleScale, lightData.angleOffset); - float illuminance = saturate(dot(bsdfData.normalWS, L)) * attenuation; - - diffuseLighting = float4(0.0, 0.0, 0.0, 1.0); - specularLighting = float4(0.0, 0.0, 0.0, 1.0); - - if (illuminance > 0.0f) - { - float NdotV = abs(dot(bsdfData.normalWS, V)) + 1e-5f; // TODO: check Eric idea about doing that when writting into the GBuffer (with our forward decal) - float3 H = normalize(V + L); - float LdotH = saturate(dot(L, H)); - float NdotH = saturate(dot(bsdfData.normalWS, H)); - float NdotL = saturate(dot(bsdfData.normalWS, L)); - float3 F = F_Schlick(bsdfData.fresnel0, LdotH); - float Vis = V_SmithJointGGX(NdotL, NdotV, bsdfData.roughness); - float D = D_GGX(NdotH, bsdfData.roughness); - specularLighting.rgb = F * Vis * D; - #ifdef DIFFUSE_LAMBERT_BRDF - float diffuseTerm = Lambert(); - #else - float diffuseTerm = DisneyDiffuse(NdotV, NdotL, LdotH, bsdfData.perceptualRoughness); - #endif - diffuseLighting.rgb = bsdfData.diffuseColor * diffuseTerm; - - diffuseLighting.rgb *= lightData.color * illuminance; - specularLighting.rgb *= lightData.color * illuminance; - } -} - -#endif // UNITY_MATERIAL_DISNEYGGX_INCLUDED diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit.meta new file mode 100644 index 00000000000..90065e4600b --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cebd0ba54432759488065d1592e05692 +folderAsset: yes +timeCreated: 1476653183 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLit.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLit.shader new file mode 100644 index 00000000000..5eaac413d5a --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLit.shader @@ -0,0 +1,210 @@ +Shader "Unity/LayeredLit" +{ + Properties + { + // Following set of parameters represent the parameters node inside the MaterialGraph. + // They are use to fill a SurfaceData. With a MaterialGraph this should not exist. + + // Reminder. Color here are in linear but the UI (color picker) do the conversion sRGB to linear + _BaseColor0("BaseColor0", Color) = (1,1,1,1) + _BaseColor1("BaseColor1", Color) = (1, 1, 1, 1) + _BaseColor2("BaseColor2", Color) = (1, 1, 1, 1) + _BaseColor3("BaseColor3", Color) = (1, 1, 1, 1) + + _BaseColorMap0("BaseColorMap0", 2D) = "white" {} + _BaseColorMap1("BaseColorMap1", 2D) = "white" {} + _BaseColorMap2("BaseColorMap2", 2D) = "white" {} + _BaseColorMap3("BaseColorMap3", 2D) = "white" {} + + _Metallic0("Metallic0", Range(0.0, 1.0)) = 0 + _Metallic1("Metallic1", Range(0.0, 1.0)) = 0 + _Metallic2("Metallic2", Range(0.0, 1.0)) = 0 + _Metallic3("Metallic3", Range(0.0, 1.0)) = 0 + + _Smoothness0("Smoothness0", Range(0.0, 1.0)) = 0.5 + _Smoothness1("Smoothness1", Range(0.0, 1.0)) = 0.5 + _Smoothness2("Smoothness2", Range(0.0, 1.0)) = 0.5 + _Smoothness3("Smoothness3", Range(0.0, 1.0)) = 0.5 + + _MaskMap0("MaskMap0", 2D) = "white" {} + _MaskMap1("MaskMap1", 2D) = "white" {} + _MaskMap2("MaskMap2", 2D) = "white" {} + _MaskMap3("MaskMap3", 2D) = "white" {} + + _SpecularOcclusionMap0("SpecularOcclusion0", 2D) = "white" {} + _SpecularOcclusionMap1("SpecularOcclusion1", 2D) = "white" {} + _SpecularOcclusionMap2("SpecularOcclusion2", 2D) = "white" {} + _SpecularOcclusionMap3("SpecularOcclusion3", 2D) = "white" {} + + _NormalMap0("NormalMap0", 2D) = "bump" {} + _NormalMap1("NormalMap1", 2D) = "bump" {} + _NormalMap2("NormalMap2", 2D) = "bump" {} + _NormalMap3("NormalMap3", 2D) = "bump" {} + + [Enum(TangentSpace, 0, ObjectSpace, 1)] _NormalMapSpace("NormalMap space", Float) = 0 + + _HeightMap0("HeightMap0", 2D) = "black" {} + _HeightMap1("HeightMap1", 2D) = "black" {} + _HeightMap2("HeightMap2", 2D) = "black" {} + _HeightMap3("HeightMap3", 2D) = "black" {} + + _HeightScale0("Height Scale0", Float) = 1 + _HeightScale1("Height Scale1", Float) = 1 + _HeightScale2("Height Scale2", Float) = 1 + _HeightScale3("Height Scale3", Float) = 1 + + _HeightBias0("Height Bias0", Float) = 0 + _HeightBias1("Height Bias1", Float) = 0 + _HeightBias2("Height Bias2", Float) = 0 + _HeightBias3("Height Bias3", Float) = 0 + + [Enum(Parallax, 0, Displacement, 1)] _HeightMapMode("Heightmap usage", Float) = 0 + + _EmissiveColor0("EmissiveColor0", Color) = (0, 0, 0) + _EmissiveColor1("EmissiveColor1", Color) = (0, 0, 0) + _EmissiveColor2("EmissiveColor2", Color) = (0, 0, 0) + _EmissiveColor3("EmissiveColor3", Color) = (0, 0, 0) + + _EmissiveColorMap0("EmissiveColorMap0", 2D) = "white" {} + _EmissiveColorMap1("EmissiveColorMap1", 2D) = "white" {} + _EmissiveColorMap2("EmissiveColorMap2", 2D) = "white" {} + _EmissiveColorMap3("EmissiveColorMap3", 2D) = "white" {} + + _EmissiveIntensity0("EmissiveIntensity0", Float) = 0 + _EmissiveIntensity1("EmissiveIntensity1", Float) = 0 + _EmissiveIntensity2("EmissiveIntensity2", Float) = 0 + _EmissiveIntensity3("EmissiveIntensity3", Float) = 0 + + _LayerMaskMap("LayerMaskMap", 2D) = "white" {} + + [ToggleOff] _DistortionOnly("Distortion Only", Float) = 0.0 + [ToggleOff] _DistortionDepthTest("Distortion Only", Float) = 0.0 + + [ToggleOff] _AlphaCutoffEnable("Alpha Cutoff Enable", Float) = 0.0 + + _AlphaCutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + // Blending state + [HideInInspector] _SurfaceType("__surfacetype", Float) = 0.0 + [HideInInspector] _BlendMode ("__blendmode", Float) = 0.0 + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 + [HideInInspector] _DstBlend ("__dst", Float) = 0.0 + [HideInInspector] _ZWrite ("__zw", Float) = 1.0 + [HideInInspector] _CullMode("__cullmode", Float) = 2.0 + // Material Id + [HideInInspector] _MaterialId("_MaterialId", FLoat) = 0 + + [HideInInspector] _LayerCount("__layerCount", Float) = 2.0 + + [Enum(Mask Alpha, 0, BaseColor Alpha, 1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 1 + [Enum(Use Emissive Color, 0, Use Emissive Mask, 1)] _EmissiveColorMode("Emissive color mode", Float) = 1 + [Enum(None, 0, DoubleSided, 1, DoubleSidedLigthingFlip, 2, DoubleSidedLigthingMirror, 3)] _DoubleSidedMode("Double sided mode", Float) = 0 + } + + HLSLINCLUDE + + #pragma target 5.0 + #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev + + #pragma shader_feature _ALPHATEST_ON + #pragma shader_feature _ _DOUBLESIDED_LIGHTING_FLIP _DOUBLESIDED_LIGHTING_MIRROR + #pragma shader_feature _NORMALMAP + #pragma shader_feature _NORMALMAP_TANGENT_SPACE + #pragma shader_feature _MASKMAP + #pragma shader_feature _SPECULAROCCLUSIONMAP + #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _EMISSIVE_COLOR + #pragma shader_feature _EMISSIVE_COLOR_MAP + #pragma shader_feature _HEIGHTMAP + #pragma shader_feature _HEIGHTMAP_AS_DISPLACEMENT + #pragma shader_feature _LAYERMASKMAP + #pragma shader_feature _ _LAYEREDLIT_3_LAYERS _LAYEREDLIT_4_LAYERS + + //------------------------------------------------------------------------------------- + // Include + //------------------------------------------------------------------------------------- + #include "common.hlsl" + #include "../../ShaderPass/ShaderPass.cs.hlsl" + + ENDHLSL + + SubShader + { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 300 + + // ------------------------------------------------------------------ + // Deferred pass + Pass + { + Name "GBuffer" // Name is not used + Tags { "LightMode" = "GBuffer" } // This will be only for opaque object based on the RenderQueue index + + Cull [_CullMode] + + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + #ifdef SHADER_STAGE_FRAGMENT + + #define SHADERPASS SHADERPASS_GBUFFER + #include "LayeredLitCommon.hlsl" + + #include "../../ShaderPass/ShaderPassGBuffer.hlsl" + + #endif + + ENDHLSL + } + + // ------------------------------------------------------------------ + // Debug pass + Pass + { + Name "Debug" + Tags{ "LightMode" = "DebugViewMaterial" } + + Cull[_CullMode] + + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_DEBUG_VIEW_MATERIAL + #include "LayeredLitCommon.hlsl" + + #include "../../ShaderPass/ShaderPassDebugViewMaterial.hlsl" + + ENDHLSL + } + + // ------------------------------------------------------------------ + // forward pass + Pass + { + Name "Forward" // Name is not used + Tags{ "LightMode" = "Forward" } // This will be only for transparent object based on the RenderQueue index + + Blend[_SrcBlend][_DstBlend] + ZWrite[_ZWrite] + Cull[_CullMode] + + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_FORWARD + #include "LayeredLitCommon.hlsl" + + #include "../../ShaderPass/ShaderPassForward.hlsl" + + ENDHLSL + } + } + + CustomEditor "LayeredLitGUI" +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/GBufferDebug.shader.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLit.shader.meta similarity index 67% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/GBufferDebug.shader.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLit.shader.meta index fbc89430ff3..7a8d6986e06 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/GBufferDebug.shader.meta +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLit.shader.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: beffb29605949f0429be0427db7a9993 -timeCreated: 1475748193 +guid: 81d02e8644315b742b154842a3a2f98c +timeCreated: 1475846632 licenseType: Pro ShaderImporter: defaultTextures: [] diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitCommon.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitCommon.hlsl new file mode 100644 index 00000000000..c56d938dbbd --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitCommon.hlsl @@ -0,0 +1,446 @@ +// GENERATED BY SHADER GRAPH +// Question for shader graph: how to handle dynamic parameter data like matData0 that can change name + +// No guard header! + +#define UNITY_MATERIAL_LIT // Need to be define before including Material.hlsl +#include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl" // This include Material.hlsl +#include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl" +#include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Debug/DebugViewMaterial.hlsl" + +// This files is generated by the ShaderGraph or written by hand + +// Note for ShaderGraph: +// ShaderGraph should generate the vertex shader output to add the variable that may be required +// For example if we require view vector in shader graph, the output must contain positionWS and we calcualte the view vector with it. +// Still some input are mandatory depends on the type of loop. positionWS is mandatory in this current framework. So the ShaderGraph should always generate it. + + +#define PROP_DECL(type, name) type name, name##0, name##1, name##2, name##3; +#define PROP_DECL_TEX2D(name)\ + UNITY_DECLARE_TEX2D(name##0);\ + UNITY_DECLARE_TEX2D_NOSAMPLER(name##1);\ + UNITY_DECLARE_TEX2D_NOSAMPLER(name##2);\ + UNITY_DECLARE_TEX2D_NOSAMPLER(name##3); +#define PROP_SAMPLE(name, textureName, texcoord, swizzle)\ + name##0 = UNITY_SAMPLE_TEX2D_SAMPLER(textureName##0, textureName##0, texcoord).##swizzle; \ + name##1 = UNITY_SAMPLE_TEX2D_SAMPLER(textureName##1, textureName##0, texcoord).##swizzle; \ + name##2 = UNITY_SAMPLE_TEX2D_SAMPLER(textureName##2, textureName##0, texcoord).##swizzle; \ + name##3 = UNITY_SAMPLE_TEX2D_SAMPLER(textureName##3, textureName##0, texcoord).##swizzle; +#define PROP_MUL(name, multiplier, swizzle)\ + name##0 *= multiplier##0.##swizzle; \ + name##1 *= multiplier##1.##swizzle; \ + name##2 *= multiplier##2.##swizzle; \ + name##3 *= multiplier##3.##swizzle; +#define PROP_ASSIGN(name, input, swizzle)\ + name##0 = input##0.##swizzle; \ + name##1 = input##1.##swizzle; \ + name##2 = input##2.##swizzle; \ + name##3 = input##3.##swizzle; +#define PROP_ASSIGN_VALUE(name, input)\ + name##0 = input; \ + name##1 = input; \ + name##2 = input; \ + name##3 = input; +#define PROP_BLEND_COLOR(name, mask) name = BlendLayeredColor(name##0, name##1, name##2, name##3, mask); +#define PROP_BLEND_SCALAR(name, mask) name = BlendLayeredScalar(name##0, name##1, name##2, name##3, mask); + +#define _MAX_LAYER 4 + +#if defined(_LAYEREDLIT_4_LAYERS) +# define _LAYER_COUNT 4 +#elif defined(_LAYEREDLIT_3_LAYERS) +# define _LAYER_COUNT 3 +#else +# define _LAYER_COUNT 2 +#endif + +//------------------------------------------------------------------------------------- +// variable declaration +//------------------------------------------------------------------------------------- + +// Set of users variables +PROP_DECL(float4, _BaseColor); +PROP_DECL_TEX2D(_BaseColorMap); +PROP_DECL(float, _Metallic); +PROP_DECL(float, _Smoothness); +PROP_DECL_TEX2D(_MaskMap); +PROP_DECL_TEX2D(_SpecularOcclusionMap); +PROP_DECL_TEX2D(_NormalMap); +PROP_DECL_TEX2D(_Heightmap); +PROP_DECL(float, _HeightScale); +PROP_DECL(float, _HeightBias); +PROP_DECL(float4, _EmissiveColor); +PROP_DECL(float, _EmissiveIntensity); + +float _AlphaCutoff; +UNITY_DECLARE_TEX2D(_LayerMaskMap); + +//------------------------------------------------------------------------------------- +// Lighting architecture +//------------------------------------------------------------------------------------- + +// TODO: Check if we will have different Varyings based on different pass, not sure about that... + +// Forward +struct Attributes +{ + float3 positionOS : POSITION; + float3 normalOS : NORMAL; + float2 uv0 : TEXCOORD0; + float4 tangentOS : TANGENT; + float4 color : TANGENT; +}; + +struct Varyings +{ + float4 positionHS; + float3 positionWS; + float2 texCoord0; + float3 tangentToWorld[3]; + float4 vertexColor; + +#ifdef SHADER_STAGE_FRAGMENT + #if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) + FRONT_FACE_TYPE cullFace; + #endif +#endif +}; + +struct PackedVaryings +{ + float4 positionHS : SV_Position; + float4 interpolators[6] : TEXCOORD0; + +#ifdef SHADER_STAGE_FRAGMENT + #if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMATIC; + #endif +#endif +}; + +// Function to pack data to use as few interpolator as possible, the ShaderGraph should generate these functions +PackedVaryings PackVaryings(Varyings input) +{ + PackedVaryings output; + output.positionHS = input.positionHS; + output.interpolators[0].xyz = input.positionWS.xyz; + output.interpolators[0].w = input.texCoord0.x; + output.interpolators[1].xyz = input.tangentToWorld[0]; + output.interpolators[2].xyz = input.tangentToWorld[1]; + output.interpolators[3].xyz = input.tangentToWorld[2]; + output.interpolators[4].x = input.texCoord0.y; + output.interpolators[4].yzw = float3(0.0, 0.0, 0.0); + output.interpolators[5] = input.vertexColor; + + return output; +} + +Varyings UnpackVaryings(PackedVaryings input) +{ + Varyings output; + output.positionHS = input.positionHS; + output.positionWS.xyz = input.interpolators[0].xyz; + output.texCoord0.x = input.interpolators[0].w; + output.texCoord0.y = input.interpolators[4].x; + output.tangentToWorld[0] = input.interpolators[1].xyz; + output.tangentToWorld[1] = input.interpolators[2].xyz; + output.tangentToWorld[2] = input.interpolators[3].xyz; + output.vertexColor = input.interpolators[5]; + +#ifdef SHADER_STAGE_FRAGMENT + #if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) + output.cullFace = input.cullFace; + #endif +#endif + + return output; +} + +// TODO: Here we will also have all the vertex deformation (GPU skinning, vertex animation, morph target...) or we will need to generate a compute shaders instead (better! but require work to deal with unpacking like fp16) +PackedVaryings VertDefault(Attributes input) +{ + Varyings output; + + output.positionWS = TransformObjectToWorld(input.positionOS); + // TODO deal with camera center rendering and instancing (This is the reason why we always perform tow steps transform to clip space + instancing matrix) + output.positionHS = TransformWorldToHClip(output.positionWS); + + float3 normalWS = TransformObjectToWorldNormal(input.normalOS); + + output.texCoord0 = input.uv0; + + float4 tangentWS = float4(TransformObjectToWorldDir(input.tangentOS.xyz), input.tangentOS.w); + + float3x3 tangentToWorld = CreateTangentToWorld(normalWS, tangentWS.xyz, tangentWS.w); + output.tangentToWorld[0].xyz = tangentToWorld[0]; + output.tangentToWorld[1].xyz = tangentToWorld[1]; + output.tangentToWorld[2].xyz = tangentToWorld[2]; + + output.vertexColor = input.color; + + return PackVaryings(output); +} + + +//------------------------------------------------------------------------------------- +// Fill SurfaceData/Lighting data function +//------------------------------------------------------------------------------------- + +#if SHADER_STAGE_FRAGMENT + +float3 BlendLayeredColor(float3 rgb0, float3 rgb1, float3 rgb2, float3 rgb3, float weight[4]) +{ + float3 result = float3(0.0, 0.0, 0.0); + + result = rgb0 * weight[0] + rgb1 * weight[1]; +#if _LAYER_COUNT >= 3 + result += (rgb2 * weight[2]); +#endif +#if _LAYER_COUNT >= 4 + result += rgb3 * weight[3]; +#endif + + return result; +} + +float3 BlendLayeredNormal(float3 normal0, float3 normal1, float3 normal2, float3 normal3, float weight[4]) +{ + float3 result = float3(0.0, 0.0, 0.0); + + // TODO : real normal map blending function + result = normal0 * weight[0] + normal1 * weight[1]; +#if _LAYER_COUNT >= 3 + result += normal2 * weight[2]; +#endif +#if _LAYER_COUNT >= 4 + result += normal3 * weight[3]; +#endif + + return result; +} + +float BlendLayeredScalar(float x0, float x1, float x2, float x3, float weight[4]) +{ + float result = 0.0; + + result = x0 * weight[0] + x1 * weight[1]; +#if _LAYER_COUNT >= 3 + result += x2 * weight[2]; +#endif +#if _LAYER_COUNT >= 4 + result += x3 * weight[3]; +#endif + + return result; +} + +void ComputeMaskWeights(float4 inputMasks, out float outWeights[_MAX_LAYER]) +{ + float masks[_MAX_LAYER]; + masks[0] = inputMasks.r; + masks[1] = inputMasks.g; + masks[2] = inputMasks.b; + masks[3] = inputMasks.a; + + // calculate weight of each layers + float left = 1.0f; + + // ATTRIBUTE_UNROLL + for (int i = _LAYER_COUNT - 1; i > 0; --i) + { + outWeights[i] = masks[i] * left; + left -= outWeights[i]; + } + outWeights[0] = left; +} + +void GetSurfaceAndBuiltinData(Varyings input, out SurfaceData surfaceData, out BuiltinData builtinData) +{ + float4 maskValues = float4(1.0, 1.0, 1.0, 1.0);// input.vertexColor; + +#ifdef _LAYERMASKMAP + float4 maskMap = UNITY_SAMPLE_TEX2D(_LayerMaskMap, input.texCoord0); + maskValues *= maskMap; +#endif + + float weights[_MAX_LAYER]; + ComputeMaskWeights(maskValues, weights); + + PROP_DECL(float3, baseColor); + PROP_SAMPLE(baseColor, _BaseColorMap, input.texCoord0, rgb); + PROP_MUL(baseColor, _BaseColor, rgb); + PROP_BLEND_COLOR(baseColor, weights); + + surfaceData.baseColor = baseColor; + + PROP_DECL(float, alpha); +#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + PROP_ASSIGN(alpha, _BaseColor, a); +#else + PROP_SAMPLE(alpha, _BaseColorMap, input.texCoord0, a); + PROP_MUL(alpha, _BaseColor, a); +#endif + PROP_BLEND_SCALAR(alpha, weights); + +#ifdef _ALPHATEST_ON + clip(alpha - _AlphaCutoff); +#endif + + builtinData.opacity = alpha; + + PROP_DECL(float, specularOcclusion); +#ifdef _SPECULAROCCLUSIONMAP + // TODO: Do something. For now just take alpha channel + PROP_SAMPLE(specularOcclusion, _SpecularOcclusionMap, input.texCoord0, a); +#else + // Horizon Occlusion for Normal Mapped Reflections: http://marmosetco.tumblr.com/post/81245981087 + //surfaceData.specularOcclusion = saturate(1.0 + horizonFade * dot(r, input.tangentToWorld[2].xyz); + // smooth it + //surfaceData.specularOcclusion *= surfaceData.specularOcclusion; + PROP_ASSIGN_VALUE(specularOcclusion, 1.0); +#endif + PROP_BLEND_SCALAR(specularOcclusion, weights); + surfaceData.specularOcclusion = specularOcclusion; + + // TODO: think about using BC5 + float3 vertexNormalWS = input.tangentToWorld[2].xyz; + +#ifdef _NORMALMAP + #ifdef _NORMALMAP_TANGENT_SPACE + float3 normalTS0 = UnpackNormalAG(UNITY_SAMPLE_TEX2D_SAMPLER(_NormalMap0, _NormalMap0, input.texCoord0)); + float3 normalTS1 = UnpackNormalAG(UNITY_SAMPLE_TEX2D_SAMPLER(_NormalMap1, _NormalMap0, input.texCoord0)); + float3 normalTS2 = UnpackNormalAG(UNITY_SAMPLE_TEX2D_SAMPLER(_NormalMap2, _NormalMap0, input.texCoord0)); + float3 normalTS3 = UnpackNormalAG(UNITY_SAMPLE_TEX2D_SAMPLER(_NormalMap3, _NormalMap0, input.texCoord0)); + + float3 normalTS = BlendLayeredNormal(normalTS0, normalTS1, normalTS2, normalTS3, weights); + + surfaceData.normalWS = TransformTangentToWorld(normalTS, input.tangentToWorld); + #else // Object space (TODO: We need to apply the world rotation here!) + surfaceData.normalWS = UNITY_SAMPLE_TEX2D(_NormalMap, input.texCoord0).rgb; + #endif +#else + surfaceData.normalWS = vertexNormalWS; +#endif + +#if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) + #ifdef _DOUBLESIDED_LIGHTING_FLIP + float3 oppositeNormalWS = -surfaceData.normalWS; + #else + // Mirror the normal with the plane define by vertex normal + float3 oppositeNormalWS = reflect(surfaceData.normalWS, vertexNormalWS); + #endif + // TODO : Test if GetOdddNegativeScale() is necessary here in case of normal map, as GetOdddNegativeScale is take into account in CreateTangentToWorld(); + surfaceData.normalWS = IS_FRONT_VFACE(input.cullFace, GetOdddNegativeScale() >= 0.0 ? surfaceData.normalWS : oppositeNormalWS, -GetOdddNegativeScale() >= 0.0 ? surfaceData.normalWS : oppositeNormalWS); +#endif + + + PROP_DECL(float, perceptualSmoothness); +#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + PROP_SAMPLE(perceptualSmoothness, _BaseColorMap, input.texCoord0, a); +#elif defined(_MASKMAP) + PROP_SAMPLE(perceptualSmoothness, _MaskMap, input.texCoord0, a); +#else + PROP_ASSIGN_VALUE(perceptualSmoothness, 1.0); +#endif + PROP_MUL(perceptualSmoothness, _Smoothness, r); + PROP_BLEND_SCALAR(perceptualSmoothness, weights); + + surfaceData.perceptualSmoothness = perceptualSmoothness; + + surfaceData.materialId = 0; + + // MaskMap is Metallic, Ambient Occlusion, (Optional) - emissive Mask, Optional - Smoothness (in alpha) + PROP_DECL(float, metallic); + PROP_DECL(float, ambientOcclusion); +#ifdef _MASKMAP + PROP_SAMPLE(metallic, _MaskMap, input.texCoord0, a); + PROP_SAMPLE(ambientOcclusion, _MaskMap, input.texCoord0, g); +#else + PROP_ASSIGN_VALUE(metallic, 1.0); + PROP_ASSIGN_VALUE(ambientOcclusion, 1.0); +#endif + PROP_MUL(metallic, _Metallic, r); + + PROP_BLEND_SCALAR(metallic, weights); + PROP_BLEND_SCALAR(ambientOcclusion, weights); + + surfaceData.metallic = metallic; + surfaceData.ambientOcclusion = ambientOcclusion; + + surfaceData.tangentWS = float3(1.0, 0.0, 0.0); + surfaceData.anisotropy = 0; + surfaceData.specular = 0.04; + + surfaceData.subSurfaceRadius = 1.0; + surfaceData.thickness = 0.0; + surfaceData.subSurfaceProfile = 0; + + surfaceData.coatNormalWS = float3(1.0, 0.0, 0.0); + surfaceData.coatPerceptualSmoothness = 1.0; + surfaceData.specularColor = float3(0.0, 0.0, 0.0); + + // Builtin Data + + // TODO: Sample lightmap/lightprobe/volume proxy + // This should also handle projective lightmap + // Note that data input above can be use to sample into lightmap (like normal) + builtinData.bakeDiffuseLighting = float3(0.0, 0.0, 0.0);// tex2D(_DiffuseLightingMap, input.texCoord0).rgb; + + // If we chose an emissive color, we have a dedicated texture for it and don't use MaskMap + PROP_DECL(float3, emissiveColor); +#ifdef _EMISSIVE_COLOR + #ifdef _EMISSIVE_COLOR_MAP + PROP_SAMPLE(emissiveColor, _EmissiveColorMap, input.texCoord0, rgb); + #else + PROP_ASSIGN(emissiveColor, _EmissiveColor, rgb); + #endif +#elif defined(_MASKMAP) // If we have a MaskMap, use emissive slot as a mask on baseColor + PROP_SAMPLE(emissiveColor, _MaskMap, input.texCoord0, bbb); + PROP_MUL(emissiveColor, baseColor, rgb); +#else + PROP_ASSIGN_VALUE(emissiveColor, float3(0.0, 0.0, 0.0)); +#endif + PROP_BLEND_COLOR(emissiveColor, weights); + builtinData.emissiveColor = emissiveColor; + + PROP_DECL(float, emissiveIntensity); + PROP_ASSIGN(emissiveIntensity, _EmissiveIntensity, r); + PROP_BLEND_SCALAR(emissiveIntensity, weights); + builtinData.emissiveIntensity = emissiveIntensity; + + builtinData.velocity = float2(0.0, 0.0); + + builtinData.distortion = float2(0.0, 0.0); + builtinData.distortionBlur = 0.0; +} + +void GetVaryingsDataDebug(uint paramId, Varyings input, inout float3 result, inout bool needLinearToSRGB) +{ + switch (paramId) + { + case DEBUGVIEW_VARYING_DEPTH: + // TODO: provide a customize parameter (like a slider) + float linearDepth = frac(LinearEyeDepth(input.positionHS.z, _ZBufferParams) * 0.1); + result = linearDepth.xxx; + break; + case DEBUGVIEW_VARYING_TEXCOORD0: + // TODO: require a remap + result = float3(input.texCoord0, 0.0); + break; + case DEBUGVIEW_VARYING_VERTEXNORMALWS: + result = input.tangentToWorld[2].xyz * 0.5 + 0.5; + break; + case DEBUGVIEW_VARYING_VERTEXTANGENTWS: + result = input.tangentToWorld[0].xyz * 0.5 + 0.5; + break; + case DEBUGVIEW_VARYING_VERTEXBITANGENTWS: + result = input.tangentToWorld[1].xyz * 0.5 + 0.5; + break; + case DEBUGVIEW_VARYING_VERTEXCOLOR: + result = input.vertexColor.xyz; + break; + } +} + +#endif // #if SHADER_STAGE_FRAGMENT diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitCommon.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitCommon.hlsl.meta new file mode 100644 index 00000000000..c5aae2ac7b5 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitCommon.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4475f12491047e54d9ddd0a61e36ead2 +timeCreated: 1476924487 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitUI.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitUI.cs new file mode 100644 index 00000000000..563d8203b94 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitUI.cs @@ -0,0 +1,430 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace UnityEditor +{ + internal class LayeredLitGUI : LitGUI + { + private class Styles + { + public readonly GUIContent[] materialLayerLabels = + { + new GUIContent("Material Layer 0"), + new GUIContent("Material Layer 1"), + new GUIContent("Material Layer 2"), + new GUIContent("Material Layer 3"), + }; + public readonly GUIContent syncButton = new GUIContent("Re-Synchronize Layers", "Re-synchronize all layers's properties with the referenced Material"); + public readonly GUIContent layers = new GUIContent("Layers"); + public readonly GUIContent layerMapMask = new GUIContent("Layer Mask", "Layer mask (multiplied by vertex color)"); + public readonly GUIContent layerCount = new GUIContent("Layer Count", "Number of layers."); + } + + static Styles s_Styles = null; + private static Styles styles { get { if (s_Styles == null) s_Styles = new Styles(); return s_Styles; } } + + // Needed for json serialization to work + [Serializable] + internal struct SerializeableGUIDs + { + public string[] GUIDArray; + } + + private const int kMaxLayerCount = 4; + private const int kSyncButtonWidth = 58; + private string kLayerMaskMap = "_LayerMaskMap"; + private string kLayerCount = "_LayerCount"; + + private Material[] m_MaterialLayers = new Material[kMaxLayerCount]; + + MaterialProperty layerCountProperty = null; + MaterialProperty layerMaskMapProperty = null; + + int layerCount + { + set { layerCountProperty.floatValue = (float)value; } + get { return (int)layerCountProperty.floatValue; } + } + + void SynchronizeAllLayersProperties() + { + for (int i = 0; i < layerCount; ++i) + { + SynchronizeLayerProperties(i); + } + } + + void SynchronizeLayerProperties(int layerIndex) + { + Material material = m_MaterialEditor.target as Material; + Material layerMaterial = m_MaterialLayers[layerIndex]; + + if (layerMaterial != null) + { + Shader layerShader = layerMaterial.shader; + int propertyCount = ShaderUtil.GetPropertyCount(layerShader); + for (int i = 0; i < propertyCount; ++i) + { + string propertyName = ShaderUtil.GetPropertyName(layerShader, i); + string layerPropertyName = propertyName + layerIndex; + if (material.HasProperty(layerPropertyName)) + { + ShaderUtil.ShaderPropertyType type = ShaderUtil.GetPropertyType(layerShader, i); + switch (type) + { + case ShaderUtil.ShaderPropertyType.Color: + { + material.SetColor(layerPropertyName, layerMaterial.GetColor(propertyName)); + break; + } + case ShaderUtil.ShaderPropertyType.Float: + case ShaderUtil.ShaderPropertyType.Range: + { + material.SetFloat(layerPropertyName, layerMaterial.GetFloat(propertyName)); + break; + } + case ShaderUtil.ShaderPropertyType.Vector: + { + material.SetVector(layerPropertyName, layerMaterial.GetVector(propertyName)); + break; + } + case ShaderUtil.ShaderPropertyType.TexEnv: + { + material.SetTexture(layerPropertyName, layerMaterial.GetTexture(propertyName)); + break; + } + } + } + } + } + } + + void InitializeMaterialLayers(AssetImporter materialImporter) + { + if (materialImporter.userData != string.Empty) + { + SerializeableGUIDs layersGUID = JsonUtility.FromJson(materialImporter.userData); + if (layersGUID.GUIDArray.Length > 0) + { + m_MaterialLayers = new Material[layersGUID.GUIDArray.Length]; + for (int i = 0; i < layersGUID.GUIDArray.Length; ++i) + { + m_MaterialLayers[i] = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(layersGUID.GUIDArray[i]), typeof(Material)) as Material; + } + } + } + } + + void SaveMaterialLayers(AssetImporter materialImporter) + { + SerializeableGUIDs layersGUID; + layersGUID.GUIDArray = new string[m_MaterialLayers.Length]; + for (int i = 0; i < m_MaterialLayers.Length; ++i) + { + if (m_MaterialLayers[i] != null) + layersGUID.GUIDArray[i] = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_MaterialLayers[i].GetInstanceID())); + } + + materialImporter.userData = JsonUtility.ToJson(layersGUID); + } + + bool CheckInputOptionConsistency(string optionName, string[] shortNames, ref string outValueNames) + { + bool result = true; + outValueNames = ""; + for (int i = 0; i < layerCount; ++i) + { + Material layer = m_MaterialLayers[i]; + if (layer != null) + { + int currentValue = (int)layer.GetFloat(optionName); // All options are in fact enums + Debug.Assert(currentValue < shortNames.Length); + outValueNames += shortNames[currentValue] + " "; + + for (int j = i + 1; j < layerCount; ++j) + { + Material otherLayer = m_MaterialLayers[j]; + if (otherLayer != null) + { + if (currentValue != (int)otherLayer.GetFloat(optionName)) + { + result = false; + } + } + } + } + else + { + outValueNames += "X "; + } + } + + return result; + } + + bool CheckInputMapConsistency(string mapName, ref string outValueNames) + { + bool result = true; + outValueNames = ""; + for (int i = 0; i < layerCount; ++i) + { + Material layer = m_MaterialLayers[i]; + if (layer != null) + { + bool currentValue = layer.GetTexture(mapName) != null; + outValueNames += (currentValue ? "Y" : "N") + " "; + + for (int j = i + 1; j < layerCount; ++j) + { + Material otherLayer = m_MaterialLayers[j]; + if (otherLayer != null) + { + bool otherValue = otherLayer.GetTexture(mapName) != null; + if (currentValue != otherValue) + { + result = false; + } + } + } + } + else + { + outValueNames += "N "; + } + } + + return result; + } + + void CheckLayerConsistency() + { + string optionValueNames = ""; + // We need to check consistency between all layers. + // Each input options and each input maps might can result in different #defines in the shader so all of them need to be consistent + // otherwise the result will be undetermined + + // Input options consistency + string[] smoothnessSourceShortNames = { "Mask", "Albedo" }; + string[] emissiveModeShortNames = { "Color", "Mask" }; + string[] normalMapShortNames = { "Tan", "Obj" }; + string[] heightMapShortNames = { "Parallax", "Disp" }; + + string warningInputOptions = ""; + if (!CheckInputOptionConsistency(kSmoothnessTextureChannelProp, smoothnessSourceShortNames, ref optionValueNames)) + { + warningInputOptions += "Smoothness Source: " + optionValueNames + "\n"; + } + if (!CheckInputOptionConsistency(kEmissiveColorMode, emissiveModeShortNames, ref optionValueNames)) + { + warningInputOptions += "Emissive Mode: " + optionValueNames + "\n"; + } + if (!CheckInputOptionConsistency(kNormalMapSpace, normalMapShortNames, ref optionValueNames)) + { + warningInputOptions += "Normal Map Space: " + optionValueNames + "\n"; + } + if (!CheckInputOptionConsistency(kHeightMapMode, heightMapShortNames, ref optionValueNames)) + { + warningInputOptions += "Height Map Mode: " + optionValueNames + "\n"; + } + + if (warningInputOptions != string.Empty) + { + warningInputOptions = "Input Option Consistency Error:\n" + warningInputOptions; + } + + // Check input maps consistency + string warningInputMaps = ""; + + if (!CheckInputMapConsistency(kNormalMap, ref optionValueNames)) + { + warningInputMaps += "Normal Map: " + optionValueNames + "\n"; + } + if (!CheckInputMapConsistency(kMaskMap, ref optionValueNames)) + { + warningInputMaps += "Mask Map: " + optionValueNames + "\n"; + } + if (!CheckInputMapConsistency(kspecularOcclusionMap, ref optionValueNames)) + { + warningInputMaps += "Specular Occlusion Map: " + optionValueNames + "\n"; + } + if (!CheckInputMapConsistency(kEmissiveColorMap, ref optionValueNames)) + { + warningInputMaps += "Emissive Color Map: " + optionValueNames + "\n"; + } + if (!CheckInputMapConsistency(kHeightMap, ref optionValueNames)) + { + warningInputMaps += "Height Map: " + optionValueNames + "\n"; + } + + if (warningInputMaps != string.Empty) + { + warningInputMaps = "Input Maps Consistency Error:\n" + warningInputMaps; + if (warningInputOptions != string.Empty) + warningInputMaps = "\n" + warningInputMaps; + } + + string warning = warningInputOptions + warningInputMaps; + if (warning != string.Empty) + { + EditorGUILayout.HelpBox(warning, MessageType.Error); + } + } + + void SynchronizeInputOptions() + { + Material material = m_MaterialEditor.target as Material; + + // We synchronize input options with the firsts non null Layer (all layers should have consistent options) + Material firstLayer = null; + int i = 0; + while (i < layerCount && !(firstLayer = m_MaterialLayers[i])) ++i; + + if (firstLayer != null) + { + material.SetFloat(kSmoothnessTextureChannelProp, firstLayer.GetFloat(kSmoothnessTextureChannelProp)); + material.SetFloat(kEmissiveColorMode, firstLayer.GetFloat(kEmissiveColorMode)); + material.SetFloat(kNormalMapSpace, firstLayer.GetFloat(kNormalMapSpace)); + material.SetFloat(kHeightMapMode, firstLayer.GetFloat(kHeightMapMode)); + } + } + + bool LayersGUI(AssetImporter materialImporter) + { + Material material = m_MaterialEditor.target as Material; + + bool layerChanged = false; + + EditorGUI.indentLevel++; + GUILayout.Label(styles.layers, EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + int newLayerCount = EditorGUILayout.IntSlider(styles.layerCount, (int)layerCountProperty.floatValue, 2, 4); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(material, "Change layer count"); + layerCountProperty.floatValue = (float)newLayerCount; + SynchronizeAllLayersProperties(); + layerChanged = true; + } + + m_MaterialEditor.TexturePropertySingleLine(styles.layerMapMask, layerMaskMapProperty); + + for (int i = 0; i < layerCount; i++) + { + EditorGUI.BeginChangeCheck(); + m_MaterialLayers[i] = EditorGUILayout.ObjectField(styles.materialLayerLabels[i], m_MaterialLayers[i], typeof(Material), true) as Material; + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(materialImporter, "Change layer material"); + SynchronizeLayerProperties(i); + layerChanged = true; + } + } + + EditorGUILayout.Space(); + GUILayout.BeginHorizontal(); + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button(styles.syncButton)) + { + SynchronizeAllLayersProperties(); + layerChanged = true; + } + } + GUILayout.EndHorizontal(); + + EditorGUI.indentLevel--; + + return layerChanged; + } + + protected override void SetupKeywordsForInputMaps(Material material) + { + // Find first non null layer + int i = 0; + while (i < layerCount && (m_MaterialLayers[i] == null)) ++i; + + if (i < layerCount) + { + SetKeyword(material, "_NORMALMAP", material.GetTexture(kNormalMap + i)); + SetKeyword(material, "_MASKMAP", material.GetTexture(kMaskMap + i)); + SetKeyword(material, "_SPECULAROCCLUSIONMAP", material.GetTexture(kspecularOcclusionMap + i)); + SetKeyword(material, "_EMISSIVE_COLOR_MAP", material.GetTexture(kEmissiveColorMap + i)); + SetKeyword(material, "_HEIGHTMAP", material.GetTexture(kHeightMap + i)); + } + + SetKeyword(material, "_LAYERMASKMAP", material.GetTexture(kLayerMaskMap)); + } + + void SetupMaterialForLayers(Material material) + { + if (layerCount == 4) + { + SetKeyword(material, "_LAYEREDLIT_4_LAYERS", true); + SetKeyword(material, "_LAYEREDLIT_3_LAYERS", false); + } + else if (layerCount == 3) + { + SetKeyword(material, "_LAYEREDLIT_4_LAYERS", false); + SetKeyword(material, "_LAYEREDLIT_3_LAYERS", true); + } + else + { + SetKeyword(material, "_LAYEREDLIT_4_LAYERS", false); + SetKeyword(material, "_LAYEREDLIT_3_LAYERS", false); + } + } + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) + { + FindOptionProperties(props); + layerMaskMapProperty = FindProperty(kLayerMaskMap, props); + layerCountProperty = FindProperty(kLayerCount, props); + + m_MaterialEditor = materialEditor; + + m_MaterialEditor.serializedObject.Update(); + + Material material = m_MaterialEditor.target as Material; + AssetImporter materialImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(material.GetInstanceID())); + + InitializeMaterialLayers(materialImporter); + + bool optionsChanged = false; + EditorGUI.BeginChangeCheck(); + { + ShaderOptionsGUI(); + EditorGUILayout.Space(); + } + if (EditorGUI.EndChangeCheck()) + { + optionsChanged = true; + } + + bool layerChanged = LayersGUI(materialImporter); + + CheckLayerConsistency(); + + if (layerChanged || optionsChanged) + { + SynchronizeInputOptions(); + + foreach (var obj in m_MaterialEditor.targets) + { + SetupMaterial((Material)obj); + SetupMaterialForLayers((Material)obj); + } + + SaveMaterialLayers(materialImporter); + } + + m_MaterialEditor.serializedObject.ApplyModifiedProperties(); + + if (layerChanged) + { + materialImporter.SaveAndReimport(); + } + } + } +} // namespace UnityEditor diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitUI.cs.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitUI.cs.meta new file mode 100644 index 00000000000..87fc8a717fe --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/LayeredLit/LayeredLitUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 25870545853609a4abdc1898940f4406 +timeCreated: 1475845767 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit.meta new file mode 100644 index 00000000000..199a0338537 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bc7a695b2cdc540469c664a11eb502d0 +folderAsset: yes +timeCreated: 1476653183 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs new file mode 100644 index 00000000000..956e6a21ebe --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs @@ -0,0 +1,8474 @@ +using UnityEngine; +using UnityEngine.Rendering; +using System; + +//----------------------------------------------------------------------------- +// structure definition +//----------------------------------------------------------------------------- +namespace UnityEngine.Experimental.ScriptableRenderLoop +{ + namespace Lit + { + [GenerateHLSL(PackingRules.Exact)] + public enum MaterialId + { + LitStandard = 0, + LitSSS = 1, + LitClearCoat = 2, + LitSpecular = 3, + LitAniso = 4 // Should be the last as it is not setup by the users but generated based on anisotropy property + }; + + //----------------------------------------------------------------------------- + // SurfaceData + //----------------------------------------------------------------------------- + + // Main structure that store the user data (i.e user input of master node in material graph) + [GenerateHLSL(PackingRules.Exact, false, true, 1000)] + public struct SurfaceData + { + [SurfaceDataAttributes("Base Color")] + public Vector3 baseColor; + [SurfaceDataAttributes("Specular Occlusion")] + public float specularOcclusion; + + [SurfaceDataAttributes("Normal")] + public Vector3 normalWS; + [SurfaceDataAttributes("Smoothness")] + public float perceptualSmoothness; + [SurfaceDataAttributes("Material ID")] + public MaterialId materialId; + + [SurfaceDataAttributes("Ambient Occlusion")] + public float ambientOcclusion; + + // MaterialId dependent attribute + + // standard + [SurfaceDataAttributes("Tangent")] + public Vector3 tangentWS; + [SurfaceDataAttributes("Anisotropy")] + public float anisotropy; // anisotropic ratio(0->no isotropic; 1->full anisotropy in tangent direction) + [SurfaceDataAttributes("Metallic")] + public float metallic; + [SurfaceDataAttributes("Specular")] + public float specular; // 0.02, 0.04, 0.16, 0.2 + + // SSS + [SurfaceDataAttributes("SubSurface Radius")] + public float subSurfaceRadius; + [SurfaceDataAttributes("Thickness")] + public float thickness; + [SurfaceDataAttributes("SubSurface Profile")] + public int subSurfaceProfile; + + // Clearcoat + [SurfaceDataAttributes("Coat Normal")] + public Vector3 coatNormalWS; + [SurfaceDataAttributes("Coat Smoothness")] + public float coatPerceptualSmoothness; + + // SpecColor + [SurfaceDataAttributes("Specular Color")] + public Vector3 specularColor; + }; + + //----------------------------------------------------------------------------- + // BSDFData + //----------------------------------------------------------------------------- + + [GenerateHLSL(PackingRules.Exact, false, true, 1030)] + public struct BSDFData + { + public Vector3 diffuseColor; + + public Vector3 fresnel0; + + public float specularOcclusion; + + public Vector3 normalWS; + public float perceptualRoughness; + public float roughness; + public float materialId; + + // MaterialId dependent attribute + + // standard + public Vector3 tangentWS; + public Vector3 bitangentWS; + public float roughnessT; + public float roughnessB; + public float anisotropy; + + // fold into fresnel0 + + // SSS + public float subSurfaceRadius; + public float thickness; + public int subSurfaceProfile; + + // Clearcoat + public Vector3 coatNormalWS; + public float coatRoughness; + + // SpecColor + // fold into fresnel0 + }; + + //----------------------------------------------------------------------------- + // RenderLoop management + //----------------------------------------------------------------------------- + + [GenerateHLSL(PackingRules.Exact)] + public enum GBufferMaterial + { + Count = 3 + }; + + public class RenderLoop : Object + { + //----------------------------------------------------------------------------- + // GBuffer management + //----------------------------------------------------------------------------- + + #if (VELOCITY_IN_GBUFFER) + public const int s_GBufferCount = (int)GBufferMaterial.Count + 2; // +1 for emissive buffer + #else + public const int s_GBufferCount = (int)GBufferMaterial.Count + 1; + #endif + + public int GetGBufferCount() { return s_GBufferCount; } + + public RenderTextureFormat[] RTFormat = + { + RenderTextureFormat.ARGB32, + RenderTextureFormat.ARGB2101010, + RenderTextureFormat.ARGB32, + #if (VELOCITY_IN_GBUFFER) + RenderTextureFormat.RGHalf, + #endif + RenderTextureFormat.RGB111110Float + }; + + public RenderTextureReadWrite[] RTReadWrite = + { + RenderTextureReadWrite.sRGB, + RenderTextureReadWrite.Linear, + RenderTextureReadWrite.Linear, + #if (VELOCITY_IN_GBUFFER) + RenderTextureReadWrite.Linear, + #endif + RenderTextureReadWrite.Linear + }; + + //----------------------------------------------------------------------------- + // Init precomputed texture + //----------------------------------------------------------------------------- + + public bool isInit; + + // For image based lighting + private Material m_InitPreFGD; + private RenderTexture m_PreIntegratedFGD; + + // For area lighting + private Texture2D m_LtcGGXMatrix; + private Texture2D m_LtcGGXMagnitude; + const int k_LtcLUTMatrixDim = 3; // size of the matrix (3x3) + const int k_LtcLUTResolution = 64; + + Material CreateEngineMaterial(string shaderPath) + { + Material mat = new Material(Shader.Find(shaderPath) as Shader); + mat.hideFlags = HideFlags.HideAndDontSave; + return mat; + } + + Texture2D CreateLUT(int width, int height, TextureFormat format, Color[] pixels) + { + Texture2D tex = new Texture2D(width, height, format, false /*mipmap*/, true /*linear*/); + tex.hideFlags = HideFlags.HideAndDontSave; + tex.wrapMode = TextureWrapMode.Clamp; + tex.SetPixels(pixels); + tex.Apply(); + return tex; + } + + // Load LUT with one scalar in alpha of a tex2D + Texture2D LoadLUT(TextureFormat format, float[] LUTScalar) + { + const int count = k_LtcLUTResolution * k_LtcLUTResolution; + Color[] pixels = new Color[count]; + + // amplitude + for (int i = 0; i < count; i++) + { + pixels[i] = new Color(0, 0, 0, LUTScalar[i]); + } + + return CreateLUT(k_LtcLUTResolution, k_LtcLUTResolution, format, pixels); + } + + // Load LUT with 3x3 matrix in RGBA of a tex2D (some part are zero) + Texture2D LoadLUT(TextureFormat format, double[,] LUTTransformInv) + { + const int count = k_LtcLUTResolution * k_LtcLUTResolution; + Color[] pixels = new Color[count]; + + // transformInv + for (int i = 0; i < count; i++) + { + // Only columns 0, 2, 4 and 6 contain interesting values (at least in the case of GGX). + pixels[i] = new Color( (float)LUTTransformInv[i, 0], + (float)LUTTransformInv[i, 2], + (float)LUTTransformInv[i, 4], + (float)LUTTransformInv[i, 6]); + } + + return CreateLUT(k_LtcLUTResolution, k_LtcLUTResolution, format, pixels); + } + + public void Rebuild() + { + m_InitPreFGD = CreateEngineMaterial("Hidden/Unity/PreIntegratedFGD"); + m_PreIntegratedFGD = new RenderTexture(128, 128, 0, RenderTextureFormat.ARGBHalf); + + m_LtcGGXMatrix = LoadLUT(TextureFormat.RGBAHalf, s_LtcGGXMatrixData); + m_LtcGGXMagnitude = LoadLUT(TextureFormat.RGBAHalf, s_LtcGGXMagnitudeData); + + isInit = false; + } + + public void OnDisable() + { + if (m_InitPreFGD) DestroyImmediate(m_InitPreFGD); + // TODO: how to delete RenderTexture ? + isInit = false; + } + + public void RenderInit(UnityEngine.Experimental.Rendering.RenderLoop renderLoop) + { + var cmd = new CommandBuffer(); + cmd.name = "Init PreFGD"; + cmd.Blit(null, new RenderTargetIdentifier(m_PreIntegratedFGD), m_InitPreFGD, 0); + renderLoop.ExecuteCommandBuffer(cmd); + cmd.Dispose(); + + isInit = true; + } + + public void Bind() + { + Shader.SetGlobalTexture("_PreIntegratedFGD", m_PreIntegratedFGD); + Shader.SetGlobalTexture("_LtcGGXMatrix", m_LtcGGXMatrix); + Shader.SetGlobalTexture("_LtcGGXMagnitude", m_LtcGGXMagnitude); + } + + //----------------------------------------------------------------------------- + // Area light Look up table (fit from GGX with smith joint visibility + //----------------------------------------------------------------------------- + + // Precomputed table - This table is precompute for squared roughness and normalize so that last member is 1 and don't need to be store in a texture. + // It have been generated from a GGX BRDF with Smith-Correlated visibility term. + static double[,] s_LtcGGXMatrixData = new double[k_LtcLUTResolution * k_LtcLUTResolution, k_LtcLUTMatrixDim * k_LtcLUTMatrixDim] + { + {499.999756, -0.000000, 0.000000, -0.000000, 499.999756, -0.000000, 0.000000, -0.000000, 1.000000}, + {499.999756, -0.000000, 0.000000, -0.000000, 499.999756, -0.000000, 0.000000, -0.000000, 1.000000}, + {496.124756, -0.000000, 0.000000, -0.000000, 496.124756, -0.000000, 0.000000, -0.000000, 1.000000}, + {220.499603, -0.000000, 0.000000, -0.000000, 220.499603, -0.000000, 0.000000, -0.000000, 1.000000}, + {124.030647, -0.000000, 0.000000, -0.000000, 124.030647, -0.000000, 0.000000, -0.000000, 1.000000}, + {79.379128, -0.000000, 0.000000, -0.000000, 79.379128, -0.000000, 0.000000, -0.000000, 1.000000}, + {55.123638, -0.000000, 0.000000, -0.000000, 55.123638, -0.000000, 0.000000, -0.000000, 1.000000}, + {40.498169, -0.000000, 0.000000, -0.000000, 40.498169, -0.000000, 0.000000, -0.000000, 1.000000}, + {31.005251, -0.000000, 0.000000, -0.000000, 31.005251, -0.000000, 0.000000, -0.000000, 1.000000}, + {24.496883, -0.000000, 0.000000, -0.000000, 24.496883, -0.000000, 0.000000, -0.000000, 1.000000}, + {19.841213, -0.000000, 0.000000, -0.000000, 19.841213, -0.000000, 0.000000, -0.000000, 1.000000}, + {16.396168, -0.000000, 0.000000, -0.000000, 16.396168, -0.000000, 0.000000, -0.000000, 1.000000}, + {13.775769, -0.000000, 0.000000, -0.000000, 13.775769, -0.000000, 0.000000, -0.000000, 1.000000}, + {11.736223, -0.000000, 0.000000, -0.000000, 11.736223, -0.000000, 0.000000, -0.000000, 1.000000}, + {10.117792, -0.000000, 0.000000, -0.000000, 10.117792, -0.000000, 0.000000, -0.000000, 1.000000}, + {8.811788, -0.000000, 0.000000, -0.000000, 8.811788, -0.000000, 0.000000, -0.000000, 1.000000}, + {7.742715, -0.000000, 0.000000, -0.000000, 7.742715, -0.000000, 0.000000, -0.000000, 1.000000}, + {6.856590, -0.000000, 0.000000, -0.000000, 6.856590, -0.000000, 0.000000, -0.000000, 1.000000}, + {6.113935, -0.000000, 0.000000, -0.000000, 6.113935, -0.000000, 0.000000, -0.000000, 1.000000}, + {5.485600, -0.000000, 0.000000, -0.000000, 5.485600, -0.000000, 0.000000, -0.000000, 1.000000}, + {4.949624, -0.000000, 0.000000, -0.000000, 4.949624, -0.000000, 0.000000, -0.000000, 1.000000}, + {4.490011, -0.000000, 0.000000, -0.000000, 4.490011, -0.000000, 0.000000, -0.000000, 1.000000}, + {4.096192, -0.000000, 0.000000, -0.000000, 4.096192, -0.000000, 0.000000, -0.000000, 1.000000}, + {3.770367, -0.000000, 0.000000, -0.000000, 3.770367, -0.000000, 0.000000, -0.000000, 1.000000}, + {3.518105, -0.000000, 0.000000, -0.000000, 3.518105, -0.000000, 0.000000, -0.000000, 1.000000}, + {3.241291, -0.000000, 0.000000, -0.000000, 3.241291, -0.000000, 0.000000, -0.000000, 1.000000}, + {2.995717, -0.000000, 0.000000, -0.000000, 2.995717, -0.000000, 0.000000, -0.000000, 1.000000}, + {2.777828, -0.000000, 0.000000, -0.000000, 2.777828, -0.000000, 0.000000, -0.000000, 1.000000}, + {2.584874, -0.000000, 0.000000, -0.000000, 2.584874, -0.000000, 0.000000, -0.000000, 1.000000}, + {2.414762, -0.000000, 0.000000, -0.000000, 2.414762, -0.000000, 0.000000, -0.000000, 1.000000}, + {2.266992, -0.000000, 0.000000, -0.000000, 2.266992, -0.000000, 0.000000, -0.000000, 1.000000}, + {2.141645, -0.000000, 0.000000, -0.000000, 2.141645, -0.000000, 0.000000, -0.000000, 1.000000}, + {2.028596, -0.000000, 0.000000, -0.000000, 2.028596, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.913056, -0.000000, 0.000000, -0.000000, 1.913056, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.811136, -0.000000, 0.000000, -0.000000, 1.811136, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.722395, -0.000000, 0.000000, -0.000000, 1.722395, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.646110, -0.000000, 0.000000, -0.000000, 1.646110, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.572143, -0.000000, 0.000000, -0.000000, 1.572143, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.502802, -0.000000, 0.000000, -0.000000, 1.502802, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.442505, -0.000000, 0.000000, -0.000000, 1.442505, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.390581, -0.000000, 0.000000, -0.000000, 1.390581, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.337562, -0.000000, 0.000000, -0.000000, 1.337562, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.291246, -0.000000, 0.000000, -0.000000, 1.291246, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.251378, -0.000000, 0.000000, -0.000000, 1.251378, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.211648, -0.000000, 0.000000, -0.000000, 1.211648, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.176736, -0.000000, 0.000000, -0.000000, 1.176736, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.146271, -0.000000, 0.000000, -0.000000, 1.146271, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.116030, -0.000000, 0.000000, -0.000000, 1.116030, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.089959, -0.000000, 0.000000, -0.000000, 1.089959, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.065901, -0.000000, 0.000000, -0.000000, 1.065901, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.043491, -0.000000, 0.000000, -0.000000, 1.043491, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.024384, -0.000000, 0.000000, -0.000000, 1.024384, -0.000000, 0.000000, -0.000000, 1.000000}, + {1.005152, -0.000000, 0.000000, -0.000000, 1.005152, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.988931, -0.000000, 0.000000, -0.000000, 0.988931, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.973526, -0.000000, 0.000000, -0.000000, 0.973526, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.959606, -0.000000, 0.000000, -0.000000, 0.959606, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.947352, -0.000000, 0.000000, -0.000000, 0.947352, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.935462, -0.000000, 0.000000, -0.000000, 0.935462, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.925545, -0.000000, 0.000000, -0.000000, 0.925545, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.915651, -0.000000, 0.000000, -0.000000, 0.915651, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.907310, -0.000000, 0.000000, -0.000000, 0.907310, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.899582, -0.000000, 0.000000, -0.000000, 0.899582, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.892452, -0.000000, 0.000000, -0.000000, 0.892452, -0.000000, 0.000000, -0.000000, 1.000000}, + {0.886714, -0.000000, 0.000000, -0.000000, 0.886714, -0.000000, 0.000000, -0.000000, 1.000000}, + {499.997467, -0.000000, -0.024938, -0.000000, 500.315308, -0.000000, 12.469114, -0.000000, 1.000000}, + {499.997467, -0.000000, -0.024938, -0.000000, 500.315308, -0.000000, 12.469114, -0.000000, 1.000000}, + {496.120789, -0.000000, -0.024938, -0.000000, 496.432007, -0.000000, 12.372410, -0.000000, 1.000000}, + {220.501129, -0.000000, -0.024938, -0.000000, 220.634109, -0.000000, 5.498928, -0.000000, 1.000000}, + {124.029526, -0.000000, -0.024938, -0.000000, 124.107147, -0.000000, 3.093094, -0.000000, 1.000000}, + {79.380730, -0.000000, -0.024938, -0.000000, 79.425026, -0.000000, 1.979585, -0.000000, 1.000000}, + {55.125454, -0.000000, -0.024938, -0.000000, 55.154995, -0.000000, 1.374758, -0.000000, 1.000000}, + {40.497589, -0.000000, -0.024938, -0.000000, 40.519520, -0.000000, 1.009913, -0.000000, 1.000000}, + {31.004519, -0.000000, -0.024938, -0.000000, 31.025820, -0.000000, 0.773211, -0.000000, 1.000000}, + {24.500708, -0.000000, -0.024938, -0.000000, 24.513670, -0.000000, 0.611046, -0.000000, 1.000000}, + {19.841555, -0.000000, -0.024938, -0.000000, 19.853317, -0.000000, 0.494783, -0.000000, 1.000000}, + {16.396729, -0.000000, -0.024938, -0.000000, 16.405884, -0.000000, 0.408921, -0.000000, 1.000000}, + {13.775448, -0.000000, -0.024938, -0.000000, 13.784056, -0.000000, 0.343552, -0.000000, 1.000000}, + {11.736258, -0.000000, -0.024938, -0.000000, 11.743598, -0.000000, 0.292695, -0.000000, 1.000000}, + {10.117566, -0.000000, -0.024937, -0.000000, 10.124036, -0.000000, 0.252312, -0.000000, 1.000000}, + {8.812078, -0.000000, -0.024937, -0.000000, 8.817113, -0.000000, 0.219782, -0.000000, 1.000000}, + {7.742629, -0.000000, -0.024935, -0.000000, 7.747515, -0.000000, 0.193081, -0.000000, 1.000000}, + {6.856578, -0.000000, -0.024932, -0.000000, 6.860840, -0.000000, 0.170986, -0.000000, 1.000000}, + {6.113971, -0.000000, -0.024925, -0.000000, 6.117671, -0.000000, 0.152466, -0.000000, 1.000000}, + {5.485563, -0.000000, -0.024910, -0.000000, 5.489127, -0.000000, 0.136802, -0.000000, 1.000000}, + {4.949559, -0.000000, -0.024870, -0.000000, 4.952751, -0.000000, 0.123416, -0.000000, 1.000000}, + {4.489937, -0.000000, -0.024745, -0.000000, 4.492629, -0.000000, 0.111934, -0.000000, 1.000000}, + {4.096371, -0.000000, -0.024262, -0.000000, 4.098849, -0.000000, 0.102052, -0.000000, 1.000000}, + {3.771275, -0.000000, -0.022097, -0.000000, 3.773541, -0.000000, 0.093597, -0.000000, 1.000000}, + {3.516103, -0.000000, -0.023925, -0.000000, 3.518279, -0.000000, 0.087490, -0.000000, 1.000000}, + {3.241332, -0.000000, -0.024830, -0.000000, 3.243283, -0.000000, 0.080765, -0.000000, 1.000000}, + {2.995699, -0.000000, -0.024748, -0.000000, 2.997590, -0.000000, 0.074613, -0.000000, 1.000000}, + {2.777862, -0.000000, -0.024592, -0.000000, 2.779489, -0.000000, 0.069120, -0.000000, 1.000000}, + {2.584914, -0.000000, -0.024281, -0.000000, 2.586422, -0.000000, 0.064225, -0.000000, 1.000000}, + {2.414872, -0.000000, -0.023657, -0.000000, 2.416185, -0.000000, 0.059820, -0.000000, 1.000000}, + {2.267114, -0.000000, -0.022465, -0.000000, 2.268396, -0.000000, 0.055784, -0.000000, 1.000000}, + {2.141941, -0.000000, -0.020477, -0.000000, 2.143198, -0.000000, 0.052087, -0.000000, 1.000000}, + {2.028542, -0.000000, -0.023611, -0.000000, 2.029632, -0.000000, 0.049974, -0.000000, 1.000000}, + {1.913215, -0.000000, -0.023107, -0.000000, 1.914276, -0.000000, 0.046906, -0.000000, 1.000000}, + {1.811212, -0.000000, -0.022033, -0.000000, 1.812173, -0.000000, 0.043959, -0.000000, 1.000000}, + {1.722411, -0.000000, -0.020495, -0.000000, 1.723353, -0.000000, 0.041147, -0.000000, 1.000000}, + {1.646026, -0.000000, -0.018657, -0.000000, 1.646907, -0.000000, 0.038474, -0.000000, 1.000000}, + {1.572377, -0.000000, -0.021412, -0.000000, 1.573126, -0.000000, 0.037363, -0.000000, 1.000000}, + {1.502932, -0.000000, -0.019942, -0.000000, 1.503651, -0.000000, 0.034957, -0.000000, 1.000000}, + {1.442565, -0.000000, -0.018071, -0.000000, 1.443349, -0.000000, 0.032557, -0.000000, 1.000000}, + {1.389405, -0.000000, -0.017912, -0.000000, 1.389993, -0.000000, 0.030870, -0.000000, 1.000000}, + {1.337534, -0.000000, -0.018389, -0.000000, 1.338214, -0.000000, 0.029500, -0.000000, 1.000000}, + {1.291183, -0.000000, -0.016379, -0.000000, 1.291845, -0.000000, 0.027284, -0.000000, 1.000000}, + {1.250589, -0.000000, -0.015515, -0.000000, 1.251112, -0.000000, 0.025561, -0.000000, 1.000000}, + {1.211601, -0.000000, -0.016135, -0.000000, 1.212186, -0.000000, 0.024493, -0.000000, 1.000000}, + {1.176648, -0.000000, -0.013892, -0.000000, 1.177168, -0.000000, 0.022343, -0.000000, 1.000000}, + {1.145530, -0.000000, -0.013874, -0.000000, 1.145999, -0.000000, 0.021082, -0.000000, 1.000000}, + {1.115965, -0.000000, -0.013290, -0.000000, 1.116396, -0.000000, 0.019656, -0.000000, 1.000000}, + {1.089884, -0.000000, -0.010950, -0.000000, 1.090292, -0.000000, 0.017533, -0.000000, 1.000000}, + {1.065711, -0.000000, -0.012243, -0.000000, 1.066189, -0.000000, 0.016981, -0.000000, 1.000000}, + {1.043418, -0.000000, -0.009963, -0.000000, 1.043784, -0.000000, 0.015012, -0.000000, 1.000000}, + {1.023707, -0.000000, -0.009491, -0.000000, 1.024012, -0.000000, 0.013768, -0.000000, 1.000000}, + {1.005073, -0.000000, -0.008990, -0.000000, 1.005400, -0.000000, 0.012594, -0.000000, 1.000000}, + {0.988718, -0.000000, -0.006973, -0.000000, 0.988881, -0.000000, 0.010736, -0.000000, 1.000000}, + {0.973377, -0.000000, -0.007934, -0.000000, 0.973646, -0.000000, 0.010213, -0.000000, 1.000000}, + {0.959581, -0.000000, -0.005300, -0.000000, 0.959736, -0.000000, 0.008216, -0.000000, 1.000000}, + {0.947100, -0.000000, -0.005782, -0.000000, 0.947218, -0.000000, 0.007536, -0.000000, 1.000000}, + {0.935461, -0.000000, -0.004359, -0.000000, 0.935582, -0.000000, 0.006105, -0.000000, 1.000000}, + {0.925285, -0.000000, -0.003382, -0.000000, 0.925340, -0.000000, 0.004898, -0.000000, 1.000000}, + {0.915672, -0.000000, -0.003535, -0.000000, 0.915789, -0.000000, 0.004238, -0.000000, 1.000000}, + {0.907287, -0.000000, -0.001205, -0.000000, 0.907276, -0.000000, 0.002472, -0.000000, 1.000000}, + {0.899553, -0.000000, -0.002254, -0.000000, 0.899631, -0.000000, 0.002261, -0.000000, 1.000000}, + {0.892552, -0.000000, -0.000191, -0.000000, 0.892524, -0.000000, 0.000671, -0.000000, 1.000000}, + {0.886461, -0.000000, 0.000076, -0.000000, 0.886428, -0.000000, -0.000037, -0.000000, 1.000000}, + {500.000763, -0.000000, -0.049908, -0.000000, 501.241730, -0.000000, 24.953888, -0.000000, 1.000000}, + {500.000763, -0.000000, -0.049908, -0.000000, 501.241730, -0.000000, 24.953888, -0.000000, 1.000000}, + {496.124786, -0.000000, -0.049908, -0.000000, 497.354095, -0.000000, 24.760460, -0.000000, 1.000000}, + {220.502029, -0.000000, -0.049908, -0.000000, 221.048279, -0.000000, 11.004783, -0.000000, 1.000000}, + {124.031570, -0.000000, -0.049908, -0.000000, 124.337486, -0.000000, 6.190133, -0.000000, 1.000000}, + {79.375877, -0.000000, -0.049908, -0.000000, 79.579933, -0.000000, 3.961427, -0.000000, 1.000000}, + {55.123718, -0.000000, -0.049908, -0.000000, 55.262177, -0.000000, 2.751114, -0.000000, 1.000000}, + {40.498699, -0.000000, -0.049908, -0.000000, 40.605160, -0.000000, 2.021145, -0.000000, 1.000000}, + {31.006849, -0.000000, -0.049908, -0.000000, 31.083014, -0.000000, 1.547495, -0.000000, 1.000000}, + {24.497278, -0.000000, -0.049907, -0.000000, 24.555908, -0.000000, 1.222601, -0.000000, 1.000000}, + {19.841276, -0.000000, -0.049907, -0.000000, 19.890913, -0.000000, 0.990210, -0.000000, 1.000000}, + {16.397182, -0.000000, -0.049907, -0.000000, 16.436363, -0.000000, 0.818381, -0.000000, 1.000000}, + {13.775660, -0.000000, -0.049907, -0.000000, 13.810318, -0.000000, 0.687523, -0.000000, 1.000000}, + {11.736480, -0.000000, -0.049906, -0.000000, 11.765283, -0.000000, 0.585738, -0.000000, 1.000000}, + {10.117846, -0.000000, -0.049905, -0.000000, 10.142936, -0.000000, 0.504958, -0.000000, 1.000000}, + {8.811889, -0.000000, -0.049903, -0.000000, 8.833607, -0.000000, 0.439785, -0.000000, 1.000000}, + {7.742730, -0.000000, -0.049899, -0.000000, 7.761981, -0.000000, 0.386421, -0.000000, 1.000000}, + {6.856680, -0.000000, -0.049893, -0.000000, 6.873636, -0.000000, 0.342192, -0.000000, 1.000000}, + {6.114114, -0.000000, -0.049879, -0.000000, 6.129047, -0.000000, 0.305132, -0.000000, 1.000000}, + {5.485716, -0.000000, -0.049847, -0.000000, 5.499178, -0.000000, 0.273756, -0.000000, 1.000000}, + {4.949782, -0.000000, -0.049764, -0.000000, 4.961692, -0.000000, 0.246984, -0.000000, 1.000000}, + {4.490149, -0.000000, -0.049505, -0.000000, 4.501019, -0.000000, 0.224018, -0.000000, 1.000000}, + {4.097056, -0.000000, -0.048478, -0.000000, 4.107090, -0.000000, 0.204225, -0.000000, 1.000000}, + {3.774032, -0.000000, -0.043886, -0.000000, 3.783077, -0.000000, 0.187406, -0.000000, 1.000000}, + {3.508570, -0.000000, -0.045740, -0.000000, 3.516984, -0.000000, 0.174357, -0.000000, 1.000000}, + {3.241517, -0.000000, -0.049683, -0.000000, 3.249252, -0.000000, 0.161645, -0.000000, 1.000000}, + {2.995973, -0.000000, -0.049517, -0.000000, 3.003005, -0.000000, 0.149331, -0.000000, 1.000000}, + {2.778171, -0.000000, -0.049198, -0.000000, 2.784698, -0.000000, 0.138350, -0.000000, 1.000000}, + {2.585188, -0.000000, -0.048562, -0.000000, 2.591244, -0.000000, 0.128554, -0.000000, 1.000000}, + {2.415389, -0.000000, -0.047285, -0.000000, 2.420921, -0.000000, 0.119684, -0.000000, 1.000000}, + {2.267856, -0.000000, -0.044864, -0.000000, 2.273003, -0.000000, 0.111664, -0.000000, 1.000000}, + {2.142349, -0.000000, -0.041214, -0.000000, 2.147094, -0.000000, 0.104325, -0.000000, 1.000000}, + {2.026238, -0.000000, -0.045263, -0.000000, 2.030645, -0.000000, 0.099390, -0.000000, 1.000000}, + {1.913620, -0.000000, -0.046191, -0.000000, 1.917722, -0.000000, 0.093860, -0.000000, 1.000000}, + {1.811767, -0.000000, -0.044024, -0.000000, 1.815528, -0.000000, 0.087973, -0.000000, 1.000000}, + {1.722954, -0.000000, -0.040932, -0.000000, 1.726578, -0.000000, 0.082334, -0.000000, 1.000000}, + {1.644901, -0.000000, -0.039208, -0.000000, 1.648202, -0.000000, 0.077520, -0.000000, 1.000000}, + {1.571913, -0.000000, -0.041873, -0.000000, 1.575045, -0.000000, 0.074419, -0.000000, 1.000000}, + {1.503270, -0.000000, -0.039833, -0.000000, 1.506199, -0.000000, 0.069899, -0.000000, 1.000000}, + {1.442908, -0.000000, -0.036082, -0.000000, 1.445582, -0.000000, 0.065106, -0.000000, 1.000000}, + {1.388112, -0.000000, -0.036042, -0.000000, 1.390726, -0.000000, 0.061864, -0.000000, 1.000000}, + {1.337609, -0.000000, -0.036698, -0.000000, 1.340105, -0.000000, 0.058965, -0.000000, 1.000000}, + {1.291279, -0.000000, -0.032700, -0.000000, 1.293611, -0.000000, 0.054525, -0.000000, 1.000000}, + {1.249435, -0.000000, -0.031700, -0.000000, 1.251650, -0.000000, 0.051350, -0.000000, 1.000000}, + {1.211340, -0.000000, -0.031811, -0.000000, 1.213610, -0.000000, 0.048750, -0.000000, 1.000000}, + {1.176439, -0.000000, -0.028136, -0.000000, 1.178426, -0.000000, 0.044750, -0.000000, 1.000000}, + {1.144471, -0.000000, -0.027408, -0.000000, 1.146456, -0.000000, 0.042026, -0.000000, 1.000000}, + {1.115653, -0.000000, -0.026454, -0.000000, 1.117463, -0.000000, 0.039242, -0.000000, 1.000000}, + {1.088942, -0.000000, -0.023544, -0.000000, 1.090648, -0.000000, 0.035801, -0.000000, 1.000000}, + {1.064893, -0.000000, -0.022785, -0.000000, 1.066460, -0.000000, 0.033264, -0.000000, 1.000000}, + {1.043063, -0.000000, -0.020388, -0.000000, 1.044470, -0.000000, 0.030166, -0.000000, 1.000000}, + {1.022807, -0.000000, -0.018916, -0.000000, 1.024093, -0.000000, 0.027487, -0.000000, 1.000000}, + {1.004772, -0.000000, -0.017485, -0.000000, 1.005940, -0.000000, 0.024861, -0.000000, 1.000000}, + {0.987888, -0.000000, -0.015340, -0.000000, 0.988963, -0.000000, 0.022016, -0.000000, 1.000000}, + {0.972935, -0.000000, -0.014043, -0.000000, 0.973770, -0.000000, 0.019711, -0.000000, 1.000000}, + {0.959224, -0.000000, -0.012082, -0.000000, 0.959891, -0.000000, 0.017081, -0.000000, 1.000000}, + {0.946621, -0.000000, -0.010581, -0.000000, 0.947148, -0.000000, 0.014730, -0.000000, 1.000000}, + {0.935432, -0.000000, -0.009036, -0.000000, 0.935867, -0.000000, 0.012380, -0.000000, 1.000000}, + {0.924873, -0.000000, -0.007271, -0.000000, 0.925218, -0.000000, 0.010048, -0.000000, 1.000000}, + {0.915710, -0.000000, -0.005702, -0.000000, 0.915873, -0.000000, 0.007844, -0.000000, 1.000000}, + {0.907153, -0.000000, -0.004224, -0.000000, 0.907238, -0.000000, 0.005758, -0.000000, 1.000000}, + {0.899406, -0.000000, -0.002766, -0.000000, 0.899481, -0.000000, 0.003776, -0.000000, 1.000000}, + {0.892606, -0.000000, -0.001541, -0.000000, 0.892650, -0.000000, 0.001899, -0.000000, 1.000000}, + {0.886250, -0.000000, 0.000097, -0.000000, 0.886236, -0.000000, -0.000010, -0.000000, 1.000000}, + {500.003906, -0.000000, -0.074939, -0.000000, 502.811340, -0.000000, 37.469978, -0.000000, 1.000000}, + {500.003906, -0.000000, -0.074939, -0.000000, 502.811340, -0.000000, 37.469978, -0.000000, 1.000000}, + {496.126373, -0.000000, -0.074939, -0.000000, 498.908203, -0.000000, 37.179375, -0.000000, 1.000000}, + {220.498306, -0.000000, -0.074939, -0.000000, 221.739334, -0.000000, 16.524048, -0.000000, 1.000000}, + {124.030350, -0.000000, -0.074939, -0.000000, 124.718994, -0.000000, 9.294769, -0.000000, 1.000000}, + {79.379128, -0.000000, -0.074939, -0.000000, 79.824699, -0.000000, 5.948611, -0.000000, 1.000000}, + {55.123489, -0.000000, -0.074939, -0.000000, 55.433598, -0.000000, 4.130918, -0.000000, 1.000000}, + {40.500011, -0.000000, -0.074939, -0.000000, 40.723366, -0.000000, 3.035039, -0.000000, 1.000000}, + {31.005369, -0.000000, -0.074939, -0.000000, 31.179090, -0.000000, 2.323509, -0.000000, 1.000000}, + {24.496525, -0.000000, -0.074939, -0.000000, 24.633451, -0.000000, 1.835765, -0.000000, 1.000000}, + {19.841644, -0.000000, -0.074938, -0.000000, 19.952940, -0.000000, 1.486910, -0.000000, 1.000000}, + {16.396143, -0.000000, -0.074938, -0.000000, 16.487474, -0.000000, 1.228654, -0.000000, 1.000000}, + {13.776081, -0.000000, -0.074937, -0.000000, 13.853146, -0.000000, 1.032362, -0.000000, 1.000000}, + {11.736395, -0.000000, -0.074935, -0.000000, 11.802135, -0.000000, 0.879502, -0.000000, 1.000000}, + {10.117812, -0.000000, -0.074933, -0.000000, 10.174429, -0.000000, 0.758217, -0.000000, 1.000000}, + {8.811981, -0.000000, -0.074929, -0.000000, 8.861101, -0.000000, 0.660355, -0.000000, 1.000000}, + {7.742858, -0.000000, -0.074923, -0.000000, 7.786114, -0.000000, 0.580231, -0.000000, 1.000000}, + {6.856779, -0.000000, -0.074912, -0.000000, 6.894941, -0.000000, 0.513821, -0.000000, 1.000000}, + {6.114171, -0.000000, -0.074889, -0.000000, 6.148230, -0.000000, 0.458161, -0.000000, 1.000000}, + {5.485709, -0.000000, -0.074839, -0.000000, 5.516331, -0.000000, 0.411046, -0.000000, 1.000000}, + {4.950073, -0.000000, -0.074708, -0.000000, 4.977382, -0.000000, 0.370891, -0.000000, 1.000000}, + {4.490536, -0.000000, -0.074292, -0.000000, 4.515291, -0.000000, 0.336361, -0.000000, 1.000000}, + {4.098239, -0.000000, -0.072590, -0.000000, 4.120820, -0.000000, 0.306734, -0.000000, 1.000000}, + {3.778176, -0.000000, -0.065358, -0.000000, 3.798698, -0.000000, 0.281599, -0.000000, 1.000000}, + {3.501400, -0.000000, -0.068271, -0.000000, 3.520339, -0.000000, 0.261196, -0.000000, 1.000000}, + {3.241759, -0.000000, -0.074584, -0.000000, 3.259283, -0.000000, 0.242727, -0.000000, 1.000000}, + {2.996215, -0.000000, -0.074327, -0.000000, 3.012302, -0.000000, 0.224223, -0.000000, 1.000000}, + {2.778568, -0.000000, -0.073832, -0.000000, 2.793303, -0.000000, 0.207776, -0.000000, 1.000000}, + {2.585738, -0.000000, -0.072843, -0.000000, 2.599365, -0.000000, 0.193040, -0.000000, 1.000000}, + {2.416121, -0.000000, -0.070857, -0.000000, 2.428695, -0.000000, 0.179718, -0.000000, 1.000000}, + {2.268859, -0.000000, -0.067130, -0.000000, 2.280476, -0.000000, 0.167671, -0.000000, 1.000000}, + {2.141096, -0.000000, -0.063785, -0.000000, 2.152040, -0.000000, 0.157027, -0.000000, 1.000000}, + {2.023644, -0.000000, -0.066946, -0.000000, 2.033512, -0.000000, 0.148756, -0.000000, 1.000000}, + {1.914204, -0.000000, -0.069230, -0.000000, 1.923599, -0.000000, 0.140941, -0.000000, 1.000000}, + {1.812284, -0.000000, -0.065931, -0.000000, 1.821127, -0.000000, 0.132011, -0.000000, 1.000000}, + {1.723733, -0.000000, -0.061254, -0.000000, 1.731673, -0.000000, 0.123587, -0.000000, 1.000000}, + {1.643700, -0.000000, -0.060073, -0.000000, 1.651181, -0.000000, 0.116759, -0.000000, 1.000000}, + {1.570878, -0.000000, -0.061255, -0.000000, 1.577947, -0.000000, 0.111093, -0.000000, 1.000000}, + {1.503769, -0.000000, -0.059626, -0.000000, 1.510444, -0.000000, 0.104935, -0.000000, 1.000000}, + {1.442635, -0.000000, -0.055255, -0.000000, 1.448715, -0.000000, 0.098180, -0.000000, 1.000000}, + {1.387056, -0.000000, -0.054241, -0.000000, 1.392869, -0.000000, 0.092851, -0.000000, 1.000000}, + {1.337041, -0.000000, -0.053462, -0.000000, 1.342574, -0.000000, 0.087917, -0.000000, 1.000000}, + {1.290878, -0.000000, -0.050026, -0.000000, 1.296141, -0.000000, 0.082196, -0.000000, 1.000000}, + {1.248439, -0.000000, -0.047915, -0.000000, 1.253429, -0.000000, 0.077195, -0.000000, 1.000000}, + {1.210667, -0.000000, -0.046026, -0.000000, 1.215250, -0.000000, 0.072448, -0.000000, 1.000000}, + {1.175449, -0.000000, -0.043601, -0.000000, 1.180079, -0.000000, 0.067715, -0.000000, 1.000000}, + {1.143403, -0.000000, -0.040953, -0.000000, 1.147558, -0.000000, 0.062874, -0.000000, 1.000000}, + {1.114792, -0.000000, -0.038485, -0.000000, 1.118552, -0.000000, 0.058326, -0.000000, 1.000000}, + {1.087870, -0.000000, -0.036310, -0.000000, 1.091672, -0.000000, 0.054108, -0.000000, 1.000000}, + {1.064033, -0.000000, -0.033135, -0.000000, 1.067198, -0.000000, 0.049455, -0.000000, 1.000000}, + {1.041912, -0.000000, -0.031405, -0.000000, 1.045065, -0.000000, 0.045583, -0.000000, 1.000000}, + {1.021936, -0.000000, -0.028342, -0.000000, 1.024621, -0.000000, 0.041212, -0.000000, 1.000000}, + {1.003819, -0.000000, -0.025671, -0.000000, 1.006238, -0.000000, 0.037092, -0.000000, 1.000000}, + {0.987085, -0.000000, -0.023775, -0.000000, 0.989336, -0.000000, 0.033446, -0.000000, 1.000000}, + {0.972217, -0.000000, -0.020270, -0.000000, 0.973956, -0.000000, 0.029156, -0.000000, 1.000000}, + {0.958542, -0.000000, -0.018758, -0.000000, 0.960061, -0.000000, 0.025897, -0.000000, 1.000000}, + {0.946206, -0.000000, -0.015383, -0.000000, 0.947357, -0.000000, 0.021807, -0.000000, 1.000000}, + {0.934889, -0.000000, -0.013428, -0.000000, 0.935841, -0.000000, 0.018565, -0.000000, 1.000000}, + {0.924647, -0.000000, -0.011186, -0.000000, 0.925321, -0.000000, 0.015190, -0.000000, 1.000000}, + {0.915382, -0.000000, -0.008364, -0.000000, 0.915812, -0.000000, 0.011722, -0.000000, 1.000000}, + {0.906943, -0.000000, -0.006877, -0.000000, 0.907291, -0.000000, 0.008911, -0.000000, 1.000000}, + {0.899339, -0.000000, -0.003664, -0.000000, 0.899526, -0.000000, 0.005431, -0.000000, 1.000000}, + {0.892387, -0.000000, -0.002221, -0.000000, 0.892474, -0.000000, 0.002847, -0.000000, 1.000000}, + {0.886227, -0.000000, 0.000064, -0.000000, 0.886204, -0.000000, -0.000034, -0.000000, 1.000000}, + {499.983826, -0.000000, -0.100065, -0.000000, 505.023865, -0.000000, 50.030712, -0.000000, 1.000000}, + {499.983826, -0.000000, -0.100065, -0.000000, 505.023865, -0.000000, 50.030712, -0.000000, 1.000000}, + {496.132507, -0.000000, -0.100065, -0.000000, 501.084991, -0.000000, 49.645359, -0.000000, 1.000000}, + {220.501862, -0.000000, -0.100065, -0.000000, 222.708817, -0.000000, 22.064491, -0.000000, 1.000000}, + {124.032257, -0.000000, -0.100065, -0.000000, 125.271431, -0.000000, 12.411230, -0.000000, 1.000000}, + {79.379440, -0.000000, -0.100065, -0.000000, 80.174622, -0.000000, 7.943080, -0.000000, 1.000000}, + {55.123135, -0.000000, -0.100064, -0.000000, 55.675999, -0.000000, 5.515856, -0.000000, 1.000000}, + {40.497456, -0.000000, -0.100064, -0.000000, 40.905289, -0.000000, 4.052378, -0.000000, 1.000000}, + {31.005117, -0.000000, -0.100064, -0.000000, 31.316229, -0.000000, 3.102522, -0.000000, 1.000000}, + {24.498039, -0.000000, -0.100063, -0.000000, 24.743013, -0.000000, 2.451441, -0.000000, 1.000000}, + {19.841043, -0.000000, -0.100062, -0.000000, 20.039982, -0.000000, 1.985378, -0.000000, 1.000000}, + {16.396048, -0.000000, -0.100061, -0.000000, 16.560276, -0.000000, 1.640648, -0.000000, 1.000000}, + {13.776016, -0.000000, -0.100059, -0.000000, 13.913796, -0.000000, 1.378505, -0.000000, 1.000000}, + {11.736537, -0.000000, -0.100056, -0.000000, 11.853859, -0.000000, 1.174419, -0.000000, 1.000000}, + {10.118081, -0.000000, -0.100052, -0.000000, 10.218950, -0.000000, 1.012446, -0.000000, 1.000000}, + {8.812102, -0.000000, -0.100045, -0.000000, 8.899796, -0.000000, 0.881770, -0.000000, 1.000000}, + {7.743134, -0.000000, -0.100035, -0.000000, 7.820218, -0.000000, 0.774784, -0.000000, 1.000000}, + {6.856761, -0.000000, -0.100018, -0.000000, 6.924968, -0.000000, 0.686070, -0.000000, 1.000000}, + {6.114274, -0.000000, -0.099985, -0.000000, 6.174966, -0.000000, 0.611784, -0.000000, 1.000000}, + {5.486098, -0.000000, -0.099914, -0.000000, 5.540296, -0.000000, 0.548911, -0.000000, 1.000000}, + {4.950230, -0.000000, -0.099727, -0.000000, 4.999048, -0.000000, 0.495238, -0.000000, 1.000000}, + {4.490978, -0.000000, -0.099115, -0.000000, 4.535179, -0.000000, 0.449195, -0.000000, 1.000000}, + {4.100280, -0.000000, -0.096506, -0.000000, 4.140200, -0.000000, 0.409693, -0.000000, 1.000000}, + {3.778569, -0.000000, -0.088914, -0.000000, 3.815209, -0.000000, 0.376297, -0.000000, 1.000000}, + {3.495200, -0.000000, -0.091444, -0.000000, 3.528899, -0.000000, 0.348182, -0.000000, 1.000000}, + {3.241935, -0.000000, -0.099470, -0.000000, 3.273196, -0.000000, 0.324086, -0.000000, 1.000000}, + {2.996644, -0.000000, -0.099199, -0.000000, 3.025353, -0.000000, 0.299427, -0.000000, 1.000000}, + {2.779053, -0.000000, -0.098507, -0.000000, 2.805380, -0.000000, 0.277436, -0.000000, 1.000000}, + {2.586476, -0.000000, -0.097117, -0.000000, 2.610731, -0.000000, 0.257765, -0.000000, 1.000000}, + {2.417085, -0.000000, -0.094336, -0.000000, 2.439497, -0.000000, 0.240043, -0.000000, 1.000000}, + {2.270406, -0.000000, -0.089196, -0.000000, 2.291107, -0.000000, 0.223905, -0.000000, 1.000000}, + {2.139853, -0.000000, -0.086879, -0.000000, 2.158984, -0.000000, 0.209936, -0.000000, 1.000000}, + {2.021571, -0.000000, -0.088889, -0.000000, 2.039346, -0.000000, 0.198304, -0.000000, 1.000000}, + {1.914086, -0.000000, -0.091324, -0.000000, 1.930882, -0.000000, 0.187834, -0.000000, 1.000000}, + {1.813416, -0.000000, -0.087712, -0.000000, 1.828976, -0.000000, 0.176267, -0.000000, 1.000000}, + {1.723984, -0.000000, -0.082584, -0.000000, 1.738285, -0.000000, 0.165269, -0.000000, 1.000000}, + {1.642613, -0.000000, -0.081077, -0.000000, 1.656077, -0.000000, 0.156015, -0.000000, 1.000000}, + {1.569811, -0.000000, -0.080575, -0.000000, 1.582335, -0.000000, 0.147811, -0.000000, 1.000000}, + {1.504189, -0.000000, -0.078769, -0.000000, 1.515917, -0.000000, 0.139826, -0.000000, 1.000000}, + {1.442117, -0.000000, -0.075025, -0.000000, 1.453279, -0.000000, 0.131437, -0.000000, 1.000000}, + {1.386219, -0.000000, -0.072455, -0.000000, 1.396548, -0.000000, 0.123838, -0.000000, 1.000000}, + {1.336734, -0.000000, -0.069700, -0.000000, 1.345977, -0.000000, 0.116663, -0.000000, 1.000000}, + {1.290254, -0.000000, -0.067901, -0.000000, 1.299658, -0.000000, 0.110078, -0.000000, 1.000000}, + {1.247579, -0.000000, -0.064105, -0.000000, 1.256130, -0.000000, 0.103060, -0.000000, 1.000000}, + {1.209898, -0.000000, -0.060546, -0.000000, 1.217607, -0.000000, 0.096296, -0.000000, 1.000000}, + {1.174434, -0.000000, -0.058685, -0.000000, 1.182144, -0.000000, 0.090393, -0.000000, 1.000000}, + {1.142631, -0.000000, -0.054454, -0.000000, 1.149469, -0.000000, 0.083838, -0.000000, 1.000000}, + {1.113513, -0.000000, -0.051220, -0.000000, 1.119927, -0.000000, 0.077738, -0.000000, 1.000000}, + {1.086981, -0.000000, -0.048682, -0.000000, 1.093063, -0.000000, 0.072191, -0.000000, 1.000000}, + {1.062786, -0.000000, -0.044314, -0.000000, 1.068357, -0.000000, 0.065921, -0.000000, 1.000000}, + {1.040858, -0.000000, -0.041433, -0.000000, 1.045878, -0.000000, 0.060476, -0.000000, 1.000000}, + {1.020989, -0.000000, -0.037974, -0.000000, 1.025619, -0.000000, 0.054945, -0.000000, 1.000000}, + {1.002567, -0.000000, -0.034336, -0.000000, 1.006743, -0.000000, 0.049497, -0.000000, 1.000000}, + {0.986308, -0.000000, -0.031079, -0.000000, 0.989842, -0.000000, 0.044312, -0.000000, 1.000000}, + {0.971085, -0.000000, -0.027686, -0.000000, 0.974268, -0.000000, 0.039176, -0.000000, 1.000000}, + {0.957699, -0.000000, -0.024253, -0.000000, 0.960263, -0.000000, 0.034145, -0.000000, 1.000000}, + {0.945356, -0.000000, -0.021318, -0.000000, 0.947588, -0.000000, 0.029488, -0.000000, 1.000000}, + {0.934259, -0.000000, -0.017754, -0.000000, 0.935834, -0.000000, 0.024674, -0.000000, 1.000000}, + {0.924229, -0.000000, -0.014611, -0.000000, 0.925383, -0.000000, 0.020181, -0.000000, 1.000000}, + {0.914933, -0.000000, -0.011603, -0.000000, 0.915777, -0.000000, 0.015785, -0.000000, 1.000000}, + {0.906746, -0.000000, -0.008179, -0.000000, 0.907248, -0.000000, 0.011415, -0.000000, 1.000000}, + {0.899098, -0.000000, -0.005942, -0.000000, 0.899435, -0.000000, 0.007740, -0.000000, 1.000000}, + {0.892211, -0.000000, -0.002476, -0.000000, 0.892303, -0.000000, 0.003563, -0.000000, 1.000000}, + {0.886070, -0.000000, 0.000087, -0.000000, 0.886099, -0.000000, -0.000117, -0.000000, 1.000000}, + {499.988678, -0.000000, -0.125316, -0.000000, 507.848236, -0.000000, 62.656498, -0.000000, 1.000000}, + {499.988678, -0.000000, -0.125316, -0.000000, 507.848236, -0.000000, 62.656498, -0.000000, 1.000000}, + {496.129761, -0.000000, -0.125316, -0.000000, 503.914063, -0.000000, 62.172882, -0.000000, 1.000000}, + {220.497086, -0.000000, -0.125316, -0.000000, 223.959366, -0.000000, 27.631804, -0.000000, 1.000000}, + {124.019318, -0.000000, -0.125316, -0.000000, 125.981674, -0.000000, 15.541595, -0.000000, 1.000000}, + {79.381973, -0.000000, -0.125315, -0.000000, 80.623238, -0.000000, 9.947818, -0.000000, 1.000000}, + {55.123730, -0.000000, -0.125315, -0.000000, 55.990360, -0.000000, 6.907876, -0.000000, 1.000000}, + {40.499413, -0.000000, -0.125315, -0.000000, 41.132862, -0.000000, 5.075211, -0.000000, 1.000000}, + {31.005598, -0.000000, -0.125314, -0.000000, 31.492960, -0.000000, 3.885517, -0.000000, 1.000000}, + {24.498001, -0.000000, -0.125312, -0.000000, 24.882656, -0.000000, 3.070006, -0.000000, 1.000000}, + {19.841513, -0.000000, -0.125310, -0.000000, 20.152517, -0.000000, 2.486452, -0.000000, 1.000000}, + {16.395920, -0.000000, -0.125308, -0.000000, 16.653996, -0.000000, 2.054650, -0.000000, 1.000000}, + {13.776306, -0.000000, -0.125304, -0.000000, 13.992229, -0.000000, 1.726372, -0.000000, 1.000000}, + {11.736536, -0.000000, -0.125299, -0.000000, 11.920282, -0.000000, 1.470755, -0.000000, 1.000000}, + {10.118100, -0.000000, -0.125292, -0.000000, 10.276620, -0.000000, 1.267936, -0.000000, 1.000000}, + {8.812184, -0.000000, -0.125282, -0.000000, 8.949860, -0.000000, 1.104275, -0.000000, 1.000000}, + {7.743106, -0.000000, -0.125267, -0.000000, 7.863972, -0.000000, 0.970299, -0.000000, 1.000000}, + {6.857152, -0.000000, -0.125242, -0.000000, 6.963921, -0.000000, 0.859257, -0.000000, 1.000000}, + {6.114560, -0.000000, -0.125197, -0.000000, 6.209592, -0.000000, 0.766163, -0.000000, 1.000000}, + {5.486320, -0.000000, -0.125099, -0.000000, 5.571335, -0.000000, 0.687425, -0.000000, 1.000000}, + {4.950572, -0.000000, -0.124844, -0.000000, 5.027175, -0.000000, 0.620248, -0.000000, 1.000000}, + {4.491789, -0.000000, -0.123975, -0.000000, 4.560817, -0.000000, 0.562587, -0.000000, 1.000000}, + {4.103055, -0.000000, -0.120083, -0.000000, 4.165789, -0.000000, 0.513305, -0.000000, 1.000000}, + {3.777709, -0.000000, -0.113248, -0.000000, 3.835187, -0.000000, 0.471403, -0.000000, 1.000000}, + {3.489725, -0.000000, -0.115143, -0.000000, 3.542538, -0.000000, 0.435448, -0.000000, 1.000000}, + {3.237550, -0.000000, -0.122470, -0.000000, 3.286473, -0.000000, 0.404937, -0.000000, 1.000000}, + {2.997180, -0.000000, -0.124153, -0.000000, 3.042161, -0.000000, 0.375008, -0.000000, 1.000000}, + {2.779752, -0.000000, -0.123233, -0.000000, 2.821080, -0.000000, 0.347483, -0.000000, 1.000000}, + {2.587363, -0.000000, -0.121377, -0.000000, 2.625501, -0.000000, 0.322832, -0.000000, 1.000000}, + {2.418493, -0.000000, -0.117683, -0.000000, 2.453598, -0.000000, 0.300661, -0.000000, 1.000000}, + {2.271636, -0.000000, -0.111763, -0.000000, 2.304001, -0.000000, 0.280542, -0.000000, 1.000000}, + {2.138656, -0.000000, -0.110167, -0.000000, 2.168852, -0.000000, 0.263093, -0.000000, 1.000000}, + {2.019761, -0.000000, -0.111032, -0.000000, 2.047639, -0.000000, 0.247931, -0.000000, 1.000000}, + {1.912891, -0.000000, -0.112309, -0.000000, 1.939135, -0.000000, 0.234426, -0.000000, 1.000000}, + {1.814850, -0.000000, -0.109323, -0.000000, 1.839034, -0.000000, 0.220689, -0.000000, 1.000000}, + {1.723768, -0.000000, -0.104629, -0.000000, 1.746386, -0.000000, 0.207252, -0.000000, 1.000000}, + {1.641915, -0.000000, -0.102120, -0.000000, 1.662966, -0.000000, 0.195394, -0.000000, 1.000000}, + {1.569105, -0.000000, -0.099893, -0.000000, 1.588437, -0.000000, 0.184631, -0.000000, 1.000000}, + {1.503554, -0.000000, -0.097455, -0.000000, 1.521679, -0.000000, 0.174583, -0.000000, 1.000000}, + {1.441778, -0.000000, -0.094928, -0.000000, 1.458937, -0.000000, 0.164771, -0.000000, 1.000000}, + {1.385807, -0.000000, -0.090627, -0.000000, 1.401628, -0.000000, 0.154927, -0.000000, 1.000000}, + {1.335691, -0.000000, -0.086796, -0.000000, 1.350160, -0.000000, 0.145743, -0.000000, 1.000000}, + {1.289436, -0.000000, -0.084635, -0.000000, 1.303330, -0.000000, 0.137498, -0.000000, 1.000000}, + {1.247463, -0.000000, -0.080219, -0.000000, 1.260158, -0.000000, 0.128819, -0.000000, 1.000000}, + {1.208796, -0.000000, -0.075910, -0.000000, 1.220506, -0.000000, 0.120424, -0.000000, 1.000000}, + {1.173811, -0.000000, -0.072647, -0.000000, 1.184842, -0.000000, 0.112685, -0.000000, 1.000000}, + {1.141949, -0.000000, -0.068515, -0.000000, 1.152425, -0.000000, 0.104874, -0.000000, 1.000000}, + {1.112584, -0.000000, -0.064082, -0.000000, 1.121989, -0.000000, 0.097076, -0.000000, 1.000000}, + {1.086414, -0.000000, -0.059860, -0.000000, 1.094814, -0.000000, 0.089718, -0.000000, 1.000000}, + {1.061834, -0.000000, -0.056167, -0.000000, 1.069931, -0.000000, 0.082653, -0.000000, 1.000000}, + {1.040016, -0.000000, -0.051208, -0.000000, 1.047066, -0.000000, 0.075299, -0.000000, 1.000000}, + {1.019809, -0.000000, -0.047463, -0.000000, 1.026480, -0.000000, 0.068631, -0.000000, 1.000000}, + {1.001626, -0.000000, -0.043084, -0.000000, 1.007392, -0.000000, 0.061772, -0.000000, 1.000000}, + {0.985189, -0.000000, -0.038572, -0.000000, 0.990411, -0.000000, 0.055197, -0.000000, 1.000000}, + {0.970203, -0.000000, -0.035021, -0.000000, 0.974849, -0.000000, 0.049107, -0.000000, 1.000000}, + {0.956741, -0.000000, -0.030024, -0.000000, 0.960630, -0.000000, 0.042536, -0.000000, 1.000000}, + {0.944591, -0.000000, -0.026461, -0.000000, 0.947661, -0.000000, 0.036732, -0.000000, 1.000000}, + {0.933605, -0.000000, -0.022093, -0.000000, 0.936114, -0.000000, 0.030734, -0.000000, 1.000000}, + {0.923538, -0.000000, -0.018221, -0.000000, 0.925506, -0.000000, 0.025107, -0.000000, 1.000000}, + {0.914564, -0.000000, -0.014631, -0.000000, 0.915917, -0.000000, 0.019829, -0.000000, 1.000000}, + {0.906314, -0.000000, -0.010410, -0.000000, 0.907137, -0.000000, 0.014384, -0.000000, 1.000000}, + {0.898843, -0.000000, -0.007030, -0.000000, 0.899280, -0.000000, 0.009481, -0.000000, 1.000000}, + {0.892090, -0.000000, -0.003253, -0.000000, 0.892242, -0.000000, 0.004531, -0.000000, 1.000000}, + {0.885826, -0.000000, 0.000163, -0.000000, 0.885772, -0.000000, -0.000108, -0.000000, 1.000000}, + {499.975067, -0.000000, -0.150725, -0.000000, 511.384979, -0.000000, 75.358841, -0.000000, 1.000000}, + {499.975067, -0.000000, -0.150725, -0.000000, 511.384979, -0.000000, 75.358841, -0.000000, 1.000000}, + {496.103210, -0.000000, -0.150725, -0.000000, 507.432037, -0.000000, 74.775238, -0.000000, 1.000000}, + {220.498627, -0.000000, -0.150725, -0.000000, 225.508652, -0.000000, 33.234734, -0.000000, 1.000000}, + {124.037292, -0.000000, -0.150725, -0.000000, 126.842415, -0.000000, 18.695688, -0.000000, 1.000000}, + {79.374237, -0.000000, -0.150724, -0.000000, 81.185875, -0.000000, 11.963627, -0.000000, 1.000000}, + {55.122051, -0.000000, -0.150724, -0.000000, 56.377090, -0.000000, 8.308264, -0.000000, 1.000000}, + {40.495537, -0.000000, -0.150723, -0.000000, 41.419373, -0.000000, 6.103695, -0.000000, 1.000000}, + {31.006496, -0.000000, -0.150722, -0.000000, 31.705175, -0.000000, 4.673535, -0.000000, 1.000000}, + {24.502220, -0.000000, -0.150719, -0.000000, 25.054398, -0.000000, 3.693235, -0.000000, 1.000000}, + {19.841686, -0.000000, -0.150716, -0.000000, 20.291641, -0.000000, 2.990625, -0.000000, 1.000000}, + {16.396605, -0.000000, -0.150712, -0.000000, 16.768789, -0.000000, 2.471370, -0.000000, 1.000000}, + {13.776132, -0.000000, -0.150705, -0.000000, 14.088309, -0.000000, 2.076396, -0.000000, 1.000000}, + {11.736781, -0.000000, -0.150697, -0.000000, 12.002884, -0.000000, 1.769014, -0.000000, 1.000000}, + {10.118110, -0.000000, -0.150686, -0.000000, 10.347181, -0.000000, 1.525028, -0.000000, 1.000000}, + {8.812341, -0.000000, -0.150671, -0.000000, 9.011584, -0.000000, 1.328194, -0.000000, 1.000000}, + {7.743464, -0.000000, -0.150649, -0.000000, 7.918241, -0.000000, 1.167073, -0.000000, 1.000000}, + {6.857213, -0.000000, -0.150614, -0.000000, 7.011972, -0.000000, 1.033487, -0.000000, 1.000000}, + {6.114755, -0.000000, -0.150553, -0.000000, 6.252233, -0.000000, 0.921551, -0.000000, 1.000000}, + {5.486509, -0.000000, -0.150423, -0.000000, 5.609710, -0.000000, 0.826825, -0.000000, 1.000000}, + {4.951097, -0.000000, -0.150081, -0.000000, 5.061741, -0.000000, 0.746066, -0.000000, 1.000000}, + {4.492796, -0.000000, -0.148855, -0.000000, 4.592881, -0.000000, 0.676774, -0.000000, 1.000000}, + {4.106829, -0.000000, -0.143114, -0.000000, 4.197904, -0.000000, 0.617765, -0.000000, 1.000000}, + {3.776172, -0.000000, -0.138048, -0.000000, 3.859241, -0.000000, 0.567013, -0.000000, 1.000000}, + {3.485237, -0.000000, -0.139282, -0.000000, 3.561492, -0.000000, 0.523169, -0.000000, 1.000000}, + {3.232046, -0.000000, -0.145310, -0.000000, 3.302608, -0.000000, 0.485838, -0.000000, 1.000000}, + {2.997767, -0.000000, -0.149207, -0.000000, 3.062907, -0.000000, 0.451090, -0.000000, 1.000000}, + {2.780419, -0.000000, -0.148017, -0.000000, 2.840446, -0.000000, 0.417909, -0.000000, 1.000000}, + {2.588510, -0.000000, -0.145605, -0.000000, 2.643693, -0.000000, 0.388345, -0.000000, 1.000000}, + {2.420171, -0.000000, -0.140849, -0.000000, 2.471030, -0.000000, 0.361647, -0.000000, 1.000000}, + {2.271814, -0.000000, -0.135408, -0.000000, 2.318790, -0.000000, 0.337650, -0.000000, 1.000000}, + {2.137570, -0.000000, -0.133633, -0.000000, 2.181172, -0.000000, 0.316517, -0.000000, 1.000000}, + {2.018142, -0.000000, -0.133331, -0.000000, 2.058458, -0.000000, 0.297881, -0.000000, 1.000000}, + {1.911721, -0.000000, -0.133095, -0.000000, 1.949249, -0.000000, 0.281156, -0.000000, 1.000000}, + {1.815834, -0.000000, -0.130985, -0.000000, 1.850734, -0.000000, 0.265446, -0.000000, 1.000000}, + {1.723832, -0.000000, -0.126806, -0.000000, 1.756498, -0.000000, 0.249452, -0.000000, 1.000000}, + {1.641533, -0.000000, -0.123155, -0.000000, 1.671640, -0.000000, 0.235015, -0.000000, 1.000000}, + {1.569057, -0.000000, -0.119176, -0.000000, 1.596424, -0.000000, 0.221675, -0.000000, 1.000000}, + {1.502528, -0.000000, -0.116564, -0.000000, 1.528443, -0.000000, 0.209495, -0.000000, 1.000000}, + {1.441651, -0.000000, -0.114442, -0.000000, 1.466111, -0.000000, 0.198148, -0.000000, 1.000000}, + {1.386014, -0.000000, -0.108702, -0.000000, 1.407911, -0.000000, 0.186116, -0.000000, 1.000000}, + {1.335108, -0.000000, -0.104388, -0.000000, 1.355553, -0.000000, 0.175068, -0.000000, 1.000000}, + {1.288948, -0.000000, -0.100873, -0.000000, 1.307853, -0.000000, 0.164819, -0.000000, 1.000000}, + {1.247475, -0.000000, -0.096616, -0.000000, 1.264802, -0.000000, 0.154775, -0.000000, 1.000000}, + {1.208317, -0.000000, -0.091453, -0.000000, 1.224510, -0.000000, 0.144569, -0.000000, 1.000000}, + {1.173928, -0.000000, -0.086347, -0.000000, 1.188000, -0.000000, 0.134849, -0.000000, 1.000000}, + {1.141393, -0.000000, -0.082366, -0.000000, 1.155138, -0.000000, 0.125718, -0.000000, 1.000000}, + {1.112421, -0.000000, -0.076983, -0.000000, 1.124588, -0.000000, 0.116446, -0.000000, 1.000000}, + {1.085617, -0.000000, -0.071706, -0.000000, 1.096798, -0.000000, 0.107384, -0.000000, 1.000000}, + {1.061435, -0.000000, -0.067265, -0.000000, 1.071699, -0.000000, 0.098925, -0.000000, 1.000000}, + {1.039405, -0.000000, -0.061565, -0.000000, 1.048640, -0.000000, 0.090198, -0.000000, 1.000000}, + {1.019217, -0.000000, -0.056655, -0.000000, 1.027570, -0.000000, 0.081968, -0.000000, 1.000000}, + {1.000977, -0.000000, -0.051743, -0.000000, 1.008677, -0.000000, 0.074058, -0.000000, 1.000000}, + {0.984202, -0.000000, -0.046389, -0.000000, 0.991082, -0.000000, 0.066087, -0.000000, 1.000000}, + {0.969449, -0.000000, -0.041229, -0.000000, 0.975348, -0.000000, 0.058478, -0.000000, 1.000000}, + {0.955665, -0.000000, -0.036702, -0.000000, 0.961025, -0.000000, 0.051242, -0.000000, 1.000000}, + {0.943725, -0.000000, -0.031285, -0.000000, 0.948032, -0.000000, 0.043797, -0.000000, 1.000000}, + {0.932732, -0.000000, -0.026812, -0.000000, 0.936218, -0.000000, 0.036990, -0.000000, 1.000000}, + {0.922815, -0.000000, -0.021847, -0.000000, 0.925515, -0.000000, 0.030171, -0.000000, 1.000000}, + {0.914039, -0.000000, -0.016994, -0.000000, 0.915852, -0.000000, 0.023478, -0.000000, 1.000000}, + {0.905853, -0.000000, -0.013168, -0.000000, 0.907115, -0.000000, 0.017547, -0.000000, 1.000000}, + {0.898514, -0.000000, -0.007937, -0.000000, 0.899218, -0.000000, 0.011117, -0.000000, 1.000000}, + {0.891748, -0.000000, -0.004133, -0.000000, 0.892026, -0.000000, 0.005548, -0.000000, 1.000000}, + {0.885656, -0.000000, 0.000266, -0.000000, 0.885656, -0.000000, -0.000179, -0.000000, 1.000000}, + {500.137848, -0.000000, -0.176326, -0.000000, 515.448792, -0.000000, 88.187454, -0.000000, 1.000000}, + {500.137848, -0.000000, -0.176326, -0.000000, 515.448792, -0.000000, 88.187454, -0.000000, 1.000000}, + {496.078827, -0.000000, -0.176326, -0.000000, 511.576691, -0.000000, 87.471741, -0.000000, 1.000000}, + {220.496750, -0.000000, -0.176326, -0.000000, 227.360535, -0.000000, 38.879414, -0.000000, 1.000000}, + {124.028099, -0.000000, -0.176326, -0.000000, 127.887680, -0.000000, 21.869419, -0.000000, 1.000000}, + {79.379059, -0.000000, -0.176325, -0.000000, 81.847160, -0.000000, 13.996596, -0.000000, 1.000000}, + {55.123569, -0.000000, -0.176324, -0.000000, 56.838345, -0.000000, 9.719764, -0.000000, 1.000000}, + {40.497410, -0.000000, -0.176323, -0.000000, 41.758190, -0.000000, 7.140716, -0.000000, 1.000000}, + {31.010031, -0.000000, -0.176320, -0.000000, 31.968016, -0.000000, 5.467903, -0.000000, 1.000000}, + {24.498796, -0.000000, -0.176317, -0.000000, 25.258919, -0.000000, 4.319749, -0.000000, 1.000000}, + {19.841389, -0.000000, -0.176311, -0.000000, 20.457605, -0.000000, 3.498529, -0.000000, 1.000000}, + {16.397121, -0.000000, -0.176305, -0.000000, 16.906359, -0.000000, 2.891195, -0.000000, 1.000000}, + {13.776705, -0.000000, -0.176295, -0.000000, 14.203604, -0.000000, 2.429163, -0.000000, 1.000000}, + {11.737144, -0.000000, -0.176283, -0.000000, 12.100784, -0.000000, 2.069515, -0.000000, 1.000000}, + {10.118380, -0.000000, -0.176267, -0.000000, 10.431730, -0.000000, 1.784079, -0.000000, 1.000000}, + {8.812522, -0.000000, -0.176244, -0.000000, 9.085212, -0.000000, 1.553809, -0.000000, 1.000000}, + {7.743594, -0.000000, -0.176213, -0.000000, 7.982780, -0.000000, 1.365311, -0.000000, 1.000000}, + {6.857443, -0.000000, -0.176165, -0.000000, 7.069174, -0.000000, 1.209043, -0.000000, 1.000000}, + {6.115237, -0.000000, -0.176083, -0.000000, 6.303002, -0.000000, 1.078138, -0.000000, 1.000000}, + {5.487206, -0.000000, -0.175914, -0.000000, 5.655299, -0.000000, 0.967364, -0.000000, 1.000000}, + {4.951627, -0.000000, -0.175459, -0.000000, 5.103069, -0.000000, 0.872822, -0.000000, 1.000000}, + {4.494173, -0.000000, -0.173714, -0.000000, 4.631212, -0.000000, 0.791896, -0.000000, 1.000000}, + {4.110331, -0.000000, -0.166438, -0.000000, 4.234978, -0.000000, 0.723129, -0.000000, 1.000000}, + {3.774621, -0.000000, -0.163092, -0.000000, 3.888469, -0.000000, 0.663263, -0.000000, 1.000000}, + {3.481253, -0.000000, -0.163796, -0.000000, 3.585593, -0.000000, 0.611419, -0.000000, 1.000000}, + {3.226119, -0.000000, -0.168430, -0.000000, 3.322400, -0.000000, 0.566981, -0.000000, 1.000000}, + {2.998593, -0.000000, -0.174378, -0.000000, 3.087643, -0.000000, 0.527768, -0.000000, 1.000000}, + {2.781536, -0.000000, -0.172860, -0.000000, 2.863415, -0.000000, 0.489044, -0.000000, 1.000000}, + {2.589859, -0.000000, -0.169774, -0.000000, 2.665395, -0.000000, 0.454364, -0.000000, 1.000000}, + {2.422226, -0.000000, -0.163780, -0.000000, 2.491674, -0.000000, 0.423142, -0.000000, 1.000000}, + {2.271880, -0.000000, -0.159524, -0.000000, 2.336085, -0.000000, 0.395227, -0.000000, 1.000000}, + {2.136761, -0.000000, -0.157259, -0.000000, 2.196419, -0.000000, 0.370258, -0.000000, 1.000000}, + {2.016938, -0.000000, -0.155739, -0.000000, 2.072157, -0.000000, 0.348111, -0.000000, 1.000000}, + {1.910869, -0.000000, -0.153894, -0.000000, 1.961848, -0.000000, 0.328188, -0.000000, 1.000000}, + {1.815034, -0.000000, -0.152270, -0.000000, 1.862665, -0.000000, 0.309955, -0.000000, 1.000000}, + {1.723901, -0.000000, -0.149119, -0.000000, 1.768507, -0.000000, 0.292020, -0.000000, 1.000000}, + {1.641692, -0.000000, -0.144131, -0.000000, 1.682457, -0.000000, 0.274827, -0.000000, 1.000000}, + {1.568958, -0.000000, -0.138928, -0.000000, 1.606070, -0.000000, 0.259001, -0.000000, 1.000000}, + {1.501811, -0.000000, -0.135819, -0.000000, 1.536432, -0.000000, 0.244606, -0.000000, 1.000000}, + {1.441540, -0.000000, -0.132694, -0.000000, 1.473682, -0.000000, 0.231117, -0.000000, 1.000000}, + {1.386211, -0.000000, -0.127474, -0.000000, 1.415470, -0.000000, 0.217634, -0.000000, 1.000000}, + {1.335120, -0.000000, -0.122118, -0.000000, 1.361721, -0.000000, 0.204512, -0.000000, 1.000000}, + {1.289377, -0.000000, -0.116811, -0.000000, 1.313414, -0.000000, 0.192047, -0.000000, 1.000000}, + {1.247203, -0.000000, -0.112536, -0.000000, 1.269721, -0.000000, 0.180439, -0.000000, 1.000000}, + {1.208800, -0.000000, -0.107041, -0.000000, 1.229093, -0.000000, 0.168721, -0.000000, 1.000000}, + {1.173918, -0.000000, -0.100700, -0.000000, 1.191805, -0.000000, 0.157202, -0.000000, 1.000000}, + {1.141539, -0.000000, -0.095628, -0.000000, 1.158289, -0.000000, 0.146366, -0.000000, 1.000000}, + {1.112548, -0.000000, -0.090031, -0.000000, 1.127686, -0.000000, 0.135788, -0.000000, 1.000000}, + {1.085812, -0.000000, -0.083715, -0.000000, 1.099267, -0.000000, 0.125136, -0.000000, 1.000000}, + {1.061281, -0.000000, -0.077684, -0.000000, 1.073643, -0.000000, 0.114829, -0.000000, 1.000000}, + {1.038917, -0.000000, -0.072414, -0.000000, 1.050455, -0.000000, 0.105254, -0.000000, 1.000000}, + {1.019049, -0.000000, -0.065656, -0.000000, 1.029130, -0.000000, 0.095291, -0.000000, 1.000000}, + {1.000216, -0.000000, -0.060083, -0.000000, 1.009833, -0.000000, 0.086050, -0.000000, 1.000000}, + {0.983558, -0.000000, -0.054356, -0.000000, 0.992151, -0.000000, 0.076948, -0.000000, 1.000000}, + {0.968492, -0.000000, -0.048041, -0.000000, 0.976051, -0.000000, 0.068061, -0.000000, 1.000000}, + {0.954849, -0.000000, -0.042631, -0.000000, 0.961450, -0.000000, 0.059557, -0.000000, 1.000000}, + {0.942548, -0.000000, -0.036554, -0.000000, 0.948345, -0.000000, 0.051056, -0.000000, 1.000000}, + {0.931768, -0.000000, -0.030994, -0.000000, 0.936276, -0.000000, 0.042978, -0.000000, 1.000000}, + {0.922134, -0.000000, -0.025629, -0.000000, 0.925676, -0.000000, 0.035135, -0.000000, 1.000000}, + {0.913335, -0.000000, -0.019997, -0.000000, 0.915830, -0.000000, 0.027508, -0.000000, 1.000000}, + {0.905483, -0.000000, -0.014687, -0.000000, 0.907031, -0.000000, 0.020128, -0.000000, 1.000000}, + {0.898067, -0.000000, -0.009774, -0.000000, 0.898977, -0.000000, 0.013180, -0.000000, 1.000000}, + {0.891410, -0.000000, -0.004567, -0.000000, 0.891737, -0.000000, 0.006331, -0.000000, 1.000000}, + {0.885377, -0.000000, 0.000120, -0.000000, 0.885377, -0.000000, -0.000109, -0.000000, 1.000000}, + {500.002136, -0.000000, -0.202154, -0.000000, 520.401855, -0.000000, 101.077248, -0.000000, 1.000000}, + {500.002136, -0.000000, -0.202154, -0.000000, 520.401855, -0.000000, 101.077248, -0.000000, 1.000000}, + {496.121338, -0.000000, -0.202154, -0.000000, 516.361938, -0.000000, 100.292641, -0.000000, 1.000000}, + {220.502655, -0.000000, -0.202153, -0.000000, 229.510117, -0.000000, 44.575531, -0.000000, 1.000000}, + {123.999191, -0.000000, -0.202153, -0.000000, 129.105179, -0.000000, 25.067114, -0.000000, 1.000000}, + {79.376472, -0.000000, -0.202152, -0.000000, 82.622795, -0.000000, 16.046227, -0.000000, 1.000000}, + {55.120224, -0.000000, -0.202151, -0.000000, 57.375393, -0.000000, 11.142715, -0.000000, 1.000000}, + {40.498074, -0.000000, -0.202148, -0.000000, 42.151817, -0.000000, 8.186816, -0.000000, 1.000000}, + {31.005764, -0.000000, -0.202145, -0.000000, 32.273041, -0.000000, 6.267910, -0.000000, 1.000000}, + {24.496655, -0.000000, -0.202139, -0.000000, 25.498249, -0.000000, 4.952050, -0.000000, 1.000000}, + {19.841209, -0.000000, -0.202131, -0.000000, 20.652281, -0.000000, 4.010926, -0.000000, 1.000000}, + {16.396740, -0.000000, -0.202121, -0.000000, 17.065317, -0.000000, 3.314617, -0.000000, 1.000000}, + {13.776087, -0.000000, -0.202107, -0.000000, 14.337918, -0.000000, 2.784805, -0.000000, 1.000000}, + {11.736927, -0.000000, -0.202089, -0.000000, 12.215576, -0.000000, 2.372608, -0.000000, 1.000000}, + {10.117808, -0.000000, -0.202065, -0.000000, 10.530962, -0.000000, 2.045225, -0.000000, 1.000000}, + {8.812817, -0.000000, -0.202034, -0.000000, 9.170947, -0.000000, 1.781436, -0.000000, 1.000000}, + {7.743863, -0.000000, -0.201990, -0.000000, 8.058211, -0.000000, 1.565313, -0.000000, 1.000000}, + {6.857856, -0.000000, -0.201926, -0.000000, 7.135773, -0.000000, 1.386182, -0.000000, 1.000000}, + {6.115432, -0.000000, -0.201820, -0.000000, 6.362723, -0.000000, 1.236057, -0.000000, 1.000000}, + {5.487375, -0.000000, -0.201601, -0.000000, 5.708670, -0.000000, 1.109041, -0.000000, 1.000000}, + {4.952326, -0.000000, -0.200992, -0.000000, 5.151335, -0.000000, 1.000741, -0.000000, 1.000000}, + {4.496054, -0.000000, -0.198467, -0.000000, 4.676206, -0.000000, 0.908137, -0.000000, 1.000000}, + {4.111419, -0.000000, -0.191120, -0.000000, 4.275214, -0.000000, 0.829276, -0.000000, 1.000000}, + {3.773230, -0.000000, -0.188319, -0.000000, 3.922716, -0.000000, 0.760296, -0.000000, 1.000000}, + {3.477818, -0.000000, -0.188648, -0.000000, 3.614793, -0.000000, 0.700339, -0.000000, 1.000000}, + {3.221098, -0.000000, -0.192139, -0.000000, 3.347462, -0.000000, 0.648791, -0.000000, 1.000000}, + {2.995774, -0.000000, -0.198064, -0.000000, 3.112610, -0.000000, 0.604101, -0.000000, 1.000000}, + {2.782646, -0.000000, -0.197759, -0.000000, 2.890333, -0.000000, 0.560737, -0.000000, 1.000000}, + {2.591527, -0.000000, -0.193848, -0.000000, 2.690751, -0.000000, 0.521002, -0.000000, 1.000000}, + {2.423693, -0.000000, -0.187492, -0.000000, 2.514939, -0.000000, 0.485291, -0.000000, 1.000000}, + {2.271948, -0.000000, -0.183692, -0.000000, 2.356494, -0.000000, 0.453180, -0.000000, 1.000000}, + {2.136155, -0.000000, -0.180966, -0.000000, 2.214588, -0.000000, 0.424463, -0.000000, 1.000000}, + {2.016137, -0.000000, -0.178201, -0.000000, 2.088436, -0.000000, 0.398745, -0.000000, 1.000000}, + {1.910310, -0.000000, -0.174738, -0.000000, 1.976897, -0.000000, 0.375515, -0.000000, 1.000000}, + {1.813429, -0.000000, -0.173377, -0.000000, 1.875835, -0.000000, 0.354591, -0.000000, 1.000000}, + {1.724669, -0.000000, -0.171366, -0.000000, 1.782674, -0.000000, 0.334854, -0.000000, 1.000000}, + {1.642285, -0.000000, -0.164999, -0.000000, 1.695323, -0.000000, 0.314955, -0.000000, 1.000000}, + {1.568593, -0.000000, -0.159429, -0.000000, 1.616958, -0.000000, 0.296641, -0.000000, 1.000000}, + {1.501747, -0.000000, -0.155140, -0.000000, 1.546379, -0.000000, 0.279952, -0.000000, 1.000000}, + {1.442147, -0.000000, -0.150522, -0.000000, 1.482591, -0.000000, 0.264179, -0.000000, 1.000000}, + {1.386560, -0.000000, -0.146354, -0.000000, 1.424087, -0.000000, 0.249275, -0.000000, 1.000000}, + {1.336091, -0.000000, -0.139864, -0.000000, 1.369359, -0.000000, 0.234266, -0.000000, 1.000000}, + {1.290110, -0.000000, -0.133329, -0.000000, 1.319812, -0.000000, 0.219634, -0.000000, 1.000000}, + {1.247460, -0.000000, -0.128134, -0.000000, 1.275250, -0.000000, 0.206112, -0.000000, 1.000000}, + {1.210189, -0.000000, -0.122320, -0.000000, 1.234548, -0.000000, 0.192902, -0.000000, 1.000000}, + {1.174714, -0.000000, -0.115431, -0.000000, 1.196491, -0.000000, 0.179668, -0.000000, 1.000000}, + {1.142451, -0.000000, -0.108658, -0.000000, 1.162076, -0.000000, 0.166836, -0.000000, 1.000000}, + {1.112871, -0.000000, -0.102621, -0.000000, 1.131117, -0.000000, 0.154679, -0.000000, 1.000000}, + {1.086229, -0.000000, -0.095825, -0.000000, 1.102497, -0.000000, 0.142680, -0.000000, 1.000000}, + {1.061453, -0.000000, -0.088686, -0.000000, 1.075995, -0.000000, 0.130891, -0.000000, 1.000000}, + {1.038903, -0.000000, -0.082343, -0.000000, 1.052435, -0.000000, 0.119805, -0.000000, 1.000000}, + {1.018590, -0.000000, -0.075305, -0.000000, 1.030991, -0.000000, 0.108658, -0.000000, 1.000000}, + {0.999955, -0.000000, -0.068336, -0.000000, 1.010974, -0.000000, 0.097934, -0.000000, 1.000000}, + {0.983050, -0.000000, -0.061738, -0.000000, 0.993355, -0.000000, 0.087585, -0.000000, 1.000000}, + {0.967750, -0.000000, -0.054981, -0.000000, 0.976869, -0.000000, 0.077547, -0.000000, 1.000000}, + {0.954319, -0.000000, -0.048012, -0.000000, 0.962132, -0.000000, 0.067642, -0.000000, 1.000000}, + {0.941693, -0.000000, -0.042210, -0.000000, 0.948741, -0.000000, 0.058381, -0.000000, 1.000000}, + {0.930924, -0.000000, -0.035178, -0.000000, 0.936629, -0.000000, 0.048898, -0.000000, 1.000000}, + {0.921219, -0.000000, -0.029154, -0.000000, 0.925665, -0.000000, 0.040093, -0.000000, 1.000000}, + {0.912509, -0.000000, -0.023188, -0.000000, 0.915857, -0.000000, 0.031532, -0.000000, 1.000000}, + {0.904780, -0.000000, -0.016546, -0.000000, 0.906863, -0.000000, 0.022884, -0.000000, 1.000000}, + {0.897692, -0.000000, -0.011130, -0.000000, 0.898842, -0.000000, 0.015020, -0.000000, 1.000000}, + {0.891087, -0.000000, -0.005098, -0.000000, 0.891608, -0.000000, 0.007156, -0.000000, 1.000000}, + {0.885051, -0.000000, 0.000194, -0.000000, 0.885016, -0.000000, -0.000143, -0.000000, 1.000000}, + {500.122223, -0.000000, -0.228243, -0.000000, 525.877747, -0.000000, 114.149078, -0.000000, 1.000000}, + {500.122223, -0.000000, -0.228243, -0.000000, 525.877747, -0.000000, 114.149078, -0.000000, 1.000000}, + {496.093170, -0.000000, -0.228243, -0.000000, 521.986084, -0.000000, 113.229523, -0.000000, 1.000000}, + {220.491501, -0.000000, -0.228243, -0.000000, 231.998520, -0.000000, 50.325714, -0.000000, 1.000000}, + {124.052315, -0.000000, -0.228242, -0.000000, 130.483047, -0.000000, 28.314045, -0.000000, 1.000000}, + {79.374489, -0.000000, -0.228241, -0.000000, 83.516861, -0.000000, 18.116611, -0.000000, 1.000000}, + {55.126289, -0.000000, -0.228239, -0.000000, 57.994217, -0.000000, 12.582159, -0.000000, 1.000000}, + {40.494789, -0.000000, -0.228235, -0.000000, 42.608646, -0.000000, 9.242578, -0.000000, 1.000000}, + {31.007071, -0.000000, -0.228230, -0.000000, 32.619976, -0.000000, 7.077108, -0.000000, 1.000000}, + {24.497461, -0.000000, -0.228222, -0.000000, 25.772018, -0.000000, 5.591317, -0.000000, 1.000000}, + {19.841955, -0.000000, -0.228211, -0.000000, 20.874607, -0.000000, 4.528726, -0.000000, 1.000000}, + {16.397472, -0.000000, -0.228196, -0.000000, 17.249781, -0.000000, 3.742531, -0.000000, 1.000000}, + {13.776735, -0.000000, -0.228176, -0.000000, 14.492861, -0.000000, 3.144354, -0.000000, 1.000000}, + {11.737115, -0.000000, -0.228151, -0.000000, 12.346711, -0.000000, 2.678810, -0.000000, 1.000000}, + {10.118634, -0.000000, -0.228118, -0.000000, 10.644080, -0.000000, 2.309386, -0.000000, 1.000000}, + {8.812924, -0.000000, -0.228074, -0.000000, 9.269695, -0.000000, 2.011329, -0.000000, 1.000000}, + {7.744034, -0.000000, -0.228016, -0.000000, 8.144842, -0.000000, 1.767344, -0.000000, 1.000000}, + {6.858088, -0.000000, -0.227931, -0.000000, 7.212428, -0.000000, 1.565093, -0.000000, 1.000000}, + {6.115783, -0.000000, -0.227793, -0.000000, 6.430929, -0.000000, 1.395625, -0.000000, 1.000000}, + {5.487657, -0.000000, -0.227510, -0.000000, 5.769895, -0.000000, 1.252177, -0.000000, 1.000000}, + {4.952886, -0.000000, -0.226687, -0.000000, 5.206831, -0.000000, 1.129947, -0.000000, 1.000000}, + {4.498596, -0.000000, -0.222958, -0.000000, 4.728174, -0.000000, 1.025697, -0.000000, 1.000000}, + {4.111821, -0.000000, -0.216263, -0.000000, 4.320670, -0.000000, 0.936399, -0.000000, 1.000000}, + {3.771975, -0.000000, -0.213770, -0.000000, 3.962561, -0.000000, 0.858223, -0.000000, 1.000000}, + {3.474705, -0.000000, -0.213818, -0.000000, 3.649158, -0.000000, 0.790099, -0.000000, 1.000000}, + {3.217051, -0.000000, -0.216378, -0.000000, 3.377828, -0.000000, 0.731423, -0.000000, 1.000000}, + {2.991493, -0.000000, -0.221334, -0.000000, 3.139953, -0.000000, 0.680570, -0.000000, 1.000000}, + {2.783987, -0.000000, -0.222700, -0.000000, 2.921229, -0.000000, 0.633180, -0.000000, 1.000000}, + {2.593481, -0.000000, -0.217779, -0.000000, 2.719782, -0.000000, 0.588350, -0.000000, 1.000000}, + {2.424382, -0.000000, -0.212017, -0.000000, 2.540804, -0.000000, 0.548022, -0.000000, 1.000000}, + {2.271759, -0.000000, -0.208226, -0.000000, 2.379544, -0.000000, 0.511726, -0.000000, 1.000000}, + {2.135913, -0.000000, -0.204723, -0.000000, 2.235539, -0.000000, 0.479155, -0.000000, 1.000000}, + {2.015712, -0.000000, -0.200659, -0.000000, 2.107507, -0.000000, 0.449816, -0.000000, 1.000000}, + {1.909178, -0.000000, -0.196539, -0.000000, 1.993785, -0.000000, 0.423315, -0.000000, 1.000000}, + {1.812193, -0.000000, -0.194714, -0.000000, 1.891061, -0.000000, 0.399540, -0.000000, 1.000000}, + {1.724654, -0.000000, -0.192304, -0.000000, 1.797391, -0.000000, 0.377470, -0.000000, 1.000000}, + {1.643706, -0.000000, -0.186074, -0.000000, 1.709625, -0.000000, 0.355460, -0.000000, 1.000000}, + {1.569063, -0.000000, -0.180126, -0.000000, 1.629651, -0.000000, 0.334774, -0.000000, 1.000000}, + {1.502403, -0.000000, -0.174491, -0.000000, 1.557406, -0.000000, 0.315483, -0.000000, 1.000000}, + {1.442658, -0.000000, -0.168890, -0.000000, 1.492295, -0.000000, 0.297574, -0.000000, 1.000000}, + {1.387433, -0.000000, -0.164301, -0.000000, 1.432868, -0.000000, 0.280697, -0.000000, 1.000000}, + {1.337891, -0.000000, -0.157574, -0.000000, 1.378132, -0.000000, 0.263940, -0.000000, 1.000000}, + {1.291350, -0.000000, -0.150381, -0.000000, 1.327500, -0.000000, 0.247574, -0.000000, 1.000000}, + {1.249125, -0.000000, -0.143636, -0.000000, 1.281654, -0.000000, 0.231814, -0.000000, 1.000000}, + {1.210989, -0.000000, -0.137179, -0.000000, 1.240054, -0.000000, 0.216849, -0.000000, 1.000000}, + {1.176099, -0.000000, -0.130248, -0.000000, 1.202006, -0.000000, 0.202095, -0.000000, 1.000000}, + {1.143640, -0.000000, -0.122030, -0.000000, 1.166520, -0.000000, 0.187469, -0.000000, 1.000000}, + {1.113656, -0.000000, -0.114914, -0.000000, 1.134639, -0.000000, 0.173427, -0.000000, 1.000000}, + {1.087245, -0.000000, -0.107734, -0.000000, 1.105856, -0.000000, 0.160079, -0.000000, 1.000000}, + {1.062218, -0.000000, -0.099742, -0.000000, 1.078947, -0.000000, 0.146995, -0.000000, 1.000000}, + {1.039564, -0.000000, -0.091852, -0.000000, 1.054720, -0.000000, 0.134005, -0.000000, 1.000000}, + {1.018476, -0.000000, -0.085016, -0.000000, 1.032979, -0.000000, 0.121964, -0.000000, 1.000000}, + {1.000159, -0.000000, -0.076685, -0.000000, 1.012538, -0.000000, 0.109632, -0.000000, 1.000000}, + {0.982598, -0.000000, -0.069218, -0.000000, 0.994354, -0.000000, 0.098101, -0.000000, 1.000000}, + {0.967187, -0.000000, -0.061944, -0.000000, 0.977866, -0.000000, 0.086843, -0.000000, 1.000000}, + {0.953322, -0.000000, -0.054171, -0.000000, 0.962735, -0.000000, 0.075863, -0.000000, 1.000000}, + {0.941093, -0.000000, -0.046914, -0.000000, 0.949198, -0.000000, 0.065247, -0.000000, 1.000000}, + {0.929940, -0.000000, -0.039891, -0.000000, 0.937012, -0.000000, 0.054986, -0.000000, 1.000000}, + {0.920349, -0.000000, -0.032428, -0.000000, 0.925826, -0.000000, 0.044881, -0.000000, 1.000000}, + {0.911883, -0.000000, -0.025649, -0.000000, 0.915800, -0.000000, 0.035198, -0.000000, 1.000000}, + {0.904131, -0.000000, -0.019146, -0.000000, 0.906757, -0.000000, 0.025940, -0.000000, 1.000000}, + {0.897232, -0.000000, -0.012147, -0.000000, 0.898667, -0.000000, 0.016695, -0.000000, 1.000000}, + {0.890751, -0.000000, -0.006171, -0.000000, 0.891334, -0.000000, 0.008220, -0.000000, 1.000000}, + {0.884623, -0.000000, 0.000406, -0.000000, 0.884599, -0.000000, -0.000256, -0.000000, 1.000000}, + {500.103027, -0.000000, -0.254630, -0.000000, 532.306519, -0.000000, 127.341362, -0.000000, 1.000000}, + {500.103027, -0.000000, -0.254630, -0.000000, 532.306519, -0.000000, 127.341362, -0.000000, 1.000000}, + {496.100189, -0.000000, -0.254631, -0.000000, 528.302429, -0.000000, 126.321968, -0.000000, 1.000000}, + {220.501587, -0.000000, -0.254630, -0.000000, 234.797379, -0.000000, 56.146561, -0.000000, 1.000000}, + {124.030739, -0.000000, -0.254629, -0.000000, 132.072113, -0.000000, 31.581966, -0.000000, 1.000000}, + {79.376091, -0.000000, -0.254627, -0.000000, 84.526520, -0.000000, 20.211533, -0.000000, 1.000000}, + {55.118771, -0.000000, -0.254625, -0.000000, 58.700134, -0.000000, 14.034864, -0.000000, 1.000000}, + {40.498608, -0.000000, -0.254620, -0.000000, 43.125511, -0.000000, 10.312164, -0.000000, 1.000000}, + {31.003874, -0.000000, -0.254612, -0.000000, 33.016865, -0.000000, 7.894447, -0.000000, 1.000000}, + {24.497622, -0.000000, -0.254601, -0.000000, 26.084778, -0.000000, 6.237792, -0.000000, 1.000000}, + {19.841394, -0.000000, -0.254587, -0.000000, 21.127436, -0.000000, 5.052134, -0.000000, 1.000000}, + {16.397062, -0.000000, -0.254565, -0.000000, 17.458454, -0.000000, 4.175098, -0.000000, 1.000000}, + {13.776876, -0.000000, -0.254539, -0.000000, 14.667887, -0.000000, 3.507907, -0.000000, 1.000000}, + {11.737298, -0.000000, -0.254504, -0.000000, 12.496222, -0.000000, 2.988537, -0.000000, 1.000000}, + {10.118900, -0.000000, -0.254459, -0.000000, 10.772487, -0.000000, 2.576407, -0.000000, 1.000000}, + {8.813082, -0.000000, -0.254400, -0.000000, 9.381595, -0.000000, 2.243875, -0.000000, 1.000000}, + {7.744377, -0.000000, -0.254323, -0.000000, 8.242908, -0.000000, 1.971711, -0.000000, 1.000000}, + {6.858314, -0.000000, -0.254213, -0.000000, 7.299338, -0.000000, 1.746056, -0.000000, 1.000000}, + {6.116047, -0.000000, -0.254036, -0.000000, 6.508431, -0.000000, 1.556966, -0.000000, 1.000000}, + {5.488258, -0.000000, -0.253672, -0.000000, 5.839362, -0.000000, 1.397014, -0.000000, 1.000000}, + {4.953928, -0.000000, -0.252536, -0.000000, 5.269868, -0.000000, 1.260769, -0.000000, 1.000000}, + {4.502042, -0.000000, -0.246960, -0.000000, 4.787960, -0.000000, 1.144903, -0.000000, 1.000000}, + {4.111449, -0.000000, -0.241994, -0.000000, 4.371355, -0.000000, 1.044598, -0.000000, 1.000000}, + {3.770156, -0.000000, -0.239634, -0.000000, 4.007247, -0.000000, 0.957071, -0.000000, 1.000000}, + {3.471863, -0.000000, -0.239300, -0.000000, 3.688913, -0.000000, 0.880745, -0.000000, 1.000000}, + {3.212559, -0.000000, -0.240961, -0.000000, 3.412190, -0.000000, 0.814673, -0.000000, 1.000000}, + {2.986591, -0.000000, -0.244737, -0.000000, 3.171037, -0.000000, 0.757477, -0.000000, 1.000000}, + {2.785418, -0.000000, -0.247656, -0.000000, 2.956166, -0.000000, 0.706487, -0.000000, 1.000000}, + {2.595679, -0.000000, -0.241602, -0.000000, 2.752573, -0.000000, 0.656518, -0.000000, 1.000000}, + {2.425078, -0.000000, -0.236800, -0.000000, 2.569859, -0.000000, 0.611459, -0.000000, 1.000000}, + {2.271984, -0.000000, -0.232837, -0.000000, 2.405893, -0.000000, 0.570904, -0.000000, 1.000000}, + {2.135780, -0.000000, -0.228497, -0.000000, 2.259562, -0.000000, 0.534347, -0.000000, 1.000000}, + {2.015866, -0.000000, -0.223057, -0.000000, 2.129377, -0.000000, 0.501389, -0.000000, 1.000000}, + {1.908273, -0.000000, -0.218877, -0.000000, 2.013013, -0.000000, 0.471732, -0.000000, 1.000000}, + {1.811260, -0.000000, -0.215926, -0.000000, 1.908179, -0.000000, 0.444832, -0.000000, 1.000000}, + {1.725002, -0.000000, -0.212658, -0.000000, 1.813764, -0.000000, 0.420265, -0.000000, 1.000000}, + {1.645228, -0.000000, -0.207778, -0.000000, 1.726113, -0.000000, 0.396551, -0.000000, 1.000000}, + {1.570355, -0.000000, -0.200955, -0.000000, 1.644067, -0.000000, 0.373226, -0.000000, 1.000000}, + {1.504491, -0.000000, -0.193737, -0.000000, 1.570159, -0.000000, 0.351686, -0.000000, 1.000000}, + {1.443768, -0.000000, -0.187609, -0.000000, 1.503430, -0.000000, 0.331315, -0.000000, 1.000000}, + {1.389422, -0.000000, -0.181798, -0.000000, 1.443022, -0.000000, 0.312214, -0.000000, 1.000000}, + {1.340532, -0.000000, -0.175411, -0.000000, 1.387548, -0.000000, 0.293937, -0.000000, 1.000000}, + {1.294192, -0.000000, -0.167390, -0.000000, 1.336115, -0.000000, 0.275390, -0.000000, 1.000000}, + {1.251942, -0.000000, -0.159030, -0.000000, 1.288808, -0.000000, 0.257580, -0.000000, 1.000000}, + {1.212910, -0.000000, -0.151889, -0.000000, 1.246415, -0.000000, 0.240685, -0.000000, 1.000000}, + {1.178843, -0.000000, -0.144487, -0.000000, 1.207720, -0.000000, 0.224191, -0.000000, 1.000000}, + {1.145883, -0.000000, -0.135860, -0.000000, 1.171619, -0.000000, 0.208076, -0.000000, 1.000000}, + {1.115708, -0.000000, -0.127168, -0.000000, 1.138902, -0.000000, 0.192163, -0.000000, 1.000000}, + {1.088149, -0.000000, -0.119284, -0.000000, 1.109597, -0.000000, 0.177288, -0.000000, 1.000000}, + {1.063894, -0.000000, -0.110899, -0.000000, 1.082339, -0.000000, 0.162657, -0.000000, 1.000000}, + {1.040087, -0.000000, -0.101909, -0.000000, 1.057316, -0.000000, 0.148334, -0.000000, 1.000000}, + {1.019179, -0.000000, -0.093683, -0.000000, 1.034936, -0.000000, 0.134590, -0.000000, 1.000000}, + {1.000154, -0.000000, -0.085460, -0.000000, 1.014711, -0.000000, 0.121574, -0.000000, 1.000000}, + {0.982812, -0.000000, -0.076492, -0.000000, 0.995743, -0.000000, 0.108528, -0.000000, 1.000000}, + {0.966830, -0.000000, -0.068357, -0.000000, 0.979060, -0.000000, 0.095997, -0.000000, 1.000000}, + {0.952733, -0.000000, -0.060522, -0.000000, 0.963675, -0.000000, 0.084182, -0.000000, 1.000000}, + {0.940343, -0.000000, -0.051711, -0.000000, 0.949730, -0.000000, 0.072128, -0.000000, 1.000000}, + {0.928987, -0.000000, -0.044153, -0.000000, 0.937170, -0.000000, 0.060903, -0.000000, 1.000000}, + {0.919374, -0.000000, -0.036123, -0.000000, 0.926009, -0.000000, 0.049763, -0.000000, 1.000000}, + {0.910883, -0.000000, -0.028427, -0.000000, 0.915768, -0.000000, 0.039010, -0.000000, 1.000000}, + {0.903483, -0.000000, -0.021144, -0.000000, 0.906677, -0.000000, 0.028717, -0.000000, 1.000000}, + {0.896611, -0.000000, -0.013532, -0.000000, 0.898392, -0.000000, 0.018558, -0.000000, 1.000000}, + {0.890131, -0.000000, -0.006580, -0.000000, 0.890875, -0.000000, 0.009008, -0.000000, 1.000000}, + {0.884366, -0.000000, 0.000233, -0.000000, 0.884355, -0.000000, -0.000117, -0.000000, 1.000000}, + {500.085388, -0.000000, -0.281355, -0.000000, 539.498718, -0.000000, 140.701538, -0.000000, 1.000000}, + {500.085388, -0.000000, -0.281355, -0.000000, 539.498718, -0.000000, 140.701538, -0.000000, 1.000000}, + {496.129486, -0.000000, -0.281355, -0.000000, 535.442322, -0.000000, 139.588684, -0.000000, 1.000000}, + {220.504822, -0.000000, -0.281355, -0.000000, 237.947388, -0.000000, 62.040401, -0.000000, 1.000000}, + {124.021149, -0.000000, -0.281354, -0.000000, 133.850250, -0.000000, 34.894020, -0.000000, 1.000000}, + {79.382919, -0.000000, -0.281351, -0.000000, 85.656876, -0.000000, 22.334780, -0.000000, 1.000000}, + {55.149910, -0.000000, -0.281347, -0.000000, 59.449463, -0.000000, 15.516068, -0.000000, 1.000000}, + {40.500046, -0.000000, -0.281341, -0.000000, 43.702549, -0.000000, 11.394857, -0.000000, 1.000000}, + {31.005716, -0.000000, -0.281331, -0.000000, 33.458839, -0.000000, 8.723551, -0.000000, 1.000000}, + {24.495970, -0.000000, -0.281317, -0.000000, 26.436306, -0.000000, 6.891986, -0.000000, 1.000000}, + {19.841774, -0.000000, -0.281296, -0.000000, 21.410387, -0.000000, 5.582484, -0.000000, 1.000000}, + {16.397760, -0.000000, -0.281269, -0.000000, 17.692585, -0.000000, 4.613454, -0.000000, 1.000000}, + {13.777157, -0.000000, -0.281232, -0.000000, 14.865791, -0.000000, 3.876162, -0.000000, 1.000000}, + {11.739849, -0.000000, -0.281186, -0.000000, 12.664932, -0.000000, 3.302845, -0.000000, 1.000000}, + {10.119039, -0.000000, -0.281126, -0.000000, 10.916929, -0.000000, 2.846814, -0.000000, 1.000000}, + {8.813169, -0.000000, -0.281049, -0.000000, 9.507375, -0.000000, 2.479377, -0.000000, 1.000000}, + {7.744403, -0.000000, -0.280948, -0.000000, 8.353477, -0.000000, 2.178619, -0.000000, 1.000000}, + {6.858627, -0.000000, -0.280807, -0.000000, 7.396985, -0.000000, 1.929334, -0.000000, 1.000000}, + {6.116360, -0.000000, -0.280583, -0.000000, 6.595296, -0.000000, 1.720405, -0.000000, 1.000000}, + {5.488473, -0.000000, -0.280110, -0.000000, 5.917017, -0.000000, 1.543655, -0.000000, 1.000000}, + {4.954888, -0.000000, -0.278502, -0.000000, 5.340717, -0.000000, 1.393211, -0.000000, 1.000000}, + {4.503970, -0.000000, -0.271941, -0.000000, 4.853060, -0.000000, 1.265407, -0.000000, 1.000000}, + {4.111181, -0.000000, -0.267891, -0.000000, 4.428566, -0.000000, 1.154133, -0.000000, 1.000000}, + {3.768369, -0.000000, -0.265773, -0.000000, 4.057742, -0.000000, 1.057074, -0.000000, 1.000000}, + {3.469303, -0.000000, -0.265095, -0.000000, 3.734051, -0.000000, 0.972462, -0.000000, 1.000000}, + {3.208770, -0.000000, -0.265972, -0.000000, 3.452065, -0.000000, 0.898932, -0.000000, 1.000000}, + {2.982601, -0.000000, -0.268632, -0.000000, 3.207271, -0.000000, 0.835382, -0.000000, 1.000000}, + {2.783643, -0.000000, -0.271034, -0.000000, 2.991666, -0.000000, 0.779474, -0.000000, 1.000000}, + {2.597197, -0.000000, -0.266337, -0.000000, 2.788484, -0.000000, 0.725532, -0.000000, 1.000000}, + {2.425579, -0.000000, -0.261946, -0.000000, 2.602286, -0.000000, 0.675694, -0.000000, 1.000000}, + {2.272363, -0.000000, -0.257507, -0.000000, 2.435682, -0.000000, 0.630789, -0.000000, 1.000000}, + {2.136257, -0.000000, -0.252249, -0.000000, 2.286722, -0.000000, 0.590288, -0.000000, 1.000000}, + {2.016254, -0.000000, -0.245987, -0.000000, 2.153961, -0.000000, 0.553734, -0.000000, 1.000000}, + {1.907715, -0.000000, -0.241477, -0.000000, 2.034765, -0.000000, 0.520631, -0.000000, 1.000000}, + {1.811054, -0.000000, -0.237456, -0.000000, 1.927814, -0.000000, 0.490697, -0.000000, 1.000000}, + {1.725645, -0.000000, -0.232799, -0.000000, 1.831199, -0.000000, 0.463338, -0.000000, 1.000000}, + {1.647041, -0.000000, -0.228883, -0.000000, 1.743480, -0.000000, 0.437833, -0.000000, 1.000000}, + {1.573429, -0.000000, -0.221666, -0.000000, 1.660221, -0.000000, 0.412361, -0.000000, 1.000000}, + {1.507411, -0.000000, -0.213485, -0.000000, 1.584587, -0.000000, 0.388152, -0.000000, 1.000000}, + {1.446732, -0.000000, -0.206352, -0.000000, 1.516284, -0.000000, 0.365515, -0.000000, 1.000000}, + {1.392234, -0.000000, -0.199052, -0.000000, 1.453997, -0.000000, 0.343852, -0.000000, 1.000000}, + {1.342587, -0.000000, -0.192529, -0.000000, 1.397789, -0.000000, 0.323495, -0.000000, 1.000000}, + {1.299102, -0.000000, -0.184474, -0.000000, 1.345410, -0.000000, 0.303644, -0.000000, 1.000000}, + {1.255443, -0.000000, -0.175094, -0.000000, 1.297125, -0.000000, 0.283501, -0.000000, 1.000000}, + {1.216458, -0.000000, -0.166503, -0.000000, 1.253496, -0.000000, 0.264238, -0.000000, 1.000000}, + {1.181663, -0.000000, -0.158164, -0.000000, 1.213940, -0.000000, 0.246031, -0.000000, 1.000000}, + {1.149839, -0.000000, -0.149660, -0.000000, 1.177642, -0.000000, 0.228438, -0.000000, 1.000000}, + {1.118388, -0.000000, -0.139728, -0.000000, 1.143770, -0.000000, 0.210864, -0.000000, 1.000000}, + {1.090139, -0.000000, -0.130611, -0.000000, 1.113322, -0.000000, 0.194271, -0.000000, 1.000000}, + {1.065430, -0.000000, -0.121766, -0.000000, 1.086090, -0.000000, 0.178163, -0.000000, 1.000000}, + {1.041704, -0.000000, -0.112248, -0.000000, 1.060429, -0.000000, 0.162552, -0.000000, 1.000000}, + {1.019805, -0.000000, -0.102431, -0.000000, 1.037337, -0.000000, 0.147282, -0.000000, 1.000000}, + {1.000136, -0.000000, -0.093689, -0.000000, 1.016569, -0.000000, 0.133074, -0.000000, 1.000000}, + {0.982816, -0.000000, -0.084240, -0.000000, 0.997568, -0.000000, 0.118970, -0.000000, 1.000000}, + {0.966497, -0.000000, -0.074905, -0.000000, 0.980175, -0.000000, 0.105174, -0.000000, 1.000000}, + {0.952294, -0.000000, -0.065937, -0.000000, 0.964740, -0.000000, 0.091903, -0.000000, 1.000000}, + {0.939346, -0.000000, -0.057105, -0.000000, 0.950457, -0.000000, 0.079127, -0.000000, 1.000000}, + {0.928469, -0.000000, -0.048083, -0.000000, 0.937540, -0.000000, 0.066597, -0.000000, 1.000000}, + {0.918467, -0.000000, -0.039785, -0.000000, 0.926216, -0.000000, 0.054651, -0.000000, 1.000000}, + {0.909924, -0.000000, -0.031266, -0.000000, 0.915738, -0.000000, 0.042831, -0.000000, 1.000000}, + {0.902773, -0.000000, -0.022766, -0.000000, 0.906595, -0.000000, 0.031309, -0.000000, 1.000000}, + {0.895922, -0.000000, -0.015399, -0.000000, 0.898194, -0.000000, 0.020658, -0.000000, 1.000000}, + {0.889737, -0.000000, -0.006970, -0.000000, 0.890620, -0.000000, 0.009789, -0.000000, 1.000000}, + {0.883759, -0.000000, 0.000554, -0.000000, 0.883808, -0.000000, -0.000305, -0.000000, 1.000000}, + {500.004059, -0.000000, -0.308458, -0.000000, 547.499817, -0.000000, 154.230072, -0.000000, 1.000000}, + {500.004059, -0.000000, -0.308458, -0.000000, 547.499817, -0.000000, 154.230072, -0.000000, 1.000000}, + {496.133301, -0.000000, -0.308458, -0.000000, 543.290894, -0.000000, 153.036163, -0.000000, 1.000000}, + {220.502060, -0.000000, -0.308457, -0.000000, 241.478271, -0.000000, 68.015839, -0.000000, 1.000000}, + {124.038658, -0.000000, -0.308455, -0.000000, 135.831497, -0.000000, 38.260685, -0.000000, 1.000000}, + {79.373352, -0.000000, -0.308453, -0.000000, 86.937347, -0.000000, 24.483274, -0.000000, 1.000000}, + {55.120831, -0.000000, -0.308448, -0.000000, 60.371891, -0.000000, 17.002504, -0.000000, 1.000000}, + {40.501167, -0.000000, -0.308439, -0.000000, 44.350986, -0.000000, 12.492838, -0.000000, 1.000000}, + {31.007027, -0.000000, -0.308426, -0.000000, 33.955410, -0.000000, 9.564268, -0.000000, 1.000000}, + {24.496967, -0.000000, -0.308407, -0.000000, 26.827276, -0.000000, 7.556172, -0.000000, 1.000000}, + {19.841742, -0.000000, -0.308381, -0.000000, 21.728579, -0.000000, 6.120216, -0.000000, 1.000000}, + {16.396502, -0.000000, -0.308344, -0.000000, 17.953857, -0.000000, 5.057411, -0.000000, 1.000000}, + {13.777060, -0.000000, -0.308297, -0.000000, 15.084830, -0.000000, 4.249446, -0.000000, 1.000000}, + {11.737354, -0.000000, -0.308236, -0.000000, 12.851175, -0.000000, 3.620251, -0.000000, 1.000000}, + {10.119093, -0.000000, -0.308158, -0.000000, 11.078324, -0.000000, 3.121022, -0.000000, 1.000000}, + {8.813456, -0.000000, -0.308059, -0.000000, 9.647766, -0.000000, 2.718237, -0.000000, 1.000000}, + {7.744670, -0.000000, -0.307930, -0.000000, 8.476608, -0.000000, 2.388505, -0.000000, 1.000000}, + {6.858791, -0.000000, -0.307751, -0.000000, 7.506066, -0.000000, 2.115157, -0.000000, 1.000000}, + {6.116662, -0.000000, -0.307467, -0.000000, 6.692422, -0.000000, 1.886139, -0.000000, 1.000000}, + {5.489186, -0.000000, -0.306847, -0.000000, 6.004448, -0.000000, 1.692433, -0.000000, 1.000000}, + {4.956407, -0.000000, -0.304492, -0.000000, 5.420118, -0.000000, 1.527707, -0.000000, 1.000000}, + {4.504546, -0.000000, -0.297869, -0.000000, 4.924323, -0.000000, 1.387340, -0.000000, 1.000000}, + {4.110711, -0.000000, -0.294196, -0.000000, 4.491868, -0.000000, 1.265113, -0.000000, 1.000000}, + {3.766632, -0.000000, -0.292215, -0.000000, 4.114164, -0.000000, 1.158363, -0.000000, 1.000000}, + {3.466798, -0.000000, -0.291212, -0.000000, 3.784793, -0.000000, 1.065333, -0.000000, 1.000000}, + {3.205278, -0.000000, -0.291376, -0.000000, 3.497379, -0.000000, 0.984259, -0.000000, 1.000000}, + {2.977990, -0.000000, -0.292664, -0.000000, 3.247300, -0.000000, 0.913924, -0.000000, 1.000000}, + {2.780754, -0.000000, -0.293825, -0.000000, 3.029927, -0.000000, 0.852807, -0.000000, 1.000000}, + {2.598023, -0.000000, -0.291780, -0.000000, 2.827943, -0.000000, 0.795426, -0.000000, 1.000000}, + {2.426359, -0.000000, -0.287189, -0.000000, 2.638381, -0.000000, 0.740788, -0.000000, 1.000000}, + {2.273150, -0.000000, -0.282217, -0.000000, 2.468720, -0.000000, 0.691511, -0.000000, 1.000000}, + {2.137629, -0.000000, -0.275934, -0.000000, 2.316854, -0.000000, 0.647072, -0.000000, 1.000000}, + {2.016649, -0.000000, -0.269536, -0.000000, 2.180969, -0.000000, 0.606828, -0.000000, 1.000000}, + {1.908316, -0.000000, -0.264354, -0.000000, 2.059195, -0.000000, 0.570376, -0.000000, 1.000000}, + {1.811435, -0.000000, -0.259004, -0.000000, 1.949594, -0.000000, 0.537145, -0.000000, 1.000000}, + {1.726024, -0.000000, -0.253698, -0.000000, 1.851022, -0.000000, 0.506971, -0.000000, 1.000000}, + {1.646184, -0.000000, -0.249188, -0.000000, 1.761314, -0.000000, 0.478495, -0.000000, 1.000000}, + {1.575210, -0.000000, -0.242344, -0.000000, 1.677494, -0.000000, 0.451335, -0.000000, 1.000000}, + {1.508448, -0.000000, -0.233604, -0.000000, 1.600387, -0.000000, 0.424862, -0.000000, 1.000000}, + {1.447650, -0.000000, -0.225295, -0.000000, 1.529939, -0.000000, 0.399420, -0.000000, 1.000000}, + {1.393654, -0.000000, -0.216970, -0.000000, 1.465873, -0.000000, 0.375509, -0.000000, 1.000000}, + {1.344273, -0.000000, -0.209296, -0.000000, 1.408222, -0.000000, 0.352670, -0.000000, 1.000000}, + {1.301307, -0.000000, -0.201157, -0.000000, 1.355528, -0.000000, 0.331085, -0.000000, 1.000000}, + {1.257490, -0.000000, -0.191377, -0.000000, 1.306143, -0.000000, 0.309278, -0.000000, 1.000000}, + {1.218765, -0.000000, -0.181237, -0.000000, 1.260903, -0.000000, 0.287959, -0.000000, 1.000000}, + {1.184050, -0.000000, -0.172065, -0.000000, 1.220422, -0.000000, 0.267983, -0.000000, 1.000000}, + {1.153910, -0.000000, -0.162713, -0.000000, 1.183954, -0.000000, 0.248840, -0.000000, 1.000000}, + {1.121970, -0.000000, -0.152483, -0.000000, 1.149423, -0.000000, 0.229599, -0.000000, 1.000000}, + {1.093292, -0.000000, -0.141802, -0.000000, 1.118023, -0.000000, 0.210850, -0.000000, 1.000000}, + {1.066901, -0.000000, -0.132184, -0.000000, 1.089554, -0.000000, 0.193371, -0.000000, 1.000000}, + {1.044133, -0.000000, -0.122252, -0.000000, 1.063750, -0.000000, 0.176534, -0.000000, 1.000000}, + {1.020997, -0.000000, -0.111558, -0.000000, 1.040082, -0.000000, 0.160080, -0.000000, 1.000000}, + {1.000942, -0.000000, -0.101469, -0.000000, 1.018656, -0.000000, 0.144094, -0.000000, 1.000000}, + {0.982803, -0.000000, -0.091778, -0.000000, 0.999520, -0.000000, 0.128977, -0.000000, 1.000000}, + {0.966798, -0.000000, -0.081454, -0.000000, 0.981585, -0.000000, 0.114236, -0.000000, 1.000000}, + {0.951777, -0.000000, -0.071569, -0.000000, 0.965495, -0.000000, 0.099797, -0.000000, 1.000000}, + {0.938715, -0.000000, -0.062319, -0.000000, 0.951172, -0.000000, 0.086088, -0.000000, 1.000000}, + {0.927341, -0.000000, -0.052435, -0.000000, 0.938074, -0.000000, 0.072465, -0.000000, 1.000000}, + {0.917571, -0.000000, -0.042911, -0.000000, 0.926259, -0.000000, 0.059213, -0.000000, 1.000000}, + {0.909057, -0.000000, -0.034213, -0.000000, 0.915905, -0.000000, 0.046631, -0.000000, 1.000000}, + {0.901856, -0.000000, -0.024780, -0.000000, 0.906398, -0.000000, 0.034085, -0.000000, 1.000000}, + {0.895258, -0.000000, -0.016189, -0.000000, 0.897839, -0.000000, 0.022177, -0.000000, 1.000000}, + {0.889168, -0.000000, -0.008146, -0.000000, 0.890250, -0.000000, 0.010948, -0.000000, 1.000000}, + {0.883230, -0.000000, 0.000466, -0.000000, 0.883192, -0.000000, -0.000240, -0.000000, 1.000000}, + {499.963531, -0.000000, -0.335981, -0.000000, 556.524414, -0.000000, 167.978119, -0.000000, 1.000000}, + {499.963531, -0.000000, -0.335981, -0.000000, 556.524414, -0.000000, 167.978119, -0.000000, 1.000000}, + {495.969940, -0.000000, -0.335980, -0.000000, 552.236511, -0.000000, 166.636154, -0.000000, 1.000000}, + {220.496994, -0.000000, -0.335980, -0.000000, 245.397583, -0.000000, 74.082863, -0.000000, 1.000000}, + {124.029747, -0.000000, -0.335978, -0.000000, 138.030594, -0.000000, 41.671597, -0.000000, 1.000000}, + {79.380211, -0.000000, -0.335974, -0.000000, 88.337929, -0.000000, 26.670174, -0.000000, 1.000000}, + {55.124668, -0.000000, -0.335967, -0.000000, 61.346493, -0.000000, 18.520765, -0.000000, 1.000000}, + {40.500416, -0.000000, -0.335957, -0.000000, 45.064106, -0.000000, 13.607367, -0.000000, 1.000000}, + {31.006538, -0.000000, -0.335939, -0.000000, 34.504578, -0.000000, 10.417412, -0.000000, 1.000000}, + {24.497702, -0.000000, -0.335915, -0.000000, 27.260410, -0.000000, 8.230656, -0.000000, 1.000000}, + {19.842403, -0.000000, -0.335880, -0.000000, 22.079950, -0.000000, 6.666481, -0.000000, 1.000000}, + {16.396784, -0.000000, -0.335834, -0.000000, 18.246504, -0.000000, 5.508804, -0.000000, 1.000000}, + {13.776938, -0.000000, -0.335773, -0.000000, 15.328876, -0.000000, 4.628520, -0.000000, 1.000000}, + {11.737518, -0.000000, -0.335695, -0.000000, 13.059061, -0.000000, 3.943273, -0.000000, 1.000000}, + {10.118959, -0.000000, -0.335595, -0.000000, 11.257472, -0.000000, 3.399409, -0.000000, 1.000000}, + {8.813545, -0.000000, -0.335469, -0.000000, 9.803328, -0.000000, 2.960751, -0.000000, 1.000000}, + {7.744760, -0.000000, -0.335306, -0.000000, 8.613284, -0.000000, 2.601569, -0.000000, 1.000000}, + {6.858911, -0.000000, -0.335081, -0.000000, 7.626686, -0.000000, 2.303839, -0.000000, 1.000000}, + {6.116867, -0.000000, -0.334722, -0.000000, 6.799984, -0.000000, 2.054390, -0.000000, 1.000000}, + {5.489538, -0.000000, -0.333899, -0.000000, 6.100828, -0.000000, 1.843467, -0.000000, 1.000000}, + {4.958295, -0.000000, -0.330330, -0.000000, 5.508531, -0.000000, 1.664420, -0.000000, 1.000000}, + {4.504887, -0.000000, -0.324234, -0.000000, 5.002817, -0.000000, 1.511109, -0.000000, 1.000000}, + {4.109335, -0.000000, -0.321090, -0.000000, 4.561582, -0.000000, 1.377486, -0.000000, 1.000000}, + {3.764962, -0.000000, -0.318983, -0.000000, 4.176945, -0.000000, 1.261108, -0.000000, 1.000000}, + {3.464554, -0.000000, -0.317661, -0.000000, 3.841364, -0.000000, 1.159541, -0.000000, 1.000000}, + {3.202218, -0.000000, -0.317137, -0.000000, 3.548244, -0.000000, 1.070838, -0.000000, 1.000000}, + {2.974161, -0.000000, -0.317094, -0.000000, 3.293050, -0.000000, 0.993661, -0.000000, 1.000000}, + {2.776942, -0.000000, -0.316438, -0.000000, 3.071263, -0.000000, 0.926642, -0.000000, 1.000000}, + {2.598937, -0.000000, -0.317193, -0.000000, 2.870964, -0.000000, 0.866299, -0.000000, 1.000000}, + {2.427425, -0.000000, -0.312590, -0.000000, 2.678270, -0.000000, 0.806866, -0.000000, 1.000000}, + {2.274718, -0.000000, -0.306936, -0.000000, 2.505201, -0.000000, 0.753265, -0.000000, 1.000000}, + {2.139724, -0.000000, -0.299649, -0.000000, 2.350118, -0.000000, 0.704787, -0.000000, 1.000000}, + {2.017244, -0.000000, -0.293404, -0.000000, 2.210779, -0.000000, 0.660614, -0.000000, 1.000000}, + {1.907668, -0.000000, -0.287240, -0.000000, 2.086214, -0.000000, 0.620401, -0.000000, 1.000000}, + {1.811692, -0.000000, -0.280550, -0.000000, 1.974219, -0.000000, 0.584016, -0.000000, 1.000000}, + {1.724951, -0.000000, -0.274917, -0.000000, 1.872771, -0.000000, 0.550807, -0.000000, 1.000000}, + {1.646035, -0.000000, -0.269329, -0.000000, 1.780547, -0.000000, 0.519510, -0.000000, 1.000000}, + {1.576869, -0.000000, -0.262878, -0.000000, 1.695965, -0.000000, 0.490367, -0.000000, 1.000000}, + {1.510845, -0.000000, -0.253765, -0.000000, 1.617368, -0.000000, 0.461647, -0.000000, 1.000000}, + {1.450702, -0.000000, -0.244095, -0.000000, 1.544855, -0.000000, 0.433864, -0.000000, 1.000000}, + {1.395025, -0.000000, -0.235015, -0.000000, 1.479174, -0.000000, 0.407386, -0.000000, 1.000000}, + {1.346266, -0.000000, -0.225913, -0.000000, 1.419951, -0.000000, 0.382305, -0.000000, 1.000000}, + {1.302227, -0.000000, -0.217139, -0.000000, 1.366424, -0.000000, 0.358755, -0.000000, 1.000000}, + {1.261261, -0.000000, -0.207478, -0.000000, 1.316138, -0.000000, 0.335440, -0.000000, 1.000000}, + {1.222082, -0.000000, -0.196285, -0.000000, 1.269962, -0.000000, 0.312482, -0.000000, 1.000000}, + {1.185929, -0.000000, -0.185691, -0.000000, 1.228030, -0.000000, 0.290027, -0.000000, 1.000000}, + {1.153747, -0.000000, -0.175477, -0.000000, 1.190625, -0.000000, 0.269032, -0.000000, 1.000000}, + {1.125762, -0.000000, -0.165237, -0.000000, 1.155834, -0.000000, 0.248998, -0.000000, 1.000000}, + {1.096721, -0.000000, -0.153589, -0.000000, 1.123515, -0.000000, 0.228308, -0.000000, 1.000000}, + {1.069360, -0.000000, -0.142489, -0.000000, 1.094246, -0.000000, 0.209027, -0.000000, 1.000000}, + {1.045367, -0.000000, -0.131878, -0.000000, 1.067532, -0.000000, 0.190257, -0.000000, 1.000000}, + {1.023498, -0.000000, -0.120932, -0.000000, 1.043118, -0.000000, 0.172562, -0.000000, 1.000000}, + {1.001724, -0.000000, -0.109595, -0.000000, 1.020579, -0.000000, 0.155437, -0.000000, 1.000000}, + {0.983142, -0.000000, -0.098630, -0.000000, 1.001269, -0.000000, 0.138937, -0.000000, 1.000000}, + {0.966655, -0.000000, -0.088558, -0.000000, 0.983110, -0.000000, 0.123324, -0.000000, 1.000000}, + {0.951723, -0.000000, -0.077180, -0.000000, 0.966699, -0.000000, 0.107542, -0.000000, 1.000000}, + {0.938071, -0.000000, -0.066745, -0.000000, 0.951660, -0.000000, 0.092593, -0.000000, 1.000000}, + {0.926456, -0.000000, -0.057052, -0.000000, 0.938666, -0.000000, 0.078171, -0.000000, 1.000000}, + {0.916660, -0.000000, -0.046150, -0.000000, 0.926532, -0.000000, 0.063782, -0.000000, 1.000000}, + {0.908106, -0.000000, -0.036718, -0.000000, 0.915869, -0.000000, 0.050231, -0.000000, 1.000000}, + {0.901014, -0.000000, -0.027080, -0.000000, 0.906376, -0.000000, 0.036927, -0.000000, 1.000000}, + {0.894417, -0.000000, -0.017603, -0.000000, 0.897523, -0.000000, 0.024040, -0.000000, 1.000000}, + {0.888523, -0.000000, -0.008631, -0.000000, 0.889810, -0.000000, 0.011757, -0.000000, 1.000000}, + {0.882652, -0.000000, 0.000441, -0.000000, 0.882652, -0.000000, -0.000229, -0.000000, 1.000000}, + {499.968231, -0.000000, -0.363969, -0.000000, 566.297241, -0.000000, 181.972702, -0.000000, 1.000000}, + {499.968231, -0.000000, -0.363969, -0.000000, 566.297241, -0.000000, 181.972702, -0.000000, 1.000000}, + {496.146088, -0.000000, -0.363969, -0.000000, 561.857544, -0.000000, 180.581558, -0.000000, 1.000000}, + {220.504272, -0.000000, -0.363968, -0.000000, 249.704727, -0.000000, 80.256622, -0.000000, 1.000000}, + {124.030128, -0.000000, -0.363966, -0.000000, 140.464020, -0.000000, 45.143036, -0.000000, 1.000000}, + {79.378242, -0.000000, -0.363961, -0.000000, 89.894493, -0.000000, 28.891125, -0.000000, 1.000000}, + {55.123013, -0.000000, -0.363952, -0.000000, 62.429966, -0.000000, 20.062996, -0.000000, 1.000000}, + {40.498146, -0.000000, -0.363938, -0.000000, 45.862816, -0.000000, 14.739956, -0.000000, 1.000000}, + {31.005125, -0.000000, -0.363917, -0.000000, 35.114017, -0.000000, 11.284781, -0.000000, 1.000000}, + {24.498278, -0.000000, -0.363885, -0.000000, 27.739168, -0.000000, 8.916480, -0.000000, 1.000000}, + {19.842779, -0.000000, -0.363842, -0.000000, 22.467678, -0.000000, 7.221962, -0.000000, 1.000000}, + {16.396282, -0.000000, -0.363782, -0.000000, 18.565359, -0.000000, 5.967456, -0.000000, 1.000000}, + {13.777002, -0.000000, -0.363706, -0.000000, 15.598725, -0.000000, 5.014091, -0.000000, 1.000000}, + {11.737373, -0.000000, -0.363606, -0.000000, 13.288247, -0.000000, 4.271647, -0.000000, 1.000000}, + {10.119102, -0.000000, -0.363481, -0.000000, 11.454740, -0.000000, 3.682573, -0.000000, 1.000000}, + {8.813531, -0.000000, -0.363323, -0.000000, 9.975114, -0.000000, 3.207305, -0.000000, 1.000000}, + {7.744850, -0.000000, -0.363118, -0.000000, 8.763934, -0.000000, 2.818219, -0.000000, 1.000000}, + {6.859071, -0.000000, -0.362839, -0.000000, 7.760055, -0.000000, 2.495710, -0.000000, 1.000000}, + {6.117049, -0.000000, -0.362386, -0.000000, 6.918628, -0.000000, 2.225478, -0.000000, 1.000000}, + {5.490108, -0.000000, -0.361265, -0.000000, 6.207444, -0.000000, 1.997018, -0.000000, 1.000000}, + {4.960614, -0.000000, -0.355924, -0.000000, 5.606764, -0.000000, 1.803529, -0.000000, 1.000000}, + {4.504549, -0.000000, -0.351189, -0.000000, 5.088837, -0.000000, 1.636706, -0.000000, 1.000000}, + {4.108239, -0.000000, -0.348333, -0.000000, 4.638559, -0.000000, 1.491735, -0.000000, 1.000000}, + {3.763214, -0.000000, -0.346106, -0.000000, 4.246560, -0.000000, 1.365421, -0.000000, 1.000000}, + {3.462314, -0.000000, -0.344456, -0.000000, 3.904105, -0.000000, 1.255177, -0.000000, 1.000000}, + {3.199532, -0.000000, -0.343225, -0.000000, 3.605123, -0.000000, 1.158787, -0.000000, 1.000000}, + {2.971133, -0.000000, -0.341804, -0.000000, 3.344415, -0.000000, 1.074774, -0.000000, 1.000000}, + {2.772751, -0.000000, -0.340274, -0.000000, 3.116952, -0.000000, 1.001515, -0.000000, 1.000000}, + {2.596363, -0.000000, -0.341637, -0.000000, 2.914270, -0.000000, 0.936749, -0.000000, 1.000000}, + {2.429267, -0.000000, -0.338366, -0.000000, 2.721623, -0.000000, 0.874241, -0.000000, 1.000000}, + {2.276716, -0.000000, -0.331707, -0.000000, 2.545249, -0.000000, 0.816045, -0.000000, 1.000000}, + {2.139614, -0.000000, -0.324164, -0.000000, 2.386361, -0.000000, 0.762833, -0.000000, 1.000000}, + {2.017068, -0.000000, -0.317407, -0.000000, 2.243773, -0.000000, 0.714914, -0.000000, 1.000000}, + {1.909117, -0.000000, -0.310076, -0.000000, 2.115968, -0.000000, 0.671554, -0.000000, 1.000000}, + {1.811493, -0.000000, -0.302688, -0.000000, 2.000518, -0.000000, 0.631529, -0.000000, 1.000000}, + {1.724347, -0.000000, -0.296097, -0.000000, 1.896322, -0.000000, 0.594904, -0.000000, 1.000000}, + {1.648275, -0.000000, -0.289193, -0.000000, 1.801607, -0.000000, 0.561194, -0.000000, 1.000000}, + {1.578603, -0.000000, -0.282627, -0.000000, 1.715451, -0.000000, 0.529671, -0.000000, 1.000000}, + {1.515418, -0.000000, -0.274036, -0.000000, 1.636306, -0.000000, 0.499329, -0.000000, 1.000000}, + {1.454588, -0.000000, -0.263284, -0.000000, 1.561852, -0.000000, 0.468878, -0.000000, 1.000000}, + {1.398949, -0.000000, -0.253081, -0.000000, 1.494254, -0.000000, 0.440075, -0.000000, 1.000000}, + {1.349936, -0.000000, -0.242881, -0.000000, 1.433237, -0.000000, 0.413068, -0.000000, 1.000000}, + {1.304861, -0.000000, -0.233360, -0.000000, 1.378308, -0.000000, 0.387099, -0.000000, 1.000000}, + {1.265099, -0.000000, -0.223168, -0.000000, 1.328517, -0.000000, 0.362542, -0.000000, 1.000000}, + {1.224683, -0.000000, -0.211487, -0.000000, 1.280142, -0.000000, 0.337065, -0.000000, 1.000000}, + {1.188010, -0.000000, -0.199550, -0.000000, 1.236707, -0.000000, 0.312683, -0.000000, 1.000000}, + {1.156214, -0.000000, -0.188218, -0.000000, 1.198166, -0.000000, 0.289877, -0.000000, 1.000000}, + {1.127514, -0.000000, -0.177076, -0.000000, 1.162704, -0.000000, 0.267919, -0.000000, 1.000000}, + {1.097764, -0.000000, -0.165343, -0.000000, 1.129468, -0.000000, 0.245598, -0.000000, 1.000000}, + {1.072534, -0.000000, -0.152843, -0.000000, 1.099195, -0.000000, 0.224450, -0.000000, 1.000000}, + {1.047298, -0.000000, -0.141324, -0.000000, 1.071817, -0.000000, 0.204210, -0.000000, 1.000000}, + {1.025331, -0.000000, -0.129715, -0.000000, 1.046660, -0.000000, 0.184897, -0.000000, 1.000000}, + {1.003407, -0.000000, -0.117908, -0.000000, 1.023641, -0.000000, 0.166445, -0.000000, 1.000000}, + {0.984019, -0.000000, -0.105527, -0.000000, 1.003265, -0.000000, 0.148492, -0.000000, 1.000000}, + {0.966239, -0.000000, -0.094785, -0.000000, 0.984484, -0.000000, 0.131894, -0.000000, 1.000000}, + {0.951617, -0.000000, -0.082853, -0.000000, 0.968104, -0.000000, 0.115195, -0.000000, 1.000000}, + {0.937585, -0.000000, -0.071767, -0.000000, 0.952411, -0.000000, 0.099140, -0.000000, 1.000000}, + {0.925780, -0.000000, -0.060710, -0.000000, 0.939094, -0.000000, 0.083724, -0.000000, 1.000000}, + {0.915454, -0.000000, -0.050148, -0.000000, 0.926720, -0.000000, 0.068595, -0.000000, 1.000000}, + {0.907022, -0.000000, -0.039372, -0.000000, 0.915744, -0.000000, 0.053866, -0.000000, 1.000000}, + {0.900234, -0.000000, -0.028820, -0.000000, 0.906250, -0.000000, 0.039533, -0.000000, 1.000000}, + {0.893538, -0.000000, -0.019208, -0.000000, 0.897160, -0.000000, 0.025980, -0.000000, 1.000000}, + {0.887857, -0.000000, -0.008673, -0.000000, 0.889286, -0.000000, 0.012327, -0.000000, 1.000000}, + {0.882119, -0.000000, 0.000182, -0.000000, 0.882073, -0.000000, -0.000104, -0.000000, 1.000000}, + {499.895782, -0.000000, -0.392469, -0.000000, 577.124207, -0.000000, 196.193802, -0.000000, 1.000000}, + {499.895782, -0.000000, -0.392469, -0.000000, 577.124207, -0.000000, 196.193802, -0.000000, 1.000000}, + {496.178070, -0.000000, -0.392469, -0.000000, 572.483826, -0.000000, 194.734726, -0.000000, 1.000000}, + {220.505005, -0.000000, -0.392468, -0.000000, 254.459412, -0.000000, 86.541306, -0.000000, 1.000000}, + {124.066757, -0.000000, -0.392465, -0.000000, 143.123749, -0.000000, 48.692413, -0.000000, 1.000000}, + {79.377106, -0.000000, -0.392460, -0.000000, 91.606567, -0.000000, 31.153023, -0.000000, 1.000000}, + {55.125988, -0.000000, -0.392448, -0.000000, 63.613686, -0.000000, 21.635195, -0.000000, 1.000000}, + {40.497841, -0.000000, -0.392431, -0.000000, 46.736820, -0.000000, 15.894069, -0.000000, 1.000000}, + {31.004784, -0.000000, -0.392404, -0.000000, 35.781277, -0.000000, 12.168279, -0.000000, 1.000000}, + {24.498316, -0.000000, -0.392365, -0.000000, 28.267958, -0.000000, 9.614630, -0.000000, 1.000000}, + {19.842012, -0.000000, -0.392310, -0.000000, 22.895582, -0.000000, 7.787116, -0.000000, 1.000000}, + {16.393692, -0.000000, -0.392236, -0.000000, 18.921135, -0.000000, 6.433811, -0.000000, 1.000000}, + {13.776231, -0.000000, -0.392140, -0.000000, 15.895071, -0.000000, 5.406358, -0.000000, 1.000000}, + {11.737317, -0.000000, -0.392017, -0.000000, 13.540437, -0.000000, 4.606046, -0.000000, 1.000000}, + {10.119299, -0.000000, -0.391860, -0.000000, 11.671990, -0.000000, 3.970945, -0.000000, 1.000000}, + {8.813539, -0.000000, -0.391663, -0.000000, 10.164061, -0.000000, 3.458361, -0.000000, 1.000000}, + {7.744664, -0.000000, -0.391410, -0.000000, 8.929850, -0.000000, 3.038735, -0.000000, 1.000000}, + {6.859041, -0.000000, -0.391064, -0.000000, 7.906443, -0.000000, 2.690988, -0.000000, 1.000000}, + {6.117191, -0.000000, -0.390493, -0.000000, 7.049109, -0.000000, 2.399647, -0.000000, 1.000000}, + {5.490591, -0.000000, -0.388913, -0.000000, 6.324887, -0.000000, 2.153405, -0.000000, 1.000000}, + {4.961344, -0.000000, -0.382807, -0.000000, 5.712574, -0.000000, 1.944774, -0.000000, 1.000000}, + {4.503645, -0.000000, -0.378847, -0.000000, 5.182839, -0.000000, 1.764357, -0.000000, 1.000000}, + {4.106829, -0.000000, -0.375953, -0.000000, 4.723369, -0.000000, 1.607849, -0.000000, 1.000000}, + {3.761420, -0.000000, -0.373613, -0.000000, 4.322923, -0.000000, 1.471496, -0.000000, 1.000000}, + {3.459984, -0.000000, -0.371609, -0.000000, 3.973384, -0.000000, 1.352316, -0.000000, 1.000000}, + {3.197148, -0.000000, -0.369602, -0.000000, 3.667831, -0.000000, 1.248221, -0.000000, 1.000000}, + {2.968586, -0.000000, -0.366670, -0.000000, 3.401501, -0.000000, 1.157259, -0.000000, 1.000000}, + {2.769268, -0.000000, -0.365084, -0.000000, 3.167947, -0.000000, 1.077879, -0.000000, 1.000000}, + {2.593266, -0.000000, -0.365885, -0.000000, 2.960350, -0.000000, 1.007893, -0.000000, 1.000000}, + {2.429741, -0.000000, -0.364240, -0.000000, 2.769236, -0.000000, 0.942258, -0.000000, 1.000000}, + {2.278213, -0.000000, -0.356507, -0.000000, 2.588331, -0.000000, 0.879522, -0.000000, 1.000000}, + {2.140011, -0.000000, -0.349117, -0.000000, 2.425995, -0.000000, 0.822054, -0.000000, 1.000000}, + {2.017176, -0.000000, -0.341723, -0.000000, 2.279764, -0.000000, 0.770096, -0.000000, 1.000000}, + {1.910110, -0.000000, -0.333101, -0.000000, 2.148236, -0.000000, 0.723308, -0.000000, 1.000000}, + {1.812697, -0.000000, -0.325185, -0.000000, 2.029458, -0.000000, 0.679938, -0.000000, 1.000000}, + {1.726252, -0.000000, -0.317534, -0.000000, 1.921885, -0.000000, 0.640257, -0.000000, 1.000000}, + {1.650866, -0.000000, -0.309423, -0.000000, 1.824884, -0.000000, 0.603797, -0.000000, 1.000000}, + {1.581178, -0.000000, -0.302480, -0.000000, 1.737038, -0.000000, 0.569681, -0.000000, 1.000000}, + {1.519795, -0.000000, -0.293708, -0.000000, 1.656026, -0.000000, 0.537762, -0.000000, 1.000000}, + {1.458826, -0.000000, -0.282751, -0.000000, 1.580788, -0.000000, 0.505354, -0.000000, 1.000000}, + {1.403581, -0.000000, -0.271053, -0.000000, 1.511274, -0.000000, 0.473801, -0.000000, 1.000000}, + {1.353397, -0.000000, -0.259951, -0.000000, 1.448919, -0.000000, 0.444228, -0.000000, 1.000000}, + {1.308285, -0.000000, -0.248922, -0.000000, 1.391315, -0.000000, 0.416226, -0.000000, 1.000000}, + {1.268348, -0.000000, -0.238120, -0.000000, 1.340640, -0.000000, 0.389633, -0.000000, 1.000000}, + {1.229288, -0.000000, -0.226738, -0.000000, 1.292624, -0.000000, 0.363043, -0.000000, 1.000000}, + {1.191782, -0.000000, -0.213640, -0.000000, 1.247216, -0.000000, 0.336137, -0.000000, 1.000000}, + {1.158123, -0.000000, -0.200732, -0.000000, 1.206612, -0.000000, 0.310605, -0.000000, 1.000000}, + {1.127971, -0.000000, -0.188975, -0.000000, 1.170084, -0.000000, 0.286786, -0.000000, 1.000000}, + {1.101525, -0.000000, -0.176419, -0.000000, 1.136978, -0.000000, 0.263543, -0.000000, 1.000000}, + {1.073173, -0.000000, -0.163796, -0.000000, 1.104285, -0.000000, 0.240321, -0.000000, 1.000000}, + {1.049204, -0.000000, -0.150419, -0.000000, 1.076553, -0.000000, 0.218232, -0.000000, 1.000000}, + {1.026314, -0.000000, -0.138238, -0.000000, 1.050268, -0.000000, 0.197342, -0.000000, 1.000000}, + {1.006098, -0.000000, -0.126123, -0.000000, 1.026766, -0.000000, 0.177471, -0.000000, 1.000000}, + {0.984793, -0.000000, -0.112915, -0.000000, 1.005000, -0.000000, 0.158189, -0.000000, 1.000000}, + {0.966549, -0.000000, -0.100712, -0.000000, 0.986082, -0.000000, 0.140060, -0.000000, 1.000000}, + {0.951129, -0.000000, -0.088804, -0.000000, 0.969373, -0.000000, 0.122769, -0.000000, 1.000000}, + {0.937059, -0.000000, -0.076745, -0.000000, 0.953264, -0.000000, 0.105741, -0.000000, 1.000000}, + {0.925190, -0.000000, -0.064338, -0.000000, 0.939572, -0.000000, 0.088949, -0.000000, 1.000000}, + {0.914462, -0.000000, -0.053706, -0.000000, 0.926965, -0.000000, 0.073288, -0.000000, 1.000000}, + {0.906082, -0.000000, -0.041747, -0.000000, 0.915858, -0.000000, 0.057396, -0.000000, 1.000000}, + {0.898882, -0.000000, -0.030772, -0.000000, 0.905788, -0.000000, 0.042190, -0.000000, 1.000000}, + {0.892759, -0.000000, -0.020500, -0.000000, 0.896808, -0.000000, 0.027660, -0.000000, 1.000000}, + {0.887003, -0.000000, -0.009507, -0.000000, 0.888728, -0.000000, 0.013275, -0.000000, 1.000000}, + {0.881333, -0.000000, 0.000384, -0.000000, 0.881380, -0.000000, -0.000207, -0.000000, 1.000000}, + {500.059601, -0.000000, -0.421533, -0.000000, 588.824036, -0.000000, 210.791840, -0.000000, 1.000000}, + {500.059601, -0.000000, -0.421533, -0.000000, 588.824036, -0.000000, 210.791840, -0.000000, 1.000000}, + {496.084259, -0.000000, -0.421533, -0.000000, 584.296509, -0.000000, 209.116089, -0.000000, 1.000000}, + {220.478745, -0.000000, -0.421532, -0.000000, 259.678864, -0.000000, 92.938858, -0.000000, 1.000000}, + {124.071396, -0.000000, -0.421528, -0.000000, 146.019547, -0.000000, 52.299969, -0.000000, 1.000000}, + {79.379288, -0.000000, -0.421521, -0.000000, 93.482513, -0.000000, 33.460957, -0.000000, 1.000000}, + {55.121456, -0.000000, -0.421507, -0.000000, 64.919861, -0.000000, 23.235432, -0.000000, 1.000000}, + {40.498322, -0.000000, -0.421486, -0.000000, 47.693100, -0.000000, 17.071272, -0.000000, 1.000000}, + {31.004887, -0.000000, -0.421452, -0.000000, 36.514622, -0.000000, 13.069407, -0.000000, 1.000000}, + {24.497126, -0.000000, -0.421403, -0.000000, 28.848557, -0.000000, 10.326144, -0.000000, 1.000000}, + {19.840986, -0.000000, -0.421336, -0.000000, 23.364748, -0.000000, 8.363354, -0.000000, 1.000000}, + {16.396778, -0.000000, -0.421245, -0.000000, 19.307020, -0.000000, 6.911393, -0.000000, 1.000000}, + {13.776492, -0.000000, -0.421126, -0.000000, 16.220074, -0.000000, 5.806774, -0.000000, 1.000000}, + {11.737366, -0.000000, -0.420973, -0.000000, 13.817286, -0.000000, 4.947097, -0.000000, 1.000000}, + {10.118930, -0.000000, -0.420781, -0.000000, 11.910255, -0.000000, 4.264768, -0.000000, 1.000000}, + {8.813279, -0.000000, -0.420539, -0.000000, 10.371409, -0.000000, 3.714247, -0.000000, 1.000000}, + {7.744568, -0.000000, -0.420229, -0.000000, 9.111755, -0.000000, 3.263614, -0.000000, 1.000000}, + {6.859016, -0.000000, -0.419803, -0.000000, 8.067348, -0.000000, 2.890126, -0.000000, 1.000000}, + {6.117234, -0.000000, -0.419075, -0.000000, 7.192148, -0.000000, 2.577196, -0.000000, 1.000000}, + {5.491295, -0.000000, -0.416748, -0.000000, 6.453664, -0.000000, 2.312911, -0.000000, 1.000000}, + {4.961310, -0.000000, -0.410452, -0.000000, 5.827813, -0.000000, 2.088539, -0.000000, 1.000000}, + {4.502675, -0.000000, -0.406869, -0.000000, 5.286016, -0.000000, 1.894400, -0.000000, 1.000000}, + {4.105444, -0.000000, -0.403979, -0.000000, 4.816198, -0.000000, 1.726133, -0.000000, 1.000000}, + {3.759574, -0.000000, -0.401532, -0.000000, 4.406865, -0.000000, 1.579451, -0.000000, 1.000000}, + {3.457894, -0.000000, -0.399128, -0.000000, 4.049322, -0.000000, 1.451311, -0.000000, 1.000000}, + {3.194794, -0.000000, -0.396226, -0.000000, 3.737089, -0.000000, 1.339215, -0.000000, 1.000000}, + {2.966285, -0.000000, -0.391930, -0.000000, 3.464280, -0.000000, 1.241265, -0.000000, 1.000000}, + {2.765135, -0.000000, -0.390198, -0.000000, 3.222786, -0.000000, 1.155112, -0.000000, 1.000000}, + {2.587516, -0.000000, -0.390249, -0.000000, 3.010828, -0.000000, 1.079116, -0.000000, 1.000000}, + {2.430748, -0.000000, -0.389467, -0.000000, 2.818973, -0.000000, 1.011274, -0.000000, 1.000000}, + {2.279364, -0.000000, -0.381881, -0.000000, 2.635402, -0.000000, 0.944029, -0.000000, 1.000000}, + {2.141573, -0.000000, -0.374249, -0.000000, 2.469073, -0.000000, 0.882394, -0.000000, 1.000000}, + {2.019445, -0.000000, -0.366010, -0.000000, 2.318337, -0.000000, 0.826555, -0.000000, 1.000000}, + {1.912733, -0.000000, -0.356592, -0.000000, 2.182500, -0.000000, 0.775859, -0.000000, 1.000000}, + {1.814888, -0.000000, -0.347909, -0.000000, 2.060533, -0.000000, 0.729075, -0.000000, 1.000000}, + {1.728283, -0.000000, -0.339014, -0.000000, 1.949563, -0.000000, 0.686079, -0.000000, 1.000000}, + {1.651824, -0.000000, -0.330054, -0.000000, 1.850127, -0.000000, 0.646755, -0.000000, 1.000000}, + {1.582111, -0.000000, -0.321679, -0.000000, 1.759212, -0.000000, 0.609780, -0.000000, 1.000000}, + {1.520755, -0.000000, -0.312708, -0.000000, 1.677031, -0.000000, 0.575687, -0.000000, 1.000000}, + {1.462069, -0.000000, -0.302372, -0.000000, 1.600912, -0.000000, 0.542151, -0.000000, 1.000000}, + {1.406505, -0.000000, -0.289490, -0.000000, 1.529467, -0.000000, 0.507994, -0.000000, 1.000000}, + {1.355670, -0.000000, -0.277096, -0.000000, 1.464466, -0.000000, 0.475681, -0.000000, 1.000000}, + {1.310462, -0.000000, -0.264909, -0.000000, 1.405518, -0.000000, 0.445162, -0.000000, 1.000000}, + {1.269723, -0.000000, -0.253147, -0.000000, 1.352767, -0.000000, 0.416433, -0.000000, 1.000000}, + {1.232644, -0.000000, -0.241229, -0.000000, 1.304071, -0.000000, 0.388466, -0.000000, 1.000000}, + {1.195341, -0.000000, -0.227774, -0.000000, 1.258229, -0.000000, 0.359962, -0.000000, 1.000000}, + {1.161219, -0.000000, -0.213755, -0.000000, 1.215797, -0.000000, 0.332265, -0.000000, 1.000000}, + {1.129898, -0.000000, -0.200684, -0.000000, 1.177878, -0.000000, 0.306082, -0.000000, 1.000000}, + {1.102760, -0.000000, -0.187138, -0.000000, 1.143550, -0.000000, 0.280904, -0.000000, 1.000000}, + {1.076280, -0.000000, -0.174702, -0.000000, 1.111130, -0.000000, 0.256666, -0.000000, 1.000000}, + {1.050704, -0.000000, -0.159825, -0.000000, 1.081843, -0.000000, 0.232502, -0.000000, 1.000000}, + {1.027316, -0.000000, -0.146853, -0.000000, 1.054068, -0.000000, 0.209984, -0.000000, 1.000000}, + {1.006763, -0.000000, -0.133423, -0.000000, 1.030436, -0.000000, 0.188332, -0.000000, 1.000000}, + {0.986885, -0.000000, -0.120554, -0.000000, 1.008011, -0.000000, 0.168001, -0.000000, 1.000000}, + {0.967502, -0.000000, -0.106695, -0.000000, 0.987827, -0.000000, 0.148440, -0.000000, 1.000000}, + {0.950414, -0.000000, -0.093989, -0.000000, 0.970286, -0.000000, 0.129859, -0.000000, 1.000000}, + {0.936580, -0.000000, -0.081503, -0.000000, 0.954511, -0.000000, 0.112117, -0.000000, 1.000000}, + {0.924112, -0.000000, -0.068650, -0.000000, 0.939973, -0.000000, 0.094527, -0.000000, 1.000000}, + {0.913757, -0.000000, -0.056414, -0.000000, 0.927188, -0.000000, 0.077515, -0.000000, 1.000000}, + {0.904744, -0.000000, -0.044583, -0.000000, 0.915818, -0.000000, 0.061041, -0.000000, 1.000000}, + {0.897668, -0.000000, -0.033002, -0.000000, 0.905418, -0.000000, 0.044985, -0.000000, 1.000000}, + {0.891905, -0.000000, -0.021049, -0.000000, 0.896403, -0.000000, 0.029089, -0.000000, 1.000000}, + {0.886193, -0.000000, -0.010424, -0.000000, 0.888067, -0.000000, 0.014262, -0.000000, 1.000000}, + {0.880556, -0.000000, 0.000243, -0.000000, 0.880561, -0.000000, -0.000090, -0.000000, 1.000000}, + {500.116302, -0.000000, -0.451214, -0.000000, 601.644836, -0.000000, 225.660080, -0.000000, 1.000000}, + {500.116302, -0.000000, -0.451214, -0.000000, 601.644836, -0.000000, 225.660080, -0.000000, 1.000000}, + {496.419373, -0.000000, -0.451215, -0.000000, 596.902283, -0.000000, 223.992233, -0.000000, 1.000000}, + {220.515854, -0.000000, -0.451213, -0.000000, 265.362183, -0.000000, 99.499649, -0.000000, 1.000000}, + {124.011566, -0.000000, -0.451209, -0.000000, 149.283890, -0.000000, 55.956001, -0.000000, 1.000000}, + {79.376762, -0.000000, -0.451200, -0.000000, 95.543793, -0.000000, 35.815880, -0.000000, 1.000000}, + {55.119709, -0.000000, -0.451184, -0.000000, 66.349274, -0.000000, 24.870659, -0.000000, 1.000000}, + {40.497002, -0.000000, -0.451157, -0.000000, 48.741329, -0.000000, 18.272650, -0.000000, 1.000000}, + {31.004295, -0.000000, -0.451116, -0.000000, 37.316608, -0.000000, 13.989375, -0.000000, 1.000000}, + {24.494001, -0.000000, -0.451056, -0.000000, 29.478388, -0.000000, 11.051729, -0.000000, 1.000000}, + {19.841381, -0.000000, -0.450973, -0.000000, 23.878242, -0.000000, 8.952353, -0.000000, 1.000000}, + {16.395880, -0.000000, -0.450861, -0.000000, 19.731627, -0.000000, 7.397599, -0.000000, 1.000000}, + {13.776148, -0.000000, -0.450716, -0.000000, 16.576433, -0.000000, 6.215408, -0.000000, 1.000000}, + {11.736938, -0.000000, -0.450530, -0.000000, 14.120349, -0.000000, 5.295169, -0.000000, 1.000000}, + {10.119166, -0.000000, -0.450294, -0.000000, 12.171436, -0.000000, 4.565055, -0.000000, 1.000000}, + {8.813128, -0.000000, -0.449999, -0.000000, 10.598472, -0.000000, 3.975619, -0.000000, 1.000000}, + {7.744275, -0.000000, -0.449622, -0.000000, 9.310493, -0.000000, 3.493130, -0.000000, 1.000000}, + {6.858771, -0.000000, -0.449100, -0.000000, 8.242989, -0.000000, 3.093338, -0.000000, 1.000000}, + {6.117043, -0.000000, -0.448158, -0.000000, 7.348832, -0.000000, 2.758377, -0.000000, 1.000000}, + {5.492260, -0.000000, -0.444563, -0.000000, 6.594917, -0.000000, 2.475857, -0.000000, 1.000000}, + {4.960506, -0.000000, -0.438925, -0.000000, 5.953280, -0.000000, 2.234970, -0.000000, 1.000000}, + {4.501591, -0.000000, -0.435264, -0.000000, 5.398923, -0.000000, 2.027037, -0.000000, 1.000000}, + {4.103823, -0.000000, -0.432443, -0.000000, 4.917849, -0.000000, 1.846695, -0.000000, 1.000000}, + {3.757566, -0.000000, -0.429890, -0.000000, 4.498732, -0.000000, 1.689497, -0.000000, 1.000000}, + {3.455610, -0.000000, -0.427014, -0.000000, 4.132447, -0.000000, 1.552106, -0.000000, 1.000000}, + {3.192770, -0.000000, -0.423034, -0.000000, 3.812856, -0.000000, 1.432030, -0.000000, 1.000000}, + {2.963300, -0.000000, -0.418234, -0.000000, 3.531601, -0.000000, 1.326616, -0.000000, 1.000000}, + {2.759787, -0.000000, -0.415778, -0.000000, 3.283630, -0.000000, 1.233227, -0.000000, 1.000000}, + {2.582890, -0.000000, -0.414688, -0.000000, 3.065355, -0.000000, 1.151779, -0.000000, 1.000000}, + {2.427227, -0.000000, -0.413388, -0.000000, 2.870349, -0.000000, 1.079376, -0.000000, 1.000000}, + {2.281916, -0.000000, -0.407680, -0.000000, 2.686105, -0.000000, 1.010475, -0.000000, 1.000000}, + {2.144573, -0.000000, -0.399463, -0.000000, 2.515150, -0.000000, 0.944232, -0.000000, 1.000000}, + {2.023315, -0.000000, -0.390213, -0.000000, 2.360065, -0.000000, 0.884447, -0.000000, 1.000000}, + {1.914623, -0.000000, -0.380385, -0.000000, 2.220392, -0.000000, 0.829614, -0.000000, 1.000000}, + {1.816992, -0.000000, -0.370609, -0.000000, 2.094660, -0.000000, 0.779126, -0.000000, 1.000000}, + {1.731204, -0.000000, -0.360706, -0.000000, 1.979890, -0.000000, 0.733292, -0.000000, 1.000000}, + {1.653296, -0.000000, -0.351016, -0.000000, 1.877266, -0.000000, 0.690765, -0.000000, 1.000000}, + {1.584838, -0.000000, -0.341118, -0.000000, 1.783811, -0.000000, 0.651464, -0.000000, 1.000000}, + {1.522878, -0.000000, -0.331569, -0.000000, 1.699450, -0.000000, 0.614818, -0.000000, 1.000000}, + {1.465904, -0.000000, -0.320999, -0.000000, 1.621733, -0.000000, 0.579242, -0.000000, 1.000000}, + {1.410381, -0.000000, -0.307961, -0.000000, 1.549033, -0.000000, 0.543202, -0.000000, 1.000000}, + {1.359675, -0.000000, -0.294216, -0.000000, 1.481353, -0.000000, 0.508173, -0.000000, 1.000000}, + {1.313381, -0.000000, -0.281083, -0.000000, 1.420702, -0.000000, 0.475130, -0.000000, 1.000000}, + {1.272297, -0.000000, -0.267575, -0.000000, 1.365447, -0.000000, 0.443751, -0.000000, 1.000000}, + {1.234194, -0.000000, -0.255146, -0.000000, 1.315637, -0.000000, 0.413804, -0.000000, 1.000000}, + {1.198219, -0.000000, -0.241424, -0.000000, 1.269803, -0.000000, 0.383810, -0.000000, 1.000000}, + {1.164671, -0.000000, -0.226983, -0.000000, 1.226230, -0.000000, 0.354420, -0.000000, 1.000000}, + {1.132555, -0.000000, -0.212096, -0.000000, 1.186634, -0.000000, 0.325748, -0.000000, 1.000000}, + {1.103982, -0.000000, -0.198021, -0.000000, 1.151011, -0.000000, 0.298620, -0.000000, 1.000000}, + {1.077696, -0.000000, -0.184425, -0.000000, 1.117435, -0.000000, 0.272656, -0.000000, 1.000000}, + {1.052748, -0.000000, -0.169861, -0.000000, 1.087163, -0.000000, 0.246974, -0.000000, 1.000000}, + {1.028253, -0.000000, -0.155031, -0.000000, 1.058456, -0.000000, 0.222256, -0.000000, 1.000000}, + {1.008012, -0.000000, -0.140822, -0.000000, 1.034137, -0.000000, 0.199352, -0.000000, 1.000000}, + {0.988116, -0.000000, -0.127468, -0.000000, 1.010818, -0.000000, 0.177468, -0.000000, 1.000000}, + {0.968735, -0.000000, -0.113119, -0.000000, 0.990031, -0.000000, 0.156765, -0.000000, 1.000000}, + {0.951031, -0.000000, -0.099299, -0.000000, 0.971698, -0.000000, 0.137179, -0.000000, 1.000000}, + {0.936031, -0.000000, -0.085956, -0.000000, 0.955635, -0.000000, 0.118275, -0.000000, 1.000000}, + {0.923193, -0.000000, -0.073156, -0.000000, 0.940697, -0.000000, 0.100178, -0.000000, 1.000000}, + {0.912895, -0.000000, -0.059621, -0.000000, 0.927538, -0.000000, 0.081887, -0.000000, 1.000000}, + {0.903714, -0.000000, -0.047079, -0.000000, 0.915609, -0.000000, 0.064473, -0.000000, 1.000000}, + {0.896694, -0.000000, -0.034858, -0.000000, 0.905266, -0.000000, 0.047523, -0.000000, 1.000000}, + {0.890835, -0.000000, -0.022628, -0.000000, 0.895919, -0.000000, 0.030910, -0.000000, 1.000000}, + {0.885225, -0.000000, -0.010897, -0.000000, 0.887333, -0.000000, 0.015067, -0.000000, 1.000000}, + {0.879812, -0.000000, 0.000622, -0.000000, 0.879796, -0.000000, -0.000225, -0.000000, 1.000000}, + {500.142303, -0.000000, -0.481572, -0.000000, 615.636475, -0.000000, 240.854446, -0.000000, 1.000000}, + {500.142303, -0.000000, -0.481572, -0.000000, 615.636475, -0.000000, 240.854446, -0.000000, 1.000000}, + {496.084595, -0.000000, -0.481572, -0.000000, 611.148499, -0.000000, 238.900360, -0.000000, 1.000000}, + {220.510513, -0.000000, -0.481570, -0.000000, 271.639252, -0.000000, 106.191238, -0.000000, 1.000000}, + {124.057518, -0.000000, -0.481565, -0.000000, 152.745911, -0.000000, 59.742542, -0.000000, 1.000000}, + {79.381859, -0.000000, -0.481553, -0.000000, 97.788277, -0.000000, 38.228016, -0.000000, 1.000000}, + {55.124126, -0.000000, -0.481534, -0.000000, 67.906372, -0.000000, 26.546095, -0.000000, 1.000000}, + {40.496948, -0.000000, -0.481502, -0.000000, 49.884426, -0.000000, 19.502005, -0.000000, 1.000000}, + {31.002106, -0.000000, -0.481452, -0.000000, 38.196342, -0.000000, 14.929495, -0.000000, 1.000000}, + {24.498438, -0.000000, -0.481379, -0.000000, 30.178972, -0.000000, 11.797418, -0.000000, 1.000000}, + {19.840780, -0.000000, -0.481278, -0.000000, 24.439901, -0.000000, 9.554322, -0.000000, 1.000000}, + {16.395788, -0.000000, -0.481142, -0.000000, 20.194504, -0.000000, 7.895192, -0.000000, 1.000000}, + {13.775730, -0.000000, -0.480966, -0.000000, 16.965696, -0.000000, 6.633308, -0.000000, 1.000000}, + {11.736637, -0.000000, -0.480740, -0.000000, 14.451633, -0.000000, 5.651190, -0.000000, 1.000000}, + {10.118291, -0.000000, -0.480456, -0.000000, 12.456468, -0.000000, 4.871670, -0.000000, 1.000000}, + {8.812709, -0.000000, -0.480098, -0.000000, 10.846252, -0.000000, 4.242721, -0.000000, 1.000000}, + {7.743920, -0.000000, -0.479641, -0.000000, 9.527981, -0.000000, 3.727806, -0.000000, 1.000000}, + {6.858428, -0.000000, -0.479003, -0.000000, 8.435132, -0.000000, 3.301105, -0.000000, 1.000000}, + {6.116847, -0.000000, -0.477754, -0.000000, 7.519803, -0.000000, 2.943619, -0.000000, 1.000000}, + {5.493080, -0.000000, -0.472378, -0.000000, 6.749546, -0.000000, 2.642394, -0.000000, 1.000000}, + {4.959749, -0.000000, -0.467682, -0.000000, 6.090446, -0.000000, 2.384650, -0.000000, 1.000000}, + {4.500247, -0.000000, -0.464200, -0.000000, 5.521990, -0.000000, 2.162462, -0.000000, 1.000000}, + {4.102044, -0.000000, -0.461375, -0.000000, 5.028761, -0.000000, 1.969752, -0.000000, 1.000000}, + {3.755406, -0.000000, -0.458712, -0.000000, 4.598831, -0.000000, 1.801749, -0.000000, 1.000000}, + {3.453321, -0.000000, -0.455255, -0.000000, 4.223391, -0.000000, 1.654983, -0.000000, 1.000000}, + {3.190980, -0.000000, -0.449937, -0.000000, 3.895595, -0.000000, 1.526821, -0.000000, 1.000000}, + {2.958884, -0.000000, -0.445284, -0.000000, 3.605617, -0.000000, 1.413050, -0.000000, 1.000000}, + {2.755563, -0.000000, -0.442242, -0.000000, 3.350090, -0.000000, 1.313269, -0.000000, 1.000000}, + {2.577801, -0.000000, -0.439782, -0.000000, 3.125904, -0.000000, 1.225549, -0.000000, 1.000000}, + {2.424818, -0.000000, -0.437158, -0.000000, 2.924916, -0.000000, 1.149112, -0.000000, 1.000000}, + {2.283442, -0.000000, -0.434142, -0.000000, 2.742248, -0.000000, 1.078217, -0.000000, 1.000000}, + {2.145899, -0.000000, -0.425074, -0.000000, 2.565708, -0.000000, 1.007205, -0.000000, 1.000000}, + {2.025461, -0.000000, -0.414567, -0.000000, 2.405426, -0.000000, 0.943441, -0.000000, 1.000000}, + {1.916772, -0.000000, -0.404674, -0.000000, 2.261385, -0.000000, 0.884947, -0.000000, 1.000000}, + {1.820042, -0.000000, -0.393643, -0.000000, 2.130748, -0.000000, 0.830977, -0.000000, 1.000000}, + {1.733991, -0.000000, -0.382752, -0.000000, 2.013048, -0.000000, 0.781948, -0.000000, 1.000000}, + {1.655815, -0.000000, -0.371868, -0.000000, 1.906421, -0.000000, 0.735973, -0.000000, 1.000000}, + {1.586961, -0.000000, -0.361063, -0.000000, 1.809920, -0.000000, 0.693817, -0.000000, 1.000000}, + {1.524529, -0.000000, -0.350222, -0.000000, 1.722922, -0.000000, 0.654277, -0.000000, 1.000000}, + {1.468299, -0.000000, -0.339151, -0.000000, 1.642883, -0.000000, 0.616865, -0.000000, 1.000000}, + {1.414571, -0.000000, -0.326556, -0.000000, 1.569844, -0.000000, 0.579456, -0.000000, 1.000000}, + {1.363360, -0.000000, -0.311730, -0.000000, 1.499179, -0.000000, 0.541726, -0.000000, 1.000000}, + {1.316947, -0.000000, -0.297192, -0.000000, 1.437031, -0.000000, 0.506222, -0.000000, 1.000000}, + {1.274491, -0.000000, -0.282565, -0.000000, 1.379374, -0.000000, 0.471675, -0.000000, 1.000000}, + {1.237046, -0.000000, -0.269189, -0.000000, 1.327798, -0.000000, 0.439577, -0.000000, 1.000000}, + {1.201312, -0.000000, -0.254431, -0.000000, 1.281244, -0.000000, 0.407588, -0.000000, 1.000000}, + {1.166449, -0.000000, -0.240163, -0.000000, 1.236316, -0.000000, 0.375985, -0.000000, 1.000000}, + {1.134363, -0.000000, -0.223883, -0.000000, 1.195412, -0.000000, 0.345184, -0.000000, 1.000000}, + {1.105575, -0.000000, -0.208647, -0.000000, 1.158576, -0.000000, 0.316303, -0.000000, 1.000000}, + {1.079856, -0.000000, -0.193740, -0.000000, 1.124746, -0.000000, 0.288531, -0.000000, 1.000000}, + {1.053782, -0.000000, -0.179356, -0.000000, 1.093294, -0.000000, 0.261333, -0.000000, 1.000000}, + {1.030322, -0.000000, -0.163585, -0.000000, 1.063753, -0.000000, 0.235141, -0.000000, 1.000000}, + {1.008895, -0.000000, -0.148491, -0.000000, 1.037665, -0.000000, 0.210275, -0.000000, 1.000000}, + {0.988353, -0.000000, -0.133701, -0.000000, 1.013934, -0.000000, 0.187020, -0.000000, 1.000000}, + {0.969570, -0.000000, -0.119553, -0.000000, 0.992656, -0.000000, 0.165160, -0.000000, 1.000000}, + {0.951590, -0.000000, -0.104649, -0.000000, 0.973196, -0.000000, 0.144189, -0.000000, 1.000000}, + {0.935427, -0.000000, -0.090354, -0.000000, 0.956373, -0.000000, 0.124339, -0.000000, 1.000000}, + {0.922397, -0.000000, -0.076839, -0.000000, 0.941249, -0.000000, 0.105099, -0.000000, 1.000000}, + {0.911450, -0.000000, -0.063076, -0.000000, 0.927700, -0.000000, 0.086331, -0.000000, 1.000000}, + {0.902659, -0.000000, -0.049555, -0.000000, 0.915691, -0.000000, 0.067933, -0.000000, 1.000000}, + {0.895581, -0.000000, -0.036382, -0.000000, 0.904873, -0.000000, 0.049954, -0.000000, 1.000000}, + {0.889648, -0.000000, -0.024224, -0.000000, 0.895366, -0.000000, 0.032801, -0.000000, 1.000000}, + {0.884380, -0.000000, -0.011396, -0.000000, 0.886784, -0.000000, 0.015819, -0.000000, 1.000000}, + {0.878901, -0.000000, 0.000752, -0.000000, 0.878886, -0.000000, -0.000350, -0.000000, 1.000000}, + {499.833038, -0.000000, -0.512667, -0.000000, 631.441956, -0.000000, 256.248108, -0.000000, 1.000000}, + {499.833038, -0.000000, -0.512667, -0.000000, 631.441956, -0.000000, 256.248108, -0.000000, 1.000000}, + {496.158051, -0.000000, -0.512667, -0.000000, 626.537048, -0.000000, 254.363953, -0.000000, 1.000000}, + {220.518692, -0.000000, -0.512665, -0.000000, 278.424103, -0.000000, 113.052116, -0.000000, 1.000000}, + {124.058762, -0.000000, -0.512658, -0.000000, 156.580750, -0.000000, 63.600826, -0.000000, 1.000000}, + {79.377831, -0.000000, -0.512645, -0.000000, 100.243629, -0.000000, 40.694302, -0.000000, 1.000000}, + {55.124279, -0.000000, -0.512621, -0.000000, 69.611153, -0.000000, 28.260294, -0.000000, 1.000000}, + {40.494614, -0.000000, -0.512583, -0.000000, 51.140453, -0.000000, 20.760023, -0.000000, 1.000000}, + {31.003603, -0.000000, -0.512522, -0.000000, 39.156490, -0.000000, 15.894115, -0.000000, 1.000000}, + {24.494518, -0.000000, -0.512434, -0.000000, 30.930185, -0.000000, 12.557170, -0.000000, 1.000000}, + {19.839989, -0.000000, -0.512313, -0.000000, 25.052380, -0.000000, 10.170775, -0.000000, 1.000000}, + {16.395456, -0.000000, -0.512150, -0.000000, 20.700644, -0.000000, 8.404720, -0.000000, 1.000000}, + {13.775427, -0.000000, -0.511937, -0.000000, 17.390364, -0.000000, 7.061382, -0.000000, 1.000000}, + {11.735991, -0.000000, -0.511665, -0.000000, 14.813210, -0.000000, 6.015653, -0.000000, 1.000000}, + {10.117810, -0.000000, -0.511322, -0.000000, 12.767522, -0.000000, 5.185846, -0.000000, 1.000000}, + {8.812005, -0.000000, -0.510893, -0.000000, 11.116779, -0.000000, 4.516166, -0.000000, 1.000000}, + {7.743429, -0.000000, -0.510343, -0.000000, 9.765045, -0.000000, 3.968071, -0.000000, 1.000000}, + {6.857736, -0.000000, -0.509558, -0.000000, 8.644680, -0.000000, 3.513671, -0.000000, 1.000000}, + {6.116433, -0.000000, -0.507841, -0.000000, 7.706219, -0.000000, 3.133188, -0.000000, 1.000000}, + {5.492404, -0.000000, -0.501837, -0.000000, 6.916293, -0.000000, 2.812324, -0.000000, 1.000000}, + {4.958022, -0.000000, -0.497532, -0.000000, 6.239026, -0.000000, 2.537439, -0.000000, 1.000000}, + {4.497925, -0.000000, -0.494140, -0.000000, 5.655237, -0.000000, 2.300593, -0.000000, 1.000000}, + {4.100157, -0.000000, -0.490804, -0.000000, 5.149754, -0.000000, 2.095579, -0.000000, 1.000000}, + {3.753082, -0.000000, -0.488019, -0.000000, 4.707974, -0.000000, 1.916456, -0.000000, 1.000000}, + {3.451247, -0.000000, -0.483821, -0.000000, 4.322457, -0.000000, 1.760169, -0.000000, 1.000000}, + {3.188345, -0.000000, -0.477359, -0.000000, 3.985661, -0.000000, 1.623221, -0.000000, 1.000000}, + {2.955361, -0.000000, -0.472948, -0.000000, 3.686046, -0.000000, 1.501682, -0.000000, 1.000000}, + {2.750720, -0.000000, -0.469106, -0.000000, 3.423305, -0.000000, 1.394630, -0.000000, 1.000000}, + {2.574424, -0.000000, -0.465402, -0.000000, 3.191475, -0.000000, 1.301486, -0.000000, 1.000000}, + {2.420457, -0.000000, -0.461761, -0.000000, 2.984488, -0.000000, 1.219465, -0.000000, 1.000000}, + {2.280467, -0.000000, -0.459156, -0.000000, 2.799470, -0.000000, 1.144915, -0.000000, 1.000000}, + {2.148587, -0.000000, -0.450660, -0.000000, 2.620453, -0.000000, 1.072513, -0.000000, 1.000000}, + {2.027889, -0.000000, -0.439798, -0.000000, 2.454997, -0.000000, 1.004191, -0.000000, 1.000000}, + {1.919624, -0.000000, -0.428882, -0.000000, 2.305794, -0.000000, 0.941869, -0.000000, 1.000000}, + {1.823223, -0.000000, -0.416811, -0.000000, 2.170411, -0.000000, 0.884438, -0.000000, 1.000000}, + {1.736360, -0.000000, -0.405050, -0.000000, 2.048491, -0.000000, 0.831502, -0.000000, 1.000000}, + {1.659158, -0.000000, -0.392667, -0.000000, 1.937715, -0.000000, 0.782747, -0.000000, 1.000000}, + {1.589230, -0.000000, -0.380929, -0.000000, 1.838086, -0.000000, 0.737227, -0.000000, 1.000000}, + {1.527017, -0.000000, -0.368788, -0.000000, 1.746600, -0.000000, 0.694725, -0.000000, 1.000000}, + {1.470582, -0.000000, -0.357054, -0.000000, 1.664725, -0.000000, 0.654904, -0.000000, 1.000000}, + {1.418556, -0.000000, -0.344040, -0.000000, 1.590104, -0.000000, 0.615562, -0.000000, 1.000000}, + {1.367267, -0.000000, -0.329366, -0.000000, 1.518735, -0.000000, 0.575605, -0.000000, 1.000000}, + {1.320187, -0.000000, -0.313070, -0.000000, 1.453649, -0.000000, 0.536870, -0.000000, 1.000000}, + {1.277404, -0.000000, -0.297768, -0.000000, 1.393976, -0.000000, 0.500023, -0.000000, 1.000000}, + {1.238920, -0.000000, -0.282633, -0.000000, 1.340037, -0.000000, 0.465346, -0.000000, 1.000000}, + {1.203396, -0.000000, -0.267288, -0.000000, 1.292495, -0.000000, 0.431370, -0.000000, 1.000000}, + {1.169605, -0.000000, -0.252603, -0.000000, 1.247279, -0.000000, 0.398253, -0.000000, 1.000000}, + {1.137221, -0.000000, -0.236090, -0.000000, 1.205140, -0.000000, 0.365478, -0.000000, 1.000000}, + {1.106866, -0.000000, -0.219355, -0.000000, 1.166418, -0.000000, 0.333940, -0.000000, 1.000000}, + {1.080629, -0.000000, -0.203533, -0.000000, 1.131532, -0.000000, 0.304547, -0.000000, 1.000000}, + {1.055715, -0.000000, -0.187983, -0.000000, 1.099271, -0.000000, 0.275948, -0.000000, 1.000000}, + {1.031158, -0.000000, -0.172449, -0.000000, 1.068871, -0.000000, 0.247808, -0.000000, 1.000000}, + {1.009003, -0.000000, -0.156074, -0.000000, 1.041632, -0.000000, 0.221478, -0.000000, 1.000000}, + {0.989099, -0.000000, -0.140250, -0.000000, 1.017254, -0.000000, 0.196571, -0.000000, 1.000000}, + {0.969476, -0.000000, -0.125351, -0.000000, 0.995050, -0.000000, 0.173181, -0.000000, 1.000000}, + {0.952149, -0.000000, -0.110199, -0.000000, 0.975125, -0.000000, 0.151162, -0.000000, 1.000000}, + {0.935578, -0.000000, -0.094911, -0.000000, 0.957281, -0.000000, 0.130319, -0.000000, 1.000000}, + {0.921855, -0.000000, -0.080171, -0.000000, 0.941969, -0.000000, 0.110122, -0.000000, 1.000000}, + {0.910342, -0.000000, -0.066290, -0.000000, 0.928011, -0.000000, 0.090644, -0.000000, 1.000000}, + {0.901261, -0.000000, -0.052273, -0.000000, 0.915516, -0.000000, 0.071411, -0.000000, 1.000000}, + {0.894295, -0.000000, -0.038210, -0.000000, 0.904521, -0.000000, 0.052497, -0.000000, 1.000000}, + {0.888607, -0.000000, -0.025149, -0.000000, 0.894789, -0.000000, 0.034253, -0.000000, 1.000000}, + {0.883473, -0.000000, -0.012290, -0.000000, 0.886115, -0.000000, 0.016722, -0.000000, 1.000000}, + {0.877935, -0.000000, 0.000665, -0.000000, 0.877965, -0.000000, -0.000345, -0.000000, 1.000000}, + {499.964600, -0.000000, -0.544568, -0.000000, 648.281921, -0.000000, 272.264343, -0.000000, 1.000000}, + {499.964600, -0.000000, -0.544568, -0.000000, 648.281921, -0.000000, 272.264343, -0.000000, 1.000000}, + {496.047424, -0.000000, -0.544568, -0.000000, 643.325500, -0.000000, 270.131653, -0.000000, 1.000000}, + {220.488297, -0.000000, -0.544565, -0.000000, 285.888458, -0.000000, 120.070152, -0.000000, 1.000000}, + {124.029099, -0.000000, -0.544557, -0.000000, 160.816254, -0.000000, 67.542206, -0.000000, 1.000000}, + {79.379036, -0.000000, -0.544541, -0.000000, 102.917030, -0.000000, 43.227154, -0.000000, 1.000000}, + {55.124950, -0.000000, -0.544513, -0.000000, 71.467789, -0.000000, 30.019081, -0.000000, 1.000000}, + {40.495598, -0.000000, -0.544466, -0.000000, 52.503517, -0.000000, 22.052328, -0.000000, 1.000000}, + {31.007767, -0.000000, -0.544394, -0.000000, 40.197323, -0.000000, 16.885170, -0.000000, 1.000000}, + {24.495283, -0.000000, -0.544289, -0.000000, 31.757868, -0.000000, 13.338841, -0.000000, 1.000000}, + {19.836905, -0.000000, -0.544144, -0.000000, 25.721111, -0.000000, 10.801979, -0.000000, 1.000000}, + {16.394938, -0.000000, -0.543948, -0.000000, 21.252571, -0.000000, 8.927350, -0.000000, 1.000000}, + {13.774549, -0.000000, -0.543693, -0.000000, 17.853453, -0.000000, 7.500184, -0.000000, 1.000000}, + {11.735194, -0.000000, -0.543368, -0.000000, 15.207374, -0.000000, 6.389414, -0.000000, 1.000000}, + {10.116846, -0.000000, -0.542959, -0.000000, 13.106936, -0.000000, 5.507866, -0.000000, 1.000000}, + {8.811126, -0.000000, -0.542446, -0.000000, 11.411842, -0.000000, 4.796541, -0.000000, 1.000000}, + {7.742423, -0.000000, -0.541784, -0.000000, 10.023723, -0.000000, 4.214224, -0.000000, 1.000000}, + {6.856839, -0.000000, -0.540818, -0.000000, 8.872921, -0.000000, 3.731567, -0.000000, 1.000000}, + {6.115932, -0.000000, -0.538320, -0.000000, 7.909827, -0.000000, 3.327516, -0.000000, 1.000000}, + {5.491170, -0.000000, -0.531933, -0.000000, 7.097507, -0.000000, 2.986258, -0.000000, 1.000000}, + {4.955805, -0.000000, -0.528191, -0.000000, 6.400644, -0.000000, 2.693787, -0.000000, 1.000000}, + {4.495482, -0.000000, -0.524701, -0.000000, 5.800350, -0.000000, 2.442038, -0.000000, 1.000000}, + {4.097378, -0.000000, -0.521103, -0.000000, 5.280610, -0.000000, 2.224023, -0.000000, 1.000000}, + {3.750728, -0.000000, -0.517823, -0.000000, 4.826674, -0.000000, 2.033879, -0.000000, 1.000000}, + {3.448358, -0.000000, -0.512657, -0.000000, 4.430115, -0.000000, 1.867394, -0.000000, 1.000000}, + {3.185436, -0.000000, -0.505882, -0.000000, 4.082632, -0.000000, 1.721818, -0.000000, 1.000000}, + {2.951017, -0.000000, -0.500943, -0.000000, 3.774083, -0.000000, 1.591852, -0.000000, 1.000000}, + {2.747175, -0.000000, -0.496302, -0.000000, 3.502885, -0.000000, 1.478221, -0.000000, 1.000000}, + {2.570778, -0.000000, -0.490996, -0.000000, 3.261750, -0.000000, 1.378683, -0.000000, 1.000000}, + {2.414072, -0.000000, -0.486501, -0.000000, 3.048726, -0.000000, 1.290131, -0.000000, 1.000000}, + {2.276909, -0.000000, -0.483158, -0.000000, 2.857607, -0.000000, 1.212195, -0.000000, 1.000000}, + {2.151454, -0.000000, -0.476280, -0.000000, 2.679210, -0.000000, 1.139442, -0.000000, 1.000000}, + {2.029948, -0.000000, -0.465295, -0.000000, 2.508307, -0.000000, 1.066667, -0.000000, 1.000000}, + {1.922984, -0.000000, -0.452975, -0.000000, 2.352989, -0.000000, 1.000628, -0.000000, 1.000000}, + {1.826360, -0.000000, -0.440447, -0.000000, 2.212558, -0.000000, 0.939624, -0.000000, 1.000000}, + {1.739519, -0.000000, -0.427570, -0.000000, 2.085970, -0.000000, 0.883070, -0.000000, 1.000000}, + {1.662084, -0.000000, -0.414159, -0.000000, 1.970891, -0.000000, 0.830612, -0.000000, 1.000000}, + {1.591782, -0.000000, -0.401020, -0.000000, 1.867387, -0.000000, 0.781635, -0.000000, 1.000000}, + {1.527778, -0.000000, -0.387815, -0.000000, 1.773135, -0.000000, 0.735067, -0.000000, 1.000000}, + {1.470978, -0.000000, -0.374850, -0.000000, 1.688238, -0.000000, 0.692502, -0.000000, 1.000000}, + {1.419374, -0.000000, -0.360991, -0.000000, 1.611230, -0.000000, 0.650772, -0.000000, 1.000000}, + {1.370268, -0.000000, -0.347067, -0.000000, 1.538865, -0.000000, 0.610021, -0.000000, 1.000000}, + {1.324325, -0.000000, -0.329195, -0.000000, 1.471813, -0.000000, 0.568878, -0.000000, 1.000000}, + {1.280913, -0.000000, -0.312954, -0.000000, 1.409399, -0.000000, 0.529189, -0.000000, 1.000000}, + {1.241405, -0.000000, -0.296203, -0.000000, 1.354398, -0.000000, 0.491309, -0.000000, 1.000000}, + {1.206234, -0.000000, -0.280184, -0.000000, 1.304585, -0.000000, 0.455905, -0.000000, 1.000000}, + {1.171914, -0.000000, -0.264093, -0.000000, 1.257975, -0.000000, 0.419949, -0.000000, 1.000000}, + {1.139891, -0.000000, -0.248016, -0.000000, 1.215121, -0.000000, 0.385831, -0.000000, 1.000000}, + {1.109539, -0.000000, -0.230063, -0.000000, 1.175352, -0.000000, 0.352087, -0.000000, 1.000000}, + {1.081135, -0.000000, -0.212976, -0.000000, 1.138444, -0.000000, 0.319821, -0.000000, 1.000000}, + {1.056964, -0.000000, -0.196264, -0.000000, 1.105688, -0.000000, 0.290159, -0.000000, 1.000000}, + {1.033070, -0.000000, -0.180463, -0.000000, 1.074996, -0.000000, 0.261001, -0.000000, 1.000000}, + {1.010903, -0.000000, -0.163769, -0.000000, 1.046055, -0.000000, 0.232721, -0.000000, 1.000000}, + {0.988432, -0.000000, -0.146893, -0.000000, 1.019785, -0.000000, 0.205913, -0.000000, 1.000000}, + {0.969959, -0.000000, -0.130679, -0.000000, 0.997071, -0.000000, 0.180926, -0.000000, 1.000000}, + {0.951529, -0.000000, -0.115382, -0.000000, 0.976638, -0.000000, 0.157946, -0.000000, 1.000000}, + {0.935498, -0.000000, -0.099787, -0.000000, 0.958721, -0.000000, 0.136321, -0.000000, 1.000000}, + {0.921286, -0.000000, -0.084040, -0.000000, 0.942499, -0.000000, 0.115253, -0.000000, 1.000000}, + {0.909408, -0.000000, -0.068988, -0.000000, 0.928135, -0.000000, 0.094595, -0.000000, 1.000000}, + {0.900124, -0.000000, -0.054561, -0.000000, 0.915531, -0.000000, 0.074658, -0.000000, 1.000000}, + {0.892791, -0.000000, -0.040426, -0.000000, 0.904311, -0.000000, 0.055110, -0.000000, 1.000000}, + {0.887428, -0.000000, -0.025947, -0.000000, 0.894170, -0.000000, 0.035730, -0.000000, 1.000000}, + {0.882287, -0.000000, -0.012705, -0.000000, 0.885185, -0.000000, 0.017470, -0.000000, 1.000000}, + {0.877015, -0.000000, 0.000072, -0.000000, 0.877030, -0.000000, -0.000040, -0.000000, 1.000000}, + {500.018127, -0.000000, -0.577347, -0.000000, 666.741516, -0.000000, 288.683624, -0.000000, 1.000000}, + {500.018127, -0.000000, -0.577347, -0.000000, 666.741516, -0.000000, 288.683624, -0.000000, 1.000000}, + {496.097687, -0.000000, -0.577346, -0.000000, 661.498901, -0.000000, 286.420258, -0.000000, 1.000000}, + {220.509628, -0.000000, -0.577344, -0.000000, 294.003113, -0.000000, 127.310104, -0.000000, 1.000000}, + {124.006050, -0.000000, -0.577335, -0.000000, 165.390106, -0.000000, 71.594391, -0.000000, 1.000000}, + {79.378586, -0.000000, -0.577316, -0.000000, 105.838509, -0.000000, 45.828773, -0.000000, 1.000000}, + {55.122433, -0.000000, -0.577280, -0.000000, 73.496788, -0.000000, 31.824512, -0.000000, 1.000000}, + {40.497952, -0.000000, -0.577225, -0.000000, 53.993816, -0.000000, 23.381008, -0.000000, 1.000000}, + {31.003929, -0.000000, -0.577139, -0.000000, 41.337330, -0.000000, 17.899559, -0.000000, 1.000000}, + {24.494070, -0.000000, -0.577015, -0.000000, 32.658623, -0.000000, 14.140984, -0.000000, 1.000000}, + {19.840250, -0.000000, -0.576841, -0.000000, 26.453827, -0.000000, 11.454021, -0.000000, 1.000000}, + {16.394211, -0.000000, -0.576608, -0.000000, 21.853865, -0.000000, 9.464190, -0.000000, 1.000000}, + {13.773612, -0.000000, -0.576305, -0.000000, 18.358515, -0.000000, 7.950984, -0.000000, 1.000000}, + {11.734133, -0.000000, -0.575918, -0.000000, 15.637076, -0.000000, 6.773256, -0.000000, 1.000000}, + {10.115806, -0.000000, -0.575432, -0.000000, 13.476646, -0.000000, 5.838628, -0.000000, 1.000000}, + {8.809996, -0.000000, -0.574821, -0.000000, 11.733068, -0.000000, 5.084384, -0.000000, 1.000000}, + {7.741207, -0.000000, -0.574030, -0.000000, 10.305275, -0.000000, 4.466939, -0.000000, 1.000000}, + {6.855765, -0.000000, -0.572821, -0.000000, 9.121772, -0.000000, 3.955261, -0.000000, 1.000000}, + {6.115031, -0.000000, -0.568942, -0.000000, 8.131938, -0.000000, 3.526886, -0.000000, 1.000000}, + {5.488869, -0.000000, -0.563314, -0.000000, 7.294135, -0.000000, 3.164334, -0.000000, 1.000000}, + {4.953284, -0.000000, -0.559480, -0.000000, 6.576398, -0.000000, 2.854054, -0.000000, 1.000000}, + {4.492596, -0.000000, -0.555925, -0.000000, 5.958310, -0.000000, 2.586941, -0.000000, 1.000000}, + {4.094578, -0.000000, -0.552047, -0.000000, 5.422942, -0.000000, 2.355748, -0.000000, 1.000000}, + {3.748152, -0.000000, -0.548119, -0.000000, 4.955694, -0.000000, 2.154149, -0.000000, 1.000000}, + {3.445738, -0.000000, -0.541672, -0.000000, 4.546956, -0.000000, 1.977378, -0.000000, 1.000000}, + {3.181209, -0.000000, -0.535137, -0.000000, 4.188271, -0.000000, 1.822137, -0.000000, 1.000000}, + {2.947188, -0.000000, -0.529686, -0.000000, 3.869549, -0.000000, 1.684381, -0.000000, 1.000000}, + {2.744051, -0.000000, -0.523755, -0.000000, 3.589326, -0.000000, 1.563893, -0.000000, 1.000000}, + {2.565445, -0.000000, -0.517369, -0.000000, 3.338645, -0.000000, 1.457006, -0.000000, 1.000000}, + {2.409017, -0.000000, -0.512125, -0.000000, 3.118602, -0.000000, 1.362977, -0.000000, 1.000000}, + {2.273139, -0.000000, -0.507864, -0.000000, 2.920849, -0.000000, 1.280931, -0.000000, 1.000000}, + {2.151341, -0.000000, -0.501463, -0.000000, 2.739769, -0.000000, 1.206435, -0.000000, 1.000000}, + {2.032765, -0.000000, -0.491007, -0.000000, 2.564208, -0.000000, 1.131025, -0.000000, 1.000000}, + {1.926557, -0.000000, -0.477448, -0.000000, 2.403278, -0.000000, 1.061221, -0.000000, 1.000000}, + {1.827807, -0.000000, -0.464125, -0.000000, 2.258311, -0.000000, 0.994956, -0.000000, 1.000000}, + {1.741566, -0.000000, -0.449924, -0.000000, 2.126067, -0.000000, 0.934917, -0.000000, 1.000000}, + {1.660114, -0.000000, -0.435590, -0.000000, 2.007916, -0.000000, 0.877202, -0.000000, 1.000000}, + {1.589580, -0.000000, -0.420918, -0.000000, 1.899860, -0.000000, 0.824254, -0.000000, 1.000000}, + {1.525931, -0.000000, -0.407009, -0.000000, 1.802565, -0.000000, 0.775067, -0.000000, 1.000000}, + {1.469439, -0.000000, -0.392144, -0.000000, 1.713783, -0.000000, 0.729089, -0.000000, 1.000000}, + {1.418139, -0.000000, -0.377949, -0.000000, 1.632838, -0.000000, 0.685314, -0.000000, 1.000000}, + {1.370206, -0.000000, -0.363367, -0.000000, 1.560151, -0.000000, 0.642775, -0.000000, 1.000000}, + {1.323761, -0.000000, -0.345699, -0.000000, 1.491048, -0.000000, 0.599351, -0.000000, 1.000000}, + {1.282438, -0.000000, -0.328074, -0.000000, 1.425775, -0.000000, 0.557789, -0.000000, 1.000000}, + {1.244317, -0.000000, -0.310119, -0.000000, 1.368643, -0.000000, 0.518010, -0.000000, 1.000000}, + {1.207352, -0.000000, -0.292714, -0.000000, 1.316545, -0.000000, 0.479277, -0.000000, 1.000000}, + {1.174196, -0.000000, -0.275618, -0.000000, 1.268610, -0.000000, 0.442052, -0.000000, 1.000000}, + {1.142261, -0.000000, -0.259139, -0.000000, 1.224709, -0.000000, 0.406320, -0.000000, 1.000000}, + {1.111881, -0.000000, -0.241217, -0.000000, 1.184688, -0.000000, 0.370689, -0.000000, 1.000000}, + {1.082894, -0.000000, -0.222689, -0.000000, 1.146485, -0.000000, 0.336129, -0.000000, 1.000000}, + {1.057850, -0.000000, -0.204917, -0.000000, 1.112059, -0.000000, 0.303957, -0.000000, 1.000000}, + {1.033615, -0.000000, -0.187739, -0.000000, 1.080596, -0.000000, 0.273180, -0.000000, 1.000000}, + {1.011315, -0.000000, -0.171021, -0.000000, 1.051114, -0.000000, 0.243954, -0.000000, 1.000000}, + {0.989738, -0.000000, -0.153753, -0.000000, 1.024040, -0.000000, 0.215570, -0.000000, 1.000000}, + {0.970972, -0.000000, -0.136460, -0.000000, 0.999989, -0.000000, 0.189355, -0.000000, 1.000000}, + {0.951252, -0.000000, -0.120018, -0.000000, 0.978592, -0.000000, 0.164635, -0.000000, 1.000000}, + {0.934632, -0.000000, -0.103986, -0.000000, 0.959674, -0.000000, 0.141955, -0.000000, 1.000000}, + {0.920438, -0.000000, -0.087980, -0.000000, 0.943254, -0.000000, 0.120291, -0.000000, 1.000000}, + {0.908753, -0.000000, -0.071985, -0.000000, 0.928291, -0.000000, 0.098603, -0.000000, 1.000000}, + {0.898769, -0.000000, -0.056729, -0.000000, 0.915308, -0.000000, 0.077731, -0.000000, 1.000000}, + {0.891474, -0.000000, -0.042209, -0.000000, 0.903846, -0.000000, 0.057448, -0.000000, 1.000000}, + {0.886116, -0.000000, -0.027432, -0.000000, 0.893643, -0.000000, 0.037431, -0.000000, 1.000000}, + {0.881084, -0.000000, -0.012906, -0.000000, 0.884266, -0.000000, 0.018066, -0.000000, 1.000000}, + {0.875985, -0.000000, 0.000404, -0.000000, 0.875942, -0.000000, -0.000225, -0.000000, 1.000000}, + {500.059753, -0.000000, -0.611084, -0.000000, 687.020447, -0.000000, 305.577911, -0.000000, 1.000000}, + {500.059753, -0.000000, -0.611084, -0.000000, 687.020447, -0.000000, 305.577911, -0.000000, 1.000000}, + {496.131104, -0.000000, -0.611084, -0.000000, 681.313354, -0.000000, 303.177673, -0.000000, 1.000000}, + {220.503235, -0.000000, -0.611079, -0.000000, 302.831818, -0.000000, 134.745651, -0.000000, 1.000000}, + {124.032204, -0.000000, -0.611068, -0.000000, 170.349152, -0.000000, 75.793968, -0.000000, 1.000000}, + {79.376831, -0.000000, -0.611046, -0.000000, 109.018860, -0.000000, 48.505707, -0.000000, 1.000000}, + {55.118790, -0.000000, -0.611006, -0.000000, 75.706657, -0.000000, 33.681911, -0.000000, 1.000000}, + {40.496830, -0.000000, -0.610939, -0.000000, 55.616562, -0.000000, 24.746468, -0.000000, 1.000000}, + {31.003130, -0.000000, -0.610838, -0.000000, 42.578850, -0.000000, 18.944946, -0.000000, 1.000000}, + {24.494944, -0.000000, -0.610689, -0.000000, 33.638340, -0.000000, 14.967728, -0.000000, 1.000000}, + {19.839455, -0.000000, -0.610484, -0.000000, 27.240908, -0.000000, 12.122551, -0.000000, 1.000000}, + {16.391743, -0.000000, -0.610209, -0.000000, 22.509579, -0.000000, 10.015670, -0.000000, 1.000000}, + {13.772236, -0.000000, -0.609849, -0.000000, 18.908459, -0.000000, 8.414637, -0.000000, 1.000000}, + {11.732980, -0.000000, -0.609391, -0.000000, 16.105103, -0.000000, 7.168170, -0.000000, 1.000000}, + {10.114366, -0.000000, -0.608815, -0.000000, 13.880643, -0.000000, 6.178736, -0.000000, 1.000000}, + {8.808816, -0.000000, -0.608090, -0.000000, 12.082842, -0.000000, 5.380540, -0.000000, 1.000000}, + {7.739786, -0.000000, -0.607146, -0.000000, 10.612023, -0.000000, 4.726828, -0.000000, 1.000000}, + {6.854265, -0.000000, -0.605599, -0.000000, 9.392420, -0.000000, 4.185153, -0.000000, 1.000000}, + {6.113844, -0.000000, -0.599966, -0.000000, 8.373297, -0.000000, 3.731737, -0.000000, 1.000000}, + {5.486492, -0.000000, -0.595251, -0.000000, 7.507792, -0.000000, 3.347297, -0.000000, 1.000000}, + {4.950495, -0.000000, -0.591420, -0.000000, 6.767659, -0.000000, 3.018643, -0.000000, 1.000000}, + {4.489434, -0.000000, -0.587858, -0.000000, 6.129895, -0.000000, 2.735610, -0.000000, 1.000000}, + {4.091563, -0.000000, -0.583652, -0.000000, 5.577612, -0.000000, 2.490912, -0.000000, 1.000000}, + {3.744393, -0.000000, -0.578882, -0.000000, 5.096111, -0.000000, 2.276983, -0.000000, 1.000000}, + {3.442302, -0.000000, -0.571441, -0.000000, 4.673666, -0.000000, 2.089818, -0.000000, 1.000000}, + {3.177282, -0.000000, -0.565192, -0.000000, 4.302368, -0.000000, 1.925208, -0.000000, 1.000000}, + {2.943215, -0.000000, -0.559023, -0.000000, 3.972773, -0.000000, 1.779118, -0.000000, 1.000000}, + {2.740145, -0.000000, -0.551469, -0.000000, 3.682717, -0.000000, 1.651309, -0.000000, 1.000000}, + {2.560740, -0.000000, -0.544530, -0.000000, 3.422651, -0.000000, 1.537548, -0.000000, 1.000000}, + {2.405007, -0.000000, -0.538283, -0.000000, 3.194257, -0.000000, 1.438259, -0.000000, 1.000000}, + {2.269851, -0.000000, -0.532345, -0.000000, 2.987319, -0.000000, 1.351191, -0.000000, 1.000000}, + {2.149445, -0.000000, -0.525563, -0.000000, 2.801316, -0.000000, 1.273241, -0.000000, 1.000000}, + {2.034208, -0.000000, -0.516618, -0.000000, 2.625589, -0.000000, 1.196375, -0.000000, 1.000000}, + {1.923855, -0.000000, -0.502460, -0.000000, 2.459321, -0.000000, 1.119779, -0.000000, 1.000000}, + {1.826712, -0.000000, -0.487891, -0.000000, 2.308541, -0.000000, 1.050307, -0.000000, 1.000000}, + {1.739512, -0.000000, -0.472859, -0.000000, 2.170905, -0.000000, 0.985883, -0.000000, 1.000000}, + {1.661322, -0.000000, -0.457224, -0.000000, 2.047603, -0.000000, 0.925946, -0.000000, 1.000000}, + {1.590618, -0.000000, -0.441340, -0.000000, 1.933808, -0.000000, 0.869810, -0.000000, 1.000000}, + {1.527487, -0.000000, -0.426157, -0.000000, 1.832489, -0.000000, 0.817512, -0.000000, 1.000000}, + {1.470243, -0.000000, -0.409679, -0.000000, 1.740569, -0.000000, 0.767899, -0.000000, 1.000000}, + {1.418768, -0.000000, -0.394768, -0.000000, 1.656640, -0.000000, 0.721272, -0.000000, 1.000000}, + {1.370922, -0.000000, -0.378746, -0.000000, 1.580837, -0.000000, 0.675507, -0.000000, 1.000000}, + {1.325950, -0.000000, -0.361887, -0.000000, 1.510943, -0.000000, 0.631064, -0.000000, 1.000000}, + {1.282281, -0.000000, -0.343009, -0.000000, 1.444533, -0.000000, 0.585837, -0.000000, 1.000000}, + {1.245250, -0.000000, -0.324201, -0.000000, 1.383857, -0.000000, 0.544231, -0.000000, 1.000000}, + {1.209798, -0.000000, -0.305055, -0.000000, 1.328927, -0.000000, 0.503334, -0.000000, 1.000000}, + {1.175961, -0.000000, -0.287306, -0.000000, 1.279956, -0.000000, 0.464460, -0.000000, 1.000000}, + {1.143816, -0.000000, -0.269177, -0.000000, 1.234930, -0.000000, 0.425767, -0.000000, 1.000000}, + {1.113576, -0.000000, -0.251675, -0.000000, 1.193066, -0.000000, 0.388752, -0.000000, 1.000000}, + {1.084812, -0.000000, -0.232448, -0.000000, 1.154327, -0.000000, 0.352472, -0.000000, 1.000000}, + {1.057252, -0.000000, -0.213585, -0.000000, 1.118203, -0.000000, 0.317450, -0.000000, 1.000000}, + {1.034291, -0.000000, -0.195251, -0.000000, 1.085671, -0.000000, 0.285633, -0.000000, 1.000000}, + {1.011855, -0.000000, -0.177823, -0.000000, 1.055842, -0.000000, 0.255055, -0.000000, 1.000000}, + {0.991743, -0.000000, -0.160161, -0.000000, 1.028257, -0.000000, 0.225794, -0.000000, 1.000000}, + {0.971158, -0.000000, -0.142319, -0.000000, 1.002737, -0.000000, 0.197439, -0.000000, 1.000000}, + {0.952054, -0.000000, -0.124608, -0.000000, 0.980425, -0.000000, 0.170992, -0.000000, 1.000000}, + {0.934170, -0.000000, -0.107886, -0.000000, 0.960933, -0.000000, 0.147320, -0.000000, 1.000000}, + {0.919185, -0.000000, -0.091622, -0.000000, 0.944061, -0.000000, 0.124784, -0.000000, 1.000000}, + {0.907437, -0.000000, -0.075300, -0.000000, 0.928761, -0.000000, 0.102708, -0.000000, 1.000000}, + {0.897538, -0.000000, -0.058930, -0.000000, 0.915182, -0.000000, 0.080852, -0.000000, 1.000000}, + {0.890261, -0.000000, -0.043578, -0.000000, 0.903289, -0.000000, 0.059702, -0.000000, 1.000000}, + {0.884575, -0.000000, -0.029008, -0.000000, 0.892858, -0.000000, 0.039127, -0.000000, 1.000000}, + {0.879937, -0.000000, -0.013622, -0.000000, 0.883339, -0.000000, 0.018893, -0.000000, 1.000000}, + {0.874765, -0.000000, 0.000895, -0.000000, 0.874699, -0.000000, -0.000434, -0.000000, 1.000000}, + {499.980133, -0.000000, -0.645864, -0.000000, 708.598999, -0.000000, 322.918793, -0.000000, 1.000000}, + {499.980133, -0.000000, -0.645864, -0.000000, 708.598999, -0.000000, 322.918793, -0.000000, 1.000000}, + {496.017120, -0.000000, -0.645864, -0.000000, 703.275818, -0.000000, 320.360229, -0.000000, 1.000000}, + {220.501709, -0.000000, -0.645860, -0.000000, 312.467621, -0.000000, 142.414230, -0.000000, 1.000000}, + {124.024284, -0.000000, -0.645847, -0.000000, 175.772400, -0.000000, 80.102768, -0.000000, 1.000000}, + {79.373238, -0.000000, -0.645819, -0.000000, 112.490692, -0.000000, 51.264164, -0.000000, 1.000000}, + {55.122040, -0.000000, -0.645772, -0.000000, 78.116310, -0.000000, 35.601017, -0.000000, 1.000000}, + {40.499382, -0.000000, -0.645695, -0.000000, 57.385887, -0.000000, 26.156567, -0.000000, 1.000000}, + {31.001198, -0.000000, -0.645573, -0.000000, 43.931107, -0.000000, 20.021948, -0.000000, 1.000000}, + {24.493385, -0.000000, -0.645399, -0.000000, 34.708286, -0.000000, 15.818537, -0.000000, 1.000000}, + {19.838543, -0.000000, -0.645157, -0.000000, 28.108135, -0.000000, 12.811936, -0.000000, 1.000000}, + {16.393085, -0.000000, -0.644832, -0.000000, 23.223579, -0.000000, 10.586369, -0.000000, 1.000000}, + {13.771312, -0.000000, -0.644408, -0.000000, 19.508339, -0.000000, 8.892781, -0.000000, 1.000000}, + {11.731657, -0.000000, -0.643867, -0.000000, 16.614929, -0.000000, 7.575101, -0.000000, 1.000000}, + {10.112901, -0.000000, -0.643188, -0.000000, 14.318110, -0.000000, 6.529218, -0.000000, 1.000000}, + {8.806743, -0.000000, -0.642332, -0.000000, 12.464256, -0.000000, 5.685175, -0.000000, 1.000000}, + {7.737839, -0.000000, -0.641200, -0.000000, 10.945989, -0.000000, 4.994275, -0.000000, 1.000000}, + {6.852201, -0.000000, -0.639143, -0.000000, 9.687261, -0.000000, 4.421630, -0.000000, 1.000000}, + {6.111566, -0.000000, -0.632858, -0.000000, 8.633825, -0.000000, 3.942178, -0.000000, 1.000000}, + {5.483883, -0.000000, -0.627844, -0.000000, 7.739667, -0.000000, 3.535588, -0.000000, 1.000000}, + {4.947381, -0.000000, -0.624017, -0.000000, 6.975159, -0.000000, 3.187831, -0.000000, 1.000000}, + {4.486110, -0.000000, -0.620546, -0.000000, 6.316311, -0.000000, 2.888543, -0.000000, 1.000000}, + {4.087338, -0.000000, -0.615942, -0.000000, 5.745611, -0.000000, 2.629270, -0.000000, 1.000000}, + {3.740768, -0.000000, -0.610050, -0.000000, 5.247872, -0.000000, 2.403260, -0.000000, 1.000000}, + {3.438387, -0.000000, -0.602321, -0.000000, 4.810745, -0.000000, 2.205128, -0.000000, 1.000000}, + {3.172844, -0.000000, -0.595671, -0.000000, 4.426208, -0.000000, 2.030723, -0.000000, 1.000000}, + {2.938661, -0.000000, -0.588711, -0.000000, 4.085194, -0.000000, 1.876083, -0.000000, 1.000000}, + {2.736077, -0.000000, -0.579877, -0.000000, 3.782948, -0.000000, 1.740864, -0.000000, 1.000000}, + {2.556285, -0.000000, -0.572356, -0.000000, 3.513409, -0.000000, 1.620289, -0.000000, 1.000000}, + {2.401605, -0.000000, -0.564621, -0.000000, 3.275337, -0.000000, 1.515545, -0.000000, 1.000000}, + {2.265606, -0.000000, -0.557336, -0.000000, 3.058467, -0.000000, 1.422700, -0.000000, 1.000000}, + {2.144067, -0.000000, -0.550026, -0.000000, 2.866941, -0.000000, 1.339311, -0.000000, 1.000000}, + {2.031228, -0.000000, -0.541524, -0.000000, 2.689938, -0.000000, 1.260069, -0.000000, 1.000000}, + {1.924598, -0.000000, -0.527483, -0.000000, 2.519325, -0.000000, 1.181578, -0.000000, 1.000000}, + {1.828354, -0.000000, -0.511716, -0.000000, 2.360447, -0.000000, 1.108573, -0.000000, 1.000000}, + {1.741445, -0.000000, -0.495876, -0.000000, 2.217819, -0.000000, 1.039997, -0.000000, 1.000000}, + {1.662840, -0.000000, -0.478652, -0.000000, 2.088299, -0.000000, 0.976298, -0.000000, 1.000000}, + {1.590112, -0.000000, -0.462021, -0.000000, 1.971833, -0.000000, 0.914662, -0.000000, 1.000000}, + {1.526299, -0.000000, -0.445163, -0.000000, 1.864987, -0.000000, 0.858934, -0.000000, 1.000000}, + {1.469457, -0.000000, -0.427458, -0.000000, 1.769146, -0.000000, 0.806228, -0.000000, 1.000000}, + {1.416942, -0.000000, -0.411264, -0.000000, 1.681657, -0.000000, 0.755457, -0.000000, 1.000000}, + {1.372203, -0.000000, -0.394171, -0.000000, 1.602263, -0.000000, 0.709578, -0.000000, 1.000000}, + {1.327448, -0.000000, -0.377053, -0.000000, 1.531574, -0.000000, 0.662382, -0.000000, 1.000000}, + {1.285432, -0.000000, -0.358195, -0.000000, 1.462897, -0.000000, 0.616049, -0.000000, 1.000000}, + {1.244279, -0.000000, -0.338131, -0.000000, 1.399984, -0.000000, 0.569465, -0.000000, 1.000000}, + {1.208152, -0.000000, -0.317795, -0.000000, 1.342731, -0.000000, 0.525988, -0.000000, 1.000000}, + {1.176306, -0.000000, -0.298411, -0.000000, 1.291266, -0.000000, 0.485026, -0.000000, 1.000000}, + {1.145994, -0.000000, -0.279626, -0.000000, 1.244691, -0.000000, 0.445690, -0.000000, 1.000000}, + {1.115618, -0.000000, -0.260951, -0.000000, 1.201813, -0.000000, 0.406663, -0.000000, 1.000000}, + {1.087264, -0.000000, -0.242301, -0.000000, 1.163153, -0.000000, 0.369296, -0.000000, 1.000000}, + {1.059455, -0.000000, -0.222153, -0.000000, 1.125428, -0.000000, 0.332279, -0.000000, 1.000000}, + {1.034064, -0.000000, -0.202894, -0.000000, 1.091386, -0.000000, 0.297528, -0.000000, 1.000000}, + {1.011627, -0.000000, -0.184135, -0.000000, 1.060351, -0.000000, 0.264989, -0.000000, 1.000000}, + {0.990930, -0.000000, -0.166174, -0.000000, 1.031740, -0.000000, 0.234591, -0.000000, 1.000000}, + {0.971057, -0.000000, -0.148343, -0.000000, 1.005721, -0.000000, 0.205668, -0.000000, 1.000000}, + {0.952838, -0.000000, -0.129633, -0.000000, 0.982726, -0.000000, 0.178213, -0.000000, 1.000000}, + {0.933675, -0.000000, -0.112114, -0.000000, 0.961719, -0.000000, 0.152871, -0.000000, 1.000000}, + {0.918455, -0.000000, -0.094587, -0.000000, 0.944371, -0.000000, 0.129046, -0.000000, 1.000000}, + {0.905734, -0.000000, -0.078401, -0.000000, 0.928969, -0.000000, 0.106618, -0.000000, 1.000000}, + {0.896020, -0.000000, -0.061671, -0.000000, 0.915177, -0.000000, 0.084168, -0.000000, 1.000000}, + {0.888601, -0.000000, -0.044967, -0.000000, 0.902650, -0.000000, 0.061854, -0.000000, 1.000000}, + {0.883323, -0.000000, -0.029851, -0.000000, 0.892035, -0.000000, 0.040600, -0.000000, 1.000000}, + {0.878707, -0.000000, -0.014673, -0.000000, 0.882504, -0.000000, 0.019807, -0.000000, 1.000000}, + {0.873546, -0.000000, 0.000659, -0.000000, 0.873541, -0.000000, -0.000367, -0.000000, 1.000000}, + {500.016876, -0.000000, -0.681783, -0.000000, 732.371582, -0.000000, 340.902985, -0.000000, 1.000000}, + {500.016876, -0.000000, -0.681783, -0.000000, 732.371582, -0.000000, 340.902985, -0.000000, 1.000000}, + {496.155914, -0.000000, -0.681784, -0.000000, 726.702454, -0.000000, 338.271820, -0.000000, 1.000000}, + {220.495682, -0.000000, -0.681779, -0.000000, 323.010406, -0.000000, 150.330475, -0.000000, 1.000000}, + {124.033257, -0.000000, -0.681764, -0.000000, 181.677536, -0.000000, 84.563828, -0.000000, 1.000000}, + {79.408386, -0.000000, -0.681732, -0.000000, 116.274788, -0.000000, 54.139229, -0.000000, 1.000000}, + {55.120922, -0.000000, -0.681676, -0.000000, 80.743622, -0.000000, 37.580193, -0.000000, 1.000000}, + {40.497543, -0.000000, -0.681584, -0.000000, 59.318542, -0.000000, 27.609968, -0.000000, 1.000000}, + {31.002672, -0.000000, -0.681442, -0.000000, 45.409443, -0.000000, 21.136337, -0.000000, 1.000000}, + {24.493113, -0.000000, -0.681236, -0.000000, 35.873871, -0.000000, 16.697989, -0.000000, 1.000000}, + {19.836802, -0.000000, -0.680952, -0.000000, 29.052166, -0.000000, 13.523138, -0.000000, 1.000000}, + {16.391424, -0.000000, -0.680570, -0.000000, 24.003088, -0.000000, 11.173841, -0.000000, 1.000000}, + {13.770196, -0.000000, -0.680072, -0.000000, 20.160379, -0.000000, 9.386407, -0.000000, 1.000000}, + {11.730108, -0.000000, -0.679436, -0.000000, 17.170685, -0.000000, 7.995108, -0.000000, 1.000000}, + {10.111138, -0.000000, -0.678637, -0.000000, 14.796307, -0.000000, 6.890862, -0.000000, 1.000000}, + {8.804667, -0.000000, -0.677631, -0.000000, 12.879583, -0.000000, 5.999617, -0.000000, 1.000000}, + {7.735567, -0.000000, -0.676267, -0.000000, 11.309587, -0.000000, 5.270127, -0.000000, 1.000000}, + {6.850010, -0.000000, -0.673349, -0.000000, 10.008334, -0.000000, 4.665566, -0.000000, 1.000000}, + {6.108877, -0.000000, -0.666476, -0.000000, 8.917023, -0.000000, 4.158981, -0.000000, 1.000000}, + {5.480227, -0.000000, -0.662130, -0.000000, 7.991238, -0.000000, 3.729142, -0.000000, 1.000000}, + {4.943895, -0.000000, -0.657692, -0.000000, 7.200201, -0.000000, 3.362040, -0.000000, 1.000000}, + {4.482470, -0.000000, -0.654025, -0.000000, 6.518629, -0.000000, 3.045914, -0.000000, 1.000000}, + {4.083369, -0.000000, -0.648919, -0.000000, 5.927822, -0.000000, 2.771881, -0.000000, 1.000000}, + {3.737030, -0.000000, -0.641517, -0.000000, 5.412598, -0.000000, 2.533196, -0.000000, 1.000000}, + {3.433909, -0.000000, -0.633991, -0.000000, 4.959464, -0.000000, 2.323574, -0.000000, 1.000000}, + {3.167929, -0.000000, -0.626710, -0.000000, 4.560731, -0.000000, 2.138983, -0.000000, 1.000000}, + {2.934361, -0.000000, -0.618678, -0.000000, 4.206789, -0.000000, 1.975868, -0.000000, 1.000000}, + {2.731036, -0.000000, -0.609360, -0.000000, 3.891839, -0.000000, 1.832556, -0.000000, 1.000000}, + {2.552360, -0.000000, -0.600730, -0.000000, 3.611895, -0.000000, 1.705638, -0.000000, 1.000000}, + {2.397617, -0.000000, -0.591453, -0.000000, 3.360650, -0.000000, 1.594607, -0.000000, 1.000000}, + {2.259826, -0.000000, -0.582914, -0.000000, 3.137116, -0.000000, 1.495050, -0.000000, 1.000000}, + {2.136186, -0.000000, -0.574709, -0.000000, 2.939179, -0.000000, 1.405275, -0.000000, 1.000000}, + {2.027894, -0.000000, -0.565916, -0.000000, 2.755896, -0.000000, 1.324382, -0.000000, 1.000000}, + {1.925520, -0.000000, -0.552896, -0.000000, 2.582570, -0.000000, 1.245067, -0.000000, 1.000000}, + {1.827450, -0.000000, -0.535966, -0.000000, 2.418150, -0.000000, 1.166359, -0.000000, 1.000000}, + {1.740295, -0.000000, -0.519019, -0.000000, 2.268801, -0.000000, 1.093660, -0.000000, 1.000000}, + {1.662354, -0.000000, -0.500280, -0.000000, 2.133667, -0.000000, 1.026175, -0.000000, 1.000000}, + {1.591575, -0.000000, -0.482772, -0.000000, 2.010278, -0.000000, 0.962501, -0.000000, 1.000000}, + {1.527386, -0.000000, -0.464290, -0.000000, 1.899148, -0.000000, 0.902033, -0.000000, 1.000000}, + {1.469803, -0.000000, -0.445517, -0.000000, 1.799705, -0.000000, 0.845807, -0.000000, 1.000000}, + {1.417182, -0.000000, -0.427603, -0.000000, 1.707743, -0.000000, 0.791809, -0.000000, 1.000000}, + {1.370499, -0.000000, -0.409700, -0.000000, 1.625589, -0.000000, 0.741554, -0.000000, 1.000000}, + {1.326349, -0.000000, -0.390878, -0.000000, 1.550612, -0.000000, 0.692471, -0.000000, 1.000000}, + {1.284132, -0.000000, -0.372653, -0.000000, 1.482105, -0.000000, 0.643872, -0.000000, 1.000000}, + {1.246743, -0.000000, -0.351932, -0.000000, 1.416913, -0.000000, 0.596930, -0.000000, 1.000000}, + {1.208694, -0.000000, -0.330888, -0.000000, 1.357680, -0.000000, 0.549688, -0.000000, 1.000000}, + {1.175035, -0.000000, -0.309654, -0.000000, 1.303756, -0.000000, 0.505529, -0.000000, 1.000000}, + {1.145971, -0.000000, -0.290014, -0.000000, 1.255198, -0.000000, 0.464900, -0.000000, 1.000000}, + {1.116934, -0.000000, -0.270010, -0.000000, 1.210890, -0.000000, 0.424332, -0.000000, 1.000000}, + {1.088665, -0.000000, -0.251156, -0.000000, 1.171127, -0.000000, 0.385352, -0.000000, 1.000000}, + {1.061705, -0.000000, -0.231114, -0.000000, 1.133231, -0.000000, 0.346937, -0.000000, 1.000000}, + {1.034626, -0.000000, -0.210698, -0.000000, 1.097110, -0.000000, 0.309980, -0.000000, 1.000000}, + {1.011930, -0.000000, -0.190783, -0.000000, 1.065267, -0.000000, 0.275522, -0.000000, 1.000000}, + {0.989540, -0.000000, -0.171851, -0.000000, 1.035638, -0.000000, 0.243229, -0.000000, 1.000000}, + {0.971887, -0.000000, -0.153392, -0.000000, 1.009374, -0.000000, 0.213532, -0.000000, 1.000000}, + {0.953534, -0.000000, -0.135031, -0.000000, 0.985142, -0.000000, 0.185297, -0.000000, 1.000000}, + {0.934509, -0.000000, -0.116182, -0.000000, 0.963268, -0.000000, 0.158043, -0.000000, 1.000000}, + {0.917624, -0.000000, -0.097711, -0.000000, 0.944910, -0.000000, 0.133504, -0.000000, 1.000000}, + {0.904516, -0.000000, -0.081121, -0.000000, 0.928990, -0.000000, 0.110361, -0.000000, 1.000000}, + {0.894524, -0.000000, -0.063957, -0.000000, 0.915037, -0.000000, 0.087158, -0.000000, 1.000000}, + {0.886979, -0.000000, -0.047131, -0.000000, 0.902208, -0.000000, 0.064242, -0.000000, 1.000000}, + {0.881912, -0.000000, -0.030413, -0.000000, 0.891152, -0.000000, 0.041851, -0.000000, 1.000000}, + {0.877410, -0.000000, -0.014838, -0.000000, 0.881437, -0.000000, 0.020394, -0.000000, 1.000000}, + {0.872406, -0.000000, -0.000274, -0.000000, 0.872409, -0.000000, 0.000072, -0.000000, 1.000000}, + {500.032013, -0.000000, -0.718945, -0.000000, 758.369934, -0.000000, 359.495880, -0.000000, 1.000000}, + {500.032013, -0.000000, -0.718945, -0.000000, 758.369934, -0.000000, 359.495880, -0.000000, 1.000000}, + {496.130157, -0.000000, -0.718945, -0.000000, 752.568359, -0.000000, 356.691406, -0.000000, 1.000000}, + {220.512146, -0.000000, -0.718939, -0.000000, 334.448303, -0.000000, 158.537460, -0.000000, 1.000000}, + {124.039993, -0.000000, -0.718922, -0.000000, 188.145279, -0.000000, 89.178047, -0.000000, 1.000000}, + {79.382301, -0.000000, -0.718885, -0.000000, 120.416916, -0.000000, 57.071358, -0.000000, 1.000000}, + {55.120506, -0.000000, -0.718820, -0.000000, 83.611397, -0.000000, 39.628212, -0.000000, 1.000000}, + {40.496445, -0.000000, -0.718711, -0.000000, 61.426361, -0.000000, 29.114059, -0.000000, 1.000000}, + {31.000265, -0.000000, -0.718545, -0.000000, 47.020287, -0.000000, 22.286556, -0.000000, 1.000000}, + {24.492365, -0.000000, -0.718304, -0.000000, 37.146885, -0.000000, 17.607481, -0.000000, 1.000000}, + {19.835760, -0.000000, -0.717970, -0.000000, 30.081579, -0.000000, 14.259347, -0.000000, 1.000000}, + {16.390028, -0.000000, -0.717523, -0.000000, 24.852650, -0.000000, 11.781696, -0.000000, 1.000000}, + {13.768762, -0.000000, -0.716939, -0.000000, 20.874529, -0.000000, 9.896759, -0.000000, 1.000000}, + {11.728228, -0.000000, -0.716195, -0.000000, 17.776852, -0.000000, 8.429270, -0.000000, 1.000000}, + {10.108951, -0.000000, -0.715258, -0.000000, 15.317552, -0.000000, 7.264587, -0.000000, 1.000000}, + {8.802353, -0.000000, -0.714073, -0.000000, 13.332113, -0.000000, 6.324620, -0.000000, 1.000000}, + {7.733030, -0.000000, -0.712416, -0.000000, 11.705751, -0.000000, 5.555141, -0.000000, 1.000000}, + {6.847572, -0.000000, -0.707902, -0.000000, 10.357367, -0.000000, 4.917505, -0.000000, 1.000000}, + {6.105253, -0.000000, -0.701894, -0.000000, 9.224761, -0.000000, 4.382462, -0.000000, 1.000000}, + {5.476176, -0.000000, -0.697378, -0.000000, 8.265043, -0.000000, 3.928820, -0.000000, 1.000000}, + {4.939616, -0.000000, -0.692705, -0.000000, 7.444839, -0.000000, 3.541454, -0.000000, 1.000000}, + {4.477792, -0.000000, -0.688335, -0.000000, 6.738754, -0.000000, 3.207675, -0.000000, 1.000000}, + {4.078594, -0.000000, -0.682563, -0.000000, 6.125970, -0.000000, 2.918445, -0.000000, 1.000000}, + {3.732535, -0.000000, -0.674057, -0.000000, 5.590599, -0.000000, 2.666733, -0.000000, 1.000000}, + {3.428672, -0.000000, -0.666706, -0.000000, 5.120468, -0.000000, 2.445154, -0.000000, 1.000000}, + {3.162721, -0.000000, -0.658748, -0.000000, 4.705711, -0.000000, 2.250343, -0.000000, 1.000000}, + {2.930273, -0.000000, -0.648831, -0.000000, 4.337759, -0.000000, 2.078657, -0.000000, 1.000000}, + {2.726574, -0.000000, -0.639266, -0.000000, 4.009264, -0.000000, 1.927037, -0.000000, 1.000000}, + {2.549029, -0.000000, -0.629298, -0.000000, 3.717577, -0.000000, 1.793829, -0.000000, 1.000000}, + {2.392198, -0.000000, -0.618840, -0.000000, 3.454342, -0.000000, 1.674880, -0.000000, 1.000000}, + {2.250609, -0.000000, -0.609047, -0.000000, 3.223337, -0.000000, 1.566916, -0.000000, 1.000000}, + {2.130680, -0.000000, -0.598721, -0.000000, 3.012872, -0.000000, 1.473901, -0.000000, 1.000000}, + {2.020753, -0.000000, -0.589301, -0.000000, 2.823599, -0.000000, 1.387247, -0.000000, 1.000000}, + {1.923138, -0.000000, -0.577389, -0.000000, 2.649179, -0.000000, 1.307466, -0.000000, 1.000000}, + {1.828392, -0.000000, -0.560529, -0.000000, 2.478947, -0.000000, 1.226768, -0.000000, 1.000000}, + {1.742087, -0.000000, -0.541997, -0.000000, 2.322065, -0.000000, 1.150241, -0.000000, 1.000000}, + {1.663531, -0.000000, -0.522300, -0.000000, 2.181002, -0.000000, 1.078066, -0.000000, 1.000000}, + {1.593258, -0.000000, -0.503514, -0.000000, 2.051865, -0.000000, 1.010960, -0.000000, 1.000000}, + {1.528930, -0.000000, -0.483300, -0.000000, 1.935584, -0.000000, 0.946670, -0.000000, 1.000000}, + {1.470800, -0.000000, -0.463543, -0.000000, 1.831405, -0.000000, 0.886385, -0.000000, 1.000000}, + {1.418596, -0.000000, -0.444045, -0.000000, 1.735271, -0.000000, 0.829469, -0.000000, 1.000000}, + {1.370767, -0.000000, -0.424807, -0.000000, 1.648844, -0.000000, 0.775200, -0.000000, 1.000000}, + {1.326695, -0.000000, -0.405178, -0.000000, 1.571946, -0.000000, 0.723364, -0.000000, 1.000000}, + {1.285100, -0.000000, -0.385776, -0.000000, 1.501127, -0.000000, 0.672123, -0.000000, 1.000000}, + {1.246613, -0.000000, -0.365875, -0.000000, 1.434922, -0.000000, 0.623269, -0.000000, 1.000000}, + {1.211120, -0.000000, -0.343442, -0.000000, 1.373150, -0.000000, 0.574652, -0.000000, 1.000000}, + {1.175555, -0.000000, -0.321426, -0.000000, 1.317194, -0.000000, 0.527285, -0.000000, 1.000000}, + {1.144507, -0.000000, -0.299880, -0.000000, 1.265650, -0.000000, 0.482539, -0.000000, 1.000000}, + {1.118137, -0.000000, -0.279505, -0.000000, 1.220311, -0.000000, 0.441885, -0.000000, 1.000000}, + {1.089746, -0.000000, -0.258845, -0.000000, 1.178671, -0.000000, 0.400607, -0.000000, 1.000000}, + {1.062682, -0.000000, -0.239124, -0.000000, 1.140741, -0.000000, 0.361070, -0.000000, 1.000000}, + {1.036801, -0.000000, -0.218450, -0.000000, 1.103758, -0.000000, 0.322947, -0.000000, 1.000000}, + {1.012466, -0.000000, -0.197355, -0.000000, 1.070472, -0.000000, 0.286262, -0.000000, 1.000000}, + {0.990144, -0.000000, -0.177485, -0.000000, 1.039325, -0.000000, 0.252411, -0.000000, 1.000000}, + {0.970039, -0.000000, -0.158026, -0.000000, 1.012321, -0.000000, 0.220625, -0.000000, 1.000000}, + {0.952546, -0.000000, -0.139411, -0.000000, 0.987297, -0.000000, 0.191264, -0.000000, 1.000000}, + {0.934977, -0.000000, -0.120574, -0.000000, 0.965056, -0.000000, 0.163709, -0.000000, 1.000000}, + {0.917043, -0.000000, -0.101592, -0.000000, 0.945727, -0.000000, 0.138122, -0.000000, 1.000000}, + {0.903555, -0.000000, -0.083195, -0.000000, 0.928961, -0.000000, 0.113702, -0.000000, 1.000000}, + {0.893154, -0.000000, -0.065870, -0.000000, 0.914673, -0.000000, 0.089974, -0.000000, 1.000000}, + {0.885244, -0.000000, -0.049363, -0.000000, 0.901701, -0.000000, 0.066657, -0.000000, 1.000000}, + {0.880259, -0.000000, -0.031656, -0.000000, 0.890309, -0.000000, 0.043354, -0.000000, 1.000000}, + {0.875875, -0.000000, -0.014862, -0.000000, 0.880188, -0.000000, 0.020891, -0.000000, 1.000000}, + {0.871043, -0.000000, 0.000256, -0.000000, 0.870945, -0.000000, -0.000137, -0.000000, 1.000000}, + {500.016571, -0.000000, -0.757465, -0.000000, 786.858398, -0.000000, 378.745361, -0.000000, 1.000000}, + {500.016571, -0.000000, -0.757465, -0.000000, 786.858398, -0.000000, 378.745361, -0.000000, 1.000000}, + {496.087402, -0.000000, -0.757465, -0.000000, 780.799805, -0.000000, 375.770020, -0.000000, 1.000000}, + {220.496460, -0.000000, -0.757456, -0.000000, 347.001892, -0.000000, 167.018478, -0.000000, 1.000000}, + {124.021706, -0.000000, -0.757437, -0.000000, 195.195587, -0.000000, 93.942039, -0.000000, 1.000000}, + {79.354782, -0.000000, -0.757394, -0.000000, 124.907188, -0.000000, 60.108276, -0.000000, 1.000000}, + {55.123611, -0.000000, -0.757317, -0.000000, 86.745041, -0.000000, 41.753639, -0.000000, 1.000000}, + {40.493320, -0.000000, -0.757190, -0.000000, 63.723457, -0.000000, 30.671453, -0.000000, 1.000000}, + {31.001829, -0.000000, -0.756997, -0.000000, 48.782738, -0.000000, 23.481710, -0.000000, 1.000000}, + {24.491461, -0.000000, -0.756715, -0.000000, 38.537193, -0.000000, 18.550026, -0.000000, 1.000000}, + {19.834652, -0.000000, -0.756324, -0.000000, 31.206244, -0.000000, 15.022271, -0.000000, 1.000000}, + {16.388771, -0.000000, -0.755801, -0.000000, 25.780468, -0.000000, 12.411734, -0.000000, 1.000000}, + {13.766821, -0.000000, -0.755119, -0.000000, 21.652681, -0.000000, 10.425264, -0.000000, 1.000000}, + {11.726192, -0.000000, -0.754249, -0.000000, 18.438374, -0.000000, 8.879026, -0.000000, 1.000000}, + {10.106738, -0.000000, -0.753154, -0.000000, 15.885935, -0.000000, 7.651758, -0.000000, 1.000000}, + {8.799608, -0.000000, -0.751759, -0.000000, 13.825396, -0.000000, 6.660956, -0.000000, 1.000000}, + {7.730100, -0.000000, -0.749701, -0.000000, 12.137217, -0.000000, 5.850013, -0.000000, 1.000000}, + {6.844899, -0.000000, -0.743462, -0.000000, 10.735440, -0.000000, 5.178157, -0.000000, 1.000000}, + {6.101553, -0.000000, -0.738226, -0.000000, 9.559602, -0.000000, 4.613752, -0.000000, 1.000000}, + {5.471830, -0.000000, -0.733636, -0.000000, 8.562824, -0.000000, 4.135220, -0.000000, 1.000000}, + {4.934471, -0.000000, -0.728749, -0.000000, 7.711218, -0.000000, 3.726457, -0.000000, 1.000000}, + {4.473125, -0.000000, -0.723497, -0.000000, 6.977385, -0.000000, 3.374942, -0.000000, 1.000000}, + {4.073567, -0.000000, -0.716803, -0.000000, 6.340463, -0.000000, 3.069777, -0.000000, 1.000000}, + {3.727019, -0.000000, -0.707811, -0.000000, 5.784211, -0.000000, 2.804099, -0.000000, 1.000000}, + {3.422580, -0.000000, -0.700011, -0.000000, 5.294843, -0.000000, 2.570042, -0.000000, 1.000000}, + {3.157044, -0.000000, -0.691252, -0.000000, 4.863124, -0.000000, 2.364830, -0.000000, 1.000000}, + {2.925684, -0.000000, -0.679736, -0.000000, 4.478961, -0.000000, 2.184515, -0.000000, 1.000000}, + {2.722253, -0.000000, -0.670128, -0.000000, 4.136032, -0.000000, 2.024818, -0.000000, 1.000000}, + {2.544445, -0.000000, -0.658046, -0.000000, 3.831401, -0.000000, 1.883826, -0.000000, 1.000000}, + {2.382300, -0.000000, -0.647027, -0.000000, 3.558311, -0.000000, 1.754153, -0.000000, 1.000000}, + {2.245936, -0.000000, -0.635682, -0.000000, 3.314620, -0.000000, 1.643791, -0.000000, 1.000000}, + {2.121977, -0.000000, -0.623786, -0.000000, 3.093869, -0.000000, 1.542036, -0.000000, 1.000000}, + {2.016015, -0.000000, -0.613245, -0.000000, 2.896573, -0.000000, 1.453048, -0.000000, 1.000000}, + {1.920516, -0.000000, -0.600915, -0.000000, 2.715904, -0.000000, 1.370420, -0.000000, 1.000000}, + {1.829693, -0.000000, -0.585172, -0.000000, 2.543165, -0.000000, 1.288862, -0.000000, 1.000000}, + {1.743612, -0.000000, -0.565172, -0.000000, 2.379242, -0.000000, 1.207866, -0.000000, 1.000000}, + {1.665633, -0.000000, -0.544631, -0.000000, 2.230448, -0.000000, 1.131523, -0.000000, 1.000000}, + {1.594965, -0.000000, -0.524193, -0.000000, 2.096458, -0.000000, 1.059918, -0.000000, 1.000000}, + {1.530862, -0.000000, -0.502763, -0.000000, 1.973897, -0.000000, 0.992010, -0.000000, 1.000000}, + {1.472046, -0.000000, -0.481219, -0.000000, 1.864800, -0.000000, 0.927470, -0.000000, 1.000000}, + {1.419386, -0.000000, -0.460845, -0.000000, 1.764531, -0.000000, 0.866984, -0.000000, 1.000000}, + {1.371530, -0.000000, -0.439620, -0.000000, 1.673750, -0.000000, 0.809381, -0.000000, 1.000000}, + {1.327209, -0.000000, -0.419270, -0.000000, 1.593743, -0.000000, 0.754078, -0.000000, 1.000000}, + {1.286139, -0.000000, -0.398293, -0.000000, 1.520195, -0.000000, 0.700851, -0.000000, 1.000000}, + {1.247699, -0.000000, -0.378401, -0.000000, 1.452214, -0.000000, 0.649469, -0.000000, 1.000000}, + {1.210732, -0.000000, -0.356349, -0.000000, 1.389294, -0.000000, 0.598509, -0.000000, 1.000000}, + {1.177412, -0.000000, -0.333050, -0.000000, 1.331034, -0.000000, 0.549290, -0.000000, 1.000000}, + {1.144334, -0.000000, -0.310286, -0.000000, 1.277276, -0.000000, 0.501625, -0.000000, 1.000000}, + {1.117230, -0.000000, -0.288298, -0.000000, 1.229205, -0.000000, 0.458115, -0.000000, 1.000000}, + {1.090315, -0.000000, -0.267211, -0.000000, 1.186310, -0.000000, 0.416001, -0.000000, 1.000000}, + {1.063710, -0.000000, -0.246106, -0.000000, 1.147072, -0.000000, 0.374799, -0.000000, 1.000000}, + {1.037720, -0.000000, -0.225958, -0.000000, 1.110195, -0.000000, 0.335533, -0.000000, 1.000000}, + {1.012769, -0.000000, -0.204172, -0.000000, 1.075655, -0.000000, 0.297130, -0.000000, 1.000000}, + {0.990244, -0.000000, -0.183358, -0.000000, 1.043497, -0.000000, 0.261470, -0.000000, 1.000000}, + {0.968461, -0.000000, -0.162830, -0.000000, 1.014392, -0.000000, 0.227643, -0.000000, 1.000000}, + {0.950116, -0.000000, -0.143248, -0.000000, 0.988938, -0.000000, 0.197337, -0.000000, 1.000000}, + {0.933208, -0.000000, -0.124340, -0.000000, 0.966441, -0.000000, 0.168937, -0.000000, 1.000000}, + {0.916615, -0.000000, -0.105101, -0.000000, 0.946501, -0.000000, 0.142467, -0.000000, 1.000000}, + {0.902946, -0.000000, -0.086103, -0.000000, 0.929131, -0.000000, 0.117331, -0.000000, 1.000000}, + {0.891502, -0.000000, -0.067630, -0.000000, 0.914060, -0.000000, 0.092642, -0.000000, 1.000000}, + {0.883863, -0.000000, -0.050308, -0.000000, 0.901030, -0.000000, 0.068653, -0.000000, 1.000000}, + {0.878615, -0.000000, -0.033412, -0.000000, 0.889532, -0.000000, 0.045106, -0.000000, 1.000000}, + {0.874271, -0.000000, -0.015795, -0.000000, 0.878952, -0.000000, 0.021789, -0.000000, 1.000000}, + {0.869484, -0.000000, 0.001046, -0.000000, 0.869574, -0.000000, -0.000553, -0.000000, 1.000000}, + {500.017303, -0.000000, -0.797466, -0.000000, 817.871033, -0.000000, 398.747833, -0.000000, 1.000000}, + {500.017303, -0.000000, -0.797466, -0.000000, 817.871033, -0.000000, 398.747833, -0.000000, 1.000000}, + {496.127563, -0.000000, -0.797467, -0.000000, 811.633179, -0.000000, 395.647186, -0.000000, 1.000000}, + {220.492523, -0.000000, -0.797459, -0.000000, 360.665405, -0.000000, 175.835709, -0.000000, 1.000000}, + {124.072601, -0.000000, -0.797435, -0.000000, 202.856842, -0.000000, 98.943756, -0.000000, 1.000000}, + {79.373917, -0.000000, -0.797385, -0.000000, 129.864807, -0.000000, 63.297756, -0.000000, 1.000000}, + {55.121258, -0.000000, -0.797295, -0.000000, 90.172737, -0.000000, 43.956730, -0.000000, 1.000000}, + {40.495140, -0.000000, -0.797146, -0.000000, 66.241463, -0.000000, 32.292618, -0.000000, 1.000000}, + {31.000458, -0.000000, -0.796920, -0.000000, 50.708515, -0.000000, 24.720581, -0.000000, 1.000000}, + {24.491554, -0.000000, -0.796592, -0.000000, 40.057415, -0.000000, 19.529551, -0.000000, 1.000000}, + {19.833290, -0.000000, -0.796136, -0.000000, 32.436165, -0.000000, 15.814341, -0.000000, 1.000000}, + {16.386721, -0.000000, -0.795526, -0.000000, 26.795473, -0.000000, 13.065339, -0.000000, 1.000000}, + {13.764978, -0.000000, -0.794731, -0.000000, 22.503210, -0.000000, 10.974028, -0.000000, 1.000000}, + {11.723998, -0.000000, -0.793717, -0.000000, 19.161100, -0.000000, 9.345816, -0.000000, 1.000000}, + {10.104026, -0.000000, -0.792437, -0.000000, 16.507286, -0.000000, 8.053266, -0.000000, 1.000000}, + {8.796682, -0.000000, -0.790791, -0.000000, 14.364434, -0.000000, 7.009870, -0.000000, 1.000000}, + {7.726801, -0.000000, -0.788135, -0.000000, 12.608691, -0.000000, 6.155709, -0.000000, 1.000000}, + {6.840981, -0.000000, -0.781123, -0.000000, 11.149081, -0.000000, 5.447814, -0.000000, 1.000000}, + {6.097093, -0.000000, -0.775400, -0.000000, 9.924636, -0.000000, 4.853001, -0.000000, 1.000000}, + {5.467016, -0.000000, -0.770942, -0.000000, 8.887487, -0.000000, 4.348842, -0.000000, 1.000000}, + {4.929003, -0.000000, -0.765887, -0.000000, 8.000960, -0.000000, 3.917835, -0.000000, 1.000000}, + {4.467512, -0.000000, -0.759514, -0.000000, 7.237631, -0.000000, 3.547466, -0.000000, 1.000000}, + {4.067760, -0.000000, -0.751551, -0.000000, 6.573490, -0.000000, 3.225742, -0.000000, 1.000000}, + {3.720563, -0.000000, -0.742531, -0.000000, 5.994136, -0.000000, 2.945441, -0.000000, 1.000000}, + {3.416248, -0.000000, -0.733854, -0.000000, 5.484142, -0.000000, 2.698927, -0.000000, 1.000000}, + {3.151365, -0.000000, -0.724136, -0.000000, 5.033256, -0.000000, 2.483075, -0.000000, 1.000000}, + {2.920730, -0.000000, -0.712086, -0.000000, 4.631833, -0.000000, 2.293504, -0.000000, 1.000000}, + {2.715982, -0.000000, -0.701324, -0.000000, 4.273705, -0.000000, 2.124066, -0.000000, 1.000000}, + {2.535126, -0.000000, -0.687603, -0.000000, 3.955679, -0.000000, 1.972982, -0.000000, 1.000000}, + {2.377020, -0.000000, -0.675481, -0.000000, 3.667966, -0.000000, 1.839237, -0.000000, 1.000000}, + {2.237835, -0.000000, -0.662376, -0.000000, 3.410899, -0.000000, 1.720161, -0.000000, 1.000000}, + {2.116522, -0.000000, -0.649335, -0.000000, 3.179844, -0.000000, 1.614362, -0.000000, 1.000000}, + {2.010905, -0.000000, -0.636700, -0.000000, 2.972357, -0.000000, 1.520011, -0.000000, 1.000000}, + {1.916303, -0.000000, -0.623563, -0.000000, 2.782754, -0.000000, 1.433122, -0.000000, 1.000000}, + {1.830436, -0.000000, -0.608887, -0.000000, 2.608755, -0.000000, 1.351484, -0.000000, 1.000000}, + {1.743522, -0.000000, -0.588093, -0.000000, 2.439840, -0.000000, 1.265660, -0.000000, 1.000000}, + {1.665256, -0.000000, -0.567021, -0.000000, 2.284506, -0.000000, 1.184838, -0.000000, 1.000000}, + {1.595436, -0.000000, -0.544727, -0.000000, 2.142789, -0.000000, 1.109166, -0.000000, 1.000000}, + {1.529808, -0.000000, -0.522298, -0.000000, 2.015306, -0.000000, 1.036543, -0.000000, 1.000000}, + {1.471729, -0.000000, -0.499149, -0.000000, 1.899347, -0.000000, 0.968507, -0.000000, 1.000000}, + {1.418189, -0.000000, -0.477280, -0.000000, 1.795287, -0.000000, 0.903782, -0.000000, 1.000000}, + {1.371309, -0.000000, -0.455059, -0.000000, 1.700773, -0.000000, 0.843494, -0.000000, 1.000000}, + {1.327345, -0.000000, -0.432719, -0.000000, 1.615324, -0.000000, 0.784955, -0.000000, 1.000000}, + {1.286379, -0.000000, -0.411237, -0.000000, 1.539990, -0.000000, 0.729372, -0.000000, 1.000000}, + {1.247780, -0.000000, -0.389590, -0.000000, 1.468775, -0.000000, 0.674986, -0.000000, 1.000000}, + {1.211524, -0.000000, -0.367984, -0.000000, 1.405173, -0.000000, 0.622546, -0.000000, 1.000000}, + {1.177005, -0.000000, -0.344678, -0.000000, 1.345087, -0.000000, 0.570945, -0.000000, 1.000000}, + {1.145418, -0.000000, -0.320562, -0.000000, 1.289806, -0.000000, 0.521267, -0.000000, 1.000000}, + {1.114639, -0.000000, -0.297473, -0.000000, 1.239357, -0.000000, 0.473857, -0.000000, 1.000000}, + {1.090549, -0.000000, -0.275152, -0.000000, 1.194652, -0.000000, 0.430556, -0.000000, 1.000000}, + {1.064188, -0.000000, -0.253187, -0.000000, 1.153395, -0.000000, 0.388250, -0.000000, 1.000000}, + {1.038570, -0.000000, -0.232337, -0.000000, 1.116358, -0.000000, 0.347149, -0.000000, 1.000000}, + {1.013901, -0.000000, -0.210886, -0.000000, 1.081003, -0.000000, 0.307919, -0.000000, 1.000000}, + {0.990528, -0.000000, -0.189382, -0.000000, 1.048208, -0.000000, 0.270504, -0.000000, 1.000000}, + {0.968848, -0.000000, -0.167786, -0.000000, 1.017692, -0.000000, 0.235323, -0.000000, 1.000000}, + {0.949038, -0.000000, -0.147367, -0.000000, 0.990954, -0.000000, 0.203049, -0.000000, 1.000000}, + {0.931911, -0.000000, -0.127610, -0.000000, 0.967629, -0.000000, 0.173836, -0.000000, 1.000000}, + {0.915025, -0.000000, -0.108382, -0.000000, 0.947114, -0.000000, 0.146519, -0.000000, 1.000000}, + {0.900909, -0.000000, -0.089164, -0.000000, 0.929632, -0.000000, 0.120909, -0.000000, 1.000000}, + {0.890059, -0.000000, -0.069694, -0.000000, 0.913788, -0.000000, 0.095417, -0.000000, 1.000000}, + {0.882400, -0.000000, -0.051166, -0.000000, 0.900090, -0.000000, 0.070433, -0.000000, 1.000000}, + {0.876997, -0.000000, -0.034103, -0.000000, 0.888359, -0.000000, 0.046330, -0.000000, 1.000000}, + {0.872843, -0.000000, -0.017226, -0.000000, 0.877864, -0.000000, 0.022875, -0.000000, 1.000000}, + {0.868087, -0.000000, 0.000993, -0.000000, 0.868095, -0.000000, -0.000517, -0.000000, 1.000000}, + {500.061951, -0.000000, -0.839092, -0.000000, 852.310974, -0.000000, 419.597229, -0.000000, 1.000000}, + {500.061951, -0.000000, -0.839092, -0.000000, 852.310974, -0.000000, 419.597229, -0.000000, 1.000000}, + {496.196442, -0.000000, -0.839093, -0.000000, 845.390015, -0.000000, 416.356049, -0.000000, 1.000000}, + {220.471832, -0.000000, -0.839081, -0.000000, 375.759491, -0.000000, 184.996674, -0.000000, 1.000000}, + {124.015244, -0.000000, -0.839055, -0.000000, 211.417328, -0.000000, 104.060410, -0.000000, 1.000000}, + {79.380630, -0.000000, -0.838997, -0.000000, 135.254730, -0.000000, 66.607300, -0.000000, 1.000000}, + {55.120049, -0.000000, -0.838891, -0.000000, 93.925743, -0.000000, 46.250122, -0.000000, 1.000000}, + {40.490086, -0.000000, -0.838720, -0.000000, 69.000076, -0.000000, 33.973907, -0.000000, 1.000000}, + {30.997051, -0.000000, -0.838455, -0.000000, 52.817276, -0.000000, 26.007944, -0.000000, 1.000000}, + {24.481707, -0.000000, -0.838073, -0.000000, 41.730366, -0.000000, 20.540449, -0.000000, 1.000000}, + {19.833473, -0.000000, -0.837542, -0.000000, 33.779564, -0.000000, 16.639612, -0.000000, 1.000000}, + {16.385019, -0.000000, -0.836833, -0.000000, 27.906063, -0.000000, 13.745603, -0.000000, 1.000000}, + {13.762700, -0.000000, -0.835907, -0.000000, 23.434160, -0.000000, 11.544593, -0.000000, 1.000000}, + {11.721079, -0.000000, -0.834725, -0.000000, 19.951761, -0.000000, 9.830773, -0.000000, 1.000000}, + {10.100230, -0.000000, -0.833233, -0.000000, 17.187639, -0.000000, 8.469976, -0.000000, 1.000000}, + {8.793116, -0.000000, -0.831283, -0.000000, 14.953251, -0.000000, 7.372204, -0.000000, 1.000000}, + {7.723076, -0.000000, -0.827602, -0.000000, 13.123185, -0.000000, 6.473154, -0.000000, 1.000000}, + {6.836372, -0.000000, -0.819847, -0.000000, 11.599359, -0.000000, 5.727441, -0.000000, 1.000000}, + {6.091511, -0.000000, -0.814450, -0.000000, 10.322539, -0.000000, 5.100740, -0.000000, 1.000000}, + {5.461082, -0.000000, -0.809315, -0.000000, 9.241489, -0.000000, 4.569826, -0.000000, 1.000000}, + {4.922778, -0.000000, -0.804183, -0.000000, 8.316956, -0.000000, 4.115965, -0.000000, 1.000000}, + {4.460990, -0.000000, -0.796565, -0.000000, 7.520323, -0.000000, 3.725735, -0.000000, 1.000000}, + {4.061113, -0.000000, -0.787762, -0.000000, 6.826444, -0.000000, 3.386944, -0.000000, 1.000000}, + {3.713335, -0.000000, -0.778575, -0.000000, 6.222120, -0.000000, 3.091404, -0.000000, 1.000000}, + {3.409401, -0.000000, -0.769000, -0.000000, 5.689177, -0.000000, 2.832045, -0.000000, 1.000000}, + {3.145958, -0.000000, -0.757468, -0.000000, 5.216529, -0.000000, 2.605641, -0.000000, 1.000000}, + {2.913903, -0.000000, -0.745044, -0.000000, 4.797429, -0.000000, 2.405021, -0.000000, 1.000000}, + {2.706408, -0.000000, -0.732698, -0.000000, 4.423292, -0.000000, 2.224132, -0.000000, 1.000000}, + {2.528517, -0.000000, -0.718415, -0.000000, 4.087810, -0.000000, 2.067148, -0.000000, 1.000000}, + {2.368678, -0.000000, -0.704462, -0.000000, 3.787008, -0.000000, 1.924415, -0.000000, 1.000000}, + {2.231644, -0.000000, -0.689712, -0.000000, 3.514945, -0.000000, 1.800064, -0.000000, 1.000000}, + {2.111736, -0.000000, -0.675275, -0.000000, 3.272635, -0.000000, 1.689158, -0.000000, 1.000000}, + {2.005742, -0.000000, -0.660258, -0.000000, 3.051764, -0.000000, 1.588759, -0.000000, 1.000000}, + {1.909973, -0.000000, -0.646635, -0.000000, 2.855904, -0.000000, 1.496072, -0.000000, 1.000000}, + {1.819564, -0.000000, -0.631361, -0.000000, 2.678693, -0.000000, 1.406525, -0.000000, 1.000000}, + {1.738574, -0.000000, -0.611670, -0.000000, 2.506556, -0.000000, 1.321244, -0.000000, 1.000000}, + {1.660726, -0.000000, -0.589152, -0.000000, 2.342970, -0.000000, 1.236298, -0.000000, 1.000000}, + {1.590554, -0.000000, -0.565663, -0.000000, 2.194014, -0.000000, 1.156271, -0.000000, 1.000000}, + {1.526449, -0.000000, -0.541301, -0.000000, 2.059833, -0.000000, 1.080103, -0.000000, 1.000000}, + {1.467188, -0.000000, -0.517240, -0.000000, 1.938357, -0.000000, 1.007356, -0.000000, 1.000000}, + {1.414559, -0.000000, -0.493476, -0.000000, 1.828179, -0.000000, 0.939381, -0.000000, 1.000000}, + {1.370525, -0.000000, -0.470171, -0.000000, 1.729083, -0.000000, 0.877393, -0.000000, 1.000000}, + {1.325549, -0.000000, -0.446532, -0.000000, 1.639331, -0.000000, 0.815431, -0.000000, 1.000000}, + {1.286233, -0.000000, -0.423341, -0.000000, 1.559244, -0.000000, 0.757016, -0.000000, 1.000000}, + {1.247492, -0.000000, -0.401134, -0.000000, 1.486929, -0.000000, 0.700020, -0.000000, 1.000000}, + {1.212348, -0.000000, -0.378347, -0.000000, 1.420771, -0.000000, 0.645661, -0.000000, 1.000000}, + {1.177561, -0.000000, -0.355993, -0.000000, 1.359709, -0.000000, 0.592399, -0.000000, 1.000000}, + {1.145355, -0.000000, -0.330840, -0.000000, 1.302774, -0.000000, 0.540237, -0.000000, 1.000000}, + {1.114929, -0.000000, -0.306848, -0.000000, 1.250311, -0.000000, 0.490992, -0.000000, 1.000000}, + {1.089528, -0.000000, -0.282816, -0.000000, 1.203116, -0.000000, 0.444872, -0.000000, 1.000000}, + {1.063232, -0.000000, -0.260588, -0.000000, 1.160838, -0.000000, 0.400718, -0.000000, 1.000000}, + {1.039013, -0.000000, -0.237949, -0.000000, 1.121873, -0.000000, 0.358791, -0.000000, 1.000000}, + {1.014354, -0.000000, -0.216970, -0.000000, 1.086610, -0.000000, 0.318310, -0.000000, 1.000000}, + {0.991115, -0.000000, -0.195158, -0.000000, 1.052459, -0.000000, 0.279775, -0.000000, 1.000000}, + {0.968756, -0.000000, -0.173124, -0.000000, 1.021447, -0.000000, 0.243295, -0.000000, 1.000000}, + {0.949337, -0.000000, -0.151596, -0.000000, 0.993445, -0.000000, 0.209255, -0.000000, 1.000000}, + {0.931425, -0.000000, -0.130794, -0.000000, 0.968499, -0.000000, 0.178360, -0.000000, 1.000000}, + {0.913483, -0.000000, -0.111179, -0.000000, 0.947533, -0.000000, 0.150638, -0.000000, 1.000000}, + {0.898757, -0.000000, -0.091677, -0.000000, 0.929436, -0.000000, 0.124443, -0.000000, 1.000000}, + {0.888046, -0.000000, -0.072420, -0.000000, 0.913495, -0.000000, 0.098317, -0.000000, 1.000000}, + {0.880235, -0.000000, -0.052744, -0.000000, 0.899423, -0.000000, 0.072399, -0.000000, 1.000000}, + {0.875197, -0.000000, -0.034421, -0.000000, 0.887249, -0.000000, 0.047351, -0.000000, 1.000000}, + {0.871148, -0.000000, -0.017173, -0.000000, 0.876458, -0.000000, 0.023356, -0.000000, 1.000000}, + {0.866682, -0.000000, -0.000118, -0.000000, 0.866652, -0.000000, 0.000045, -0.000000, 1.000000}, + {500.131042, -0.000000, -0.882497, -0.000000, 889.079346, -0.000000, 441.363556, -0.000000, 1.000000}, + {500.131042, -0.000000, -0.882497, -0.000000, 889.079346, -0.000000, 441.363556, -0.000000, 1.000000}, + {495.881348, -0.000000, -0.882497, -0.000000, 882.177551, -0.000000, 437.613770, -0.000000, 1.000000}, + {220.509079, -0.000000, -0.882485, -0.000000, 392.221130, -0.000000, 194.599243, -0.000000, 1.000000}, + {124.028885, -0.000000, -0.882453, -0.000000, 220.623901, -0.000000, 109.455116, -0.000000, 1.000000}, + {79.377640, -0.000000, -0.882386, -0.000000, 141.192078, -0.000000, 70.050079, -0.000000, 1.000000}, + {55.118439, -0.000000, -0.882263, -0.000000, 98.043686, -0.000000, 48.640995, -0.000000, 1.000000}, + {40.493782, -0.000000, -0.882064, -0.000000, 72.019936, -0.000000, 35.734364, -0.000000, 1.000000}, + {30.999401, -0.000000, -0.881756, -0.000000, 55.125107, -0.000000, 27.355206, -0.000000, 1.000000}, + {24.487234, -0.000000, -0.881312, -0.000000, 43.546761, -0.000000, 21.607693, -0.000000, 1.000000}, + {19.829800, -0.000000, -0.880694, -0.000000, 35.258209, -0.000000, 17.496971, -0.000000, 1.000000}, + {16.382486, -0.000000, -0.879869, -0.000000, 29.123596, -0.000000, 14.454084, -0.000000, 1.000000}, + {13.760002, -0.000000, -0.878792, -0.000000, 24.454414, -0.000000, 12.139007, -0.000000, 1.000000}, + {11.717984, -0.000000, -0.877418, -0.000000, 20.818827, -0.000000, 10.336102, -0.000000, 1.000000}, + {10.097014, -0.000000, -0.875677, -0.000000, 17.930525, -0.000000, 8.904661, -0.000000, 1.000000}, + {8.789146, -0.000000, -0.873344, -0.000000, 15.597968, -0.000000, 7.749365, -0.000000, 1.000000}, + {7.718943, -0.000000, -0.867686, -0.000000, 13.683362, -0.000000, 6.803425, -0.000000, 1.000000}, + {6.830849, -0.000000, -0.860952, -0.000000, 12.092108, -0.000000, 6.017935, -0.000000, 1.000000}, + {6.085179, -0.000000, -0.855248, -0.000000, 10.758094, -0.000000, 5.357964, -0.000000, 1.000000}, + {5.454656, -0.000000, -0.849018, -0.000000, 9.627773, -0.000000, 4.799277, -0.000000, 1.000000}, + {4.915613, -0.000000, -0.843686, -0.000000, 8.661961, -0.000000, 4.321169, -0.000000, 1.000000}, + {4.453752, -0.000000, -0.834738, -0.000000, 7.827643, -0.000000, 3.910462, -0.000000, 1.000000}, + {4.053242, -0.000000, -0.825356, -0.000000, 7.102279, -0.000000, 3.553410, -0.000000, 1.000000}, + {3.705397, -0.000000, -0.815419, -0.000000, 6.469771, -0.000000, 3.242329, -0.000000, 1.000000}, + {3.402260, -0.000000, -0.804816, -0.000000, 5.911213, -0.000000, 2.969801, -0.000000, 1.000000}, + {3.140205, -0.000000, -0.792056, -0.000000, 5.414690, -0.000000, 2.732658, -0.000000, 1.000000}, + {2.903370, -0.000000, -0.778928, -0.000000, 4.978415, -0.000000, 2.517220, -0.000000, 1.000000}, + {2.700214, -0.000000, -0.764462, -0.000000, 4.582938, -0.000000, 2.330147, -0.000000, 1.000000}, + {2.519197, -0.000000, -0.749486, -0.000000, 4.231819, -0.000000, 2.162038, -0.000000, 1.000000}, + {2.363564, -0.000000, -0.733487, -0.000000, 3.913390, -0.000000, 2.015040, -0.000000, 1.000000}, + {2.226328, -0.000000, -0.717834, -0.000000, 3.626251, -0.000000, 1.883066, -0.000000, 1.000000}, + {2.107657, -0.000000, -0.701267, -0.000000, 3.369889, -0.000000, 1.766898, -0.000000, 1.000000}, + {1.998437, -0.000000, -0.684466, -0.000000, 3.138471, -0.000000, 1.657171, -0.000000, 1.000000}, + {1.899259, -0.000000, -0.669577, -0.000000, 2.934640, -0.000000, 1.556509, -0.000000, 1.000000}, + {1.814318, -0.000000, -0.652042, -0.000000, 2.745214, -0.000000, 1.465691, -0.000000, 1.000000}, + {1.736606, -0.000000, -0.633872, -0.000000, 2.572179, -0.000000, 1.379555, -0.000000, 1.000000}, + {1.661191, -0.000000, -0.611125, -0.000000, 2.402454, -0.000000, 1.291961, -0.000000, 1.000000}, + {1.590615, -0.000000, -0.586628, -0.000000, 2.247036, -0.000000, 1.207066, -0.000000, 1.000000}, + {1.526334, -0.000000, -0.560843, -0.000000, 2.106422, -0.000000, 1.126522, -0.000000, 1.000000}, + {1.467914, -0.000000, -0.535057, -0.000000, 1.978291, -0.000000, 1.049531, -0.000000, 1.000000}, + {1.414042, -0.000000, -0.510065, -0.000000, 1.862797, -0.000000, 0.977122, -0.000000, 1.000000}, + {1.365696, -0.000000, -0.485082, -0.000000, 1.758440, -0.000000, 0.908894, -0.000000, 1.000000}, + {1.321159, -0.000000, -0.460233, -0.000000, 1.665493, -0.000000, 0.843520, -0.000000, 1.000000}, + {1.284118, -0.000000, -0.435750, -0.000000, 1.580328, -0.000000, 0.783909, -0.000000, 1.000000}, + {1.248044, -0.000000, -0.412070, -0.000000, 1.504833, -0.000000, 0.725637, -0.000000, 1.000000}, + {1.211028, -0.000000, -0.388556, -0.000000, 1.436081, -0.000000, 0.667618, -0.000000, 1.000000}, + {1.178240, -0.000000, -0.365558, -0.000000, 1.373633, -0.000000, 0.613518, -0.000000, 1.000000}, + {1.145880, -0.000000, -0.341586, -0.000000, 1.316458, -0.000000, 0.559875, -0.000000, 1.000000}, + {1.116671, -0.000000, -0.315906, -0.000000, 1.261373, -0.000000, 0.508747, -0.000000, 1.000000}, + {1.086212, -0.000000, -0.291249, -0.000000, 1.211337, -0.000000, 0.458242, -0.000000, 1.000000}, + {1.062977, -0.000000, -0.267059, -0.000000, 1.167779, -0.000000, 0.413072, -0.000000, 1.000000}, + {1.036993, -0.000000, -0.244402, -0.000000, 1.128034, -0.000000, 0.369039, -0.000000, 1.000000}, + {1.014246, -0.000000, -0.221603, -0.000000, 1.091346, -0.000000, 0.327930, -0.000000, 1.000000}, + {0.991596, -0.000000, -0.200200, -0.000000, 1.057211, -0.000000, 0.288680, -0.000000, 1.000000}, + {0.969782, -0.000000, -0.178648, -0.000000, 1.024976, -0.000000, 0.251601, -0.000000, 1.000000}, + {0.948710, -0.000000, -0.155682, -0.000000, 0.996039, -0.000000, 0.215546, -0.000000, 1.000000}, + {0.930451, -0.000000, -0.134603, -0.000000, 0.969911, -0.000000, 0.183457, -0.000000, 1.000000}, + {0.912840, -0.000000, -0.113499, -0.000000, 0.947872, -0.000000, 0.154009, -0.000000, 1.000000}, + {0.897718, -0.000000, -0.093768, -0.000000, 0.929566, -0.000000, 0.127358, -0.000000, 1.000000}, + {0.886099, -0.000000, -0.074419, -0.000000, 0.913216, -0.000000, 0.100924, -0.000000, 1.000000}, + {0.878136, -0.000000, -0.055149, -0.000000, 0.898608, -0.000000, 0.074780, -0.000000, 1.000000}, + {0.873177, -0.000000, -0.035307, -0.000000, 0.886040, -0.000000, 0.048633, -0.000000, 1.000000}, + {0.869362, -0.000000, -0.016836, -0.000000, 0.874910, -0.000000, 0.023622, -0.000000, 1.000000}, + {0.864932, -0.000000, 0.000313, -0.000000, 0.864848, -0.000000, -0.000105, -0.000000, 1.000000}, + {499.908478, -0.000000, -0.927855, -0.000000, 930.500305, -0.000000, 463.842773, -0.000000, 1.000000}, + {499.908478, -0.000000, -0.927855, -0.000000, 930.500305, -0.000000, 463.842773, -0.000000, 1.000000}, + {496.019867, -0.000000, -0.927855, -0.000000, 923.053040, -0.000000, 460.236145, -0.000000, 1.000000}, + {220.502594, -0.000000, -0.927841, -0.000000, 410.345581, -0.000000, 204.594955, -0.000000, 1.000000}, + {124.029205, -0.000000, -0.927803, -0.000000, 230.803741, -0.000000, 115.081070, -0.000000, 1.000000}, + {79.378181, -0.000000, -0.927727, -0.000000, 147.705490, -0.000000, 73.650932, -0.000000, 1.000000}, + {55.116497, -0.000000, -0.927583, -0.000000, 102.567078, -0.000000, 51.139164, -0.000000, 1.000000}, + {40.490452, -0.000000, -0.927351, -0.000000, 75.345779, -0.000000, 37.567810, -0.000000, 1.000000}, + {30.996964, -0.000000, -0.926994, -0.000000, 57.670261, -0.000000, 28.758696, -0.000000, 1.000000}, + {24.488325, -0.000000, -0.926478, -0.000000, 45.551537, -0.000000, 22.719057, -0.000000, 1.000000}, + {19.827961, -0.000000, -0.925760, -0.000000, 36.881195, -0.000000, 18.394314, -0.000000, 1.000000}, + {16.379869, -0.000000, -0.924802, -0.000000, 30.461296, -0.000000, 15.194170, -0.000000, 1.000000}, + {13.756917, -0.000000, -0.923550, -0.000000, 25.574484, -0.000000, 12.759556, -0.000000, 1.000000}, + {11.714156, -0.000000, -0.921954, -0.000000, 21.769402, -0.000000, 10.863268, -0.000000, 1.000000}, + {10.093195, -0.000000, -0.919921, -0.000000, 18.746195, -0.000000, 9.358130, -0.000000, 1.000000}, + {8.784454, -0.000000, -0.917080, -0.000000, 16.304501, -0.000000, 8.142523, -0.000000, 1.000000}, + {7.713624, -0.000000, -0.909769, -0.000000, 14.297624, -0.000000, 7.147200, -0.000000, 1.000000}, + {6.823885, -0.000000, -0.903473, -0.000000, 12.631841, -0.000000, 6.319734, -0.000000, 1.000000}, + {6.077799, -0.000000, -0.897557, -0.000000, 11.234589, -0.000000, 5.625329, -0.000000, 1.000000}, + {5.446403, -0.000000, -0.890848, -0.000000, 10.050310, -0.000000, 5.036999, -0.000000, 1.000000}, + {4.907801, -0.000000, -0.884419, -0.000000, 9.038234, -0.000000, 4.534451, -0.000000, 1.000000}, + {4.445316, -0.000000, -0.873740, -0.000000, 8.162788, -0.000000, 4.101727, -0.000000, 1.000000}, + {4.044328, -0.000000, -0.864251, -0.000000, 7.402873, -0.000000, 3.725650, -0.000000, 1.000000}, + {3.696771, -0.000000, -0.852993, -0.000000, 6.738603, -0.000000, 3.398484, -0.000000, 1.000000}, + {3.395342, -0.000000, -0.841136, -0.000000, 6.151515, -0.000000, 3.113235, -0.000000, 1.000000}, + {3.127434, -0.000000, -0.827421, -0.000000, 5.632942, -0.000000, 2.858315, -0.000000, 1.000000}, + {2.895621, -0.000000, -0.813156, -0.000000, 5.172462, -0.000000, 2.635826, -0.000000, 1.000000}, + {2.690136, -0.000000, -0.797548, -0.000000, 4.757117, -0.000000, 2.436781, -0.000000, 1.000000}, + {2.512220, -0.000000, -0.781254, -0.000000, 4.385640, -0.000000, 2.261955, -0.000000, 1.000000}, + {2.358229, -0.000000, -0.763409, -0.000000, 4.048933, -0.000000, 2.108631, -0.000000, 1.000000}, + {2.218923, -0.000000, -0.746178, -0.000000, 3.746610, -0.000000, 1.967116, -0.000000, 1.000000}, + {2.092763, -0.000000, -0.727519, -0.000000, 3.478552, -0.000000, 1.837282, -0.000000, 1.000000}, + {1.986424, -0.000000, -0.709407, -0.000000, 3.234240, -0.000000, 1.724144, -0.000000, 1.000000}, + {1.892072, -0.000000, -0.692215, -0.000000, 3.014810, -0.000000, 1.620646, -0.000000, 1.000000}, + {1.809130, -0.000000, -0.673452, -0.000000, 2.817690, -0.000000, 1.526411, -0.000000, 1.000000}, + {1.733035, -0.000000, -0.654370, -0.000000, 2.637035, -0.000000, 1.436569, -0.000000, 1.000000}, + {1.658695, -0.000000, -0.633478, -0.000000, 2.467819, -0.000000, 1.346815, -0.000000, 1.000000}, + {1.588832, -0.000000, -0.607105, -0.000000, 2.302829, -0.000000, 1.257592, -0.000000, 1.000000}, + {1.527209, -0.000000, -0.580322, -0.000000, 2.154327, -0.000000, 1.174574, -0.000000, 1.000000}, + {1.468240, -0.000000, -0.552996, -0.000000, 2.019936, -0.000000, 1.092972, -0.000000, 1.000000}, + {1.414084, -0.000000, -0.526105, -0.000000, 1.899011, -0.000000, 1.015422, -0.000000, 1.000000}, + {1.365278, -0.000000, -0.500260, -0.000000, 1.789665, -0.000000, 0.943152, -0.000000, 1.000000}, + {1.320623, -0.000000, -0.473509, -0.000000, 1.691689, -0.000000, 0.874706, -0.000000, 1.000000}, + {1.279080, -0.000000, -0.448183, -0.000000, 1.602969, -0.000000, 0.808758, -0.000000, 1.000000}, + {1.245666, -0.000000, -0.422511, -0.000000, 1.523303, -0.000000, 0.749607, -0.000000, 1.000000}, + {1.211175, -0.000000, -0.398514, -0.000000, 1.451762, -0.000000, 0.690656, -0.000000, 1.000000}, + {1.177195, -0.000000, -0.374133, -0.000000, 1.386911, -0.000000, 0.632779, -0.000000, 1.000000}, + {1.146160, -0.000000, -0.350095, -0.000000, 1.329179, -0.000000, 0.578229, -0.000000, 1.000000}, + {1.115566, -0.000000, -0.325518, -0.000000, 1.273694, -0.000000, 0.525008, -0.000000, 1.000000}, + {1.086968, -0.000000, -0.299404, -0.000000, 1.221791, -0.000000, 0.473555, -0.000000, 1.000000}, + {1.061792, -0.000000, -0.274184, -0.000000, 1.175437, -0.000000, 0.425841, -0.000000, 1.000000}, + {1.036679, -0.000000, -0.250434, -0.000000, 1.134076, -0.000000, 0.379570, -0.000000, 1.000000}, + {1.012360, -0.000000, -0.226726, -0.000000, 1.096226, -0.000000, 0.336435, -0.000000, 1.000000}, + {0.989209, -0.000000, -0.204502, -0.000000, 1.061142, -0.000000, 0.296004, -0.000000, 1.000000}, + {0.970135, -0.000000, -0.182453, -0.000000, 1.028751, -0.000000, 0.258358, -0.000000, 1.000000}, + {0.948646, -0.000000, -0.160789, -0.000000, 0.998611, -0.000000, 0.222258, -0.000000, 1.000000}, + {0.929732, -0.000000, -0.138072, -0.000000, 0.971441, -0.000000, 0.188430, -0.000000, 1.000000}, + {0.912429, -0.000000, -0.116434, -0.000000, 0.948350, -0.000000, 0.157687, -0.000000, 1.000000}, + {0.895975, -0.000000, -0.095600, -0.000000, 0.928999, -0.000000, 0.130181, -0.000000, 1.000000}, + {0.884479, -0.000000, -0.075905, -0.000000, 0.912408, -0.000000, 0.103223, -0.000000, 1.000000}, + {0.876235, -0.000000, -0.056627, -0.000000, 0.897797, -0.000000, 0.076690, -0.000000, 1.000000}, + {0.871366, -0.000000, -0.037032, -0.000000, 0.884918, -0.000000, 0.050406, -0.000000, 1.000000}, + {0.867513, -0.000000, -0.017359, -0.000000, 0.873494, -0.000000, 0.024282, -0.000000, 1.000000}, + {0.862955, -0.000000, 0.001008, -0.000000, 0.862967, -0.000000, -0.000406, -0.000000, 1.000000}, + {498.993134, -0.000000, -0.975364, -0.000000, 976.678406, -0.000000, 486.700562, -0.000000, 1.000000}, + {498.993134, -0.000000, -0.975364, -0.000000, 976.678406, -0.000000, 486.700562, -0.000000, 1.000000}, + {496.104645, -0.000000, -0.975363, -0.000000, 968.191040, -0.000000, 483.884094, -0.000000, 1.000000}, + {220.493851, -0.000000, -0.975346, -0.000000, 430.348663, -0.000000, 215.060410, -0.000000, 1.000000}, + {124.026276, -0.000000, -0.975303, -0.000000, 242.001144, -0.000000, 120.970490, -0.000000, 1.000000}, + {79.373550, -0.000000, -0.975213, -0.000000, 154.865677, -0.000000, 77.417633, -0.000000, 1.000000}, + {55.121506, -0.000000, -0.975046, -0.000000, 107.539261, -0.000000, 53.762280, -0.000000, 1.000000}, + {40.495274, -0.000000, -0.974777, -0.000000, 79.001297, -0.000000, 39.495827, -0.000000, 1.000000}, + {30.994772, -0.000000, -0.974362, -0.000000, 60.471733, -0.000000, 30.228813, -0.000000, 1.000000}, + {24.483818, -0.000000, -0.973762, -0.000000, 47.757706, -0.000000, 23.877586, -0.000000, 1.000000}, + {19.826784, -0.000000, -0.972930, -0.000000, 38.664623, -0.000000, 19.334599, -0.000000, 1.000000}, + {16.377377, -0.000000, -0.971816, -0.000000, 31.930515, -0.000000, 15.969238, -0.000000, 1.000000}, + {13.753089, -0.000000, -0.970365, -0.000000, 26.807053, -0.000000, 13.408640, -0.000000, 1.000000}, + {11.710072, -0.000000, -0.968508, -0.000000, 22.814585, -0.000000, 11.414821, -0.000000, 1.000000}, + {10.088183, -0.000000, -0.966128, -0.000000, 19.643433, -0.000000, 9.831615, -0.000000, 1.000000}, + {8.779231, -0.000000, -0.962527, -0.000000, 17.080414, -0.000000, 8.553432, -0.000000, 1.000000}, + {7.706794, -0.000000, -0.954200, -0.000000, 14.971908, -0.000000, 7.505392, -0.000000, 1.000000}, + {6.816430, -0.000000, -0.947334, -0.000000, 13.222908, -0.000000, 6.634820, -0.000000, 1.000000}, + {6.069510, -0.000000, -0.941459, -0.000000, 11.756576, -0.000000, 5.903896, -0.000000, 1.000000}, + {5.437681, -0.000000, -0.934260, -0.000000, 10.513264, -0.000000, 5.284787, -0.000000, 1.000000}, + {4.898997, -0.000000, -0.926350, -0.000000, 9.449535, -0.000000, 4.756173, -0.000000, 1.000000}, + {4.435613, -0.000000, -0.914688, -0.000000, 8.529024, -0.000000, 4.300109, -0.000000, 1.000000}, + {4.034491, -0.000000, -0.904784, -0.000000, 7.731143, -0.000000, 3.904481, -0.000000, 1.000000}, + {3.687969, -0.000000, -0.891974, -0.000000, 7.031538, -0.000000, 3.561143, -0.000000, 1.000000}, + {3.385607, -0.000000, -0.878620, -0.000000, 6.413283, -0.000000, 3.260022, -0.000000, 1.000000}, + {3.117722, -0.000000, -0.864378, -0.000000, 5.868060, -0.000000, 2.991642, -0.000000, 1.000000}, + {2.885299, -0.000000, -0.847743, -0.000000, 5.381703, -0.000000, 2.756853, -0.000000, 1.000000}, + {2.681940, -0.000000, -0.831104, -0.000000, 4.944142, -0.000000, 2.548940, -0.000000, 1.000000}, + {2.506321, -0.000000, -0.813058, -0.000000, 4.549020, -0.000000, 2.366774, -0.000000, 1.000000}, + {2.350028, -0.000000, -0.794126, -0.000000, 4.195113, -0.000000, 2.202568, -0.000000, 1.000000}, + {2.206787, -0.000000, -0.774717, -0.000000, 3.878904, -0.000000, 2.049569, -0.000000, 1.000000}, + {2.086035, -0.000000, -0.753674, -0.000000, 3.590309, -0.000000, 1.916902, -0.000000, 1.000000}, + {1.980427, -0.000000, -0.734701, -0.000000, 3.333446, -0.000000, 1.797973, -0.000000, 1.000000}, + {1.886191, -0.000000, -0.714553, -0.000000, 3.099187, -0.000000, 1.687468, -0.000000, 1.000000}, + {1.800217, -0.000000, -0.695010, -0.000000, 2.894012, -0.000000, 1.585271, -0.000000, 1.000000}, + {1.724818, -0.000000, -0.673644, -0.000000, 2.702550, -0.000000, 1.490888, -0.000000, 1.000000}, + {1.656403, -0.000000, -0.653161, -0.000000, 2.529073, -0.000000, 1.401430, -0.000000, 1.000000}, + {1.589200, -0.000000, -0.627952, -0.000000, 2.361250, -0.000000, 1.310598, -0.000000, 1.000000}, + {1.525179, -0.000000, -0.599427, -0.000000, 2.204435, -0.000000, 1.220875, -0.000000, 1.000000}, + {1.465978, -0.000000, -0.570864, -0.000000, 2.064462, -0.000000, 1.134797, -0.000000, 1.000000}, + {1.411806, -0.000000, -0.542452, -0.000000, 1.936784, -0.000000, 1.053385, -0.000000, 1.000000}, + {1.364771, -0.000000, -0.514894, -0.000000, 1.821312, -0.000000, 0.977994, -0.000000, 1.000000}, + {1.319653, -0.000000, -0.487250, -0.000000, 1.719127, -0.000000, 0.905201, -0.000000, 1.000000}, + {1.278415, -0.000000, -0.460174, -0.000000, 1.626256, -0.000000, 0.836438, -0.000000, 1.000000}, + {1.239993, -0.000000, -0.433354, -0.000000, 1.542820, -0.000000, 0.770893, -0.000000, 1.000000}, + {1.208869, -0.000000, -0.407817, -0.000000, 1.467569, -0.000000, 0.711487, -0.000000, 1.000000}, + {1.176574, -0.000000, -0.382780, -0.000000, 1.400645, -0.000000, 0.652386, -0.000000, 1.000000}, + {1.144650, -0.000000, -0.357695, -0.000000, 1.339664, -0.000000, 0.595230, -0.000000, 1.000000}, + {1.115058, -0.000000, -0.333450, -0.000000, 1.284167, -0.000000, 0.541150, -0.000000, 1.000000}, + {1.088207, -0.000000, -0.307685, -0.000000, 1.232362, -0.000000, 0.488884, -0.000000, 1.000000}, + {1.059847, -0.000000, -0.281549, -0.000000, 1.183181, -0.000000, 0.437421, -0.000000, 1.000000}, + {1.036572, -0.000000, -0.256226, -0.000000, 1.139530, -0.000000, 0.390744, -0.000000, 1.000000}, + {1.010978, -0.000000, -0.232329, -0.000000, 1.100796, -0.000000, 0.345220, -0.000000, 1.000000}, + {0.987828, -0.000000, -0.208445, -0.000000, 1.064368, -0.000000, 0.303018, -0.000000, 1.000000}, + {0.967001, -0.000000, -0.186070, -0.000000, 1.031720, -0.000000, 0.264075, -0.000000, 1.000000}, + {0.946787, -0.000000, -0.164335, -0.000000, 1.000664, -0.000000, 0.227604, -0.000000, 1.000000}, + {0.929630, -0.000000, -0.141922, -0.000000, 0.973669, -0.000000, 0.193628, -0.000000, 1.000000}, + {0.911838, -0.000000, -0.119756, -0.000000, 0.949531, -0.000000, 0.162297, -0.000000, 1.000000}, + {0.895213, -0.000000, -0.098019, -0.000000, 0.929034, -0.000000, 0.133357, -0.000000, 1.000000}, + {0.883037, -0.000000, -0.076844, -0.000000, 0.911660, -0.000000, 0.105312, -0.000000, 1.000000}, + {0.874419, -0.000000, -0.057609, -0.000000, 0.896608, -0.000000, 0.078392, -0.000000, 1.000000}, + {0.869289, -0.000000, -0.037963, -0.000000, 0.883639, -0.000000, 0.051558, -0.000000, 1.000000}, + {0.865568, -0.000000, -0.018772, -0.000000, 0.871991, -0.000000, 0.025276, -0.000000, 1.000000}, + {0.861164, -0.000000, 0.000968, -0.000000, 0.861110, -0.000000, -0.000445, -0.000000, 1.000000}, + {500.037872, -0.000000, -1.025238, -0.000000, 1025.517090, -0.000000, 512.657776, -0.000000, 1.000000}, + {500.037872, -0.000000, -1.025238, -0.000000, 1025.517090, -0.000000, 512.657776, -0.000000, 1.000000}, + {496.149597, -0.000000, -1.025239, -0.000000, 1017.573975, -0.000000, 508.672821, -0.000000, 1.000000}, + {220.490112, -0.000000, -1.025220, -0.000000, 452.287750, -0.000000, 226.055649, -0.000000, 1.000000}, + {123.898338, -0.000000, -1.025170, -0.000000, 254.619720, -0.000000, 127.025589, -0.000000, 1.000000}, + {79.391258, -0.000000, -1.025063, -0.000000, 162.793762, -0.000000, 81.394318, -0.000000, 1.000000}, + {55.119484, -0.000000, -1.024873, -0.000000, 113.037849, -0.000000, 56.509220, -0.000000, 1.000000}, + {40.488483, -0.000000, -1.024557, -0.000000, 83.037262, -0.000000, 41.508354, -0.000000, 1.000000}, + {30.993290, -0.000000, -1.024077, -0.000000, 63.554382, -0.000000, 31.772776, -0.000000, 1.000000}, + {24.480589, -0.000000, -1.023379, -0.000000, 50.200405, -0.000000, 25.094837, -0.000000, 1.000000}, + {19.822830, -0.000000, -1.022414, -0.000000, 40.632015, -0.000000, 20.318817, -0.000000, 1.000000}, + {16.373678, -0.000000, -1.021120, -0.000000, 33.553726, -0.000000, 16.781538, -0.000000, 1.000000}, + {13.748674, -0.000000, -1.019434, -0.000000, 28.165298, -0.000000, 14.089147, -0.000000, 1.000000}, + {11.705168, -0.000000, -1.017277, -0.000000, 23.967451, -0.000000, 11.992762, -0.000000, 1.000000}, + {10.083005, -0.000000, -1.014477, -0.000000, 20.631399, -0.000000, 10.328159, -0.000000, 1.000000}, + {8.772611, -0.000000, -1.009526, -0.000000, 17.933300, -0.000000, 8.982896, -0.000000, 1.000000}, + {7.699113, -0.000000, -1.000448, -0.000000, 15.712477, -0.000000, 7.880071, -0.000000, 1.000000}, + {6.807818, -0.000000, -0.993442, -0.000000, 13.872507, -0.000000, 6.963836, -0.000000, 1.000000}, + {6.060381, -0.000000, -0.987011, -0.000000, 12.329924, -0.000000, 6.194833, -0.000000, 1.000000}, + {5.427757, -0.000000, -0.979336, -0.000000, 11.021285, -0.000000, 5.543046, -0.000000, 1.000000}, + {4.888412, -0.000000, -0.969358, -0.000000, 9.900178, -0.000000, 4.986307, -0.000000, 1.000000}, + {4.424665, -0.000000, -0.957246, -0.000000, 8.929996, -0.000000, 4.506370, -0.000000, 1.000000}, + {4.023794, -0.000000, -0.946408, -0.000000, 8.089095, -0.000000, 4.090411, -0.000000, 1.000000}, + {3.677202, -0.000000, -0.931942, -0.000000, 7.350788, -0.000000, 3.729072, -0.000000, 1.000000}, + {3.372041, -0.000000, -0.917404, -0.000000, 6.700420, -0.000000, 3.409127, -0.000000, 1.000000}, + {3.105673, -0.000000, -0.902082, -0.000000, 6.123778, -0.000000, 3.128247, -0.000000, 1.000000}, + {2.875522, -0.000000, -0.883758, -0.000000, 5.608041, -0.000000, 2.883012, -0.000000, 1.000000}, + {2.674237, -0.000000, -0.865197, -0.000000, 5.144587, -0.000000, 2.666038, -0.000000, 1.000000}, + {2.497020, -0.000000, -0.845380, -0.000000, 4.726780, -0.000000, 2.472375, -0.000000, 1.000000}, + {2.336472, -0.000000, -0.825321, -0.000000, 4.355277, -0.000000, 2.294547, -0.000000, 1.000000}, + {2.199103, -0.000000, -0.803629, -0.000000, 4.016941, -0.000000, 2.138724, -0.000000, 1.000000}, + {2.078905, -0.000000, -0.780611, -0.000000, 3.711555, -0.000000, 1.998574, -0.000000, 1.000000}, + {1.970641, -0.000000, -0.759876, -0.000000, 3.438906, -0.000000, 1.869376, -0.000000, 1.000000}, + {1.877239, -0.000000, -0.737689, -0.000000, 3.191887, -0.000000, 1.753589, -0.000000, 1.000000}, + {1.794387, -0.000000, -0.715423, -0.000000, 2.969989, -0.000000, 1.647656, -0.000000, 1.000000}, + {1.717408, -0.000000, -0.693435, -0.000000, 2.773737, -0.000000, 1.546270, -0.000000, 1.000000}, + {1.649466, -0.000000, -0.671235, -0.000000, 2.589671, -0.000000, 1.452259, -0.000000, 1.000000}, + {1.586323, -0.000000, -0.647398, -0.000000, 2.420877, -0.000000, 1.361515, -0.000000, 1.000000}, + {1.523070, -0.000000, -0.618852, -0.000000, 2.259597, -0.000000, 1.267477, -0.000000, 1.000000}, + {1.466873, -0.000000, -0.588191, -0.000000, 2.109860, -0.000000, 1.179627, -0.000000, 1.000000}, + {1.412098, -0.000000, -0.558778, -0.000000, 1.976553, -0.000000, 1.093307, -0.000000, 1.000000}, + {1.362247, -0.000000, -0.529468, -0.000000, 1.855979, -0.000000, 1.011874, -0.000000, 1.000000}, + {1.318768, -0.000000, -0.500596, -0.000000, 1.747553, -0.000000, 0.936205, -0.000000, 1.000000}, + {1.277224, -0.000000, -0.472318, -0.000000, 1.650914, -0.000000, 0.864115, -0.000000, 1.000000}, + {1.238423, -0.000000, -0.443965, -0.000000, 1.563302, -0.000000, 0.794573, -0.000000, 1.000000}, + {1.203593, -0.000000, -0.417095, -0.000000, 1.484466, -0.000000, 0.730561, -0.000000, 1.000000}, + {1.175799, -0.000000, -0.391155, -0.000000, 1.414344, -0.000000, 0.671763, -0.000000, 1.000000}, + {1.143384, -0.000000, -0.365221, -0.000000, 1.351420, -0.000000, 0.612008, -0.000000, 1.000000}, + {1.114282, -0.000000, -0.340166, -0.000000, 1.294105, -0.000000, 0.556355, -0.000000, 1.000000}, + {1.086062, -0.000000, -0.315273, -0.000000, 1.241617, -0.000000, 0.502284, -0.000000, 1.000000}, + {1.060104, -0.000000, -0.288886, -0.000000, 1.192894, -0.000000, 0.451043, -0.000000, 1.000000}, + {1.035165, -0.000000, -0.262812, -0.000000, 1.146646, -0.000000, 0.401512, -0.000000, 1.000000}, + {1.010927, -0.000000, -0.237303, -0.000000, 1.105342, -0.000000, 0.354568, -0.000000, 1.000000}, + {0.986868, -0.000000, -0.213225, -0.000000, 1.068711, -0.000000, 0.310890, -0.000000, 1.000000}, + {0.963888, -0.000000, -0.189524, -0.000000, 1.033689, -0.000000, 0.269485, -0.000000, 1.000000}, + {0.944575, -0.000000, -0.166984, -0.000000, 1.002348, -0.000000, 0.232086, -0.000000, 1.000000}, + {0.925989, -0.000000, -0.144904, -0.000000, 0.974783, -0.000000, 0.197529, -0.000000, 1.000000}, + {0.909718, -0.000000, -0.123194, -0.000000, 0.950088, -0.000000, 0.165804, -0.000000, 1.000000}, + {0.893602, -0.000000, -0.100585, -0.000000, 0.929001, -0.000000, 0.135989, -0.000000, 1.000000}, + {0.880930, -0.000000, -0.078820, -0.000000, 0.911111, -0.000000, 0.107735, -0.000000, 1.000000}, + {0.872501, -0.000000, -0.058035, -0.000000, 0.895415, -0.000000, 0.079710, -0.000000, 1.000000}, + {0.867507, -0.000000, -0.038358, -0.000000, 0.882132, -0.000000, 0.052461, -0.000000, 1.000000}, + {0.863453, -0.000000, -0.019345, -0.000000, 0.870294, -0.000000, 0.025992, -0.000000, 1.000000}, + {0.859288, -0.000000, 0.000110, -0.000000, 0.859383, -0.000000, -0.000014, -0.000000, 1.000000}, + {499.996735, -0.000000, -1.077731, -0.000000, 1080.664673, -0.000000, 538.861328, -0.000000, 1.000000}, + {499.996735, -0.000000, -1.077731, -0.000000, 1080.664673, -0.000000, 538.861328, -0.000000, 1.000000}, + {496.170593, -0.000000, -1.077731, -0.000000, 1072.279297, -0.000000, 534.739807, -0.000000, 1.000000}, + {220.517517, -0.000000, -1.077709, -0.000000, 476.652893, -0.000000, 237.659348, -0.000000, 1.000000}, + {124.117775, -0.000000, -1.077652, -0.000000, 268.725189, -0.000000, 133.765640, -0.000000, 1.000000}, + {79.410866, -0.000000, -1.077531, -0.000000, 171.527359, -0.000000, 85.583138, -0.000000, 1.000000}, + {55.113548, -0.000000, -1.077307, -0.000000, 119.128113, -0.000000, 59.396004, -0.000000, 1.000000}, + {40.485504, -0.000000, -1.076940, -0.000000, 87.496834, -0.000000, 43.630085, -0.000000, 1.000000}, + {30.995348, -0.000000, -1.076383, -0.000000, 66.968063, -0.000000, 33.401592, -0.000000, 1.000000}, + {24.478037, -0.000000, -1.075572, -0.000000, 52.888393, -0.000000, 26.376728, -0.000000, 1.000000}, + {19.818436, -0.000000, -1.074451, -0.000000, 42.809273, -0.000000, 21.353882, -0.000000, 1.000000}, + {16.369066, -0.000000, -1.072950, -0.000000, 35.347332, -0.000000, 17.635206, -0.000000, 1.000000}, + {13.744530, -0.000000, -1.070992, -0.000000, 29.665915, -0.000000, 14.805332, -0.000000, 1.000000}, + {11.699392, -0.000000, -1.068479, -0.000000, 25.240294, -0.000000, 12.599726, -0.000000, 1.000000}, + {10.076106, -0.000000, -1.065157, -0.000000, 21.721914, -0.000000, 10.848528, -0.000000, 1.000000}, + {8.765397, -0.000000, -1.057776, -0.000000, 18.870815, -0.000000, 9.433759, -0.000000, 1.000000}, + {7.689671, -0.000000, -1.049772, -0.000000, 16.531149, -0.000000, 8.271976, -0.000000, 1.000000}, + {6.797180, -0.000000, -1.042245, -0.000000, 14.589982, -0.000000, 7.307357, -0.000000, 1.000000}, + {6.049593, -0.000000, -1.034233, -0.000000, 12.960362, -0.000000, 6.498483, -0.000000, 1.000000}, + {5.416529, -0.000000, -1.026134, -0.000000, 11.579355, -0.000000, 5.812615, -0.000000, 1.000000}, + {4.876689, -0.000000, -1.013528, -0.000000, 10.392941, -0.000000, 5.226410, -0.000000, 1.000000}, + {4.411905, -0.000000, -1.001664, -0.000000, 9.369521, -0.000000, 4.720509, -0.000000, 1.000000}, + {4.012266, -0.000000, -0.989026, -0.000000, 8.480060, -0.000000, 4.284074, -0.000000, 1.000000}, + {3.662950, -0.000000, -0.972831, -0.000000, 7.699392, -0.000000, 3.900908, -0.000000, 1.000000}, + {3.360163, -0.000000, -0.956997, -0.000000, 7.010824, -0.000000, 3.566742, -0.000000, 1.000000}, + {3.094684, -0.000000, -0.940183, -0.000000, 6.400454, -0.000000, 3.271647, -0.000000, 1.000000}, + {2.865789, -0.000000, -0.920848, -0.000000, 5.853747, -0.000000, 3.014791, -0.000000, 1.000000}, + {2.663946, -0.000000, -0.899793, -0.000000, 5.361293, -0.000000, 2.785320, -0.000000, 1.000000}, + {2.481951, -0.000000, -0.878705, -0.000000, 4.922871, -0.000000, 2.575858, -0.000000, 1.000000}, + {2.327681, -0.000000, -0.856813, -0.000000, 4.523750, -0.000000, 2.394462, -0.000000, 1.000000}, + {2.192445, -0.000000, -0.832278, -0.000000, 4.164162, -0.000000, 2.231818, -0.000000, 1.000000}, + {2.069360, -0.000000, -0.808212, -0.000000, 3.840145, -0.000000, 2.080414, -0.000000, 1.000000}, + {1.964869, -0.000000, -0.784627, -0.000000, 3.548100, -0.000000, 1.946890, -0.000000, 1.000000}, + {1.867790, -0.000000, -0.761011, -0.000000, 3.290413, -0.000000, 1.821110, -0.000000, 1.000000}, + {1.784666, -0.000000, -0.736268, -0.000000, 3.054466, -0.000000, 1.707456, -0.000000, 1.000000}, + {1.705916, -0.000000, -0.712094, -0.000000, 2.846312, -0.000000, 1.598577, -0.000000, 1.000000}, + {1.638266, -0.000000, -0.688936, -0.000000, 2.655171, -0.000000, 1.499242, -0.000000, 1.000000}, + {1.578253, -0.000000, -0.664921, -0.000000, 2.481119, -0.000000, 1.407212, -0.000000, 1.000000}, + {1.518494, -0.000000, -0.637776, -0.000000, 2.316894, -0.000000, 1.313202, -0.000000, 1.000000}, + {1.463787, -0.000000, -0.605856, -0.000000, 2.159441, -0.000000, 1.221768, -0.000000, 1.000000}, + {1.409612, -0.000000, -0.574727, -0.000000, 2.017316, -0.000000, 1.131762, -0.000000, 1.000000}, + {1.362154, -0.000000, -0.544026, -0.000000, 1.890369, -0.000000, 1.046947, -0.000000, 1.000000}, + {1.315537, -0.000000, -0.513893, -0.000000, 1.776250, -0.000000, 0.966523, -0.000000, 1.000000}, + {1.276021, -0.000000, -0.484153, -0.000000, 1.675288, -0.000000, 0.891506, -0.000000, 1.000000}, + {1.236644, -0.000000, -0.454743, -0.000000, 1.585168, -0.000000, 0.819109, -0.000000, 1.000000}, + {1.200984, -0.000000, -0.426294, -0.000000, 1.502623, -0.000000, 0.750754, -0.000000, 1.000000}, + {1.172336, -0.000000, -0.399072, -0.000000, 1.428918, -0.000000, 0.688631, -0.000000, 1.000000}, + {1.142360, -0.000000, -0.372529, -0.000000, 1.362915, -0.000000, 0.628822, -0.000000, 1.000000}, + {1.112101, -0.000000, -0.346395, -0.000000, 1.303952, -0.000000, 0.569939, -0.000000, 1.000000}, + {1.084985, -0.000000, -0.321156, -0.000000, 1.250121, -0.000000, 0.514811, -0.000000, 1.000000}, + {1.059741, -0.000000, -0.295675, -0.000000, 1.200694, -0.000000, 0.463237, -0.000000, 1.000000}, + {1.036129, -0.000000, -0.269211, -0.000000, 1.154357, -0.000000, 0.413015, -0.000000, 1.000000}, + {1.011153, -0.000000, -0.242809, -0.000000, 1.111147, -0.000000, 0.364226, -0.000000, 1.000000}, + {0.985804, -0.000000, -0.217788, -0.000000, 1.072691, -0.000000, 0.318474, -0.000000, 1.000000}, + {0.963591, -0.000000, -0.193127, -0.000000, 1.036701, -0.000000, 0.276046, -0.000000, 1.000000}, + {0.942618, -0.000000, -0.169928, -0.000000, 1.003960, -0.000000, 0.236989, -0.000000, 1.000000}, + {0.923782, -0.000000, -0.147286, -0.000000, 0.975479, -0.000000, 0.201457, -0.000000, 1.000000}, + {0.907602, -0.000000, -0.125247, -0.000000, 0.950244, -0.000000, 0.168914, -0.000000, 1.000000}, + {0.890855, -0.000000, -0.103546, -0.000000, 0.928926, -0.000000, 0.139068, -0.000000, 1.000000}, + {0.878108, -0.000000, -0.081136, -0.000000, 0.910830, -0.000000, 0.110215, -0.000000, 1.000000}, + {0.869703, -0.000000, -0.059410, -0.000000, 0.894226, -0.000000, 0.081583, -0.000000, 1.000000}, + {0.864859, -0.000000, -0.038515, -0.000000, 0.880408, -0.000000, 0.053267, -0.000000, 1.000000}, + {0.861328, -0.000000, -0.019155, -0.000000, 0.868300, -0.000000, 0.026207, -0.000000, 1.000000}, + {0.857123, -0.000000, 0.000198, -0.000000, 0.857174, -0.000000, 0.000008, -0.000000, 1.000000}, + {499.198547, -0.000000, -1.133124, -0.000000, 1142.750610, -0.000000, 565.655518, -0.000000, 1.000000}, + {499.198547, -0.000000, -1.133124, -0.000000, 1142.750610, -0.000000, 565.655518, -0.000000, 1.000000}, + {495.193665, -0.000000, -1.133123, -0.000000, 1133.890625, -0.000000, 561.118347, -0.000000, 1.000000}, + {220.530960, -0.000000, -1.133098, -0.000000, 503.506500, -0.000000, 249.890884, -0.000000, 1.000000}, + {124.351082, -0.000000, -1.133031, -0.000000, 282.611023, -0.000000, 140.903992, -0.000000, 1.000000}, + {79.373192, -0.000000, -1.132888, -0.000000, 181.277954, -0.000000, 89.938644, -0.000000, 1.000000}, + {55.114239, -0.000000, -1.132630, -0.000000, 125.871094, -0.000000, 62.449364, -0.000000, 1.000000}, + {40.487885, -0.000000, -1.132206, -0.000000, 92.458313, -0.000000, 45.875217, -0.000000, 1.000000}, + {30.987593, -0.000000, -1.131555, -0.000000, 70.753319, -0.000000, 35.109222, -0.000000, 1.000000}, + {24.475843, -0.000000, -1.130616, -0.000000, 55.873253, -0.000000, 27.729467, -0.000000, 1.000000}, + {19.812593, -0.000000, -1.129313, -0.000000, 45.222126, -0.000000, 22.444181, -0.000000, 1.000000}, + {16.364174, -0.000000, -1.127567, -0.000000, 37.335171, -0.000000, 18.535343, -0.000000, 1.000000}, + {13.738152, -0.000000, -1.125292, -0.000000, 31.329901, -0.000000, 15.558189, -0.000000, 1.000000}, + {11.692895, -0.000000, -1.122363, -0.000000, 26.650005, -0.000000, 13.238934, -0.000000, 1.000000}, + {10.068810, -0.000000, -1.118341, -0.000000, 22.928526, -0.000000, 11.396638, -0.000000, 1.000000}, + {8.755841, -0.000000, -1.109305, -0.000000, 19.909277, -0.000000, 9.906425, -0.000000, 1.000000}, + {7.678919, -0.000000, -1.101251, -0.000000, 17.434750, -0.000000, 8.683300, -0.000000, 1.000000}, + {6.785978, -0.000000, -1.093312, -0.000000, 15.380631, -0.000000, 7.668364, -0.000000, 1.000000}, + {6.037260, -0.000000, -1.083973, -0.000000, 13.655503, -0.000000, 6.816360, -0.000000, 1.000000}, + {5.403927, -0.000000, -1.074632, -0.000000, 12.193567, -0.000000, 6.094520, -0.000000, 1.000000}, + {4.863304, -0.000000, -1.060226, -0.000000, 10.935308, -0.000000, 5.476997, -0.000000, 1.000000}, + {4.398553, -0.000000, -1.048059, -0.000000, 9.852291, -0.000000, 4.944738, -0.000000, 1.000000}, + {3.998689, -0.000000, -1.033376, -0.000000, 8.908811, -0.000000, 4.485063, -0.000000, 1.000000}, + {3.649364, -0.000000, -1.015714, -0.000000, 8.081111, -0.000000, 4.081708, -0.000000, 1.000000}, + {3.344975, -0.000000, -0.998487, -0.000000, 7.351129, -0.000000, 3.728147, -0.000000, 1.000000}, + {3.083215, -0.000000, -0.979162, -0.000000, 6.700023, -0.000000, 3.421241, -0.000000, 1.000000}, + {2.853763, -0.000000, -0.958452, -0.000000, 6.119757, -0.000000, 3.149657, -0.000000, 1.000000}, + {2.648021, -0.000000, -0.935120, -0.000000, 5.599844, -0.000000, 2.903464, -0.000000, 1.000000}, + {2.472942, -0.000000, -0.912632, -0.000000, 5.128753, -0.000000, 2.689534, -0.000000, 1.000000}, + {2.316902, -0.000000, -0.888726, -0.000000, 4.706252, -0.000000, 2.495873, -0.000000, 1.000000}, + {2.182334, -0.000000, -0.861453, -0.000000, 4.322686, -0.000000, 2.324605, -0.000000, 1.000000}, + {2.059919, -0.000000, -0.835774, -0.000000, 3.978354, -0.000000, 2.164635, -0.000000, 1.000000}, + {1.954855, -0.000000, -0.810190, -0.000000, 3.667906, -0.000000, 2.022531, -0.000000, 1.000000}, + {1.855981, -0.000000, -0.783856, -0.000000, 3.393180, -0.000000, 1.886838, -0.000000, 1.000000}, + {1.771806, -0.000000, -0.757426, -0.000000, 3.144650, -0.000000, 1.766004, -0.000000, 1.000000}, + {1.697741, -0.000000, -0.730885, -0.000000, 2.920450, -0.000000, 1.654005, -0.000000, 1.000000}, + {1.632465, -0.000000, -0.705990, -0.000000, 2.718796, -0.000000, 1.551813, -0.000000, 1.000000}, + {1.571256, -0.000000, -0.680496, -0.000000, 2.537086, -0.000000, 1.452953, -0.000000, 1.000000}, + {1.515108, -0.000000, -0.653885, -0.000000, 2.369325, -0.000000, 1.358737, -0.000000, 1.000000}, + {1.459504, -0.000000, -0.623360, -0.000000, 2.210400, -0.000000, 1.263101, -0.000000, 1.000000}, + {1.405635, -0.000000, -0.590504, -0.000000, 2.062133, -0.000000, 1.168306, -0.000000, 1.000000}, + {1.359547, -0.000000, -0.558369, -0.000000, 1.928148, -0.000000, 1.081079, -0.000000, 1.000000}, + {1.315915, -0.000000, -0.526888, -0.000000, 1.808092, -0.000000, 0.998234, -0.000000, 1.000000}, + {1.272416, -0.000000, -0.495979, -0.000000, 1.702437, -0.000000, 0.916954, -0.000000, 1.000000}, + {1.235574, -0.000000, -0.465317, -0.000000, 1.607036, -0.000000, 0.842566, -0.000000, 1.000000}, + {1.199073, -0.000000, -0.435563, -0.000000, 1.520862, -0.000000, 0.771151, -0.000000, 1.000000}, + {1.166111, -0.000000, -0.406927, -0.000000, 1.443245, -0.000000, 0.704289, -0.000000, 1.000000}, + {1.140453, -0.000000, -0.379219, -0.000000, 1.374699, -0.000000, 0.644617, -0.000000, 1.000000}, + {1.110763, -0.000000, -0.352530, -0.000000, 1.314012, -0.000000, 0.584363, -0.000000, 1.000000}, + {1.083389, -0.000000, -0.326091, -0.000000, 1.257777, -0.000000, 0.527193, -0.000000, 1.000000}, + {1.058973, -0.000000, -0.301090, -0.000000, 1.208417, -0.000000, 0.474518, -0.000000, 1.000000}, + {1.034218, -0.000000, -0.274873, -0.000000, 1.161656, -0.000000, 0.422728, -0.000000, 1.000000}, + {1.010618, -0.000000, -0.248928, -0.000000, 1.117511, -0.000000, 0.373949, -0.000000, 1.000000}, + {0.986232, -0.000000, -0.222285, -0.000000, 1.077184, -0.000000, 0.326582, -0.000000, 1.000000}, + {0.962839, -0.000000, -0.196978, -0.000000, 1.040122, -0.000000, 0.282526, -0.000000, 1.000000}, + {0.941962, -0.000000, -0.173164, -0.000000, 1.006604, -0.000000, 0.242452, -0.000000, 1.000000}, + {0.922943, -0.000000, -0.149257, -0.000000, 0.976292, -0.000000, 0.205411, -0.000000, 1.000000}, + {0.905540, -0.000000, -0.126989, -0.000000, 0.950461, -0.000000, 0.171749, -0.000000, 1.000000}, + {0.888568, -0.000000, -0.105202, -0.000000, 0.928553, -0.000000, 0.141550, -0.000000, 1.000000}, + {0.875908, -0.000000, -0.083692, -0.000000, 0.909612, -0.000000, 0.112693, -0.000000, 1.000000}, + {0.867307, -0.000000, -0.061342, -0.000000, 0.893228, -0.000000, 0.083286, -0.000000, 1.000000}, + {0.862479, -0.000000, -0.039478, -0.000000, 0.878841, -0.000000, 0.054419, -0.000000, 1.000000}, + {0.858952, -0.000000, -0.018690, -0.000000, 0.866345, -0.000000, 0.026407, -0.000000, 1.000000}, + {0.854783, -0.000000, 0.000687, -0.000000, 0.854842, -0.000000, -0.000233, -0.000000, 1.000000}, + {497.740356, -0.000000, -1.191737, -0.000000, 1212.297485, -0.000000, 593.176758, -0.000000, 1.000000}, + {497.740356, -0.000000, -1.191737, -0.000000, 1212.297485, -0.000000, 593.176758, -0.000000, 1.000000}, + {495.967773, -0.000000, -1.191737, -0.000000, 1201.587646, -0.000000, 591.064636, -0.000000, 1.000000}, + {220.402115, -0.000000, -1.191710, -0.000000, 533.582153, -0.000000, 262.667023, -0.000000, 1.000000}, + {124.037041, -0.000000, -1.191629, -0.000000, 300.258667, -0.000000, 147.819244, -0.000000, 1.000000}, + {79.367973, -0.000000, -1.191465, -0.000000, 192.087326, -0.000000, 94.584778, -0.000000, 1.000000}, + {55.114235, -0.000000, -1.191163, -0.000000, 133.370956, -0.000000, 65.679634, -0.000000, 1.000000}, + {40.482887, -0.000000, -1.190670, -0.000000, 97.960243, -0.000000, 48.241943, -0.000000, 1.000000}, + {30.985254, -0.000000, -1.189914, -0.000000, 74.966965, -0.000000, 36.922112, -0.000000, 1.000000}, + {24.470310, -0.000000, -1.188821, -0.000000, 59.198898, -0.000000, 29.156729, -0.000000, 1.000000}, + {19.810440, -0.000000, -1.187304, -0.000000, 47.906578, -0.000000, 23.602030, -0.000000, 1.000000}, + {16.358372, -0.000000, -1.185274, -0.000000, 39.545647, -0.000000, 19.486433, -0.000000, 1.000000}, + {13.731361, -0.000000, -1.182628, -0.000000, 33.179028, -0.000000, 16.353985, -0.000000, 1.000000}, + {11.685279, -0.000000, -1.179202, -0.000000, 28.214518, -0.000000, 13.913551, -0.000000, 1.000000}, + {10.060629, -0.000000, -1.174106, -0.000000, 24.266153, -0.000000, 11.974962, -0.000000, 1.000000}, + {8.745026, -0.000000, -1.163552, -0.000000, 21.059242, -0.000000, 10.404303, -0.000000, 1.000000}, + {7.666819, -0.000000, -1.154777, -0.000000, 18.433811, -0.000000, 9.116149, -0.000000, 1.000000}, + {6.772953, -0.000000, -1.146793, -0.000000, 16.256334, -0.000000, 8.047375, -0.000000, 1.000000}, + {6.023073, -0.000000, -1.136482, -0.000000, 14.424652, -0.000000, 7.149531, -0.000000, 1.000000}, + {5.389208, -0.000000, -1.124666, -0.000000, 12.869657, -0.000000, 6.389346, -0.000000, 1.000000}, + {4.847566, -0.000000, -1.109110, -0.000000, 11.532449, -0.000000, 5.738188, -0.000000, 1.000000}, + {4.384129, -0.000000, -1.095927, -0.000000, 10.382030, -0.000000, 5.179485, -0.000000, 1.000000}, + {3.981435, -0.000000, -1.079033, -0.000000, 9.378829, -0.000000, 4.692119, -0.000000, 1.000000}, + {3.632331, -0.000000, -1.059646, -0.000000, 8.499527, -0.000000, 4.267574, -0.000000, 1.000000}, + {3.330570, -0.000000, -1.040766, -0.000000, 7.720337, -0.000000, 3.898030, -0.000000, 1.000000}, + {3.072052, -0.000000, -1.020092, -0.000000, 7.025834, -0.000000, 3.578377, -0.000000, 1.000000}, + {2.836320, -0.000000, -0.996664, -0.000000, 6.410950, -0.000000, 3.284364, -0.000000, 1.000000}, + {2.636429, -0.000000, -0.970977, -0.000000, 5.852798, -0.000000, 3.031443, -0.000000, 1.000000}, + {2.461024, -0.000000, -0.946995, -0.000000, 5.351264, -0.000000, 2.804762, -0.000000, 1.000000}, + {2.309566, -0.000000, -0.920260, -0.000000, 4.895450, -0.000000, 2.605106, -0.000000, 1.000000}, + {2.171193, -0.000000, -0.891770, -0.000000, 4.492403, -0.000000, 2.419443, -0.000000, 1.000000}, + {2.046365, -0.000000, -0.862975, -0.000000, 4.126715, -0.000000, 2.247149, -0.000000, 1.000000}, + {1.940203, -0.000000, -0.835377, -0.000000, 3.796427, -0.000000, 2.095363, -0.000000, 1.000000}, + {1.847487, -0.000000, -0.807038, -0.000000, 3.501757, -0.000000, 1.957793, -0.000000, 1.000000}, + {1.764791, -0.000000, -0.777984, -0.000000, 3.236122, -0.000000, 1.830755, -0.000000, 1.000000}, + {1.689787, -0.000000, -0.749577, -0.000000, 2.998445, -0.000000, 1.711617, -0.000000, 1.000000}, + {1.623467, -0.000000, -0.722160, -0.000000, 2.787138, -0.000000, 1.601701, -0.000000, 1.000000}, + {1.564476, -0.000000, -0.695601, -0.000000, 2.593500, -0.000000, 1.499691, -0.000000, 1.000000}, + {1.508963, -0.000000, -0.667965, -0.000000, 2.419844, -0.000000, 1.400717, -0.000000, 1.000000}, + {1.456745, -0.000000, -0.639187, -0.000000, 2.260225, -0.000000, 1.304981, -0.000000, 1.000000}, + {1.404346, -0.000000, -0.606291, -0.000000, 2.107956, -0.000000, 1.207875, -0.000000, 1.000000}, + {1.354443, -0.000000, -0.572479, -0.000000, 1.967472, -0.000000, 1.113634, -0.000000, 1.000000}, + {1.312539, -0.000000, -0.539868, -0.000000, 1.840691, -0.000000, 1.028078, -0.000000, 1.000000}, + {1.271663, -0.000000, -0.507526, -0.000000, 1.728781, -0.000000, 0.944375, -0.000000, 1.000000}, + {1.231956, -0.000000, -0.475865, -0.000000, 1.629488, -0.000000, 0.865228, -0.000000, 1.000000}, + {1.197937, -0.000000, -0.444798, -0.000000, 1.540237, -0.000000, 0.791888, -0.000000, 1.000000}, + {1.163655, -0.000000, -0.415022, -0.000000, 1.458943, -0.000000, 0.721975, -0.000000, 1.000000}, + {1.135947, -0.000000, -0.385953, -0.000000, 1.388032, -0.000000, 0.658261, -0.000000, 1.000000}, + {1.108306, -0.000000, -0.358322, -0.000000, 1.324020, -0.000000, 0.597250, -0.000000, 1.000000}, + {1.080856, -0.000000, -0.331377, -0.000000, 1.266384, -0.000000, 0.538634, -0.000000, 1.000000}, + {1.055387, -0.000000, -0.304981, -0.000000, 1.213831, -0.000000, 0.483240, -0.000000, 1.000000}, + {1.031967, -0.000000, -0.279702, -0.000000, 1.168211, -0.000000, 0.432009, -0.000000, 1.000000}, + {1.011454, -0.000000, -0.253981, -0.000000, 1.123698, -0.000000, 0.383715, -0.000000, 1.000000}, + {0.986373, -0.000000, -0.227557, -0.000000, 1.082180, -0.000000, 0.335005, -0.000000, 1.000000}, + {0.962047, -0.000000, -0.201322, -0.000000, 1.044015, -0.000000, 0.289192, -0.000000, 1.000000}, + {0.941474, -0.000000, -0.175898, -0.000000, 1.008716, -0.000000, 0.247600, -0.000000, 1.000000}, + {0.920469, -0.000000, -0.152058, -0.000000, 0.977028, -0.000000, 0.209385, -0.000000, 1.000000}, + {0.903940, -0.000000, -0.128562, -0.000000, 0.950335, -0.000000, 0.174772, -0.000000, 1.000000}, + {0.886939, -0.000000, -0.106209, -0.000000, 0.927499, -0.000000, 0.143497, -0.000000, 1.000000}, + {0.873628, -0.000000, -0.084672, -0.000000, 0.908543, -0.000000, 0.114456, -0.000000, 1.000000}, + {0.864831, -0.000000, -0.063288, -0.000000, 0.891755, -0.000000, 0.085164, -0.000000, 1.000000}, + {0.859767, -0.000000, -0.041204, -0.000000, 0.877256, -0.000000, 0.055889, -0.000000, 1.000000}, + {0.856654, -0.000000, -0.019310, -0.000000, 0.864405, -0.000000, 0.026910, -0.000000, 1.000000}, + {0.852336, -0.000000, 0.001322, -0.000000, 0.852461, -0.000000, -0.000438, -0.000000, 1.000000}, + {499.753876, -0.000000, -1.253942, -0.000000, 1287.089722, -0.000000, 626.664734, -0.000000, 1.000000}, + {499.753876, -0.000000, -1.253942, -0.000000, 1287.089722, -0.000000, 626.664734, -0.000000, 1.000000}, + {496.028778, -0.000000, -1.253944, -0.000000, 1277.157959, -0.000000, 621.993774, -0.000000, 1.000000}, + {220.533188, -0.000000, -1.253909, -0.000000, 567.170044, -0.000000, 276.540680, -0.000000, 1.000000}, + {123.984047, -0.000000, -1.253817, -0.000000, 319.092773, -0.000000, 155.469025, -0.000000, 1.000000}, + {79.369270, -0.000000, -1.253624, -0.000000, 204.112549, -0.000000, 99.522591, -0.000000, 1.000000}, + {55.111843, -0.000000, -1.253274, -0.000000, 141.740967, -0.000000, 69.104866, -0.000000, 1.000000}, + {40.476086, -0.000000, -1.252697, -0.000000, 104.107445, -0.000000, 50.751129, -0.000000, 1.000000}, + {30.984922, -0.000000, -1.251819, -0.000000, 79.662781, -0.000000, 38.848240, -0.000000, 1.000000}, + {24.465958, -0.000000, -1.250546, -0.000000, 62.903252, -0.000000, 30.672558, -0.000000, 1.000000}, + {19.804312, -0.000000, -1.248780, -0.000000, 50.899647, -0.000000, 24.825474, -0.000000, 1.000000}, + {16.352213, -0.000000, -1.246419, -0.000000, 42.008663, -0.000000, 20.494875, -0.000000, 1.000000}, + {13.723763, -0.000000, -1.243331, -0.000000, 35.237221, -0.000000, 17.196903, -0.000000, 1.000000}, + {11.676961, -0.000000, -1.239298, -0.000000, 29.958258, -0.000000, 14.627940, -0.000000, 1.000000}, + {10.049492, -0.000000, -1.232132, -0.000000, 25.752495, -0.000000, 12.584373, -0.000000, 1.000000}, + {8.731993, -0.000000, -1.221280, -0.000000, 22.339643, -0.000000, 10.929126, -0.000000, 1.000000}, + {7.652759, -0.000000, -1.211831, -0.000000, 19.544865, -0.000000, 9.572192, -0.000000, 1.000000}, + {6.758174, -0.000000, -1.202806, -0.000000, 17.227139, -0.000000, 8.446236, -0.000000, 1.000000}, + {6.007354, -0.000000, -1.191387, -0.000000, 15.277209, -0.000000, 7.500062, -0.000000, 1.000000}, + {5.372413, -0.000000, -1.176719, -0.000000, 13.616632, -0.000000, 6.698209, -0.000000, 1.000000}, + {4.830769, -0.000000, -1.161033, -0.000000, 12.195012, -0.000000, 6.012751, -0.000000, 1.000000}, + {4.365128, -0.000000, -1.145102, -0.000000, 10.967047, -0.000000, 5.421536, -0.000000, 1.000000}, + {3.964192, -0.000000, -1.126775, -0.000000, 9.896423, -0.000000, 4.910280, -0.000000, 1.000000}, + {3.614795, -0.000000, -1.105273, -0.000000, 8.956612, -0.000000, 4.462464, -0.000000, 1.000000}, + {3.316762, -0.000000, -1.083889, -0.000000, 8.121175, -0.000000, 4.077182, -0.000000, 1.000000}, + {3.049908, -0.000000, -1.061586, -0.000000, 7.388329, -0.000000, 3.730012, -0.000000, 1.000000}, + {2.822119, -0.000000, -1.035518, -0.000000, 6.724327, -0.000000, 3.429412, -0.000000, 1.000000}, + {2.622464, -0.000000, -1.008090, -0.000000, 6.127764, -0.000000, 3.161820, -0.000000, 1.000000}, + {2.451163, -0.000000, -0.981888, -0.000000, 5.589432, -0.000000, 2.927490, -0.000000, 1.000000}, + {2.296729, -0.000000, -0.952336, -0.000000, 5.104727, -0.000000, 2.712390, -0.000000, 1.000000}, + {2.155762, -0.000000, -0.921598, -0.000000, 4.675928, -0.000000, 2.512262, -0.000000, 1.000000}, + {2.036743, -0.000000, -0.890929, -0.000000, 4.283887, -0.000000, 2.336522, -0.000000, 1.000000}, + {1.932510, -0.000000, -0.860475, -0.000000, 3.929064, -0.000000, 2.177492, -0.000000, 1.000000}, + {1.839267, -0.000000, -0.829707, -0.000000, 3.613852, -0.000000, 2.030046, -0.000000, 1.000000}, + {1.757306, -0.000000, -0.799019, -0.000000, 3.332942, -0.000000, 1.896472, -0.000000, 1.000000}, + {1.682471, -0.000000, -0.767880, -0.000000, 3.080793, -0.000000, 1.769688, -0.000000, 1.000000}, + {1.616012, -0.000000, -0.738321, -0.000000, 2.854067, -0.000000, 1.652668, -0.000000, 1.000000}, + {1.556975, -0.000000, -0.710194, -0.000000, 2.652766, -0.000000, 1.545087, -0.000000, 1.000000}, + {1.502156, -0.000000, -0.680905, -0.000000, 2.469531, -0.000000, 1.441944, -0.000000, 1.000000}, + {1.451757, -0.000000, -0.652191, -0.000000, 2.305683, -0.000000, 1.343244, -0.000000, 1.000000}, + {1.403035, -0.000000, -0.621362, -0.000000, 2.153359, -0.000000, 1.247102, -0.000000, 1.000000}, + {1.353299, -0.000000, -0.586336, -0.000000, 2.007066, -0.000000, 1.148998, -0.000000, 1.000000}, + {1.307415, -0.000000, -0.552367, -0.000000, 1.875375, -0.000000, 1.055520, -0.000000, 1.000000}, + {1.268839, -0.000000, -0.519201, -0.000000, 1.757577, -0.000000, 0.971338, -0.000000, 1.000000}, + {1.231022, -0.000000, -0.485960, -0.000000, 1.652990, -0.000000, 0.889203, -0.000000, 1.000000}, + {1.195541, -0.000000, -0.454077, -0.000000, 1.560240, -0.000000, 0.812061, -0.000000, 1.000000}, + {1.161529, -0.000000, -0.422868, -0.000000, 1.476693, -0.000000, 0.739344, -0.000000, 1.000000}, + {1.129743, -0.000000, -0.392830, -0.000000, 1.401400, -0.000000, 0.670055, -0.000000, 1.000000}, + {1.105266, -0.000000, -0.363897, -0.000000, 1.334618, -0.000000, 0.608914, -0.000000, 1.000000}, + {1.077838, -0.000000, -0.336141, -0.000000, 1.274864, -0.000000, 0.548889, -0.000000, 1.000000}, + {1.052315, -0.000000, -0.309317, -0.000000, 1.220056, -0.000000, 0.492636, -0.000000, 1.000000}, + {1.029826, -0.000000, -0.282778, -0.000000, 1.171442, -0.000000, 0.440025, -0.000000, 1.000000}, + {1.009347, -0.000000, -0.257536, -0.000000, 1.128472, -0.000000, 0.391160, -0.000000, 1.000000}, + {0.986019, -0.000000, -0.232366, -0.000000, 1.087234, -0.000000, 0.342713, -0.000000, 1.000000}, + {0.963012, -0.000000, -0.205715, -0.000000, 1.047779, -0.000000, 0.296459, -0.000000, 1.000000}, + {0.940682, -0.000000, -0.179674, -0.000000, 1.011584, -0.000000, 0.253051, -0.000000, 1.000000}, + {0.919427, -0.000000, -0.154758, -0.000000, 0.978625, -0.000000, 0.213263, -0.000000, 1.000000}, + {0.902586, -0.000000, -0.130710, -0.000000, 0.950182, -0.000000, 0.177850, -0.000000, 1.000000}, + {0.885406, -0.000000, -0.107393, -0.000000, 0.926769, -0.000000, 0.145696, -0.000000, 1.000000}, + {0.871587, -0.000000, -0.085046, -0.000000, 0.907180, -0.000000, 0.115747, -0.000000, 1.000000}, + {0.862558, -0.000000, -0.063744, -0.000000, 0.890073, -0.000000, 0.086239, -0.000000, 1.000000}, + {0.857297, -0.000000, -0.042531, -0.000000, 0.875385, -0.000000, 0.057043, -0.000000, 1.000000}, + {0.854008, -0.000000, -0.020869, -0.000000, 0.862320, -0.000000, 0.028007, -0.000000, 1.000000}, + {0.849945, -0.000000, 0.000879, -0.000000, 0.850067, -0.000000, -0.000316, -0.000000, 1.000000}, + {498.764313, -0.000000, -1.320163, -0.000000, 1373.378540, -0.000000, 658.451599, -0.000000, 1.000000}, + {498.764313, -0.000000, -1.320163, -0.000000, 1373.378540, -0.000000, 658.451599, -0.000000, 1.000000}, + {496.446625, -0.000000, -1.320164, -0.000000, 1360.179932, -0.000000, 655.392273, -0.000000, 1.000000}, + {220.485596, -0.000000, -1.320125, -0.000000, 604.791382, -0.000000, 291.081512, -0.000000, 1.000000}, + {124.026947, -0.000000, -1.320016, -0.000000, 340.108673, -0.000000, 163.735397, -0.000000, 1.000000}, + {79.428589, -0.000000, -1.319792, -0.000000, 217.682114, -0.000000, 104.858566, -0.000000, 1.000000}, + {55.094601, -0.000000, -1.319384, -0.000000, 151.154099, -0.000000, 72.731087, -0.000000, 1.000000}, + {40.476280, -0.000000, -1.318711, -0.000000, 110.993645, -0.000000, 53.431137, -0.000000, 1.000000}, + {30.973503, -0.000000, -1.317686, -0.000000, 84.935791, -0.000000, 40.884266, -0.000000, 1.000000}, + {24.461092, -0.000000, -1.316200, -0.000000, 67.053787, -0.000000, 32.285267, -0.000000, 1.000000}, + {19.798025, -0.000000, -1.314142, -0.000000, 54.248508, -0.000000, 26.127316, -0.000000, 1.000000}, + {16.344543, -0.000000, -1.311384, -0.000000, 44.766365, -0.000000, 21.565979, -0.000000, 1.000000}, + {13.715401, -0.000000, -1.307778, -0.000000, 37.540558, -0.000000, 18.092642, -0.000000, 1.000000}, + {11.667095, -0.000000, -1.302977, -0.000000, 31.907068, -0.000000, 15.385793, -0.000000, 1.000000}, + {10.036300, -0.000000, -1.292651, -0.000000, 27.406919, -0.000000, 13.229581, -0.000000, 1.000000}, + {8.717825, -0.000000, -1.282903, -0.000000, 23.768972, -0.000000, 11.485295, -0.000000, 1.000000}, + {7.636909, -0.000000, -1.272602, -0.000000, 20.785141, -0.000000, 10.054101, -0.000000, 1.000000}, + {6.741018, -0.000000, -1.261386, -0.000000, 18.307858, -0.000000, 8.866672, -0.000000, 1.000000}, + {5.989860, -0.000000, -1.248665, -0.000000, 16.223476, -0.000000, 7.869553, -0.000000, 1.000000}, + {5.353560, -0.000000, -1.232226, -0.000000, 14.447929, -0.000000, 7.023051, -0.000000, 1.000000}, + {4.812235, -0.000000, -1.215270, -0.000000, 12.926739, -0.000000, 6.301147, -0.000000, 1.000000}, + {4.345270, -0.000000, -1.196644, -0.000000, 11.613120, -0.000000, 5.676373, -0.000000, 1.000000}, + {3.943053, -0.000000, -1.176316, -0.000000, 10.467074, -0.000000, 5.135668, -0.000000, 1.000000}, + {3.597323, -0.000000, -1.152379, -0.000000, 9.457210, -0.000000, 4.668163, -0.000000, 1.000000}, + {3.298333, -0.000000, -1.129210, -0.000000, 8.564156, -0.000000, 4.260488, -0.000000, 1.000000}, + {3.033204, -0.000000, -1.104019, -0.000000, 7.774998, -0.000000, 3.895550, -0.000000, 1.000000}, + {2.804857, -0.000000, -1.074878, -0.000000, 7.064775, -0.000000, 3.577148, -0.000000, 1.000000}, + {2.610853, -0.000000, -1.045896, -0.000000, 6.421424, -0.000000, 3.301699, -0.000000, 1.000000}, + {2.430077, -0.000000, -1.016253, -0.000000, 5.852787, -0.000000, 3.041409, -0.000000, 1.000000}, + {2.278789, -0.000000, -0.985085, -0.000000, 5.334065, -0.000000, 2.816983, -0.000000, 1.000000}, + {2.145781, -0.000000, -0.951537, -0.000000, 4.865364, -0.000000, 2.614515, -0.000000, 1.000000}, + {2.028583, -0.000000, -0.918188, -0.000000, 4.447055, -0.000000, 2.430435, -0.000000, 1.000000}, + {1.920310, -0.000000, -0.885812, -0.000000, 4.072713, -0.000000, 2.256396, -0.000000, 1.000000}, + {1.827242, -0.000000, -0.852252, -0.000000, 3.734781, -0.000000, 2.100304, -0.000000, 1.000000}, + {1.741410, -0.000000, -0.819354, -0.000000, 3.436574, -0.000000, 1.953809, -0.000000, 1.000000}, + {1.667199, -0.000000, -0.785912, -0.000000, 3.169833, -0.000000, 1.820603, -0.000000, 1.000000}, + {1.600661, -0.000000, -0.754258, -0.000000, 2.929060, -0.000000, 1.697106, -0.000000, 1.000000}, + {1.541972, -0.000000, -0.723590, -0.000000, 2.714557, -0.000000, 1.582406, -0.000000, 1.000000}, + {1.490970, -0.000000, -0.693555, -0.000000, 2.522617, -0.000000, 1.478268, -0.000000, 1.000000}, + {1.442741, -0.000000, -0.663230, -0.000000, 2.348330, -0.000000, 1.377193, -0.000000, 1.000000}, + {1.398380, -0.000000, -0.632923, -0.000000, 2.193665, -0.000000, 1.281289, -0.000000, 1.000000}, + {1.352417, -0.000000, -0.600306, -0.000000, 2.049114, -0.000000, 1.184361, -0.000000, 1.000000}, + {1.306098, -0.000000, -0.564746, -0.000000, 1.911273, -0.000000, 1.086684, -0.000000, 1.000000}, + {1.263667, -0.000000, -0.530384, -0.000000, 1.787241, -0.000000, 0.995224, -0.000000, 1.000000}, + {1.227507, -0.000000, -0.496238, -0.000000, 1.677880, -0.000000, 0.911170, -0.000000, 1.000000}, + {1.192177, -0.000000, -0.463117, -0.000000, 1.580272, -0.000000, 0.831094, -0.000000, 1.000000}, + {1.159786, -0.000000, -0.430992, -0.000000, 1.493237, -0.000000, 0.756722, -0.000000, 1.000000}, + {1.127615, -0.000000, -0.399809, -0.000000, 1.415863, -0.000000, 0.685682, -0.000000, 1.000000}, + {1.101597, -0.000000, -0.369629, -0.000000, 1.345474, -0.000000, 0.620668, -0.000000, 1.000000}, + {1.074312, -0.000000, -0.340787, -0.000000, 1.283440, -0.000000, 0.558964, -0.000000, 1.000000}, + {1.048375, -0.000000, -0.313370, -0.000000, 1.227282, -0.000000, 0.500063, -0.000000, 1.000000}, + {1.025321, -0.000000, -0.286188, -0.000000, 1.176411, -0.000000, 0.446249, -0.000000, 1.000000}, + {1.004459, -0.000000, -0.259980, -0.000000, 1.131536, -0.000000, 0.396020, -0.000000, 1.000000}, + {0.984215, -0.000000, -0.235098, -0.000000, 1.090374, -0.000000, 0.348723, -0.000000, 1.000000}, + {0.962293, -0.000000, -0.209660, -0.000000, 1.050996, -0.000000, 0.302458, -0.000000, 1.000000}, + {0.939934, -0.000000, -0.183963, -0.000000, 1.014945, -0.000000, 0.258686, -0.000000, 1.000000}, + {0.919490, -0.000000, -0.157603, -0.000000, 0.980187, -0.000000, 0.217735, -0.000000, 1.000000}, + {0.900178, -0.000000, -0.133030, -0.000000, 0.950534, -0.000000, 0.181288, -0.000000, 1.000000}, + {0.884062, -0.000000, -0.109124, -0.000000, 0.926558, -0.000000, 0.147997, -0.000000, 1.000000}, + {0.869425, -0.000000, -0.085933, -0.000000, 0.905910, -0.000000, 0.117436, -0.000000, 1.000000}, + {0.860200, -0.000000, -0.063534, -0.000000, 0.888262, -0.000000, 0.087208, -0.000000, 1.000000}, + {0.854847, -0.000000, -0.042793, -0.000000, 0.873182, -0.000000, 0.057860, -0.000000, 1.000000}, + {0.851453, -0.000000, -0.021623, -0.000000, 0.859881, -0.000000, 0.028712, -0.000000, 1.000000}, + {0.847523, -0.000000, -0.000142, -0.000000, 0.847737, -0.000000, 0.000144, -0.000000, 1.000000}, + {499.946350, -0.000000, -1.390894, -0.000000, 1467.598511, -0.000000, 695.371582, -0.000000, 1.000000}, + {499.946350, -0.000000, -1.390894, -0.000000, 1467.598511, -0.000000, 695.371582, -0.000000, 1.000000}, + {496.076233, -0.000000, -1.390894, -0.000000, 1456.169800, -0.000000, 689.988953, -0.000000, 1.000000}, + {220.496719, -0.000000, -1.390848, -0.000000, 647.093567, -0.000000, 306.691040, -0.000000, 1.000000}, + {124.013779, -0.000000, -1.390722, -0.000000, 363.965607, -0.000000, 172.489548, -0.000000, 1.000000}, + {79.373199, -0.000000, -1.390458, -0.000000, 233.001343, -0.000000, 110.400490, -0.000000, 1.000000}, + {55.108978, -0.000000, -1.389980, -0.000000, 161.729828, -0.000000, 76.647385, -0.000000, 1.000000}, + {40.467999, -0.000000, -1.389193, -0.000000, 118.741165, -0.000000, 56.281498, -0.000000, 1.000000}, + {30.975763, -0.000000, -1.387995, -0.000000, 90.852692, -0.000000, 43.077286, -0.000000, 1.000000}, + {24.455482, -0.000000, -1.386258, -0.000000, 71.715958, -0.000000, 34.006439, -0.000000, 1.000000}, + {19.791021, -0.000000, -1.383852, -0.000000, 58.016361, -0.000000, 27.516304, -0.000000, 1.000000}, + {16.335751, -0.000000, -1.380629, -0.000000, 47.863483, -0.000000, 22.707855, -0.000000, 1.000000}, + {13.705017, -0.000000, -1.376399, -0.000000, 40.126877, -0.000000, 19.045937, -0.000000, 1.000000}, + {11.653750, -0.000000, -1.370543, -0.000000, 34.092148, -0.000000, 16.189638, -0.000000, 1.000000}, + {10.021158, -0.000000, -1.358667, -0.000000, 29.265823, -0.000000, 13.915085, -0.000000, 1.000000}, + {8.701030, -0.000000, -1.347819, -0.000000, 25.367838, -0.000000, 12.074658, -0.000000, 1.000000}, + {7.619580, -0.000000, -1.336861, -0.000000, 22.171335, -0.000000, 10.565630, -0.000000, 1.000000}, + {6.722030, -0.000000, -1.323397, -0.000000, 19.511784, -0.000000, 9.311698, -0.000000, 1.000000}, + {5.969267, -0.000000, -1.308124, -0.000000, 17.274567, -0.000000, 8.258295, -0.000000, 1.000000}, + {5.332428, -0.000000, -1.289965, -0.000000, 15.369953, -0.000000, 7.365280, -0.000000, 1.000000}, + {4.788707, -0.000000, -1.271456, -0.000000, 13.738621, -0.000000, 6.600627, -0.000000, 1.000000}, + {4.322216, -0.000000, -1.250397, -0.000000, 12.327078, -0.000000, 5.942193, -0.000000, 1.000000}, + {3.921430, -0.000000, -1.227581, -0.000000, 11.096258, -0.000000, 5.373594, -0.000000, 1.000000}, + {3.576837, -0.000000, -1.200790, -0.000000, 10.007510, -0.000000, 4.881275, -0.000000, 1.000000}, + {3.273181, -0.000000, -1.175546, -0.000000, 9.053289, -0.000000, 4.444415, -0.000000, 1.000000}, + {3.013334, -0.000000, -1.147349, -0.000000, 8.200176, -0.000000, 4.065929, -0.000000, 1.000000}, + {2.791491, -0.000000, -1.115724, -0.000000, 7.428865, -0.000000, 3.737948, -0.000000, 1.000000}, + {2.587043, -0.000000, -1.084444, -0.000000, 6.751217, -0.000000, 3.432292, -0.000000, 1.000000}, + {2.416821, -0.000000, -1.051544, -0.000000, 6.129459, -0.000000, 3.169965, -0.000000, 1.000000}, + {2.267782, -0.000000, -1.017314, -0.000000, 5.569518, -0.000000, 2.934841, -0.000000, 1.000000}, + {2.134773, -0.000000, -0.982051, -0.000000, 5.070411, -0.000000, 2.719155, -0.000000, 1.000000}, + {2.011730, -0.000000, -0.946156, -0.000000, 4.625893, -0.000000, 2.516692, -0.000000, 1.000000}, + {1.907606, -0.000000, -0.910265, -0.000000, 4.223953, -0.000000, 2.336645, -0.000000, 1.000000}, + {1.814633, -0.000000, -0.874876, -0.000000, 3.862807, -0.000000, 2.170789, -0.000000, 1.000000}, + {1.726175, -0.000000, -0.839464, -0.000000, 3.546830, -0.000000, 2.011889, -0.000000, 1.000000}, + {1.651998, -0.000000, -0.803765, -0.000000, 3.261043, -0.000000, 1.871454, -0.000000, 1.000000}, + {1.586171, -0.000000, -0.769456, -0.000000, 3.007546, -0.000000, 1.741142, -0.000000, 1.000000}, + {1.531422, -0.000000, -0.736866, -0.000000, 2.776947, -0.000000, 1.624824, -0.000000, 1.000000}, + {1.478677, -0.000000, -0.704933, -0.000000, 2.576596, -0.000000, 1.512335, -0.000000, 1.000000}, + {1.430226, -0.000000, -0.673526, -0.000000, 2.394740, -0.000000, 1.406849, -0.000000, 1.000000}, + {1.386441, -0.000000, -0.642238, -0.000000, 2.231730, -0.000000, 1.306790, -0.000000, 1.000000}, + {1.347700, -0.000000, -0.610335, -0.000000, 2.083120, -0.000000, 1.213711, -0.000000, 1.000000}, + {1.304647, -0.000000, -0.576954, -0.000000, 1.947658, -0.000000, 1.117770, -0.000000, 1.000000}, + {1.262713, -0.000000, -0.541312, -0.000000, 1.817316, -0.000000, 1.022935, -0.000000, 1.000000}, + {1.226210, -0.000000, -0.506275, -0.000000, 1.703293, -0.000000, 0.935409, -0.000000, 1.000000}, + {1.190476, -0.000000, -0.472115, -0.000000, 1.601141, -0.000000, 0.851909, -0.000000, 1.000000}, + {1.157802, -0.000000, -0.438939, -0.000000, 1.510821, -0.000000, 0.774189, -0.000000, 1.000000}, + {1.126094, -0.000000, -0.406711, -0.000000, 1.429830, -0.000000, 0.700163, -0.000000, 1.000000}, + {1.099165, -0.000000, -0.375645, -0.000000, 1.357510, -0.000000, 0.633428, -0.000000, 1.000000}, + {1.072272, -0.000000, -0.345376, -0.000000, 1.292333, -0.000000, 0.568595, -0.000000, 1.000000}, + {1.045140, -0.000000, -0.317129, -0.000000, 1.234337, -0.000000, 0.508251, -0.000000, 1.000000}, + {1.022077, -0.000000, -0.289678, -0.000000, 1.182703, -0.000000, 0.453208, -0.000000, 1.000000}, + {0.999451, -0.000000, -0.262616, -0.000000, 1.134882, -0.000000, 0.400832, -0.000000, 1.000000}, + {0.978826, -0.000000, -0.236418, -0.000000, 1.092171, -0.000000, 0.351856, -0.000000, 1.000000}, + {0.956364, -0.000000, -0.212182, -0.000000, 1.052354, -0.000000, 0.305863, -0.000000, 1.000000}, + {0.936124, -0.000000, -0.186767, -0.000000, 1.015153, -0.000000, 0.261983, -0.000000, 1.000000}, + {0.915224, -0.000000, -0.161611, -0.000000, 0.981272, -0.000000, 0.221219, -0.000000, 1.000000}, + {0.896723, -0.000000, -0.135741, -0.000000, 0.951082, -0.000000, 0.183870, -0.000000, 1.000000}, + {0.880615, -0.000000, -0.110802, -0.000000, 0.925929, -0.000000, 0.150061, -0.000000, 1.000000}, + {0.866110, -0.000000, -0.087549, -0.000000, 0.904866, -0.000000, 0.119470, -0.000000, 1.000000}, + {0.856847, -0.000000, -0.064229, -0.000000, 0.886618, -0.000000, 0.088534, -0.000000, 1.000000}, + {0.851917, -0.000000, -0.041981, -0.000000, 0.871051, -0.000000, 0.058068, -0.000000, 1.000000}, + {0.848660, -0.000000, -0.021244, -0.000000, 0.857396, -0.000000, 0.028805, -0.000000, 1.000000}, + {0.844679, -0.000000, -0.000023, -0.000000, 0.844858, -0.000000, 0.000067, -0.000000, 1.000000}, + {498.779419, -0.000000, -1.466705, -0.000000, 1575.844360, -0.000000, 731.558167, -0.000000, 1.000000}, + {498.779419, -0.000000, -1.466705, -0.000000, 1575.844360, -0.000000, 731.558167, -0.000000, 1.000000}, + {495.686005, -0.000000, -1.466705, -0.000000, 1563.839966, -0.000000, 727.024902, -0.000000, 1.000000}, + {220.507874, -0.000000, -1.466650, -0.000000, 694.803223, -0.000000, 323.422455, -0.000000, 1.000000}, + {123.952385, -0.000000, -1.466503, -0.000000, 390.826355, -0.000000, 181.792984, -0.000000, 1.000000}, + {79.377266, -0.000000, -1.466195, -0.000000, 249.967194, -0.000000, 116.420586, -0.000000, 1.000000}, + {55.099525, -0.000000, -1.465636, -0.000000, 173.619049, -0.000000, 80.810890, -0.000000, 1.000000}, + {40.470554, -0.000000, -1.464715, -0.000000, 127.491707, -0.000000, 59.352566, -0.000000, 1.000000}, + {30.965216, -0.000000, -1.463306, -0.000000, 97.532944, -0.000000, 45.409164, -0.000000, 1.000000}, + {24.454735, -0.000000, -1.461271, -0.000000, 76.994362, -0.000000, 35.857788, -0.000000, 1.000000}, + {19.782701, -0.000000, -1.458454, -0.000000, 62.267132, -0.000000, 29.002623, -0.000000, 1.000000}, + {16.324949, -0.000000, -1.454673, -0.000000, 51.357708, -0.000000, 23.928177, -0.000000, 1.000000}, + {13.692519, -0.000000, -1.449687, -0.000000, 43.045250, -0.000000, 20.063829, -0.000000, 1.000000}, + {11.640100, -0.000000, -1.442068, -0.000000, 36.549221, -0.000000, 17.049719, -0.000000, 1.000000}, + {10.004292, -0.000000, -1.428058, -0.000000, 31.351686, -0.000000, 14.646075, -0.000000, 1.000000}, + {8.681810, -0.000000, -1.416120, -0.000000, 27.161263, -0.000000, 12.701498, -0.000000, 1.000000}, + {7.598638, -0.000000, -1.404866, -0.000000, 23.729090, -0.000000, 11.107257, -0.000000, 1.000000}, + {6.699979, -0.000000, -1.389501, -0.000000, 20.864613, -0.000000, 9.782582, -0.000000, 1.000000}, + {5.945863, -0.000000, -1.371374, -0.000000, 18.451183, -0.000000, 8.669281, -0.000000, 1.000000}, + {5.308502, -0.000000, -1.351385, -0.000000, 16.401524, -0.000000, 7.725982, -0.000000, 1.000000}, + {4.763751, -0.000000, -1.329682, -0.000000, 14.640650, -0.000000, 6.917427, -0.000000, 1.000000}, + {4.298007, -0.000000, -1.307001, -0.000000, 13.120390, -0.000000, 6.223120, -0.000000, 1.000000}, + {3.899934, -0.000000, -1.280435, -0.000000, 11.787424, -0.000000, 5.626344, -0.000000, 1.000000}, + {3.549153, -0.000000, -1.251572, -0.000000, 10.620056, -0.000000, 5.097425, -0.000000, 1.000000}, + {3.253283, -0.000000, -1.223200, -0.000000, 9.583576, -0.000000, 4.646020, -0.000000, 1.000000}, + {2.996228, -0.000000, -1.191155, -0.000000, 8.656814, -0.000000, 4.249408, -0.000000, 1.000000}, + {2.765244, -0.000000, -1.158044, -0.000000, 7.837562, -0.000000, 3.888601, -0.000000, 1.000000}, + {2.571919, -0.000000, -1.122705, -0.000000, 7.094434, -0.000000, 3.579864, -0.000000, 1.000000}, + {2.403607, -0.000000, -1.087049, -0.000000, 6.424055, -0.000000, 3.304322, -0.000000, 1.000000}, + {2.252028, -0.000000, -1.049959, -0.000000, 5.824631, -0.000000, 3.050817, -0.000000, 1.000000}, + {2.116779, -0.000000, -1.011578, -0.000000, 5.289791, -0.000000, 2.819011, -0.000000, 1.000000}, + {1.993860, -0.000000, -0.973772, -0.000000, 4.816268, -0.000000, 2.603753, -0.000000, 1.000000}, + {1.890524, -0.000000, -0.934433, -0.000000, 4.387243, -0.000000, 2.412890, -0.000000, 1.000000}, + {1.798378, -0.000000, -0.897044, -0.000000, 4.001345, -0.000000, 2.238384, -0.000000, 1.000000}, + {1.715745, -0.000000, -0.858754, -0.000000, 3.656700, -0.000000, 2.076623, -0.000000, 1.000000}, + {1.642515, -0.000000, -0.821173, -0.000000, 3.353235, -0.000000, 1.928177, -0.000000, 1.000000}, + {1.575996, -0.000000, -0.784906, -0.000000, 3.086783, -0.000000, 1.790380, -0.000000, 1.000000}, + {1.517029, -0.000000, -0.749382, -0.000000, 2.844139, -0.000000, 1.662103, -0.000000, 1.000000}, + {1.463617, -0.000000, -0.715590, -0.000000, 2.629526, -0.000000, 1.543108, -0.000000, 1.000000}, + {1.419676, -0.000000, -0.682990, -0.000000, 2.440467, -0.000000, 1.436785, -0.000000, 1.000000}, + {1.375393, -0.000000, -0.650474, -0.000000, 2.270741, -0.000000, 1.332324, -0.000000, 1.000000}, + {1.335512, -0.000000, -0.618036, -0.000000, 2.118298, -0.000000, 1.234705, -0.000000, 1.000000}, + {1.299672, -0.000000, -0.585888, -0.000000, 1.978625, -0.000000, 1.143387, -0.000000, 1.000000}, + {1.260211, -0.000000, -0.552059, -0.000000, 1.850432, -0.000000, 1.048487, -0.000000, 1.000000}, + {1.220603, -0.000000, -0.516035, -0.000000, 1.730217, -0.000000, 0.955238, -0.000000, 1.000000}, + {1.187332, -0.000000, -0.481062, -0.000000, 1.622624, -0.000000, 0.870517, -0.000000, 1.000000}, + {1.154017, -0.000000, -0.446628, -0.000000, 1.528417, -0.000000, 0.790108, -0.000000, 1.000000}, + {1.123595, -0.000000, -0.413848, -0.000000, 1.444416, -0.000000, 0.715249, -0.000000, 1.000000}, + {1.093868, -0.000000, -0.381648, -0.000000, 1.369804, -0.000000, 0.643891, -0.000000, 1.000000}, + {1.069937, -0.000000, -0.350455, -0.000000, 1.302023, -0.000000, 0.579375, -0.000000, 1.000000}, + {1.042615, -0.000000, -0.321163, -0.000000, 1.241905, -0.000000, 0.517313, -0.000000, 1.000000}, + {1.020031, -0.000000, -0.292592, -0.000000, 1.187551, -0.000000, 0.460405, -0.000000, 1.000000}, + {0.996479, -0.000000, -0.265382, -0.000000, 1.139110, -0.000000, 0.406380, -0.000000, 1.000000}, + {0.975165, -0.000000, -0.238717, -0.000000, 1.094910, -0.000000, 0.356264, -0.000000, 1.000000}, + {0.953236, -0.000000, -0.212812, -0.000000, 1.053961, -0.000000, 0.308913, -0.000000, 1.000000}, + {0.931561, -0.000000, -0.188332, -0.000000, 1.015921, -0.000000, 0.264932, -0.000000, 1.000000}, + {0.911343, -0.000000, -0.163891, -0.000000, 0.980784, -0.000000, 0.223958, -0.000000, 1.000000}, + {0.893546, -0.000000, -0.139290, -0.000000, 0.950847, -0.000000, 0.186838, -0.000000, 1.000000}, + {0.876796, -0.000000, -0.113372, -0.000000, 0.924905, -0.000000, 0.152215, -0.000000, 1.000000}, + {0.862211, -0.000000, -0.089137, -0.000000, 0.903229, -0.000000, 0.120962, -0.000000, 1.000000}, + {0.853316, -0.000000, -0.065492, -0.000000, 0.884618, -0.000000, 0.089734, -0.000000, 1.000000}, + {0.848789, -0.000000, -0.042287, -0.000000, 0.868789, -0.000000, 0.058723, -0.000000, 1.000000}, + {0.845668, -0.000000, -0.020147, -0.000000, 0.854603, -0.000000, 0.028542, -0.000000, 1.000000}, + {0.841710, -0.000000, 0.000684, -0.000000, 0.841725, -0.000000, -0.000226, -0.000000, 1.000000}, + {500.563446, -0.000000, -1.548274, -0.000000, 1697.137573, -0.000000, 775.003479, -0.000000, 1.000000}, + {500.563446, -0.000000, -1.548274, -0.000000, 1697.137573, -0.000000, 775.003479, -0.000000, 1.000000}, + {495.507477, -0.000000, -1.548273, -0.000000, 1685.115112, -0.000000, 767.177795, -0.000000, 1.000000}, + {220.529938, -0.000000, -1.548211, -0.000000, 749.035522, -0.000000, 341.439911, -0.000000, 1.000000}, + {124.007294, -0.000000, -1.548038, -0.000000, 421.342133, -0.000000, 191.996704, -0.000000, 1.000000}, + {79.365158, -0.000000, -1.547674, -0.000000, 269.654449, -0.000000, 122.875969, -0.000000, 1.000000}, + {55.104710, -0.000000, -1.547015, -0.000000, 187.125687, -0.000000, 85.312332, -0.000000, 1.000000}, + {40.460781, -0.000000, -1.545932, -0.000000, 137.423080, -0.000000, 62.637676, -0.000000, 1.000000}, + {30.959267, -0.000000, -1.544278, -0.000000, 105.125816, -0.000000, 47.924221, -0.000000, 1.000000}, + {24.441511, -0.000000, -1.541885, -0.000000, 82.958992, -0.000000, 37.830250, -0.000000, 1.000000}, + {19.772507, -0.000000, -1.538568, -0.000000, 67.084435, -0.000000, 30.598278, -0.000000, 1.000000}, + {16.314167, -0.000000, -1.534121, -0.000000, 55.317017, -0.000000, 25.240301, -0.000000, 1.000000}, + {13.679079, -0.000000, -1.528198, -0.000000, 46.343460, -0.000000, 21.156521, -0.000000, 1.000000}, + {11.623078, -0.000000, -1.517027, -0.000000, 39.318115, -0.000000, 17.968763, -0.000000, 1.000000}, + {9.984684, -0.000000, -1.503865, -0.000000, 33.717480, -0.000000, 15.426950, -0.000000, 1.000000}, + {8.660229, -0.000000, -1.490569, -0.000000, 29.189663, -0.000000, 13.370610, -0.000000, 1.000000}, + {7.575959, -0.000000, -1.476789, -0.000000, 25.479780, -0.000000, 11.685358, -0.000000, 1.000000}, + {6.674681, -0.000000, -1.458910, -0.000000, 22.382269, -0.000000, 10.282349, -0.000000, 1.000000}, + {5.920040, -0.000000, -1.438482, -0.000000, 19.770836, -0.000000, 9.105390, -0.000000, 1.000000}, + {5.279105, -0.000000, -1.415795, -0.000000, 17.555033, -0.000000, 8.103386, -0.000000, 1.000000}, + {4.735237, -0.000000, -1.391090, -0.000000, 15.648655, -0.000000, 7.250249, -0.000000, 1.000000}, + {4.271001, -0.000000, -1.365578, -0.000000, 14.001099, -0.000000, 6.518698, -0.000000, 1.000000}, + {3.868648, -0.000000, -1.335251, -0.000000, 12.557265, -0.000000, 5.880911, -0.000000, 1.000000}, + {3.525434, -0.000000, -1.303971, -0.000000, 11.290165, -0.000000, 5.332313, -0.000000, 1.000000}, + {3.229289, -0.000000, -1.272056, -0.000000, 10.166988, -0.000000, 4.853722, -0.000000, 1.000000}, + {2.973827, -0.000000, -1.235813, -0.000000, 9.161206, -0.000000, 4.435764, -0.000000, 1.000000}, + {2.746283, -0.000000, -1.200691, -0.000000, 8.273100, -0.000000, 4.057812, -0.000000, 1.000000}, + {2.556337, -0.000000, -1.162222, -0.000000, 7.466950, -0.000000, 3.734700, -0.000000, 1.000000}, + {2.382043, -0.000000, -1.122336, -0.000000, 6.747432, -0.000000, 3.432638, -0.000000, 1.000000}, + {2.226896, -0.000000, -1.082357, -0.000000, 6.107476, -0.000000, 3.158011, -0.000000, 1.000000}, + {2.096946, -0.000000, -1.041597, -0.000000, 5.528396, -0.000000, 2.918667, -0.000000, 1.000000}, + {1.982116, -0.000000, -1.000798, -0.000000, 5.012418, -0.000000, 2.700050, -0.000000, 1.000000}, + {1.879899, -0.000000, -0.959059, -0.000000, 4.550194, -0.000000, 2.499915, -0.000000, 1.000000}, + {1.787986, -0.000000, -0.918254, -0.000000, 4.138990, -0.000000, 2.314356, -0.000000, 1.000000}, + {1.705297, -0.000000, -0.877931, -0.000000, 3.774493, -0.000000, 2.142460, -0.000000, 1.000000}, + {1.631421, -0.000000, -0.838081, -0.000000, 3.449144, -0.000000, 1.983954, -0.000000, 1.000000}, + {1.565757, -0.000000, -0.799313, -0.000000, 3.164006, -0.000000, 1.838494, -0.000000, 1.000000}, + {1.506439, -0.000000, -0.761872, -0.000000, 2.912416, -0.000000, 1.703796, -0.000000, 1.000000}, + {1.452227, -0.000000, -0.725833, -0.000000, 2.686754, -0.000000, 1.577052, -0.000000, 1.000000}, + {1.404321, -0.000000, -0.691368, -0.000000, 2.485752, -0.000000, 1.460704, -0.000000, 1.000000}, + {1.365700, -0.000000, -0.658189, -0.000000, 2.307966, -0.000000, 1.357509, -0.000000, 1.000000}, + {1.324478, -0.000000, -0.624469, -0.000000, 2.148238, -0.000000, 1.254797, -0.000000, 1.000000}, + {1.291061, -0.000000, -0.591961, -0.000000, 2.005686, -0.000000, 1.161994, -0.000000, 1.000000}, + {1.255292, -0.000000, -0.559582, -0.000000, 1.878051, -0.000000, 1.069687, -0.000000, 1.000000}, + {1.219139, -0.000000, -0.525663, -0.000000, 1.758132, -0.000000, 0.978317, -0.000000, 1.000000}, + {1.185876, -0.000000, -0.489692, -0.000000, 1.644717, -0.000000, 0.890671, -0.000000, 1.000000}, + {1.152226, -0.000000, -0.454516, -0.000000, 1.547585, -0.000000, 0.806953, -0.000000, 1.000000}, + {1.122477, -0.000000, -0.420693, -0.000000, 1.458925, -0.000000, 0.729850, -0.000000, 1.000000}, + {1.092114, -0.000000, -0.387833, -0.000000, 1.381962, -0.000000, 0.656223, -0.000000, 1.000000}, + {1.066724, -0.000000, -0.355955, -0.000000, 1.312587, -0.000000, 0.589727, -0.000000, 1.000000}, + {1.040686, -0.000000, -0.325059, -0.000000, 1.249859, -0.000000, 0.526006, -0.000000, 1.000000}, + {1.015343, -0.000000, -0.295967, -0.000000, 1.193424, -0.000000, 0.466438, -0.000000, 1.000000}, + {0.992501, -0.000000, -0.267983, -0.000000, 1.142624, -0.000000, 0.411551, -0.000000, 1.000000}, + {0.973475, -0.000000, -0.240555, -0.000000, 1.097839, -0.000000, 0.361304, -0.000000, 1.000000}, + {0.950296, -0.000000, -0.214383, -0.000000, 1.055521, -0.000000, 0.312720, -0.000000, 1.000000}, + {0.927910, -0.000000, -0.188892, -0.000000, 1.016122, -0.000000, 0.267196, -0.000000, 1.000000}, + {0.908641, -0.000000, -0.164437, -0.000000, 0.980853, -0.000000, 0.226398, -0.000000, 1.000000}, + {0.890903, -0.000000, -0.140640, -0.000000, 0.950224, -0.000000, 0.188913, -0.000000, 1.000000}, + {0.874486, -0.000000, -0.116753, -0.000000, 0.923639, -0.000000, 0.154579, -0.000000, 1.000000}, + {0.859532, -0.000000, -0.091214, -0.000000, 0.901489, -0.000000, 0.122706, -0.000000, 1.000000}, + {0.850227, -0.000000, -0.066830, -0.000000, 0.882625, -0.000000, 0.090953, -0.000000, 1.000000}, + {0.845351, -0.000000, -0.043435, -0.000000, 0.866192, -0.000000, 0.059751, -0.000000, 1.000000}, + {0.842480, -0.000000, -0.020437, -0.000000, 0.851819, -0.000000, 0.028900, -0.000000, 1.000000}, + {0.838473, -0.000000, 0.001596, -0.000000, 0.838548, -0.000000, -0.000636, -0.000000, 1.000000}, + {500.220978, -0.000000, -1.636395, -0.000000, 1838.045654, -0.000000, 818.563416, -0.000000, 1.000000}, + {500.220978, -0.000000, -1.636395, -0.000000, 1838.045654, -0.000000, 818.563416, -0.000000, 1.000000}, + {494.459290, -0.000000, -1.636392, -0.000000, 1827.407349, -0.000000, 809.127563, -0.000000, 1.000000}, + {220.431442, -0.000000, -1.636316, -0.000000, 811.041321, -0.000000, 360.718323, -0.000000, 1.000000}, + {124.029785, -0.000000, -1.636115, -0.000000, 456.058624, -0.000000, 202.961029, -0.000000, 1.000000}, + {79.353287, -0.000000, -1.635684, -0.000000, 291.885101, -0.000000, 129.850006, -0.000000, 1.000000}, + {55.093857, -0.000000, -1.634909, -0.000000, 202.601929, -0.000000, 90.150055, -0.000000, 1.000000}, + {40.459938, -0.000000, -1.633629, -0.000000, 148.759323, -0.000000, 66.200394, -0.000000, 1.000000}, + {30.951864, -0.000000, -1.631676, -0.000000, 113.779617, -0.000000, 50.638546, -0.000000, 1.000000}, + {24.434439, -0.000000, -1.628853, -0.000000, 89.769363, -0.000000, 39.970615, -0.000000, 1.000000}, + {19.761797, -0.000000, -1.624943, -0.000000, 72.577400, -0.000000, 32.320358, -0.000000, 1.000000}, + {16.300028, -0.000000, -1.619683, -0.000000, 59.824959, -0.000000, 26.651455, -0.000000, 1.000000}, + {13.663046, -0.000000, -1.612532, -0.000000, 50.098763, -0.000000, 22.331676, -0.000000, 1.000000}, + {11.601674, -0.000000, -1.598479, -0.000000, 42.469627, -0.000000, 18.953203, -0.000000, 1.000000}, + {9.961296, -0.000000, -1.584765, -0.000000, 36.401024, -0.000000, 16.262905, -0.000000, 1.000000}, + {8.635368, -0.000000, -1.570133, -0.000000, 31.493324, -0.000000, 14.086539, -0.000000, 1.000000}, + {7.548340, -0.000000, -1.552589, -0.000000, 27.456062, -0.000000, 12.300020, -0.000000, 1.000000}, + {6.645660, -0.000000, -1.531794, -0.000000, 24.090181, -0.000000, 10.814085, -0.000000, 1.000000}, + {5.889278, -0.000000, -1.509731, -0.000000, 21.263355, -0.000000, 9.566248, -0.000000, 1.000000}, + {5.248652, -0.000000, -1.483242, -0.000000, 18.846333, -0.000000, 8.506964, -0.000000, 1.000000}, + {4.703550, -0.000000, -1.456504, -0.000000, 16.778336, -0.000000, 7.601736, -0.000000, 1.000000}, + {4.240797, -0.000000, -1.426601, -0.000000, 14.982071, -0.000000, 6.829503, -0.000000, 1.000000}, + {3.838354, -0.000000, -1.392894, -0.000000, 13.413866, -0.000000, 6.153612, -0.000000, 1.000000}, + {3.496695, -0.000000, -1.358097, -0.000000, 12.031889, -0.000000, 5.574701, -0.000000, 1.000000}, + {3.203286, -0.000000, -1.321386, -0.000000, 10.806087, -0.000000, 5.071508, -0.000000, 1.000000}, + {2.943733, -0.000000, -1.282900, -0.000000, 9.718705, -0.000000, 4.620893, -0.000000, 1.000000}, + {2.728793, -0.000000, -1.243091, -0.000000, 8.739369, -0.000000, 4.238695, -0.000000, 1.000000}, + {2.531582, -0.000000, -1.201321, -0.000000, 7.872953, -0.000000, 3.882470, -0.000000, 1.000000}, + {2.357663, -0.000000, -1.158122, -0.000000, 7.100025, -0.000000, 3.561968, -0.000000, 1.000000}, + {2.211334, -0.000000, -1.114579, -0.000000, 6.399665, -0.000000, 3.283040, -0.000000, 1.000000}, + {2.084279, -0.000000, -1.070823, -0.000000, 5.772037, -0.000000, 3.031426, -0.000000, 1.000000}, + {1.970372, -0.000000, -1.026931, -0.000000, 5.214870, -0.000000, 2.800042, -0.000000, 1.000000}, + {1.868144, -0.000000, -0.983288, -0.000000, 4.723322, -0.000000, 2.586294, -0.000000, 1.000000}, + {1.776766, -0.000000, -0.939148, -0.000000, 4.283816, -0.000000, 2.388965, -0.000000, 1.000000}, + {1.695045, -0.000000, -0.895986, -0.000000, 3.892908, -0.000000, 2.208352, -0.000000, 1.000000}, + {1.621699, -0.000000, -0.854226, -0.000000, 3.550321, -0.000000, 2.040828, -0.000000, 1.000000}, + {1.554762, -0.000000, -0.813286, -0.000000, 3.247862, -0.000000, 1.884675, -0.000000, 1.000000}, + {1.495525, -0.000000, -0.773600, -0.000000, 2.980183, -0.000000, 1.743413, -0.000000, 1.000000}, + {1.442190, -0.000000, -0.735267, -0.000000, 2.743122, -0.000000, 1.611380, -0.000000, 1.000000}, + {1.392841, -0.000000, -0.699411, -0.000000, 2.533287, -0.000000, 1.487552, -0.000000, 1.000000}, + {1.350601, -0.000000, -0.664157, -0.000000, 2.345310, -0.000000, 1.376028, -0.000000, 1.000000}, + {1.315291, -0.000000, -0.630413, -0.000000, 2.180694, -0.000000, 1.275931, -0.000000, 1.000000}, + {1.279763, -0.000000, -0.596575, -0.000000, 2.031982, -0.000000, 1.177584, -0.000000, 1.000000}, + {1.247809, -0.000000, -0.564268, -0.000000, 1.899718, -0.000000, 1.085585, -0.000000, 1.000000}, + {1.214143, -0.000000, -0.531699, -0.000000, 1.780414, -0.000000, 0.995573, -0.000000, 1.000000}, + {1.180461, -0.000000, -0.498392, -0.000000, 1.669314, -0.000000, 0.907584, -0.000000, 1.000000}, + {1.151001, -0.000000, -0.462184, -0.000000, 1.566040, -0.000000, 0.824480, -0.000000, 1.000000}, + {1.118292, -0.000000, -0.427696, -0.000000, 1.474647, -0.000000, 0.743411, -0.000000, 1.000000}, + {1.090124, -0.000000, -0.394140, -0.000000, 1.394335, -0.000000, 0.668413, -0.000000, 1.000000}, + {1.065651, -0.000000, -0.361431, -0.000000, 1.321703, -0.000000, 0.600774, -0.000000, 1.000000}, + {1.039177, -0.000000, -0.329697, -0.000000, 1.258581, -0.000000, 0.535377, -0.000000, 1.000000}, + {1.012649, -0.000000, -0.299669, -0.000000, 1.199650, -0.000000, 0.473554, -0.000000, 1.000000}, + {0.990886, -0.000000, -0.270667, -0.000000, 1.147215, -0.000000, 0.417800, -0.000000, 1.000000}, + {0.970691, -0.000000, -0.242635, -0.000000, 1.100400, -0.000000, 0.366189, -0.000000, 1.000000}, + {0.947988, -0.000000, -0.216053, -0.000000, 1.057616, -0.000000, 0.316603, -0.000000, 1.000000}, + {0.926084, -0.000000, -0.189932, -0.000000, 1.017089, -0.000000, 0.270279, -0.000000, 1.000000}, + {0.905794, -0.000000, -0.164557, -0.000000, 0.980429, -0.000000, 0.228410, -0.000000, 1.000000}, + {0.887501, -0.000000, -0.140614, -0.000000, 0.948911, -0.000000, 0.190542, -0.000000, 1.000000}, + {0.872318, -0.000000, -0.117285, -0.000000, 0.921909, -0.000000, 0.156126, -0.000000, 1.000000}, + {0.857240, -0.000000, -0.093339, -0.000000, 0.899640, -0.000000, 0.124241, -0.000000, 1.000000}, + {0.847199, -0.000000, -0.069224, -0.000000, 0.880288, -0.000000, 0.092689, -0.000000, 1.000000}, + {0.841875, -0.000000, -0.044932, -0.000000, 0.863369, -0.000000, 0.060817, -0.000000, 1.000000}, + {0.839018, -0.000000, -0.021404, -0.000000, 0.848751, -0.000000, 0.029542, -0.000000, 1.000000}, + {0.835378, -0.000000, 0.001013, -0.000000, 0.835340, -0.000000, -0.000412, -0.000000, 1.000000}, + {499.822083, -0.000000, -1.732011, -0.000000, 1999.965576, -0.000000, 865.707397, -0.000000, 1.000000}, + {499.822083, -0.000000, -1.732011, -0.000000, 1999.965576, -0.000000, 865.707397, -0.000000, 1.000000}, + {494.718567, -0.000000, -1.732012, -0.000000, 1987.118896, -0.000000, 856.860107, -0.000000, 1.000000}, + {220.339890, -0.000000, -1.731923, -0.000000, 882.750122, -0.000000, 381.634308, -0.000000, 1.000000}, + {123.876175, -0.000000, -1.731682, -0.000000, 496.490784, -0.000000, 214.553635, -0.000000, 1.000000}, + {79.531601, -0.000000, -1.731174, -0.000000, 316.509644, -0.000000, 137.752762, -0.000000, 1.000000}, + {55.086246, -0.000000, -1.730250, -0.000000, 220.322235, -0.000000, 95.403229, -0.000000, 1.000000}, + {40.451122, -0.000000, -1.728735, -0.000000, 161.740768, -0.000000, 70.052254, -0.000000, 1.000000}, + {30.947416, -0.000000, -1.726420, -0.000000, 123.696022, -0.000000, 53.588512, -0.000000, 1.000000}, + {24.419283, -0.000000, -1.723074, -0.000000, 97.583702, -0.000000, 42.277691, -0.000000, 1.000000}, + {19.747540, -0.000000, -1.718435, -0.000000, 78.865501, -0.000000, 34.181908, -0.000000, 1.000000}, + {16.284979, -0.000000, -1.712185, -0.000000, 64.986404, -0.000000, 28.179916, -0.000000, 1.000000}, + {13.643820, -0.000000, -1.703190, -0.000000, 54.390690, -0.000000, 23.599930, -0.000000, 1.000000}, + {11.577027, -0.000000, -1.686008, -0.000000, 46.065083, -0.000000, 20.014091, -0.000000, 1.000000}, + {9.931022, -0.000000, -1.670659, -0.000000, 39.458389, -0.000000, 17.156662, -0.000000, 1.000000}, + {8.607615, -0.000000, -1.655305, -0.000000, 34.111290, -0.000000, 14.856005, -0.000000, 1.000000}, + {7.516711, -0.000000, -1.634473, -0.000000, 29.707855, -0.000000, 12.957469, -0.000000, 1.000000}, + {6.613613, -0.000000, -1.610853, -0.000000, 26.035231, -0.000000, 11.383127, -0.000000, 1.000000}, + {5.855110, -0.000000, -1.585347, -0.000000, 22.945198, -0.000000, 10.057853, -0.000000, 1.000000}, + {5.212951, -0.000000, -1.554470, -0.000000, 20.302366, -0.000000, 8.932099, -0.000000, 1.000000}, + {4.671384, -0.000000, -1.524457, -0.000000, 18.042673, -0.000000, 7.978805, -0.000000, 1.000000}, + {4.203025, -0.000000, -1.489348, -0.000000, 16.079727, -0.000000, 7.150288, -0.000000, 1.000000}, + {3.805731, -0.000000, -1.452825, -0.000000, 14.365060, -0.000000, 6.442015, -0.000000, 1.000000}, + {3.465826, -0.000000, -1.413837, -0.000000, 12.852410, -0.000000, 5.829659, -0.000000, 1.000000}, + {3.169922, -0.000000, -1.371894, -0.000000, 11.512827, -0.000000, 5.290401, -0.000000, 1.000000}, + {2.922021, -0.000000, -1.330249, -0.000000, 10.316552, -0.000000, 4.829650, -0.000000, 1.000000}, + {2.699599, -0.000000, -1.286943, -0.000000, 9.258978, -0.000000, 4.410607, -0.000000, 1.000000}, + {2.504565, -0.000000, -1.240927, -0.000000, 8.313870, -0.000000, 4.034696, -0.000000, 1.000000}, + {2.340009, -0.000000, -1.192939, -0.000000, 7.463354, -0.000000, 3.707998, -0.000000, 1.000000}, + {2.196713, -0.000000, -1.146727, -0.000000, 6.703224, -0.000000, 3.413730, -0.000000, 1.000000}, + {2.065565, -0.000000, -1.099441, -0.000000, 6.033018, -0.000000, 3.139545, -0.000000, 1.000000}, + {1.949049, -0.000000, -1.052915, -0.000000, 5.440057, -0.000000, 2.888410, -0.000000, 1.000000}, + {1.848797, -0.000000, -1.006308, -0.000000, 4.906864, -0.000000, 2.663498, -0.000000, 1.000000}, + {1.758728, -0.000000, -0.959468, -0.000000, 4.438121, -0.000000, 2.457416, -0.000000, 1.000000}, + {1.676180, -0.000000, -0.913670, -0.000000, 4.023922, -0.000000, 2.264095, -0.000000, 1.000000}, + {1.602849, -0.000000, -0.869632, -0.000000, 3.657779, -0.000000, 2.086621, -0.000000, 1.000000}, + {1.537729, -0.000000, -0.826614, -0.000000, 3.335497, -0.000000, 1.924494, -0.000000, 1.000000}, + {1.484162, -0.000000, -0.784605, -0.000000, 3.046730, -0.000000, 1.781336, -0.000000, 1.000000}, + {1.430466, -0.000000, -0.744719, -0.000000, 2.801592, -0.000000, 1.642652, -0.000000, 1.000000}, + {1.382483, -0.000000, -0.706575, -0.000000, 2.578429, -0.000000, 1.514299, -0.000000, 1.000000}, + {1.338408, -0.000000, -0.669998, -0.000000, 2.382433, -0.000000, 1.396605, -0.000000, 1.000000}, + {1.299440, -0.000000, -0.634587, -0.000000, 2.210920, -0.000000, 1.287506, -0.000000, 1.000000}, + {1.266996, -0.000000, -0.600882, -0.000000, 2.057856, -0.000000, 1.190397, -0.000000, 1.000000}, + {1.237216, -0.000000, -0.566931, -0.000000, 1.920190, -0.000000, 1.097397, -0.000000, 1.000000}, + {1.205769, -0.000000, -0.534977, -0.000000, 1.798528, -0.000000, 1.007207, -0.000000, 1.000000}, + {1.175662, -0.000000, -0.502904, -0.000000, 1.687806, -0.000000, 0.921862, -0.000000, 1.000000}, + {1.147457, -0.000000, -0.470049, -0.000000, 1.587060, -0.000000, 0.839772, -0.000000, 1.000000}, + {1.116879, -0.000000, -0.434482, -0.000000, 1.491868, -0.000000, 0.757348, -0.000000, 1.000000}, + {1.088526, -0.000000, -0.400322, -0.000000, 1.408114, -0.000000, 0.681186, -0.000000, 1.000000}, + {1.061203, -0.000000, -0.367178, -0.000000, 1.333113, -0.000000, 0.609758, -0.000000, 1.000000}, + {1.037013, -0.000000, -0.334895, -0.000000, 1.266879, -0.000000, 0.544047, -0.000000, 1.000000}, + {1.011472, -0.000000, -0.303347, -0.000000, 1.207033, -0.000000, 0.481285, -0.000000, 1.000000}, + {0.988643, -0.000000, -0.273864, -0.000000, 1.152427, -0.000000, 0.424263, -0.000000, 1.000000}, + {0.967803, -0.000000, -0.245225, -0.000000, 1.103691, -0.000000, 0.370598, -0.000000, 1.000000}, + {0.945870, -0.000000, -0.217473, -0.000000, 1.059179, -0.000000, 0.320605, -0.000000, 1.000000}, + {0.923801, -0.000000, -0.191009, -0.000000, 1.017882, -0.000000, 0.273655, -0.000000, 1.000000}, + {0.903188, -0.000000, -0.165590, -0.000000, 0.980649, -0.000000, 0.230554, -0.000000, 1.000000}, + {0.885471, -0.000000, -0.140123, -0.000000, 0.947714, -0.000000, 0.191843, -0.000000, 1.000000}, + {0.869008, -0.000000, -0.116362, -0.000000, 0.920480, -0.000000, 0.156877, -0.000000, 1.000000}, + {0.854365, -0.000000, -0.093528, -0.000000, 0.897682, -0.000000, 0.125335, -0.000000, 1.000000}, + {0.844338, -0.000000, -0.070139, -0.000000, 0.877891, -0.000000, 0.093643, -0.000000, 1.000000}, + {0.838651, -0.000000, -0.047558, -0.000000, 0.860803, -0.000000, 0.062392, -0.000000, 1.000000}, + {0.835562, -0.000000, -0.023241, -0.000000, 0.845685, -0.000000, 0.030756, -0.000000, 1.000000}, + {0.831863, -0.000000, 0.000339, -0.000000, 0.831714, -0.000000, -0.000151, -0.000000, 1.000000}, + {511.085144, -0.000000, -1.836263, -0.000000, 2090.899902, -0.000000, 938.498901, -0.000000, 1.000000}, + {511.085144, -0.000000, -1.836263, -0.000000, 2090.899902, -0.000000, 938.498901, -0.000000, 1.000000}, + {505.213501, -0.000000, -1.836264, -0.000000, 2090.900635, -0.000000, 927.717529, -0.000000, 1.000000}, + {220.510849, -0.000000, -1.836157, -0.000000, 964.057007, -0.000000, 404.914307, -0.000000, 1.000000}, + {124.024460, -0.000000, -1.835866, -0.000000, 542.131042, -0.000000, 227.740662, -0.000000, 1.000000}, + {79.303780, -0.000000, -1.835263, -0.000000, 344.256348, -0.000000, 145.624252, -0.000000, 1.000000}, + {55.082211, -0.000000, -1.834161, -0.000000, 240.742813, -0.000000, 101.137978, -0.000000, 1.000000}, + {40.452766, -0.000000, -1.832355, -0.000000, 176.723450, -0.000000, 74.270340, -0.000000, 1.000000}, + {30.935280, -0.000000, -1.829601, -0.000000, 135.147217, -0.000000, 56.789921, -0.000000, 1.000000}, + {24.410963, -0.000000, -1.825615, -0.000000, 106.570564, -0.000000, 44.805172, -0.000000, 1.000000}, + {19.732744, -0.000000, -1.820089, -0.000000, 86.123405, -0.000000, 36.209381, -0.000000, 1.000000}, + {16.265142, -0.000000, -1.812601, -0.000000, 70.936684, -0.000000, 29.836283, -0.000000, 1.000000}, + {13.619320, -0.000000, -1.799675, -0.000000, 59.311081, -0.000000, 24.971399, -0.000000, 1.000000}, + {11.549600, -0.000000, -1.782202, -0.000000, 50.207493, -0.000000, 21.163506, -0.000000, 1.000000}, + {9.904495, -0.000000, -1.764755, -0.000000, 42.965004, -0.000000, 18.134314, -0.000000, 1.000000}, + {8.574452, -0.000000, -1.746466, -0.000000, 37.106419, -0.000000, 15.682496, -0.000000, 1.000000}, + {7.481882, -0.000000, -1.721176, -0.000000, 32.270939, -0.000000, 13.666021, -0.000000, 1.000000}, + {6.576000, -0.000000, -1.694706, -0.000000, 28.244230, -0.000000, 11.990445, -0.000000, 1.000000}, + {5.815666, -0.000000, -1.664285, -0.000000, 24.849703, -0.000000, 10.580462, -0.000000, 1.000000}, + {5.174417, -0.000000, -1.631012, -0.000000, 21.953531, -0.000000, 9.387169, -0.000000, 1.000000}, + {4.628685, -0.000000, -1.595830, -0.000000, 19.470154, -0.000000, 8.367079, -0.000000, 1.000000}, + {4.165895, -0.000000, -1.556186, -0.000000, 17.310062, -0.000000, 7.496466, -0.000000, 1.000000}, + {3.773972, -0.000000, -1.514913, -0.000000, 15.418040, -0.000000, 6.752415, -0.000000, 1.000000}, + {3.428263, -0.000000, -1.469899, -0.000000, 13.758570, -0.000000, 6.090883, -0.000000, 1.000000}, + {3.141413, -0.000000, -1.424751, -0.000000, 12.284732, -0.000000, 5.531658, -0.000000, 1.000000}, + {2.889461, -0.000000, -1.378250, -0.000000, 10.977796, -0.000000, 5.033019, -0.000000, 1.000000}, + {2.668540, -0.000000, -1.329931, -0.000000, 9.820642, -0.000000, 4.588055, -0.000000, 1.000000}, + {2.484793, -0.000000, -1.280416, -0.000000, 8.778234, -0.000000, 4.205466, -0.000000, 1.000000}, + {2.322710, -0.000000, -1.228281, -0.000000, 7.851379, -0.000000, 3.859567, -0.000000, 1.000000}, + {2.172423, -0.000000, -1.178310, -0.000000, 7.039433, -0.000000, 3.533728, -0.000000, 1.000000}, + {2.038147, -0.000000, -1.127417, -0.000000, 6.319024, -0.000000, 3.236640, -0.000000, 1.000000}, + {1.926231, -0.000000, -1.077733, -0.000000, 5.672859, -0.000000, 2.976160, -0.000000, 1.000000}, + {1.825794, -0.000000, -1.028585, -0.000000, 5.107165, -0.000000, 2.737221, -0.000000, 1.000000}, + {1.736350, -0.000000, -0.979110, -0.000000, 4.604621, -0.000000, 2.517713, -0.000000, 1.000000}, + {1.655195, -0.000000, -0.930475, -0.000000, 4.163131, -0.000000, 2.315423, -0.000000, 1.000000}, + {1.583655, -0.000000, -0.883679, -0.000000, 3.769291, -0.000000, 2.130528, -0.000000, 1.000000}, + {1.519473, -0.000000, -0.839042, -0.000000, 3.424717, -0.000000, 1.961308, -0.000000, 1.000000}, + {1.466147, -0.000000, -0.795197, -0.000000, 3.124171, -0.000000, 1.810564, -0.000000, 1.000000}, + {1.418495, -0.000000, -0.753046, -0.000000, 2.856174, -0.000000, 1.672148, -0.000000, 1.000000}, + {1.370672, -0.000000, -0.713403, -0.000000, 2.627248, -0.000000, 1.539354, -0.000000, 1.000000}, + {1.326257, -0.000000, -0.675196, -0.000000, 2.422592, -0.000000, 1.414866, -0.000000, 1.000000}, + {1.287364, -0.000000, -0.638322, -0.000000, 2.241496, -0.000000, 1.301947, -0.000000, 1.000000}, + {1.255925, -0.000000, -0.603308, -0.000000, 2.080925, -0.000000, 1.201617, -0.000000, 1.000000}, + {1.224782, -0.000000, -0.569434, -0.000000, 1.941677, -0.000000, 1.106450, -0.000000, 1.000000}, + {1.196137, -0.000000, -0.536233, -0.000000, 1.814372, -0.000000, 1.015351, -0.000000, 1.000000}, + {1.166428, -0.000000, -0.504487, -0.000000, 1.702504, -0.000000, 0.929057, -0.000000, 1.000000}, + {1.142563, -0.000000, -0.473197, -0.000000, 1.601333, -0.000000, 0.850931, -0.000000, 1.000000}, + {1.115591, -0.000000, -0.441374, -0.000000, 1.508293, -0.000000, 0.772202, -0.000000, 1.000000}, + {1.087450, -0.000000, -0.406578, -0.000000, 1.421924, -0.000000, 0.693273, -0.000000, 1.000000}, + {1.058441, -0.000000, -0.373003, -0.000000, 1.343416, -0.000000, 0.619633, -0.000000, 1.000000}, + {1.036405, -0.000000, -0.339918, -0.000000, 1.274265, -0.000000, 0.553749, -0.000000, 1.000000}, + {1.009811, -0.000000, -0.308106, -0.000000, 1.213769, -0.000000, 0.488978, -0.000000, 1.000000}, + {0.987187, -0.000000, -0.277417, -0.000000, 1.158055, -0.000000, 0.430549, -0.000000, 1.000000}, + {0.966496, -0.000000, -0.247941, -0.000000, 1.107122, -0.000000, 0.376330, -0.000000, 1.000000}, + {0.943611, -0.000000, -0.219767, -0.000000, 1.061514, -0.000000, 0.324694, -0.000000, 1.000000}, + {0.921372, -0.000000, -0.192425, -0.000000, 1.018703, -0.000000, 0.276404, -0.000000, 1.000000}, + {0.901605, -0.000000, -0.166112, -0.000000, 0.980966, -0.000000, 0.233120, -0.000000, 1.000000}, + {0.883031, -0.000000, -0.140630, -0.000000, 0.947478, -0.000000, 0.193672, -0.000000, 1.000000}, + {0.866008, -0.000000, -0.116135, -0.000000, 0.918590, -0.000000, 0.157817, -0.000000, 1.000000}, + {0.851028, -0.000000, -0.092333, -0.000000, 0.894998, -0.000000, 0.125516, -0.000000, 1.000000}, + {0.841057, -0.000000, -0.069434, -0.000000, 0.875056, -0.000000, 0.093820, -0.000000, 1.000000}, + {0.835355, -0.000000, -0.047327, -0.000000, 0.857536, -0.000000, 0.062534, -0.000000, 1.000000}, + {0.832269, -0.000000, -0.024353, -0.000000, 0.842383, -0.000000, 0.031288, -0.000000, 1.000000}, + {0.828228, -0.000000, -0.001268, -0.000000, 0.828206, -0.000000, 0.000576, -0.000000, 1.000000}, + {522.856628, -0.000000, -1.950519, -0.000000, 2191.923096, -0.000000, 1019.856506, -0.000000, 1.000000}, + {522.856628, -0.000000, -1.950519, -0.000000, 2191.923096, -0.000000, 1019.856506, -0.000000, 1.000000}, + {516.628113, -0.000000, -1.950522, -0.000000, 2191.925293, -0.000000, 1007.708191, -0.000000, 1.000000}, + {220.411392, -0.000000, -1.950389, -0.000000, 1059.556763, -0.000000, 429.909698, -0.000000, 1.000000}, + {124.020309, -0.000000, -1.950044, -0.000000, 595.630554, -0.000000, 241.902267, -0.000000, 1.000000}, + {80.171425, -0.000000, -1.949318, -0.000000, 369.970856, -0.000000, 156.368896, -0.000000, 1.000000}, + {55.070259, -0.000000, -1.948004, -0.000000, 264.543182, -0.000000, 107.406013, -0.000000, 1.000000}, + {40.438072, -0.000000, -1.945839, -0.000000, 194.107300, -0.000000, 78.858276, -0.000000, 1.000000}, + {30.926123, -0.000000, -1.942536, -0.000000, 148.464951, -0.000000, 60.303143, -0.000000, 1.000000}, + {24.393267, -0.000000, -1.937764, -0.000000, 117.051712, -0.000000, 47.555790, -0.000000, 1.000000}, + {19.713079, -0.000000, -1.931139, -0.000000, 94.537262, -0.000000, 38.420696, -0.000000, 1.000000}, + {16.244186, -0.000000, -1.922046, -0.000000, 77.826172, -0.000000, 31.647764, -0.000000, 1.000000}, + {13.590987, -0.000000, -1.904654, -0.000000, 65.003174, -0.000000, 26.464888, -0.000000, 1.000000}, + {11.518149, -0.000000, -1.886799, -0.000000, 54.991226, -0.000000, 22.412935, -0.000000, 1.000000}, + {9.869328, -0.000000, -1.867105, -0.000000, 47.021591, -0.000000, 19.187117, -0.000000, 1.000000}, + {8.536189, -0.000000, -1.843594, -0.000000, 40.553040, -0.000000, 16.575714, -0.000000, 1.000000}, + {7.440576, -0.000000, -1.815064, -0.000000, 35.213913, -0.000000, 14.425980, -0.000000, 1.000000}, + {6.533275, -0.000000, -1.785355, -0.000000, 30.780426, -0.000000, 12.641932, -0.000000, 1.000000}, + {5.769576, -0.000000, -1.747463, -0.000000, 27.016623, -0.000000, 11.136325, -0.000000, 1.000000}, + {5.130471, -0.000000, -1.711248, -0.000000, 23.826628, -0.000000, 9.870622, -0.000000, 1.000000}, + {4.584968, -0.000000, -1.669486, -0.000000, 21.077785, -0.000000, 8.785582, -0.000000, 1.000000}, + {4.125204, -0.000000, -1.626074, -0.000000, 18.692146, -0.000000, 7.863742, -0.000000, 1.000000}, + {3.726583, -0.000000, -1.579110, -0.000000, 16.608892, -0.000000, 7.058338, -0.000000, 1.000000}, + {3.394824, -0.000000, -1.528215, -0.000000, 14.758327, -0.000000, 6.377739, -0.000000, 1.000000}, + {3.104619, -0.000000, -1.477659, -0.000000, 13.134014, -0.000000, 5.774045, -0.000000, 1.000000}, + {2.853900, -0.000000, -1.426794, -0.000000, 11.702996, -0.000000, 5.243056, -0.000000, 1.000000}, + {2.645911, -0.000000, -1.373962, -0.000000, 10.414655, -0.000000, 4.789696, -0.000000, 1.000000}, + {2.455043, -0.000000, -1.319252, -0.000000, 9.289620, -0.000000, 4.366351, -0.000000, 1.000000}, + {2.286029, -0.000000, -1.263785, -0.000000, 8.290472, -0.000000, 3.984693, -0.000000, 1.000000}, + {2.144610, -0.000000, -1.208328, -0.000000, 7.395809, -0.000000, 3.651616, -0.000000, 1.000000}, + {2.018924, -0.000000, -1.154220, -0.000000, 6.609995, -0.000000, 3.347934, -0.000000, 1.000000}, + {1.908630, -0.000000, -1.101906, -0.000000, 5.915262, -0.000000, 3.071701, -0.000000, 1.000000}, + {1.810057, -0.000000, -1.049653, -0.000000, 5.302467, -0.000000, 2.820414, -0.000000, 1.000000}, + {1.722040, -0.000000, -0.997850, -0.000000, 4.767898, -0.000000, 2.588821, -0.000000, 1.000000}, + {1.642225, -0.000000, -0.946446, -0.000000, 4.292281, -0.000000, 2.376664, -0.000000, 1.000000}, + {1.569530, -0.000000, -0.897342, -0.000000, 3.881018, -0.000000, 2.179606, -0.000000, 1.000000}, + {1.505592, -0.000000, -0.850558, -0.000000, 3.518266, -0.000000, 2.001445, -0.000000, 1.000000}, + {1.446825, -0.000000, -0.804661, -0.000000, 3.199698, -0.000000, 1.836233, -0.000000, 1.000000}, + {1.400495, -0.000000, -0.760898, -0.000000, 2.915498, -0.000000, 1.693745, -0.000000, 1.000000}, + {1.358733, -0.000000, -0.719661, -0.000000, 2.672253, -0.000000, 1.560866, -0.000000, 1.000000}, + {1.315017, -0.000000, -0.679627, -0.000000, 2.460043, -0.000000, 1.433125, -0.000000, 1.000000}, + {1.275442, -0.000000, -0.641727, -0.000000, 2.273172, -0.000000, 1.314863, -0.000000, 1.000000}, + {1.238994, -0.000000, -0.605290, -0.000000, 2.106010, -0.000000, 1.205777, -0.000000, 1.000000}, + {1.210726, -0.000000, -0.570206, -0.000000, 1.959141, -0.000000, 1.110287, -0.000000, 1.000000}, + {1.185854, -0.000000, -0.537214, -0.000000, 1.830824, -0.000000, 1.022619, -0.000000, 1.000000}, + {1.156902, -0.000000, -0.504490, -0.000000, 1.713990, -0.000000, 0.934736, -0.000000, 1.000000}, + {1.130251, -0.000000, -0.472907, -0.000000, 1.611545, -0.000000, 0.853043, -0.000000, 1.000000}, + {1.108888, -0.000000, -0.443138, -0.000000, 1.520653, -0.000000, 0.778845, -0.000000, 1.000000}, + {1.084594, -0.000000, -0.411551, -0.000000, 1.433868, -0.000000, 0.704439, -0.000000, 1.000000}, + {1.057224, -0.000000, -0.378677, -0.000000, 1.354767, -0.000000, 0.630756, -0.000000, 1.000000}, + {1.033701, -0.000000, -0.345537, -0.000000, 1.284055, -0.000000, 0.562606, -0.000000, 1.000000}, + {1.008690, -0.000000, -0.313160, -0.000000, 1.219998, -0.000000, 0.497265, -0.000000, 1.000000}, + {0.985571, -0.000000, -0.281641, -0.000000, 1.162985, -0.000000, 0.437173, -0.000000, 1.000000}, + {0.961933, -0.000000, -0.251454, -0.000000, 1.110853, -0.000000, 0.380646, -0.000000, 1.000000}, + {0.941440, -0.000000, -0.222416, -0.000000, 1.064740, -0.000000, 0.329020, -0.000000, 1.000000}, + {0.919224, -0.000000, -0.194301, -0.000000, 1.020837, -0.000000, 0.279925, -0.000000, 1.000000}, + {0.898780, -0.000000, -0.167465, -0.000000, 0.980660, -0.000000, 0.235833, -0.000000, 1.000000}, + {0.879596, -0.000000, -0.141417, -0.000000, 0.945691, -0.000000, 0.195061, -0.000000, 1.000000}, + {0.862773, -0.000000, -0.116180, -0.000000, 0.917014, -0.000000, 0.159180, -0.000000, 1.000000}, + {0.847710, -0.000000, -0.092103, -0.000000, 0.892612, -0.000000, 0.126118, -0.000000, 1.000000}, + {0.837527, -0.000000, -0.068360, -0.000000, 0.871935, -0.000000, 0.094026, -0.000000, 1.000000}, + {0.831846, -0.000000, -0.045148, -0.000000, 0.854085, -0.000000, 0.061922, -0.000000, 1.000000}, + {0.828295, -0.000000, -0.023199, -0.000000, 0.838678, -0.000000, 0.030957, -0.000000, 1.000000}, + {0.824359, -0.000000, -0.001179, -0.000000, 0.824310, -0.000000, 0.000537, -0.000000, 1.000000}, + {534.931519, -0.000000, -2.076462, -0.000000, 2304.711182, -0.000000, 1110.782715, -0.000000, 1.000000}, + {534.931519, -0.000000, -2.076462, -0.000000, 2304.711182, -0.000000, 1110.782715, -0.000000, 1.000000}, + {528.627502, -0.000000, -2.076462, -0.000000, 2304.711182, -0.000000, 1097.679199, -0.000000, 1.000000}, + {220.649765, -0.000000, -2.076304, -0.000000, 1170.831055, -0.000000, 458.160980, -0.000000, 1.000000}, + {123.931099, -0.000000, -2.075889, -0.000000, 658.919556, -0.000000, 257.328156, -0.000000, 1.000000}, + {79.682602, -0.000000, -2.075014, -0.000000, 421.132446, -0.000000, 165.441055, -0.000000, 1.000000}, + {55.126919, -0.000000, -2.073427, -0.000000, 292.498444, -0.000000, 114.461647, -0.000000, 1.000000}, + {40.417175, -0.000000, -2.070816, -0.000000, 214.591156, -0.000000, 83.909187, -0.000000, 1.000000}, + {30.905352, -0.000000, -2.066834, -0.000000, 164.035019, -0.000000, 64.151772, -0.000000, 1.000000}, + {24.375099, -0.000000, -2.061075, -0.000000, 129.300705, -0.000000, 50.585114, -0.000000, 1.000000}, + {19.691891, -0.000000, -2.053074, -0.000000, 104.380424, -0.000000, 40.853252, -0.000000, 1.000000}, + {16.217587, -0.000000, -2.041667, -0.000000, 85.868156, -0.000000, 33.630775, -0.000000, 1.000000}, + {13.557062, -0.000000, -2.020104, -0.000000, 71.643127, -0.000000, 28.096966, -0.000000, 1.000000}, + {11.480399, -0.000000, -1.999466, -0.000000, 60.549194, -0.000000, 23.774267, -0.000000, 1.000000}, + {9.829308, -0.000000, -1.978149, -0.000000, 51.726891, -0.000000, 20.334194, -0.000000, 1.000000}, + {8.491221, -0.000000, -1.948618, -0.000000, 44.533123, -0.000000, 17.542261, -0.000000, 1.000000}, + {7.394433, -0.000000, -1.916266, -0.000000, 38.615311, -0.000000, 15.249652, -0.000000, 1.000000}, + {6.483265, -0.000000, -1.881097, -0.000000, 33.689857, -0.000000, 13.340503, -0.000000, 1.000000}, + {5.721082, -0.000000, -1.838861, -0.000000, 29.508221, -0.000000, 11.738617, -0.000000, 1.000000}, + {5.077987, -0.000000, -1.796048, -0.000000, 25.962015, -0.000000, 10.381338, -0.000000, 1.000000}, + {4.536246, -0.000000, -1.748015, -0.000000, 22.900066, -0.000000, 9.230186, -0.000000, 1.000000}, + {4.072760, -0.000000, -1.698875, -0.000000, 20.257427, -0.000000, 8.238698, -0.000000, 1.000000}, + {3.686262, -0.000000, -1.643739, -0.000000, 17.921173, -0.000000, 7.401805, -0.000000, 1.000000}, + {3.351644, -0.000000, -1.588342, -0.000000, 15.875896, -0.000000, 6.667620, -0.000000, 1.000000}, + {3.062906, -0.000000, -1.532489, -0.000000, 14.084973, -0.000000, 6.023572, -0.000000, 1.000000}, + {2.826135, -0.000000, -1.475262, -0.000000, 12.475431, -0.000000, 5.480184, -0.000000, 1.000000}, + {2.612152, -0.000000, -1.417196, -0.000000, 11.072163, -0.000000, 4.982215, -0.000000, 1.000000}, + {2.421078, -0.000000, -1.357244, -0.000000, 9.839993, -0.000000, 4.528382, -0.000000, 1.000000}, + {2.262880, -0.000000, -1.297832, -0.000000, 8.733887, -0.000000, 4.137828, -0.000000, 1.000000}, + {2.123210, -0.000000, -1.237986, -0.000000, 7.764506, -0.000000, 3.783846, -0.000000, 1.000000}, + {2.001339, -0.000000, -1.180301, -0.000000, 6.908175, -0.000000, 3.464269, -0.000000, 1.000000}, + {1.888099, -0.000000, -1.124648, -0.000000, 6.165969, -0.000000, 3.165197, -0.000000, 1.000000}, + {1.790447, -0.000000, -1.069121, -0.000000, 5.508952, -0.000000, 2.898229, -0.000000, 1.000000}, + {1.702892, -0.000000, -1.014932, -0.000000, 4.935512, -0.000000, 2.653268, -0.000000, 1.000000}, + {1.627237, -0.000000, -0.961619, -0.000000, 4.432228, -0.000000, 2.433160, -0.000000, 1.000000}, + {1.555372, -0.000000, -0.910303, -0.000000, 3.994545, -0.000000, 2.228181, -0.000000, 1.000000}, + {1.491259, -0.000000, -0.860476, -0.000000, 3.608410, -0.000000, 2.039882, -0.000000, 1.000000}, + {1.433191, -0.000000, -0.813574, -0.000000, 3.274186, -0.000000, 1.867967, -0.000000, 1.000000}, + {1.380491, -0.000000, -0.767979, -0.000000, 2.982822, -0.000000, 1.709671, -0.000000, 1.000000}, + {1.340750, -0.000000, -0.724919, -0.000000, 2.723112, -0.000000, 1.574627, -0.000000, 1.000000}, + {1.302532, -0.000000, -0.683928, -0.000000, 2.499173, -0.000000, 1.447712, -0.000000, 1.000000}, + {1.262818, -0.000000, -0.644420, -0.000000, 2.303014, -0.000000, 1.326102, -0.000000, 1.000000}, + {1.227367, -0.000000, -0.606889, -0.000000, 2.131922, -0.000000, 1.214240, -0.000000, 1.000000}, + {1.198555, -0.000000, -0.570762, -0.000000, 1.978062, -0.000000, 1.115009, -0.000000, 1.000000}, + {1.173720, -0.000000, -0.536307, -0.000000, 1.843448, -0.000000, 1.024792, -0.000000, 1.000000}, + {1.146015, -0.000000, -0.503941, -0.000000, 1.726514, -0.000000, 0.937544, -0.000000, 1.000000}, + {1.120140, -0.000000, -0.472156, -0.000000, 1.621923, -0.000000, 0.854947, -0.000000, 1.000000}, + {1.099030, -0.000000, -0.440997, -0.000000, 1.525176, -0.000000, 0.779421, -0.000000, 1.000000}, + {1.075762, -0.000000, -0.411637, -0.000000, 1.441787, -0.000000, 0.707502, -0.000000, 1.000000}, + {1.053021, -0.000000, -0.381952, -0.000000, 1.364861, -0.000000, 0.638216, -0.000000, 1.000000}, + {1.032377, -0.000000, -0.350971, -0.000000, 1.292393, -0.000000, 0.571711, -0.000000, 1.000000}, + {1.006951, -0.000000, -0.318342, -0.000000, 1.226765, -0.000000, 0.505275, -0.000000, 1.000000}, + {0.982186, -0.000000, -0.286424, -0.000000, 1.166769, -0.000000, 0.443069, -0.000000, 1.000000}, + {0.960956, -0.000000, -0.255637, -0.000000, 1.113608, -0.000000, 0.386492, -0.000000, 1.000000}, + {0.939755, -0.000000, -0.225726, -0.000000, 1.066223, -0.000000, 0.333393, -0.000000, 1.000000}, + {0.916477, -0.000000, -0.196993, -0.000000, 1.020408, -0.000000, 0.283127, -0.000000, 1.000000}, + {0.894526, -0.000000, -0.169568, -0.000000, 0.979850, -0.000000, 0.237879, -0.000000, 1.000000}, + {0.872932, -0.000000, -0.142857, -0.000000, 0.943548, -0.000000, 0.196280, -0.000000, 1.000000}, + {0.856007, -0.000000, -0.116993, -0.000000, 0.914232, -0.000000, 0.159830, -0.000000, 1.000000}, + {0.840900, -0.000000, -0.091758, -0.000000, 0.889403, -0.000000, 0.126496, -0.000000, 1.000000}, + {0.831786, -0.000000, -0.067669, -0.000000, 0.868511, -0.000000, 0.094115, -0.000000, 1.000000}, + {0.826912, -0.000000, -0.044142, -0.000000, 0.850352, -0.000000, 0.061655, -0.000000, 1.000000}, + {0.823764, -0.000000, -0.021328, -0.000000, 0.834539, -0.000000, 0.030128, -0.000000, 1.000000}, + {0.819888, -0.000000, 0.000570, -0.000000, 0.819848, -0.000000, -0.000282, -0.000000, 1.000000}, + {547.698608, -0.000000, -2.216152, -0.000000, 2431.322510, -0.000000, 1213.786133, -0.000000, 1.000000}, + {547.698608, -0.000000, -2.216152, -0.000000, 2431.322510, -0.000000, 1213.786133, -0.000000, 1.000000}, + {541.724854, -0.000000, -2.216151, -0.000000, 2431.322021, -0.000000, 1200.541992, -0.000000, 1.000000}, + {220.495575, -0.000000, -2.215967, -0.000000, 1304.105347, -0.000000, 488.638763, -0.000000, 1.000000}, + {123.997833, -0.000000, -2.215462, -0.000000, 732.982117, -0.000000, 274.797150, -0.000000, 1.000000}, + {79.321518, -0.000000, -2.214395, -0.000000, 467.576630, -0.000000, 175.797195, -0.000000, 1.000000}, + {55.066784, -0.000000, -2.212466, -0.000000, 325.344360, -0.000000, 122.022865, -0.000000, 1.000000}, + {40.409760, -0.000000, -2.209294, -0.000000, 238.733765, -0.000000, 89.534386, -0.000000, 1.000000}, + {30.892561, -0.000000, -2.204457, -0.000000, 182.439606, -0.000000, 68.435677, -0.000000, 1.000000}, + {24.353909, -0.000000, -2.197461, -0.000000, 143.744278, -0.000000, 53.937122, -0.000000, 1.000000}, + {19.665783, -0.000000, -2.187703, -0.000000, 115.982147, -0.000000, 43.538372, -0.000000, 1.000000}, + {16.184109, -0.000000, -2.171568, -0.000000, 95.313591, -0.000000, 35.812431, -0.000000, 1.000000}, + {13.516235, -0.000000, -2.148222, -0.000000, 79.457481, -0.000000, 29.888878, -0.000000, 1.000000}, + {11.437142, -0.000000, -2.124542, -0.000000, 67.084206, -0.000000, 25.268660, -0.000000, 1.000000}, + {9.782360, -0.000000, -2.098555, -0.000000, 57.227875, -0.000000, 21.587015, -0.000000, 1.000000}, + {8.438704, -0.000000, -2.062629, -0.000000, 49.177879, -0.000000, 18.593519, -0.000000, 1.000000}, + {7.338447, -0.000000, -2.026723, -0.000000, 42.578079, -0.000000, 16.136845, -0.000000, 1.000000}, + {6.425764, -0.000000, -1.981691, -0.000000, 37.038700, -0.000000, 14.093365, -0.000000, 1.000000}, + {5.665631, -0.000000, -1.935570, -0.000000, 32.374416, -0.000000, 12.385567, -0.000000, 1.000000}, + {5.022426, -0.000000, -1.884460, -0.000000, 28.398439, -0.000000, 10.933270, -0.000000, 1.000000}, + {4.483363, -0.000000, -1.830806, -0.000000, 24.969889, -0.000000, 9.706996, -0.000000, 1.000000}, + {4.024064, -0.000000, -1.773879, -0.000000, 22.003885, -0.000000, 8.653734, -0.000000, 1.000000}, + {3.634933, -0.000000, -1.711488, -0.000000, 19.395679, -0.000000, 7.750332, -0.000000, 1.000000}, + {3.303313, -0.000000, -1.648617, -0.000000, 17.111935, -0.000000, 6.968053, -0.000000, 1.000000}, + {3.031241, -0.000000, -1.586631, -0.000000, 15.091459, -0.000000, 6.310078, -0.000000, 1.000000}, + {2.788628, -0.000000, -1.523853, -0.000000, 13.331050, -0.000000, 5.712807, -0.000000, 1.000000}, + {2.572773, -0.000000, -1.459336, -0.000000, 11.785311, -0.000000, 5.172314, -0.000000, 1.000000}, + {2.395988, -0.000000, -1.395346, -0.000000, 10.409495, -0.000000, 4.711967, -0.000000, 1.000000}, + {2.234667, -0.000000, -1.330967, -0.000000, 9.212646, -0.000000, 4.285920, -0.000000, 1.000000}, + {2.097995, -0.000000, -1.266162, -0.000000, 8.152663, -0.000000, 3.910729, -0.000000, 1.000000}, + {1.963727, -0.000000, -1.204941, -0.000000, 7.248562, -0.000000, 3.548317, -0.000000, 1.000000}, + {1.857431, -0.000000, -1.145330, -0.000000, 6.437681, -0.000000, 3.240990, -0.000000, 1.000000}, + {1.761508, -0.000000, -1.087543, -0.000000, 5.733542, -0.000000, 2.958986, -0.000000, 1.000000}, + {1.674523, -0.000000, -1.030845, -0.000000, 5.118929, -0.000000, 2.702026, -0.000000, 1.000000}, + {1.603867, -0.000000, -0.975398, -0.000000, 4.579770, -0.000000, 2.478565, -0.000000, 1.000000}, + {1.537894, -0.000000, -0.921826, -0.000000, 4.110187, -0.000000, 2.268970, -0.000000, 1.000000}, + {1.476253, -0.000000, -0.870369, -0.000000, 3.704278, -0.000000, 2.075746, -0.000000, 1.000000}, + {1.418603, -0.000000, -0.820998, -0.000000, 3.345320, -0.000000, 1.897944, -0.000000, 1.000000}, + {1.367561, -0.000000, -0.774169, -0.000000, 3.042042, -0.000000, 1.733577, -0.000000, 1.000000}, + {1.321592, -0.000000, -0.729646, -0.000000, 2.774602, -0.000000, 1.585879, -0.000000, 1.000000}, + {1.287551, -0.000000, -0.687213, -0.000000, 2.537718, -0.000000, 1.457768, -0.000000, 1.000000}, + {1.251045, -0.000000, -0.646876, -0.000000, 2.333415, -0.000000, 1.336647, -0.000000, 1.000000}, + {1.215090, -0.000000, -0.608104, -0.000000, 2.157884, -0.000000, 1.221782, -0.000000, 1.000000}, + {1.187507, -0.000000, -0.570883, -0.000000, 1.997079, -0.000000, 1.120181, -0.000000, 1.000000}, + {1.159110, -0.000000, -0.535681, -0.000000, 1.859120, -0.000000, 1.024047, -0.000000, 1.000000}, + {1.133947, -0.000000, -0.502004, -0.000000, 1.737630, -0.000000, 0.936132, -0.000000, 1.000000}, + {1.108356, -0.000000, -0.470115, -0.000000, 1.629611, -0.000000, 0.853133, -0.000000, 1.000000}, + {1.087486, -0.000000, -0.439269, -0.000000, 1.533357, -0.000000, 0.778441, -0.000000, 1.000000}, + {1.064389, -0.000000, -0.408767, -0.000000, 1.447046, -0.000000, 0.704872, -0.000000, 1.000000}, + {1.044128, -0.000000, -0.379859, -0.000000, 1.370139, -0.000000, 0.637842, -0.000000, 1.000000}, + {1.026752, -0.000000, -0.351967, -0.000000, 1.298760, -0.000000, 0.575662, -0.000000, 1.000000}, + {1.004744, -0.000000, -0.323155, -0.000000, 1.233683, -0.000000, 0.512586, -0.000000, 1.000000}, + {0.979369, -0.000000, -0.291482, -0.000000, 1.172323, -0.000000, 0.448875, -0.000000, 1.000000}, + {0.955765, -0.000000, -0.260312, -0.000000, 1.116926, -0.000000, 0.390081, -0.000000, 1.000000}, + {0.935192, -0.000000, -0.230093, -0.000000, 1.067516, -0.000000, 0.336411, -0.000000, 1.000000}, + {0.909028, -0.000000, -0.200744, -0.000000, 1.019669, -0.000000, 0.284630, -0.000000, 1.000000}, + {0.886791, -0.000000, -0.172159, -0.000000, 0.977862, -0.000000, 0.238740, -0.000000, 1.000000}, + {0.866524, -0.000000, -0.144931, -0.000000, 0.939862, -0.000000, 0.196845, -0.000000, 1.000000}, + {0.851267, -0.000000, -0.118396, -0.000000, 0.910501, -0.000000, 0.160555, -0.000000, 1.000000}, + {0.836332, -0.000000, -0.092470, -0.000000, 0.885691, -0.000000, 0.127088, -0.000000, 1.000000}, + {0.826518, -0.000000, -0.067673, -0.000000, 0.864291, -0.000000, 0.094333, -0.000000, 1.000000}, + {0.822121, -0.000000, -0.043668, -0.000000, 0.846269, -0.000000, 0.061727, -0.000000, 1.000000}, + {0.819036, -0.000000, -0.020758, -0.000000, 0.830123, -0.000000, 0.030026, -0.000000, 1.000000}, + {0.815276, -0.000000, 0.002054, -0.000000, 0.815260, -0.000000, -0.001032, -0.000000, 1.000000}, + {561.883667, -0.000000, -2.372193, -0.000000, 2574.354492, -0.000000, 1332.924683, -0.000000, 1.000000}, + {561.883667, -0.000000, -2.372193, -0.000000, 2574.354492, -0.000000, 1332.924683, -0.000000, 1.000000}, + {555.820129, -0.000000, -2.372194, -0.000000, 2574.354736, -0.000000, 1318.537109, -0.000000, 1.000000}, + {220.281784, -0.000000, -2.371958, -0.000000, 1462.253174, -0.000000, 522.530762, -0.000000, 1.000000}, + {124.201653, -0.000000, -2.371346, -0.000000, 819.630859, -0.000000, 294.612000, -0.000000, 1.000000}, + {79.289734, -0.000000, -2.370037, -0.000000, 525.143250, -0.000000, 188.088806, -0.000000, 1.000000}, + {55.047886, -0.000000, -2.367670, -0.000000, 364.698517, -0.000000, 130.568375, -0.000000, 1.000000}, + {40.397610, -0.000000, -2.363784, -0.000000, 267.540436, -0.000000, 95.807053, -0.000000, 1.000000}, + {30.873516, -0.000000, -2.357851, -0.000000, 204.378632, -0.000000, 73.204865, -0.000000, 1.000000}, + {24.330233, -0.000000, -2.349277, -0.000000, 160.947327, -0.000000, 57.672913, -0.000000, 1.000000}, + {19.635122, -0.000000, -2.337193, -0.000000, 129.779053, -0.000000, 46.524712, -0.000000, 1.000000}, + {16.140512, -0.000000, -2.314546, -0.000000, 106.507278, -0.000000, 38.222347, -0.000000, 1.000000}, + {13.471733, -0.000000, -2.290206, -0.000000, 88.717796, -0.000000, 31.877861, -0.000000, 1.000000}, + {11.385731, -0.000000, -2.262814, -0.000000, 74.812531, -0.000000, 26.913906, -0.000000, 1.000000}, + {9.723210, -0.000000, -2.227956, -0.000000, 63.686466, -0.000000, 22.952801, -0.000000, 1.000000}, + {8.377718, -0.000000, -2.188186, -0.000000, 54.641895, -0.000000, 19.741394, -0.000000, 1.000000}, + {7.275503, -0.000000, -2.145044, -0.000000, 47.198776, -0.000000, 17.104599, -0.000000, 1.000000}, + {6.361020, -0.000000, -2.091993, -0.000000, 40.946705, -0.000000, 14.910710, -0.000000, 1.000000}, + {5.595813, -0.000000, -2.038194, -0.000000, 35.699799, -0.000000, 13.066761, -0.000000, 1.000000}, + {4.959548, -0.000000, -1.978449, -0.000000, 31.195763, -0.000000, 11.523515, -0.000000, 1.000000}, + {4.418256, -0.000000, -1.917762, -0.000000, 27.345129, -0.000000, 10.202260, -0.000000, 1.000000}, + {3.971417, -0.000000, -1.850544, -0.000000, 23.970930, -0.000000, 9.097040, -0.000000, 1.000000}, + {3.578974, -0.000000, -1.780140, -0.000000, 21.051313, -0.000000, 8.117160, -0.000000, 1.000000}, + {3.264671, -0.000000, -1.710932, -0.000000, 18.465061, -0.000000, 7.311978, -0.000000, 1.000000}, + {2.974657, -0.000000, -1.641593, -0.000000, 16.245468, -0.000000, 6.562681, -0.000000, 1.000000}, + {2.742392, -0.000000, -1.571622, -0.000000, 14.267390, -0.000000, 5.941258, -0.000000, 1.000000}, + {2.543485, -0.000000, -1.501255, -0.000000, 12.535033, -0.000000, 5.392533, -0.000000, 1.000000}, + {2.359228, -0.000000, -1.431597, -0.000000, 11.032725, -0.000000, 4.880836, -0.000000, 1.000000}, + {2.195821, -0.000000, -1.362259, -0.000000, 9.735834, -0.000000, 4.416909, -0.000000, 1.000000}, + {2.059949, -0.000000, -1.293351, -0.000000, 8.579062, -0.000000, 4.018088, -0.000000, 1.000000}, + {1.941084, -0.000000, -1.227354, -0.000000, 7.574182, -0.000000, 3.658072, -0.000000, 1.000000}, + {1.835384, -0.000000, -1.164937, -0.000000, 6.709195, -0.000000, 3.329049, -0.000000, 1.000000}, + {1.741773, -0.000000, -1.104218, -0.000000, 5.952015, -0.000000, 3.035784, -0.000000, 1.000000}, + {1.655820, -0.000000, -1.044862, -0.000000, 5.298123, -0.000000, 2.762919, -0.000000, 1.000000}, + {1.580213, -0.000000, -0.987338, -0.000000, 4.727161, -0.000000, 2.517756, -0.000000, 1.000000}, + {1.511588, -0.000000, -0.932578, -0.000000, 4.234377, -0.000000, 2.295705, -0.000000, 1.000000}, + {1.458300, -0.000000, -0.879306, -0.000000, 3.799523, -0.000000, 2.104888, -0.000000, 1.000000}, + {1.404009, -0.000000, -0.827517, -0.000000, 3.426577, -0.000000, 1.921788, -0.000000, 1.000000}, + {1.352626, -0.000000, -0.779565, -0.000000, 3.106237, -0.000000, 1.752501, -0.000000, 1.000000}, + {1.306817, -0.000000, -0.733467, -0.000000, 2.825721, -0.000000, 1.599079, -0.000000, 1.000000}, + {1.271053, -0.000000, -0.689857, -0.000000, 2.577658, -0.000000, 1.466005, -0.000000, 1.000000}, + {1.237855, -0.000000, -0.648652, -0.000000, 2.363580, -0.000000, 1.344115, -0.000000, 1.000000}, + {1.202994, -0.000000, -0.608877, -0.000000, 2.179758, -0.000000, 1.226534, -0.000000, 1.000000}, + {1.171368, -0.000000, -0.570961, -0.000000, 2.018505, -0.000000, 1.119002, -0.000000, 1.000000}, + {1.147960, -0.000000, -0.534654, -0.000000, 1.872719, -0.000000, 1.025949, -0.000000, 1.000000}, + {1.122561, -0.000000, -0.499815, -0.000000, 1.747553, -0.000000, 0.935527, -0.000000, 1.000000}, + {1.096977, -0.000000, -0.467389, -0.000000, 1.636278, -0.000000, 0.850964, -0.000000, 1.000000}, + {1.076256, -0.000000, -0.436104, -0.000000, 1.537529, -0.000000, 0.775857, -0.000000, 1.000000}, + {1.054496, -0.000000, -0.406137, -0.000000, 1.450749, -0.000000, 0.703234, -0.000000, 1.000000}, + {1.033806, -0.000000, -0.376303, -0.000000, 1.371762, -0.000000, 0.634744, -0.000000, 1.000000}, + {1.016144, -0.000000, -0.348055, -0.000000, 1.301348, -0.000000, 0.571584, -0.000000, 1.000000}, + {0.996595, -0.000000, -0.321551, -0.000000, 1.237378, -0.000000, 0.511230, -0.000000, 1.000000}, + {0.973683, -0.000000, -0.293872, -0.000000, 1.177277, -0.000000, 0.451901, -0.000000, 1.000000}, + {0.952858, -0.000000, -0.265573, -0.000000, 1.121921, -0.000000, 0.395157, -0.000000, 1.000000}, + {0.932103, -0.000000, -0.234927, -0.000000, 1.070360, -0.000000, 0.340860, -0.000000, 1.000000}, + {0.906343, -0.000000, -0.205238, -0.000000, 1.020510, -0.000000, 0.288028, -0.000000, 1.000000}, + {0.883492, -0.000000, -0.175993, -0.000000, 0.976709, -0.000000, 0.241092, -0.000000, 1.000000}, + {0.863536, -0.000000, -0.147622, -0.000000, 0.938731, -0.000000, 0.199073, -0.000000, 1.000000}, + {0.847930, -0.000000, -0.120674, -0.000000, 0.907943, -0.000000, 0.161710, -0.000000, 1.000000}, + {0.831768, -0.000000, -0.094574, -0.000000, 0.881993, -0.000000, 0.127969, -0.000000, 1.000000}, + {0.821893, -0.000000, -0.069053, -0.000000, 0.860528, -0.000000, 0.095084, -0.000000, 1.000000}, + {0.817158, -0.000000, -0.044333, -0.000000, 0.841729, -0.000000, 0.062147, -0.000000, 1.000000}, + {0.814238, -0.000000, -0.020307, -0.000000, 0.825477, -0.000000, 0.029873, -0.000000, 1.000000}, + {0.810121, -0.000000, 0.002974, -0.000000, 0.810311, -0.000000, -0.001535, -0.000000, 1.000000}, + {576.155396, -0.000000, -2.547854, -0.000000, 2737.071289, -0.000000, 1467.987549, -0.000000, 1.000000}, + {576.155396, -0.000000, -2.547854, -0.000000, 2737.071289, -0.000000, 1467.987549, -0.000000, 1.000000}, + {570.679626, -0.000000, -2.547851, -0.000000, 2737.068115, -0.000000, 1454.044189, -0.000000, 1.000000}, + {219.949402, -0.000000, -2.547569, -0.000000, 1652.645996, -0.000000, 560.372742, -0.000000, 1.000000}, + {124.049660, -0.000000, -2.546798, -0.000000, 928.846924, -0.000000, 316.036011, -0.000000, 1.000000}, + {79.356262, -0.000000, -2.545179, -0.000000, 592.101196, -0.000000, 202.193970, -0.000000, 1.000000}, + {55.019466, -0.000000, -2.542244, -0.000000, 412.138947, -0.000000, 140.161835, -0.000000, 1.000000}, + {40.381809, -0.000000, -2.537436, -0.000000, 302.276550, -0.000000, 102.856575, -0.000000, 1.000000}, + {30.849314, -0.000000, -2.530093, -0.000000, 230.778442, -0.000000, 78.558495, -0.000000, 1.000000}, + {24.298800, -0.000000, -2.519463, -0.000000, 181.682220, -0.000000, 61.856510, -0.000000, 1.000000}, + {19.596741, -0.000000, -2.503993, -0.000000, 146.369858, -0.000000, 49.862972, -0.000000, 1.000000}, + {16.090612, -0.000000, -2.474526, -0.000000, 119.922760, -0.000000, 40.914909, -0.000000, 1.000000}, + {13.414685, -0.000000, -2.445985, -0.000000, 99.772415, -0.000000, 34.080334, -0.000000, 1.000000}, + {11.326571, -0.000000, -2.415291, -0.000000, 84.030655, -0.000000, 28.740780, -0.000000, 1.000000}, + {9.656653, -0.000000, -2.370714, -0.000000, 71.358482, -0.000000, 24.465014, -0.000000, 1.000000}, + {8.307189, -0.000000, -2.326006, -0.000000, 61.118118, -0.000000, 21.002472, -0.000000, 1.000000}, + {7.199588, -0.000000, -2.270571, -0.000000, 52.623745, -0.000000, 18.153734, -0.000000, 1.000000}, + {6.282018, -0.000000, -2.211361, -0.000000, 45.534695, -0.000000, 15.785805, -0.000000, 1.000000}, + {5.522021, -0.000000, -2.146492, -0.000000, 39.536274, -0.000000, 13.813814, -0.000000, 1.000000}, + {4.882924, -0.000000, -2.078670, -0.000000, 34.440823, -0.000000, 12.144946, -0.000000, 1.000000}, + {4.356023, -0.000000, -2.006198, -0.000000, 30.023258, -0.000000, 10.753566, -0.000000, 1.000000}, + {3.898880, -0.000000, -1.930101, -0.000000, 26.226927, -0.000000, 9.534962, -0.000000, 1.000000}, + {3.531555, -0.000000, -1.850331, -0.000000, 22.867672, -0.000000, 8.535707, -0.000000, 1.000000}, + {3.198603, -0.000000, -1.772878, -0.000000, 20.004835, -0.000000, 7.619294, -0.000000, 1.000000}, + {2.933550, -0.000000, -1.695997, -0.000000, 17.472128, -0.000000, 6.864677, -0.000000, 1.000000}, + {2.701499, -0.000000, -1.618183, -0.000000, 15.259388, -0.000000, 6.191448, -0.000000, 1.000000}, + {2.490056, -0.000000, -1.541568, -0.000000, 13.372395, -0.000000, 5.570883, -0.000000, 1.000000}, + {2.317339, -0.000000, -1.466060, -0.000000, 11.708906, -0.000000, 5.042511, -0.000000, 1.000000}, + {2.167865, -0.000000, -1.391161, -0.000000, 10.251340, -0.000000, 4.573291, -0.000000, 1.000000}, + {2.034562, -0.000000, -1.318470, -0.000000, 8.998850, -0.000000, 4.146386, -0.000000, 1.000000}, + {1.915546, -0.000000, -1.248121, -0.000000, 7.919498, -0.000000, 3.760329, -0.000000, 1.000000}, + {1.811551, -0.000000, -1.182497, -0.000000, 6.981235, -0.000000, 3.414596, -0.000000, 1.000000}, + {1.718818, -0.000000, -1.118587, -0.000000, 6.178648, -0.000000, 3.102079, -0.000000, 1.000000}, + {1.635832, -0.000000, -1.057053, -0.000000, 5.475736, -0.000000, 2.820240, -0.000000, 1.000000}, + {1.560237, -0.000000, -0.997972, -0.000000, 4.873555, -0.000000, 2.561483, -0.000000, 1.000000}, + {1.492896, -0.000000, -0.941521, -0.000000, 4.354918, -0.000000, 2.328868, -0.000000, 1.000000}, + {1.432661, -0.000000, -0.886628, -0.000000, 3.903405, -0.000000, 2.119366, -0.000000, 1.000000}, + {1.386325, -0.000000, -0.834151, -0.000000, 3.505340, -0.000000, 1.940481, -0.000000, 1.000000}, + {1.339124, -0.000000, -0.783834, -0.000000, 3.168668, -0.000000, 1.770534, -0.000000, 1.000000}, + {1.292755, -0.000000, -0.736675, -0.000000, 2.876822, -0.000000, 1.611066, -0.000000, 1.000000}, + {1.253299, -0.000000, -0.691708, -0.000000, 2.619975, -0.000000, 1.469811, -0.000000, 1.000000}, + {1.225671, -0.000000, -0.649674, -0.000000, 2.395588, -0.000000, 1.350131, -0.000000, 1.000000}, + {1.190501, -0.000000, -0.609351, -0.000000, 2.204555, -0.000000, 1.229164, -0.000000, 1.000000}, + {1.158919, -0.000000, -0.570638, -0.000000, 2.035227, -0.000000, 1.120084, -0.000000, 1.000000}, + {1.134398, -0.000000, -0.533575, -0.000000, 1.890159, -0.000000, 1.024165, -0.000000, 1.000000}, + {1.111440, -0.000000, -0.498114, -0.000000, 1.758849, -0.000000, 0.935233, -0.000000, 1.000000}, + {1.086176, -0.000000, -0.464332, -0.000000, 1.644120, -0.000000, 0.849060, -0.000000, 1.000000}, + {1.065165, -0.000000, -0.432413, -0.000000, 1.541869, -0.000000, 0.772161, -0.000000, 1.000000}, + {1.043913, -0.000000, -0.401934, -0.000000, 1.452574, -0.000000, 0.698629, -0.000000, 1.000000}, + {1.023994, -0.000000, -0.372557, -0.000000, 1.373027, -0.000000, 0.631276, -0.000000, 1.000000}, + {1.007105, -0.000000, -0.343961, -0.000000, 1.301265, -0.000000, 0.568990, -0.000000, 1.000000}, + {0.985595, -0.000000, -0.316279, -0.000000, 1.237189, -0.000000, 0.506592, -0.000000, 1.000000}, + {0.965932, -0.000000, -0.290229, -0.000000, 1.176849, -0.000000, 0.449525, -0.000000, 1.000000}, + {0.947778, -0.000000, -0.265034, -0.000000, 1.123219, -0.000000, 0.396264, -0.000000, 1.000000}, + {0.928999, -0.000000, -0.237887, -0.000000, 1.072133, -0.000000, 0.344178, -0.000000, 1.000000}, + {0.906132, -0.000000, -0.210059, -0.000000, 1.022744, -0.000000, 0.293002, -0.000000, 1.000000}, + {0.881884, -0.000000, -0.180829, -0.000000, 0.976437, -0.000000, 0.244573, -0.000000, 1.000000}, + {0.861608, -0.000000, -0.152207, -0.000000, 0.937424, -0.000000, 0.201887, -0.000000, 1.000000}, + {0.844634, -0.000000, -0.124227, -0.000000, 0.905560, -0.000000, 0.163576, -0.000000, 1.000000}, + {0.828255, -0.000000, -0.097599, -0.000000, 0.878795, -0.000000, 0.129343, -0.000000, 1.000000}, + {0.817685, -0.000000, -0.071521, -0.000000, 0.856518, -0.000000, 0.096351, -0.000000, 1.000000}, + {0.812417, -0.000000, -0.046059, -0.000000, 0.837175, -0.000000, 0.062946, -0.000000, 1.000000}, + {0.809044, -0.000000, -0.021396, -0.000000, 0.820474, -0.000000, 0.030318, -0.000000, 1.000000}, + {0.804879, -0.000000, 0.002828, -0.000000, 0.805044, -0.000000, -0.001440, -0.000000, 1.000000}, + {591.979065, -0.000000, -2.747348, -0.000000, 2923.682129, -0.000000, 1626.421753, -0.000000, 1.000000}, + {591.979065, -0.000000, -2.747348, -0.000000, 2923.682129, -0.000000, 1626.421753, -0.000000, 1.000000}, + {585.857239, -0.000000, -2.747350, -0.000000, 2923.684814, -0.000000, 1609.603516, -0.000000, 1.000000}, + {220.596573, -0.000000, -2.746992, -0.000000, 1883.560547, -0.000000, 606.021301, -0.000000, 1.000000}, + {124.091286, -0.000000, -2.746026, -0.000000, 1060.800293, -0.000000, 340.915314, -0.000000, 1.000000}, + {79.291206, -0.000000, -2.744001, -0.000000, 677.687866, -0.000000, 217.823547, -0.000000, 1.000000}, + {55.000206, -0.000000, -2.740324, -0.000000, 470.018585, -0.000000, 151.078918, -0.000000, 1.000000}, + {40.352585, -0.000000, -2.734293, -0.000000, 344.664581, -0.000000, 110.824989, -0.000000, 1.000000}, + {30.819353, -0.000000, -2.725093, -0.000000, 263.048004, -0.000000, 84.619637, -0.000000, 1.000000}, + {24.259277, -0.000000, -2.711737, -0.000000, 206.912613, -0.000000, 66.582367, -0.000000, 1.000000}, + {19.544426, -0.000000, -2.688740, -0.000000, 166.451782, -0.000000, 53.611942, -0.000000, 1.000000}, + {16.031746, -0.000000, -2.657396, -0.000000, 136.256454, -0.000000, 43.942513, -0.000000, 1.000000}, + {13.348059, -0.000000, -2.623393, -0.000000, 113.201004, -0.000000, 36.548397, -0.000000, 1.000000}, + {11.250923, -0.000000, -2.582639, -0.000000, 95.119232, -0.000000, 30.763483, -0.000000, 1.000000}, + {9.576438, -0.000000, -2.530882, -0.000000, 80.600281, -0.000000, 26.136324, -0.000000, 1.000000}, + {8.221527, -0.000000, -2.475935, -0.000000, 68.837944, -0.000000, 22.384205, -0.000000, 1.000000}, + {7.113983, -0.000000, -2.409505, -0.000000, 59.067413, -0.000000, 19.308332, -0.000000, 1.000000}, + {6.197548, -0.000000, -2.338610, -0.000000, 50.926388, -0.000000, 16.751787, -0.000000, 1.000000}, + {5.440971, -0.000000, -2.262158, -0.000000, 44.025623, -0.000000, 14.628505, -0.000000, 1.000000}, + {4.810040, -0.000000, -2.183774, -0.000000, 38.160038, -0.000000, 12.843379, -0.000000, 1.000000}, + {4.271906, -0.000000, -2.099138, -0.000000, 33.135784, -0.000000, 11.306775, -0.000000, 1.000000}, + {3.841789, -0.000000, -2.011097, -0.000000, 28.717783, -0.000000, 10.054306, -0.000000, 1.000000}, + {3.454507, -0.000000, -1.921342, -0.000000, 24.955898, -0.000000, 8.917191, -0.000000, 1.000000}, + {3.152499, -0.000000, -1.835073, -0.000000, 21.643391, -0.000000, 7.997777, -0.000000, 1.000000}, + {2.881393, -0.000000, -1.748274, -0.000000, 18.804960, -0.000000, 7.161386, -0.000000, 1.000000}, + {2.646318, -0.000000, -1.662911, -0.000000, 16.357586, -0.000000, 6.421481, -0.000000, 1.000000}, + {2.453516, -0.000000, -1.579613, -0.000000, 14.224945, -0.000000, 5.790412, -0.000000, 1.000000}, + {2.279099, -0.000000, -1.497639, -0.000000, 12.393144, -0.000000, 5.215179, -0.000000, 1.000000}, + {2.132395, -0.000000, -1.418428, -0.000000, 10.806620, -0.000000, 4.713103, -0.000000, 1.000000}, + {2.000552, -0.000000, -1.341211, -0.000000, 9.451211, -0.000000, 4.258870, -0.000000, 1.000000}, + {1.883975, -0.000000, -1.267610, -0.000000, 8.279186, -0.000000, 3.849678, -0.000000, 1.000000}, + {1.781922, -0.000000, -1.197456, -0.000000, 7.275274, -0.000000, 3.485601, -0.000000, 1.000000}, + {1.690599, -0.000000, -1.131133, -0.000000, 6.411116, -0.000000, 3.156461, -0.000000, 1.000000}, + {1.609352, -0.000000, -1.067260, -0.000000, 5.665935, -0.000000, 2.861347, -0.000000, 1.000000}, + {1.536435, -0.000000, -1.006782, -0.000000, 5.026215, -0.000000, 2.595317, -0.000000, 1.000000}, + {1.473972, -0.000000, -0.948499, -0.000000, 4.474440, -0.000000, 2.359128, -0.000000, 1.000000}, + {1.415006, -0.000000, -0.892800, -0.000000, 3.999731, -0.000000, 2.142897, -0.000000, 1.000000}, + {1.362257, -0.000000, -0.839350, -0.000000, 3.587323, -0.000000, 1.948521, -0.000000, 1.000000}, + {1.321058, -0.000000, -0.788246, -0.000000, 3.232098, -0.000000, 1.781589, -0.000000, 1.000000}, + {1.278192, -0.000000, -0.739176, -0.000000, 2.923230, -0.000000, 1.622009, -0.000000, 1.000000}, + {1.237881, -0.000000, -0.693319, -0.000000, 2.663199, -0.000000, 1.474434, -0.000000, 1.000000}, + {1.207696, -0.000000, -0.650035, -0.000000, 2.429032, -0.000000, 1.348468, -0.000000, 1.000000}, + {1.178601, -0.000000, -0.608997, -0.000000, 2.228594, -0.000000, 1.232671, -0.000000, 1.000000}, + {1.147043, -0.000000, -0.569985, -0.000000, 2.055526, -0.000000, 1.120635, -0.000000, 1.000000}, + {1.121972, -0.000000, -0.532453, -0.000000, 1.901420, -0.000000, 1.022556, -0.000000, 1.000000}, + {1.100569, -0.000000, -0.496317, -0.000000, 1.768029, -0.000000, 0.933909, -0.000000, 1.000000}, + {1.075219, -0.000000, -0.461706, -0.000000, 1.651654, -0.000000, 0.846179, -0.000000, 1.000000}, + {1.054461, -0.000000, -0.428867, -0.000000, 1.546500, -0.000000, 0.768466, -0.000000, 1.000000}, + {1.032911, -0.000000, -0.397718, -0.000000, 1.454769, -0.000000, 0.694165, -0.000000, 1.000000}, + {1.013181, -0.000000, -0.367858, -0.000000, 1.372598, -0.000000, 0.626156, -0.000000, 1.000000}, + {0.996504, -0.000000, -0.339273, -0.000000, 1.300198, -0.000000, 0.563517, -0.000000, 1.000000}, + {0.977925, -0.000000, -0.311489, -0.000000, 1.235241, -0.000000, 0.504684, -0.000000, 1.000000}, + {0.957146, -0.000000, -0.284534, -0.000000, 1.174922, -0.000000, 0.445710, -0.000000, 1.000000}, + {0.939880, -0.000000, -0.258582, -0.000000, 1.119166, -0.000000, 0.392739, -0.000000, 1.000000}, + {0.922315, -0.000000, -0.234026, -0.000000, 1.068956, -0.000000, 0.343095, -0.000000, 1.000000}, + {0.901600, -0.000000, -0.209740, -0.000000, 1.021756, -0.000000, 0.294328, -0.000000, 1.000000}, + {0.879210, -0.000000, -0.184296, -0.000000, 0.976296, -0.000000, 0.247898, -0.000000, 1.000000}, + {0.859167, -0.000000, -0.157756, -0.000000, 0.936724, -0.000000, 0.205469, -0.000000, 1.000000}, + {0.841163, -0.000000, -0.129551, -0.000000, 0.903177, -0.000000, 0.166426, -0.000000, 1.000000}, + {0.825317, -0.000000, -0.101891, -0.000000, 0.875356, -0.000000, 0.131082, -0.000000, 1.000000}, + {0.813604, -0.000000, -0.074977, -0.000000, 0.852356, -0.000000, 0.097887, -0.000000, 1.000000}, + {0.807587, -0.000000, -0.049031, -0.000000, 0.832818, -0.000000, 0.064502, -0.000000, 1.000000}, + {0.804014, -0.000000, -0.023671, -0.000000, 0.815511, -0.000000, 0.031406, -0.000000, 1.000000}, + {0.799529, -0.000000, 0.000896, -0.000000, 0.799522, -0.000000, -0.000557, -0.000000, 1.000000}, + {609.309082, -0.000000, -2.976188, -0.000000, 3139.696533, -0.000000, 1813.482910, -0.000000, 1.000000}, + {609.309082, -0.000000, -2.976188, -0.000000, 3139.696533, -0.000000, 1813.482910, -0.000000, 1.000000}, + {599.533997, -0.000000, -2.976186, -0.000000, 3139.695068, -0.000000, 1784.326904, -0.000000, 1.000000}, + {220.005768, -0.000000, -2.975734, -0.000000, 2176.998535, -0.000000, 654.730896, -0.000000, 1.000000}, + {123.973022, -0.000000, -2.974506, -0.000000, 1222.066284, -0.000000, 368.964386, -0.000000, 1.000000}, + {79.281036, -0.000000, -2.971936, -0.000000, 781.406067, -0.000000, 235.946762, -0.000000, 1.000000}, + {55.192818, -0.000000, -2.967260, -0.000000, 540.474792, -0.000000, 164.247833, -0.000000, 1.000000}, + {40.323109, -0.000000, -2.959602, -0.000000, 397.124451, -0.000000, 119.960411, -0.000000, 1.000000}, + {30.776093, -0.000000, -2.947913, -0.000000, 303.002441, -0.000000, 91.530830, -0.000000, 1.000000}, + {24.212482, -0.000000, -2.930790, -0.000000, 238.076202, -0.000000, 71.976578, -0.000000, 1.000000}, + {19.479084, -0.000000, -2.898876, -0.000000, 191.196457, -0.000000, 57.867847, -0.000000, 1.000000}, + {15.959665, -0.000000, -2.862951, -0.000000, 156.304749, -0.000000, 47.369671, -0.000000, 1.000000}, + {13.270151, -0.000000, -2.822713, -0.000000, 129.607895, -0.000000, 39.338791, -0.000000, 1.000000}, + {11.160513, -0.000000, -2.766519, -0.000000, 108.577446, -0.000000, 33.030273, -0.000000, 1.000000}, + {9.480922, -0.000000, -2.708910, -0.000000, 91.815163, -0.000000, 27.997881, -0.000000, 1.000000}, + {8.122663, -0.000000, -2.637697, -0.000000, 78.090034, -0.000000, 23.917656, -0.000000, 1.000000}, + {7.008977, -0.000000, -2.559766, -0.000000, 66.786209, -0.000000, 20.561243, -0.000000, 1.000000}, + {6.096513, -0.000000, -2.473841, -0.000000, 57.295067, -0.000000, 17.796728, -0.000000, 1.000000}, + {5.343040, -0.000000, -2.386606, -0.000000, 49.325001, -0.000000, 15.497151, -0.000000, 1.000000}, + {4.708989, -0.000000, -2.291916, -0.000000, 42.511387, -0.000000, 13.544899, -0.000000, 1.000000}, + {4.201791, -0.000000, -2.193527, -0.000000, 36.615200, -0.000000, 11.955845, -0.000000, 1.000000}, + {3.752419, -0.000000, -2.092327, -0.000000, 31.602551, -0.000000, 10.535487, -0.000000, 1.000000}, + {3.400778, -0.000000, -1.992388, -0.000000, 27.209482, -0.000000, 9.388092, -0.000000, 1.000000}, + {3.075908, -0.000000, -1.894753, -0.000000, 23.517771, -0.000000, 8.322371, -0.000000, 1.000000}, + {2.822646, -0.000000, -1.798583, -0.000000, 20.275318, -0.000000, 7.457544, -0.000000, 1.000000}, + {2.596779, -0.000000, -1.705360, -0.000000, 17.520607, -0.000000, 6.671628, -0.000000, 1.000000}, + {2.408336, -0.000000, -1.614572, -0.000000, 15.142595, -0.000000, 5.996811, -0.000000, 1.000000}, + {2.228113, -0.000000, -1.527009, -0.000000, 13.147862, -0.000000, 5.359822, -0.000000, 1.000000}, + {2.082584, -0.000000, -1.442503, -0.000000, 11.407831, -0.000000, 4.823703, -0.000000, 1.000000}, + {1.954687, -0.000000, -1.361189, -0.000000, 9.930226, -0.000000, 4.343667, -0.000000, 1.000000}, + {1.843097, -0.000000, -1.284112, -0.000000, 8.663873, -0.000000, 3.915370, -0.000000, 1.000000}, + {1.741703, -0.000000, -1.210228, -0.000000, 7.587466, -0.000000, 3.529680, -0.000000, 1.000000}, + {1.653501, -0.000000, -1.141024, -0.000000, 6.654636, -0.000000, 3.190945, -0.000000, 1.000000}, + {1.574357, -0.000000, -1.075586, -0.000000, 5.863158, -0.000000, 2.883028, -0.000000, 1.000000}, + {1.514068, -0.000000, -1.013358, -0.000000, 5.180198, -0.000000, 2.625021, -0.000000, 1.000000}, + {1.451065, -0.000000, -0.953914, -0.000000, 4.595654, -0.000000, 2.379616, -0.000000, 1.000000}, + {1.397773, -0.000000, -0.897316, -0.000000, 4.092642, -0.000000, 2.165335, -0.000000, 1.000000}, + {1.344997, -0.000000, -0.843040, -0.000000, 3.668342, -0.000000, 1.961642, -0.000000, 1.000000}, + {1.303292, -0.000000, -0.791443, -0.000000, 3.291798, -0.000000, 1.788869, -0.000000, 1.000000}, + {1.265215, -0.000000, -0.741998, -0.000000, 2.976985, -0.000000, 1.630472, -0.000000, 1.000000}, + {1.225075, -0.000000, -0.694471, -0.000000, 2.701860, -0.000000, 1.481267, -0.000000, 1.000000}, + {1.194183, -0.000000, -0.649997, -0.000000, 2.462663, -0.000000, 1.350566, -0.000000, 1.000000}, + {1.165196, -0.000000, -0.608316, -0.000000, 2.254755, -0.000000, 1.231374, -0.000000, 1.000000}, + {1.135252, -0.000000, -0.568783, -0.000000, 2.073478, -0.000000, 1.120476, -0.000000, 1.000000}, + {1.111022, -0.000000, -0.530798, -0.000000, 1.916914, -0.000000, 1.020819, -0.000000, 1.000000}, + {1.089636, -0.000000, -0.494500, -0.000000, 1.778285, -0.000000, 0.930296, -0.000000, 1.000000}, + {1.064094, -0.000000, -0.459504, -0.000000, 1.658414, -0.000000, 0.842595, -0.000000, 1.000000}, + {1.043721, -0.000000, -0.425796, -0.000000, 1.551288, -0.000000, 0.764729, -0.000000, 1.000000}, + {1.022393, -0.000000, -0.393855, -0.000000, 1.458256, -0.000000, 0.690367, -0.000000, 1.000000}, + {1.002968, -0.000000, -0.363419, -0.000000, 1.373205, -0.000000, 0.621274, -0.000000, 1.000000}, + {0.986589, -0.000000, -0.334171, -0.000000, 1.297770, -0.000000, 0.558746, -0.000000, 1.000000}, + {0.967622, -0.000000, -0.305847, -0.000000, 1.230629, -0.000000, 0.498214, -0.000000, 1.000000}, + {0.948060, -0.000000, -0.278763, -0.000000, 1.170430, -0.000000, 0.441200, -0.000000, 1.000000}, + {0.930849, -0.000000, -0.252923, -0.000000, 1.115696, -0.000000, 0.388823, -0.000000, 1.000000}, + {0.913940, -0.000000, -0.227570, -0.000000, 1.065467, -0.000000, 0.339005, -0.000000, 1.000000}, + {0.892977, -0.000000, -0.203280, -0.000000, 1.017061, -0.000000, 0.290406, -0.000000, 1.000000}, + {0.872234, -0.000000, -0.179861, -0.000000, 0.971964, -0.000000, 0.245777, -0.000000, 1.000000}, + {0.854700, -0.000000, -0.157132, -0.000000, 0.933678, -0.000000, 0.205812, -0.000000, 1.000000}, + {0.838287, -0.000000, -0.132687, -0.000000, 0.900439, -0.000000, 0.168176, -0.000000, 1.000000}, + {0.822851, -0.000000, -0.107598, -0.000000, 0.871917, -0.000000, 0.133193, -0.000000, 1.000000}, + {0.809299, -0.000000, -0.080322, -0.000000, 0.848205, -0.000000, 0.100180, -0.000000, 1.000000}, + {0.802156, -0.000000, -0.053745, -0.000000, 0.827838, -0.000000, 0.066531, -0.000000, 1.000000}, + {0.798404, -0.000000, -0.027654, -0.000000, 0.810059, -0.000000, 0.033353, -0.000000, 1.000000}, + {0.794037, -0.000000, -0.002317, -0.000000, 0.793657, -0.000000, 0.001048, -0.000000, 1.000000}, + {627.807556, -0.000000, -3.241722, -0.000000, 3392.456543, -0.000000, 2035.267212, -0.000000, 1.000000}, + {627.807556, -0.000000, -3.241722, -0.000000, 3392.456543, -0.000000, 2035.267212, -0.000000, 1.000000}, + {621.662354, -0.000000, -3.241717, -0.000000, 3392.452148, -0.000000, 2015.334473, -0.000000, 1.000000}, + {219.384842, -0.000000, -3.241129, -0.000000, 2544.900879, -0.000000, 711.118835, -0.000000, 1.000000}, + {123.947891, -0.000000, -3.239542, -0.000000, 1426.574707, -0.000000, 401.798828, -0.000000, 1.000000}, + {79.003059, -0.000000, -3.236218, -0.000000, 917.752502, -0.000000, 256.063232, -0.000000, 1.000000}, + {54.984375, -0.000000, -3.230180, -0.000000, 632.198608, -0.000000, 178.201828, -0.000000, 1.000000}, + {40.294662, -0.000000, -3.220297, -0.000000, 463.117645, -0.000000, 130.561554, -0.000000, 1.000000}, + {30.729254, -0.000000, -3.205191, -0.000000, 353.041718, -0.000000, 99.531891, -0.000000, 1.000000}, + {24.151039, -0.000000, -3.182074, -0.000000, 277.121613, -0.000000, 78.181152, -0.000000, 1.000000}, + {19.399094, -0.000000, -3.140306, -0.000000, 222.113632, -0.000000, 62.750744, -0.000000, 1.000000}, + {15.868593, -0.000000, -3.097450, -0.000000, 181.281265, -0.000000, 51.274391, -0.000000, 1.000000}, + {13.170238, -0.000000, -3.046266, -0.000000, 149.986618, -0.000000, 42.492733, -0.000000, 1.000000}, + {11.050856, -0.000000, -2.978175, -0.000000, 125.258781, -0.000000, 35.585133, -0.000000, 1.000000}, + {9.365080, -0.000000, -2.904929, -0.000000, 105.521988, -0.000000, 30.077997, -0.000000, 1.000000}, + {7.999448, -0.000000, -2.817907, -0.000000, 89.409409, -0.000000, 25.602217, -0.000000, 1.000000}, + {6.891818, -0.000000, -2.722713, -0.000000, 76.069191, -0.000000, 21.957558, -0.000000, 1.000000}, + {5.980109, -0.000000, -2.621234, -0.000000, 64.915245, -0.000000, 18.938150, -0.000000, 1.000000}, + {5.236940, -0.000000, -2.514768, -0.000000, 55.498199, -0.000000, 16.453793, -0.000000, 1.000000}, + {4.622044, -0.000000, -2.403527, -0.000000, 47.479614, -0.000000, 14.373193, -0.000000, 1.000000}, + {4.097895, -0.000000, -2.289582, -0.000000, 40.671871, -0.000000, 12.577087, -0.000000, 1.000000}, + {3.686765, -0.000000, -2.174217, -0.000000, 34.736500, -0.000000, 11.129078, -0.000000, 1.000000}, + {3.311024, -0.000000, -2.061530, -0.000000, 29.781372, -0.000000, 9.799330, -0.000000, 1.000000}, + {3.020529, -0.000000, -1.952210, -0.000000, 25.481171, -0.000000, 8.724760, -0.000000, 1.000000}, + {2.764692, -0.000000, -1.846283, -0.000000, 21.836864, -0.000000, 7.766133, -0.000000, 1.000000}, + {2.532754, -0.000000, -1.744292, -0.000000, 18.781441, -0.000000, 6.894820, -0.000000, 1.000000}, + {2.349347, -0.000000, -1.646240, -0.000000, 16.140751, -0.000000, 6.170644, -0.000000, 1.000000}, + {2.188400, -0.000000, -1.552627, -0.000000, 13.893661, -0.000000, 5.528216, -0.000000, 1.000000}, + {2.046618, -0.000000, -1.462889, -0.000000, 11.998612, -0.000000, 4.956185, -0.000000, 1.000000}, + {1.915704, -0.000000, -1.377927, -0.000000, 10.397959, -0.000000, 4.436332, -0.000000, 1.000000}, + {1.812031, -0.000000, -1.297612, -0.000000, 9.029160, -0.000000, 3.997908, -0.000000, 1.000000}, + {1.713683, -0.000000, -1.221086, -0.000000, 7.877707, -0.000000, 3.593457, -0.000000, 1.000000}, + {1.626020, -0.000000, -1.148731, -0.000000, 6.891469, -0.000000, 3.233786, -0.000000, 1.000000}, + {1.549033, -0.000000, -1.081457, -0.000000, 6.053651, -0.000000, 2.917126, -0.000000, 1.000000}, + {1.481601, -0.000000, -1.017843, -0.000000, 5.337873, -0.000000, 2.636702, -0.000000, 1.000000}, + {1.429952, -0.000000, -0.957599, -0.000000, 4.717435, -0.000000, 2.399858, -0.000000, 1.000000}, + {1.377009, -0.000000, -0.899917, -0.000000, 4.189492, -0.000000, 2.173976, -0.000000, 1.000000}, + {1.327084, -0.000000, -0.845428, -0.000000, 3.747870, -0.000000, 1.971158, -0.000000, 1.000000}, + {1.281468, -0.000000, -0.793353, -0.000000, 3.362427, -0.000000, 1.788266, -0.000000, 1.000000}, + {1.248655, -0.000000, -0.743373, -0.000000, 3.024901, -0.000000, 1.633455, -0.000000, 1.000000}, + {1.211484, -0.000000, -0.696148, -0.000000, 2.742902, -0.000000, 1.484475, -0.000000, 1.000000}, + {1.177250, -0.000000, -0.650527, -0.000000, 2.496114, -0.000000, 1.348093, -0.000000, 1.000000}, + {1.152354, -0.000000, -0.607068, -0.000000, 2.280983, -0.000000, 1.230821, -0.000000, 1.000000}, + {1.123183, -0.000000, -0.567146, -0.000000, 2.094286, -0.000000, 1.118462, -0.000000, 1.000000}, + {1.099171, -0.000000, -0.528939, -0.000000, 1.931954, -0.000000, 1.018845, -0.000000, 1.000000}, + {1.078446, -0.000000, -0.492371, -0.000000, 1.789327, -0.000000, 0.927930, -0.000000, 1.000000}, + {1.053617, -0.000000, -0.457237, -0.000000, 1.666223, -0.000000, 0.839066, -0.000000, 1.000000}, + {1.033628, -0.000000, -0.423433, -0.000000, 1.556569, -0.000000, 0.760340, -0.000000, 1.000000}, + {1.012232, -0.000000, -0.390587, -0.000000, 1.460020, -0.000000, 0.685059, -0.000000, 1.000000}, + {0.993610, -0.000000, -0.359251, -0.000000, 1.373768, -0.000000, 0.616781, -0.000000, 1.000000}, + {0.977490, -0.000000, -0.329358, -0.000000, 1.297351, -0.000000, 0.554401, -0.000000, 1.000000}, + {0.957394, -0.000000, -0.300853, -0.000000, 1.228527, -0.000000, 0.492929, -0.000000, 1.000000}, + {0.938283, -0.000000, -0.273293, -0.000000, 1.166369, -0.000000, 0.436095, -0.000000, 1.000000}, + {0.920914, -0.000000, -0.246713, -0.000000, 1.109896, -0.000000, 0.383355, -0.000000, 1.000000}, + {0.904340, -0.000000, -0.221276, -0.000000, 1.059823, -0.000000, 0.334259, -0.000000, 1.000000}, + {0.883903, -0.000000, -0.196707, -0.000000, 1.011503, -0.000000, 0.286181, -0.000000, 1.000000}, + {0.864120, -0.000000, -0.172631, -0.000000, 0.966135, -0.000000, 0.242077, -0.000000, 1.000000}, + {0.846583, -0.000000, -0.149250, -0.000000, 0.927177, -0.000000, 0.201925, -0.000000, 1.000000}, + {0.831405, -0.000000, -0.126938, -0.000000, 0.894544, -0.000000, 0.165708, -0.000000, 1.000000}, + {0.817396, -0.000000, -0.105439, -0.000000, 0.866856, -0.000000, 0.132669, -0.000000, 1.000000}, + {0.804355, -0.000000, -0.082556, -0.000000, 0.843154, -0.000000, 0.100933, -0.000000, 1.000000}, + {0.796824, -0.000000, -0.059510, -0.000000, 0.822757, -0.000000, 0.069400, -0.000000, 1.000000}, + {0.792355, -0.000000, -0.033496, -0.000000, 0.804279, -0.000000, 0.036095, -0.000000, 1.000000}, + {0.787991, -0.000000, -0.007457, -0.000000, 0.787428, -0.000000, 0.003372, -0.000000, 1.000000}, + {647.389587, -0.000000, -3.553956, -0.000000, 3691.964600, -0.000000, 2300.922119, -0.000000, 1.000000}, + {647.389587, -0.000000, -3.553956, -0.000000, 3691.964600, -0.000000, 2300.922119, -0.000000, 1.000000}, + {641.360107, -0.000000, -3.553950, -0.000000, 3691.958496, -0.000000, 2279.477783, -0.000000, 1.000000}, + {218.265366, -0.000000, -3.553173, -0.000000, 3019.637451, -0.000000, 775.611084, -0.000000, 1.000000}, + {123.939934, -0.000000, -3.551092, -0.000000, 1689.255981, -0.000000, 440.471039, -0.000000, 1.000000}, + {79.242523, -0.000000, -3.546700, -0.000000, 1079.528564, -0.000000, 281.592926, -0.000000, 1.000000}, + {55.156261, -0.000000, -3.538764, -0.000000, 745.203552, -0.000000, 195.782745, -0.000000, 1.000000}, + {40.278416, -0.000000, -3.525745, -0.000000, 547.770447, -0.000000, 143.056854, -0.000000, 1.000000}, + {30.671082, -0.000000, -3.505799, -0.000000, 417.175690, -0.000000, 108.892921, -0.000000, 1.000000}, + {24.060156, -0.000000, -3.467991, -0.000000, 326.705200, -0.000000, 85.365662, -0.000000, 1.000000}, + {19.301073, -0.000000, -3.423038, -0.000000, 261.538574, -0.000000, 68.416756, -0.000000, 1.000000}, + {15.758986, -0.000000, -3.369555, -0.000000, 212.967697, -0.000000, 55.787514, -0.000000, 1.000000}, + {13.041642, -0.000000, -3.296016, -0.000000, 175.468872, -0.000000, 46.086483, -0.000000, 1.000000}, + {10.917159, -0.000000, -3.218122, -0.000000, 146.157425, -0.000000, 38.485374, -0.000000, 1.000000}, + {9.225276, -0.000000, -3.122428, -0.000000, 122.516930, -0.000000, 32.418598, -0.000000, 1.000000}, + {7.856061, -0.000000, -3.014502, -0.000000, 103.264420, -0.000000, 27.490166, -0.000000, 1.000000}, + {6.747007, -0.000000, -2.897921, -0.000000, 87.332703, -0.000000, 23.474401, -0.000000, 1.000000}, + {5.849679, -0.000000, -2.777437, -0.000000, 74.034065, -0.000000, 20.199072, -0.000000, 1.000000}, + {5.114362, -0.000000, -2.649389, -0.000000, 62.826855, -0.000000, 17.483440, -0.000000, 1.000000}, + {4.498669, -0.000000, -2.518499, -0.000000, 53.354347, -0.000000, 15.184261, -0.000000, 1.000000}, + {4.007944, -0.000000, -2.385035, -0.000000, 45.195190, -0.000000, 13.307499, -0.000000, 1.000000}, + {3.581131, -0.000000, -2.254358, -0.000000, 38.371635, -0.000000, 11.654906, -0.000000, 1.000000}, + {3.237079, -0.000000, -2.127479, -0.000000, 32.555920, -0.000000, 10.283057, -0.000000, 1.000000}, + {2.930858, -0.000000, -2.005708, -0.000000, 27.701151, -0.000000, 9.052230, -0.000000, 1.000000}, + {2.689690, -0.000000, -1.889617, -0.000000, 23.555668, -0.000000, 8.037099, -0.000000, 1.000000}, + {2.483467, -0.000000, -1.778557, -0.000000, 20.060087, -0.000000, 7.155442, -0.000000, 1.000000}, + {2.293832, -0.000000, -1.673535, -0.000000, 17.148470, -0.000000, 6.351363, -0.000000, 1.000000}, + {2.135620, -0.000000, -1.573599, -0.000000, 14.684332, -0.000000, 5.659710, -0.000000, 1.000000}, + {1.987061, -0.000000, -1.479354, -0.000000, 12.640908, -0.000000, 5.028449, -0.000000, 1.000000}, + {1.868026, -0.000000, -1.390879, -0.000000, 10.898802, -0.000000, 4.499014, -0.000000, 1.000000}, + {1.771079, -0.000000, -1.307645, -0.000000, 9.410772, -0.000000, 4.049167, -0.000000, 1.000000}, + {1.676226, -0.000000, -1.228918, -0.000000, 8.178362, -0.000000, 3.632594, -0.000000, 1.000000}, + {1.593909, -0.000000, -1.154423, -0.000000, 7.127514, -0.000000, 3.264067, -0.000000, 1.000000}, + {1.524403, -0.000000, -1.084977, -0.000000, 6.236141, -0.000000, 2.946008, -0.000000, 1.000000}, + {1.457701, -0.000000, -1.020340, -0.000000, 5.487920, -0.000000, 2.653812, -0.000000, 1.000000}, + {1.397869, -0.000000, -0.959165, -0.000000, 4.847727, -0.000000, 2.395974, -0.000000, 1.000000}, + {1.353524, -0.000000, -0.901146, -0.000000, 4.294834, -0.000000, 2.178798, -0.000000, 1.000000}, + {1.307459, -0.000000, -0.846153, -0.000000, 3.821842, -0.000000, 1.975281, -0.000000, 1.000000}, + {1.264822, -0.000000, -0.793965, -0.000000, 3.427145, -0.000000, 1.792382, -0.000000, 1.000000}, + {1.232861, -0.000000, -0.744066, -0.000000, 3.078772, -0.000000, 1.634613, -0.000000, 1.000000}, + {1.198096, -0.000000, -0.696585, -0.000000, 2.783012, -0.000000, 1.486259, -0.000000, 1.000000}, + {1.164023, -0.000000, -0.651000, -0.000000, 2.530066, -0.000000, 1.347213, -0.000000, 1.000000}, + {1.139180, -0.000000, -0.607608, -0.000000, 2.308247, -0.000000, 1.229578, -0.000000, 1.000000}, + {1.111229, -0.000000, -0.565667, -0.000000, 2.117224, -0.000000, 1.116433, -0.000000, 1.000000}, + {1.084021, -0.000000, -0.526840, -0.000000, 1.949802, -0.000000, 1.012064, -0.000000, 1.000000}, + {1.066097, -0.000000, -0.490156, -0.000000, 1.801883, -0.000000, 0.922837, -0.000000, 1.000000}, + {1.043552, -0.000000, -0.454714, -0.000000, 1.673110, -0.000000, 0.835639, -0.000000, 1.000000}, + {1.023415, -0.000000, -0.420670, -0.000000, 1.561875, -0.000000, 0.755595, -0.000000, 1.000000}, + {1.002639, -0.000000, -0.387887, -0.000000, 1.462044, -0.000000, 0.680924, -0.000000, 1.000000}, + {0.983821, -0.000000, -0.356239, -0.000000, 1.374733, -0.000000, 0.612270, -0.000000, 1.000000}, + {0.967302, -0.000000, -0.325740, -0.000000, 1.295897, -0.000000, 0.549230, -0.000000, 1.000000}, + {0.947598, -0.000000, -0.296622, -0.000000, 1.226382, -0.000000, 0.488305, -0.000000, 1.000000}, + {0.928112, -0.000000, -0.268374, -0.000000, 1.162806, -0.000000, 0.430749, -0.000000, 1.000000}, + {0.911786, -0.000000, -0.241309, -0.000000, 1.105636, -0.000000, 0.378463, -0.000000, 1.000000}, + {0.894347, -0.000000, -0.214930, -0.000000, 1.053365, -0.000000, 0.328932, -0.000000, 1.000000}, + {0.873960, -0.000000, -0.189724, -0.000000, 1.004209, -0.000000, 0.281304, -0.000000, 1.000000}, + {0.855796, -0.000000, -0.165473, -0.000000, 0.959591, -0.000000, 0.237673, -0.000000, 1.000000}, + {0.837609, -0.000000, -0.141919, -0.000000, 0.920479, -0.000000, 0.198007, -0.000000, 1.000000}, + {0.823842, -0.000000, -0.119185, -0.000000, 0.888295, -0.000000, 0.162131, -0.000000, 1.000000}, + {0.809707, -0.000000, -0.096579, -0.000000, 0.860153, -0.000000, 0.128809, -0.000000, 1.000000}, + {0.797911, -0.000000, -0.074969, -0.000000, 0.836638, -0.000000, 0.097869, -0.000000, 1.000000}, + {0.791218, -0.000000, -0.053931, -0.000000, 0.816275, -0.000000, 0.066670, -0.000000, 1.000000}, + {0.786383, -0.000000, -0.033321, -0.000000, 0.797938, -0.000000, 0.035935, -0.000000, 1.000000}, + {0.781418, -0.000000, -0.010912, -0.000000, 0.780861, -0.000000, 0.004979, -0.000000, 1.000000}, + {669.793640, -0.000000, -3.926907, -0.000000, 4052.233643, -0.000000, 2630.377197, -0.000000, 1.000000}, + {669.793640, -0.000000, -3.926907, -0.000000, 4052.233643, -0.000000, 2630.377197, -0.000000, 1.000000}, + {662.583923, -0.000000, -3.926905, -0.000000, 4052.232178, -0.000000, 2602.060547, -0.000000, 1.000000}, + {220.819077, -0.000000, -3.925857, -0.000000, 3622.162109, -0.000000, 867.089783, -0.000000, 1.000000}, + {123.817673, -0.000000, -3.923046, -0.000000, 2034.233154, -0.000000, 486.212982, -0.000000, 1.000000}, + {79.227966, -0.000000, -3.917133, -0.000000, 1302.296997, -0.000000, 311.076263, -0.000000, 1.000000}, + {55.249779, -0.000000, -3.906432, -0.000000, 900.683044, -0.000000, 216.477371, -0.000000, 1.000000}, + {40.206520, -0.000000, -3.888882, -0.000000, 658.625366, -0.000000, 157.687820, -0.000000, 1.000000}, + {30.587492, -0.000000, -3.861604, -0.000000, 501.091522, -0.000000, 119.964844, -0.000000, 1.000000}, + {23.948280, -0.000000, -3.808159, -0.000000, 391.395477, -0.000000, 93.850357, -0.000000, 1.000000}, + {19.172970, -0.000000, -3.751776, -0.000000, 312.602203, -0.000000, 75.050499, -0.000000, 1.000000}, + {15.616179, -0.000000, -3.682316, -0.000000, 253.770706, -0.000000, 61.030109, -0.000000, 1.000000}, + {12.883894, -0.000000, -3.589303, -0.000000, 208.295837, -0.000000, 50.240662, -0.000000, 1.000000}, + {10.749632, -0.000000, -3.484726, -0.000000, 172.584320, -0.000000, 41.794483, -0.000000, 1.000000}, + {9.049759, -0.000000, -3.365489, -0.000000, 143.919708, -0.000000, 35.044212, -0.000000, 1.000000}, + {7.683127, -0.000000, -3.228995, -0.000000, 120.468864, -0.000000, 29.591896, -0.000000, 1.000000}, + {6.586706, -0.000000, -3.090356, -0.000000, 101.165565, -0.000000, 25.184006, -0.000000, 1.000000}, + {5.702530, -0.000000, -2.941245, -0.000000, 84.986687, -0.000000, 21.591751, -0.000000, 1.000000}, + {4.968021, -0.000000, -2.787760, -0.000000, 71.481094, -0.000000, 18.574377, -0.000000, 1.000000}, + {4.386539, -0.000000, -2.631336, -0.000000, 59.968548, -0.000000, 16.132710, -0.000000, 1.000000}, + {3.894264, -0.000000, -2.479486, -0.000000, 50.395161, -0.000000, 14.031246, -0.000000, 1.000000}, + {3.490103, -0.000000, -2.329895, -0.000000, 42.329239, -0.000000, 12.267620, -0.000000, 1.000000}, + {3.141735, -0.000000, -2.188068, -0.000000, 35.638969, -0.000000, 10.725724, -0.000000, 1.000000}, + {2.859816, -0.000000, -2.054062, -0.000000, 29.993845, -0.000000, 9.442187, -0.000000, 1.000000}, + {2.620349, -0.000000, -1.926790, -0.000000, 25.331533, -0.000000, 8.325993, -0.000000, 1.000000}, + {2.398311, -0.000000, -1.807517, -0.000000, 21.489573, -0.000000, 7.313870, -0.000000, 1.000000}, + {2.223137, -0.000000, -1.695049, -0.000000, 18.238173, -0.000000, 6.476917, -0.000000, 1.000000}, + {2.072692, -0.000000, -1.589814, -0.000000, 15.523134, -0.000000, 5.755404, -0.000000, 1.000000}, + {1.939087, -0.000000, -1.491045, -0.000000, 13.267519, -0.000000, 5.116745, -0.000000, 1.000000}, + {1.822332, -0.000000, -1.399625, -0.000000, 11.394650, -0.000000, 4.555825, -0.000000, 1.000000}, + {1.720811, -0.000000, -1.314037, -0.000000, 9.823386, -0.000000, 4.068915, -0.000000, 1.000000}, + {1.630899, -0.000000, -1.233317, -0.000000, 8.492864, -0.000000, 3.640526, -0.000000, 1.000000}, + {1.553843, -0.000000, -1.157592, -0.000000, 7.376961, -0.000000, 3.268894, -0.000000, 1.000000}, + {1.490734, -0.000000, -1.086639, -0.000000, 6.433651, -0.000000, 2.950307, -0.000000, 1.000000}, + {1.432929, -0.000000, -1.020600, -0.000000, 5.638104, -0.000000, 2.666373, -0.000000, 1.000000}, + {1.374815, -0.000000, -0.958737, -0.000000, 4.965362, -0.000000, 2.400652, -0.000000, 1.000000}, + {1.325165, -0.000000, -0.900599, -0.000000, 4.395979, -0.000000, 2.171790, -0.000000, 1.000000}, + {1.286748, -0.000000, -0.845554, -0.000000, 3.904965, -0.000000, 1.975697, -0.000000, 1.000000}, + {1.248133, -0.000000, -0.793106, -0.000000, 3.492160, -0.000000, 1.791407, -0.000000, 1.000000}, + {1.209880, -0.000000, -0.743433, -0.000000, 3.133361, -0.000000, 1.624267, -0.000000, 1.000000}, + {1.183988, -0.000000, -0.696145, -0.000000, 2.825088, -0.000000, 1.484405, -0.000000, 1.000000}, + {1.150361, -0.000000, -0.650712, -0.000000, 2.563276, -0.000000, 1.345073, -0.000000, 1.000000}, + {1.124895, -0.000000, -0.607631, -0.000000, 2.334976, -0.000000, 1.225758, -0.000000, 1.000000}, + {1.100231, -0.000000, -0.566001, -0.000000, 2.137843, -0.000000, 1.114179, -0.000000, 1.000000}, + {1.072962, -0.000000, -0.526004, -0.000000, 1.964423, -0.000000, 1.008926, -0.000000, 1.000000}, + {1.053139, -0.000000, -0.487676, -0.000000, 1.813509, -0.000000, 0.916973, -0.000000, 1.000000}, + {1.032387, -0.000000, -0.452164, -0.000000, 1.682570, -0.000000, 0.831067, -0.000000, 1.000000}, + {1.013851, -0.000000, -0.418111, -0.000000, 1.567370, -0.000000, 0.752596, -0.000000, 1.000000}, + {0.992847, -0.000000, -0.385449, -0.000000, 1.464371, -0.000000, 0.677399, -0.000000, 1.000000}, + {0.973894, -0.000000, -0.353736, -0.000000, 1.374073, -0.000000, 0.607277, -0.000000, 1.000000}, + {0.957402, -0.000000, -0.323055, -0.000000, 1.294103, -0.000000, 0.544421, -0.000000, 1.000000}, + {0.937947, -0.000000, -0.293166, -0.000000, 1.222537, -0.000000, 0.483155, -0.000000, 1.000000}, + {0.921176, -0.000000, -0.264527, -0.000000, 1.158591, -0.000000, 0.427436, -0.000000, 1.000000}, + {0.902082, -0.000000, -0.236924, -0.000000, 1.099809, -0.000000, 0.373552, -0.000000, 1.000000}, + {0.884630, -0.000000, -0.209995, -0.000000, 1.047710, -0.000000, 0.324298, -0.000000, 1.000000}, + {0.864298, -0.000000, -0.184017, -0.000000, 0.996888, -0.000000, 0.276542, -0.000000, 1.000000}, + {0.846630, -0.000000, -0.158854, -0.000000, 0.951949, -0.000000, 0.233321, -0.000000, 1.000000}, + {0.829734, -0.000000, -0.134642, -0.000000, 0.912870, -0.000000, 0.193677, -0.000000, 1.000000}, + {0.814766, -0.000000, -0.111083, -0.000000, 0.880362, -0.000000, 0.158096, -0.000000, 1.000000}, + {0.800836, -0.000000, -0.088186, -0.000000, 0.852870, -0.000000, 0.125093, -0.000000, 1.000000}, + {0.790942, -0.000000, -0.065957, -0.000000, 0.829340, -0.000000, 0.093490, -0.000000, 1.000000}, + {0.783243, -0.000000, -0.044794, -0.000000, 0.808869, -0.000000, 0.062261, -0.000000, 1.000000}, + {0.778025, -0.000000, -0.023768, -0.000000, 0.789909, -0.000000, 0.031524, -0.000000, 1.000000}, + {0.773400, -0.000000, -0.003255, -0.000000, 0.772808, -0.000000, 0.001599, -0.000000, 1.000000}, + {694.468201, -0.000000, -4.380828, -0.000000, 4493.511719, -0.000000, 3042.534180, -0.000000, 1.000000}, + {694.468201, -0.000000, -4.380828, -0.000000, 4493.511719, -0.000000, 3042.534180, -0.000000, 1.000000}, + {686.339905, -0.000000, -4.380825, -0.000000, 4493.509277, -0.000000, 3006.936523, -0.000000, 1.000000}, + {219.687042, -0.000000, -4.379368, -0.000000, 4450.719238, -0.000000, 962.460938, -0.000000, 1.000000}, + {123.969559, -0.000000, -4.375468, -0.000000, 2499.999512, -0.000000, 543.001099, -0.000000, 1.000000}, + {79.169876, -0.000000, -4.367267, -0.000000, 1598.047729, -0.000000, 346.772888, -0.000000, 1.000000}, + {54.884480, -0.000000, -4.352409, -0.000000, 1108.550537, -0.000000, 239.909027, -0.000000, 1.000000}, + {40.191998, -0.000000, -4.328050, -0.000000, 804.701355, -0.000000, 175.753632, -0.000000, 1.000000}, + {30.433971, -0.000000, -4.284082, -0.000000, 612.600952, -0.000000, 133.125473, -0.000000, 1.000000}, + {23.807697, -0.000000, -4.220432, -0.000000, 478.025024, -0.000000, 104.030556, -0.000000, 1.000000}, + {19.013176, -0.000000, -4.146036, -0.000000, 380.591400, -0.000000, 82.960159, -0.000000, 1.000000}, + {15.426579, -0.000000, -4.043351, -0.000000, 307.380859, -0.000000, 67.175621, -0.000000, 1.000000}, + {12.682364, -0.000000, -3.929627, -0.000000, 251.247421, -0.000000, 55.071854, -0.000000, 1.000000}, + {10.536271, -0.000000, -3.791160, -0.000000, 206.838837, -0.000000, 45.579884, -0.000000, 1.000000}, + {8.839734, -0.000000, -3.634206, -0.000000, 171.094849, -0.000000, 38.043308, -0.000000, 1.000000}, + {7.486965, -0.000000, -3.468320, -0.000000, 142.060669, -0.000000, 31.994062, -0.000000, 1.000000}, + {6.403177, -0.000000, -3.292229, -0.000000, 118.070328, -0.000000, 27.104532, -0.000000, 1.000000}, + {5.523100, -0.000000, -3.109759, -0.000000, 98.170776, -0.000000, 23.082695, -0.000000, 1.000000}, + {4.831917, -0.000000, -2.924479, -0.000000, 81.442329, -0.000000, 19.855810, -0.000000, 1.000000}, + {4.250381, -0.000000, -2.743827, -0.000000, 67.674957, -0.000000, 17.101507, -0.000000, 1.000000}, + {3.757152, -0.000000, -2.567863, -0.000000, 56.290527, -0.000000, 14.737700, -0.000000, 1.000000}, + {3.377566, -0.000000, -2.398841, -0.000000, 46.732021, -0.000000, 12.844433, -0.000000, 1.000000}, + {3.050572, -0.000000, -2.241966, -0.000000, 38.919209, -0.000000, 11.195201, -0.000000, 1.000000}, + {2.758274, -0.000000, -2.094188, -0.000000, 32.562389, -0.000000, 9.731255, -0.000000, 1.000000}, + {2.531044, -0.000000, -1.957008, -0.000000, 27.230253, -0.000000, 8.550031, -0.000000, 1.000000}, + {2.327443, -0.000000, -1.829026, -0.000000, 22.900625, -0.000000, 7.494730, -0.000000, 1.000000}, + {2.159161, -0.000000, -1.710399, -0.000000, 19.302103, -0.000000, 6.611458, -0.000000, 1.000000}, + {2.012750, -0.000000, -1.600246, -0.000000, 16.353825, -0.000000, 5.840732, -0.000000, 1.000000}, + {1.886550, -0.000000, -1.498032, -0.000000, 13.905995, -0.000000, 5.174478, -0.000000, 1.000000}, + {1.774737, -0.000000, -1.403907, -0.000000, 11.876966, -0.000000, 4.595283, -0.000000, 1.000000}, + {1.677102, -0.000000, -1.316360, -0.000000, 10.216613, -0.000000, 4.087289, -0.000000, 1.000000}, + {1.596201, -0.000000, -1.234255, -0.000000, 8.792109, -0.000000, 3.661887, -0.000000, 1.000000}, + {1.519374, -0.000000, -1.157762, -0.000000, 7.616532, -0.000000, 3.275707, -0.000000, 1.000000}, + {1.452196, -0.000000, -1.086439, -0.000000, 6.628254, -0.000000, 2.938795, -0.000000, 1.000000}, + {1.402205, -0.000000, -1.019261, -0.000000, 5.789808, -0.000000, 2.661379, -0.000000, 1.000000}, + {1.351270, -0.000000, -0.956486, -0.000000, 5.087619, -0.000000, 2.401204, -0.000000, 1.000000}, + {1.302528, -0.000000, -0.898279, -0.000000, 4.495908, -0.000000, 2.165735, -0.000000, 1.000000}, + {1.267093, -0.000000, -0.843252, -0.000000, 3.985807, -0.000000, 1.970988, -0.000000, 1.000000}, + {1.231524, -0.000000, -0.791209, -0.000000, 3.555437, -0.000000, 1.790508, -0.000000, 1.000000}, + {1.194025, -0.000000, -0.741673, -0.000000, 3.186777, -0.000000, 1.620665, -0.000000, 1.000000}, + {1.166682, -0.000000, -0.694717, -0.000000, 2.869368, -0.000000, 1.477615, -0.000000, 1.000000}, + {1.136948, -0.000000, -0.649811, -0.000000, 2.600365, -0.000000, 1.341036, -0.000000, 1.000000}, + {1.112716, -0.000000, -0.606719, -0.000000, 2.364336, -0.000000, 1.221506, -0.000000, 1.000000}, + {1.089677, -0.000000, -0.565527, -0.000000, 2.159290, -0.000000, 1.112482, -0.000000, 1.000000}, + {1.062996, -0.000000, -0.526035, -0.000000, 1.983256, -0.000000, 1.005913, -0.000000, 1.000000}, + {1.044072, -0.000000, -0.487913, -0.000000, 1.828424, -0.000000, 0.915047, -0.000000, 1.000000}, + {1.022682, -0.000000, -0.451280, -0.000000, 1.693817, -0.000000, 0.828121, -0.000000, 1.000000}, + {1.003442, -0.000000, -0.416265, -0.000000, 1.574270, -0.000000, 0.748060, -0.000000, 1.000000}, + {0.983337, -0.000000, -0.382965, -0.000000, 1.468847, -0.000000, 0.673708, -0.000000, 1.000000}, + {0.964855, -0.000000, -0.351174, -0.000000, 1.375737, -0.000000, 0.604308, -0.000000, 1.000000}, + {0.948558, -0.000000, -0.320522, -0.000000, 1.294130, -0.000000, 0.540649, -0.000000, 1.000000}, + {0.928151, -0.000000, -0.290747, -0.000000, 1.219719, -0.000000, 0.478833, -0.000000, 1.000000}, + {0.911260, -0.000000, -0.261761, -0.000000, 1.153626, -0.000000, 0.422449, -0.000000, 1.000000}, + {0.892292, -0.000000, -0.233490, -0.000000, 1.092571, -0.000000, 0.369654, -0.000000, 1.000000}, + {0.874949, -0.000000, -0.206385, -0.000000, 1.038161, -0.000000, 0.319799, -0.000000, 1.000000}, + {0.855154, -0.000000, -0.179844, -0.000000, 0.987733, -0.000000, 0.272366, -0.000000, 1.000000}, + {0.837398, -0.000000, -0.153959, -0.000000, 0.942935, -0.000000, 0.229158, -0.000000, 1.000000}, + {0.819890, -0.000000, -0.128660, -0.000000, 0.902518, -0.000000, 0.189735, -0.000000, 1.000000}, + {0.798486, -0.000000, -0.104464, -0.000000, 0.868445, -0.000000, 0.153091, -0.000000, 1.000000}, + {0.784313, -0.000000, -0.081117, -0.000000, 0.841813, -0.000000, 0.121025, -0.000000, 1.000000}, + {0.776996, -0.000000, -0.058378, -0.000000, 0.818920, -0.000000, 0.089016, -0.000000, 1.000000}, + {0.773136, -0.000000, -0.036213, -0.000000, 0.799058, -0.000000, 0.057511, -0.000000, 1.000000}, + {0.769063, -0.000000, -0.014501, -0.000000, 0.780764, -0.000000, 0.026675, -0.000000, 1.000000}, + {0.764074, -0.000000, 0.006566, -0.000000, 0.763874, -0.000000, -0.003352, -0.000000, 1.000000}, + {721.985046, -0.000000, -4.946069, -0.000000, 5046.145996, -0.000000, 3571.211670, -0.000000, 1.000000}, + {721.985046, -0.000000, -4.946069, -0.000000, 5046.145996, -0.000000, 3571.211670, -0.000000, 1.000000}, + {714.985718, -0.000000, -4.946058, -0.000000, 5046.135742, -0.000000, 3536.660400, -0.000000, 1.000000}, + {232.125870, -0.000000, -4.943971, -0.000000, 5044.090820, -0.000000, 1148.170532, -0.000000, 1.000000}, + {123.873604, -0.000000, -4.938361, -0.000000, 3149.807617, -0.000000, 612.507385, -0.000000, 1.000000}, + {79.155502, -0.000000, -4.926561, -0.000000, 2012.432617, -0.000000, 391.393158, -0.000000, 1.000000}, + {54.743370, -0.000000, -4.905214, -0.000000, 1391.310547, -0.000000, 270.613251, -0.000000, 1.000000}, + {39.901684, -0.000000, -4.869965, -0.000000, 1014.800049, -0.000000, 197.096710, -0.000000, 1.000000}, + {30.294024, -0.000000, -4.799531, -0.000000, 767.817200, -0.000000, 149.533600, -0.000000, 1.000000}, + {23.608038, -0.000000, -4.718091, -0.000000, 597.033752, -0.000000, 116.387131, -0.000000, 1.000000}, + {18.787228, -0.000000, -4.611835, -0.000000, 473.238251, -0.000000, 92.445580, -0.000000, 1.000000}, + {15.179027, -0.000000, -4.479045, -0.000000, 380.186798, -0.000000, 74.498795, -0.000000, 1.000000}, + {12.417994, -0.000000, -4.319867, -0.000000, 308.464142, -0.000000, 60.725189, -0.000000, 1.000000}, + {10.276855, -0.000000, -4.134665, -0.000000, 251.735382, -0.000000, 50.000065, -0.000000, 1.000000}, + {8.584215, -0.000000, -3.934479, -0.000000, 206.273911, -0.000000, 41.477249, -0.000000, 1.000000}, + {7.247280, -0.000000, -3.722689, -0.000000, 169.325745, -0.000000, 34.679852, -0.000000, 1.000000}, + {6.180845, -0.000000, -3.501753, -0.000000, 138.977737, -0.000000, 29.194916, -0.000000, 1.000000}, + {5.320841, -0.000000, -3.277736, -0.000000, 113.964752, -0.000000, 24.704174, -0.000000, 1.000000}, + {4.651779, -0.000000, -3.059142, -0.000000, 93.273788, -0.000000, 21.118258, -0.000000, 1.000000}, + {4.087338, -0.000000, -2.848116, -0.000000, 76.500832, -0.000000, 18.057499, -0.000000, 1.000000}, + {3.633870, -0.000000, -2.645974, -0.000000, 62.704197, -0.000000, 15.535373, -0.000000, 1.000000}, + {3.239435, -0.000000, -2.458408, -0.000000, 51.632034, -0.000000, 13.342704, -0.000000, 1.000000}, + {2.935870, -0.000000, -2.284677, -0.000000, 42.461651, -0.000000, 11.585645, -0.000000, 1.000000}, + {2.668840, -0.000000, -2.124792, -0.000000, 35.115269, -0.000000, 10.048407, -0.000000, 1.000000}, + {2.433447, -0.000000, -1.977476, -0.000000, 29.214821, -0.000000, 8.716081, -0.000000, 1.000000}, + {2.237335, -0.000000, -1.842107, -0.000000, 24.375181, -0.000000, 7.597365, -0.000000, 1.000000}, + {2.075590, -0.000000, -1.718119, -0.000000, 20.449934, -0.000000, 6.658926, -0.000000, 1.000000}, + {1.938075, -0.000000, -1.604022, -0.000000, 17.212046, -0.000000, 5.863555, -0.000000, 1.000000}, + {1.817005, -0.000000, -1.499478, -0.000000, 14.572831, -0.000000, 5.173584, -0.000000, 1.000000}, + {1.716687, -0.000000, -1.403249, -0.000000, 12.395076, -0.000000, 4.591091, -0.000000, 1.000000}, + {1.635633, -0.000000, -1.314340, -0.000000, 10.569445, -0.000000, 4.104249, -0.000000, 1.000000}, + {1.553543, -0.000000, -1.231609, -0.000000, 9.085625, -0.000000, 3.655235, -0.000000, 1.000000}, + {1.486551, -0.000000, -1.154891, -0.000000, 7.846591, -0.000000, 3.274149, -0.000000, 1.000000}, + {1.421622, -0.000000, -1.083487, -0.000000, 6.813128, -0.000000, 2.934341, -0.000000, 1.000000}, + {1.367418, -0.000000, -1.016376, -0.000000, 5.944501, -0.000000, 2.640042, -0.000000, 1.000000}, + {1.324482, -0.000000, -0.953508, -0.000000, 5.207488, -0.000000, 2.390431, -0.000000, 1.000000}, + {1.280684, -0.000000, -0.894399, -0.000000, 4.592789, -0.000000, 2.159741, -0.000000, 1.000000}, + {1.246987, -0.000000, -0.839518, -0.000000, 4.062180, -0.000000, 1.964467, -0.000000, 1.000000}, + {1.211155, -0.000000, -0.788068, -0.000000, 3.620679, -0.000000, 1.781203, -0.000000, 1.000000}, + {1.175933, -0.000000, -0.738902, -0.000000, 3.243580, -0.000000, 1.613270, -0.000000, 1.000000}, + {1.152336, -0.000000, -0.692208, -0.000000, 2.917040, -0.000000, 1.473435, -0.000000, 1.000000}, + {1.123500, -0.000000, -0.647835, -0.000000, 2.636541, -0.000000, 1.336179, -0.000000, 1.000000}, + {1.096555, -0.000000, -0.605367, -0.000000, 2.396568, -0.000000, 1.213442, -0.000000, 1.000000}, + {1.077336, -0.000000, -0.564784, -0.000000, 2.185666, -0.000000, 1.106037, -0.000000, 1.000000}, + {1.052653, -0.000000, -0.525758, -0.000000, 2.002713, -0.000000, 1.003530, -0.000000, 1.000000}, + {1.031925, -0.000000, -0.488138, -0.000000, 1.844307, -0.000000, 0.909873, -0.000000, 1.000000}, + {1.013942, -0.000000, -0.451746, -0.000000, 1.704971, -0.000000, 0.825459, -0.000000, 1.000000}, + {0.991452, -0.000000, -0.416619, -0.000000, 1.584007, -0.000000, 0.742975, -0.000000, 1.000000}, + {0.974240, -0.000000, -0.382644, -0.000000, 1.474510, -0.000000, 0.669738, -0.000000, 1.000000}, + {0.955821, -0.000000, -0.350143, -0.000000, 1.378818, -0.000000, 0.600725, -0.000000, 1.000000}, + {0.938912, -0.000000, -0.318425, -0.000000, 1.294800, -0.000000, 0.536778, -0.000000, 1.000000}, + {0.919444, -0.000000, -0.288514, -0.000000, 1.217755, -0.000000, 0.475350, -0.000000, 1.000000}, + {0.903474, -0.000000, -0.259492, -0.000000, 1.149861, -0.000000, 0.419374, -0.000000, 1.000000}, + {0.883635, -0.000000, -0.231227, -0.000000, 1.084635, -0.000000, 0.365386, -0.000000, 1.000000}, + {0.864503, -0.000000, -0.203640, -0.000000, 1.027821, -0.000000, 0.314880, -0.000000, 1.000000}, + {0.842393, -0.000000, -0.176839, -0.000000, 0.973706, -0.000000, 0.266845, -0.000000, 1.000000}, + {0.817137, -0.000000, -0.150930, -0.000000, 0.926544, -0.000000, 0.221697, -0.000000, 1.000000}, + {0.800453, -0.000000, -0.125641, -0.000000, 0.889120, -0.000000, 0.183984, -0.000000, 1.000000}, + {0.785820, -0.000000, -0.100842, -0.000000, 0.857413, -0.000000, 0.149712, -0.000000, 1.000000}, + {0.774620, -0.000000, -0.076499, -0.000000, 0.831367, -0.000000, 0.117321, -0.000000, 1.000000}, + {0.768187, -0.000000, -0.052638, -0.000000, 0.808870, -0.000000, 0.085328, -0.000000, 1.000000}, + {0.763980, -0.000000, -0.029531, -0.000000, 0.789081, -0.000000, 0.053670, -0.000000, 1.000000}, + {0.758869, -0.000000, -0.007321, -0.000000, 0.770790, -0.000000, 0.022941, -0.000000, 1.000000}, + {0.753451, -0.000000, 0.014465, -0.000000, 0.753795, -0.000000, -0.007314, -0.000000, 1.000000}, + {755.370728, -0.000000, -5.670331, -0.000000, 5757.834961, -0.000000, 4283.786621, -0.000000, 1.000000}, + {755.370728, -0.000000, -5.670331, -0.000000, 5757.834961, -0.000000, 4283.786621, -0.000000, 1.000000}, + {748.917786, -0.000000, -5.670322, -0.000000, 5757.825684, -0.000000, 4247.178223, -0.000000, 1.000000}, + {246.101578, -0.000000, -5.667177, -0.000000, 5754.728027, -0.000000, 1395.648438, -0.000000, 1.000000}, + {123.797058, -0.000000, -5.658721, -0.000000, 4106.577148, -0.000000, 701.706238, -0.000000, 1.000000}, + {79.117386, -0.000000, -5.640969, -0.000000, 2618.795898, -0.000000, 448.470886, -0.000000, 1.000000}, + {54.177662, -0.000000, -5.608840, -0.000000, 1834.666748, -0.000000, 306.364075, -0.000000, 1.000000}, + {39.824734, -0.000000, -5.550171, -0.000000, 1313.560669, -0.000000, 225.507919, -0.000000, 1.000000}, + {30.075279, -0.000000, -5.454316, -0.000000, 990.787842, -0.000000, 170.092087, -0.000000, 1.000000}, + {23.337036, -0.000000, -5.339839, -0.000000, 767.091919, -0.000000, 131.755875, -0.000000, 1.000000}, + {18.473637, -0.000000, -5.178624, -0.000000, 603.634888, -0.000000, 104.043175, -0.000000, 1.000000}, + {14.846143, -0.000000, -4.992064, -0.000000, 481.186798, -0.000000, 83.316429, -0.000000, 1.000000}, + {12.081261, -0.000000, -4.772932, -0.000000, 386.654968, -0.000000, 67.461525, -0.000000, 1.000000}, + {9.940939, -0.000000, -4.523968, -0.000000, 311.820526, -0.000000, 55.120632, -0.000000, 1.000000}, + {8.274117, -0.000000, -4.262884, -0.000000, 252.081955, -0.000000, 45.424171, -0.000000, 1.000000}, + {6.964566, -0.000000, -3.988830, -0.000000, 203.697174, -0.000000, 37.720623, -0.000000, 1.000000}, + {5.926566, -0.000000, -3.710901, -0.000000, 164.417938, -0.000000, 31.508204, -0.000000, 1.000000}, + {5.129732, -0.000000, -3.441426, -0.000000, 132.342026, -0.000000, 26.615784, -0.000000, 1.000000}, + {4.463659, -0.000000, -3.182252, -0.000000, 106.775970, -0.000000, 22.479305, -0.000000, 1.000000}, + {3.902591, -0.000000, -2.936867, -0.000000, 86.341125, -0.000000, 18.977882, -0.000000, 1.000000}, + {3.481073, -0.000000, -2.709507, -0.000000, 69.712631, -0.000000, 16.245199, -0.000000, 1.000000}, + {3.118626, -0.000000, -2.502808, -0.000000, 56.590183, -0.000000, 13.889335, -0.000000, 1.000000}, + {2.795513, -0.000000, -2.314271, -0.000000, 46.252998, -0.000000, 11.844767, -0.000000, 1.000000}, + {2.551666, -0.000000, -2.143013, -0.000000, 37.847336, -0.000000, 10.238197, -0.000000, 1.000000}, + {2.332592, -0.000000, -1.987437, -0.000000, 31.214708, -0.000000, 8.834404, -0.000000, 1.000000}, + {2.155564, -0.000000, -1.846117, -0.000000, 25.844906, -0.000000, 7.686929, -0.000000, 1.000000}, + {2.000643, -0.000000, -1.717631, -0.000000, 21.522562, -0.000000, 6.701662, -0.000000, 1.000000}, + {1.870037, -0.000000, -1.601066, -0.000000, 18.046921, -0.000000, 5.874063, -0.000000, 1.000000}, + {1.764007, -0.000000, -1.494996, -0.000000, 15.182642, -0.000000, 5.187465, -0.000000, 1.000000}, + {1.663801, -0.000000, -1.397578, -0.000000, 12.871964, -0.000000, 4.582635, -0.000000, 1.000000}, + {1.577190, -0.000000, -1.307861, -0.000000, 10.965149, -0.000000, 4.061802, -0.000000, 1.000000}, + {1.504099, -0.000000, -1.225326, -0.000000, 9.397988, -0.000000, 3.620734, -0.000000, 1.000000}, + {1.448169, -0.000000, -1.148877, -0.000000, 8.073087, -0.000000, 3.255360, -0.000000, 1.000000}, + {1.392806, -0.000000, -1.077689, -0.000000, 6.986881, -0.000000, 2.925269, -0.000000, 1.000000}, + {1.337830, -0.000000, -1.011239, -0.000000, 6.092653, -0.000000, 2.623551, -0.000000, 1.000000}, + {1.297846, -0.000000, -0.949130, -0.000000, 5.329033, -0.000000, 2.376188, -0.000000, 1.000000}, + {1.257372, -0.000000, -0.890650, -0.000000, 4.688469, -0.000000, 2.146968, -0.000000, 1.000000}, + {1.217505, -0.000000, -0.835359, -0.000000, 4.149733, -0.000000, 1.939995, -0.000000, 1.000000}, + {1.189010, -0.000000, -0.783367, -0.000000, 3.687076, -0.000000, 1.766274, -0.000000, 1.000000}, + {1.158875, -0.000000, -0.735030, -0.000000, 3.302110, -0.000000, 1.603226, -0.000000, 1.000000}, + {1.132490, -0.000000, -0.689066, -0.000000, 2.961678, -0.000000, 1.460328, -0.000000, 1.000000}, + {1.107211, -0.000000, -0.645352, -0.000000, 2.676203, -0.000000, 1.327499, -0.000000, 1.000000}, + {1.082764, -0.000000, -0.603500, -0.000000, 2.428947, -0.000000, 1.207419, -0.000000, 1.000000}, + {1.065845, -0.000000, -0.563333, -0.000000, 2.212621, -0.000000, 1.102937, -0.000000, 1.000000}, + {1.040707, -0.000000, -0.524835, -0.000000, 2.024522, -0.000000, 0.998398, -0.000000, 1.000000}, + {1.020347, -0.000000, -0.487784, -0.000000, 1.860953, -0.000000, 0.904858, -0.000000, 1.000000}, + {1.004311, -0.000000, -0.452053, -0.000000, 1.719984, -0.000000, 0.821416, -0.000000, 1.000000}, + {0.982813, -0.000000, -0.417382, -0.000000, 1.592310, -0.000000, 0.740940, -0.000000, 1.000000}, + {0.965647, -0.000000, -0.383810, -0.000000, 1.479896, -0.000000, 0.668034, -0.000000, 1.000000}, + {0.946957, -0.000000, -0.351144, -0.000000, 1.380211, -0.000000, 0.598401, -0.000000, 1.000000}, + {0.932339, -0.000000, -0.319366, -0.000000, 1.292450, -0.000000, 0.535861, -0.000000, 1.000000}, + {0.911615, -0.000000, -0.288792, -0.000000, 1.213322, -0.000000, 0.473632, -0.000000, 1.000000}, + {0.890619, -0.000000, -0.259176, -0.000000, 1.141411, -0.000000, 0.415295, -0.000000, 1.000000}, + {0.871610, -0.000000, -0.230179, -0.000000, 1.077082, -0.000000, 0.360902, -0.000000, 1.000000}, + {0.846984, -0.000000, -0.202470, -0.000000, 1.018013, -0.000000, 0.307360, -0.000000, 1.000000}, + {0.825227, -0.000000, -0.175689, -0.000000, 0.963117, -0.000000, 0.260213, -0.000000, 1.000000}, + {0.807204, -0.000000, -0.149474, -0.000000, 0.917321, -0.000000, 0.218667, -0.000000, 1.000000}, + {0.791875, -0.000000, -0.123761, -0.000000, 0.879613, -0.000000, 0.181071, -0.000000, 1.000000}, + {0.777142, -0.000000, -0.098633, -0.000000, 0.847924, -0.000000, 0.147021, -0.000000, 1.000000}, + {0.765843, -0.000000, -0.074229, -0.000000, 0.821091, -0.000000, 0.114883, -0.000000, 1.000000}, + {0.759266, -0.000000, -0.050208, -0.000000, 0.798548, -0.000000, 0.082969, -0.000000, 1.000000}, + {0.753952, -0.000000, -0.026592, -0.000000, 0.778596, -0.000000, 0.051373, -0.000000, 1.000000}, + {0.748278, -0.000000, -0.003300, -0.000000, 0.759784, -0.000000, 0.020496, -0.000000, 1.000000}, + {0.741943, -0.000000, 0.019648, -0.000000, 0.742779, -0.000000, -0.010106, -0.000000, 1.000000}, + {796.538452, -0.000000, -6.633092, -0.000000, 6708.047852, -0.000000, 5284.574219, -0.000000, 1.000000}, + {796.538452, -0.000000, -6.633092, -0.000000, 6708.047852, -0.000000, 5284.574219, -0.000000, 1.000000}, + {788.692444, -0.000000, -6.633066, -0.000000, 6708.022949, -0.000000, 5232.681641, -0.000000, 1.000000}, + {254.366989, -0.000000, -6.628033, -0.000000, 6703.046387, -0.000000, 1687.155640, -0.000000, 1.000000}, + {124.024818, -0.000000, -6.614511, -0.000000, 5539.862305, -0.000000, 822.532288, -0.000000, 1.000000}, + {78.874611, -0.000000, -6.586137, -0.000000, 3570.532227, -0.000000, 522.773438, -0.000000, 1.000000}, + {54.351654, -0.000000, -6.534547, -0.000000, 2444.145508, -0.000000, 360.170929, -0.000000, 1.000000}, + {39.671909, -0.000000, -6.425985, -0.000000, 1757.696289, -0.000000, 262.640015, -0.000000, 1.000000}, + {29.720913, -0.000000, -6.296362, -0.000000, 1330.735718, -0.000000, 196.392914, -0.000000, 1.000000}, + {22.937927, -0.000000, -6.109432, -0.000000, 1019.533630, -0.000000, 151.242661, -0.000000, 1.000000}, + {18.037071, -0.000000, -5.883490, -0.000000, 795.384338, -0.000000, 118.512108, -0.000000, 1.000000}, + {14.389929, -0.000000, -5.610622, -0.000000, 626.799988, -0.000000, 94.074753, -0.000000, 1.000000}, + {11.632060, -0.000000, -5.292922, -0.000000, 496.057587, -0.000000, 75.492020, -0.000000, 1.000000}, + {9.524698, -0.000000, -4.959748, -0.000000, 393.665619, -0.000000, 61.165596, -0.000000, 1.000000}, + {7.909891, -0.000000, -4.608510, -0.000000, 311.850403, -0.000000, 50.033722, -0.000000, 1.000000}, + {6.641108, -0.000000, -4.254182, -0.000000, 246.801361, -0.000000, 41.161034, -0.000000, 1.000000}, + {5.640098, -0.000000, -3.911447, -0.000000, 195.188507, -0.000000, 34.034492, -0.000000, 1.000000}, + {4.876927, -0.000000, -3.585286, -0.000000, 154.037003, -0.000000, 28.450592, -0.000000, 1.000000}, + {4.234858, -0.000000, -3.282091, -0.000000, 122.015228, -0.000000, 23.740337, -0.000000, 1.000000}, + {3.706480, -0.000000, -3.003709, -0.000000, 97.047188, -0.000000, 19.848419, -0.000000, 1.000000}, + {3.294509, -0.000000, -2.752968, -0.000000, 77.346321, -0.000000, 16.757662, -0.000000, 1.000000}, + {2.949829, -0.000000, -2.528190, -0.000000, 61.985443, -0.000000, 14.190195, -0.000000, 1.000000}, + {2.673619, -0.000000, -2.326734, -0.000000, 49.983765, -0.000000, 12.108070, -0.000000, 1.000000}, + {2.421091, -0.000000, -2.146376, -0.000000, 40.643520, -0.000000, 10.310018, -0.000000, 1.000000}, + {2.225844, -0.000000, -1.984520, -0.000000, 33.203148, -0.000000, 8.879506, -0.000000, 1.000000}, + {2.050815, -0.000000, -1.839347, -0.000000, 27.348070, -0.000000, 7.653798, -0.000000, 1.000000}, + {1.915180, -0.000000, -1.708621, -0.000000, 22.628241, -0.000000, 6.671260, -0.000000, 1.000000}, + {1.794598, -0.000000, -1.590899, -0.000000, 18.848253, -0.000000, 5.830236, -0.000000, 1.000000}, + {1.699217, -0.000000, -1.484087, -0.000000, 15.794706, -0.000000, 5.150298, -0.000000, 1.000000}, + {1.607506, -0.000000, -1.386482, -0.000000, 13.345618, -0.000000, 4.539809, -0.000000, 1.000000}, + {1.534696, -0.000000, -1.297261, -0.000000, 11.314983, -0.000000, 4.041388, -0.000000, 1.000000}, + {1.463587, -0.000000, -1.215437, -0.000000, 9.669380, -0.000000, 3.594791, -0.000000, 1.000000}, + {1.402722, -0.000000, -1.139554, -0.000000, 8.306990, -0.000000, 3.209846, -0.000000, 1.000000}, + {1.355394, -0.000000, -1.069360, -0.000000, 7.170519, -0.000000, 2.892212, -0.000000, 1.000000}, + {1.308239, -0.000000, -1.003819, -0.000000, 6.241129, -0.000000, 2.599499, -0.000000, 1.000000}, + {1.265107, -0.000000, -0.942460, -0.000000, 5.446612, -0.000000, 2.343331, -0.000000, 1.000000}, + {1.236631, -0.000000, -0.885105, -0.000000, 4.786221, -0.000000, 2.134352, -0.000000, 1.000000}, + {1.197268, -0.000000, -0.830972, -0.000000, 4.235952, -0.000000, 1.925134, -0.000000, 1.000000}, + {1.168772, -0.000000, -0.779904, -0.000000, 3.763372, -0.000000, 1.750235, -0.000000, 1.000000}, + {1.140084, -0.000000, -0.731363, -0.000000, 3.362856, -0.000000, 1.589927, -0.000000, 1.000000}, + {1.112856, -0.000000, -0.685110, -0.000000, 3.016409, -0.000000, 1.443964, -0.000000, 1.000000}, + {1.093076, -0.000000, -0.641937, -0.000000, 2.718378, -0.000000, 1.320131, -0.000000, 1.000000}, + {1.066269, -0.000000, -0.600802, -0.000000, 2.463474, -0.000000, 1.196558, -0.000000, 1.000000}, + {1.052001, -0.000000, -0.561395, -0.000000, 2.240675, -0.000000, 1.096340, -0.000000, 1.000000}, + {1.029387, -0.000000, -0.523471, -0.000000, 2.047421, -0.000000, 0.993331, -0.000000, 1.000000}, + {1.010490, -0.000000, -0.486986, -0.000000, 1.876320, -0.000000, 0.902016, -0.000000, 1.000000}, + {0.994934, -0.000000, -0.451763, -0.000000, 1.730797, -0.000000, 0.819587, -0.000000, 1.000000}, + {0.974489, -0.000000, -0.417763, -0.000000, 1.599287, -0.000000, 0.739916, -0.000000, 1.000000}, + {0.957656, -0.000000, -0.384869, -0.000000, 1.485222, -0.000000, 0.666863, -0.000000, 1.000000}, + {0.939151, -0.000000, -0.352948, -0.000000, 1.383958, -0.000000, 0.597341, -0.000000, 1.000000}, + {0.919569, -0.000000, -0.321905, -0.000000, 1.292059, -0.000000, 0.532299, -0.000000, 1.000000}, + {0.903610, -0.000000, -0.291601, -0.000000, 1.213007, -0.000000, 0.473077, -0.000000, 1.000000}, + {0.878530, -0.000000, -0.261976, -0.000000, 1.137926, -0.000000, 0.410832, -0.000000, 1.000000}, + {0.859335, -0.000000, -0.232993, -0.000000, 1.072206, -0.000000, 0.356913, -0.000000, 1.000000}, + {0.840088, -0.000000, -0.204911, -0.000000, 1.012177, -0.000000, 0.306912, -0.000000, 1.000000}, + {0.817539, -0.000000, -0.177521, -0.000000, 0.955910, -0.000000, 0.259635, -0.000000, 1.000000}, + {0.799748, -0.000000, -0.150580, -0.000000, 0.909657, -0.000000, 0.217919, -0.000000, 1.000000}, + {0.783867, -0.000000, -0.124083, -0.000000, 0.870853, -0.000000, 0.180178, -0.000000, 1.000000}, + {0.768642, -0.000000, -0.098486, -0.000000, 0.838291, -0.000000, 0.145685, -0.000000, 1.000000}, + {0.756833, -0.000000, -0.073751, -0.000000, 0.810957, -0.000000, 0.113385, -0.000000, 1.000000}, + {0.749698, -0.000000, -0.049360, -0.000000, 0.787669, -0.000000, 0.081632, -0.000000, 1.000000}, + {0.743499, -0.000000, -0.025327, -0.000000, 0.767074, -0.000000, 0.050162, -0.000000, 1.000000}, + {0.736850, -0.000000, -0.001874, -0.000000, 0.748055, -0.000000, 0.019200, -0.000000, 1.000000}, + {0.730256, -0.000000, 0.021175, -0.000000, 0.730499, -0.000000, -0.010886, -0.000000, 1.000000}, + {845.146118, -0.000000, -7.977318, -0.000000, 8039.750000, -0.000000, 6744.384766, -0.000000, 1.000000}, + {845.146118, -0.000000, -7.977318, -0.000000, 8039.750000, -0.000000, 6744.384766, -0.000000, 1.000000}, + {835.189026, -0.000000, -7.977277, -0.000000, 8039.710449, -0.000000, 6664.471191, -0.000000, 1.000000}, + {281.098541, -0.000000, -7.968528, -0.000000, 8031.028809, -0.000000, 2242.864746, -0.000000, 1.000000}, + {123.405190, -0.000000, -7.945025, -0.000000, 8007.711426, -0.000000, 984.388428, -0.000000, 1.000000}, + {78.691490, -0.000000, -7.895733, -0.000000, 5077.497559, -0.000000, 627.326538, -0.000000, 1.000000}, + {54.058727, -0.000000, -7.791619, -0.000000, 3485.158447, -0.000000, 430.624695, -0.000000, 1.000000}, + {39.050835, -0.000000, -7.625182, -0.000000, 2508.681885, -0.000000, 310.617584, -0.000000, 1.000000}, + {28.780594, -0.000000, -7.403747, -0.000000, 1883.278564, -0.000000, 228.130203, -0.000000, 1.000000}, + {22.431581, -0.000000, -7.116580, -0.000000, 1415.168823, -0.000000, 177.351303, -0.000000, 1.000000}, + {17.398540, -0.000000, -6.757731, -0.000000, 1089.876953, -0.000000, 136.846085, -0.000000, 1.000000}, + {13.759562, -0.000000, -6.336405, -0.000000, 842.622314, -0.000000, 107.378319, -0.000000, 1.000000}, + {11.054308, -0.000000, -5.889235, -0.000000, 653.017090, -0.000000, 85.240372, -0.000000, 1.000000}, + {9.015944, -0.000000, -5.419374, -0.000000, 504.942902, -0.000000, 68.333931, -0.000000, 1.000000}, + {7.456490, -0.000000, -4.949159, -0.000000, 389.530151, -0.000000, 55.183376, -0.000000, 1.000000}, + {6.251395, -0.000000, -4.500382, -0.000000, 300.270569, -0.000000, 44.822029, -0.000000, 1.000000}, + {5.308335, -0.000000, -4.078912, -0.000000, 231.511444, -0.000000, 36.583969, -0.000000, 1.000000}, + {4.555330, -0.000000, -3.694615, -0.000000, 178.991898, -0.000000, 29.968136, -0.000000, 1.000000}, + {3.972212, -0.000000, -3.347843, -0.000000, 138.743637, -0.000000, 24.783125, -0.000000, 1.000000}, + {3.497174, -0.000000, -3.039443, -0.000000, 108.196671, -0.000000, 20.568523, -0.000000, 1.000000}, + {3.085307, -0.000000, -2.768964, -0.000000, 85.297348, -0.000000, 17.046770, -0.000000, 1.000000}, + {2.774531, -0.000000, -2.530205, -0.000000, 67.433861, -0.000000, 14.344564, -0.000000, 1.000000}, + {2.505141, -0.000000, -2.319404, -0.000000, 53.952549, -0.000000, 12.078911, -0.000000, 1.000000}, + {2.290914, -0.000000, -2.133185, -0.000000, 43.374359, -0.000000, 10.289063, -0.000000, 1.000000}, + {2.109684, -0.000000, -1.968301, -0.000000, 35.174217, -0.000000, 8.813835, -0.000000, 1.000000}, + {1.955441, -0.000000, -1.821365, -0.000000, 28.774702, -0.000000, 7.586822, -0.000000, 1.000000}, + {1.824226, -0.000000, -1.690827, -0.000000, 23.718933, -0.000000, 6.580121, -0.000000, 1.000000}, + {1.722245, -0.000000, -1.573141, -0.000000, 19.618530, -0.000000, 5.767525, -0.000000, 1.000000}, + {1.623407, -0.000000, -1.466886, -0.000000, 16.415415, -0.000000, 5.050951, -0.000000, 1.000000}, + {1.544118, -0.000000, -1.370359, -0.000000, 13.800963, -0.000000, 4.461748, -0.000000, 1.000000}, + {1.480333, -0.000000, -1.282609, -0.000000, 11.673009, -0.000000, 3.974541, -0.000000, 1.000000}, + {1.420210, -0.000000, -1.201725, -0.000000, 9.939965, -0.000000, 3.546500, -0.000000, 1.000000}, + {1.363331, -0.000000, -1.127192, -0.000000, 8.527099, -0.000000, 3.165497, -0.000000, 1.000000}, + {1.319575, -0.000000, -1.058344, -0.000000, 7.354059, -0.000000, 2.850984, -0.000000, 1.000000}, + {1.278847, -0.000000, -0.994206, -0.000000, 6.383086, -0.000000, 2.572156, -0.000000, 1.000000}, + {1.236565, -0.000000, -0.934412, -0.000000, 5.585329, -0.000000, 2.311474, -0.000000, 1.000000}, + {1.207651, -0.000000, -0.878088, -0.000000, 4.897930, -0.000000, 2.104635, -0.000000, 1.000000}, + {1.175019, -0.000000, -0.825141, -0.000000, 4.323633, -0.000000, 1.906726, -0.000000, 1.000000}, + {1.150577, -0.000000, -0.775119, -0.000000, 3.832266, -0.000000, 1.739005, -0.000000, 1.000000}, + {1.122119, -0.000000, -0.727749, -0.000000, 3.422934, -0.000000, 1.578306, -0.000000, 1.000000}, + {1.093680, -0.000000, -0.682578, -0.000000, 3.074646, -0.000000, 1.429569, -0.000000, 1.000000}, + {1.077174, -0.000000, -0.639512, -0.000000, 2.766084, -0.000000, 1.310087, -0.000000, 1.000000}, + {1.052574, -0.000000, -0.598284, -0.000000, 2.504311, -0.000000, 1.187682, -0.000000, 1.000000}, + {1.034594, -0.000000, -0.558858, -0.000000, 2.275589, -0.000000, 1.083231, -0.000000, 1.000000}, + {1.014468, -0.000000, -0.521607, -0.000000, 2.075143, -0.000000, 0.984314, -0.000000, 1.000000}, + {0.995375, -0.000000, -0.486011, -0.000000, 1.901797, -0.000000, 0.894436, -0.000000, 1.000000}, + {0.982971, -0.000000, -0.451649, -0.000000, 1.749210, -0.000000, 0.816267, -0.000000, 1.000000}, + {0.963105, -0.000000, -0.418406, -0.000000, 1.615647, -0.000000, 0.735724, -0.000000, 1.000000}, + {0.948792, -0.000000, -0.386159, -0.000000, 1.495226, -0.000000, 0.666280, -0.000000, 1.000000}, + {0.926610, -0.000000, -0.354891, -0.000000, 1.391581, -0.000000, 0.593153, -0.000000, 1.000000}, + {0.907713, -0.000000, -0.324492, -0.000000, 1.297812, -0.000000, 0.527906, -0.000000, 1.000000}, + {0.892103, -0.000000, -0.294840, -0.000000, 1.215060, -0.000000, 0.469247, -0.000000, 1.000000}, + {0.869415, -0.000000, -0.265860, -0.000000, 1.136338, -0.000000, 0.410502, -0.000000, 1.000000}, + {0.852913, -0.000000, -0.237496, -0.000000, 1.068437, -0.000000, 0.358726, -0.000000, 1.000000}, + {0.834536, -0.000000, -0.209674, -0.000000, 1.007072, -0.000000, 0.308860, -0.000000, 1.000000}, + {0.811033, -0.000000, -0.182364, -0.000000, 0.948978, -0.000000, 0.260958, -0.000000, 1.000000}, + {0.791168, -0.000000, -0.155507, -0.000000, 0.900506, -0.000000, 0.218397, -0.000000, 1.000000}, + {0.775269, -0.000000, -0.129110, -0.000000, 0.861032, -0.000000, 0.180906, -0.000000, 1.000000}, + {0.760805, -0.000000, -0.103290, -0.000000, 0.828452, -0.000000, 0.146492, -0.000000, 1.000000}, + {0.747453, -0.000000, -0.078003, -0.000000, 0.799894, -0.000000, 0.114311, -0.000000, 1.000000}, + {0.739498, -0.000000, -0.053023, -0.000000, 0.776211, -0.000000, 0.082466, -0.000000, 1.000000}, + {0.731962, -0.000000, -0.028297, -0.000000, 0.754456, -0.000000, 0.050896, -0.000000, 1.000000}, + {0.724600, -0.000000, -0.003833, -0.000000, 0.734939, -0.000000, 0.020031, -0.000000, 1.000000}, + {0.717370, -0.000000, 0.020161, -0.000000, 0.717078, -0.000000, -0.010468, -0.000000, 1.000000}, + {906.439392, -0.000000, -9.988728, -0.000000, 10038.660156, -0.000000, 9060.019531, -0.000000, 1.000000}, + {906.439392, -0.000000, -9.988728, -0.000000, 10038.660156, -0.000000, 9060.019531, -0.000000, 1.000000}, + {896.722473, -0.000000, -9.988659, -0.000000, 10038.589844, -0.000000, 8960.477539, -0.000000, 1.000000}, + {304.300293, -0.000000, -9.971466, -0.000000, 10021.482422, -0.000000, 3038.479248, -0.000000, 1.000000}, + {135.957443, -0.000000, -9.925411, -0.000000, 9975.659180, -0.000000, 1357.243042, -0.000000, 1.000000}, + {78.026291, -0.000000, -9.828078, -0.000000, 7876.573730, -0.000000, 778.600769, -0.000000, 1.000000}, + {53.712955, -0.000000, -9.617829, -0.000000, 5350.844238, -0.000000, 535.068176, -0.000000, 1.000000}, + {38.286682, -0.000000, -9.333091, -0.000000, 3821.416992, -0.000000, 380.668152, -0.000000, 1.000000}, + {28.837351, -0.000000, -8.931132, -0.000000, 2776.563721, -0.000000, 285.601776, -0.000000, 1.000000}, + {21.382069, -0.000000, -8.424834, -0.000000, 2087.045654, -0.000000, 210.541641, -0.000000, 1.000000}, + {16.448494, -0.000000, -7.826952, -0.000000, 1564.820190, -0.000000, 160.475967, -0.000000, 1.000000}, + {12.875075, -0.000000, -7.180136, -0.000000, 1174.784180, -0.000000, 123.837555, -0.000000, 1.000000}, + {10.294890, -0.000000, -6.514475, -0.000000, 878.429626, -0.000000, 96.924232, -0.000000, 1.000000}, + {8.364246, -0.000000, -5.860951, -0.000000, 655.093750, -0.000000, 76.379807, -0.000000, 1.000000}, + {6.896718, -0.000000, -5.246315, -0.000000, 487.947388, -0.000000, 60.519421, -0.000000, 1.000000}, + {5.768393, -0.000000, -4.686076, -0.000000, 364.209167, -0.000000, 48.198494, -0.000000, 1.000000}, + {4.898552, -0.000000, -4.185898, -0.000000, 272.602905, -0.000000, 38.672321, -0.000000, 1.000000}, + {4.209528, -0.000000, -3.746351, -0.000000, 205.600281, -0.000000, 31.163448, -0.000000, 1.000000}, + {3.670874, -0.000000, -3.365174, -0.000000, 156.234818, -0.000000, 25.370182, -0.000000, 1.000000}, + {3.232810, -0.000000, -3.036278, -0.000000, 119.865585, -0.000000, 20.767403, -0.000000, 1.000000}, + {2.862235, -0.000000, -2.751556, -0.000000, 93.030350, -0.000000, 17.048080, -0.000000, 1.000000}, + {2.571143, -0.000000, -2.504743, -0.000000, 72.933678, -0.000000, 14.185691, -0.000000, 1.000000}, + {2.338569, -0.000000, -2.290083, -0.000000, 57.715157, -0.000000, 11.917953, -0.000000, 1.000000}, + {2.142554, -0.000000, -2.102626, -0.000000, 46.087078, -0.000000, 10.092039, -0.000000, 1.000000}, + {1.980509, -0.000000, -1.937902, -0.000000, 37.124104, -0.000000, 8.610742, -0.000000, 1.000000}, + {1.848721, -0.000000, -1.792767, -0.000000, 30.175062, -0.000000, 7.427349, -0.000000, 1.000000}, + {1.729413, -0.000000, -1.663505, -0.000000, 24.773699, -0.000000, 6.417544, -0.000000, 1.000000}, + {1.643981, -0.000000, -1.547935, -0.000000, 20.372276, -0.000000, 5.646828, -0.000000, 1.000000}, + {1.557670, -0.000000, -1.443718, -0.000000, 16.987263, -0.000000, 4.954495, -0.000000, 1.000000}, + {1.488696, -0.000000, -1.349465, -0.000000, 14.220825, -0.000000, 4.386989, -0.000000, 1.000000}, + {1.422584, -0.000000, -1.263479, -0.000000, 12.027329, -0.000000, 3.887997, -0.000000, 1.000000}, + {1.372155, -0.000000, -1.184875, -0.000000, 10.213785, -0.000000, 3.477706, -0.000000, 1.000000}, + {1.323880, -0.000000, -1.112276, -0.000000, 8.750161, -0.000000, 3.116966, -0.000000, 1.000000}, + {1.281696, -0.000000, -1.045049, -0.000000, 7.540591, -0.000000, 2.802569, -0.000000, 1.000000}, + {1.243254, -0.000000, -0.982565, -0.000000, 6.547980, -0.000000, 2.525293, -0.000000, 1.000000}, + {1.206903, -0.000000, -0.924224, -0.000000, 5.716578, -0.000000, 2.280795, -0.000000, 1.000000}, + {1.178057, -0.000000, -0.869383, -0.000000, 5.011660, -0.000000, 2.069224, -0.000000, 1.000000}, + {1.151483, -0.000000, -0.817765, -0.000000, 4.425074, -0.000000, 1.881721, -0.000000, 1.000000}, + {1.120193, -0.000000, -0.768990, -0.000000, 3.927121, -0.000000, 1.703048, -0.000000, 1.000000}, + {1.098377, -0.000000, -0.722899, -0.000000, 3.503269, -0.000000, 1.553067, -0.000000, 1.000000}, + {1.075574, -0.000000, -0.679074, -0.000000, 3.139438, -0.000000, 1.413851, -0.000000, 1.000000}, + {1.058857, -0.000000, -0.637342, -0.000000, 2.823851, -0.000000, 1.295056, -0.000000, 1.000000}, + {1.036178, -0.000000, -0.597396, -0.000000, 2.551916, -0.000000, 1.176856, -0.000000, 1.000000}, + {1.022086, -0.000000, -0.559055, -0.000000, 2.316213, -0.000000, 1.078076, -0.000000, 1.000000}, + {1.004328, -0.000000, -0.522252, -0.000000, 2.110385, -0.000000, 0.981383, -0.000000, 1.000000}, + {0.980973, -0.000000, -0.486794, -0.000000, 1.931046, -0.000000, 0.887075, -0.000000, 1.000000}, + {0.969568, -0.000000, -0.452552, -0.000000, 1.772196, -0.000000, 0.810623, -0.000000, 1.000000}, + {0.951322, -0.000000, -0.419358, -0.000000, 1.634960, -0.000000, 0.732065, -0.000000, 1.000000}, + {0.935125, -0.000000, -0.387447, -0.000000, 1.510649, -0.000000, 0.660078, -0.000000, 1.000000}, + {0.914376, -0.000000, -0.356842, -0.000000, 1.400242, -0.000000, 0.590169, -0.000000, 1.000000}, + {0.900328, -0.000000, -0.327078, -0.000000, 1.303935, -0.000000, 0.529932, -0.000000, 1.000000}, + {0.885727, -0.000000, -0.298086, -0.000000, 1.218222, -0.000000, 0.471886, -0.000000, 1.000000}, + {0.862652, -0.000000, -0.269809, -0.000000, 1.135611, -0.000000, 0.413001, -0.000000, 1.000000}, + {0.846136, -0.000000, -0.242122, -0.000000, 1.065906, -0.000000, 0.361114, -0.000000, 1.000000}, + {0.829365, -0.000000, -0.215009, -0.000000, 1.002608, -0.000000, 0.311811, -0.000000, 1.000000}, + {0.804026, -0.000000, -0.188377, -0.000000, 0.941965, -0.000000, 0.263681, -0.000000, 1.000000}, + {0.782924, -0.000000, -0.162206, -0.000000, 0.891738, -0.000000, 0.221028, -0.000000, 1.000000}, + {0.766848, -0.000000, -0.136437, -0.000000, 0.851588, -0.000000, 0.183283, -0.000000, 1.000000}, + {0.751721, -0.000000, -0.111023, -0.000000, 0.817718, -0.000000, 0.148957, -0.000000, 1.000000}, + {0.737474, -0.000000, -0.085955, -0.000000, 0.788427, -0.000000, 0.117159, -0.000000, 1.000000}, + {0.727614, -0.000000, -0.061166, -0.000000, 0.763491, -0.000000, 0.085510, -0.000000, 1.000000}, + {0.719368, -0.000000, -0.036628, -0.000000, 0.740881, -0.000000, 0.054307, -0.000000, 1.000000}, + {0.711084, -0.000000, -0.012337, -0.000000, 0.720461, -0.000000, 0.023948, -0.000000, 1.000000}, + {0.702920, -0.000000, 0.011765, -0.000000, 0.702302, -0.000000, -0.006149, -0.000000, 1.000000}, + {998.483765, -0.000000, -13.333044, -0.000000, 13370.491211, -0.000000, 13333.158203, -0.000000, 1.000000}, + {998.483765, -0.000000, -13.333044, -0.000000, 13370.491211, -0.000000, 13333.158203, -0.000000, 1.000000}, + {998.551636, -0.000000, -13.332921, -0.000000, 13370.369141, -0.000000, 13333.028320, -0.000000, 1.000000}, + {333.518036, -0.000000, -13.292059, -0.000000, 13329.624023, -0.000000, 4440.960449, -0.000000, 1.000000}, + {152.949051, -0.000000, -13.182705, -0.000000, 13220.579102, -0.000000, 2038.156982, -0.000000, 1.000000}, + {81.445961, -0.000000, -12.905185, -0.000000, 12943.871094, -0.000000, 1075.949829, -0.000000, 1.000000}, + {52.685406, -0.000000, -12.495064, -0.000000, 9238.716797, -0.000000, 688.496521, -0.000000, 1.000000}, + {36.778500, -0.000000, -11.867575, -0.000000, 6461.258301, -0.000000, 486.234314, -0.000000, 1.000000}, + {26.697067, -0.000000, -11.059551, -0.000000, 4604.681152, -0.000000, 350.370178, -0.000000, 1.000000}, + {19.892454, -0.000000, -10.101795, -0.000000, 3292.892090, -0.000000, 258.057037, -0.000000, 1.000000}, + {15.110569, -0.000000, -9.079334, -0.000000, 2360.091064, -0.000000, 192.029236, -0.000000, 1.000000}, + {11.722652, -0.000000, -8.046182, -0.000000, 1682.049927, -0.000000, 144.493683, -0.000000, 1.000000}, + {9.317204, -0.000000, -7.075084, -0.000000, 1193.297241, -0.000000, 110.032280, -0.000000, 1.000000}, + {7.530802, -0.000000, -6.194766, -0.000000, 848.054138, -0.000000, 84.183929, -0.000000, 1.000000}, + {6.241379, -0.000000, -5.422619, -0.000000, 603.452820, -0.000000, 65.286018, -0.000000, 1.000000}, + {5.206351, -0.000000, -4.759813, -0.000000, 434.533142, -0.000000, 50.620579, -0.000000, 1.000000}, + {4.434587, -0.000000, -4.196141, -0.000000, 315.658630, -0.000000, 39.794804, -0.000000, 1.000000}, + {3.797335, -0.000000, -3.722212, -0.000000, 233.010849, -0.000000, 31.377222, -0.000000, 1.000000}, + {3.310014, -0.000000, -3.322509, -0.000000, 173.897430, -0.000000, 25.083139, -0.000000, 1.000000}, + {2.936420, -0.000000, -2.984247, -0.000000, 131.499344, -0.000000, 20.375296, -0.000000, 1.000000}, + {2.630209, -0.000000, -2.696600, -0.000000, 100.757813, -0.000000, 16.706327, -0.000000, 1.000000}, + {2.380113, -0.000000, -2.450179, -0.000000, 78.039215, -0.000000, 13.848163, -0.000000, 1.000000}, + {2.157723, -0.000000, -2.238436, -0.000000, 61.371338, -0.000000, 11.512774, -0.000000, 1.000000}, + {2.007470, -0.000000, -2.054964, -0.000000, 48.493896, -0.000000, 9.821982, -0.000000, 1.000000}, + {1.867061, -0.000000, -1.894419, -0.000000, 38.807777, -0.000000, 8.390295, -0.000000, 1.000000}, + {1.746883, -0.000000, -1.752979, -0.000000, 31.355574, -0.000000, 7.218071, -0.000000, 1.000000}, + {1.647169, -0.000000, -1.627822, -0.000000, 25.627239, -0.000000, 6.269635, -0.000000, 1.000000}, + {1.564148, -0.000000, -1.515979, -0.000000, 21.054731, -0.000000, 5.493749, -0.000000, 1.000000}, + {1.494478, -0.000000, -1.415249, -0.000000, 17.477192, -0.000000, 4.845518, -0.000000, 1.000000}, + {1.428326, -0.000000, -1.323985, -0.000000, 14.654338, -0.000000, 4.279845, -0.000000, 1.000000}, + {1.369799, -0.000000, -1.240867, -0.000000, 12.368030, -0.000000, 3.800760, -0.000000, 1.000000}, + {1.317991, -0.000000, -1.164637, -0.000000, 10.531270, -0.000000, 3.383482, -0.000000, 1.000000}, + {1.276579, -0.000000, -1.094296, -0.000000, 9.003316, -0.000000, 3.036331, -0.000000, 1.000000}, + {1.238669, -0.000000, -1.029195, -0.000000, 7.764783, -0.000000, 2.734841, -0.000000, 1.000000}, + {1.204133, -0.000000, -0.968769, -0.000000, 6.746184, -0.000000, 2.467308, -0.000000, 1.000000}, + {1.171257, -0.000000, -0.912329, -0.000000, 5.892015, -0.000000, 2.227766, -0.000000, 1.000000}, + {1.141953, -0.000000, -0.859412, -0.000000, 5.166983, -0.000000, 2.020631, -0.000000, 1.000000}, + {1.119480, -0.000000, -0.809528, -0.000000, 4.559603, -0.000000, 1.838840, -0.000000, 1.000000}, + {1.091946, -0.000000, -0.762381, -0.000000, 4.042816, -0.000000, 1.668872, -0.000000, 1.000000}, + {1.076758, -0.000000, -0.717771, -0.000000, 3.603195, -0.000000, 1.529597, -0.000000, 1.000000}, + {1.053507, -0.000000, -0.675306, -0.000000, 3.222058, -0.000000, 1.392012, -0.000000, 1.000000}, + {1.029980, -0.000000, -0.634791, -0.000000, 2.897578, -0.000000, 1.264203, -0.000000, 1.000000}, + {1.020478, -0.000000, -0.596030, -0.000000, 2.609970, -0.000000, 1.164827, -0.000000, 1.000000}, + {0.998523, -0.000000, -0.558837, -0.000000, 2.366715, -0.000000, 1.059033, -0.000000, 1.000000}, + {0.988348, -0.000000, -0.523123, -0.000000, 2.150631, -0.000000, 0.971995, -0.000000, 1.000000}, + {0.969123, -0.000000, -0.488738, -0.000000, 1.963932, -0.000000, 0.883356, -0.000000, 1.000000}, + {0.954624, -0.000000, -0.455531, -0.000000, 1.800147, -0.000000, 0.804052, -0.000000, 1.000000}, + {0.941420, -0.000000, -0.423373, -0.000000, 1.655541, -0.000000, 0.731793, -0.000000, 1.000000}, + {0.923654, -0.000000, -0.392182, -0.000000, 1.525702, -0.000000, 0.660430, -0.000000, 1.000000}, + {0.907187, -0.000000, -0.361855, -0.000000, 1.412402, -0.000000, 0.593770, -0.000000, 1.000000}, + {0.891124, -0.000000, -0.332323, -0.000000, 1.310456, -0.000000, 0.532708, -0.000000, 1.000000}, + {0.873500, -0.000000, -0.303496, -0.000000, 1.218038, -0.000000, 0.473138, -0.000000, 1.000000}, + {0.857091, -0.000000, -0.275330, -0.000000, 1.138666, -0.000000, 0.418062, -0.000000, 1.000000}, + {0.832424, -0.000000, -0.247736, -0.000000, 1.059338, -0.000000, 0.361886, -0.000000, 1.000000}, + {0.814533, -0.000000, -0.220684, -0.000000, 0.993187, -0.000000, 0.312974, -0.000000, 1.000000}, + {0.797868, -0.000000, -0.194567, -0.000000, 0.935784, -0.000000, 0.267691, -0.000000, 1.000000}, + {0.774203, -0.000000, -0.169058, -0.000000, 0.882685, -0.000000, 0.224154, -0.000000, 1.000000}, + {0.759330, -0.000000, -0.143976, -0.000000, 0.842071, -0.000000, 0.186639, -0.000000, 1.000000}, + {0.744530, -0.000000, -0.119264, -0.000000, 0.807175, -0.000000, 0.152273, -0.000000, 1.000000}, + {0.727192, -0.000000, -0.094892, -0.000000, 0.775597, -0.000000, 0.119979, -0.000000, 1.000000}, + {0.715008, -0.000000, -0.070835, -0.000000, 0.749520, -0.000000, 0.089518, -0.000000, 1.000000}, + {0.705109, -0.000000, -0.047042, -0.000000, 0.725758, -0.000000, 0.059135, -0.000000, 1.000000}, + {0.695260, -0.000000, -0.023482, -0.000000, 0.704104, -0.000000, 0.029348, -0.000000, 1.000000}, + {0.685708, -0.000000, -0.000131, -0.000000, 0.684713, -0.000000, 0.000322, -0.000000, 1.000000}, + {998.305664, -0.000000, -20.000895, -0.000000, 20025.880859, -0.000000, 20000.980469, -0.000000, 1.000000}, + {998.305664, -0.000000, -20.000895, -0.000000, 20025.880859, -0.000000, 20000.980469, -0.000000, 1.000000}, + {998.172546, -0.000000, -20.000353, -0.000000, 20025.337891, -0.000000, 20000.443359, -0.000000, 1.000000}, + {378.913116, -0.000000, -19.862547, -0.000000, 19887.705078, -0.000000, 7549.223145, -0.000000, 1.000000}, + {173.887909, -0.000000, -19.426416, -0.000000, 19452.136719, -0.000000, 3437.047363, -0.000000, 1.000000}, + {91.336052, -0.000000, -18.647791, -0.000000, 18674.585938, -0.000000, 1823.601807, -0.000000, 1.000000}, + {51.090645, -0.000000, -17.419607, -0.000000, 17448.287109, -0.000000, 1016.308838, -0.000000, 1.000000}, + {34.765503, -0.000000, -15.781409, -0.000000, 12609.438477, -0.000000, 641.824646, -0.000000, 1.000000}, + {22.935726, -0.000000, -13.923059, -0.000000, 8201.116211, -0.000000, 439.613495, -0.000000, 1.000000}, + {17.374336, -0.000000, -12.009401, -0.000000, 5580.807129, -0.000000, 321.256165, -0.000000, 1.000000}, + {13.162230, -0.000000, -10.229010, -0.000000, 3661.013672, -0.000000, 230.669128, -0.000000, 1.000000}, + {10.154156, -0.000000, -8.664251, -0.000000, 2402.113770, -0.000000, 165.740784, -0.000000, 1.000000}, + {8.055133, -0.000000, -7.347579, -0.000000, 1588.059937, -0.000000, 120.749664, -0.000000, 1.000000}, + {6.493501, -0.000000, -6.264519, -0.000000, 1066.951294, -0.000000, 88.587204, -0.000000, 1.000000}, + {5.356596, -0.000000, -5.382983, -0.000000, 728.006592, -0.000000, 66.117699, -0.000000, 1.000000}, + {4.484689, -0.000000, -4.668671, -0.000000, 507.806549, -0.000000, 49.950119, -0.000000, 1.000000}, + {3.836012, -0.000000, -4.085837, -0.000000, 360.194397, -0.000000, 38.486553, -0.000000, 1.000000}, + {3.339977, -0.000000, -3.607764, -0.000000, 259.826752, -0.000000, 30.185396, -0.000000, 1.000000}, + {2.933768, -0.000000, -3.212286, -0.000000, 190.955856, -0.000000, 23.957863, -0.000000, 1.000000}, + {2.625576, -0.000000, -2.882353, -0.000000, 142.308273, -0.000000, 19.377966, -0.000000, 1.000000}, + {2.377281, -0.000000, -2.604426, -0.000000, 107.424568, -0.000000, 15.909470, -0.000000, 1.000000}, + {2.172325, -0.000000, -2.368577, -0.000000, 82.501915, -0.000000, 13.208935, -0.000000, 1.000000}, + {2.011713, -0.000000, -2.166433, -0.000000, 64.119171, -0.000000, 11.131875, -0.000000, 1.000000}, + {1.863040, -0.000000, -1.991312, -0.000000, 50.531494, -0.000000, 9.415673, -0.000000, 1.000000}, + {1.737537, -0.000000, -1.838462, -0.000000, 40.393814, -0.000000, 8.039965, -0.000000, 1.000000}, + {1.633933, -0.000000, -1.703898, -0.000000, 32.603786, -0.000000, 6.932382, -0.000000, 1.000000}, + {1.554610, -0.000000, -1.584310, -0.000000, 26.532118, -0.000000, 6.046955, -0.000000, 1.000000}, + {1.475402, -0.000000, -1.477418, -0.000000, 21.890182, -0.000000, 5.280934, -0.000000, 1.000000}, + {1.406395, -0.000000, -1.381327, -0.000000, 18.212904, -0.000000, 4.635618, -0.000000, 1.000000}, + {1.350537, -0.000000, -1.294286, -0.000000, 15.260345, -0.000000, 4.104113, -0.000000, 1.000000}, + {1.304659, -0.000000, -1.214812, -0.000000, 12.874681, -0.000000, 3.658871, -0.000000, 1.000000}, + {1.258044, -0.000000, -1.141865, -0.000000, 10.956322, -0.000000, 3.263624, -0.000000, 1.000000}, + {1.214879, -0.000000, -1.074652, -0.000000, 9.396078, -0.000000, 2.919321, -0.000000, 1.000000}, + {1.186597, -0.000000, -1.012289, -0.000000, 8.089111, -0.000000, 2.639096, -0.000000, 1.000000}, + {1.153076, -0.000000, -0.954190, -0.000000, 7.022493, -0.000000, 2.378364, -0.000000, 1.000000}, + {1.128181, -0.000000, -0.899823, -0.000000, 6.120345, -0.000000, 2.159361, -0.000000, 1.000000}, + {1.105751, -0.000000, -0.848775, -0.000000, 5.361947, -0.000000, 1.966318, -0.000000, 1.000000}, + {1.084143, -0.000000, -0.800726, -0.000000, 4.716421, -0.000000, 1.791840, -0.000000, 1.000000}, + {1.062140, -0.000000, -0.755278, -0.000000, 4.180991, -0.000000, 1.631325, -0.000000, 1.000000}, + {1.041897, -0.000000, -0.712143, -0.000000, 3.718901, -0.000000, 1.488189, -0.000000, 1.000000}, + {1.028538, -0.000000, -0.671095, -0.000000, 3.320058, -0.000000, 1.365576, -0.000000, 1.000000}, + {1.012829, -0.000000, -0.631921, -0.000000, 2.973172, -0.000000, 1.251476, -0.000000, 1.000000}, + {1.000671, -0.000000, -0.594426, -0.000000, 2.679246, -0.000000, 1.150313, -0.000000, 1.000000}, + {0.979573, -0.000000, -0.558470, -0.000000, 2.421418, -0.000000, 1.046061, -0.000000, 1.000000}, + {0.971715, -0.000000, -0.523884, -0.000000, 2.194597, -0.000000, 0.964354, -0.000000, 1.000000}, + {0.955829, -0.000000, -0.490565, -0.000000, 2.001263, -0.000000, 0.879904, -0.000000, 1.000000}, + {0.935232, -0.000000, -0.458370, -0.000000, 1.826279, -0.000000, 0.796294, -0.000000, 1.000000}, + {0.936694, -0.000000, -0.427225, -0.000000, 1.679218, -0.000000, 0.738003, -0.000000, 1.000000}, + {0.913400, -0.000000, -0.397028, -0.000000, 1.541822, -0.000000, 0.662934, -0.000000, 1.000000}, + {0.903221, -0.000000, -0.367699, -0.000000, 1.424504, -0.000000, 0.602501, -0.000000, 1.000000}, + {0.880391, -0.000000, -0.339149, -0.000000, 1.317439, -0.000000, 0.536449, -0.000000, 1.000000}, + {0.862923, -0.000000, -0.311303, -0.000000, 1.221370, -0.000000, 0.477796, -0.000000, 1.000000}, + {0.850968, -0.000000, -0.284116, -0.000000, 1.138954, -0.000000, 0.426038, -0.000000, 1.000000}, + {0.826887, -0.000000, -0.257515, -0.000000, 1.057532, -0.000000, 0.370011, -0.000000, 1.000000}, + {0.812749, -0.000000, -0.231445, -0.000000, 0.992746, -0.000000, 0.322627, -0.000000, 1.000000}, + {0.795176, -0.000000, -0.205869, -0.000000, 0.933137, -0.000000, 0.276691, -0.000000, 1.000000}, + {0.764240, -0.000000, -0.180738, -0.000000, 0.872033, -0.000000, 0.230579, -0.000000, 1.000000}, + {0.746094, -0.000000, -0.156005, -0.000000, 0.828593, -0.000000, 0.192347, -0.000000, 1.000000}, + {0.731032, -0.000000, -0.131632, -0.000000, 0.792854, -0.000000, 0.157679, -0.000000, 1.000000}, + {0.715943, -0.000000, -0.107589, -0.000000, 0.761541, -0.000000, 0.125760, -0.000000, 1.000000}, + {0.700419, -0.000000, -0.083846, -0.000000, 0.732819, -0.000000, 0.095441, -0.000000, 1.000000}, + {0.688468, -0.000000, -0.060364, -0.000000, 0.707722, -0.000000, 0.065242, -0.000000, 1.000000}, + {0.676600, -0.000000, -0.037115, -0.000000, 0.684819, -0.000000, 0.036227, -0.000000, 1.000000}, + {0.665275, -0.000000, -0.014072, -0.000000, 0.664032, -0.000000, 0.007569, -0.000000, 1.000000}, + {994.893127, -0.000000, -39.820560, -0.000000, 39833.109375, -0.000000, 39820.683594, -0.000000, 1.000000}, + {994.893127, -0.000000, -39.820560, -0.000000, 39833.109375, -0.000000, 39820.683594, -0.000000, 1.000000}, + {994.406372, -0.000000, -39.816357, -0.000000, 39828.910156, -0.000000, 39816.492188, -0.000000, 1.000000}, + {483.708405, -0.000000, -38.576591, -0.000000, 38589.546875, -0.000000, 18686.171875, -0.000000, 1.000000}, + {197.322464, -0.000000, -35.799675, -0.000000, 35813.636719, -0.000000, 7299.633301, -0.000000, 1.000000}, + {100.446022, -0.000000, -31.315689, -0.000000, 31331.654297, -0.000000, 3950.703613, -0.000000, 1.000000}, + {56.279198, -0.000000, -25.957386, -0.000000, 25976.642578, -0.000000, 1797.385010, -0.000000, 1.000000}, + {28.154728, -0.000000, -20.744593, -0.000000, 20768.679688, -0.000000, 725.731995, -0.000000, 1.000000}, + {19.027901, -0.000000, -16.364071, -0.000000, 16394.599609, -0.000000, 464.752045, -0.000000, 1.000000}, + {13.055046, -0.000000, -12.959450, -0.000000, 8970.863281, -0.000000, 352.151031, -0.000000, 1.000000}, + {10.366891, -0.000000, -10.395847, -0.000000, 5685.630859, -0.000000, 253.332947, -0.000000, 1.000000}, + {7.880549, -0.000000, -8.480193, -0.000000, 3241.803711, -0.000000, 167.085403, -0.000000, 1.000000}, + {6.323206, -0.000000, -7.036265, -0.000000, 2002.726563, -0.000000, 116.059944, -0.000000, 1.000000}, + {5.031785, -0.000000, -5.930668, -0.000000, 1186.607544, -0.000000, 83.446808, -0.000000, 1.000000}, + {4.369559, -0.000000, -5.070666, -0.000000, 843.374939, -0.000000, 61.138889, -0.000000, 1.000000}, + {3.756168, -0.000000, -4.392256, -0.000000, 569.649048, -0.000000, 46.177486, -0.000000, 1.000000}, + {3.284899, -0.000000, -3.848196, -0.000000, 394.281097, -0.000000, 35.739964, -0.000000, 1.000000}, + {2.883921, -0.000000, -3.405721, -0.000000, 281.049377, -0.000000, 27.902145, -0.000000, 1.000000}, + {2.571442, -0.000000, -3.041261, -0.000000, 204.300674, -0.000000, 22.228493, -0.000000, 1.000000}, + {2.339132, -0.000000, -2.737367, -0.000000, 150.837967, -0.000000, 18.141542, -0.000000, 1.000000}, + {2.120369, -0.000000, -2.481805, -0.000000, 114.263908, -0.000000, 14.825736, -0.000000, 1.000000}, + {1.948635, -0.000000, -2.264440, -0.000000, 87.588432, -0.000000, 12.315406, -0.000000, 1.000000}, + {1.800365, -0.000000, -2.077432, -0.000000, 68.310730, -0.000000, 10.325802, -0.000000, 1.000000}, + {1.670523, -0.000000, -1.915280, -0.000000, 54.053909, -0.000000, 8.719241, -0.000000, 1.000000}, + {1.569876, -0.000000, -1.773206, -0.000000, 43.103451, -0.000000, 7.467847, -0.000000, 1.000000}, + {1.490116, -0.000000, -1.647683, -0.000000, 34.827641, -0.000000, 6.471271, -0.000000, 1.000000}, + {1.422787, -0.000000, -1.536024, -0.000000, 28.357239, -0.000000, 5.650585, -0.000000, 1.000000}, + {1.350524, -0.000000, -1.435881, -0.000000, 23.424438, -0.000000, 4.917717, -0.000000, 1.000000}, + {1.300449, -0.000000, -1.345390, -0.000000, 19.401968, -0.000000, 4.356206, -0.000000, 1.000000}, + {1.254408, -0.000000, -1.263086, -0.000000, 16.257393, -0.000000, 3.864878, -0.000000, 1.000000}, + {1.213426, -0.000000, -1.187775, -0.000000, 13.705538, -0.000000, 3.445318, -0.000000, 1.000000}, + {1.187376, -0.000000, -1.118480, -0.000000, 11.611020, -0.000000, 3.109415, -0.000000, 1.000000}, + {1.152678, -0.000000, -1.054393, -0.000000, 9.910876, -0.000000, 2.790627, -0.000000, 1.000000}, + {1.124951, -0.000000, -0.994833, -0.000000, 8.515365, -0.000000, 2.520195, -0.000000, 1.000000}, + {1.108641, -0.000000, -0.939255, -0.000000, 7.359449, -0.000000, 2.299614, -0.000000, 1.000000}, + {1.078992, -0.000000, -0.887192, -0.000000, 6.403783, -0.000000, 2.077591, -0.000000, 1.000000}, + {1.068358, -0.000000, -0.838210, -0.000000, 5.579926, -0.000000, 1.911003, -0.000000, 1.000000}, + {1.045544, -0.000000, -0.791979, -0.000000, 4.909517, -0.000000, 1.737019, -0.000000, 1.000000}, + {1.039163, -0.000000, -0.748193, -0.000000, 4.324389, -0.000000, 1.605678, -0.000000, 1.000000}, + {1.017055, -0.000000, -0.706611, -0.000000, 3.844195, -0.000000, 1.462573, -0.000000, 1.000000}, + {1.004383, -0.000000, -0.666994, -0.000000, 3.423768, -0.000000, 1.342792, -0.000000, 1.000000}, + {0.992540, -0.000000, -0.629166, -0.000000, 3.063540, -0.000000, 1.237080, -0.000000, 1.000000}, + {0.984481, -0.000000, -0.592946, -0.000000, 2.750717, -0.000000, 1.141492, -0.000000, 1.000000}, + {0.967479, -0.000000, -0.558180, -0.000000, 2.481156, -0.000000, 1.043608, -0.000000, 1.000000}, + {0.962412, -0.000000, -0.524746, -0.000000, 2.244889, -0.000000, 0.966517, -0.000000, 1.000000}, + {0.947635, -0.000000, -0.492520, -0.000000, 2.040848, -0.000000, 0.884740, -0.000000, 1.000000}, + {0.927563, -0.000000, -0.461392, -0.000000, 1.857744, -0.000000, 0.802900, -0.000000, 1.000000}, + {0.918131, -0.000000, -0.431266, -0.000000, 1.701805, -0.000000, 0.735842, -0.000000, 1.000000}, + {0.907630, -0.000000, -0.402059, -0.000000, 1.563891, -0.000000, 0.672641, -0.000000, 1.000000}, + {0.883494, -0.000000, -0.373698, -0.000000, 1.434873, -0.000000, 0.602092, -0.000000, 1.000000}, + {0.869519, -0.000000, -0.346105, -0.000000, 1.325065, -0.000000, 0.543472, -0.000000, 1.000000}, + {0.861498, -0.000000, -0.319216, -0.000000, 1.229527, -0.000000, 0.491262, -0.000000, 1.000000}, + {0.832228, -0.000000, -0.292972, -0.000000, 1.130479, -0.000000, 0.429526, -0.000000, 1.000000}, + {0.816181, -0.000000, -0.267321, -0.000000, 1.051445, -0.000000, 0.378898, -0.000000, 1.000000}, + {0.786525, -0.000000, -0.242210, -0.000000, 0.970167, -0.000000, 0.325618, -0.000000, 1.000000}, + {0.780779, -0.000000, -0.217600, -0.000000, 0.918654, -0.000000, 0.284465, -0.000000, 1.000000}, + {0.762468, -0.000000, -0.193452, -0.000000, 0.865830, -0.000000, 0.241828, -0.000000, 1.000000}, + {0.731299, -0.000000, -0.169721, -0.000000, 0.812862, -0.000000, 0.200252, -0.000000, 1.000000}, + {0.713894, -0.000000, -0.146372, -0.000000, 0.774122, -0.000000, 0.165581, -0.000000, 1.000000}, + {0.702714, -0.000000, -0.123373, -0.000000, 0.742843, -0.000000, 0.133586, -0.000000, 1.000000}, + {0.691956, -0.000000, -0.100693, -0.000000, 0.716288, -0.000000, 0.103949, -0.000000, 1.000000}, + {0.668866, -0.000000, -0.078304, -0.000000, 0.686033, -0.000000, 0.074789, -0.000000, 1.000000}, + {0.654494, -0.000000, -0.056178, -0.000000, 0.661872, -0.000000, 0.046786, -0.000000, 1.000000}, + {0.640656, -0.000000, -0.034292, -0.000000, 0.639283, -0.000000, 0.018889, -0.000000, 1.000000}, + {368.624268, -0.000000, -255.918320, -0.000000, 255920.265625, -0.000000, 255920.796875, -0.000000, 1.000000}, + {368.624268, -0.000000, -255.918320, -0.000000, 255920.265625, -0.000000, 255920.796875, -0.000000, 1.000000}, + {364.104523, -0.000000, -253.713470, -0.000000, 253715.421875, -0.000000, 253715.968750, -0.000000, 1.000000}, + {284.967621, -0.000000, -105.050774, -0.000000, 105055.539063, -0.000000, 105057.585938, -0.000000, 1.000000}, + {225.051605, -0.000000, -57.172325, -0.000000, 57181.070313, -0.000000, 57185.875000, -0.000000, 1.000000}, + {11.684321, -0.000000, -36.029091, -0.000000, 36042.972656, -0.000000, 621.735474, -0.000000, 1.000000}, + {25.042456, -0.000000, -24.817822, -0.000000, 24837.957031, -0.000000, 2865.348877, -0.000000, 1.000000}, + {17.127863, -0.000000, -18.154654, -0.000000, 18182.173828, -0.000000, 384.187866, -0.000000, 1.000000}, + {11.650437, -0.000000, -13.869071, -0.000000, 13905.077148, -0.000000, 224.628876, -0.000000, 1.000000}, + {8.216252, -0.000000, -10.950104, -0.000000, 10331.644531, -0.000000, 260.237000, -0.000000, 1.000000}, + {5.907559, -0.000000, -8.873001, -0.000000, 8929.172852, -0.000000, 102.799171, -0.000000, 1.000000}, + {4.817279, -0.000000, -7.343625, -0.000000, 5326.685547, -0.000000, 72.651924, -0.000000, 1.000000}, + {2.978287, -0.000000, -6.185863, -0.000000, 2897.457764, -0.000000, 66.361404, -0.000000, 1.000000}, + {3.631224, -0.000000, -5.289113, -0.000000, 1569.821289, -0.000000, 66.001900, -0.000000, 1.000000}, + {3.187469, -0.000000, -4.581205, -0.000000, 1033.481079, -0.000000, 48.582752, -0.000000, 1.000000}, + {2.768893, -0.000000, -4.013087, -0.000000, 684.398560, -0.000000, 37.436520, -0.000000, 1.000000}, + {2.457926, -0.000000, -3.550626, -0.000000, 470.771790, -0.000000, 29.091085, -0.000000, 1.000000}, + {2.314997, -0.000000, -3.169384, -0.000000, 328.752625, -0.000000, 23.818150, -0.000000, 1.000000}, + {2.093580, -0.000000, -2.851492, -0.000000, 236.043579, -0.000000, 19.236486, -0.000000, 1.000000}, + {1.909406, -0.000000, -2.583620, -0.000000, 173.956696, -0.000000, 15.624541, -0.000000, 1.000000}, + {1.759313, -0.000000, -2.355661, -0.000000, 130.381760, -0.000000, 12.901838, -0.000000, 1.000000}, + {1.632784, -0.000000, -2.159850, -0.000000, 99.546364, -0.000000, 10.774215, -0.000000, 1.000000}, + {1.514441, -0.000000, -1.990140, -0.000000, 77.199669, -0.000000, 9.025685, -0.000000, 1.000000}, + {1.409535, -0.000000, -1.841777, -0.000000, 60.638985, -0.000000, 7.615921, -0.000000, 1.000000}, + {1.393320, -0.000000, -1.711004, -0.000000, 47.528347, -0.000000, 6.799057, -0.000000, 1.000000}, + {1.320484, -0.000000, -1.594821, -0.000000, 38.236202, -0.000000, 5.873020, -0.000000, 1.000000}, + {1.242410, -0.000000, -1.490820, -0.000000, 31.031847, -0.000000, 5.054711, -0.000000, 1.000000}, + {1.237673, -0.000000, -1.397065, -0.000000, 25.284676, -0.000000, 4.582990, -0.000000, 1.000000}, + {1.182925, -0.000000, -1.311984, -0.000000, 20.992647, -0.000000, 4.017620, -0.000000, 1.000000}, + {1.176501, -0.000000, -1.234298, -0.000000, 17.318192, -0.000000, 3.665294, -0.000000, 1.000000}, + {1.133547, -0.000000, -1.162960, -0.000000, 14.591148, -0.000000, 3.253035, -0.000000, 1.000000}, + {1.125217, -0.000000, -1.097106, -0.000000, 12.296440, -0.000000, 2.969493, -0.000000, 1.000000}, + {1.093465, -0.000000, -1.036020, -0.000000, 10.463271, -0.000000, 2.666238, -0.000000, 1.000000}, + {1.083275, -0.000000, -0.979105, -0.000000, 8.956235, -0.000000, 2.440557, -0.000000, 1.000000}, + {1.060562, -0.000000, -0.925860, -0.000000, 7.713723, -0.000000, 2.215227, -0.000000, 1.000000}, + {1.049519, -0.000000, -0.875859, -0.000000, 6.682784, -0.000000, 2.032087, -0.000000, 1.000000}, + {1.032032, -0.000000, -0.828741, -0.000000, 5.827990, -0.000000, 1.857221, -0.000000, 1.000000}, + {1.018987, -0.000000, -0.784196, -0.000000, 5.116087, -0.000000, 1.705405, -0.000000, 1.000000}, + {1.007602, -0.000000, -0.741956, -0.000000, 4.498546, -0.000000, 1.568523, -0.000000, 1.000000}, + {0.992375, -0.000000, -0.701791, -0.000000, 3.980726, -0.000000, 1.437860, -0.000000, 1.000000}, + {0.988607, -0.000000, -0.663498, -0.000000, 3.541646, -0.000000, 1.334776, -0.000000, 1.000000}, + {0.968230, -0.000000, -0.626898, -0.000000, 3.166821, -0.000000, 1.216528, -0.000000, 1.000000}, + {0.944781, -0.000000, -0.591836, -0.000000, 2.831877, -0.000000, 1.106590, -0.000000, 1.000000}, + {0.945987, -0.000000, -0.558172, -0.000000, 2.559725, -0.000000, 1.033804, -0.000000, 1.000000}, + {0.923684, -0.000000, -0.525783, -0.000000, 2.299483, -0.000000, 0.939927, -0.000000, 1.000000}, + {0.931669, -0.000000, -0.494561, -0.000000, 2.097793, -0.000000, 0.884566, -0.000000, 1.000000}, + {0.900607, -0.000000, -0.464405, -0.000000, 1.898084, -0.000000, 0.794077, -0.000000, 1.000000}, + {0.907272, -0.000000, -0.435227, -0.000000, 1.739798, -0.000000, 0.742634, -0.000000, 1.000000}, + {0.893180, -0.000000, -0.406948, -0.000000, 1.591641, -0.000000, 0.678342, -0.000000, 1.000000}, + {0.855697, -0.000000, -0.379493, -0.000000, 1.438521, -0.000000, 0.600044, -0.000000, 1.000000}, + {0.856723, -0.000000, -0.352800, -0.000000, 1.334550, -0.000000, 0.553423, -0.000000, 1.000000}, + {0.824318, -0.000000, -0.326806, -0.000000, 1.209542, -0.000000, 0.488206, -0.000000, 1.000000}, + {0.806548, -0.000000, -0.301457, -0.000000, 1.113896, -0.000000, 0.435934, -0.000000, 1.000000}, + {0.810348, -0.000000, -0.276705, -0.000000, 1.049273, -0.000000, 0.394856, -0.000000, 1.000000}, + {0.767125, -0.000000, -0.252502, -0.000000, 0.951908, -0.000000, 0.337448, -0.000000, 1.000000}, + {0.749976, -0.000000, -0.228807, -0.000000, 0.889436, -0.000000, 0.291562, -0.000000, 1.000000}, + {0.732485, -0.000000, -0.205582, -0.000000, 0.836374, -0.000000, 0.249723, -0.000000, 1.000000}, + {0.707799, -0.000000, -0.182791, -0.000000, 0.785760, -0.000000, 0.210818, -0.000000, 1.000000}, + {0.698760, -0.000000, -0.160400, -0.000000, 0.749314, -0.000000, 0.176389, -0.000000, 1.000000}, + {0.684260, -0.000000, -0.138380, -0.000000, 0.715853, -0.000000, 0.143288, -0.000000, 1.000000}, + {0.662066, -0.000000, -0.116703, -0.000000, 0.682031, -0.000000, 0.113378, -0.000000, 1.000000}, + {0.649300, -0.000000, -0.095341, -0.000000, 0.658064, -0.000000, 0.086197, -0.000000, 1.000000}, + {0.623254, -0.000000, -0.074271, -0.000000, 0.630556, -0.000000, 0.058888, -0.000000, 1.000000}, + {0.609037, -0.000000, -0.053470, -0.000000, 0.607151, -0.000000, 0.031450, -0.000000, 1.000000} + }; + + static float[] s_LtcGGXMagnitudeData = new float[k_LtcLUTResolution * k_LtcLUTResolution] + { + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999995f, + 0.999990f, + 0.999971f, + 0.999936f, + 0.999853f, + 0.999670f, + 0.999138f, + 0.996746f, + 0.979578f, + 0.979309f, + 0.978836f, + 0.977972f, + 0.976223f, + 0.972205f, + 0.962466f, + 0.953919f, + 0.949829f, + 0.942492f, + 0.929870f, + 0.921319f, + 0.911112f, + 0.896015f, + 0.885105f, + 0.869971f, + 0.855017f, + 0.838328f, + 0.821241f, + 0.802352f, + 0.783874f, + 0.763309f, + 0.743058f, + 0.721929f, + 0.699755f, + 0.677721f, + 0.655456f, + 0.632681f, + 0.609629f, + 0.586831f, + 0.564287f, + 0.541772f, + 0.519428f, + 0.497353f, + 0.475624f, + 0.454606f, + 0.434099f, + 0.414085f, + 0.394605f, + 0.375698f, + 0.357386f, + 0.339871f, + 0.323085f, + 0.306905f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999999f, + 0.999999f, + 0.999998f, + 0.999995f, + 0.999990f, + 0.999980f, + 0.999959f, + 0.999923f, + 0.999842f, + 0.999660f, + 0.999119f, + 0.996613f, + 0.981824f, + 0.979298f, + 0.978826f, + 0.977957f, + 0.976184f, + 0.972091f, + 0.962188f, + 0.953875f, + 0.949746f, + 0.942335f, + 0.930166f, + 0.921210f, + 0.910927f, + 0.896979f, + 0.884940f, + 0.869864f, + 0.854835f, + 0.838200f, + 0.821049f, + 0.802552f, + 0.783659f, + 0.763512f, + 0.742928f, + 0.721715f, + 0.699938f, + 0.677775f, + 0.655246f, + 0.632555f, + 0.609805f, + 0.586996f, + 0.564225f, + 0.541606f, + 0.519346f, + 0.497419f, + 0.475863f, + 0.454738f, + 0.434099f, + 0.414003f, + 0.394547f, + 0.375747f, + 0.357564f, + 0.340012f, + 0.323099f, + 0.306861f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999999f, + 0.999998f, + 0.999995f, + 0.999991f, + 0.999979f, + 0.999959f, + 0.999917f, + 0.999839f, + 0.999648f, + 0.999074f, + 0.996168f, + 0.983770f, + 0.979279f, + 0.978800f, + 0.977905f, + 0.976058f, + 0.971727f, + 0.962121f, + 0.953901f, + 0.949486f, + 0.941859f, + 0.930911f, + 0.920853f, + 0.910394f, + 0.897600f, + 0.884427f, + 0.870101f, + 0.854522f, + 0.838324f, + 0.820754f, + 0.802707f, + 0.783223f, + 0.763605f, + 0.742872f, + 0.721566f, + 0.699935f, + 0.677726f, + 0.655242f, + 0.632580f, + 0.609766f, + 0.586946f, + 0.564275f, + 0.541759f, + 0.519467f, + 0.497478f, + 0.475886f, + 0.454794f, + 0.434233f, + 0.414207f, + 0.394751f, + 0.375892f, + 0.357683f, + 0.340146f, + 0.323287f, + 0.307095f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999999f, + 0.999999f, + 0.999998f, + 0.999996f, + 0.999992f, + 0.999986f, + 0.999975f, + 0.999953f, + 0.999913f, + 0.999831f, + 0.999630f, + 0.998993f, + 0.995279f, + 0.985142f, + 0.979252f, + 0.978754f, + 0.977821f, + 0.975838f, + 0.971088f, + 0.962563f, + 0.954785f, + 0.949048f, + 0.941052f, + 0.931420f, + 0.920812f, + 0.909750f, + 0.897867f, + 0.883856f, + 0.870091f, + 0.854353f, + 0.838166f, + 0.820660f, + 0.802465f, + 0.783308f, + 0.763346f, + 0.742734f, + 0.721608f, + 0.699747f, + 0.677626f, + 0.655245f, + 0.632547f, + 0.609793f, + 0.587044f, + 0.564340f, + 0.541779f, + 0.519529f, + 0.497633f, + 0.476114f, + 0.455030f, + 0.434430f, + 0.414405f, + 0.394974f, + 0.376154f, + 0.357979f, + 0.340443f, + 0.323572f, + 0.307379f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999998f, + 0.999998f, + 0.999996f, + 0.999991f, + 0.999984f, + 0.999970f, + 0.999946f, + 0.999905f, + 0.999815f, + 0.999599f, + 0.998856f, + 0.993704f, + 0.986135f, + 0.979212f, + 0.978690f, + 0.977691f, + 0.975504f, + 0.970133f, + 0.962951f, + 0.955649f, + 0.948405f, + 0.940418f, + 0.931660f, + 0.920881f, + 0.909376f, + 0.897785f, + 0.883844f, + 0.869756f, + 0.854326f, + 0.837732f, + 0.820617f, + 0.802053f, + 0.783195f, + 0.763119f, + 0.742610f, + 0.721344f, + 0.699709f, + 0.677623f, + 0.655114f, + 0.632523f, + 0.609812f, + 0.587052f, + 0.564417f, + 0.541966f, + 0.519751f, + 0.497824f, + 0.476309f, + 0.455271f, + 0.434735f, + 0.414736f, + 0.395317f, + 0.376524f, + 0.358364f, + 0.340852f, + 0.323988f, + 0.307786f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999999f, + 0.999999f, + 0.999997f, + 0.999996f, + 0.999994f, + 0.999989f, + 0.999980f, + 0.999965f, + 0.999940f, + 0.999895f, + 0.999796f, + 0.999559f, + 0.998638f, + 0.992774f, + 0.986878f, + 0.980297f, + 0.978602f, + 0.977514f, + 0.975026f, + 0.969169f, + 0.963214f, + 0.956267f, + 0.947689f, + 0.940054f, + 0.931637f, + 0.920678f, + 0.908990f, + 0.897349f, + 0.883905f, + 0.869139f, + 0.854177f, + 0.837476f, + 0.820295f, + 0.801977f, + 0.782798f, + 0.762978f, + 0.742418f, + 0.721193f, + 0.699560f, + 0.677402f, + 0.655108f, + 0.632543f, + 0.609804f, + 0.587158f, + 0.564557f, + 0.542096f, + 0.519908f, + 0.498089f, + 0.476632f, + 0.455623f, + 0.435104f, + 0.415161f, + 0.395783f, + 0.377005f, + 0.358843f, + 0.341345f, + 0.324529f, + 0.308355f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999999f, + 0.999999f, + 0.999998f, + 0.999997f, + 0.999992f, + 0.999991f, + 0.999984f, + 0.999977f, + 0.999959f, + 0.999935f, + 0.999878f, + 0.999773f, + 0.999505f, + 0.998284f, + 0.992353f, + 0.987457f, + 0.981665f, + 0.978492f, + 0.977277f, + 0.974360f, + 0.968716f, + 0.963374f, + 0.956629f, + 0.947397f, + 0.939657f, + 0.931339f, + 0.920588f, + 0.908975f, + 0.896712f, + 0.883763f, + 0.868890f, + 0.853731f, + 0.837333f, + 0.819702f, + 0.801738f, + 0.782454f, + 0.762712f, + 0.742024f, + 0.721037f, + 0.699325f, + 0.677359f, + 0.655030f, + 0.632439f, + 0.609869f, + 0.587221f, + 0.564663f, + 0.542328f, + 0.520220f, + 0.498400f, + 0.476997f, + 0.456053f, + 0.435593f, + 0.415658f, + 0.396300f, + 0.377577f, + 0.359473f, + 0.342004f, + 0.325170f, + 0.308997f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999999f, + 0.999998f, + 0.999998f, + 0.999996f, + 0.999992f, + 0.999988f, + 0.999981f, + 0.999971f, + 0.999952f, + 0.999921f, + 0.999863f, + 0.999748f, + 0.999433f, + 0.997680f, + 0.992120f, + 0.987920f, + 0.982864f, + 0.978353f, + 0.976961f, + 0.973451f, + 0.968396f, + 0.963400f, + 0.956680f, + 0.947529f, + 0.939151f, + 0.930747f, + 0.920511f, + 0.908867f, + 0.896142f, + 0.883335f, + 0.868764f, + 0.853025f, + 0.837015f, + 0.819452f, + 0.801249f, + 0.782176f, + 0.762345f, + 0.741843f, + 0.720721f, + 0.699135f, + 0.677193f, + 0.654889f, + 0.632487f, + 0.609902f, + 0.587328f, + 0.564891f, + 0.542567f, + 0.520501f, + 0.498793f, + 0.477442f, + 0.456528f, + 0.436131f, + 0.416273f, + 0.396980f, + 0.378276f, + 0.360177f, + 0.342738f, + 0.325950f, + 0.309803f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 1.000000f, + 0.999999f, + 0.999999f, + 0.999997f, + 0.999995f, + 0.999991f, + 0.999985f, + 0.999978f, + 0.999963f, + 0.999942f, + 0.999907f, + 0.999844f, + 0.999715f, + 0.999332f, + 0.996612f, + 0.991974f, + 0.988297f, + 0.983843f, + 0.978349f, + 0.976540f, + 0.972351f, + 0.968109f, + 0.963281f, + 0.956464f, + 0.947779f, + 0.938754f, + 0.929952f, + 0.920253f, + 0.908530f, + 0.895785f, + 0.882679f, + 0.868456f, + 0.852669f, + 0.836406f, + 0.819138f, + 0.800708f, + 0.781803f, + 0.761855f, + 0.741534f, + 0.720405f, + 0.698959f, + 0.676964f, + 0.654827f, + 0.632411f, + 0.609922f, + 0.587477f, + 0.565050f, + 0.542829f, + 0.520889f, + 0.499225f, + 0.477951f, + 0.457148f, + 0.436791f, + 0.416963f, + 0.397723f, + 0.379068f, + 0.361025f, + 0.343608f, + 0.326842f, + 0.310718f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999998f, + 0.999994f, + 0.999994f, + 0.999990f, + 0.999983f, + 0.999971f, + 0.999954f, + 0.999932f, + 0.999892f, + 0.999820f, + 0.999675f, + 0.999190f, + 0.995492f, + 0.991911f, + 0.988610f, + 0.984662f, + 0.979221f, + 0.975975f, + 0.971671f, + 0.967788f, + 0.963002f, + 0.955938f, + 0.947964f, + 0.938692f, + 0.929309f, + 0.919781f, + 0.908267f, + 0.895518f, + 0.882022f, + 0.867884f, + 0.852346f, + 0.835746f, + 0.818607f, + 0.800261f, + 0.781335f, + 0.761539f, + 0.741063f, + 0.720116f, + 0.698617f, + 0.676815f, + 0.654700f, + 0.632388f, + 0.610037f, + 0.587591f, + 0.565328f, + 0.543205f, + 0.521293f, + 0.499745f, + 0.478562f, + 0.457776f, + 0.437515f, + 0.417776f, + 0.398586f, + 0.379963f, + 0.361984f, + 0.344616f, + 0.327857f, + 0.311751f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999997f, + 0.999996f, + 0.999992f, + 0.999986f, + 0.999977f, + 0.999965f, + 0.999947f, + 0.999916f, + 0.999873f, + 0.999794f, + 0.999628f, + 0.998966f, + 0.994914f, + 0.991849f, + 0.988873f, + 0.985288f, + 0.980170f, + 0.975207f, + 0.971156f, + 0.967476f, + 0.962538f, + 0.955601f, + 0.947978f, + 0.938541f, + 0.928618f, + 0.919056f, + 0.907890f, + 0.895098f, + 0.881352f, + 0.867263f, + 0.851805f, + 0.835168f, + 0.818003f, + 0.799785f, + 0.780633f, + 0.761080f, + 0.740618f, + 0.719795f, + 0.698332f, + 0.676629f, + 0.654544f, + 0.632411f, + 0.610042f, + 0.587805f, + 0.565593f, + 0.543549f, + 0.521793f, + 0.500309f, + 0.479195f, + 0.458546f, + 0.438353f, + 0.418669f, + 0.399557f, + 0.381012f, + 0.363049f, + 0.345710f, + 0.329006f, + 0.312948f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999998f, + 0.999997f, + 0.999993f, + 0.999990f, + 0.999984f, + 0.999972f, + 0.999959f, + 0.999939f, + 0.999906f, + 0.999853f, + 0.999765f, + 0.999567f, + 0.998603f, + 0.994519f, + 0.991794f, + 0.989089f, + 0.985781f, + 0.980956f, + 0.974161f, + 0.970688f, + 0.967064f, + 0.961890f, + 0.955292f, + 0.947848f, + 0.938359f, + 0.928226f, + 0.918214f, + 0.907361f, + 0.894702f, + 0.880834f, + 0.866500f, + 0.851209f, + 0.834627f, + 0.817211f, + 0.799250f, + 0.780131f, + 0.760512f, + 0.740218f, + 0.719264f, + 0.698063f, + 0.676325f, + 0.654450f, + 0.632316f, + 0.610170f, + 0.587988f, + 0.565891f, + 0.544013f, + 0.522305f, + 0.500958f, + 0.479971f, + 0.459377f, + 0.439271f, + 0.419698f, + 0.400620f, + 0.382126f, + 0.364246f, + 0.346967f, + 0.330273f, + 0.314236f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999998f, + 0.999996f, + 0.999994f, + 0.999988f, + 0.999979f, + 0.999967f, + 0.999952f, + 0.999924f, + 0.999888f, + 0.999833f, + 0.999733f, + 0.999490f, + 0.997946f, + 0.994192f, + 0.991812f, + 0.989274f, + 0.986224f, + 0.981547f, + 0.974000f, + 0.970269f, + 0.966545f, + 0.961031f, + 0.954921f, + 0.947416f, + 0.938226f, + 0.928003f, + 0.917390f, + 0.906553f, + 0.894191f, + 0.880329f, + 0.865540f, + 0.850476f, + 0.834058f, + 0.816467f, + 0.798509f, + 0.779561f, + 0.759828f, + 0.739738f, + 0.718877f, + 0.697718f, + 0.676138f, + 0.654342f, + 0.632317f, + 0.610292f, + 0.588207f, + 0.566288f, + 0.544443f, + 0.522927f, + 0.501674f, + 0.480765f, + 0.460314f, + 0.440304f, + 0.420782f, + 0.401824f, + 0.383410f, + 0.365538f, + 0.348312f, + 0.331692f, + 0.315688f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999998f, + 0.999996f, + 0.999993f, + 0.999985f, + 0.999976f, + 0.999961f, + 0.999943f, + 0.999913f, + 0.999872f, + 0.999807f, + 0.999691f, + 0.999390f, + 0.996859f, + 0.994003f, + 0.991808f, + 0.989423f, + 0.986523f, + 0.981783f, + 0.974511f, + 0.969791f, + 0.965933f, + 0.960377f, + 0.954434f, + 0.946803f, + 0.938026f, + 0.927620f, + 0.916545f, + 0.905639f, + 0.893489f, + 0.879820f, + 0.864852f, + 0.849513f, + 0.833311f, + 0.815878f, + 0.797622f, + 0.778938f, + 0.759253f, + 0.739142f, + 0.718479f, + 0.697274f, + 0.675902f, + 0.654135f, + 0.632357f, + 0.610364f, + 0.588497f, + 0.566631f, + 0.545012f, + 0.523579f, + 0.502429f, + 0.481680f, + 0.461304f, + 0.441425f, + 0.422039f, + 0.403135f, + 0.384779f, + 0.366976f, + 0.349796f, + 0.333231f, + 0.317277f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999999f, + 0.999998f, + 0.999996f, + 0.999991f, + 0.999983f, + 0.999974f, + 0.999956f, + 0.999932f, + 0.999901f, + 0.999852f, + 0.999780f, + 0.999646f, + 0.999248f, + 0.996193f, + 0.993784f, + 0.991782f, + 0.989539f, + 0.986694f, + 0.981765f, + 0.975135f, + 0.969309f, + 0.965129f, + 0.959788f, + 0.953831f, + 0.946255f, + 0.937664f, + 0.927351f, + 0.916044f, + 0.904715f, + 0.892528f, + 0.879111f, + 0.864256f, + 0.848452f, + 0.832434f, + 0.815129f, + 0.796806f, + 0.778118f, + 0.758668f, + 0.738466f, + 0.718024f, + 0.696958f, + 0.675643f, + 0.654067f, + 0.632325f, + 0.610546f, + 0.588786f, + 0.567123f, + 0.545617f, + 0.524312f, + 0.503348f, + 0.482637f, + 0.462418f, + 0.442657f, + 0.423338f, + 0.404564f, + 0.386277f, + 0.368545f, + 0.351448f, + 0.334906f, + 0.318961f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999994f, + 0.999989f, + 0.999979f, + 0.999968f, + 0.999949f, + 0.999921f, + 0.999886f, + 0.999833f, + 0.999747f, + 0.999596f, + 0.999029f, + 0.995748f, + 0.993677f, + 0.991724f, + 0.989620f, + 0.986723f, + 0.981515f, + 0.975767f, + 0.969056f, + 0.964124f, + 0.959142f, + 0.953036f, + 0.945650f, + 0.937022f, + 0.926971f, + 0.915515f, + 0.903584f, + 0.891602f, + 0.878212f, + 0.863472f, + 0.847653f, + 0.831398f, + 0.814299f, + 0.796105f, + 0.777231f, + 0.757977f, + 0.737895f, + 0.717415f, + 0.696595f, + 0.675317f, + 0.653980f, + 0.632343f, + 0.610735f, + 0.589076f, + 0.567620f, + 0.546251f, + 0.525165f, + 0.504255f, + 0.483759f, + 0.463666f, + 0.443987f, + 0.424783f, + 0.406042f, + 0.387891f, + 0.370293f, + 0.353221f, + 0.336715f, + 0.320806f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999993f, + 0.999987f, + 0.999977f, + 0.999964f, + 0.999943f, + 0.999911f, + 0.999867f, + 0.999808f, + 0.999714f, + 0.999531f, + 0.998645f, + 0.995399f, + 0.993512f, + 0.991717f, + 0.989661f, + 0.986652f, + 0.981559f, + 0.976182f, + 0.969411f, + 0.963317f, + 0.958457f, + 0.952091f, + 0.944951f, + 0.936307f, + 0.926454f, + 0.915043f, + 0.902668f, + 0.890462f, + 0.877245f, + 0.862672f, + 0.846823f, + 0.830201f, + 0.813293f, + 0.795306f, + 0.776393f, + 0.757199f, + 0.737324f, + 0.716808f, + 0.696187f, + 0.675094f, + 0.653814f, + 0.632453f, + 0.610885f, + 0.589483f, + 0.568099f, + 0.546975f, + 0.525953f, + 0.505268f, + 0.484936f, + 0.464988f, + 0.445458f, + 0.426314f, + 0.407750f, + 0.389670f, + 0.372098f, + 0.355105f, + 0.338682f, + 0.322825f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999998f, + 0.999996f, + 0.999992f, + 0.999983f, + 0.999976f, + 0.999959f, + 0.999933f, + 0.999898f, + 0.999849f, + 0.999780f, + 0.999676f, + 0.999454f, + 0.997884f, + 0.995166f, + 0.993394f, + 0.991723f, + 0.989654f, + 0.986389f, + 0.981632f, + 0.976607f, + 0.969701f, + 0.962555f, + 0.957605f, + 0.951232f, + 0.944099f, + 0.935556f, + 0.925699f, + 0.914492f, + 0.902027f, + 0.889116f, + 0.876093f, + 0.861649f, + 0.845956f, + 0.829238f, + 0.812220f, + 0.794420f, + 0.775657f, + 0.756265f, + 0.736673f, + 0.716372f, + 0.695669f, + 0.674886f, + 0.653728f, + 0.632568f, + 0.611217f, + 0.589929f, + 0.568783f, + 0.547751f, + 0.526930f, + 0.506425f, + 0.486238f, + 0.466425f, + 0.446945f, + 0.428026f, + 0.409536f, + 0.391551f, + 0.374087f, + 0.357155f, + 0.340787f, + 0.324974f, + 0.999996f, + 0.999996f, + 0.999996f, + 0.999996f, + 0.999996f, + 0.999996f, + 0.999990f, + 0.999984f, + 0.999970f, + 0.999952f, + 0.999925f, + 0.999886f, + 0.999831f, + 0.999757f, + 0.999633f, + 0.999356f, + 0.997017f, + 0.994868f, + 0.993337f, + 0.991710f, + 0.989580f, + 0.985848f, + 0.981640f, + 0.976711f, + 0.969755f, + 0.962166f, + 0.956609f, + 0.950365f, + 0.943026f, + 0.934693f, + 0.924880f, + 0.913729f, + 0.901350f, + 0.887966f, + 0.874726f, + 0.860474f, + 0.844905f, + 0.828269f, + 0.810905f, + 0.793364f, + 0.774812f, + 0.755478f, + 0.735886f, + 0.715847f, + 0.695231f, + 0.674537f, + 0.653667f, + 0.632527f, + 0.611475f, + 0.590363f, + 0.569462f, + 0.548571f, + 0.527976f, + 0.507634f, + 0.487632f, + 0.467901f, + 0.448680f, + 0.429833f, + 0.411467f, + 0.393568f, + 0.376197f, + 0.359374f, + 0.343034f, + 0.327273f, + 0.999997f, + 0.999997f, + 0.999997f, + 0.999997f, + 0.999997f, + 0.999993f, + 0.999989f, + 0.999980f, + 0.999965f, + 0.999945f, + 0.999913f, + 0.999869f, + 0.999810f, + 0.999723f, + 0.999583f, + 0.999213f, + 0.996540f, + 0.994740f, + 0.993245f, + 0.991671f, + 0.989411f, + 0.985533f, + 0.981616f, + 0.976847f, + 0.969968f, + 0.962314f, + 0.955468f, + 0.949420f, + 0.942017f, + 0.933617f, + 0.923949f, + 0.912899f, + 0.900495f, + 0.887022f, + 0.873283f, + 0.859153f, + 0.843830f, + 0.827325f, + 0.809888f, + 0.792172f, + 0.773832f, + 0.754686f, + 0.735035f, + 0.715297f, + 0.694955f, + 0.674242f, + 0.653660f, + 0.632752f, + 0.611804f, + 0.590993f, + 0.570154f, + 0.549539f, + 0.529087f, + 0.508974f, + 0.489030f, + 0.469599f, + 0.450465f, + 0.431761f, + 0.413508f, + 0.395761f, + 0.378480f, + 0.361679f, + 0.345465f, + 0.329753f, + 0.999996f, + 0.999996f, + 0.999996f, + 0.999996f, + 0.999996f, + 0.999994f, + 0.999987f, + 0.999978f, + 0.999961f, + 0.999936f, + 0.999903f, + 0.999855f, + 0.999786f, + 0.999689f, + 0.999527f, + 0.998988f, + 0.996137f, + 0.994527f, + 0.993108f, + 0.991599f, + 0.989084f, + 0.985308f, + 0.981527f, + 0.976677f, + 0.970079f, + 0.962535f, + 0.954490f, + 0.948270f, + 0.940942f, + 0.932422f, + 0.922836f, + 0.911896f, + 0.899632f, + 0.886119f, + 0.871864f, + 0.857720f, + 0.842536f, + 0.826163f, + 0.808849f, + 0.790860f, + 0.772802f, + 0.753860f, + 0.734335f, + 0.714582f, + 0.694543f, + 0.674071f, + 0.653544f, + 0.632922f, + 0.612153f, + 0.591573f, + 0.570951f, + 0.550520f, + 0.530352f, + 0.510311f, + 0.490707f, + 0.471359f, + 0.452396f, + 0.433837f, + 0.415736f, + 0.398052f, + 0.380874f, + 0.364233f, + 0.348023f, + 0.332368f, + 0.999997f, + 0.999997f, + 0.999997f, + 0.999997f, + 0.999997f, + 0.999994f, + 0.999988f, + 0.999976f, + 0.999957f, + 0.999928f, + 0.999891f, + 0.999837f, + 0.999759f, + 0.999650f, + 0.999463f, + 0.998551f, + 0.995879f, + 0.994366f, + 0.992964f, + 0.991479f, + 0.988521f, + 0.985101f, + 0.981482f, + 0.976168f, + 0.970242f, + 0.962585f, + 0.953950f, + 0.946973f, + 0.939686f, + 0.931248f, + 0.921614f, + 0.910765f, + 0.898617f, + 0.885183f, + 0.870772f, + 0.856138f, + 0.841120f, + 0.824962f, + 0.807732f, + 0.789813f, + 0.771638f, + 0.753008f, + 0.733686f, + 0.713927f, + 0.694082f, + 0.673967f, + 0.653549f, + 0.633135f, + 0.612702f, + 0.592200f, + 0.571904f, + 0.551679f, + 0.531678f, + 0.511898f, + 0.492437f, + 0.473239f, + 0.454451f, + 0.436067f, + 0.418054f, + 0.400541f, + 0.383486f, + 0.366848f, + 0.350781f, + 0.335182f, + 0.999995f, + 0.999995f, + 0.999995f, + 0.999995f, + 0.999995f, + 0.999993f, + 0.999985f, + 0.999972f, + 0.999951f, + 0.999919f, + 0.999877f, + 0.999817f, + 0.999733f, + 0.999608f, + 0.999380f, + 0.997685f, + 0.995603f, + 0.994264f, + 0.992911f, + 0.991286f, + 0.987923f, + 0.984871f, + 0.981239f, + 0.975933f, + 0.970149f, + 0.962511f, + 0.953824f, + 0.945699f, + 0.938285f, + 0.929907f, + 0.920343f, + 0.909537f, + 0.897435f, + 0.884057f, + 0.869626f, + 0.854490f, + 0.839459f, + 0.823511f, + 0.806511f, + 0.788752f, + 0.770440f, + 0.751995f, + 0.732962f, + 0.713424f, + 0.693525f, + 0.673798f, + 0.653622f, + 0.633301f, + 0.613224f, + 0.592938f, + 0.572833f, + 0.552904f, + 0.533030f, + 0.513556f, + 0.494215f, + 0.475279f, + 0.456673f, + 0.438411f, + 0.420583f, + 0.403178f, + 0.386178f, + 0.369728f, + 0.353688f, + 0.338147f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999991f, + 0.999984f, + 0.999967f, + 0.999944f, + 0.999912f, + 0.999863f, + 0.999796f, + 0.999703f, + 0.999563f, + 0.999279f, + 0.997104f, + 0.995394f, + 0.994111f, + 0.992825f, + 0.990979f, + 0.987529f, + 0.984661f, + 0.980774f, + 0.975758f, + 0.969866f, + 0.962465f, + 0.953678f, + 0.944489f, + 0.936886f, + 0.928356f, + 0.918820f, + 0.908073f, + 0.896092f, + 0.882833f, + 0.868463f, + 0.853212f, + 0.837744f, + 0.822048f, + 0.805333f, + 0.787643f, + 0.769414f, + 0.750830f, + 0.732178f, + 0.712972f, + 0.693227f, + 0.673569f, + 0.653744f, + 0.633739f, + 0.613735f, + 0.593822f, + 0.573916f, + 0.554158f, + 0.534652f, + 0.515248f, + 0.496233f, + 0.477436f, + 0.459009f, + 0.440929f, + 0.423259f, + 0.405951f, + 0.389136f, + 0.372690f, + 0.356789f, + 0.341329f, + 0.999995f, + 0.999995f, + 0.999995f, + 0.999995f, + 0.999995f, + 0.999991f, + 0.999981f, + 0.999966f, + 0.999939f, + 0.999903f, + 0.999847f, + 0.999771f, + 0.999666f, + 0.999510f, + 0.999131f, + 0.996690f, + 0.995147f, + 0.993882f, + 0.992696f, + 0.990474f, + 0.987227f, + 0.984334f, + 0.980153f, + 0.975438f, + 0.969406f, + 0.962238f, + 0.953598f, + 0.943868f, + 0.935356f, + 0.926721f, + 0.917122f, + 0.906430f, + 0.894550f, + 0.881354f, + 0.867131f, + 0.851954f, + 0.835972f, + 0.820331f, + 0.803911f, + 0.786452f, + 0.768420f, + 0.749821f, + 0.731298f, + 0.712393f, + 0.692979f, + 0.673418f, + 0.653859f, + 0.634232f, + 0.614327f, + 0.594732f, + 0.575131f, + 0.555584f, + 0.536346f, + 0.517175f, + 0.498323f, + 0.479744f, + 0.461485f, + 0.443645f, + 0.426061f, + 0.408969f, + 0.392154f, + 0.375921f, + 0.360060f, + 0.344677f, + 0.999994f, + 0.999994f, + 0.999994f, + 0.999994f, + 0.999994f, + 0.999991f, + 0.999979f, + 0.999960f, + 0.999931f, + 0.999891f, + 0.999832f, + 0.999748f, + 0.999629f, + 0.999449f, + 0.998879f, + 0.996305f, + 0.995024f, + 0.993812f, + 0.992508f, + 0.989721f, + 0.986936f, + 0.983936f, + 0.979629f, + 0.974979f, + 0.968928f, + 0.961970f, + 0.953291f, + 0.943458f, + 0.933644f, + 0.925007f, + 0.915388f, + 0.904755f, + 0.892932f, + 0.879831f, + 0.865794f, + 0.850672f, + 0.834591f, + 0.818398f, + 0.802304f, + 0.785151f, + 0.767450f, + 0.748987f, + 0.730325f, + 0.711758f, + 0.692761f, + 0.673417f, + 0.653908f, + 0.634686f, + 0.615168f, + 0.595707f, + 0.576393f, + 0.557198f, + 0.538018f, + 0.519253f, + 0.500555f, + 0.482220f, + 0.464197f, + 0.446414f, + 0.429106f, + 0.412035f, + 0.395508f, + 0.379284f, + 0.363538f, + 0.348220f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999989f, + 0.999977f, + 0.999956f, + 0.999924f, + 0.999879f, + 0.999813f, + 0.999722f, + 0.999590f, + 0.999381f, + 0.998335f, + 0.996088f, + 0.994814f, + 0.993709f, + 0.992220f, + 0.989209f, + 0.986575f, + 0.983383f, + 0.979084f, + 0.974272f, + 0.968359f, + 0.961275f, + 0.953025f, + 0.943098f, + 0.932434f, + 0.923101f, + 0.913477f, + 0.902861f, + 0.891059f, + 0.878071f, + 0.864118f, + 0.849188f, + 0.833281f, + 0.816808f, + 0.800596f, + 0.783745f, + 0.766331f, + 0.748123f, + 0.729687f, + 0.711078f, + 0.692527f, + 0.673491f, + 0.654296f, + 0.635113f, + 0.616048f, + 0.596848f, + 0.577720f, + 0.558879f, + 0.540028f, + 0.521371f, + 0.502996f, + 0.484858f, + 0.466997f, + 0.449477f, + 0.432217f, + 0.415426f, + 0.398924f, + 0.382890f, + 0.367206f, + 0.351955f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999993f, + 0.999988f, + 0.999974f, + 0.999953f, + 0.999918f, + 0.999865f, + 0.999791f, + 0.999690f, + 0.999542f, + 0.999294f, + 0.997535f, + 0.995790f, + 0.994609f, + 0.993557f, + 0.991766f, + 0.988767f, + 0.986255f, + 0.982544f, + 0.978541f, + 0.973528f, + 0.967700f, + 0.960596f, + 0.952299f, + 0.942684f, + 0.931653f, + 0.921211f, + 0.911489f, + 0.900818f, + 0.889018f, + 0.876245f, + 0.862406f, + 0.847517f, + 0.831852f, + 0.815367f, + 0.798719f, + 0.782223f, + 0.765167f, + 0.747304f, + 0.729133f, + 0.710485f, + 0.692196f, + 0.673589f, + 0.654770f, + 0.635717f, + 0.616986f, + 0.598119f, + 0.579298f, + 0.560560f, + 0.542163f, + 0.523669f, + 0.505564f, + 0.487642f, + 0.469991f, + 0.452658f, + 0.435620f, + 0.418937f, + 0.402612f, + 0.386633f, + 0.371091f, + 0.355949f, + 0.999992f, + 0.999992f, + 0.999992f, + 0.999992f, + 0.999992f, + 0.999986f, + 0.999973f, + 0.999948f, + 0.999909f, + 0.999852f, + 0.999769f, + 0.999656f, + 0.999490f, + 0.999186f, + 0.997059f, + 0.995624f, + 0.994510f, + 0.993327f, + 0.991020f, + 0.988380f, + 0.985771f, + 0.981971f, + 0.978051f, + 0.972892f, + 0.967020f, + 0.959965f, + 0.951625f, + 0.941902f, + 0.930951f, + 0.919370f, + 0.909285f, + 0.898562f, + 0.886809f, + 0.874251f, + 0.860597f, + 0.845808f, + 0.830365f, + 0.813972f, + 0.797260f, + 0.780597f, + 0.763854f, + 0.746401f, + 0.728519f, + 0.710203f, + 0.691882f, + 0.673687f, + 0.655275f, + 0.636621f, + 0.617909f, + 0.599473f, + 0.581032f, + 0.562560f, + 0.544295f, + 0.526228f, + 0.508293f, + 0.490652f, + 0.473242f, + 0.456004f, + 0.439212f, + 0.422663f, + 0.406476f, + 0.390647f, + 0.375204f, + 0.360129f, + 0.999990f, + 0.999990f, + 0.999990f, + 0.999990f, + 0.999990f, + 0.999984f, + 0.999969f, + 0.999940f, + 0.999898f, + 0.999837f, + 0.999746f, + 0.999617f, + 0.999438f, + 0.999016f, + 0.996703f, + 0.995302f, + 0.994356f, + 0.992993f, + 0.990390f, + 0.988072f, + 0.985152f, + 0.981446f, + 0.977273f, + 0.972234f, + 0.966113f, + 0.959033f, + 0.950869f, + 0.941217f, + 0.930175f, + 0.918279f, + 0.906941f, + 0.896201f, + 0.884509f, + 0.871920f, + 0.858420f, + 0.843905f, + 0.828730f, + 0.812524f, + 0.795978f, + 0.778979f, + 0.762450f, + 0.745459f, + 0.727966f, + 0.710046f, + 0.691808f, + 0.673739f, + 0.655756f, + 0.637574f, + 0.619153f, + 0.600887f, + 0.582796f, + 0.564748f, + 0.546636f, + 0.528904f, + 0.511252f, + 0.493791f, + 0.476563f, + 0.459694f, + 0.442942f, + 0.426632f, + 0.410558f, + 0.394895f, + 0.379517f, + 0.364560f, + 0.999989f, + 0.999989f, + 0.999989f, + 0.999989f, + 0.999989f, + 0.999984f, + 0.999966f, + 0.999934f, + 0.999887f, + 0.999819f, + 0.999720f, + 0.999578f, + 0.999367f, + 0.998696f, + 0.996353f, + 0.995201f, + 0.994115f, + 0.992665f, + 0.989948f, + 0.987633f, + 0.984331f, + 0.980826f, + 0.976390f, + 0.971327f, + 0.965201f, + 0.957977f, + 0.949712f, + 0.940128f, + 0.929187f, + 0.917237f, + 0.904644f, + 0.893711f, + 0.882113f, + 0.869516f, + 0.856236f, + 0.841929f, + 0.826924f, + 0.810991f, + 0.794686f, + 0.777761f, + 0.760980f, + 0.744384f, + 0.727314f, + 0.709877f, + 0.691988f, + 0.674098f, + 0.656243f, + 0.638603f, + 0.620606f, + 0.602574f, + 0.584694f, + 0.567018f, + 0.549311f, + 0.531673f, + 0.514403f, + 0.497148f, + 0.480177f, + 0.463439f, + 0.446998f, + 0.430743f, + 0.414943f, + 0.399304f, + 0.384121f, + 0.369251f, + 0.999988f, + 0.999988f, + 0.999988f, + 0.999988f, + 0.999988f, + 0.999981f, + 0.999962f, + 0.999927f, + 0.999874f, + 0.999798f, + 0.999690f, + 0.999533f, + 0.999291f, + 0.997909f, + 0.996117f, + 0.995029f, + 0.993880f, + 0.992142f, + 0.989577f, + 0.987185f, + 0.983588f, + 0.980055f, + 0.975487f, + 0.970172f, + 0.963998f, + 0.956738f, + 0.948637f, + 0.939083f, + 0.928169f, + 0.916143f, + 0.903147f, + 0.890916f, + 0.879389f, + 0.866895f, + 0.853826f, + 0.839729f, + 0.824957f, + 0.809472f, + 0.793341f, + 0.776743f, + 0.759808f, + 0.743277f, + 0.726643f, + 0.709685f, + 0.692249f, + 0.674639f, + 0.657008f, + 0.639576f, + 0.622114f, + 0.604471f, + 0.586851f, + 0.569340f, + 0.552135f, + 0.534806f, + 0.517599f, + 0.500765f, + 0.484035f, + 0.467440f, + 0.451212f, + 0.435240f, + 0.419399f, + 0.404083f, + 0.388944f, + 0.374182f, + 0.999987f, + 0.999987f, + 0.999987f, + 0.999987f, + 0.999987f, + 0.999979f, + 0.999958f, + 0.999919f, + 0.999861f, + 0.999774f, + 0.999656f, + 0.999482f, + 0.999195f, + 0.997307f, + 0.995837f, + 0.994722f, + 0.993707f, + 0.991391f, + 0.989169f, + 0.986461f, + 0.982904f, + 0.979062f, + 0.974536f, + 0.969035f, + 0.962653f, + 0.955486f, + 0.947243f, + 0.937747f, + 0.926861f, + 0.914936f, + 0.901835f, + 0.888472f, + 0.876572f, + 0.864223f, + 0.851252f, + 0.837374f, + 0.822985f, + 0.807788f, + 0.791927f, + 0.775701f, + 0.758928f, + 0.742347f, + 0.725914f, + 0.709495f, + 0.692569f, + 0.675363f, + 0.658085f, + 0.640639f, + 0.623698f, + 0.606505f, + 0.589267f, + 0.572008f, + 0.554939f, + 0.538132f, + 0.521212f, + 0.504487f, + 0.488048f, + 0.471807f, + 0.455651f, + 0.439858f, + 0.424332f, + 0.408983f, + 0.394071f, + 0.379402f, + 0.999986f, + 0.999986f, + 0.999986f, + 0.999986f, + 0.999986f, + 0.999978f, + 0.999954f, + 0.999913f, + 0.999844f, + 0.999753f, + 0.999618f, + 0.999424f, + 0.999067f, + 0.996875f, + 0.995659f, + 0.994603f, + 0.993420f, + 0.990874f, + 0.988713f, + 0.985585f, + 0.982193f, + 0.978145f, + 0.973416f, + 0.967801f, + 0.961483f, + 0.954069f, + 0.945704f, + 0.936138f, + 0.925374f, + 0.913395f, + 0.900339f, + 0.886675f, + 0.873512f, + 0.861326f, + 0.848513f, + 0.834955f, + 0.820820f, + 0.805943f, + 0.790574f, + 0.774677f, + 0.758279f, + 0.741807f, + 0.725271f, + 0.709231f, + 0.692874f, + 0.676189f, + 0.659352f, + 0.642296f, + 0.625250f, + 0.608700f, + 0.591823f, + 0.575012f, + 0.558143f, + 0.541491f, + 0.525075f, + 0.508558f, + 0.492277f, + 0.476270f, + 0.460459f, + 0.444739f, + 0.429400f, + 0.414309f, + 0.399421f, + 0.384907f, + 0.999985f, + 0.999985f, + 0.999985f, + 0.999985f, + 0.999985f, + 0.999977f, + 0.999947f, + 0.999902f, + 0.999832f, + 0.999730f, + 0.999577f, + 0.999359f, + 0.998845f, + 0.996554f, + 0.995328f, + 0.994442f, + 0.992919f, + 0.990392f, + 0.988170f, + 0.984854f, + 0.981312f, + 0.977149f, + 0.972137f, + 0.966207f, + 0.959968f, + 0.952454f, + 0.943873f, + 0.934434f, + 0.923813f, + 0.911942f, + 0.898928f, + 0.885120f, + 0.871043f, + 0.858248f, + 0.845666f, + 0.832346f, + 0.818482f, + 0.804029f, + 0.788982f, + 0.773571f, + 0.757700f, + 0.741484f, + 0.725186f, + 0.708915f, + 0.693244f, + 0.677028f, + 0.660656f, + 0.644079f, + 0.627377f, + 0.610804f, + 0.594542f, + 0.578112f, + 0.561650f, + 0.545163f, + 0.528962f, + 0.512926f, + 0.496893f, + 0.481007f, + 0.465397f, + 0.450042f, + 0.434740f, + 0.419831f, + 0.405156f, + 0.390692f, + 0.999981f, + 0.999981f, + 0.999981f, + 0.999981f, + 0.999981f, + 0.999973f, + 0.999942f, + 0.999891f, + 0.999813f, + 0.999698f, + 0.999532f, + 0.999285f, + 0.998286f, + 0.996295f, + 0.995215f, + 0.994182f, + 0.992032f, + 0.989855f, + 0.987415f, + 0.984047f, + 0.980050f, + 0.976017f, + 0.970845f, + 0.964767f, + 0.958269f, + 0.950600f, + 0.942033f, + 0.932501f, + 0.921807f, + 0.910017f, + 0.897149f, + 0.883414f, + 0.869182f, + 0.855055f, + 0.842687f, + 0.829548f, + 0.816162f, + 0.802072f, + 0.787436f, + 0.772533f, + 0.757043f, + 0.741263f, + 0.725330f, + 0.709262f, + 0.693497f, + 0.678038f, + 0.662128f, + 0.646068f, + 0.629824f, + 0.613436f, + 0.597334f, + 0.581401f, + 0.565372f, + 0.549288f, + 0.533182f, + 0.517405f, + 0.501765f, + 0.486143f, + 0.470675f, + 0.455464f, + 0.440531f, + 0.425630f, + 0.411113f, + 0.396887f, + 0.999982f, + 0.999982f, + 0.999982f, + 0.999982f, + 0.999982f, + 0.999970f, + 0.999934f, + 0.999878f, + 0.999793f, + 0.999665f, + 0.999481f, + 0.999192f, + 0.997505f, + 0.995926f, + 0.995009f, + 0.993736f, + 0.991298f, + 0.989326f, + 0.986371f, + 0.983199f, + 0.979031f, + 0.974595f, + 0.969364f, + 0.963198f, + 0.956385f, + 0.948509f, + 0.939993f, + 0.930421f, + 0.919590f, + 0.908140f, + 0.895349f, + 0.881699f, + 0.867456f, + 0.852784f, + 0.839500f, + 0.826629f, + 0.813602f, + 0.799983f, + 0.785873f, + 0.771340f, + 0.756480f, + 0.741190f, + 0.725687f, + 0.709997f, + 0.694192f, + 0.678975f, + 0.663673f, + 0.648135f, + 0.632442f, + 0.616477f, + 0.600565f, + 0.584772f, + 0.569202f, + 0.553595f, + 0.537882f, + 0.522193f, + 0.506784f, + 0.491554f, + 0.476349f, + 0.461278f, + 0.446419f, + 0.431913f, + 0.417443f, + 0.403271f, + 0.999980f, + 0.999980f, + 0.999980f, + 0.999980f, + 0.999980f, + 0.999966f, + 0.999927f, + 0.999866f, + 0.999772f, + 0.999629f, + 0.999423f, + 0.999075f, + 0.997024f, + 0.995773f, + 0.994651f, + 0.993353f, + 0.990822f, + 0.988569f, + 0.985596f, + 0.982182f, + 0.977871f, + 0.973140f, + 0.967584f, + 0.961408f, + 0.954294f, + 0.946398f, + 0.937603f, + 0.927937f, + 0.917305f, + 0.905833f, + 0.893138f, + 0.879770f, + 0.865720f, + 0.851023f, + 0.836801f, + 0.823784f, + 0.810909f, + 0.797886f, + 0.784177f, + 0.770243f, + 0.755925f, + 0.741144f, + 0.726214f, + 0.710971f, + 0.695563f, + 0.680212f, + 0.665304f, + 0.650297f, + 0.635168f, + 0.619796f, + 0.604217f, + 0.588692f, + 0.573254f, + 0.557998f, + 0.542839f, + 0.527470f, + 0.512162f, + 0.497115f, + 0.482296f, + 0.467477f, + 0.452812f, + 0.438310f, + 0.424184f, + 0.410163f, + 0.999977f, + 0.999977f, + 0.999977f, + 0.999977f, + 0.999977f, + 0.999962f, + 0.999920f, + 0.999852f, + 0.999745f, + 0.999586f, + 0.999354f, + 0.998894f, + 0.996685f, + 0.995485f, + 0.994493f, + 0.992573f, + 0.990323f, + 0.987772f, + 0.984692f, + 0.980887f, + 0.976446f, + 0.971625f, + 0.965717f, + 0.959421f, + 0.951975f, + 0.944086f, + 0.935066f, + 0.925403f, + 0.914814f, + 0.903208f, + 0.890958f, + 0.877817f, + 0.863828f, + 0.849289f, + 0.834872f, + 0.820890f, + 0.808183f, + 0.795660f, + 0.782556f, + 0.769066f, + 0.755386f, + 0.741229f, + 0.726726f, + 0.712170f, + 0.697209f, + 0.682170f, + 0.667203f, + 0.652689f, + 0.637938f, + 0.623262f, + 0.608190f, + 0.593002f, + 0.577817f, + 0.562737f, + 0.547836f, + 0.533036f, + 0.518052f, + 0.503135f, + 0.488422f, + 0.473986f, + 0.459552f, + 0.445282f, + 0.431149f, + 0.417407f, + 0.999973f, + 0.999973f, + 0.999973f, + 0.999973f, + 0.999973f, + 0.999957f, + 0.999914f, + 0.999836f, + 0.999718f, + 0.999538f, + 0.999275f, + 0.998454f, + 0.996341f, + 0.995246f, + 0.994222f, + 0.991844f, + 0.989829f, + 0.986688f, + 0.983562f, + 0.979638f, + 0.974932f, + 0.969827f, + 0.963621f, + 0.957146f, + 0.949365f, + 0.941398f, + 0.932245f, + 0.922556f, + 0.911949f, + 0.900627f, + 0.888440f, + 0.875544f, + 0.862005f, + 0.847810f, + 0.833372f, + 0.819134f, + 0.805509f, + 0.793339f, + 0.780916f, + 0.767837f, + 0.754858f, + 0.741307f, + 0.727496f, + 0.713386f, + 0.699131f, + 0.684542f, + 0.669878f, + 0.655261f, + 0.641035f, + 0.626685f, + 0.612377f, + 0.597625f, + 0.582805f, + 0.568030f, + 0.553204f, + 0.538684f, + 0.524269f, + 0.509662f, + 0.495119f, + 0.480735f, + 0.466634f, + 0.452593f, + 0.438748f, + 0.424915f, + 0.999971f, + 0.999971f, + 0.999971f, + 0.999971f, + 0.999971f, + 0.999956f, + 0.999901f, + 0.999818f, + 0.999683f, + 0.999487f, + 0.999185f, + 0.997584f, + 0.996004f, + 0.995050f, + 0.993715f, + 0.991212f, + 0.989057f, + 0.985879f, + 0.982243f, + 0.978206f, + 0.973119f, + 0.967919f, + 0.961343f, + 0.954603f, + 0.946712f, + 0.938378f, + 0.929266f, + 0.919443f, + 0.908911f, + 0.897725f, + 0.885589f, + 0.873254f, + 0.859889f, + 0.846123f, + 0.832094f, + 0.817898f, + 0.803866f, + 0.791061f, + 0.779235f, + 0.766885f, + 0.754292f, + 0.741565f, + 0.728331f, + 0.714861f, + 0.701179f, + 0.687166f, + 0.673012f, + 0.658716f, + 0.644443f, + 0.630472f, + 0.616519f, + 0.602514f, + 0.588172f, + 0.573689f, + 0.559281f, + 0.544768f, + 0.530543f, + 0.516485f, + 0.502303f, + 0.488100f, + 0.474095f, + 0.460245f, + 0.446598f, + 0.433169f, + 0.999967f, + 0.999967f, + 0.999967f, + 0.999967f, + 0.999967f, + 0.999947f, + 0.999891f, + 0.999794f, + 0.999647f, + 0.999425f, + 0.999062f, + 0.997049f, + 0.995778f, + 0.994652f, + 0.992778f, + 0.990482f, + 0.988004f, + 0.984893f, + 0.980881f, + 0.976605f, + 0.971199f, + 0.965610f, + 0.958925f, + 0.951746f, + 0.943791f, + 0.935200f, + 0.926018f, + 0.916028f, + 0.905724f, + 0.894528f, + 0.882914f, + 0.870741f, + 0.857802f, + 0.844552f, + 0.830857f, + 0.816921f, + 0.803102f, + 0.789625f, + 0.777480f, + 0.765891f, + 0.753908f, + 0.741795f, + 0.729390f, + 0.716440f, + 0.703411f, + 0.690068f, + 0.676438f, + 0.662587f, + 0.648698f, + 0.634732f, + 0.620997f, + 0.607451f, + 0.593765f, + 0.579748f, + 0.565661f, + 0.551594f, + 0.537396f, + 0.523433f, + 0.509708f, + 0.495972f, + 0.482082f, + 0.468427f, + 0.454890f, + 0.441623f, + 0.999964f, + 0.999964f, + 0.999964f, + 0.999964f, + 0.999964f, + 0.999940f, + 0.999875f, + 0.999768f, + 0.999605f, + 0.999352f, + 0.998882f, + 0.996665f, + 0.995459f, + 0.994380f, + 0.992013f, + 0.989912f, + 0.986796f, + 0.983537f, + 0.979326f, + 0.974792f, + 0.969140f, + 0.963160f, + 0.956222f, + 0.948807f, + 0.940518f, + 0.931755f, + 0.922452f, + 0.912319f, + 0.902227f, + 0.891142f, + 0.879838f, + 0.868047f, + 0.855745f, + 0.842718f, + 0.829827f, + 0.816398f, + 0.802786f, + 0.789396f, + 0.776581f, + 0.764901f, + 0.753710f, + 0.742102f, + 0.730448f, + 0.718337f, + 0.705768f, + 0.693172f, + 0.680153f, + 0.666882f, + 0.653402f, + 0.639837f, + 0.626152f, + 0.612676f, + 0.599435f, + 0.586109f, + 0.572473f, + 0.558715f, + 0.544964f, + 0.531112f, + 0.517416f, + 0.503992f, + 0.490653f, + 0.477162f, + 0.463832f, + 0.450645f, + 0.999958f, + 0.999958f, + 0.999958f, + 0.999958f, + 0.999958f, + 0.999933f, + 0.999861f, + 0.999741f, + 0.999554f, + 0.999267f, + 0.998411f, + 0.996303f, + 0.995191f, + 0.993945f, + 0.991406f, + 0.989019f, + 0.985720f, + 0.982057f, + 0.977501f, + 0.972605f, + 0.966698f, + 0.960340f, + 0.953031f, + 0.945347f, + 0.936866f, + 0.927917f, + 0.918563f, + 0.908598f, + 0.898486f, + 0.887794f, + 0.876545f, + 0.865379f, + 0.853428f, + 0.841168f, + 0.828649f, + 0.815967f, + 0.802957f, + 0.789865f, + 0.777077f, + 0.764695f, + 0.753544f, + 0.742694f, + 0.731571f, + 0.720304f, + 0.708490f, + 0.696351f, + 0.684134f, + 0.671470f, + 0.658541f, + 0.645376f, + 0.632209f, + 0.618776f, + 0.605510f, + 0.592527f, + 0.579546f, + 0.566310f, + 0.552860f, + 0.539492f, + 0.526005f, + 0.512564f, + 0.499340f, + 0.486360f, + 0.473357f, + 0.460306f, + 0.999956f, + 0.999956f, + 0.999956f, + 0.999956f, + 0.999956f, + 0.999926f, + 0.999842f, + 0.999710f, + 0.999498f, + 0.999164f, + 0.997463f, + 0.995870f, + 0.994917f, + 0.992911f, + 0.990682f, + 0.987816f, + 0.984410f, + 0.980551f, + 0.975693f, + 0.970263f, + 0.963946f, + 0.957248f, + 0.949765f, + 0.941571f, + 0.932941f, + 0.923873f, + 0.914332f, + 0.904560f, + 0.894394f, + 0.884127f, + 0.873294f, + 0.862503f, + 0.851335f, + 0.839566f, + 0.827776f, + 0.815708f, + 0.803370f, + 0.790821f, + 0.778386f, + 0.766121f, + 0.754193f, + 0.743420f, + 0.732975f, + 0.722326f, + 0.711376f, + 0.699992f, + 0.688180f, + 0.676354f, + 0.664004f, + 0.651449f, + 0.638600f, + 0.625776f, + 0.612660f, + 0.599603f, + 0.586719f, + 0.574078f, + 0.561273f, + 0.548129f, + 0.535155f, + 0.522015f, + 0.508851f, + 0.495837f, + 0.483190f, + 0.470624f, + 0.999947f, + 0.999947f, + 0.999947f, + 0.999947f, + 0.999947f, + 0.999916f, + 0.999823f, + 0.999669f, + 0.999425f, + 0.999025f, + 0.996874f, + 0.995670f, + 0.994415f, + 0.991991f, + 0.989766f, + 0.986646f, + 0.982812f, + 0.978356f, + 0.973317f, + 0.967611f, + 0.960820f, + 0.953603f, + 0.945969f, + 0.937323f, + 0.928661f, + 0.919507f, + 0.909833f, + 0.900245f, + 0.890390f, + 0.880252f, + 0.870000f, + 0.859518f, + 0.849162f, + 0.838101f, + 0.826960f, + 0.815688f, + 0.804126f, + 0.792234f, + 0.780356f, + 0.768474f, + 0.756678f, + 0.745159f, + 0.734601f, + 0.724624f, + 0.714339f, + 0.703751f, + 0.692766f, + 0.681267f, + 0.669799f, + 0.657871f, + 0.645577f, + 0.633102f, + 0.620560f, + 0.607737f, + 0.594890f, + 0.582143f, + 0.569779f, + 0.557360f, + 0.544651f, + 0.531942f, + 0.519228f, + 0.506467f, + 0.493710f, + 0.481143f, + 0.999938f, + 0.999938f, + 0.999938f, + 0.999938f, + 0.999938f, + 0.999901f, + 0.999798f, + 0.999622f, + 0.999341f, + 0.998801f, + 0.996398f, + 0.995225f, + 0.993927f, + 0.991339f, + 0.988500f, + 0.985327f, + 0.981195f, + 0.976383f, + 0.970726f, + 0.964471f, + 0.957386f, + 0.949813f, + 0.941694f, + 0.932681f, + 0.923974f, + 0.914755f, + 0.905026f, + 0.895649f, + 0.886178f, + 0.876277f, + 0.866629f, + 0.856890f, + 0.846934f, + 0.836887f, + 0.826373f, + 0.815885f, + 0.805169f, + 0.794133f, + 0.782812f, + 0.771547f, + 0.760175f, + 0.748896f, + 0.737688f, + 0.727151f, + 0.717601f, + 0.707670f, + 0.697425f, + 0.686789f, + 0.675664f, + 0.664513f, + 0.652962f, + 0.640965f, + 0.628851f, + 0.616551f, + 0.604169f, + 0.591559f, + 0.579009f, + 0.566648f, + 0.554597f, + 0.542382f, + 0.529999f, + 0.517655f, + 0.505254f, + 0.492894f, + 0.999929f, + 0.999929f, + 0.999929f, + 0.999929f, + 0.999929f, + 0.999889f, + 0.999766f, + 0.999562f, + 0.999240f, + 0.997952f, + 0.996094f, + 0.994979f, + 0.992773f, + 0.990536f, + 0.987213f, + 0.983322f, + 0.978938f, + 0.973714f, + 0.967681f, + 0.960981f, + 0.953144f, + 0.945475f, + 0.936909f, + 0.927734f, + 0.918826f, + 0.909590f, + 0.900085f, + 0.890867f, + 0.881801f, + 0.872565f, + 0.863236f, + 0.854239f, + 0.845060f, + 0.835686f, + 0.826251f, + 0.816284f, + 0.806586f, + 0.796419f, + 0.785914f, + 0.775210f, + 0.764461f, + 0.753599f, + 0.742805f, + 0.731872f, + 0.721370f, + 0.711898f, + 0.702337f, + 0.692383f, + 0.682137f, + 0.671365f, + 0.660479f, + 0.649314f, + 0.637685f, + 0.625899f, + 0.613898f, + 0.601865f, + 0.589582f, + 0.577285f, + 0.565013f, + 0.553106f, + 0.541280f, + 0.529367f, + 0.517320f, + 0.505411f, + 0.999920f, + 0.999920f, + 0.999920f, + 0.999920f, + 0.999920f, + 0.999869f, + 0.999732f, + 0.999499f, + 0.999110f, + 0.997167f, + 0.995720f, + 0.994349f, + 0.991727f, + 0.989197f, + 0.985883f, + 0.981483f, + 0.976618f, + 0.970597f, + 0.964122f, + 0.956994f, + 0.948639f, + 0.940500f, + 0.931606f, + 0.922385f, + 0.913291f, + 0.904205f, + 0.894938f, + 0.885890f, + 0.877334f, + 0.868754f, + 0.860053f, + 0.851683f, + 0.843447f, + 0.834889f, + 0.826304f, + 0.817441f, + 0.808285f, + 0.799141f, + 0.789570f, + 0.779600f, + 0.769510f, + 0.759155f, + 0.748882f, + 0.738346f, + 0.727629f, + 0.717273f, + 0.707467f, + 0.698283f, + 0.688609f, + 0.678748f, + 0.668371f, + 0.657739f, + 0.646951f, + 0.635765f, + 0.624253f, + 0.612647f, + 0.600900f, + 0.589061f, + 0.576998f, + 0.564991f, + 0.553102f, + 0.541517f, + 0.530027f, + 0.518495f, + 0.999906f, + 0.999906f, + 0.999906f, + 0.999906f, + 0.999906f, + 0.999851f, + 0.999684f, + 0.999412f, + 0.998925f, + 0.996597f, + 0.995207f, + 0.993603f, + 0.990903f, + 0.987594f, + 0.983814f, + 0.979016f, + 0.973647f, + 0.967048f, + 0.960109f, + 0.952123f, + 0.943560f, + 0.934900f, + 0.925747f, + 0.916566f, + 0.907305f, + 0.898441f, + 0.889629f, + 0.881042f, + 0.872874f, + 0.865065f, + 0.857225f, + 0.849446f, + 0.842063f, + 0.834561f, + 0.826814f, + 0.818875f, + 0.810748f, + 0.802316f, + 0.793699f, + 0.784704f, + 0.775198f, + 0.765642f, + 0.755735f, + 0.745873f, + 0.735526f, + 0.725229f, + 0.714892f, + 0.704807f, + 0.695502f, + 0.686241f, + 0.676633f, + 0.666688f, + 0.656384f, + 0.645871f, + 0.635174f, + 0.624113f, + 0.612788f, + 0.601426f, + 0.589925f, + 0.578399f, + 0.566612f, + 0.554931f, + 0.543383f, + 0.532065f, + 0.999889f, + 0.999889f, + 0.999889f, + 0.999889f, + 0.999889f, + 0.999824f, + 0.999633f, + 0.999306f, + 0.998430f, + 0.996133f, + 0.994890f, + 0.992316f, + 0.989752f, + 0.986095f, + 0.981564f, + 0.976234f, + 0.970081f, + 0.962779f, + 0.955232f, + 0.946702f, + 0.937716f, + 0.928604f, + 0.919281f, + 0.910167f, + 0.901046f, + 0.892446f, + 0.884183f, + 0.876253f, + 0.868620f, + 0.861545f, + 0.854673f, + 0.847885f, + 0.841074f, + 0.834610f, + 0.827984f, + 0.820945f, + 0.813648f, + 0.806232f, + 0.798444f, + 0.790232f, + 0.781853f, + 0.772897f, + 0.763648f, + 0.754227f, + 0.744542f, + 0.734689f, + 0.724526f, + 0.714204f, + 0.704152f, + 0.694222f, + 0.685143f, + 0.675860f, + 0.666319f, + 0.656415f, + 0.646273f, + 0.635902f, + 0.625399f, + 0.614563f, + 0.603490f, + 0.592413f, + 0.581217f, + 0.570000f, + 0.558608f, + 0.547242f, + 0.999867f, + 0.999867f, + 0.999867f, + 0.999867f, + 0.999867f, + 0.999790f, + 0.999561f, + 0.999168f, + 0.997237f, + 0.995672f, + 0.994074f, + 0.991219f, + 0.987792f, + 0.983822f, + 0.978599f, + 0.972804f, + 0.965718f, + 0.958053f, + 0.949461f, + 0.940503f, + 0.931011f, + 0.921608f, + 0.912409f, + 0.903378f, + 0.894606f, + 0.886369f, + 0.878756f, + 0.871573f, + 0.864862f, + 0.858421f, + 0.852541f, + 0.846802f, + 0.841027f, + 0.835206f, + 0.829628f, + 0.823730f, + 0.817415f, + 0.810655f, + 0.803873f, + 0.796659f, + 0.788887f, + 0.780940f, + 0.772537f, + 0.763507f, + 0.754487f, + 0.745163f, + 0.735572f, + 0.725687f, + 0.715611f, + 0.705398f, + 0.695418f, + 0.685592f, + 0.676518f, + 0.667304f, + 0.657875f, + 0.648182f, + 0.638235f, + 0.628062f, + 0.617813f, + 0.607283f, + 0.596552f, + 0.585770f, + 0.575033f, + 0.564153f, + 0.999840f, + 0.999840f, + 0.999840f, + 0.999840f, + 0.999840f, + 0.999748f, + 0.999472f, + 0.998969f, + 0.996528f, + 0.995102f, + 0.992701f, + 0.989963f, + 0.985981f, + 0.981194f, + 0.975183f, + 0.968501f, + 0.960502f, + 0.952012f, + 0.942861f, + 0.933376f, + 0.923506f, + 0.914042f, + 0.904921f, + 0.896282f, + 0.887987f, + 0.880341f, + 0.873536f, + 0.867293f, + 0.861556f, + 0.856148f, + 0.850987f, + 0.846352f, + 0.841684f, + 0.836879f, + 0.832036f, + 0.827091f, + 0.821900f, + 0.816206f, + 0.810042f, + 0.803629f, + 0.796918f, + 0.789653f, + 0.781915f, + 0.774014f, + 0.765530f, + 0.756526f, + 0.747669f, + 0.738342f, + 0.728770f, + 0.718942f, + 0.708942f, + 0.698855f, + 0.688933f, + 0.679131f, + 0.669855f, + 0.660811f, + 0.651549f, + 0.642127f, + 0.632454f, + 0.622651f, + 0.612709f, + 0.602606f, + 0.592344f, + 0.581877f, + 0.999806f, + 0.999806f, + 0.999806f, + 0.999806f, + 0.999806f, + 0.999691f, + 0.999350f, + 0.998431f, + 0.995873f, + 0.994456f, + 0.991327f, + 0.987798f, + 0.983232f, + 0.977500f, + 0.970828f, + 0.962815f, + 0.954228f, + 0.944752f, + 0.935126f, + 0.925179f, + 0.915102f, + 0.905763f, + 0.897087f, + 0.888933f, + 0.881452f, + 0.874687f, + 0.868716f, + 0.863585f, + 0.858931f, + 0.854662f, + 0.850569f, + 0.846719f, + 0.843151f, + 0.839426f, + 0.835588f, + 0.831443f, + 0.827004f, + 0.822395f, + 0.817254f, + 0.811630f, + 0.805464f, + 0.799124f, + 0.792382f, + 0.785091f, + 0.777315f, + 0.769360f, + 0.760908f, + 0.751957f, + 0.743128f, + 0.733917f, + 0.724340f, + 0.714712f, + 0.704721f, + 0.694835f, + 0.684862f, + 0.675099f, + 0.665570f, + 0.656644f, + 0.647651f, + 0.638581f, + 0.629337f, + 0.619926f, + 0.610358f, + 0.600707f, + 0.999759f, + 0.999759f, + 0.999759f, + 0.999759f, + 0.999759f, + 0.999613f, + 0.999186f, + 0.997025f, + 0.995317f, + 0.992849f, + 0.989760f, + 0.985270f, + 0.979807f, + 0.973049f, + 0.965228f, + 0.956248f, + 0.946394f, + 0.936324f, + 0.926124f, + 0.915808f, + 0.905942f, + 0.897060f, + 0.889001f, + 0.881755f, + 0.875351f, + 0.869688f, + 0.864736f, + 0.860745f, + 0.857306f, + 0.854190f, + 0.851261f, + 0.848484f, + 0.845642f, + 0.842948f, + 0.840060f, + 0.836901f, + 0.833379f, + 0.829393f, + 0.825103f, + 0.820431f, + 0.815288f, + 0.809574f, + 0.803326f, + 0.796949f, + 0.790174f, + 0.782873f, + 0.775048f, + 0.767139f, + 0.758772f, + 0.750019f, + 0.741120f, + 0.732127f, + 0.722743f, + 0.713225f, + 0.703637f, + 0.693768f, + 0.684016f, + 0.674277f, + 0.664703f, + 0.655328f, + 0.646550f, + 0.637812f, + 0.629036f, + 0.620129f, + 0.999692f, + 0.999692f, + 0.999692f, + 0.999692f, + 0.999692f, + 0.999508f, + 0.998917f, + 0.996236f, + 0.994617f, + 0.991176f, + 0.987089f, + 0.981881f, + 0.974966f, + 0.967156f, + 0.957914f, + 0.947585f, + 0.936938f, + 0.926318f, + 0.915661f, + 0.905567f, + 0.896223f, + 0.888166f, + 0.881117f, + 0.875079f, + 0.869981f, + 0.865675f, + 0.862091f, + 0.859183f, + 0.856981f, + 0.855065f, + 0.853273f, + 0.851572f, + 0.849782f, + 0.847768f, + 0.845668f, + 0.843345f, + 0.840703f, + 0.837646f, + 0.834095f, + 0.830030f, + 0.825631f, + 0.820873f, + 0.815619f, + 0.809856f, + 0.803578f, + 0.797096f, + 0.790359f, + 0.783152f, + 0.775507f, + 0.767504f, + 0.759411f, + 0.750982f, + 0.742208f, + 0.733382f, + 0.724445f, + 0.715190f, + 0.705827f, + 0.696440f, + 0.686773f, + 0.677242f, + 0.667735f, + 0.658471f, + 0.649236f, + 0.640305f, + 0.999595f, + 0.999595f, + 0.999595f, + 0.999595f, + 0.999595f, + 0.999350f, + 0.997576f, + 0.995477f, + 0.992614f, + 0.988817f, + 0.983601f, + 0.976880f, + 0.968694f, + 0.959092f, + 0.948297f, + 0.936831f, + 0.925592f, + 0.914494f, + 0.904159f, + 0.894643f, + 0.886417f, + 0.879620f, + 0.874023f, + 0.869533f, + 0.865967f, + 0.863237f, + 0.861113f, + 0.859527f, + 0.858367f, + 0.857594f, + 0.856882f, + 0.856172f, + 0.855316f, + 0.854197f, + 0.852818f, + 0.851062f, + 0.849046f, + 0.846747f, + 0.844043f, + 0.840842f, + 0.837164f, + 0.832985f, + 0.828344f, + 0.823544f, + 0.818276f, + 0.812543f, + 0.806374f, + 0.799838f, + 0.793170f, + 0.786247f, + 0.778956f, + 0.771297f, + 0.763278f, + 0.755252f, + 0.746984f, + 0.738445f, + 0.729688f, + 0.721045f, + 0.712189f, + 0.703099f, + 0.694045f, + 0.684930f, + 0.675601f, + 0.666480f, + 0.999439f, + 0.999439f, + 0.999439f, + 0.999439f, + 0.999439f, + 0.999093f, + 0.996310f, + 0.994405f, + 0.990527f, + 0.985186f, + 0.978518f, + 0.969748f, + 0.959597f, + 0.948104f, + 0.935724f, + 0.923704f, + 0.912023f, + 0.901356f, + 0.891850f, + 0.883847f, + 0.877279f, + 0.872289f, + 0.868583f, + 0.865913f, + 0.864098f, + 0.862993f, + 0.862356f, + 0.862125f, + 0.862107f, + 0.862169f, + 0.862359f, + 0.862490f, + 0.862430f, + 0.862063f, + 0.861431f, + 0.860386f, + 0.858950f, + 0.857090f, + 0.854848f, + 0.852381f, + 0.849503f, + 0.846167f, + 0.842399f, + 0.838194f, + 0.833566f, + 0.828579f, + 0.823464f, + 0.817951f, + 0.812079f, + 0.805873f, + 0.799320f, + 0.792533f, + 0.785715f, + 0.778636f, + 0.771260f, + 0.763618f, + 0.755719f, + 0.747815f, + 0.739825f, + 0.731602f, + 0.723212f, + 0.714846f, + 0.706465f, + 0.697933f, + 0.999179f, + 0.999179f, + 0.999179f, + 0.999179f, + 0.999179f, + 0.997943f, + 0.995219f, + 0.991760f, + 0.986663f, + 0.979592f, + 0.970218f, + 0.959155f, + 0.946575f, + 0.933047f, + 0.920022f, + 0.907749f, + 0.896801f, + 0.887506f, + 0.880077f, + 0.874322f, + 0.870126f, + 0.867481f, + 0.865949f, + 0.865293f, + 0.865287f, + 0.865746f, + 0.866502f, + 0.867439f, + 0.868442f, + 0.869382f, + 0.870161f, + 0.870782f, + 0.871303f, + 0.871511f, + 0.871427f, + 0.870978f, + 0.870136f, + 0.868893f, + 0.867248f, + 0.865209f, + 0.862775f, + 0.859944f, + 0.857004f, + 0.853671f, + 0.849984f, + 0.845927f, + 0.841518f, + 0.836774f, + 0.831750f, + 0.826407f, + 0.821001f, + 0.815333f, + 0.809412f, + 0.803238f, + 0.796802f, + 0.790204f, + 0.783457f, + 0.776713f, + 0.769749f, + 0.762596f, + 0.755239f, + 0.747690f, + 0.740127f, + 0.732595f, + 0.998113f, + 0.998113f, + 0.998113f, + 0.998113f, + 0.998113f, + 0.996124f, + 0.992844f, + 0.987757f, + 0.980062f, + 0.969642f, + 0.957087f, + 0.942736f, + 0.927747f, + 0.913622f, + 0.900889f, + 0.890115f, + 0.881584f, + 0.875288f, + 0.870926f, + 0.868307f, + 0.867033f, + 0.866972f, + 0.867692f, + 0.868950f, + 0.870549f, + 0.872320f, + 0.874144f, + 0.875947f, + 0.877674f, + 0.879192f, + 0.880478f, + 0.881539f, + 0.882307f, + 0.882739f, + 0.882902f, + 0.882847f, + 0.882461f, + 0.881725f, + 0.880636f, + 0.879197f, + 0.877421f, + 0.875296f, + 0.872849f, + 0.870076f, + 0.866988f, + 0.863637f, + 0.860159f, + 0.856475f, + 0.852525f, + 0.848327f, + 0.843883f, + 0.839198f, + 0.834322f, + 0.829221f, + 0.823907f, + 0.818460f, + 0.812972f, + 0.807315f, + 0.801473f, + 0.795458f, + 0.789275f, + 0.783025f, + 0.776615f, + 0.770223f, + 0.995737f, + 0.995737f, + 0.995737f, + 0.995737f, + 0.995737f, + 0.994123f, + 0.988168f, + 0.979344f, + 0.967003f, + 0.951763f, + 0.934724f, + 0.917948f, + 0.902918f, + 0.890432f, + 0.880902f, + 0.874401f, + 0.870394f, + 0.868503f, + 0.868209f, + 0.869062f, + 0.870725f, + 0.873006f, + 0.875558f, + 0.878230f, + 0.880892f, + 0.883445f, + 0.885832f, + 0.888059f, + 0.890058f, + 0.891782f, + 0.893247f, + 0.894460f, + 0.895397f, + 0.896023f, + 0.896380f, + 0.896434f, + 0.896198f, + 0.895673f, + 0.894865f, + 0.893908f, + 0.892700f, + 0.891224f, + 0.889501f, + 0.887539f, + 0.885336f, + 0.882903f, + 0.880244f, + 0.877373f, + 0.874296f, + 0.871019f, + 0.867549f, + 0.863932f, + 0.860153f, + 0.856355f, + 0.852395f, + 0.848277f, + 0.844006f, + 0.839587f, + 0.835045f, + 0.830378f, + 0.825579f, + 0.820649f, + 0.815592f, + 0.810432f, + 0.991627f, + 0.991627f, + 0.991627f, + 0.991627f, + 0.991627f, + 0.987290f, + 0.975397f, + 0.958508f, + 0.938352f, + 0.917733f, + 0.899800f, + 0.885878f, + 0.876516f, + 0.871200f, + 0.869099f, + 0.869317f, + 0.871112f, + 0.873870f, + 0.877160f, + 0.880682f, + 0.884229f, + 0.887737f, + 0.891076f, + 0.894161f, + 0.896981f, + 0.899543f, + 0.901847f, + 0.903882f, + 0.905672f, + 0.907188f, + 0.908451f, + 0.909480f, + 0.910289f, + 0.910878f, + 0.911259f, + 0.911430f, + 0.911396f, + 0.911154f, + 0.910712f, + 0.910081f, + 0.909266f, + 0.908264f, + 0.907094f, + 0.905752f, + 0.904244f, + 0.902577f, + 0.900799f, + 0.898931f, + 0.896923f, + 0.894782f, + 0.892513f, + 0.890117f, + 0.887600f, + 0.884968f, + 0.882222f, + 0.879369f, + 0.876408f, + 0.873345f, + 0.870183f, + 0.866925f, + 0.863575f, + 0.860160f, + 0.856672f, + 0.853098f, + 0.979942f, + 0.979942f, + 0.979942f, + 0.979942f, + 0.979942f, + 0.969716f, + 0.946057f, + 0.919578f, + 0.897061f, + 0.881240f, + 0.872544f, + 0.869415f, + 0.870091f, + 0.873049f, + 0.877196f, + 0.881826f, + 0.886523f, + 0.891022f, + 0.895225f, + 0.899054f, + 0.902538f, + 0.905714f, + 0.908532f, + 0.911016f, + 0.913201f, + 0.915120f, + 0.916813f, + 0.918292f, + 0.919581f, + 0.920674f, + 0.921575f, + 0.922321f, + 0.922902f, + 0.923329f, + 0.923616f, + 0.923756f, + 0.923765f, + 0.923641f, + 0.923396f, + 0.923026f, + 0.922542f, + 0.921943f, + 0.921237f, + 0.920427f, + 0.919514f, + 0.918502f, + 0.917397f, + 0.916203f, + 0.914920f, + 0.913553f, + 0.912107f, + 0.910581f, + 0.908980f, + 0.907306f, + 0.905561f, + 0.903749f, + 0.901869f, + 0.899925f, + 0.897961f, + 0.895966f, + 0.893913f, + 0.891804f, + 0.889640f, + 0.887423f, + 0.979942f, + 0.979942f, + 0.979942f, + 0.979942f, + 0.979942f, + 0.969716f, + 0.946057f, + 0.919578f, + 0.897061f, + 0.881240f, + 0.872544f, + 0.869415f, + 0.870091f, + 0.873049f, + 0.877196f, + 0.881826f, + 0.886523f, + 0.891022f, + 0.895225f, + 0.899054f, + 0.902538f, + 0.905714f, + 0.908532f, + 0.911016f, + 0.913201f, + 0.915120f, + 0.916813f, + 0.918292f, + 0.919581f, + 0.920674f, + 0.921575f, + 0.922321f, + 0.922902f, + 0.923329f, + 0.923616f, + 0.923756f, + 0.923765f, + 0.923641f, + 0.923396f, + 0.923026f, + 0.922542f, + 0.921943f, + 0.921237f, + 0.920427f, + 0.919514f, + 0.918502f, + 0.917397f, + 0.916203f, + 0.914920f, + 0.913553f, + 0.912107f, + 0.910581f, + 0.908980f, + 0.907306f, + 0.905561f, + 0.903749f, + 0.901869f, + 0.899925f, + 0.897961f, + 0.895966f, + 0.893913f, + 0.891804f, + 0.889640f, + 0.887423f + }; + } + } +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.hlsl new file mode 100644 index 00000000000..d335dd53fb6 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.hlsl @@ -0,0 +1,105 @@ +// +// This file was automatically generated from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs. Please don't edit by hand. +// + +// +// UnityEngine.Experimental.ScriptableRenderLoop.Lit.MaterialId: static fields +// +#define MATERIALID_LIT_STANDARD (0) +#define MATERIALID_LIT_SSS (1) +#define MATERIALID_LIT_CLEAR_COAT (2) +#define MATERIALID_LIT_SPECULAR (3) +#define MATERIALID_LIT_ANISO (4) + +// +// UnityEngine.Experimental.ScriptableRenderLoop.Lit.SurfaceData: static fields +// +#define DEBUGVIEW_LIT_SURFACEDATA_BASE_COLOR (1000) +#define DEBUGVIEW_LIT_SURFACEDATA_SPECULAR_OCCLUSION (1001) +#define DEBUGVIEW_LIT_SURFACEDATA_NORMAL_WS (1002) +#define DEBUGVIEW_LIT_SURFACEDATA_PERCEPTUAL_SMOOTHNESS (1003) +#define DEBUGVIEW_LIT_SURFACEDATA_MATERIAL_ID (1004) +#define DEBUGVIEW_LIT_SURFACEDATA_AMBIENT_OCCLUSION (1005) +#define DEBUGVIEW_LIT_SURFACEDATA_TANGENT_WS (1006) +#define DEBUGVIEW_LIT_SURFACEDATA_ANISOTROPY (1007) +#define DEBUGVIEW_LIT_SURFACEDATA_METALLIC (1008) +#define DEBUGVIEW_LIT_SURFACEDATA_SPECULAR (1009) +#define DEBUGVIEW_LIT_SURFACEDATA_SUB_SURFACE_RADIUS (1010) +#define DEBUGVIEW_LIT_SURFACEDATA_THICKNESS (1011) +#define DEBUGVIEW_LIT_SURFACEDATA_SUB_SURFACE_PROFILE (1012) +#define DEBUGVIEW_LIT_SURFACEDATA_COAT_NORMAL_WS (1013) +#define DEBUGVIEW_LIT_SURFACEDATA_COAT_PERCEPTUAL_SMOOTHNESS (1014) +#define DEBUGVIEW_LIT_SURFACEDATA_SPECULAR_COLOR (1015) + +// +// UnityEngine.Experimental.ScriptableRenderLoop.Lit.BSDFData: static fields +// +#define DEBUGVIEW_LIT_BSDFDATA_DIFFUSE_COLOR (1030) +#define DEBUGVIEW_LIT_BSDFDATA_FRESNEL0 (1031) +#define DEBUGVIEW_LIT_BSDFDATA_SPECULAR_OCCLUSION (1032) +#define DEBUGVIEW_LIT_BSDFDATA_NORMAL_WS (1033) +#define DEBUGVIEW_LIT_BSDFDATA_PERCEPTUAL_ROUGHNESS (1034) +#define DEBUGVIEW_LIT_BSDFDATA_ROUGHNESS (1035) +#define DEBUGVIEW_LIT_BSDFDATA_MATERIAL_ID (1036) +#define DEBUGVIEW_LIT_BSDFDATA_TANGENT_WS (1037) +#define DEBUGVIEW_LIT_BSDFDATA_BITANGENT_WS (1038) +#define DEBUGVIEW_LIT_BSDFDATA_ROUGHNESS_T (1039) +#define DEBUGVIEW_LIT_BSDFDATA_ROUGHNESS_B (1040) +#define DEBUGVIEW_LIT_BSDFDATA_ANISOTROPY (1041) +#define DEBUGVIEW_LIT_BSDFDATA_SUB_SURFACE_RADIUS (1042) +#define DEBUGVIEW_LIT_BSDFDATA_THICKNESS (1043) +#define DEBUGVIEW_LIT_BSDFDATA_SUB_SURFACE_PROFILE (1044) +#define DEBUGVIEW_LIT_BSDFDATA_COAT_NORMAL_WS (1045) +#define DEBUGVIEW_LIT_BSDFDATA_COAT_ROUGHNESS (1046) + +// +// UnityEngine.Experimental.ScriptableRenderLoop.Lit.GBufferMaterial: static fields +// +#define GBUFFERMATERIAL_COUNT (3) + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.Lit.SurfaceData +// PackingRules = Exact +struct SurfaceData +{ + float3 baseColor; + float specularOcclusion; + float3 normalWS; + float perceptualSmoothness; + int materialId; + float ambientOcclusion; + float3 tangentWS; + float anisotropy; + float metallic; + float specular; + float subSurfaceRadius; + float thickness; + int subSurfaceProfile; + float3 coatNormalWS; + float coatPerceptualSmoothness; + float3 specularColor; +}; + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.Lit.BSDFData +// PackingRules = Exact +struct BSDFData +{ + float3 diffuseColor; + float3 fresnel0; + float specularOcclusion; + float3 normalWS; + float perceptualRoughness; + float roughness; + float materialId; + float3 tangentWS; + float3 bitangentWS; + float roughnessT; + float roughnessB; + float anisotropy; + float subSurfaceRadius; + float thickness; + int subSurfaceProfile; + float3 coatNormalWS; + float coatRoughness; +}; + + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.hlsl.meta new file mode 100644 index 00000000000..310637ff43f --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ee69429b3df477b4391cbf8b40b46a23 +timeCreated: 1476010259 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.meta new file mode 100644 index 00000000000..cb4baaa5dbe --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c35b94e21bc30c948928a1131e79bd2e +timeCreated: 1476007916 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.hlsl new file mode 100644 index 00000000000..b2cc1e566b6 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.hlsl @@ -0,0 +1,670 @@ +#ifndef UNITY_MATERIAL_LIT_INCLUDED +#define UNITY_MATERIAL_LIT_INCLUDED + +//----------------------------------------------------------------------------- +// SurfaceData and BSDFData +//----------------------------------------------------------------------------- + +// SurfaceData is define in Lit.cs which generate Lit.cs.hlsl +#include "Lit.cs.hlsl" + +// Reference Lambert diffuse / GGX Specular for IBL and area lights +//#define LIT_DISPLAY_REFERENCE + +// TODO: Check if anisotropy with a dynamic if on anisotropy > 0 is performant. Because it may mean we always calculate both isotrpy and anisotropy case. +// Maybe we should always calculate anisotropy in case of standard ? Don't think the compile can optimize correctly. + +//----------------------------------------------------------------------------- +// Helper functions/variable specific to this materia +//----------------------------------------------------------------------------- + +float PackMaterialId(int materialId) +{ + return float(materialId) / 3.0; +} + +int UnpackMaterialId(float f) +{ + return int(round(f * 3.0)); +} + +// TODO: How can I declare a sampler for this one that is bilinear filtering +// TODO: This one should be set into a constant Buffer at pass frequency (with _Screensize) +UNITY_DECLARE_TEX2D(_PreIntegratedFGD); +UNITY_DECLARE_TEX2D(_LtcGGXMatrix); +UNITY_DECLARE_TEX2D(_LtcGGXMagnitude); + +// For image based lighting, a part of the BSDF is pre-integrated. +// This is done both for specular and diffuse (in case of DisneyDiffuse) +void GetPreIntegratedFGD(float NdotV, float perceptualRoughness, float3 fresnel0, out float3 specularFGD, out float diffuseFGD) +{ + // Pre-integrate GGX FGD + // _PreIntegratedFGD.x = Gv * (1 - Fc) with Fc = (1 - H.L)^5 + // _PreIntegratedFGD.y = Gv * Fc + // Pre integrate DisneyDiffuse FGD: + // _PreIntegratedFGD.z = DisneyDiffuse + float3 preFGD = UNITY_SAMPLE_TEX2D_LOD(_PreIntegratedFGD, float2(NdotV, perceptualRoughness), 0).xyz; + + // f0 * Gv * (1 - Fc) + Gv * Fc + specularFGD = fresnel0 * preFGD.x + preFGD.y; +#if DIFFUSE_LAMBERT_BRDF + diffuseFGD = 1.0; +#else + diffuseFGD = preFGD.z; +#endif +} + +//----------------------------------------------------------------------------- +// conversion function for forward +//----------------------------------------------------------------------------- + +BSDFData ConvertSurfaceDataToBSDFData(SurfaceData surfaceData) +{ + BSDFData bsdfData; + ZERO_INITIALIZE(BSDFData, bsdfData); + + bsdfData.specularOcclusion = surfaceData.specularOcclusion; + bsdfData.normalWS = surfaceData.normalWS; + bsdfData.perceptualRoughness = PerceptualSmoothnessToPerceptualRoughness(surfaceData.perceptualSmoothness); + bsdfData.roughness = PerceptualRoughnessToRoughness(bsdfData.perceptualRoughness); + bsdfData.materialId = surfaceData.materialId; + bsdfData.diffuseColor = surfaceData.baseColor; + + if (bsdfData.materialId == MATERIALID_LIT_STANDARD) + { + bsdfData.diffuseColor = surfaceData.baseColor * (1.0 - surfaceData.metallic); + bsdfData.fresnel0 = lerp(float3(surfaceData.specular, surfaceData.specular, surfaceData.specular), surfaceData.baseColor, surfaceData.metallic); + + bsdfData.tangentWS = surfaceData.tangentWS; + bsdfData.bitangentWS = cross(surfaceData.normalWS, surfaceData.tangentWS); + ConvertAnisotropyToRoughness(bsdfData.roughness, surfaceData.anisotropy, bsdfData.roughnessT, bsdfData.roughnessB); + bsdfData.anisotropy = surfaceData.anisotropy; + + bsdfData.materialId = surfaceData.anisotropy > 0 ? MATERIALID_LIT_ANISO : bsdfData.materialId; + } + else if (bsdfData.materialId == MATERIALID_LIT_SSS) + { + bsdfData.diffuseColor = surfaceData.baseColor; + bsdfData.fresnel0 = 0.028; // TODO take from subSurfaceProfile + bsdfData.subSurfaceRadius = surfaceData.subSurfaceRadius; + bsdfData.thickness = surfaceData.thickness; + bsdfData.subSurfaceProfile = surfaceData.subSurfaceProfile; + } + else if (bsdfData.materialId == MATERIALID_LIT_CLEAR_COAT) + { + bsdfData.diffuseColor = surfaceData.baseColor * (1.0 - surfaceData.metallic); + bsdfData.fresnel0 = lerp(float3(surfaceData.specular, surfaceData.specular, surfaceData.specular), surfaceData.baseColor, surfaceData.metallic); + bsdfData.coatNormalWS = surfaceData.coatNormalWS; + bsdfData.coatRoughness = PerceptualSmoothnessToRoughness(surfaceData.coatPerceptualSmoothness); + } + else if (bsdfData.materialId == MATERIALID_LIT_SPECULAR) + { + bsdfData.diffuseColor = surfaceData.baseColor; + bsdfData.fresnel0 = surfaceData.specularColor; + } + + return bsdfData; +} + +//----------------------------------------------------------------------------- +// conversion function for deferred +//----------------------------------------------------------------------------- + +// Encode SurfaceData (BSDF parameters) into GBuffer +// Must be in sync with RT declared in HDRenderLoop.cs ::Rebuild +void EncodeIntoGBuffer( SurfaceData surfaceData, + out float4 outGBuffer0, + out float4 outGBuffer1, + out float4 outGBuffer2) +{ + // RT0 - 8:8:8:8 sRGB + outGBuffer0 = float4(surfaceData.baseColor, surfaceData.specularOcclusion); + + // RT1 - 10:10:10:2 + // Encode normal on 20bit with oct compression + float2 octNormalWS = PackNormalOctEncode(surfaceData.normalWS); + // We store perceptualRoughness instead of roughness because it save a sqrt ALU when decoding + // (as we want both perceptualRoughness and roughness for the lighting due to Disney Diffuse model) + // TODO: Store 2 bit of flag into perceptualSmoothness (one for SSR, other is free (deferred planar reflection ID ? / MatID extension ?) + outGBuffer1 = float4(octNormalWS * 0.5 + 0.5, PerceptualSmoothnessToPerceptualRoughness(surfaceData.perceptualSmoothness), PackMaterialId(surfaceData.materialId)); + + // RT2 - 8:8:8:8 + if (surfaceData.materialId == MATERIALID_LIT_STANDARD) + { + // Encode tangent on 16bit with oct compression + float2 octTangentWS = PackNormalOctEncode(surfaceData.tangentWS); + // TODO: store metal and specular together, specular should be an enum (fixed value) + outGBuffer2 = float4(octTangentWS * 0.5 + 0.5, surfaceData.anisotropy, surfaceData.metallic); + } + else if (surfaceData.materialId == MATERIALID_LIT_SSS) + { + outGBuffer2 = float4(surfaceData.subSurfaceRadius, surfaceData.thickness, 0.0, surfaceData.subSurfaceProfile / 8.0f); // Number of profile not define yet + } + else if (surfaceData.materialId == MATERIALID_LIT_CLEAR_COAT) + { + // Encode coat normal on 16bit with oct compression + float2 octCoatNormalWS = PackNormalOctEncode(surfaceData.coatNormalWS); + // TODO: store metal and specular together, specular should be an enum (fixed value) + outGBuffer2 = float4(octCoatNormalWS * 0.5 + 0.5, PerceptualSmoothnessToRoughness(surfaceData.coatPerceptualSmoothness), surfaceData.metallic); + } + else if (surfaceData.materialId == MATERIALID_LIT_SPECULAR) + { + outGBuffer2 = float4(surfaceData.specularColor, 0.0); + } +} + +BSDFData DecodeFromGBuffer( float4 inGBuffer0, + float4 inGBuffer1, + float4 inGBuffer2) +{ + BSDFData bsdfData; + ZERO_INITIALIZE(BSDFData, bsdfData); + + float3 baseColor = inGBuffer0.rgb; + bsdfData.specularOcclusion = inGBuffer0.a; + + bsdfData.normalWS = UnpackNormalOctEncode(float2(inGBuffer1.r * 2.0 - 1.0, inGBuffer1.g * 2.0 - 1.0)); + bsdfData.perceptualRoughness = inGBuffer1.b; + bsdfData.roughness = PerceptualRoughnessToRoughness(bsdfData.perceptualRoughness); + bsdfData.materialId = UnpackMaterialId(inGBuffer1.a); + + if (bsdfData.materialId == MATERIALID_LIT_STANDARD) + { + float metallic = inGBuffer2.a; + // TODO extract spec + float specular = 0.04; + float anisotropy = inGBuffer2.b; + + bsdfData.diffuseColor = baseColor * (1.0 - metallic); + bsdfData.fresnel0 = lerp(float3(specular, specular, specular), baseColor, metallic); + + bsdfData.tangentWS = UnpackNormalOctEncode(float2(inGBuffer2.rg * 2.0 - 1.0)); + bsdfData.bitangentWS = cross(bsdfData.normalWS, bsdfData.tangentWS); + ConvertAnisotropyToRoughness(bsdfData.roughness, anisotropy, bsdfData.roughnessT, bsdfData.roughnessB); + bsdfData.anisotropy = anisotropy; + + bsdfData.materialId = anisotropy > 0 ? MATERIALID_LIT_ANISO : bsdfData.materialId; + } + else if (bsdfData.materialId == MATERIALID_LIT_SSS) + { + bsdfData.diffuseColor = baseColor; + bsdfData.fresnel0 = 0.028; // TODO take from subSurfaceProfile + bsdfData.subSurfaceRadius = inGBuffer2.r; + bsdfData.thickness = inGBuffer2.g; + bsdfData.subSurfaceProfile = inGBuffer2.a * 8.0f; + } + else if (bsdfData.materialId == MATERIALID_LIT_CLEAR_COAT) + { + float metallic = inGBuffer2.a; + // TODO extract spec + float specular = 0.04; + + bsdfData.diffuseColor = baseColor * (1.0 - metallic); + bsdfData.fresnel0 = lerp(float3(specular, specular, specular), baseColor, metallic); + bsdfData.coatNormalWS = UnpackNormalOctEncode(float2(inGBuffer2.rg * 2.0 - 1.0)); + bsdfData.coatRoughness = inGBuffer2.b; + } + else if (bsdfData.materialId == MATERIALID_LIT_SPECULAR) + { + bsdfData.diffuseColor = baseColor; + bsdfData.fresnel0 = inGBuffer2.rgb; + } + + return bsdfData; +} + +//----------------------------------------------------------------------------- +// Debug method (use to display values) +//----------------------------------------------------------------------------- + +void GetSurfaceDataDebug(uint paramId, SurfaceData surfaceData, inout float3 result, inout bool needLinearToSRGB) +{ + switch (paramId) + { + case DEBUGVIEW_LIT_SURFACEDATA_BASE_COLOR: + result = surfaceData.baseColor; needLinearToSRGB = true; + break; + case DEBUGVIEW_LIT_SURFACEDATA_SPECULAR_OCCLUSION: + result = surfaceData.specularOcclusion.xxx; + break; + case DEBUGVIEW_LIT_SURFACEDATA_NORMAL_WS: + result = surfaceData.normalWS * 0.5 + 0.5; + break; + case DEBUGVIEW_LIT_SURFACEDATA_PERCEPTUAL_SMOOTHNESS: + result = surfaceData.perceptualSmoothness.xxx; + break; + case DEBUGVIEW_LIT_SURFACEDATA_MATERIAL_ID: + result = GetIndexColor(surfaceData.materialId); + break; + case DEBUGVIEW_LIT_SURFACEDATA_AMBIENT_OCCLUSION: + result = surfaceData.ambientOcclusion.xxx; + break; + case DEBUGVIEW_LIT_SURFACEDATA_TANGENT_WS: + result = surfaceData.tangentWS * 0.5 + 0.5; + break; + case DEBUGVIEW_LIT_SURFACEDATA_ANISOTROPY: + result = surfaceData.anisotropy.xxx; + break; + case DEBUGVIEW_LIT_SURFACEDATA_METALLIC: + result = surfaceData.metallic.xxx; + break; + // TODO: Remap here! + case DEBUGVIEW_LIT_SURFACEDATA_SPECULAR: + result = surfaceData.specular.xxx; + break; + case DEBUGVIEW_LIT_SURFACEDATA_SUB_SURFACE_RADIUS: + result = surfaceData.subSurfaceRadius.xxx; + break; + case DEBUGVIEW_LIT_SURFACEDATA_THICKNESS: + result = surfaceData.thickness.xxx; + break; + case DEBUGVIEW_LIT_SURFACEDATA_SUB_SURFACE_PROFILE: + result = GetIndexColor(surfaceData.subSurfaceProfile); + break; + case DEBUGVIEW_LIT_SURFACEDATA_COAT_NORMAL_WS: + result = surfaceData.coatNormalWS * 0.5 + 0.5; + break; + case DEBUGVIEW_LIT_SURFACEDATA_COAT_PERCEPTUAL_SMOOTHNESS: + result = surfaceData.coatPerceptualSmoothness.xxx; + break; + case DEBUGVIEW_LIT_SURFACEDATA_SPECULAR_COLOR: + result = surfaceData.specularColor; needLinearToSRGB = true; + break; + } +} + +void GetBSDFDataDebug(uint paramId, BSDFData bsdfData, inout float3 result, inout bool needLinearToSRGB) +{ + switch (paramId) + { + case DEBUGVIEW_LIT_BSDFDATA_DIFFUSE_COLOR: + result = bsdfData.diffuseColor; needLinearToSRGB = true; + break; + case DEBUGVIEW_LIT_BSDFDATA_FRESNEL0: + result = bsdfData.fresnel0; + break; + case DEBUGVIEW_LIT_BSDFDATA_SPECULAR_OCCLUSION: + result = bsdfData.specularOcclusion.xxx; + break; + case DEBUGVIEW_LIT_BSDFDATA_NORMAL_WS: + result = bsdfData.normalWS * 0.5 + 0.5; + break; + case DEBUGVIEW_LIT_BSDFDATA_PERCEPTUAL_ROUGHNESS: + result = bsdfData.perceptualRoughness.xxx; + break; + case DEBUGVIEW_LIT_BSDFDATA_ROUGHNESS: + result = bsdfData.roughness.xxx; + break; + case DEBUGVIEW_LIT_BSDFDATA_MATERIAL_ID: + result = GetIndexColor(bsdfData.materialId); + break; + case DEBUGVIEW_LIT_BSDFDATA_TANGENT_WS: + result = bsdfData.tangentWS * 0.5 + 0.5; + break; + case DEBUGVIEW_LIT_BSDFDATA_BITANGENT_WS: + result = bsdfData.bitangentWS * 0.5 + 0.5; + break; + case DEBUGVIEW_LIT_BSDFDATA_ROUGHNESS_T: + result = bsdfData.roughnessT.xxx; + break; + case DEBUGVIEW_LIT_BSDFDATA_ROUGHNESS_B: + result = bsdfData.roughnessB.xxx; + break; + case DEBUGVIEW_LIT_BSDFDATA_ANISOTROPY: + result = bsdfData.anisotropy.xxx; + break; + case DEBUGVIEW_LIT_BSDFDATA_SUB_SURFACE_RADIUS: + result = bsdfData.subSurfaceRadius.xxx; + break; + case DEBUGVIEW_LIT_BSDFDATA_THICKNESS: + result = bsdfData.thickness.xxx; + break; + case DEBUGVIEW_LIT_BSDFDATA_SUB_SURFACE_PROFILE: + result = GetIndexColor(bsdfData.subSurfaceProfile); + break; + case DEBUGVIEW_LIT_BSDFDATA_COAT_NORMAL_WS: + result = bsdfData.coatNormalWS * 0.5 + 0.5; + break; + case DEBUGVIEW_LIT_BSDFDATA_COAT_ROUGHNESS: + result = bsdfData.coatRoughness.xxx; + break; + } +} + +//----------------------------------------------------------------------------- +// PreLightData +//----------------------------------------------------------------------------- + +// Precomputed lighting data to send to the various lighting functions +struct PreLightData +{ + float NdotV; + float ggxLambdaV; + + // Aniso + float TdotV; + float BdotV; + + float anisoGGXLambdaV; + + // image based lighting + // These variables aim to be use with EvaluateBSDF_Env + float3 iblNormalWS; // Normal to be use with image based lighting + float3 iblR; // Reflction vector, same as above. + + float3 specularFGD; // Store preconvole BRDF for both specular and diffuse + float diffuseFGD; + + // TODO: if we want we can store ambient occlusion here from SSAO pass for example that can be use for IBL specular occlusion + // float ambientOcclusion; // Feed from an ambient occlusion buffer + + // area light + float3x3 minV; + float ltcGGXMagnitude; +}; + +PreLightData GetPreLightData(float3 V, float3 positionWS, Coordinate coord, BSDFData bsdfData) +{ + PreLightData preLightData; + + // TODO: check Eric idea about doing that when writting into the GBuffer (with our forward decal) +#if 0 + preLightData.NdotV = GetShiftedNdotV(bsdfData.normalWS, V); // Note: May not work with speedtree... +#else + preLightData.NdotV = GetNdotV(bsdfData.normalWS, V); +#endif + + preLightData.ggxLambdaV = GetSmithJointGGXLambdaV(preLightData.NdotV, bsdfData.roughness); + + float iblNdotV = preLightData.NdotV; + float3 iblNormalWS = bsdfData.normalWS; + + // Check if we precompute anisotropy too + if (bsdfData.materialId == MATERIALID_LIT_ANISO) + { + preLightData.TdotV = dot(bsdfData.tangentWS, V); + preLightData.BdotV = dot(bsdfData.bitangentWS, V); + preLightData.anisoGGXLambdaV = GetSmithJointGGXAnisoLambdaV(preLightData.TdotV, preLightData.BdotV, preLightData.NdotV, bsdfData.roughnessT, bsdfData.roughnessB); + iblNormalWS = GetAnisotropicModifiedNormal(bsdfData.normalWS, bsdfData.tangentWS, V, bsdfData.anisotropy); + + // NOTE: If we follow the theory we should use the modified normal for the different calculation implying a normal (like NDotV) and use iblNormalWS + // into function like GetSpecularDominantDir(). However modified normal is just a hack. The goal is just to stretch a cubemap, no accuracy here. + // With this in mind and for performance reasons we chose to only use modified normal to calculate R. + // iblNdotV = GetNdotV(iblNormalWS, V); + } + + // We need to take into account the modified normal for faking anisotropic here. + preLightData.iblR = reflect(-V, iblNormalWS); + GetPreIntegratedFGD(iblNdotV, bsdfData.perceptualRoughness, bsdfData.fresnel0, preLightData.specularFGD, preLightData.diffuseFGD); + + // #if SHADERPASS == SHADERPASS_GBUFFER + // preLightData.ambientOcclusion = _AmbientOcclusion.Load(uint3(coord.unPositionSS, 0)).x; + // #endif + + // Area light specific + // UVs for sampling the LUTs + // TODO: Test with fastAcos + float theta = acos(dot(bsdfData.normalWS, V)); + // Scale and bias for the current precomputed table + float2 uv = 0.0078125 + 0.984375 * float2(bsdfData.perceptualRoughness, theta * INV_HALF_PI); + + // Get the inverse LTC matrix for GGX + // Note we load the matrix transpose (avoid to have to transpose it in shader) + preLightData.minV = 0.0; + preLightData.minV._m22 = 1.0; + preLightData.minV._m00_m02_m11_m20 = UNITY_SAMPLE_TEX2D_LOD(_LtcGGXMatrix, uv, 0); + + preLightData.ltcGGXMagnitude = UNITY_SAMPLE_TEX2D_LOD(_LtcGGXMagnitude, uv, 0).w; + + return preLightData; +} + +//----------------------------------------------------------------------------- +// bake lighting function +//----------------------------------------------------------------------------- + +// GetBakedDiffuseLigthing function compute the bake lighting + emissive color to be store in emissive buffer (Deferred case) +// In forward it must be add to the final contribution. +// This function require the 3 structure surfaceData, builtinData, bsdfData because it may require both the engine side data, and data that will not be store inside the gbuffer. +float3 GetBakedDiffuseLigthing(PreLightData prelightData, SurfaceData surfaceData, BuiltinData builtinData, BSDFData bsdfData) +{ + // Premultiply bake diffuse lighting information with DisneyDiffuse pre-integration + return builtinData.bakeDiffuseLighting * prelightData.diffuseFGD * surfaceData.ambientOcclusion * bsdfData.diffuseColor + builtinData.emissiveColor * builtinData.emissiveIntensity; +} + +//----------------------------------------------------------------------------- +// light transport functions +//----------------------------------------------------------------------------- + +LighTransportData GetLightTransportData(SurfaceData surfaceData, BuiltinData builtinData, BSDFData bsdfData) +{ + LighTransportData lightTransportData; + + // diffuseColor for lightmapping should basically be diffuse color. + // But rough metals (black diffuse) still scatter quite a lot of light around, so + // we want to take some of that into account too. + + lightTransportData.diffuseColor = bsdfData.diffuseColor + bsdfData.fresnel0 * bsdfData.roughness * 0.5 * surfaceData.metallic; + lightTransportData.emissiveColor = builtinData.emissiveColor * builtinData.emissiveIntensity; + + return lightTransportData; +} + +//----------------------------------------------------------------------------- +// BSDF share between area light (reference) and punctual light +//----------------------------------------------------------------------------- + +void BSDF( float3 V, float3 L, float3 positionWS, PreLightData prelightData, BSDFData bsdfData, + out float3 diffuseLighting, + out float3 specularLighting) +{ + float3 H = normalize(V + L); + float LdotH = saturate(dot(L, H)); + float NdotH = saturate(dot(bsdfData.normalWS, H)); + float NdotL = saturate(dot(bsdfData.normalWS, L)); + float3 F = F_Schlick(bsdfData.fresnel0, LdotH); + + float Vis; + float D; + // TODO: this way of handling aniso may not be efficient, or maybe with material classification, need to check perf here + // Maybe always using aniso maybe a win ? + if (bsdfData.materialId == MATERIALID_LIT_ANISO) + { + float TdotL = saturate(dot(bsdfData.tangentWS, L)); + float BdotL = saturate(dot(bsdfData.bitangentWS, L)); + + #ifdef USE_BSDF_PRE_LAMBDAV + Vis = V_SmithJointGGXAnisoLambdaV( prelightData.TdotV, prelightData.BdotV, prelightData.NdotV, TdotL, BdotL, NdotL, + bsdfData.roughnessT, bsdfData.roughnessB, prelightData.anisoGGXlambdaV); + #else + Vis = V_SmithJointGGXAniso( prelightData.TdotV, prelightData.BdotV, prelightData.NdotV, TdotL, BdotL, NdotL, + bsdfData.roughnessT, bsdfData.roughnessB); + #endif + + float TdotH = saturate(dot(bsdfData.tangentWS, H)); + float BdotH = saturate(dot(bsdfData.bitangentWS, H)); + D = D_GGXAnisoDividePI(TdotH, BdotH, NdotH, bsdfData.roughnessT, bsdfData.roughnessB); + } + else + { + #ifdef USE_BSDF_PRE_LAMBDAV + Vis = V_SmithJointGGX(NdotL, prelightData.NdotV, bsdfData.roughness, prelightData.ggxLambdaV); + #else + Vis = V_SmithJointGGX(NdotL, prelightData.NdotV, bsdfData.roughness); + #endif + D = D_GGXDividePI(NdotH, bsdfData.roughness); + } + specularLighting.rgb = F * Vis * D; + #ifdef DIFFUSE_LAMBERT_BRDF + float diffuseTerm = LambertDividePI(); + #else + float diffuseTerm = DisneyDiffuseDividePI(prelightData.NdotV, NdotL, LdotH, bsdfData.perceptualRoughness); + #endif + diffuseLighting.rgb = bsdfData.diffuseColor * diffuseTerm; +} + +//----------------------------------------------------------------------------- +// EvaluateBSDF_Punctual +//----------------------------------------------------------------------------- + +void EvaluateBSDF_Punctual( float3 V, float3 positionWS, PreLightData prelightData, PunctualLightData lightData, BSDFData bsdfData, + out float4 diffuseLighting, + out float4 specularLighting) +{ + // All punctual light type in the same formula, attenuation is neutral depends on light type. + // light.positionWS is the normalize light direction in case of directional light and invSqrAttenuationRadius is 0 + // mean dot(unL, unL) = 1 and mean GetDistanceAttenuation() will return 1 + // For point light and directional GetAngleAttenuation() return 1 + + float3 unL = lightData.positionWS - positionWS * lightData.useDistanceAttenuation; + float3 L = normalize(unL); + + float attenuation = GetDistanceAttenuation(unL, lightData.invSqrAttenuationRadius); + // Reminder: lights are ortiented backward (-Z) + attenuation *= GetAngleAttenuation(L, -lightData.forward, lightData.angleScale, lightData.angleOffset); + float illuminance = saturate(dot(bsdfData.normalWS, L)) * attenuation; + + diffuseLighting = float4(0.0, 0.0, 0.0, 1.0); + specularLighting = float4(0.0, 0.0, 0.0, 1.0); + + if (illuminance > 0.0f) + { + BSDF(V, L, positionWS, prelightData, bsdfData, diffuseLighting.rgb, specularLighting.rgb); + diffuseLighting.rgb *= lightData.color * illuminance * lightData.diffuseScale; + specularLighting.rgb *= lightData.color * illuminance * lightData.specularScale; + } +} + +//----------------------------------------------------------------------------- +// EvaluateBSDF_Area - Reference +//----------------------------------------------------------------------------- + +void IntegrateGGXAreaRef(float3 V, float3 positionWS, PreLightData prelightData, AreaLightData lightData, BSDFData bsdfData, + out float4 diffuseLighting, + out float4 specularLighting, + uint sampleCount = 512) +{ + // Add some jittering on Hammersley2d + float2 randNum = InitRandom(V.xy * 0.5 + 0.5); + + diffuseLighting = float4(0.0, 0.0, 0.0, 1.0); + specularLighting = float4(0.0, 0.0, 0.0, 1.0); + + for (uint i = 0; i < sampleCount; ++i) + { + float3 P = float3(0.0, 0.0, 0.0); // Sample light point. Random point on the light shape in local space. + float3 Ns = float3(0.0, 0.0, 0.0); // Unit surface normal at P + float lightPdf = 0.0; // Pdf of the light sample + + float2 u = Hammersley2d(i, sampleCount); + u = frac(u + randNum + 0.5); + + float4x4 localToWorld = float4x4(float4(lightData.right, 0.0), float4(lightData.up, 0.0), float4(lightData.forward, 0.0), float4(lightData.positionWS, 1.0)); + + if (lightData.shapeType == AREASHAPETYPE_SPHERE) + SampleSphere(u, localToWorld, lightData.size.x, lightPdf, P, Ns); + else if (lightData.shapeType == AREASHAPETYPE_HEMISPHERE) + SampleHemisphere(u, localToWorld, lightData.size.x, lightPdf, P, Ns); + else if (lightData.shapeType == AREASHAPETYPE_CYLINDER) + SampleCylinder(u, localToWorld, lightData.size.x, lightData.size.y, lightPdf, P, Ns); + else if (lightData.shapeType == AREASHAPETYPE_RECTANGLE) + SampleRectangle(u, localToWorld, lightData.size.x, lightData.size.y, lightPdf, P, Ns); + else if (lightData.shapeType == AREASHAPETYPE_DISK) + SampleDisk(u, localToWorld, lightData.size.x, lightPdf, P, Ns); + else if (lightData.shapeType == AREASHAPETYPE_LINE) + // SampleLine(u, localToWorld, areaLight.lightRadius0, lightPdf, P, Ns); + ; // TODO + + // Get distance + float3 unL = P - positionWS; + float sqrDist = dot(unL, unL); + float3 L = normalize(unL); + + // We calculate area reference light with the area integral rather than the solid angle one. + float illuminance = saturate(dot(Ns, -L)) * saturate(dot(bsdfData.normalWS, L)) / (sqrDist * lightPdf); + + float3 localDiffuseLighting = float3(0.0, 0.0, 0.0); + float3 localSpecularLighting = float3(0.0, 0.0, 0.0); + + if (illuminance > 0.0) + { + BSDF(V, L, positionWS, prelightData, bsdfData, localDiffuseLighting, localSpecularLighting); + localDiffuseLighting *= lightData.color * illuminance * lightData.diffuseScale; + localSpecularLighting *= lightData.color * illuminance * lightData.specularScale; + } + + diffuseLighting.rgb += localDiffuseLighting; + specularLighting.rgb += localSpecularLighting; + } + + diffuseLighting.rgb /= float(sampleCount); + specularLighting.rgb /= float(sampleCount); +} + +//----------------------------------------------------------------------------- +// EvaluateBSDF_Area +//----------------------------------------------------------------------------- + +void EvaluateBSDF_Area( float3 V, float3 positionWS, PreLightData prelightData, AreaLightData lightData, BSDFData bsdfData, + out float4 diffuseLighting, + out float4 specularLighting) +{ +#ifdef LIT_DISPLAY_REFERENCE + IntegrateGGXAreaRef(V, positionWS, prelightData, lightData, bsdfData, diffuseLighting, specularLighting); +#else + + // TODO: This could be precomputed + float halfWidth = lightData.size.x * 0.5; + float halfHeight = lightData.size.y * 0.5; + float3 p0 = lightData.positionWS + lightData.right * -halfWidth + lightData.up * halfHeight; + float3 p1 = lightData.positionWS + lightData.right * -halfWidth + lightData.up * -halfHeight; + float3 p2 = lightData.positionWS + lightData.right * halfWidth + lightData.up * -halfHeight; + float3 p3 = lightData.positionWS + lightData.right * halfWidth + lightData.up * halfHeight; + + float4x3 matL = float4x3(p0, p1, p2, p3); + float4x3 L = matL - float4x3(positionWS, positionWS, positionWS, positionWS); + + // TODO: Can we get early out based on diffuse computation ? (if all point are clip) + diffuseLighting = float4(0.0f, 0.0f, 0.0f, 1.0f); + specularLighting = float4(0.0f, 0.0f, 0.0f, 1.0f); + + // TODO: Fresnel is missing here but should be present + specularLighting.rgb = LTCEvaluate(V, bsdfData.normalWS, prelightData.minV, L, lightData.twoSided) * prelightData.ltcGGXMagnitude; + +//#ifdef DIFFUSE_LAMBERT_BRDF + // Lambert diffuse term (here it should be Disney) + float3x3 identity = 0; + identity._m00_m11_m22 = 1.0; + diffuseLighting.rgb = LTCEvaluate(V, bsdfData.normalWS, identity, L, lightData.twoSided) * bsdfData.diffuseColor; +//#else + // TODO: Disney +//#endif + + // Divide all by 2 PI as it is Lambert integration for diffuse + diffuseLighting.rgb *= lightData.color * INV_TWO_PI * lightData.diffuseScale; + specularLighting.rgb *= lightData.color * INV_TWO_PI * lightData.specularScale; + + // TODO: current area light code doesn't take into account artist attenuation radius! +#endif +} + +//----------------------------------------------------------------------------- +// EvaluateBSDF_Env +// ---------------------------------------------------------------------------- + +// We must implement EvaluateBSDF_Env for various environment map case. For now just cube array and cube (but could add latlong later). +// As a loop can call several version inside the same lighting architecture (think about sky and reflection probes, one isolated uncompressed, the others compressed BC6H in a textures array) +// we need to implemnt various version here. To factor code we play with macro to generate the various varient. +#define UNITY_ARGS_ENV(tex) UNITY_ARGS_TEXCUBEARRAY(tex) +#define UNITY_SAMPLE_ENV_LOD(tex, coord, lightData, lod) UNITY_SAMPLE_TEXCUBEARRAY_LOD(tex, float4(coord, lightData.sliceIndex), lod) +#include "LitEnvTemplate.hlsl" +#undef UNITY_ARGS_ENV +#undef UNITY_SAMPLE_ENV_LOD + +#define UNITY_ARGS_ENV(tex) UNITY_ARGS_TEXCUBE(tex) +#define UNITY_SAMPLE_ENV_LOD(tex, coord, lightData, lod) UNITY_SAMPLE_TEXCUBE_LOD(tex, float3(coord), lod) +#include "LitEnvTemplate.hlsl" +#undef UNITY_ARGS_ENV +#undef UNITY_SAMPLE_ENV_LOD + +#endif // UNITY_MATERIAL_LIT_INCLUDED diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.hlsl.meta new file mode 100644 index 00000000000..ce1a1bee13c --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/Lit.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 103bcc6c90ed7124f8474d354c0171ba +timeCreated: 1475845771 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitData.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitData.hlsl new file mode 100644 index 00000000000..2ce073113ea --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitData.hlsl @@ -0,0 +1,149 @@ +// No guard header! + +//------------------------------------------------------------------------------------- +// FragInput +// This structure gather all possible varying/interpolator for this shader. +//------------------------------------------------------------------------------------- + +struct FragInput +{ + float4 positionHS; + float3 positionWS; + float2 texCoord0; + float2 texCoord1; + float2 texCoord2; + float3 tangentToWorld[3]; + bool isFrontFace; +}; + +//------------------------------------------------------------------------------------- +// Fill SurfaceData/Builtin data function +//------------------------------------------------------------------------------------- + +void GetSurfaceAndBuiltinData(FragInput input, out SurfaceData surfaceData, out BuiltinData builtinData) +{ +#ifdef _HEIGHTMAP + // TODO: in case of shader graph, a node like parallax must be nullify if use to generate code for Meta pass + #ifndef _HEIGHTMAP_AS_DISPLACEMENT + float3 V = GetWorldSpaceNormalizeViewDir(input.positionWS); // This should be remove by the compiler as we usually cal it before. + float height = UNITY_SAMPLE_TEX2D(_HeightMap, input.texCoord0).r * _HeightScale + _HeightBias; + // Transform view vector in tangent space + TransformWorldToTangent(V, input.tangentToWorld); + float2 offset = ParallaxOffset(viewDirTS, height); + input.texCoord0 += offset; + input.texCoord1 += offset; + #endif +#endif + + surfaceData.baseColor = UNITY_SAMPLE_TEX2D(_BaseColorMap, input.texCoord0).rgb * _BaseColor.rgb; +#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + float alpha = _BaseColor.a; +#else + float alpha = UNITY_SAMPLE_TEX2D(_BaseColorMap, input.texCoord0).a * _BaseColor.a; +#endif + +#ifdef _ALPHATEST_ON + clip(alpha - _AlphaCutoff); +#endif + +#ifdef _SPECULAROCCLUSIONMAP + // TODO: Do something. For now just take alpha channel + surfaceData.specularOcclusion = UNITY_SAMPLE_TEX2D(_SpecularOcclusionMap, input.texCoord0).a; +#else + // Horizon Occlusion for Normal Mapped Reflections: http://marmosetco.tumblr.com/post/81245981087 + //surfaceData.specularOcclusion = saturate(1.0 + horizonFade * dot(r, input.tangentToWorld[2].xyz); + // smooth it + //surfaceData.specularOcclusion *= surfaceData.specularOcclusion; + surfaceData.specularOcclusion = 1.0; +#endif + + // TODO: think about using BC5 + float3 vertexNormalWS = input.tangentToWorld[2].xyz; + +#ifdef _NORMALMAP + #ifdef _NORMALMAP_TANGENT_SPACE + float3 normalTS = UnpackNormalAG(UNITY_SAMPLE_TEX2D(_NormalMap, input.texCoord0)); + surfaceData.normalWS = TransformTangentToWorld(normalTS, input.tangentToWorld); + #else // Object space (TODO: We need to apply the world rotation here! - Require to pass world transform) + surfaceData.normalWS = UNITY_SAMPLE_TEX2D(_NormalMap, input.texCoord0).rgb; + #endif +#else + surfaceData.normalWS = vertexNormalWS; +#endif + +#if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) + #ifdef _DOUBLESIDED_LIGHTING_FLIP + float3 oppositeNormalWS = -surfaceData.normalWS; + #else + // Mirror the normal with the plane define by vertex normal + float3 oppositeNormalWS = reflect(surfaceData.normalWS, vertexNormalWS); +#endif + // TODO : Test if GetOdddNegativeScale() is necessary here in case of normal map, as GetOdddNegativeScale is take into account in CreateTangentToWorld(); + surfaceData.normalWS = input.isFrontFace ? + (GetOdddNegativeScale() >= 0.0 ? surfaceData.normalWS : oppositeNormalWS) : + (-GetOdddNegativeScale() >= 0.0 ? surfaceData.normalWS : oppositeNormalWS); +#endif + +#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + surfaceData.perceptualSmoothness = UNITY_SAMPLE_TEX2D(_BaseColorMap, input.texCoord0).a; +#elif defined(_MASKMAP) + surfaceData.perceptualSmoothness = UNITY_SAMPLE_TEX2D(_MaskMap, input.texCoord0).a; +#else + surfaceData.perceptualSmoothness = 1.0; +#endif + surfaceData.perceptualSmoothness *= _Smoothness; + + surfaceData.materialId = 0; + + // MaskMap is Metallic, Ambient Occlusion, (Optional) - emissive Mask, Optional - Smoothness (in alpha) +#ifdef _MASKMAP + surfaceData.metallic = UNITY_SAMPLE_TEX2D(_MaskMap, input.texCoord0).r; + surfaceData.ambientOcclusion = UNITY_SAMPLE_TEX2D(_MaskMap, input.texCoord0).g; +#else + surfaceData.metallic = 1.0; + surfaceData.ambientOcclusion = 1.0; +#endif + surfaceData.metallic *= _Metallic; + + + surfaceData.tangentWS = input.tangentToWorld[0].xyz; // TODO: do with tangent same as with normal, sample into texture etc... + surfaceData.anisotropy = 0; + surfaceData.specular = 0.04; + + surfaceData.subSurfaceRadius = 1.0; + surfaceData.thickness = 0.0; + surfaceData.subSurfaceProfile = 0; + + surfaceData.coatNormalWS = float3(1.0, 0.0, 0.0); + surfaceData.coatPerceptualSmoothness = 1.0; + surfaceData.specularColor = float3(0.0, 0.0, 0.0); + + + // Builtin Data + builtinData.opacity = alpha; + + // TODO: Sample lightmap/lightprobe/volume proxy + // This should also handle projective lightmap + // Note that data input above can be use to sample into lightmap (like normal) + builtinData.bakeDiffuseLighting = UNITY_SAMPLE_TEX2D(_DiffuseLightingMap, input.texCoord1).rgb; + + // If we chose an emissive color, we have a dedicated texture for it and don't use MaskMap +#ifdef _EMISSIVE_COLOR + #ifdef _EMISSIVE_COLOR_MAP + builtinData.emissiveColor = UNITY_SAMPLE_TEX2D(_EmissiveColorMap, input.texCoord0).rgb * _EmissiveColor; + #else + builtinData.emissiveColor = _EmissiveColor; + #endif +#elif defined(_MASKMAP) // If we have a MaskMap, use emissive slot as a mask on baseColor + builtinData.emissiveColor = surfaceData.baseColor * UNITY_SAMPLE_TEX2D(_MaskMap, input.texCoord0).bbb; +#else + builtinData.emissiveColor = float3(0.0, 0.0, 0.0); +#endif + + builtinData.emissiveIntensity = _EmissiveIntensity; + + builtinData.velocity = float2(0.0, 0.0); + + builtinData.distortion = float2(0.0, 0.0); + builtinData.distortionBlur = 0.0; +} \ No newline at end of file diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitData.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitData.hlsl.meta new file mode 100644 index 00000000000..211ce9c397c --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitData.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c4a6d6f92d4f44d47b369e7a13250e0a +timeCreated: 1477003836 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitDefault.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitDefault.shader new file mode 100644 index 00000000000..46fbb4018f1 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitDefault.shader @@ -0,0 +1,494 @@ +Shader "Unity/Lit" +{ + Properties + { + // Following set of parameters represent the parameters node inside the MaterialGraph. + // They are use to fill a SurfaceData. With a MaterialGraph this should not exist. + + // Reminder. Color here are in linear but the UI (color picker) do the conversion sRGB to linear + _BaseColor("BaseColor", Color) = (1,1,1,1) + _BaseColorMap("BaseColorMap", 2D) = "white" {} + + _Metallic("_Metallic", Range(0.0, 1.0)) = 0 + _Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5 + _MaskMap("MaskMap", 2D) = "white" {} + + _SpecularOcclusionMap("SpecularOcclusion", 2D) = "white" {} + + _NormalMap("NormalMap", 2D) = "bump" {} + [Enum(TangentSpace, 0, ObjectSpace, 1)] _NormalMapSpace("NormalMap space", Float) = 0 + + _HeightMap("HeightMap", 2D) = "black" {} + _HeightScale("Height Scale", Float) = 1 + _HeightBias("Height Bias", Float) = 0 + [Enum(Parallax, 0, Displacement, 1)] _HeightMapMode("Heightmap usage", Float) = 0 + + _SubSurfaceRadius("SubSurfaceRadius", Range(0.0, 1.0)) = 0 + _SubSurfaceRadiusMap("SubSurfaceRadiusMap", 2D) = "white" {} + //_Thickness("Thickness", Range(0.0, 1.0)) = 0 + //_ThicknessMap("ThicknessMap", 2D) = "white" {} + //_SubSurfaceProfile("SubSurfaceProfile", Float) = 0 + + //_CoatCoverage("CoatCoverage", Range(0.0, 1.0)) = 0 + //_CoatCoverageMap("CoatCoverageMapMap", 2D) = "white" {} + + //_CoatRoughness("CoatRoughness", Range(0.0, 1.0)) = 0 + //_CoatRoughnessMap("CoatRoughnessMap", 2D) = "white" {} + + // _DistortionVectorMap("DistortionVectorMap", 2D) = "white" {} + // _DistortionBlur("DistortionBlur", Range(0.0, 1.0)) = 0 + + // Following options are for the GUI inspector and different from the input parameters above + // These option below will cause different compilation flag. + + _DiffuseLightingMap("DiffuseLightingMap", 2D) = "black" {} + _EmissiveColor("EmissiveColor", Color) = (0, 0, 0) + _EmissiveColorMap("EmissiveColorMap", 2D) = "white" {} + _EmissiveIntensity("EmissiveIntensity", Float) = 0 + + [ToggleOff] _DistortionOnly("Distortion Only", Float) = 0.0 + [ToggleOff] _DistortionDepthTest("Distortion Only", Float) = 0.0 + + [ToggleOff] _AlphaCutoffEnable("Alpha Cutoff Enable", Float) = 0.0 + _AlphaCutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + // Blending state + [HideInInspector] _SurfaceType("__surfacetype", Float) = 0.0 + [HideInInspector] _BlendMode ("__blendmode", Float) = 0.0 + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 + [HideInInspector] _DstBlend ("__dst", Float) = 0.0 + [HideInInspector] _ZWrite ("__zw", Float) = 1.0 + [HideInInspector] _CullMode("__cullmode", Float) = 2.0 + // Material Id + [HideInInspector] _MaterialId("_MaterialId", FLoat) = 0 + + [Enum(Mask Alpha, 0, BaseColor Alpha, 1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 1 + [Enum(Use Emissive Color, 0, Use Emissive Mask, 1)] _EmissiveColorMode("Emissive color mode", Float) = 1 + [Enum(None, 0, DoubleSided, 1, DoubleSidedLigthingFlip, 2, DoubleSidedLigthingMirror, 3)] _DoubleSidedMode("Double sided mode", Float) = 0 + } + + HLSLINCLUDE + + #pragma target 5.0 + #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev + + //------------------------------------------------------------------------------------- + // Variant + //------------------------------------------------------------------------------------- + + #pragma shader_feature _ALPHATEST_ON + #pragma shader_feature _ _DOUBLESIDED_LIGHTING_FLIP _DOUBLESIDED_LIGHTING_MIRROR + #pragma shader_feature _NORMALMAP + #pragma shader_feature _NORMALMAP_TANGENT_SPACE + #pragma shader_feature _MASKMAP + #pragma shader_feature _SPECULAROCCLUSIONMAP + #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _EMISSIVE_COLOR + #pragma shader_feature _EMISSIVE_COLOR_MAP + #pragma shader_feature _HEIGHTMAP + #pragma shader_feature _HEIGHTMAP_AS_DISPLACEMENT + + #pragma multi_compile _ LIGHTMAP_ON + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ DYNAMICLIGHTMAP_ON + + //------------------------------------------------------------------------------------- + // Define + //------------------------------------------------------------------------------------- + + #define UNITY_MATERIAL_LIT // Need to be define before including Material.hlsl + + //------------------------------------------------------------------------------------- + // Include + //------------------------------------------------------------------------------------- + + #include "common.hlsl" + #include "../../ShaderPass/ShaderPass.cs.hlsl" + #include "../../ShaderVariables.hlsl" + #include "../../Debug/DebugViewMaterial.hlsl" + + //------------------------------------------------------------------------------------- + // variable declaration + //------------------------------------------------------------------------------------- + + // Set of users variables + float4 _BaseColor; + UNITY_DECLARE_TEX2D(_BaseColorMap); + + float _Metallic; + float _Smoothness; + UNITY_DECLARE_TEX2D(_MaskMap); + UNITY_DECLARE_TEX2D(_SpecularOcclusionMap); + + UNITY_DECLARE_TEX2D(_NormalMap); + UNITY_DECLARE_TEX2D(_Heightmap); + float _HeightScale; + float _HeightBias; + + UNITY_DECLARE_TEX2D(_DiffuseLightingMap); + float4 _EmissiveColor; + UNITY_DECLARE_TEX2D(_EmissiveColorMap); + float _EmissiveIntensity; + + float _SubSurfaceRadius; + UNITY_DECLARE_TEX2D(_SubSurfaceRadiusMap); + // float _Thickness; + // UNITY_DECLARE_TEX2D(_ThicknessMap); + + // float _CoatCoverage; + // UNITY_DECLARE_TEX2D(_CoatCoverageMap); + + // float _CoatRoughness; + // UNITY_DECLARE_TEX2D(_CoatRoughnessMap); + + float _AlphaCutoff; + + ENDHLSL + + SubShader + { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 300 + + // ------------------------------------------------------------------ + // Deferred pass + Pass + { + Name "GBuffer" // Name is not used + Tags { "LightMode" = "GBuffer" } // This will be only for opaque object based on the RenderQueue index + + Cull [_CullMode] + + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_GBUFFER + #include "../../Lighting/Lighting.hlsl" // This include Material.hlsl + #include "LitData.hlsl" + #include "LitShare.hlsl" + + #include "../../ShaderPass/ShaderPassGBuffer.hlsl" + + ENDHLSL + } + + // ------------------------------------------------------------------ + // Debug pass + Pass + { + Name "Debug" + Tags { "LightMode" = "DebugViewMaterial" } + + Cull[_CullMode] + + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_DEBUG_VIEW_MATERIAL + #include "../../Material/Material.hlsl" + #include "LitData.hlsl" + #include "LitShare.hlsl" + + void GetVaryingsDataDebug(uint paramId, FragInput input, inout float3 result, inout bool needLinearToSRGB) + { + switch (paramId) + { + case DEBUGVIEW_VARYING_DEPTH: + // TODO: provide a customize parameter (like a slider) + float linearDepth = frac(LinearEyeDepth(input.positionHS.z, _ZBufferParams) * 0.1); + result = linearDepth.xxx; + break; + case DEBUGVIEW_VARYING_TEXCOORD0: + result = float3(input.texCoord0 * 0.5 + 0.5, 0.0); + break; + case DEBUGVIEW_VARYING_TEXCOORD1: + result = float3(input.texCoord1 * 0.5 + 0.5, 0.0); + break; + case DEBUGVIEW_VARYING_TEXCOORD2: + result = float3(input.texCoord2 * 0.5 + 0.5, 0.0); + break; + case DEBUGVIEW_VARYING_VERTEXTANGENTWS: + result = input.tangentToWorld[0].xyz * 0.5 + 0.5; + break; + case DEBUGVIEW_VARYING_VERTEXBITANGENTWS: + result = input.tangentToWorld[1].xyz * 0.5 + 0.5; + break; + case DEBUGVIEW_VARYING_VERTEXNORMALWS: + result = input.tangentToWorld[2].xyz * 0.5 + 0.5; + break; + } + } + + #include "../../ShaderPass/ShaderPassDebugViewMaterial.hlsl" + + ENDHLSL + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags{ "LightMode" = "Meta" } + + Cull Off + + HLSLPROGRAM + + // Lightmap memo + // DYNAMICLIGHTMAP_ON is used when we have an "enlighten lightmap" ie a lightmap updated at runtime by enlighten.This lightmap contain indirect lighting from realtime lights and realtime emissive material.Offline baked lighting(from baked material / light, + // both direct and indirect lighting) will hand up in the "regular" lightmap->LIGHTMAP_ON. + + #pragma vertex Vert + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_LIGHT_TRANSPORT + #include "../../Material/Material.hlsl" + #include "LitData.hlsl" + + CBUFFER_START(UnityMetaPass) + // x = use uv1 as raster position + // y = use uv2 as raster position + bool4 unity_MetaVertexControl; + + // x = return albedo + // y = return normal + bool4 unity_MetaFragmentControl; + + CBUFFER_END + + // This was not in constant buffer in original unity, so keep outiside. But should be in as ShaderRenderPass frequency + float unity_OneOverOutputBoost; + float unity_MaxOutputValue; + + struct Attributes + { + float3 positionOS : POSITION; + float3 normalOS : NORMAL; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float4 tangentOS : TANGENT; + }; + + struct Varyings + { + float4 positionHS; + float2 texCoord0; + float2 texCoord1; + }; + + struct PackedVaryings + { + float4 positionHS : SV_Position; + float4 interpolators[1] : TEXCOORD0; + }; + + // Function to pack data to use as few interpolator as possible, the ShaderGraph should generate these functions + PackedVaryings PackVaryings(Varyings input) + { + PackedVaryings output; + output.positionHS = input.positionHS; + output.interpolators[0].xy = input.texCoord0; + output.interpolators[0].zw = input.texCoord1; + + return output; + } + + FragInput UnpackVaryings(PackedVaryings input) + { + FragInput output; + ZERO_INITIALIZE(FragInput, output); + + output.positionHS = input.positionHS; + output.texCoord0 = input.interpolators[0].xy; + output.texCoord1 = input.interpolators[0].zw; + + return output; + } + + PackedVaryings Vert(Attributes input) + { + Varyings output; + + // Output UV coordinate in vertex shader + if (unity_MetaVertexControl.x) + { + input.positionOS.xy = input.uv1 * unity_LightmapST.xy + unity_LightmapST.zw; + // OpenGL right now needs to actually use incoming vertex position, + // so use it in a very dummy way + //v.positionOS.z = vertex.z > 0 ? 1.0e-4f : 0.0f; + } + if (unity_MetaVertexControl.y) + { + input.positionOS.xy = input.uv2 * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + // OpenGL right now needs to actually use incoming vertex position, + // so use it in a very dummy way + //v.positionOS.z = vertex.z > 0 ? 1.0e-4f : 0.0f; + } + + float3 positionWS = TransformObjectToWorld(input.positionOS); + output.positionHS = TransformWorldToHClip(positionWS); + output.texCoord0 = input.uv0; + output.texCoord1 = input.uv1; + + return PackVaryings(output); + } + + #include "../../ShaderPass/ShaderPassLightTransport.hlsl" + + ENDHLSL + } + + // ------------------------------------------------------------------ + // Depth only + Pass + { + Name "DepthOnly" // Name is not used + Tags { "LightMode" = "DepthOnly" } // This will be only for transparent object based on the RenderQueue index + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + Cull [_CullMode] + + HLSLPROGRAM + + #pragma vertex Vert + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_DEPTH_ONLY + #include "../../Material/Material.hlsl" + #include "LitData.hlsl" + + struct Attributes + { + float3 positionOS : POSITION; + float2 uv0 : TEXCOORD0; + #if defined(_HEIGHTMAP) && !defined (_HEIGHTMAP_AS_DISPLACEMENT) + float4 tangentOS : TANGENT; + #endif + }; + + struct Varyings + { + float4 positionHS; + float2 texCoord0; + #if defined(_HEIGHTMAP) && !defined (_HEIGHTMAP_AS_DISPLACEMENT) + float3 positionWS; + float3 tangentToWorld[3]; + #endif + }; + + struct PackedVaryings + { + float4 positionHS : SV_Position; + #if defined(_HEIGHTMAP) && !defined (_HEIGHTMAP_AS_DISPLACEMENT) + float4 interpolators[4] : TEXCOORD0; + #else + float4 interpolators[1] : TEXCOORD0; + #endif + }; + + // Function to pack data to use as few interpolator as possible, the ShaderGraph should generate these functions + PackedVaryings PackVaryings(Varyings input) + { + PackedVaryings output; + output.positionHS = input.positionHS; + #if defined(_HEIGHTMAP) && !defined (_HEIGHTMAP_AS_DISPLACEMENT) + output.interpolators[0].xyz = input.positionWS.xyz; + output.interpolators[1].xyz = input.tangentToWorld[0]; + output.interpolators[2].xyz = input.tangentToWorld[1]; + output.interpolators[3].xyz = input.tangentToWorld[2]; + + output.interpolators[0].w = input.texCoord0.x; + output.interpolators[1].w = input.texCoord0.y; + #else + output.interpolators[0] = float4(input.texCoord0, 0.0, 0.0); + #endif + + return output; + } + + FragInput UnpackVaryings(PackedVaryings input) + { + FragInput output; + ZERO_INITIALIZE(FragInput, output); + + output.positionHS = input.positionHS; + #if defined(_HEIGHTMAP) && !defined (_HEIGHTMAP_AS_DISPLACEMENT) + output.positionWS.xyz = input.interpolators[0].xyz; + output.tangentToWorld[0] = input.interpolators[1].xyz; + output.tangentToWorld[1] = input.interpolators[2].xyz; + output.tangentToWorld[2] = input.interpolators[3].xyz; + + output.texCoord0.xy = float2(input.interpolators[0].w, input.interpolators[1].w); + #else + output.texCoord0.xy = input.interpolators[0].xy; + #endif + + return output; + } + + PackedVaryings Vert(Attributes input) + { + Varyings output; + + float3 positionWS = TransformObjectToWorld(input.positionOS); + output.positionHS = TransformWorldToHClip(positionWS); + + output.texCoord0 = input.uv0; + + #if defined(_HEIGHTMAP) && !defined (_HEIGHTMAP_AS_DISPLACEMENT) + output.positionWS = positionWS; + + float3 normalWS = TransformObjectToWorldNormal(input.normalOS); + float4 tangentWS = float4(TransformObjectToWorldDir(input.tangentOS.xyz), input.tangentOS.w); + + float3x3 tangentToWorld = CreateTangentToWorld(normalWS, tangentWS.xyz, tangentWS.w); + output.tangentToWorld[0] = tangentToWorld[0]; + output.tangentToWorld[1] = tangentToWorld[1]; + output.tangentToWorld[2] = tangentToWorld[2]; + #endif + + return PackVaryings(output); + } + + #include "../../ShaderPass/ShaderPassDepthOnly.hlsl" + + ENDHLSL + } + + // ------------------------------------------------------------------ + // forward pass + Pass + { + Name "Forward" // Name is not used + Tags { "LightMode" = "Forward" } // This will be only for transparent object based on the RenderQueue index + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + Cull [_CullMode] + + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_FORWARD + #include "../../Lighting/Lighting.hlsl" + #include "LitData.hlsl" + #include "LitShare.hlsl" + + #include "../../ShaderPass/ShaderPassForward.hlsl" + + ENDHLSL + } + } + + CustomEditor "LitGUI" +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitDefault.shader.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitDefault.shader.meta new file mode 100644 index 00000000000..5b02ce33418 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitDefault.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6e4ae4064600d784cac1e41a9e6f2e59 +timeCreated: 1477003836 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitEnvTemplate.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitEnvTemplate.hlsl new file mode 100644 index 00000000000..d32b23b8c13 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitEnvTemplate.hlsl @@ -0,0 +1,238 @@ +// No guard header! + +//----------------------------------------------------------------------------- +// EvaluateBSDF_Env - Reference +// ---------------------------------------------------------------------------- + +// Ref: Moving Frostbite to PBR (Appendix A) +float3 IntegrateLambertIBLRef( EnvLightData lightData, BSDFData bsdfData, + UNITY_ARGS_ENV(_EnvTextures), + uint sampleCount = 2048) +{ + float3 N = bsdfData.normalWS; + float3 acc = float3(0.0, 0.0, 0.0); + // Add some jittering on Hammersley2d + float2 randNum = InitRandom(N.xy * 0.5 + 0.5); + + float3 tangentX, tangentY; + GetLocalFrame(N, tangentX, tangentY); + + for (uint i = 0; i < sampleCount; ++i) + { + float2 u = Hammersley2d(i, sampleCount); + u = frac(u + randNum + 0.5); + + float3 L; + float NdotL; + float weightOverPdf; + ImportanceSampleLambert(u, N, tangentX, tangentY, L, NdotL, weightOverPdf); + + if (NdotL > 0.0) + { + float4 val = UNITY_SAMPLE_ENV_LOD(_EnvTextures, L, lightData, 0); + + // diffuse Albedo is apply here as describe in ImportanceSampleLambert function + acc += bsdfData.diffuseColor * Lambert() * weightOverPdf * val.rgb; + } + } + + return acc / sampleCount; +} + +float3 IntegrateDisneyDiffuseIBLRef(float3 V, EnvLightData lightData, BSDFData bsdfData, + UNITY_ARGS_ENV(_EnvTextures), + uint sampleCount = 2048) +{ + float3 N = bsdfData.normalWS; + float NdotV = dot(N, V); + float3 acc = float3(0.0, 0.0, 0.0); + // Add some jittering on Hammersley2d + float2 randNum = InitRandom(N.xy * 0.5 + 0.5); + + float3 tangentX, tangentY; + GetLocalFrame(N, tangentX, tangentY); + + for (uint i = 0; i < sampleCount; ++i) + { + float2 u = Hammersley2d(i, sampleCount); + u = frac(u + randNum + 0.5); + + float3 L; + float NdotL; + float weightOverPdf; + // for Disney we still use a Cosine importance sampling, true Disney importance sampling imply a look up table + ImportanceSampleLambert(u, N, tangentX, tangentY, L, NdotL, weightOverPdf); + + if (NdotL > 0.0) + { + float3 H = normalize(L + V); + float LdotH = dot(L, H); + // Note: we call DisneyDiffuse that require to multiply by Albedo / PI. Divide by PI is already taken into account + // in weightOverPdf of ImportanceSampleLambert call. + float disneyDiffuse = DisneyDiffuse(NdotV, NdotL, LdotH, bsdfData.perceptualRoughness); + + // diffuse Albedo is apply here as describe in ImportanceSampleLambert function + float4 val = UNITY_SAMPLE_ENV_LOD(_EnvTextures, L, lightData, 0); + acc += bsdfData.diffuseColor * disneyDiffuse * weightOverPdf * val.rgb; + } + } + + return acc / sampleCount; +} + +// Ref: Moving Frostbite to PBR (Appendix A) +float3 IntegrateSpecularGGXIBLRef( float3 V, EnvLightData lightData, BSDFData bsdfData, + UNITY_ARGS_ENV(_EnvTextures), + uint sampleCount = 2048) +{ + float3 N = bsdfData.normalWS; + float NdotV = saturate(dot(N, V)); + float3 acc = float3(0.0, 0.0, 0.0); + + // Add some jittering on Hammersley2d + float2 randNum = InitRandom(V.xy * 0.5 + 0.5); + + float3 tangentX, tangentY; + GetLocalFrame(N, tangentX, tangentY); + + for (uint i = 0; i < sampleCount; ++i) + { + float2 u = Hammersley2d(i, sampleCount); + u = frac(u + randNum + 0.5); + + float VdotH; + float NdotL; + float3 L; + float weightOverPdf; + + // GGX BRDF + ImportanceSampleGGX(u, V, N, tangentX, tangentY, bsdfData.roughness, NdotV, + L, VdotH, NdotL, weightOverPdf); + + if (NdotL > 0.0) + { + // Fresnel component is apply here as describe in ImportanceSampleGGX function + float3 FweightOverPdf = F_Schlick(bsdfData.fresnel0, VdotH) * weightOverPdf; + + float4 val = UNITY_SAMPLE_ENV_LOD(_EnvTextures, L, lightData, 0); + + acc += FweightOverPdf * val.rgb; + } + } + + return acc / sampleCount; +} + +//----------------------------------------------------------------------------- +// EvaluateBSDF_Env +// ---------------------------------------------------------------------------- + +// _preIntegratedFGD and _CubemapLD are unique for each BRDF +void EvaluateBSDF_Env( float3 V, float3 positionWS, PreLightData prelightData, EnvLightData lightData, BSDFData bsdfData, + UNITY_ARGS_ENV(_EnvTextures), + out float4 diffuseLighting, + out float4 specularLighting) +{ +#ifdef LIT_DISPLAY_REFERENCE + + specularLighting.rgb = IntegrateSpecularGGXIBLRef(V, lightData, bsdfData, UNITY_PASS_ENV(_EnvTextures)); + specularLighting.a = 1.0; + +/* + #ifdef DIFFUSE_LAMBERT_BRDF + diffuseLighting.rgb = IntegrateLambertIBLRef(lightData, bsdfData, UNITY_PASS_ENV(_EnvTextures)); + #else + diffuseLighting.rgb = IntegrateDisneyDiffuseIBLRef(V, lightData, bsdfData, UNITY_PASS_ENV(_EnvTextures)); + #endif + diffuseLighting.a = 1.0; +*/ + diffuseLighting = float4(0.0, 0.0, 0.0, 0.0); + +#else + // TODO: factor this code in common, so other material authoring don't require to rewrite everything, + // also think about how such a loop can handle 2 cubemap at the same time as old unity. Macro can allow to do that + // but we need to have UNITY_SAMPLE_ENV_LOD replace by a true function instead that is define by the lighting arcitecture. + // Also not sure how to deal with 2 intersection.... + // Box and sphere are related to light property (but we have also distance based roughness etc...) + + // TODO: test the strech from Tomasz + // float shrinkedRoughness = AnisotropicStrechAtGrazingAngle(bsdfData.roughness, bsdfData.perceptualRoughness, NdotV); + + // Note: As explain in GetPreLightData we use normalWS and not iblNormalWS here (in case of anisotropy) + float3 rayWS = GetSpecularDominantDir(bsdfData.normalWS, prelightData.iblR, bsdfData.roughness); + + float3 R = rayWS; + float weight = 1.0; + + // In this code we redefine a bit the behavior of the reflcetion proble. We separate the projection volume (the proxy of the scene) form the influence volume (what pixel on the screen is affected) + + // 1. First determine the projection volume + + // In Unity the cubemaps are capture with the localToWorld transform of the component. + // This mean that location and oritention matter. So after intersection of proxy volume we need to convert back to world. + + // CAUTION: localToWorld is the transform use to convert the cubemap capture point to world space (mean it include the offset) + // the center of the bounding box is thus in locals space: positionLS - offsetLS + // We use this formulation as it is the one of legacy unity that was using only AABB box. + + float3x3 worldToLocal = transpose(float3x3(lightData.right, lightData.up, lightData.forward)); // worldToLocal assume no scaling + float3 positionLS = positionWS - lightData.positionWS; + positionLS = mul(positionLS, worldToLocal).xyz - lightData.offsetLS; // We want to calculate the intersection from the center of the bounding box. + + if (lightData.envShapeType == ENVSHAPETYPE_BOX) + { + float3 rayLS = mul(rayWS, worldToLocal); + float3 boxOuterDistance = lightData.innerDistance + float3(lightData.blendDistance, lightData.blendDistance, lightData.blendDistance); + float dist = BoxRayIntersectSimple(positionLS, rayLS, -boxOuterDistance, boxOuterDistance); + + // No need to normalize for fetching cubemap + // We can reuse dist calculate in LS directly in WS as there is no scaling. Also the offset is already include in lightData.positionWS + R = (positionWS + dist * rayWS) - lightData.positionWS; + + // TODO: add distance based roughness + } + else if (lightData.envShapeType == ENVSHAPETYPE_SPHERE) + { + float3 rayLS = mul(rayWS, worldToLocal); + float sphereOuterDistance = lightData.innerDistance.x + lightData.blendDistance; + float dist = SphereRayIntersectSimple(positionLS, rayLS, sphereOuterDistance); + + R = (positionWS + dist * rayWS) - lightData.positionWS; + } + + // 2. Apply the influence volume (Box volume is used for culling whatever the influence shape) + // TODO: In the future we could have an influence volume inside the projection volume (so with a different transform, in this case we will need another transform) + if (lightData.envShapeType == ENVSHAPETYPE_SPHERE) + { + float distFade = max(length(positionLS) - lightData.innerDistance.x, 0.0); + weight = saturate(1.0 - distFade / max(lightData.blendDistance, 0.0001)); // avoid divide by zero + } + else // ENVSHAPETYPE_BOX or ENVSHAPETYPE_NONE + { + // Calculate falloff value, so reflections on the edges of the volume would gradually blend to previous reflection. + float distFade = DistancePointBox(positionLS, -lightData.innerDistance, lightData.innerDistance); + weight = saturate(1.0 - distFade / max(lightData.blendDistance, 0.0001)); // avoid divide by zero + } + + // Smooth weighting + weight = smoothstep01(weight); + + // TODO: we must always perform a weight calculation as due to tiled rendering we need to smooth out cubemap at boundaries. + // So goal is to split into two category and have an option to say if we parallax correct or not. + + // TODO: compare current Morten version: offline cubemap with a particular remap + the bias in perceptualRoughnessToMipmapLevel + // to classic remap like unreal/Frobiste. The function GetSpecularDominantDir can result in a better matching in this case + // We let GetSpecularDominantDir currently as it still an improvement but not as good as it could be + float mip = perceptualRoughnessToMipmapLevel(bsdfData.perceptualRoughness); + float4 preLD = UNITY_SAMPLE_ENV_LOD(_EnvTextures, R, lightData, mip); + specularLighting.rgb = preLD.rgb * prelightData.specularFGD; + + // Apply specular occlusion on it + specularLighting.rgb *= bsdfData.specularOcclusion; + specularLighting.a = weight; + + diffuseLighting = float4(0.0, 0.0, 0.0, 0.0); + +#endif +} + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitEnvTemplate.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitEnvTemplate.hlsl.meta new file mode 100644 index 00000000000..2b9814d4970 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitEnvTemplate.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 22c20a34a48ade04daa95ffdc51ac052 +timeCreated: 1476997917 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitShare.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitShare.hlsl new file mode 100644 index 00000000000..5773f4234ef --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitShare.hlsl @@ -0,0 +1,131 @@ +// No guard header! + +#ifndef SHADERPASS +#error Undefine_SHADERPASS +#endif + +//------------------------------------------------------------------------------------- +// Attribute/Varying +//------------------------------------------------------------------------------------- + +struct Attributes +{ + float3 positionOS : POSITION; + float3 normalOS : NORMAL; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; +#if (DYNAMICLIGHTMAP_ON) || (SHADERPASS == SHADERPASS_DEBUG_VIEW_MATERIAL) + float2 uv2 : TEXCOORD2; +#endif + float4 tangentOS : TANGENT; // Always present as we require it also in case of anisotropic lighting + + // UNITY_INSTANCE_ID +}; + +struct Varyings +{ + float4 positionHS; + float3 positionWS; + float2 texCoord0; + float2 texCoord1; +#if (DYNAMICLIGHTMAP_ON) || (SHADERPASS == SHADERPASS_DEBUG_VIEW_MATERIAL) + float2 texCoord2; +#endif + float3 tangentToWorld[3]; +}; + +struct PackedVaryings +{ + float4 positionHS : SV_Position; +#if (DYNAMICLIGHTMAP_ON) || (SHADERPASS == SHADERPASS_DEBUG_VIEW_MATERIAL) + float4 interpolators[5] : TEXCOORD0; +#else + float4 interpolators[4] : TEXCOORD0; +#endif + +#if SHADER_STAGE_FRAGMENT + #if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMATIC; + #endif +#endif +}; + +// Function to pack data to use as few interpolator as possible, the ShaderGraph should generate these functions +PackedVaryings PackVaryings(Varyings input) +{ + PackedVaryings output; + output.positionHS = input.positionHS; + output.interpolators[0].xyz = input.positionWS.xyz; + output.interpolators[1].xyz = input.tangentToWorld[0]; + output.interpolators[2].xyz = input.tangentToWorld[1]; + output.interpolators[3].xyz = input.tangentToWorld[2]; + + output.interpolators[0].w = input.texCoord0.x; + output.interpolators[1].w = input.texCoord0.y; + output.interpolators[2].w = input.texCoord1.x; + output.interpolators[3].w = input.texCoord1.y; + +#if (DYNAMICLIGHTMAP_ON) || (SHADERPASS == SHADERPASS_DEBUG_VIEW_MATERIAL) + output.interpolators[4] = float4(input.texCoord2.xy, 0.0, 0.0); +#endif + + return output; +} + +FragInput UnpackVaryings(PackedVaryings input) +{ + FragInput output; + ZERO_INITIALIZE(FragInput, output); + + output.positionHS = input.positionHS; + output.positionWS.xyz = input.interpolators[0].xyz; + output.tangentToWorld[0] = input.interpolators[1].xyz; + output.tangentToWorld[1] = input.interpolators[2].xyz; + output.tangentToWorld[2] = input.interpolators[3].xyz; + + output.texCoord0.xy = float2(input.interpolators[0].w, input.interpolators[1].w); + output.texCoord1.xy = float2(input.interpolators[2].w, input.interpolators[3].w); + +#if (DYNAMICLIGHTMAP_ON) || (SHADERPASS == SHADERPASS_DEBUG_VIEW_MATERIAL) + output.texCoord2 = input.interpolators[4].xy; +#endif + +#if SHADER_STAGE_FRAGMENT + #if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) + output.isFrontFace = IS_FRONT_VFACE(input.cullFace, true, false); + #endif +#endif + + return output; +} + +//------------------------------------------------------------------------------------- +// Vertex shader +//------------------------------------------------------------------------------------- + +// TODO: Here we will also have all the vertex deformation (GPU skinning, vertex animation, morph target...) or we will need to generate a compute shaders instead (better! but require work to deal with unpacking like fp16) +PackedVaryings VertDefault(Attributes input) +{ + Varyings output; + + output.positionWS = TransformObjectToWorld(input.positionOS); + // TODO deal with camera center rendering and instancing (This is the reason why we always perform tow steps transform to clip space + instancing matrix) + output.positionHS = TransformWorldToHClip(output.positionWS); + + float3 normalWS = TransformObjectToWorldNormal(input.normalOS); + + output.texCoord0 = input.uv0; + output.texCoord1 = input.uv1; +#if (DYNAMICLIGHTMAP_ON) || (SHADERPASS == SHADERPASS_DEBUG_VIEW_MATERIAL) + output.texCoord2 = input.uv2; +#endif + + float4 tangentWS = float4(TransformObjectToWorldDir(input.tangentOS.xyz), input.tangentOS.w); + + float3x3 tangentToWorld = CreateTangentToWorld(normalWS, tangentWS.xyz, tangentWS.w); + output.tangentToWorld[0] = tangentToWorld[0]; + output.tangentToWorld[1] = tangentToWorld[1]; + output.tangentToWorld[2] = tangentToWorld[2]; + + return PackVaryings(output); +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitShare.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitShare.hlsl.meta new file mode 100644 index 00000000000..791d373478d --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitShare.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9e1065b7612f2bd4c918d79e8a7ea8a3 +timeCreated: 1477003836 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitUI.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitUI.cs new file mode 100644 index 00000000000..469291277dd --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitUI.cs @@ -0,0 +1,453 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace UnityEditor +{ + internal class LitGUI : ShaderGUI + { + public enum SurfaceType + { + Opaque, + Transparent + } + public enum BlendMode + { + Lerp, + Add, + SoftAdd, + Multiply, + Premultiply + } + + public enum SmoothnessMapChannel + { + MaskAlpha, + AlbedoAlpha, + } + public enum EmissiveColorMode + { + UseEmissiveColor, + UseEmissiveMask, + } + public enum DoubleSidedMode + { + None, + DoubleSided, + DoubleSidedLightingFlip, + DoubleSidedLightingMirror, + } + + public enum NormalMapSpace + { + TangentSpace, + ObjectSpace, + } + + public enum HeightmapMode + { + Parallax, + Displacement, + } + + private static class Styles + { + public static string OptionText = "Options"; + public static string SurfaceTypeText = "Surface Type"; + public static string BlendModeText = "Blend Mode"; + + public static GUIContent alphaCutoffEnableText = new GUIContent("Alpha Cutoff Enable", "Threshold for alpha cutoff"); + public static GUIContent alphaCutoffText = new GUIContent("Alpha Cutoff", "Threshold for alpha cutoff"); + public static GUIContent doubleSidedModeText = new GUIContent("Double Sided", "This will render the two face of the objects (disable backface culling)"); + + public static readonly string[] surfaceTypeNames = Enum.GetNames(typeof(SurfaceType)); + public static readonly string[] blendModeNames = Enum.GetNames(typeof(BlendMode)); + + public static string InputsOptionsText = "Inputs options"; + + public static GUIContent smoothnessMapChannelText = new GUIContent("Smoothness Source", "Smoothness texture and channel"); + public static GUIContent emissiveColorModeText = new GUIContent("Emissive Color Usage", "Use emissive color or emissive mask"); + + public static string InputsText = "Inputs"; + + public static string InputsMapText = ""; + + public static GUIContent baseColorText = new GUIContent("Base Color + Opacity", "Albedo (RGB) and Opacity (A)"); + public static GUIContent baseColorSmoothnessText = new GUIContent("Base Color + Smoothness", "Albedo (RGB) and Smoothness (A)"); + + public static GUIContent metallicText = new GUIContent("Metallic", "Metallic scale factor"); + public static GUIContent smoothnessText = new GUIContent("Smoothness", "Smoothness scale factor"); + public static GUIContent maskMapESText = new GUIContent("Mask Map - M(R), AO(G), E(B), S(A)", "Mask map"); + public static GUIContent maskMapEText = new GUIContent("Mask Map - M(R), AO(G), E(B)", "Mask map"); + public static GUIContent maskMapText = new GUIContent("Mask Map - M(R), AO(G)", "Mask map"); + public static GUIContent maskMapSText = new GUIContent("Mask Map - M(R), AO(G), S(A)", "Mask map"); + + public static GUIContent specularOcclusionMapText = new GUIContent("Specular Occlusion Map (RGBA)", "Specular Occlusion Map"); + + public static GUIContent normalMapText = new GUIContent("Normal Map", "Normal Map (BC5) - DXT5 for test"); + public static GUIContent normalMapSpaceText = new GUIContent("Normal Map space", ""); + + public static GUIContent heightMapText = new GUIContent("Height Map", "Height Map"); + public static GUIContent heightMapModeText = new GUIContent("Height Map Mode", ""); + + + // public static GUIContent diffuseLightingMapText = new GUIContent("DiffuseLightingMap", "Lightmap/Lightprobe data (fill by system is not done"); + + public static GUIContent emissiveText = new GUIContent("Emissive Color", "Emissive"); + public static GUIContent emissiveIntensityText = new GUIContent("Emissive Intensity", "Emissive"); + } + + MaterialProperty surfaceType = null; + MaterialProperty blendMode = null; + MaterialProperty alphaCutoff = null; + MaterialProperty alphaCutoffEnable = null; + MaterialProperty doubleSidedMode = null; + MaterialProperty smoothnessMapChannel = null; + MaterialProperty emissiveColorMode = null; + + MaterialProperty baseColor = null; + MaterialProperty baseColorMap = null; + MaterialProperty metallic = null; + MaterialProperty smoothness = null; + MaterialProperty maskMap = null; + MaterialProperty specularOcclusionMap = null; + MaterialProperty normalMap = null; + MaterialProperty normalMapSpace = null; + MaterialProperty heightMap = null; + MaterialProperty heightScale = null; + MaterialProperty heightBias = null; + MaterialProperty heightMapMode = null; +// MaterialProperty diffuseLightingMap = null; + MaterialProperty emissiveColor = null; + MaterialProperty emissiveColorMap = null; + MaterialProperty emissiveIntensity = null; +// MaterialProperty subSurfaceRadius = null; +// MaterialProperty subSurfaceRadiusMap = null; + + protected MaterialEditor m_MaterialEditor; + + protected const string kSurfaceType = "_SurfaceType"; + protected const string kBlendMode = "_BlendMode"; + protected const string kAlphaCutoff = "_AlphaCutoff"; + protected const string kAlphaCutoffEnabled = "_AlphaCutoffEnable"; + protected const string kDoubleSidedMode = "_DoubleSidedMode"; + protected const string kSmoothnessTextureChannelProp = "_SmoothnessTextureChannel"; + protected const string kEmissiveColorMode = "_EmissiveColorMode"; + protected const string kNormalMapSpace = "_NormalMapSpace"; + protected const string kHeightMapMode = "_HeightMapMode"; + + protected const string kNormalMap = "_NormalMap"; + protected const string kMaskMap = "_MaskMap"; + protected const string kspecularOcclusionMap = "_SpecularOcclusionMap"; + protected const string kEmissiveColorMap = "_EmissiveColorMap"; + protected const string kHeightMap = "_HeightMap"; + + public void FindOptionProperties(MaterialProperty[] props) + { + surfaceType = FindProperty(kSurfaceType, props); + blendMode = FindProperty(kBlendMode, props); + alphaCutoff = FindProperty(kAlphaCutoff, props); + alphaCutoffEnable = FindProperty(kAlphaCutoffEnabled, props); + doubleSidedMode = FindProperty(kDoubleSidedMode, props); + smoothnessMapChannel = FindProperty(kSmoothnessTextureChannelProp, props); + emissiveColorMode = FindProperty(kEmissiveColorMode, props); + normalMapSpace = FindProperty(kNormalMapSpace, props); + heightMapMode = FindProperty(kHeightMapMode, props); + } + + public void FindInputProperties(MaterialProperty[] props) + { + baseColor = FindProperty("_BaseColor", props); + baseColorMap = FindProperty("_BaseColorMap", props); + metallic = FindProperty("_Metallic", props); + smoothness = FindProperty("_Smoothness", props); + maskMap = FindProperty(kMaskMap, props); + specularOcclusionMap = FindProperty(kspecularOcclusionMap, props); + normalMap = FindProperty(kNormalMap, props); + heightMap = FindProperty(kHeightMap, props); + heightScale = FindProperty("_HeightScale", props); + heightBias = FindProperty("_HeightBias", props); + // diffuseLightingMap = FindProperty("_DiffuseLightingMap", props); + emissiveColor = FindProperty("_EmissiveColor", props); + emissiveColorMap = FindProperty(kEmissiveColorMap, props); + emissiveIntensity = FindProperty("_EmissiveIntensity", props); + } + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) + { + FindOptionProperties(props); // MaterialProperties can be animated so we do not cache them but fetch them every event to ensure animated values are updated correctly + FindInputProperties(props); + + m_MaterialEditor = materialEditor; + Material material = materialEditor.target as Material; + ShaderPropertiesGUI(material); + } + + protected void ShaderOptionsGUI() + { + EditorGUI.indentLevel++; + GUILayout.Label(Styles.OptionText, EditorStyles.boldLabel); + SurfaceTypePopup(); + if ((SurfaceType)surfaceType.floatValue == SurfaceType.Transparent) + { + BlendModePopup(); + } + m_MaterialEditor.ShaderProperty(alphaCutoffEnable, Styles.alphaCutoffEnableText.text); + if (alphaCutoffEnable.floatValue == 1.0) + { + m_MaterialEditor.ShaderProperty(alphaCutoff, Styles.alphaCutoffText.text); + } + m_MaterialEditor.ShaderProperty(doubleSidedMode, Styles.doubleSidedModeText.text); + + EditorGUI.indentLevel--; + } + + protected void ShaderInputOptionsGUI() + { + EditorGUI.indentLevel++; + GUILayout.Label(Styles.InputsOptionsText, EditorStyles.boldLabel); + m_MaterialEditor.ShaderProperty(smoothnessMapChannel, Styles.smoothnessMapChannelText.text); + m_MaterialEditor.ShaderProperty(emissiveColorMode, Styles.emissiveColorModeText.text); + m_MaterialEditor.ShaderProperty(normalMapSpace, Styles.normalMapSpaceText.text); + m_MaterialEditor.ShaderProperty(heightMapMode, Styles.heightMapModeText.text); + EditorGUI.indentLevel--; + } + + protected void ShaderInputGUI() + { + EditorGUI.indentLevel++; + bool smoothnessInAlbedoAlpha = (SmoothnessMapChannel)smoothnessMapChannel.floatValue == SmoothnessMapChannel.AlbedoAlpha; + bool useEmissiveMask = (EmissiveColorMode)emissiveColorMode.floatValue == EmissiveColorMode.UseEmissiveMask; + + GUILayout.Label(Styles.InputsText, EditorStyles.boldLabel); + m_MaterialEditor.TexturePropertySingleLine(smoothnessInAlbedoAlpha ? Styles.baseColorSmoothnessText : Styles.baseColorText, baseColorMap, baseColor); + m_MaterialEditor.ShaderProperty(metallic, Styles.metallicText); + m_MaterialEditor.ShaderProperty(smoothness, Styles.smoothnessText); + + if (smoothnessInAlbedoAlpha && useEmissiveMask) + m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapEText, maskMap); + else if (smoothnessInAlbedoAlpha && !useEmissiveMask) + m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapText, maskMap); + else if (!smoothnessInAlbedoAlpha && useEmissiveMask) + m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapESText, maskMap); + else if (!smoothnessInAlbedoAlpha && !useEmissiveMask) + m_MaterialEditor.TexturePropertySingleLine(Styles.maskMapSText, maskMap); + + m_MaterialEditor.TexturePropertySingleLine(Styles.specularOcclusionMapText, specularOcclusionMap); + + m_MaterialEditor.TexturePropertySingleLine(Styles.normalMapText, normalMap); + + m_MaterialEditor.TexturePropertySingleLine(Styles.heightMapText, heightMap, heightScale, heightBias); + + if (!useEmissiveMask) + { + m_MaterialEditor.TexturePropertySingleLine(Styles.emissiveText, emissiveColorMap, emissiveColor); + } + m_MaterialEditor.ShaderProperty(emissiveIntensity, Styles.emissiveIntensityText); + EditorGUI.indentLevel--; + } + + public void ShaderPropertiesGUI(Material material) + { + // Use default labelWidth + EditorGUIUtility.labelWidth = 0f; + + // Detect any changes to the material + EditorGUI.BeginChangeCheck(); + { + ShaderOptionsGUI(); + EditorGUILayout.Space(); + + ShaderInputOptionsGUI(); + + EditorGUILayout.Space(); + ShaderInputGUI(); + } + + if (EditorGUI.EndChangeCheck()) + { + foreach (var obj in m_MaterialEditor.targets) + SetupMaterial((Material)obj); + } + } + + // TODO: try to setup minimun value to fall back to standard shaders and reverse + public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) + { + base.AssignNewShaderToMaterial(material, oldShader, newShader); + } + + void SurfaceTypePopup() + { + EditorGUI.showMixedValue = surfaceType.hasMixedValue; + var mode = (SurfaceType)surfaceType.floatValue; + + EditorGUI.BeginChangeCheck(); + mode = (SurfaceType)EditorGUILayout.Popup(Styles.SurfaceTypeText, (int)mode, Styles.surfaceTypeNames); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialEditor.RegisterPropertyChangeUndo("Surface Type"); + surfaceType.floatValue = (float)mode; + } + + EditorGUI.showMixedValue = false; + } + + void BlendModePopup() + { + EditorGUI.showMixedValue = blendMode.hasMixedValue; + var mode = (BlendMode)blendMode.floatValue; + + EditorGUI.BeginChangeCheck(); + mode = (BlendMode)EditorGUILayout.Popup(Styles.BlendModeText, (int)mode, Styles.blendModeNames); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialEditor.RegisterPropertyChangeUndo("Blend Mode"); + blendMode.floatValue = (float)mode; + } + + EditorGUI.showMixedValue = false; + } + + protected virtual void SetupKeywordsForInputMaps(Material material) + { + SetKeyword(material, "_NORMALMAP", material.GetTexture(kNormalMap)); + SetKeyword(material, "_MASKMAP", material.GetTexture(kMaskMap)); + SetKeyword(material, "_SPECULAROCCLUSIONMAP", material.GetTexture(kspecularOcclusionMap)); + SetKeyword(material, "_EMISSIVE_COLOR_MAP", material.GetTexture(kEmissiveColorMap)); + SetKeyword(material, "_HEIGHTMAP", material.GetTexture(kHeightMap)); + } + + protected void SetupMaterial(Material material) + { + // Note: keywords must be based on Material value not on MaterialProperty due to multi-edit & material animation + // (MaterialProperty value might come from renderer material property block) + + bool alphaTestEnable = material.GetFloat(kAlphaCutoffEnabled) == 1.0; + SurfaceType surfaceType = (SurfaceType)material.GetFloat(kSurfaceType); + BlendMode blendMode = (BlendMode)material.GetFloat(kBlendMode); + DoubleSidedMode doubleSidedMode = (DoubleSidedMode)material.GetFloat(kDoubleSidedMode); + + if (surfaceType == SurfaceType.Opaque) + { + material.SetOverrideTag("RenderType", alphaTestEnable ? "TransparentCutout" : ""); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + material.SetInt("_ZWrite", 1); + material.renderQueue = alphaTestEnable ? (int)UnityEngine.Rendering.RenderQueue.AlphaTest : -1; + } + else + { + material.SetOverrideTag("RenderType", "Transparent"); + material.SetInt("_ZWrite", 0); + material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent; + + switch (blendMode) + { + case BlendMode.Lerp: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + break; + + case BlendMode.Add: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + break; + + case BlendMode.SoftAdd: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + break; + + case BlendMode.Multiply: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + break; + + case BlendMode.Premultiply: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + break; + } + } + + if (doubleSidedMode == DoubleSidedMode.None) + { + material.SetInt("_CullMode", (int)UnityEngine.Rendering.CullMode.Back); + } + else + { + material.SetInt("_CullMode", (int)UnityEngine.Rendering.CullMode.Off); + } + + if (doubleSidedMode == DoubleSidedMode.DoubleSidedLightingFlip) + { + material.EnableKeyword("_DOUBLESIDED_LIGHTING_FLIP"); + material.DisableKeyword("_DOUBLESIDED_LIGHTING_MIRROR"); + } + else if (doubleSidedMode == DoubleSidedMode.DoubleSidedLightingMirror) + { + material.DisableKeyword("_DOUBLESIDED_LIGHTING_FLIP"); + material.EnableKeyword("_DOUBLESIDED_LIGHTING_MIRROR"); + } + else + { + material.DisableKeyword("_DOUBLESIDED_LIGHTING_FLIP"); + material.DisableKeyword("_DOUBLESIDED_LIGHTING_MIRROR"); + } + + SetKeyword(material, "_ALPHATEST_ON", alphaTestEnable); + SetKeyword(material, "_NORMALMAP_TANGENT_SPACE", (NormalMapSpace)material.GetFloat(kNormalMapSpace) == NormalMapSpace.TangentSpace); + SetKeyword(material, "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A", ((SmoothnessMapChannel)material.GetFloat(kSmoothnessTextureChannelProp)) == SmoothnessMapChannel.AlbedoAlpha); + SetKeyword(material, "_EMISSIVE_COLOR", ((EmissiveColorMode)material.GetFloat(kEmissiveColorMode)) == EmissiveColorMode.UseEmissiveColor); + SetKeyword(material, "_HEIGHTMAP_AS_DISPLACEMENT", (HeightmapMode)material.GetFloat(kHeightMapMode) == HeightmapMode.Displacement); + + SetupKeywordsForInputMaps(material); + + /* + // Setup lightmap emissive flags + MaterialGlobalIlluminationFlags flags = material.globalIlluminationFlags; + if ((flags & (MaterialGlobalIlluminationFlags.BakedEmissive | MaterialGlobalIlluminationFlags.RealtimeEmissive)) != 0) + { + flags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; + if (!shouldEmissionBeEnabled) + flags |= MaterialGlobalIlluminationFlags.EmissiveIsBlack; + + material.globalIlluminationFlags = flags; + } + */ + } + + static bool ShouldEmissionBeEnabled(Material mat, Color color) + { + //var realtimeEmission = (mat.globalIlluminationFlags & MaterialGlobalIlluminationFlags.RealtimeEmissive) > 0; + //return color.maxColorComponent > 0.1f / 255.0f || realtimeEmission; + + return false; + } + + bool HasValidEmissiveKeyword(Material material) + { + /* + // Material animation might be out of sync with the material keyword. + // So if the emission support is disabled on the material, but the property blocks have a value that requires it, then we need to show a warning. + // (note: (Renderer MaterialPropertyBlock applies its values to emissionColorForRendering)) + bool hasEmissionKeyword = material.IsKeywordEnabled ("_EMISSION"); + if (!hasEmissionKeyword && ShouldEmissionBeEnabled (material, emissionColorForRendering.colorValue)) + return false; + else + return true; + */ + + return true; + } + + protected void SetKeyword(Material m, string keyword, bool state) + { + if (state) + m.EnableKeyword(keyword); + else + m.DisableKeyword(keyword); + } + } +} // namespace UnityEditor diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitUI.cs.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitUI.cs.meta new file mode 100644 index 00000000000..b1d4fbd1d0d --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/LitUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e3ab516250dce95488a52a547dca41a2 +timeCreated: 1475878177 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/PreIntegratedFGD.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/PreIntegratedFGD.shader new file mode 100644 index 00000000000..ab580140933 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/PreIntegratedFGD.shader @@ -0,0 +1,58 @@ +Shader "Hidden/Unity/PreIntegratedFGD" +{ + SubShader { + Pass { + ZTest Always Cull Off ZWrite Off + + HLSLPROGRAM + #pragma vertex Vert + #pragma fragment Frag + #pragma target 5.0 + #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev + + #include "Common.hlsl" + #include "ImageBasedLighting.hlsl" + #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl" + + + struct Attributes + { + float3 vertex : POSITION; + float2 texcoord : TEXCOORD0; + }; + + struct Varyings + { + float4 vertex : SV_POSITION; + float2 texcoord : TEXCOORD0; + }; + + Varyings Vert(Attributes input) + { + Varyings output; + output.vertex = TransformWorldToHClip(input.vertex); + output.texcoord = input.texcoord.xy; + 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); + + const int numSamples = 2048; + + // Pre integrate GGX with smithJoint visibility as well as DisneyDiffuse + float4 preFGD = IntegrateGGXAndDisneyFGD(V, N, PerceptualRoughnessToRoughness(perceptualRoughness), numSamples); + + return float4(preFGD.xyz, 1.0); + } + + ENDHLSL + } + } + Fallback Off +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/PreIntegratedFGD.shader.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/PreIntegratedFGD.shader.meta new file mode 100644 index 00000000000..39d75426f74 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Lit/PreIntegratedFGD.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 123f13d52852ef547b2962de4bd9eaad +timeCreated: 1476656697 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Material.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Material.hlsl index 96647973105..22173333e94 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Material.hlsl +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Material.hlsl @@ -1,102 +1,88 @@ #ifndef UNITY_MATERIAL_INCLUDED #define UNITY_MATERIAL_INCLUDED -#include "Assets/ScriptableRenderLoop/ShaderLibrary/Packing.hlsl" -#include "Assets/ScriptableRenderLoop/ShaderLibrary/BSDF.hlsl" -#include "Assets/ScriptableRenderLoop/ShaderLibrary/CommonLighting.hlsl" - -#include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Shaderconfig.cs" -#include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs.hlsl" +#include "Common.hlsl" +#include "Packing.hlsl" +#include "BSDF.hlsl" +#include "CommonLighting.hlsl" +#include "Sampling.hlsl" +#include "AreaLighting.hlsl" +#include "ImageBasedLighting.hlsl" +#include "Debug.hlsl" +#include "GeometricTools.hlsl" + +#include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderConfig.cs" +#include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightDefinition.cs.hlsl" //----------------------------------------------------------------------------- -// Parametrization function helpers +// common Encode/Decode functions //----------------------------------------------------------------------------- -float PerceptualRoughnessToRoughness(float perceptualRoughness) -{ - return perceptualRoughness * perceptualRoughness; -} - -float RoughnessToPerceptualRoughness(float roughness) -{ - return sqrt(roughness); -} - -float PerceptualSmoothnessToRoughness(float perceptualSmoothness) -{ - return (1 - perceptualSmoothness) * (1 - perceptualSmoothness); -} - -float PerceptualSmoothnessToPerceptualRoughness(float perceptualSmoothness) -{ - return (1 - perceptualSmoothness); -} - // Encode/Decode velocity in a buffer (either forward of deferred) // Design note: We assume that VelocityVector fit into a single buffer (i.e not spread on several buffer) void EncodeVelocity(float2 velocity, out float4 outBuffer) { - // RT - 16:16 float - outBuffer = float4(velocity.xy, 0.0, 0.0); + // RT - 16:16 float + outBuffer = float4(velocity.xy, 0.0, 0.0); } float2 DecodeVelocity(float4 inBuffer) { - return float2(inBuffer.xy); + return float2(inBuffer.xy); } // Encode/Decode into GBuffer - This is share so others material can use it. // Design note: We assume that BakeDiffuseLighting and emissive fit into a single buffer (i.e not spread on several buffer) void EncodeBakedDiffuseLigthingIntoGBuffer(float3 bakeDiffuseLighting, out float4 outBuffer) { - // RT - 11:11:10f - outBuffer = float4(bakeDiffuseLighting.xyz, 0.0); + // RT - 11:11:10f + outBuffer = float4(bakeDiffuseLighting.xyz, 0.0); } float3 DecodeBakedDiffuseLigthingFromGBuffer(float4 inBuffer) { - return float3(inBuffer.xyz); + return float3(inBuffer.xyz); } //----------------------------------------------------------------------------- // BuiltinData //----------------------------------------------------------------------------- -#include "BuiltinData.hlsl" +#include "Builtin/BuiltinData.hlsl" //----------------------------------------------------------------------------- // SurfaceData //----------------------------------------------------------------------------- // Here we include all the different lighting model supported by the renderloop based on define done in .shader -#ifdef UNITY_MATERIAL_DISNEYGGX -#include "DisneyGGX.hlsl" +#ifdef UNITY_MATERIAL_LIT +#include "Lit/Lit.hlsl" #elif defined(UNITY_MATERIAL_UNLIT) -#include "Unlit.hlsl" +#include "Unlit/Unlit.hlsl" #endif //----------------------------------------------------------------------------- // Define for GBuffer //----------------------------------------------------------------------------- -#ifdef GBUFFER_MATERIAL_COUNT +#ifdef GBUFFERMATERIAL_COUNT -#if GBUFFER_MATERIAL_COUNT == 3 +#if GBUFFERMATERIAL_COUNT == 3 -#define OUTPUT_GBUFFER(NAME) \ - out float4 MERGE_NAME(NAME, 0) : SV_Target0, \ - out float4 MERGE_NAME(NAME, 1) : SV_Target1, \ - out float4 MERGE_NAME(NAME, 2) : SV_Target2 +#define OUTPUT_GBUFFER(NAME) \ + out float4 MERGE_NAME(NAME, 0) : SV_Target0, \ + out float4 MERGE_NAME(NAME, 1) : SV_Target1, \ + out float4 MERGE_NAME(NAME, 2) : SV_Target2 -#define DECLARE_GBUFFER_TEXTURE(NAME) \ - Texture2D MERGE_NAME(NAME, 0); \ - Texture2D MERGE_NAME(NAME, 1); \ - Texture2D MERGE_NAME(NAME, 2); +#define DECLARE_GBUFFER_TEXTURE(NAME) \ + Texture2D MERGE_NAME(NAME, 0); \ + Texture2D MERGE_NAME(NAME, 1); \ + Texture2D MERGE_NAME(NAME, 2); -#define FETCH_GBUFFER(NAME, TEX, UV) \ - float4 MERGE_NAME(NAME, 0) = MERGE_NAME(TEX, 0).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 1) = MERGE_NAME(TEX, 1).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 2) = MERGE_NAME(TEX, 2).Load(uint3(UV, 0)); +#define FETCH_GBUFFER(NAME, TEX, UV) \ + float4 MERGE_NAME(NAME, 0) = MERGE_NAME(TEX, 0).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 1) = MERGE_NAME(TEX, 1).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 2) = MERGE_NAME(TEX, 2).Load(uint3(UV, 0)); #define ENCODE_INTO_GBUFFER(SURFACE_DATA, NAME) EncodeIntoGBuffer(SURFACE_DATA, MERGE_NAME(NAME,0), MERGE_NAME(NAME,1), MERGE_NAME(NAME,2)) #define DECODE_FROM_GBUFFER(NAME) DecodeFromGBuffer(MERGE_NAME(NAME,0), MERGE_NAME(NAME,1), MERGE_NAME(NAME,2)) @@ -111,25 +97,25 @@ float3 DecodeBakedDiffuseLigthingFromGBuffer(float4 inBuffer) #define GBUFFER_BAKE_LIGHTING_TARGET(TARGET) MERGE_NAME(TARGET, 3) #endif -#elif GBUFFER_MATERIAL_COUNT == 4 +#elif GBUFFERMATERIAL_COUNT == 4 -#define OUTPUT_GBUFFER(NAME) \ - out float4 MERGE_NAME(NAME, 0) : SV_Target0, \ - out float4 MERGE_NAME(NAME, 1) : SV_Target1, \ - out float4 MERGE_NAME(NAME, 2) : SV_Target2, \ - out float4 MERGE_NAME(NAME, 3) : SV_Target3 +#define OUTPUT_GBUFFER(NAME) \ + out float4 MERGE_NAME(NAME, 0) : SV_Target0, \ + out float4 MERGE_NAME(NAME, 1) : SV_Target1, \ + out float4 MERGE_NAME(NAME, 2) : SV_Target2, \ + out float4 MERGE_NAME(NAME, 3) : SV_Target3 -#define DECLARE_GBUFFER_TEXTURE(NAME) \ - Texture2D MERGE_NAME(NAME, 0); \ - Texture2D MERGE_NAME(NAME, 1); \ - Texture2D MERGE_NAME(NAME, 2); \ - Texture2D MERGE_NAME(NAME, 3); +#define DECLARE_GBUFFER_TEXTURE(NAME) \ + Texture2D MERGE_NAME(NAME, 0); \ + Texture2D MERGE_NAME(NAME, 1); \ + Texture2D MERGE_NAME(NAME, 2); \ + Texture2D MERGE_NAME(NAME, 3); -#define FETCH_GBUFFER(NAME, TEX, UV) \ - float4 MERGE_NAME(NAME, 0) = MERGE_NAME(TEX, 0).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 1) = MERGE_NAME(TEX, 1).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 2) = MERGE_NAME(TEX, 2).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 3) = MERGE_NAME(TEX, 3).Load(uint3(UV, 0)); +#define FETCH_GBUFFER(NAME, TEX, UV) \ + float4 MERGE_NAME(NAME, 0) = MERGE_NAME(TEX, 0).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 1) = MERGE_NAME(TEX, 1).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 2) = MERGE_NAME(TEX, 2).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 3) = MERGE_NAME(TEX, 3).Load(uint3(UV, 0)); #define ENCODE_INTO_GBUFFER(SURFACE_DATA, NAME) EncodeIntoGBuffer(SURFACE_DATA, MERGE_NAME(NAME, 0), MERGE_NAME(NAME, 1), MERGE_NAME(NAME, 2), MERGE_NAME(NAME, 3)) #define DECODE_FROM_GBUFFER(NAME) DecodeFromGBuffer(MERGE_NAME(NAME, 0), MERGE_NAME(NAME, 1), MERGE_NAME(NAME, 2), MERGE_NAME(NAME, 3)) @@ -144,28 +130,28 @@ float3 DecodeBakedDiffuseLigthingFromGBuffer(float4 inBuffer) #define GBUFFER_BAKE_LIGHTING_TARGET(TARGET) MERGE_NAME(TARGET, 4) #endif -#elif GBUFFER_MATERIAL_COUNT == 5 - -#define OUTPUT_GBUFFER(NAME) \ - out float4 MERGE_NAME(NAME, 0) : SV_Target0, \ - out float4 MERGE_NAME(NAME, 1) : SV_Target1, \ - out float4 MERGE_NAME(NAME, 2) : SV_Target2, \ - out float4 MERGE_NAME(NAME, 3) : SV_Target3, \ - out float4 MERGE_NAME(NAME, 4) : SV_Target4 - -#define DECLARE_GBUFFER_TEXTURE(NAME) \ - Texture2D MERGE_NAME(NAME, 0); \ - Texture2D MERGE_NAME(NAME, 1); \ - Texture2D MERGE_NAME(NAME, 2); \ - Texture2D MERGE_NAME(NAME, 3); \ - Texture2D MERGE_NAME(NAME, 4); - -#define FETCH_GBUFFER(NAME, TEX, UV) \ - float4 MERGE_NAME(NAME, 0) = MERGE_NAME(TEX, 0).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 1) = MERGE_NAME(TEX, 1).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 2) = MERGE_NAME(TEX, 2).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 3) = MERGE_NAME(TEX, 3).Load(uint3(UV, 0)); \ - float4 MERGE_NAME(NAME, 4) = MERGE_NAME(TEX, 4).Load(uint3(UV, 0)); +#elif GBUFFERMATERIAL_COUNT == 5 + +#define OUTPUT_GBUFFER(NAME) \ + out float4 MERGE_NAME(NAME, 0) : SV_Target0, \ + out float4 MERGE_NAME(NAME, 1) : SV_Target1, \ + out float4 MERGE_NAME(NAME, 2) : SV_Target2, \ + out float4 MERGE_NAME(NAME, 3) : SV_Target3, \ + out float4 MERGE_NAME(NAME, 4) : SV_Target4 + +#define DECLARE_GBUFFER_TEXTURE(NAME) \ + Texture2D MERGE_NAME(NAME, 0); \ + Texture2D MERGE_NAME(NAME, 1); \ + Texture2D MERGE_NAME(NAME, 2); \ + Texture2D MERGE_NAME(NAME, 3); \ + Texture2D MERGE_NAME(NAME, 4); + +#define FETCH_GBUFFER(NAME, TEX, UV) \ + float4 MERGE_NAME(NAME, 0) = MERGE_NAME(TEX, 0).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 1) = MERGE_NAME(TEX, 1).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 2) = MERGE_NAME(TEX, 2).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 3) = MERGE_NAME(TEX, 3).Load(uint3(UV, 0)); \ + float4 MERGE_NAME(NAME, 4) = MERGE_NAME(TEX, 4).Load(uint3(UV, 0)); #define ENCODE_INTO_GBUFFER(SURFACE_DATA, NAME) EncodeIntoGBuffer(SURFACE_DATA, MERGE_NAME(NAME, 0), MERGE_NAME(NAME, 1), MERGE_NAME(NAME, 2), MERGE_NAME(NAME, 3), MERGE_NAME(NAME, 4)) #define DECODE_FROM_GBUFFER(NAME) DecodeFromGBuffer(MERGE_NAME(NAME, 0), MERGE_NAME(NAME, 1), MERGE_NAME(NAME, 2), MERGE_NAME(NAME, 3), MERGE_NAME(NAME, 4)) @@ -180,7 +166,7 @@ float3 DecodeBakedDiffuseLigthingFromGBuffer(float4 inBuffer) #define GBUFFER_BAKE_LIGHTING_TARGET(TARGET) MERGE_NAME(TARGET, 5) #endif -#endif // #if GBUFFER_MATERIAL_COUNT == 3 +#endif // #if GBUFFERMATERIAL_COUNT == 3 // Generic whatever the number of GBuffer #ifdef VELOCITY_IN_GBUFFER @@ -195,7 +181,7 @@ float3 DecodeBakedDiffuseLigthingFromGBuffer(float4 inBuffer) #define FETCH_BAKE_LIGHTING_GBUFFER(NAME, TEX, UV) float4 GBUFFER_BAKE_LIGHTING_NAME(NAME) = GBUFFER_BAKE_LIGHTING_NAME(TEX).Load(uint3(UV, 0)); #define DECODE_BAKE_LIGHTING_FROM_GBUFFER(NAME) DecodeBakedDiffuseLigthingFromGBuffer(GBUFFER_BAKE_LIGHTING_NAME(NAME)) -#endif // #ifdef GBUFFER_MATERIAL_COUNT +#endif // #ifdef GBUFFERMATERIAL_COUNT // Decode velocity need to be accessible in both forward and deferred #ifdef VELOCITY_IN_GBUFFER @@ -204,4 +190,4 @@ float3 DecodeBakedDiffuseLigthingFromGBuffer(float4 inBuffer) #define DECODE_VELOCITY_BUFFER(NAME) DecodeVelocity(GBUFFER_VELOCITY_NAME(NAME)) #endif -#endif // UNITY_MATERIAL_INCLUDED \ No newline at end of file +#endif // UNITY_MATERIAL_INCLUDED diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit.hlsl deleted file mode 100644 index ec403415212..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit.hlsl +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef UNITY_UNLIT_INCLUDED -#define UNITY_UNLIT_INCLUDED - -struct SurfaceData -{ - float3 color; -}; - -struct BSDFData -{ - float3 color; -}; - -//----------------------------------------------------------------------------- -// conversion function for forward -//----------------------------------------------------------------------------- - -BSDFData ConvertSurfaceDataToBSDFData(SurfaceData data) -{ - BSDFData output; - output.color = data.color; - - return output; -} - -//----------------------------------------------------------------------------- -// No light evaluation, this is unlit -//----------------------------------------------------------------------------- - - -#endif // UNITY_UNLIT_INCLUDED \ No newline at end of file diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit.meta new file mode 100644 index 00000000000..e4fa28363c4 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 355ba1f7a06cc7a4abe51689715bb1e7 +folderAsset: yes +timeCreated: 1476653182 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs new file mode 100644 index 00000000000..ad46b1812a8 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using System; + +//----------------------------------------------------------------------------- +// structure definition +//----------------------------------------------------------------------------- +namespace UnityEngine.Experimental.ScriptableRenderLoop +{ + namespace Unlit + { + //----------------------------------------------------------------------------- + // SurfaceData + //----------------------------------------------------------------------------- + + // Main structure that store the user data (i.e user input of master node in material graph) + [GenerateHLSL(PackingRules.Exact, false, true, 1100)] + public struct SurfaceData + { + [SurfaceDataAttributes("Color")] + public Vector3 color; + }; + + //----------------------------------------------------------------------------- + // BSDFData + //----------------------------------------------------------------------------- + + [GenerateHLSL(PackingRules.Exact, false, true, 1130)] + public struct BSDFData + { + public Vector3 color; + }; + } +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.hlsl new file mode 100644 index 00000000000..fc2a322a55c --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.hlsl @@ -0,0 +1,29 @@ +// +// This file was automatically generated from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs. Please don't edit by hand. +// + +// +// UnityEngine.Experimental.ScriptableRenderLoop.Unlit.SurfaceData: static fields +// +#define DEBUGVIEW_UNLIT_SURFACEDATA_COLOR (1100) + +// +// UnityEngine.Experimental.ScriptableRenderLoop.Unlit.BSDFData: static fields +// +#define DEBUGVIEW_UNLIT_BSDFDATA_COLOR (1130) + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.Unlit.SurfaceData +// PackingRules = Exact +struct SurfaceData +{ + float3 color; +}; + +// Generated from UnityEngine.Experimental.ScriptableRenderLoop.Unlit.BSDFData +// PackingRules = Exact +struct BSDFData +{ + float3 color; +}; + + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.hlsl.meta new file mode 100644 index 00000000000..750e97f4c51 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 69c83587055c7b1488151841534b03e1 +timeCreated: 1476887739 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.meta new file mode 100644 index 00000000000..8804bcc3240 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 442f2692415eb6d4ab434b389a186d4a +timeCreated: 1476887639 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.hlsl new file mode 100644 index 00000000000..5e31fe650d8 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.hlsl @@ -0,0 +1,51 @@ +#ifndef UNITY_UNLIT_INCLUDED +#define UNITY_UNLIT_INCLUDED + +//----------------------------------------------------------------------------- +// SurfaceData and BSDFData +//----------------------------------------------------------------------------- + +// SurfaceData is define in Lit.cs which generate Lit.cs.hlsl +#include "Unlit.cs.hlsl" + +//----------------------------------------------------------------------------- +// conversion function for forward +//----------------------------------------------------------------------------- + +BSDFData ConvertSurfaceDataToBSDFData(SurfaceData data) +{ + BSDFData output; + output.color = data.color; + + return output; +} + +//----------------------------------------------------------------------------- +// No light evaluation, this is unlit +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// Debug method (use to display values) +//----------------------------------------------------------------------------- + +void GetSurfaceDataDebug(uint paramId, SurfaceData surfaceData, inout float3 result, inout bool needLinearToSRGB) +{ + switch (paramId) + { + case DEBUGVIEW_UNLIT_SURFACEDATA_COLOR: + result = surfaceData.color; needLinearToSRGB = true; + break; + } +} + +void GetBSDFDataDebug(uint paramId, BSDFData bsdfData, inout float3 result, inout bool needLinearToSRGB) +{ + switch (paramId) + { + case DEBUGVIEW_UNLIT_SURFACEDATA_COLOR: + result = bsdfData.color; needLinearToSRGB = true; + break; + } +} + +#endif // UNITY_UNLIT_INCLUDED diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.hlsl.meta similarity index 100% rename from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit.hlsl.meta rename to Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/Unlit.hlsl.meta diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitData.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitData.hlsl new file mode 100644 index 00000000000..32a548f2275 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitData.hlsl @@ -0,0 +1,45 @@ +// No guard header! + +//------------------------------------------------------------------------------------- +// FragInput +// This structure gather all possible varying/interpolator for this shader. +//------------------------------------------------------------------------------------- + +struct FragInput +{ + float4 positionHS; + float2 texCoord0; +}; + +//------------------------------------------------------------------------------------- +// Fill SurfaceData/Builtin data function +//------------------------------------------------------------------------------------- + +void GetSurfaceAndBuiltinData(FragInput input, out SurfaceData surfaceData, out BuiltinData builtinData) +{ + surfaceData.color = UNITY_SAMPLE_TEX2D(_ColorMap, input.texCoord0).rgb * _Color.rgb; + float alpha = UNITY_SAMPLE_TEX2D(_ColorMap, input.texCoord0).a * _Color.a; + +#ifdef _ALPHATEST_ON + clip(alpha - _AlphaCutoff); +#endif + + // Builtin Data + builtinData.opacity = alpha; + + builtinData.bakeDiffuseLighting = float3(0.0, 0.0, 0.0); + +#ifdef _EMISSIVE_COLOR_MAP + builtinData.emissiveColor = UNITY_SAMPLE_TEX2D(_EmissiveColorMap, input.texCoord0).rgb * _EmissiveColor; +#else + builtinData.emissiveColor = _EmissiveColor; +#endif + + builtinData.emissiveIntensity = _EmissiveIntensity; + + builtinData.velocity = float2(0.0, 0.0); + + builtinData.distortion = float2(0.0, 0.0); + builtinData.distortionBlur = 0.0; +} + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitData.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitData.hlsl.meta new file mode 100644 index 00000000000..7e9599a94f0 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitData.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d0259a31ef8b78e47b18e07b4ed40762 +timeCreated: 1477005871 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitDefault.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitDefault.shader new file mode 100644 index 00000000000..42656ea2f3b --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitDefault.shader @@ -0,0 +1,142 @@ +Shader "Unity/Unlit" +{ + Properties + { + _Color("Color", Color) = (1,1,1,1) + _ColorMap("ColorMap", 2D) = "white" {} + + _EmissiveColor("EmissiveColor", Color) = (0, 0, 0) + _EmissiveColorMap("EmissiveColorMap", 2D) = "white" {} + _EmissiveIntensity("EmissiveIntensity", Float) = 0 + + [ToggleOff] _DistortionOnly("Distortion Only", Float) = 0.0 + [ToggleOff] _DistortionDepthTest("Distortion Only", Float) = 0.0 + + [ToggleOff] _AlphaCutoffEnable("Alpha Cutoff Enable", Float) = 0.0 + _AlphaCutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + // Blending state + [HideInInspector] _SurfaceType("__surfacetype", Float) = 0.0 + [HideInInspector] _BlendMode ("__blendmode", Float) = 0.0 + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 + [HideInInspector] _DstBlend ("__dst", Float) = 0.0 + [HideInInspector] _ZWrite ("__zw", Float) = 1.0 + [HideInInspector] _CullMode("__cullmode", Float) = 2.0 + + [Enum(None, 0, DoubleSided, 1)] _DoubleSidedMode("Double sided mode", Float) = 0 + } + + HLSLINCLUDE + + #pragma target 5.0 + #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev + + //------------------------------------------------------------------------------------- + // Variant + //------------------------------------------------------------------------------------- + + #pragma shader_feature _ALPHATEST_ON + #pragma shader_feature _EMISSIVE_COLOR_MAP + + //------------------------------------------------------------------------------------- + // Define + //------------------------------------------------------------------------------------- + + #define UNITY_MATERIAL_UNLIT // Need to be define before including Material.hlsl + + //------------------------------------------------------------------------------------- + // Include + //------------------------------------------------------------------------------------- + + #include "common.hlsl" + #include "../../ShaderPass/ShaderPass.cs.hlsl" + #include "../../ShaderVariables.hlsl" + #include "../../Debug/DebugViewMaterial.hlsl" + + //------------------------------------------------------------------------------------- + // variable declaration + //------------------------------------------------------------------------------------- + + float4 _Color; + UNITY_DECLARE_TEX2D(_ColorMap); + float3 _EmissiveColor; + UNITY_DECLARE_TEX2D(_EmissiveColorMap); + float _EmissiveIntensity; + + float _AlphaCutoff; + + ENDHLSL + + SubShader + { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 300 + + // ------------------------------------------------------------------ + // Debug pass + Pass + { + Name "Debug" + Tags { "LightMode" = "DebugViewMaterial" } + + Cull[_CullMode] + + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_DEBUG_VIEW_MATERIAL + #include "../../Material/Material.hlsl" + #include "UnlitData.hlsl" + #include "UnlitShare.hlsl" + + void GetVaryingsDataDebug(uint paramId, FragInput input, inout float3 result, inout bool needLinearToSRGB) + { + switch (paramId) + { + case DEBUGVIEW_VARYING_DEPTH: + // TODO: provide a customize parameter (like a slider) + float linearDepth = frac(LinearEyeDepth(input.positionHS.z, _ZBufferParams) * 0.1); + result = linearDepth.xxx; + break; + case DEBUGVIEW_VARYING_TEXCOORD0: + result = float3(input.texCoord0 * 0.5 + 0.5, 0.0); + break; + } + } + + #include "../../ShaderPass/ShaderPassDebugViewMaterial.hlsl" + + ENDHLSL + } + + // ------------------------------------------------------------------ + // forward pass + Pass + { + Name "ForwardUnlit" + Tags { "LightMode" = "ForwardUnlit" } + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + Cull [_CullMode] + + HLSLPROGRAM + + #pragma vertex VertDefault + #pragma fragment Frag + + #define SHADERPASS SHADERPASS_FORWARD_UNLIT + #include "../../Material/Material.hlsl" + #include "UnlitData.hlsl" + #include "UnlitShare.hlsl" + + #include "../../ShaderPass/ShaderPassForwardUnlit.hlsl" + + ENDHLSL + } + } + + CustomEditor "UnlitGUI" +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitDefault.shader.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitDefault.shader.meta new file mode 100644 index 00000000000..0b3eec84983 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitDefault.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c4edd00ff2db5b24391a4fcb1762e459 +timeCreated: 1477005432 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitShare.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitShare.hlsl new file mode 100644 index 00000000000..a7d444a6266 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitShare.hlsl @@ -0,0 +1,63 @@ +// No guard header! + +#ifndef SHADERPASS +#error Undefine_SHADERPASS +#endif + +//------------------------------------------------------------------------------------- +// Attribute/Varying +//------------------------------------------------------------------------------------- + +struct Attributes +{ + float3 positionOS : POSITION; + float2 uv0 : TEXCOORD0; +}; + +struct Varyings +{ + float4 positionHS; + float2 texCoord0; +}; + +struct PackedVaryings +{ + float4 positionHS : SV_Position; + float4 interpolators[1] : TEXCOORD0; +}; + +PackedVaryings PackVaryings(Varyings input) +{ + PackedVaryings output; + output.positionHS = input.positionHS; + output.interpolators[0] = float4(input.texCoord0.xy, 0.0, 0.0); + + return output; +} + +FragInput UnpackVaryings(PackedVaryings input) +{ + FragInput output; + ZERO_INITIALIZE(FragInput, output); + + output.positionHS = input.positionHS; + output.texCoord0.xy = input.interpolators[0].xy; + + return output; +} + +//------------------------------------------------------------------------------------- +// Vertex shader +//------------------------------------------------------------------------------------- + +PackedVaryings VertDefault(Attributes input) +{ + Varyings output; + + float3 positionWS = TransformObjectToWorld(input.positionOS); + output.positionHS = TransformWorldToHClip(positionWS); + + output.texCoord0 = input.uv0; + + return PackVaryings(output); +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitShare.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitShare.hlsl.meta new file mode 100644 index 00000000000..87844f415db --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitShare.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dde56582e54a7624f9768780b89f9c46 +timeCreated: 1477005849 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitUI.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitUI.cs new file mode 100644 index 00000000000..b2cc994e878 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitUI.cs @@ -0,0 +1,323 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace UnityEditor +{ + internal class UnlitGUI : ShaderGUI + { + public enum SurfaceType + { + Opaque, + Transparent + } + public enum BlendMode + { + Lerp, + Add, + SoftAdd, + Multiply, + Premultiply + } + + public enum DoubleSidedMode + { + None, + DoubleSided + } + + private static class Styles + { + public static string OptionText = "Options"; + public static string SurfaceTypeText = "Surface Type"; + public static string BlendModeText = "Blend Mode"; + + public static GUIContent alphaCutoffEnableText = new GUIContent("Alpha Cutoff Enable", "Threshold for alpha cutoff"); + public static GUIContent alphaCutoffText = new GUIContent("Alpha Cutoff", "Threshold for alpha cutoff"); + public static GUIContent doubleSidedModeText = new GUIContent("Double Sided", "This will render the two face of the objects (disable backface culling)"); + + public static readonly string[] surfaceTypeNames = Enum.GetNames(typeof(SurfaceType)); + public static readonly string[] blendModeNames = Enum.GetNames(typeof(BlendMode)); + + public static string InputsOptionsText = "Inputs options"; + + public static string InputsText = "Inputs"; + + public static string InputsMapText = ""; + + public static GUIContent colorText = new GUIContent("Color + Opacity", "Albedo (RGB) and Opacity (A)"); + + public static GUIContent emissiveText = new GUIContent("Emissive Color", "Emissive"); + public static GUIContent emissiveIntensityText = new GUIContent("Emissive Intensity", "Emissive"); + } + + MaterialProperty surfaceType = null; + MaterialProperty blendMode = null; + MaterialProperty alphaCutoff = null; + MaterialProperty alphaCutoffEnable = null; + MaterialProperty doubleSidedMode = null; + + MaterialProperty color = null; + MaterialProperty colorMap = null; + + MaterialProperty emissiveColor = null; + MaterialProperty emissiveColorMap = null; + MaterialProperty emissiveIntensity = null; + + protected MaterialEditor m_MaterialEditor; + + protected const string kSurfaceType = "_SurfaceType"; + protected const string kBlendMode = "_BlendMode"; + protected const string kAlphaCutoff = "_AlphaCutoff"; + protected const string kAlphaCutoffEnabled = "_AlphaCutoffEnable"; + protected const string kDoubleSidedMode = "_DoubleSidedMode"; + + protected const string kEmissiveColorMap = "_EmissiveColorMap"; + + public void FindOptionProperties(MaterialProperty[] props) + { + surfaceType = FindProperty(kSurfaceType, props); + blendMode = FindProperty(kBlendMode, props); + alphaCutoff = FindProperty(kAlphaCutoff, props); + alphaCutoffEnable = FindProperty(kAlphaCutoffEnabled, props); + doubleSidedMode = FindProperty(kDoubleSidedMode, props); + } + + public void FindInputProperties(MaterialProperty[] props) + { + color = FindProperty("_Color", props); + colorMap = FindProperty("_ColorMap", props); + emissiveColor = FindProperty("_EmissiveColor", props); + emissiveColorMap = FindProperty(kEmissiveColorMap, props); + emissiveIntensity = FindProperty("_EmissiveIntensity", props); + } + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) + { + FindOptionProperties(props); // MaterialProperties can be animated so we do not cache them but fetch them every event to ensure animated values are updated correctly + FindInputProperties(props); + + m_MaterialEditor = materialEditor; + Material material = materialEditor.target as Material; + ShaderPropertiesGUI(material); + } + + protected void ShaderOptionsGUI() + { + EditorGUI.indentLevel++; + GUILayout.Label(Styles.OptionText, EditorStyles.boldLabel); + SurfaceTypePopup(); + if ((SurfaceType)surfaceType.floatValue == SurfaceType.Transparent) + { + BlendModePopup(); + } + m_MaterialEditor.ShaderProperty(alphaCutoffEnable, Styles.alphaCutoffEnableText.text); + if (alphaCutoffEnable.floatValue == 1.0) + { + m_MaterialEditor.ShaderProperty(alphaCutoff, Styles.alphaCutoffText.text); + } + m_MaterialEditor.ShaderProperty(doubleSidedMode, Styles.doubleSidedModeText.text); + + EditorGUI.indentLevel--; + } + + protected void ShaderInputOptionsGUI() + { + EditorGUI.indentLevel++; + EditorGUI.indentLevel--; + } + + protected void ShaderInputGUI() + { + EditorGUI.indentLevel++; + + GUILayout.Label(Styles.InputsText, EditorStyles.boldLabel); + + m_MaterialEditor.TexturePropertySingleLine(Styles.colorText, colorMap, color); + + m_MaterialEditor.TexturePropertySingleLine(Styles.emissiveText, emissiveColorMap, emissiveColor); + m_MaterialEditor.ShaderProperty(emissiveIntensity, Styles.emissiveIntensityText); + + EditorGUI.indentLevel--; + } + + public void ShaderPropertiesGUI(Material material) + { + // Use default labelWidth + EditorGUIUtility.labelWidth = 0f; + + // Detect any changes to the material + EditorGUI.BeginChangeCheck(); + { + ShaderOptionsGUI(); + EditorGUILayout.Space(); + + ShaderInputOptionsGUI(); + + EditorGUILayout.Space(); + ShaderInputGUI(); + } + + if (EditorGUI.EndChangeCheck()) + { + foreach (var obj in m_MaterialEditor.targets) + SetupMaterial((Material)obj); + } + } + + // TODO: try to setup minimun value to fall back to standard shaders and reverse + public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) + { + base.AssignNewShaderToMaterial(material, oldShader, newShader); + } + + void SurfaceTypePopup() + { + EditorGUI.showMixedValue = surfaceType.hasMixedValue; + var mode = (SurfaceType)surfaceType.floatValue; + + EditorGUI.BeginChangeCheck(); + mode = (SurfaceType)EditorGUILayout.Popup(Styles.SurfaceTypeText, (int)mode, Styles.surfaceTypeNames); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialEditor.RegisterPropertyChangeUndo("Surface Type"); + surfaceType.floatValue = (float)mode; + } + + EditorGUI.showMixedValue = false; + } + + void BlendModePopup() + { + EditorGUI.showMixedValue = blendMode.hasMixedValue; + var mode = (BlendMode)blendMode.floatValue; + + EditorGUI.BeginChangeCheck(); + mode = (BlendMode)EditorGUILayout.Popup(Styles.BlendModeText, (int)mode, Styles.blendModeNames); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialEditor.RegisterPropertyChangeUndo("Blend Mode"); + blendMode.floatValue = (float)mode; + } + + EditorGUI.showMixedValue = false; + } + + protected virtual void SetupKeywordsForInputMaps(Material material) + { + SetKeyword(material, "_EMISSIVE_COLOR_MAP", material.GetTexture(kEmissiveColorMap)); + } + + protected void SetupMaterial(Material material) + { + // Note: keywords must be based on Material value not on MaterialProperty due to multi-edit & material animation + // (MaterialProperty value might come from renderer material property block) + + bool alphaTestEnable = material.GetFloat(kAlphaCutoffEnabled) == 1.0; + SurfaceType surfaceType = (SurfaceType)material.GetFloat(kSurfaceType); + BlendMode blendMode = (BlendMode)material.GetFloat(kBlendMode); + DoubleSidedMode doubleSidedMode = (DoubleSidedMode)material.GetFloat(kDoubleSidedMode); + + if (surfaceType == SurfaceType.Opaque) + { + material.SetOverrideTag("RenderType", alphaTestEnable ? "TransparentCutout" : ""); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + material.SetInt("_ZWrite", 1); + material.renderQueue = alphaTestEnable ? (int)UnityEngine.Rendering.RenderQueue.AlphaTest : -1; + } + else + { + material.SetOverrideTag("RenderType", "Transparent"); + material.SetInt("_ZWrite", 0); + material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent; + + switch (blendMode) + { + case BlendMode.Lerp: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + break; + + case BlendMode.Add: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + break; + + case BlendMode.SoftAdd: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + break; + + case BlendMode.Multiply: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + break; + + case BlendMode.Premultiply: + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + break; + } + } + + if (doubleSidedMode == DoubleSidedMode.None) + { + material.SetInt("_CullMode", (int)UnityEngine.Rendering.CullMode.Back); + } + else + { + material.SetInt("_CullMode", (int)UnityEngine.Rendering.CullMode.Off); + } + + SetKeyword(material, "_ALPHATEST_ON", alphaTestEnable); + + SetupKeywordsForInputMaps(material); + + /* + // Setup lightmap emissive flags + MaterialGlobalIlluminationFlags flags = material.globalIlluminationFlags; + if ((flags & (MaterialGlobalIlluminationFlags.BakedEmissive | MaterialGlobalIlluminationFlags.RealtimeEmissive)) != 0) + { + flags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; + if (!shouldEmissionBeEnabled) + flags |= MaterialGlobalIlluminationFlags.EmissiveIsBlack; + + material.globalIlluminationFlags = flags; + } + */ + } + + static bool ShouldEmissionBeEnabled(Material mat, Color color) + { + //var realtimeEmission = (mat.globalIlluminationFlags & MaterialGlobalIlluminationFlags.RealtimeEmissive) > 0; + //return color.maxColorComponent > 0.1f / 255.0f || realtimeEmission; + + return false; + } + + bool HasValidEmissiveKeyword(Material material) + { + /* + // Material animation might be out of sync with the material keyword. + // So if the emission support is disabled on the material, but the property blocks have a value that requires it, then we need to show a warning. + // (note: (Renderer MaterialPropertyBlock applies its values to emissionColorForRendering)) + bool hasEmissionKeyword = material.IsKeywordEnabled ("_EMISSION"); + if (!hasEmissionKeyword && ShouldEmissionBeEnabled (material, emissionColorForRendering.colorValue)) + return false; + else + return true; + */ + + return true; + } + + protected void SetKeyword(Material m, string keyword, bool state) + { + if (state) + m.EnableKeyword(keyword); + else + m.DisableKeyword(keyword); + } + } +} // namespace UnityEditor diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitUI.cs.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitUI.cs.meta new file mode 100644 index 00000000000..60988c90be7 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/Unlit/UnlitUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4c48229427cd20841ada5ba240c493da +timeCreated: 1476888642 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/PostProcess/FinalPass.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/PostProcess/FinalPass.shader index a4cbb40f929..27c6573ee82 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/PostProcess/FinalPass.shader +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/PostProcess/FinalPass.shader @@ -1,140 +1,142 @@ -// Final compositing pass, just does gamma correction for now. -Shader "Hidden/Unity/FinalPass" +// Final compositing pass, just does gamma correction for now. +Shader "Hidden/Unity/FinalPass" { - Properties - { - _MainTex ("Texture", any) = "" {} - - _ToneMapCoeffs1("Parameters for neutral tonemap", Vector) = (0.0, 0.0, 0.0, 0.0) - _ToneMapCoeffs2("Parameters for neutral tonemap", Vector) = (0.0, 0.0, 0.0, 0.0) - _Exposure("Exposure", Range(-32.0, 32.0)) = 0 - [ToggleOff] _EnableToneMap("Enable Tone Map", Float) = 0 - } - - SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - - HLSLPROGRAM - #pragma vertex Vert - #pragma fragment Frag - #pragma target 5.0 - - #include "Assets/ScriptableRenderLoop/ShaderLibrary/Common.hlsl" - #include "Assets/ScriptableRenderLoop/ShaderLibrary/Color.hlsl" - #include "../ShaderVariables.hlsl" - - sampler2D _MainTex; - float4 _ToneMapCoeffs1; - float4 _ToneMapCoeffs2; - - #define InBlack _ToneMapCoeffs1.x - #define OutBlack _ToneMapCoeffs1.y - #define InWhite _ToneMapCoeffs1.z - #define OutWhite _ToneMapCoeffs1.w - #define WhiteLevel _ToneMapCoeffs2.z - #define WhiteClip _ToneMapCoeffs2.w - - float _Exposure; - float _EnableToneMap; - - struct Attributes { - float3 vertex : POSITION; - float2 texcoord : TEXCOORD0; - }; - - struct Varyings { - float4 vertex : SV_POSITION; - float2 texcoord : TEXCOORD0; - }; - - Varyings Vert(Attributes input) - { - Varyings output; - output.vertex = TransformWorldToHClip(input.vertex); - output.texcoord = input.texcoord.xy; - return output; - } - - float3 evalCurve(float3 x, float A, float B, float C, float D, float E, float F) - { - return ((x*(A*x + C*B) + D*E) / (x*(A*x + B) + D*F)) - E / F; - } - - float3 applyTonemapFilmicAD(float3 linearColor) - { - float blackRatio = InBlack / OutBlack; - float whiteRatio = InWhite / OutWhite; - - // blend tunable coefficients - float B = lerp(0.57, 0.37, blackRatio); - float C = lerp(0.01, 0.24, whiteRatio); - float D = lerp(0.02, 0.20, blackRatio); - - // constants - float A = 0.2; - float E = 0.02; - float F = 0.30; - - // eval and correct for white point - float3 whiteScale = 1.0f / evalCurve(WhiteLevel, A, B, C, D, E, F); - float3 curr = evalCurve(linearColor * whiteScale, A, B, C, D, E, F); - - return curr * whiteScale; - } - - float3 remapWhite(float3 inPixel, float whitePt) - { - // var breakout for readability - const float inBlack = 0; - const float outBlack = 0; - float inWhite = whitePt; - const float outWhite = 1; - - // remap input range to output range - float3 outPixel = ((inPixel.rgb) - inBlack.xxx) / (inWhite.xxx - inBlack.xxx) * (outWhite.xxx - outBlack.xxx) + outBlack.xxx; - return (outPixel.rgb); - } - - float3 NeutralTonemap(float3 x) - { - float3 finalColor = applyTonemapFilmicAD(x); // curve (dynamic coeffs differ per level) - finalColor = remapWhite(finalColor, WhiteClip); // post-curve white point adjustment - finalColor = saturate(finalColor); - return finalColor; - } - - float3 ApplyToneMap(float3 color) - { - if (_EnableToneMap > 0.0) - { - return NeutralTonemap(color); - } - else - { - return saturate(color); - } - } - - float4 Frag(Varyings input) : SV_Target - { - float4 c = tex2D(_MainTex, input.texcoord); - // Gamma correction - - // TODO: Currenlt in the editor there a an additional pass were the result is copyed in a render target RGBA8_sRGB. - // So we must not correct the sRGB here else it will be done two time. - // To fix! - - c.rgb = ApplyToneMap(c.rgb * exp2(_Exposure)); - - // return LinearToSRGB(c); - return c; - - - } - ENDHLSL - - } - } - Fallback Off + Properties + { + _MainTex ("Texture", any) = "" {} + + _ToneMapCoeffs1("Parameters for neutral tonemap", Vector) = (0.0, 0.0, 0.0, 0.0) + _ToneMapCoeffs2("Parameters for neutral tonemap", Vector) = (0.0, 0.0, 0.0, 0.0) + _Exposure("Exposure", Range(-32.0, 32.0)) = 0 + [ToggleOff] _EnableToneMap("Enable Tone Map", Float) = 0 + } + + SubShader { + Pass { + ZTest Always Cull Off ZWrite Off + + HLSLPROGRAM + #pragma vertex Vert + #pragma fragment Frag + #pragma target 5.0 + + #include "Common.hlsl" + #include "Color.hlsl" + #include "Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl" + + UNITY_DECLARE_TEX2D(_MainTex); + float4 _ToneMapCoeffs1; + float4 _ToneMapCoeffs2; + + #define InBlack _ToneMapCoeffs1.x + #define OutBlack _ToneMapCoeffs1.y + #define InWhite _ToneMapCoeffs1.z + #define OutWhite _ToneMapCoeffs1.w + #define WhiteLevel _ToneMapCoeffs2.z + #define WhiteClip _ToneMapCoeffs2.w + + float _Exposure; + float _EnableToneMap; + + struct Attributes + { + float3 vertex : POSITION; + float2 texcoord : TEXCOORD0; + }; + + struct Varyings + { + float4 vertex : SV_POSITION; + float2 texcoord : TEXCOORD0; + }; + + Varyings Vert(Attributes input) + { + Varyings output; + output.vertex = TransformWorldToHClip(input.vertex); + output.texcoord = input.texcoord.xy; + return output; + } + + float3 evalCurve(float3 x, float A, float B, float C, float D, float E, float F) + { + return ((x*(A*x + C*B) + D*E) / (x*(A*x + B) + D*F)) - E / F; + } + + float3 applyTonemapFilmicAD(float3 linearColor) + { + float blackRatio = InBlack / OutBlack; + float whiteRatio = InWhite / OutWhite; + + // blend tunable coefficients + float B = lerp(0.57, 0.37, blackRatio); + float C = lerp(0.01, 0.24, whiteRatio); + float D = lerp(0.02, 0.20, blackRatio); + + // constants + float A = 0.2; + float E = 0.02; + float F = 0.30; + + // eval and correct for white point + float3 whiteScale = 1.0f / evalCurve(WhiteLevel, A, B, C, D, E, F); + float3 curr = evalCurve(linearColor * whiteScale, A, B, C, D, E, F); + + return curr * whiteScale; + } + + float3 remapWhite(float3 inPixel, float whitePt) + { + // var breakout for readability + const float inBlack = 0; + const float outBlack = 0; + float inWhite = whitePt; + const float outWhite = 1; + + // remap input range to output range + float3 outPixel = ((inPixel.rgb) - inBlack.xxx) / (inWhite.xxx - inBlack.xxx) * (outWhite.xxx - outBlack.xxx) + outBlack.xxx; + return (outPixel.rgb); + } + + float3 NeutralTonemap(float3 x) + { + float3 finalColor = applyTonemapFilmicAD(x); // curve (dynamic coeffs differ per level) + finalColor = remapWhite(finalColor, WhiteClip); // post-curve white point adjustment + finalColor = saturate(finalColor); + return finalColor; + } + + float3 ApplyToneMap(float3 color) + { + if (_EnableToneMap > 0.0) + { + return NeutralTonemap(color); + } + else + { + return saturate(color); + } + } + + float4 Frag(Varyings input) : SV_Target + { + float4 c = UNITY_SAMPLE_TEX2D(_MainTex, input.texcoord); + // Gamma correction + + // TODO: Currenlt in the editor there a an additional pass were the result is copyed in a render target RGBA8_sRGB. + // So we must not correct the sRGB here else it will be done two time. + // To fix! + + c.rgb = ApplyToneMap(c.rgb * exp2(_Exposure)); + + // return LinearToSRGB(c); + return c; + + + } + ENDHLSL + + } + } + Fallback Off } diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderConfig.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderConfig.cs index a8e068fd68c..1977ee55d1a 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderConfig.cs +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderConfig.cs @@ -3,5 +3,5 @@ //----------------------------------------------------------------------------- // #define DIFFUSE_LAMBERT_BRDF -// #define VELOCITY_IN_GBUFFER - +// #define USE_BSDF_PRE_LAMBDAV +// #define VELOCITY_IN_GBUFFER \ No newline at end of file diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass.meta new file mode 100644 index 00000000000..6d1745fcc77 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 86e1905991f44ab49baa68fc4d0570e4 +folderAsset: yes +timeCreated: 1476885561 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs new file mode 100644 index 00000000000..e6a7db1abc2 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs @@ -0,0 +1,22 @@ +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using System; + +//----------------------------------------------------------------------------- +// structure definition +//----------------------------------------------------------------------------- +namespace UnityEngine.Experimental.ScriptableRenderLoop +{ + [GenerateHLSL(PackingRules.Exact)] + public enum ShaderPass + { + GBuffer, + Forward, + ForwardUnlit, + DepthOnly, + Velocity, + Distortion, + LightTransport, + DebugViewMaterial + } +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.hlsl new file mode 100644 index 00000000000..0e8edcf4fa7 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.hlsl @@ -0,0 +1,17 @@ +// +// This file was automatically generated from Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs. Please don't edit by hand. +// + +// +// UnityEngine.Experimental.ScriptableRenderLoop.ShaderPass: static fields +// +#define SHADERPASS_GBUFFER (0) +#define SHADERPASS_FORWARD (1) +#define SHADERPASS_FORWARD_UNLIT (2) +#define SHADERPASS_DEPTH_ONLY (3) +#define SHADERPASS_VELOCITY (4) +#define SHADERPASS_DISTORTION (5) +#define SHADERPASS_LIGHT_TRANSPORT (6) +#define SHADERPASS_DEBUG_VIEW_MATERIAL (7) + + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.hlsl.meta new file mode 100644 index 00000000000..9efc5e841b8 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2c2d7b256f4650943b60cc4ef1c7aeaa +timeCreated: 1476916342 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.meta new file mode 100644 index 00000000000..87065347c82 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPass.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 974f8c2dd0fe55a4d9f840490fcfa252 +timeCreated: 1476916273 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDebugViewMaterial.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDebugViewMaterial.hlsl new file mode 100644 index 00000000000..638f3e19d5b --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDebugViewMaterial.hlsl @@ -0,0 +1,34 @@ +#if SHADERPASS != SHADERPASS_DEBUG_VIEW_MATERIAL +#error SHADERPASS_is_not_correctly_define +#endif + +#include "Color.hlsl" +int _DebugViewMaterial; + +float4 Frag(PackedVaryings packedInput) : SV_Target +{ + FragInput input = UnpackVaryings(packedInput); + + SurfaceData surfaceData; + BuiltinData builtinData; + GetSurfaceAndBuiltinData(input, surfaceData, builtinData); + + BSDFData bsdfData = ConvertSurfaceDataToBSDFData(surfaceData); + + float3 result = float3(1.0, 1.0, 0.0); + bool needLinearToSRGB = false; + + GetVaryingsDataDebug(_DebugViewMaterial, input, result, needLinearToSRGB); + GetBuiltinDataDebug(_DebugViewMaterial, builtinData, result, needLinearToSRGB); + GetSurfaceDataDebug(_DebugViewMaterial, surfaceData, result, needLinearToSRGB); + GetBSDFDataDebug(_DebugViewMaterial, bsdfData, result, needLinearToSRGB); // TODO: This required to initialize all field from BSDFData... + + // TEMP! + // For now, the final blit in the backbuffer performs an sRGB write + // So in the meantime we apply the inverse transform to linear data to compensate. + if (!needLinearToSRGB) + result = SRGBToLinear(max(0, result)); + + return float4(result, 0.0); +} + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDebugViewMaterial.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDebugViewMaterial.hlsl.meta new file mode 100644 index 00000000000..e385f5d3706 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDebugViewMaterial.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e786716259fc05e4299d8dd2350471ef +timeCreated: 1476885564 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDepthOnly.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDepthOnly.hlsl new file mode 100644 index 00000000000..b894e73e569 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDepthOnly.hlsl @@ -0,0 +1,16 @@ +#if SHADERPASS != SHADERPASS_DEPTH_ONLY +#error SHADERPASS_is_not_correctly_define +#endif + +float4 Frag(PackedVaryings packedInput) : SV_Target +{ + FragInput input = UnpackVaryings(packedInput); + + SurfaceData surfaceData; + BuiltinData builtinData; + GetSurfaceAndBuiltinData(input, surfaceData, builtinData); + + // TODO: handle cubemap shadow + return float4(0.0, 0.0, 0.0, 0.0); +} + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDepthOnly.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDepthOnly.hlsl.meta new file mode 100644 index 00000000000..9351ada17b1 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassDepthOnly.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d2b018587e99fd248bcbab551f0151a1 +timeCreated: 1476981737 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForward.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForward.hlsl new file mode 100644 index 00000000000..b8ebcb2e88a --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForward.hlsl @@ -0,0 +1,27 @@ +#if SHADERPASS != SHADERPASS_FORWARD +#error SHADERPASS_is_not_correctly_define +#endif + +float4 Frag(PackedVaryings packedInput) : SV_Target +{ + FragInput input = UnpackVaryings(packedInput); + float3 V = GetWorldSpaceNormalizeViewDir(input.positionWS); + float3 positionWS = input.positionWS; + + SurfaceData surfaceData; + BuiltinData builtinData; + GetSurfaceAndBuiltinData(input, surfaceData, builtinData); + + BSDFData bsdfData = ConvertSurfaceDataToBSDFData(surfaceData); + Coordinate coord = GetCoordinate(input.positionHS.xy, _ScreenSize.zw); + PreLightData preLightData = GetPreLightData(V, positionWS, coord, bsdfData); + + float4 diffuseLighting; + float4 specularLighting; + ForwardLighting(V, positionWS, preLightData, bsdfData, diffuseLighting, specularLighting); + + diffuseLighting.rgb += GetBakedDiffuseLigthing(preLightData, surfaceData, builtinData, bsdfData); + + return float4(diffuseLighting.rgb + specularLighting.rgb, builtinData.opacity); +} + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForward.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForward.hlsl.meta new file mode 100644 index 00000000000..329ed210efa --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForward.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fcba5d34434ca2d4ba0e3a17aa46b4b1 +timeCreated: 1476885564 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForwardUnlit.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForwardUnlit.hlsl new file mode 100644 index 00000000000..0a69c6f9514 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForwardUnlit.hlsl @@ -0,0 +1,20 @@ +#if SHADERPASS != SHADERPASS_FORWARD_UNLIT +#error SHADERPASS_is_not_correctly_define +#endif + +float4 Frag(PackedVaryings packedInput) : SV_Target +{ + FragInput input = UnpackVaryings(packedInput); + + SurfaceData surfaceData; + BuiltinData builtinData; + GetSurfaceAndBuiltinData(input, surfaceData, builtinData); + + // Not lit here (but emissive is allowed) + + BSDFData bsdfData = ConvertSurfaceDataToBSDFData(surfaceData); + + // TODO: we must not access bsdfData here, it break the genericity of the code! + return float4(bsdfData.color, builtinData.opacity); +} + diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForwardUnlit.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForwardUnlit.hlsl.meta new file mode 100644 index 00000000000..a43f3b330c7 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassForwardUnlit.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 00c90b339432489468b14dc26ca81899 +timeCreated: 1476887321 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassGBuffer.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassGBuffer.hlsl new file mode 100644 index 00000000000..0da1ee58f78 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassGBuffer.hlsl @@ -0,0 +1,30 @@ +#if SHADERPASS != SHADERPASS_GBUFFER +#error SHADERPASS_is_not_correctly_define +#endif + +void Frag( PackedVaryings packedInput, + OUTPUT_GBUFFER(outGBuffer) + #ifdef VELOCITY_IN_GBUFFER + , OUTPUT_GBUFFER_VELOCITY(outGBuffer) + #endif + , OUTPUT_GBUFFER_BAKE_LIGHTING(outGBuffer) + ) +{ + FragInput input = UnpackVaryings(packedInput); + float3 V = GetWorldSpaceNormalizeViewDir(input.positionWS); + float3 positionWS = input.positionWS; + + SurfaceData surfaceData; + BuiltinData builtinData; + GetSurfaceAndBuiltinData(input, surfaceData, builtinData); + + BSDFData bsdfData = ConvertSurfaceDataToBSDFData(surfaceData); + Coordinate coord = GetCoordinate(input.positionHS.xy, _ScreenSize.zw); + PreLightData preLightData = GetPreLightData(V, positionWS, coord, bsdfData); + + ENCODE_INTO_GBUFFER(surfaceData, outGBuffer); + #ifdef VELOCITY_IN_GBUFFER + ENCODE_VELOCITY_INTO_GBUFFER(builtinData.velocity, outGBuffer); + #endif + ENCODE_BAKE_LIGHTING_INTO_GBUFFER(GetBakedDiffuseLigthing(preLightData, surfaceData, builtinData, bsdfData), outGBuffer); +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassGBuffer.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassGBuffer.hlsl.meta new file mode 100644 index 00000000000..e312e6e768a --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassGBuffer.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bfcad7b1a4353ed4c8d77619baa740ca +timeCreated: 1476885564 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassLightTransport.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassLightTransport.hlsl new file mode 100644 index 00000000000..daf98831bd4 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassLightTransport.hlsl @@ -0,0 +1,43 @@ +#if SHADERPASS != SHADERPASS_LIGHT_TRANSPORT +#error SHADERPASS_is_not_correctly_define +#endif + +#include "Color.hlsl" + +// TODO: This is the max value allowed for emissive (bad name - but keep for now to retrieve it) (It is 8^2.2 (gamma) and 8 is the limit of punctual light slider...), comme from UnityCg.cginc. Fix it! +// Ask Jesper if this can be change for HDRenderLoop +#define EMISSIVE_RGBM_SCALE 97.0 + +float4 Frag(PackedVaryings packedInput) : SV_Target +{ + FragInput input = UnpackVaryings(packedInput); + + SurfaceData surfaceData; + BuiltinData builtinData; + GetSurfaceAndBuiltinData(input, surfaceData, builtinData); + + BSDFData bsdfData = ConvertSurfaceDataToBSDFData(surfaceData); + LighTransportData lightTransportData = GetLightTransportData(surfaceData, builtinData, bsdfData); + + // This shader is call two time. Once for getting emissiveColor, the other time to get diffuseColor + // We use unity_MetaFragmentControl to make the distinction. + + float4 res = float4(0.0, 0.0, 0.0, 1.0); + + // TODO: No if / else in original code from Unity, why ? keep like original code but should be either diffuse or emissive + if (unity_MetaFragmentControl.x) + { + // Apply diffuseColor Boost from LightmapSettings. + // put abs here to silent a warning, no cost, no impact as color is assume to be positive. + res.rgb = clamp(pow(abs(lightTransportData.diffuseColor), saturate(unity_OneOverOutputBoost)), 0, unity_MaxOutputValue); + } + + if (unity_MetaFragmentControl.y) + { + // TODO: THIS LIMIT MUST BE REMOVE, IT IS NOT HDR, change when RGB9e5 is here. + // Do we assume here that emission is [0..1] ? + res = PackRGBM(lightTransportData.emissiveColor, EMISSIVE_RGBM_SCALE); + } + + return res; +} diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassLightTransport.hlsl.meta b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassLightTransport.hlsl.meta new file mode 100644 index 00000000000..0416a2d8384 --- /dev/null +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderPass/ShaderPassLightTransport.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5fd11cedfe7e32f428a5b3ee47a077f7 +timeCreated: 1476909403 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl index 195b2282aa1..c3777c75cdb 100644 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl +++ b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/ShaderVariables.hlsl @@ -17,9 +17,9 @@ float4x4 glstate_matrix_inv_projection; #define UNITY_MATRIX_VP unity_MatrixVP #ifdef UNITY_SINGLE_PASS_STEREO - #define UNITY_MATRIX_MVP mul(unity_MatrixVP, unity_ObjectToWorld) + #define UNITY_MATRIX_MVP mul(unity_MatrixVP, unity_ObjectToWorld) #else - #define UNITY_MATRIX_MVP glstate_matrix_mvp + #define UNITY_MATRIX_MVP glstate_matrix_mvp #endif // These use the camera center position in VR @@ -32,55 +32,55 @@ float4x4 glstate_matrix_inv_projection; CBUFFER_START(UnityPerCamera) - // Time (t = time since current level load) values from Unity - float4 _Time; // (t/20, t, t*2, t*3) - float4 _SinTime; // sin(t/8), sin(t/4), sin(t/2), sin(t) - float4 _CosTime; // cos(t/8), cos(t/4), cos(t/2), cos(t) - float4 unity_DeltaTime; // dt, 1/dt, smoothdt, 1/smoothdt - + // Time (t = time since current level load) values from Unity + float4 _Time; // (t/20, t, t*2, t*3) + float4 _SinTime; // sin(t/8), sin(t/4), sin(t/2), sin(t) + float4 _CosTime; // cos(t/8), cos(t/4), cos(t/2), cos(t) + float4 unity_DeltaTime; // dt, 1/dt, smoothdt, 1/smoothdt + #ifndef UNITY_SINGLE_PASS_STEREO - float3 _WorldSpaceCameraPos; + float3 _WorldSpaceCameraPos; #endif - - // x = 1 or -1 (-1 if projection is flipped) - // y = near plane - // z = far plane - // w = 1/far plane - float4 _ProjectionParams; - - // x = width - // y = height - // z = 1 + 1.0/width - // w = 1 + 1.0/height - float4 _ScreenParams; - - // Values used to linearize the Z buffer (http://www.humus.name/temp/Linearize%20depth.txt) - // x = 1-far/near - // y = far/near - // z = x/far - // w = y/far - float4 _ZBufferParams; - - // x = orthographic camera's width - // y = orthographic camera's height - // z = unused - // w = 1.0 if camera is ortho, 0.0 if perspective - float4 unity_OrthoParams; + + // x = 1 or -1 (-1 if projection is flipped) + // y = near plane + // z = far plane + // w = 1/far plane + float4 _ProjectionParams; + + // x = width + // y = height + // z = 1 + 1.0/width + // w = 1 + 1.0/height + float4 _ScreenParams; + + // Values used to linearize the Z buffer (http://www.humus.name/temp/Linearize%20depth.txt) + // x = 1-far/near + // y = far/near + // z = x/far + // w = y/far + float4 _ZBufferParams; + + // x = orthographic camera's width + // y = orthographic camera's height + // z = unused + // w = 1.0 if camera is ortho, 0.0 if perspective + float4 unity_OrthoParams; CBUFFER_END CBUFFER_START(UnityPerCameraRare) - float4 unity_CameraWorldClipPlanes[6]; + float4 unity_CameraWorldClipPlanes[6]; - // Projection matrices of the camera. Note that this might be different from projection matrix - // that is set right now, e.g. while rendering shadows the matrices below are still the projection - // of original camera. - float4x4 unity_CameraProjection; - float4x4 unity_CameraInvProjection; + // Projection matrices of the camera. Note that this might be different from projection matrix + // that is set right now, e.g. while rendering shadows the matrices below are still the projection + // of original camera. + float4x4 unity_CameraProjection; + float4x4 unity_CameraInvProjection; #ifndef UNITY_SINGLE_PASS_STEREO - float4x4 unity_WorldToCamera; - float4x4 unity_CameraToWorld; + float4x4 unity_WorldToCamera; + float4x4 unity_CameraToWorld; #endif CBUFFER_END @@ -88,36 +88,36 @@ CBUFFER_END CBUFFER_START(UnityPerDraw) #ifndef UNITY_SINGLE_PASS_STEREO - float4x4 glstate_matrix_mvp; + float4x4 glstate_matrix_mvp; #endif - - // Use center position for stereo rendering - float4x4 glstate_matrix_modelview0; - float4x4 glstate_matrix_invtrans_modelview0; - - float4x4 unity_ObjectToWorld; - float4x4 unity_WorldToObject; - float4 unity_LODFade; // x is the fade value ranging within [0,1]. y is x quantized into 16 levels - float4 unity_WorldTransformParams; // w is usually 1.0, or -1.0 for odd-negative scale transforms + + // Use center position for stereo rendering + float4x4 glstate_matrix_modelview0; + float4x4 glstate_matrix_invtrans_modelview0; + + float4x4 unity_ObjectToWorld; + float4x4 unity_WorldToObject; + float4 unity_LODFade; // x is the fade value ranging within [0,1]. y is x quantized into 16 levels + float4 unity_WorldTransformParams; // w is usually 1.0, or -1.0 for odd-negative scale transforms CBUFFER_END #ifdef UNITY_SINGLE_PASS_STEREO CBUFFER_START(UnityPerEye) - float3 _WorldSpaceCameraPos; - float4x4 glstate_matrix_projection; - - float4x4 unity_MatrixV; - float4x4 unity_MatrixVP; - - float4x4 unity_WorldToCamera; - float4x4 unity_CameraToWorld; + float3 _WorldSpaceCameraPos; + float4x4 glstate_matrix_projection; + + float4x4 unity_MatrixV; + float4x4 unity_MatrixVP; + + float4x4 unity_WorldToCamera; + float4x4 unity_CameraToWorld; CBUFFER_END #endif CBUFFER_START(UnityPerDrawRare) - float4x4 glstate_matrix_transpose_modelview0; + float4x4 glstate_matrix_transpose_modelview0; #ifdef UNITY_SINGLE_PASS_STEREO - float4x4 glstate_matrix_mvp; + float4x4 glstate_matrix_mvp; #endif CBUFFER_END @@ -127,102 +127,123 @@ CBUFFER_END CBUFFER_START(UnityPerFrame) #ifndef UNITY_SINGLE_PASS_STEREO - float4x4 glstate_matrix_projection; - float4x4 unity_MatrixV; - float4x4 unity_MatrixVP; + float4x4 glstate_matrix_projection; + float4x4 unity_MatrixV; + float4x4 unity_MatrixVP; #endif - - float4 glstate_lightmodel_ambient; - float4 unity_AmbientSky; - float4 unity_AmbientEquator; - float4 unity_AmbientGround; - float4 unity_IndirectSpecColor; + float4 glstate_lightmodel_ambient; + float4 unity_AmbientSky; + float4 unity_AmbientEquator; + float4 unity_AmbientGround; + float4 unity_IndirectSpecColor; + +CBUFFER_END + +CBUFFER_START(UnityLightmaps) +float4 unity_LightmapST; +float4 unity_DynamicLightmapST; CBUFFER_END // ---------------------------------------------------------------------------- +// TODO: move this to constant buffer by Pass +float4 _ScreenSize; + float4x4 GetObjectToWorldMatrix() { - return unity_ObjectToWorld; + return unity_ObjectToWorld; } float4x4 GetWorldToObjectMatrix() { - return unity_WorldToObject; + return unity_WorldToObject; } // Transform to homogenous clip space float4x4 GetWorldToHClipMatrix() { - return unity_MatrixVP; + return unity_MatrixVP; } // Transform from clip space to homogenous world space float4x4 GetClipToHWorldMatrix() { - return glstate_matrix_inv_projection; + return glstate_matrix_inv_projection; } float GetOdddNegativeScale() { - return unity_WorldTransformParams.w; + return unity_WorldTransformParams.w; } float4x4 GetObjectToWorldViewMatrix() { - return glstate_matrix_modelview0; + return glstate_matrix_modelview0; } float3 TransformObjectToWorld(float3 positionOS) { - return mul(GetObjectToWorldMatrix(), float4(positionOS, 1.0)).xyz; + return mul(GetObjectToWorldMatrix(), float4(positionOS, 1.0)).xyz; } float3 TransformObjectToView(float3 positionOS) { - return mul(GetObjectToWorldViewMatrix(), float4(positionOS, 1.0)).xyz; + return mul(GetObjectToWorldViewMatrix(), float4(positionOS, 1.0)).xyz; } float3 TransformObjectToWorldDir(float3 dirOS) { - // Normalize to support uniform scaling - return normalize(mul((float3x3)GetObjectToWorldMatrix(), dirOS)); + // Normalize to support uniform scaling + return normalize(mul((float3x3)GetObjectToWorldMatrix(), dirOS)); } // Transforms normal from object to world space float3 TransformObjectToWorldNormal(float3 normalOS) { #ifdef UNITY_ASSUME_UNIFORM_SCALING - return UnityObjectToWorldDir(normalOS); + return UnityObjectToWorldDir(normalOS); #else - // Normal need to be multiply by inverse transpose - // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} - return normalize(mul(normalOS, (float3x3)GetWorldToObjectMatrix())); + // Normal need to be multiply by inverse transpose + // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} + return normalize(mul(normalOS, (float3x3)GetWorldToObjectMatrix())); #endif } // Tranforms position from world space to homogenous space float4 TransformWorldToHClip(float3 positionWS) { - return mul(GetWorldToHClipMatrix(), float4(positionWS, 1.0)); + return mul(GetWorldToHClipMatrix(), float4(positionWS, 1.0)); } float3x3 CreateTangentToWorld(float3 normal, float3 tangent, float tangentSign) { - // For odd-negative scale transforms we need to flip the sign - float sign = tangentSign * GetOdddNegativeScale(); - float3 binormal = cross(normal, tangent) * sign; - - return float3x3(tangent, binormal, normal); + // For odd-negative scale transforms we need to flip the sign + float sign = tangentSign * GetOdddNegativeScale(); + float3 bitangent = cross(normal, tangent) * sign; + + return float3x3(tangent, bitangent, normal); } // Computes world space view direction, from object space position float3 GetWorldSpaceNormalizeViewDir(float3 positionWS) { - return normalize(_WorldSpaceCameraPos.xyz - positionWS); + return normalize(_WorldSpaceCameraPos.xyz - positionWS); +} + +float3 TransformTangentToWorld(float3 dirTS, float3 tangentToWorld[3]) +{ + // TODO check: do we need to normalize ? + return normalize(mul(dirTS, float3x3(tangentToWorld[0].xyz, tangentToWorld[1].xyz, tangentToWorld[2].xyz))); +} + +// Assume TBN is orthonormal. +float3 TransformWorldToTangent(float3 dirWS, float3 tangentToWorld[3]) +{ + // TODO check: do we need to normalize ? + return normalize(mul(float3x3(tangentToWorld[0].xyz, tangentToWorld[1].xyz, tangentToWorld[2].xyz), dirWS)); } -#endif // UNITY_SHADER_VARIABLES_INCLUDED \ No newline at end of file +#endif // UNITY_SHADER_VARIABLES_INCLUDED diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/TemplateDisneyGGX.hlsl b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/TemplateDisneyGGX.hlsl deleted file mode 100644 index 4dfd2abb07c..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/TemplateDisneyGGX.hlsl +++ /dev/null @@ -1,290 +0,0 @@ -// GENERATED BY SHADER GRAPH -// Question for shader graph: how to handle dynamic parameter data like matData0 that can change name - -// No guard header! - -#define UNITY_MATERIAL_DISNEYGGX // Need to be define before including Material.hlsl -#include "Lighting/Lighting.hlsl" // This include Material.hlsl -#include "ShaderVariables.hlsl" - -// This files is generated by the ShaderGraph or written by hand - -// Note for ShaderGraph: -// ShaderGraph should generate the vertex shader output to add the variable that may be required -// For example if we require view vector in shader graph, the output must contain positionWS and we calcualte the view vector with it. -// Still some input are mandatory depends on the type of loop. positionWS is mandatory in this current framework. So the ShaderGraph should always generate it. - -//------------------------------------------------------------------------------------- -// variable declaration -//------------------------------------------------------------------------------------- - -// Set of users variables -float4 _BaseColor; -sampler2D _BaseColorMap; - -float _Mettalic; -float _Smoothness; -sampler2D _MaskMap; -sampler2D _SpecularOcclusionMap; - -sampler2D _NormalMap; -sampler2D _Heightmap; -float _HeightScale; -float _HeightBias; - -sampler2D _DiffuseLightingMap; -float4 _EmissiveColor; -sampler2D _EmissiveColorMap; -float _EmissiveIntensity; - -float _SubSurfaceRadius; -sampler2D _SubSurfaceRadiusMap; -// float _Thickness; -// sampler2D _ThicknessMap; - -// float _CoatCoverage; -// sampler2D _CoatCoverageMap; - -// float _CoatRoughness; -// sampler2D _CoatRoughnessMap; - -float _AlphaCutoff; - -//------------------------------------------------------------------------------------- -// Lighting architecture -//------------------------------------------------------------------------------------- - -// TODO: Check if we will have different Varyings based on different pass, not sure about that... - -// Forward -struct Attributes -{ - float3 positionOS : POSITION; - float3 normalOS : NORMAL; - float2 uv0 : TEXCOORD0; - float4 tangentOS : TANGENT; -}; - -struct Varyings -{ - float4 positionHS; - float3 positionWS; - float2 texCoord0; - float4 tangentToWorld[3]; // [3x3:tangentToWorld | 1x3:viewDirForParallax] - -#ifdef SHADER_STAGE_FRAGMENT - #if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) - FRONT_FACE_TYPE cullFace; - #endif -#endif -}; - -struct PackedVaryings -{ - float4 positionHS : SV_Position; - float4 interpolators[5] : TEXCOORD0; - -#ifdef SHADER_STAGE_FRAGMENT - #if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) - FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMATIC; - #endif -#endif -}; - -// Function to pack data to use as few interpolator as possible, the ShaderGraph should generate these functions -PackedVaryings PackVaryings(Varyings input) -{ - PackedVaryings output; - output.positionHS = input.positionHS; - output.interpolators[0].xyz = input.positionWS.xyz; - output.interpolators[0].w = input.texCoord0.x; - output.interpolators[1] = input.tangentToWorld[0]; - output.interpolators[2] = input.tangentToWorld[1]; - output.interpolators[3] = input.tangentToWorld[2]; - output.interpolators[4].x = input.texCoord0.y; - output.interpolators[4].yzw = float3(0.0, 0.0, 0.0); - - return output; -} - -Varyings UnpackVaryings(PackedVaryings input) -{ - Varyings output; - output.positionHS = input.positionHS; - output.positionWS.xyz = input.interpolators[0].xyz; - output.texCoord0.x = input.interpolators[0].w; - output.texCoord0.y = input.interpolators[4].x; - output.tangentToWorld[0] = input.interpolators[1]; - output.tangentToWorld[1] = input.interpolators[2]; - output.tangentToWorld[2] = input.interpolators[3]; - -#ifdef SHADER_STAGE_FRAGMENT - #if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) - output.cullFace = input.cullFace; - #endif -#endif - - return output; -} - -// TODO: Here we will also have all the vertex deformation (GPU skinning, vertex animation, morph target...) or we will need to generate a compute shaders instead (better! but require work to deal with unpacking like fp16) -PackedVaryings VertDefault(Attributes input) -{ - Varyings output; - - output.positionWS = TransformObjectToWorld(input.positionOS); - // TODO deal with camera center rendering and instancing (This is the reason why we always perform tow steps transform to clip space + instancing matrix) - output.positionHS = TransformWorldToHClip(output.positionWS); - - float3 normalWS = TransformObjectToWorldNormal(input.normalOS); - - output.texCoord0 = input.uv0; - - float4 tangentWS = float4(TransformObjectToWorldDir(input.tangentOS.xyz), input.tangentOS.w); - - float3x3 tangentToWorld = CreateTangentToWorld(normalWS, tangentWS.xyz, tangentWS.w); - output.tangentToWorld[0].xyz = tangentToWorld[0]; - output.tangentToWorld[1].xyz = tangentToWorld[1]; - output.tangentToWorld[2].xyz = tangentToWorld[2]; - - output.tangentToWorld[0].w = 0; - output.tangentToWorld[1].w = 0; - output.tangentToWorld[2].w = 0; - - return PackVaryings(output); -} - - -//------------------------------------------------------------------------------------- -// Fill SurfaceData/Lighting data function -//------------------------------------------------------------------------------------- - -float3 TransformTangentToWorld(float3 normalTS, float4 tangentToWorld[3]) -{ - // TODO check: do we need to normalize ? - return normalize(mul(normalTS, float3x3(tangentToWorld[0].xyz, tangentToWorld[1].xyz, tangentToWorld[2].xyz))); -} - -#if SHADER_STAGE_FRAGMENT - -void GetSurfaceAndBuiltinData(Varyings input, out SurfaceData surfaceData, out BuiltinData builtinData) -{ - float3 baseColor = tex2D(_BaseColorMap, input.texCoord0).rgb * _BaseColor.rgb; -#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A - float alpha = _BaseColor.a; -#else - float alpha = tex2D(_BaseColorMap, input.texCoord0).a * _BaseColor.a; -#endif - -#ifdef _ALPHATEST_ON - clip(alpha - _AlphaCutoff); -#endif - - builtinData.opacity = alpha; - - // MaskMap is Mettalic, Ambient Occlusion, (Optional) - emissive Mask, Optional - Smoothness (in alpha) -#ifdef _MASKMAP - float mettalic = tex2D(_MaskMap, input.texCoord0).r; - surfaceData.ambientOcclusion = tex2D(_MaskMap, input.texCoord0).g; -#else - float mettalic = 1.0; - surfaceData.ambientOcclusion = 1.0; -#endif - mettalic *= _Mettalic; - - surfaceData.diffuseColor = baseColor * (1.0 - mettalic); - float f0_dieletric = 0.04; - surfaceData.specularColor = lerp(float3(f0_dieletric, f0_dieletric, f0_dieletric), baseColor, mettalic); - -#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A - surfaceData.perceptualSmoothness = tex2D(_BaseColorMap, input.texCoord0).a; -#elif defined(_MASKMAP) - surfaceData.perceptualSmoothness = tex2D(_MaskMap, input.texCoord0).a; -#else - surfaceData.perceptualSmoothness = 1.0; -#endif - surfaceData.perceptualSmoothness *= _Smoothness; - -#ifdef _SPECULAROCCLUSIONMAP - // TODO: Do something. For now just take alpha channel - surfaceData.specularOcclusion = tex2D(_SpecularOcclusionMap, input.texCoord0).a; -#else - // Horizon Occlusion for Normal Mapped Reflections: http://marmosetco.tumblr.com/post/81245981087 - //surfaceData.specularOcclusion = saturate(1.0 + horizonFade * dot(r, input.tangentToWorld[2].xyz); - // smooth it - //surfaceData.specularOcclusion *= surfaceData.specularOcclusion; - surfaceData.specularOcclusion = 1.0; -#endif - - // TODO: think about using BC5 - float3 vertexNormalWS = input.tangentToWorld[2].xyz; - -#ifdef _NORMALMAP - #ifdef _NORMALMAP_TANGENT_SPACE - float3 normalTS = UnpackNormalDXT5nm(tex2D(_NormalMap, input.texCoord0)); - surfaceData.normalWS = TransformTangentToWorld(normalTS, input.tangentToWorld); - #else // Object space (TODO: We need to apply the world rotation here!) - surfaceData.normalWS = tex2D(_NormalMap, input.texCoord0).rgb; - #endif -#else - surfaceData.normalWS = vertexNormalWS; -#endif - -#if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) - #ifdef _DOUBLESIDED_LIGHTING_FLIP - float3 oppositeNormalWS = -surfaceData.normalWS; - #else - // Mirror the normal with the plane define by vertex normal - float3 oppositeNormalWS = reflect(surfaceData.normalWS, vertexNormalWS); -#endif - // TODO : Test if GetOdddNegativeScale() is necessary here in case of normal map, as GetOdddNegativeScale is take into account in CreateTangentToWorld(); - surfaceData.normalWS = IS_FRONT_VFACE(input.cullFace, GetOdddNegativeScale() >= 0.0 ? surfaceData.normalWS : oppositeNormalWS, -GetOdddNegativeScale() >= 0.0 ? surfaceData.normalWS : oppositeNormalWS); -#endif - - surfaceData.materialId = 0; - - surfaceData.subSurfaceRadius = 1.0; // tex2D(_SubSurfaceRadiusMap, input.texCoord0).r * _SubSurfaceRadius; - - // TODO - /* - float _SubSurfaceRadius; - sampler2D _SubSurfaceRadiusMap; - float _Thickness; - sampler2D _ThicknessMap; - - float _CoatCoverage; - sampler2D _CoatCoverageMap; - - float _CoatRoughness; - sampler2D _CoatRoughnessMap; - */ - - // Builtin Data - - // TODO: Sample lightmap/lightprobe/volume proxy - // This should also handle projective lightmap - // Note that data input above can be use to sample into lightmap (like normal) - builtinData.bakeDiffuseLighting = tex2D(_DiffuseLightingMap, input.texCoord0).rgb; - - // If we chose an emissive color, we have a dedicated texture for it and don't use MaskMap -#ifdef _EMISSIVE_COLOR - #ifdef _EMISSIVE_COLOR_MAP - builtinData.emissiveColor = tex2D(_EmissiveColorMap, input.texCoord0).rgb * _EmissiveColor; - #else - builtinData.emissiveColor = _EmissiveColor; - #endif -#elif defined(_MASKMAP) // If we have a MaskMap, use emissive slot as a mask on baseColor - builtinData.emissiveColor = baseColor * tex2D(_MaskMap, input.texCoord0).bbb; -#else - builtinData.emissiveColor = float3(0.0, 0.0, 0.0); -#endif - - builtinData.emissiveIntensity = _EmissiveIntensity; - - builtinData.velocity = float2(0.0, 0.0); - - builtinData.distortion = float2(0.0, 0.0); - builtinData.distortionBlur = 0.0; -} - -#endif // #if SHADER_STAGE_FRAGMENT \ No newline at end of file diff --git a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Unlit.shader b/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Unlit.shader deleted file mode 100644 index e62ef260feb..00000000000 --- a/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Unlit.shader +++ /dev/null @@ -1,172 +0,0 @@ -Shader "Unity/Unlit" -{ - Properties - { - _Color("Color", Color) = (1,1,1,1) - _ColorMap("ColorMap", 2D) = "white" {} - - _EmissiveColor("EmissiveColor", Color) = (0, 0, 0) - _EmissiveColorMap("EmissiveColorMap", 2D) = "white" {} - _EmissiveIntensity("EmissiveIntensity", Float) = 0 - - [ToggleOff] _DistortionOnly("Distortion Only", Float) = 0.0 - [ToggleOff] _DistortionDepthTest("Distortion Only", Float) = 0.0 - - [ToggleOff] _AlphaCutoffEnable("Alpha Cutoff Enable", Float) = 0.0 - _AlphaCutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 - - // Blending state - [HideInInspector] _SurfaceType("__surfacetype", Float) = 0.0 - [HideInInspector] _BlendMode ("__blendmode", Float) = 0.0 - [HideInInspector] _SrcBlend ("__src", Float) = 1.0 - [HideInInspector] _DstBlend ("__dst", Float) = 0.0 - [HideInInspector] _ZWrite ("__zw", Float) = 1.0 - [HideInInspector] _CullMode("__cullmode", Float) = 2.0 - - [Enum(None, 0, DoubleSided)] _DoubleSidedMode("Double sided mode", Float) = 0 - } - - HLSLINCLUDE - - #pragma target 5.0 - #pragma only_renderers d3d11 // TEMP: unitl we go futher in dev - - #pragma shader_feature _ALPHATEST_ON - #pragma shader_feature _EMISSIVE_COLOR_MAP - - #include "Assets/ScriptableRenderLoop/ShaderLibrary/Common.hlsl" - #define UNITY_MATERIAL_UNLIT - #include "Material/Material.hlsl" - #include "ShaderVariables.hlsl" - - float4 _Color; - sampler2D _ColorMap; - float4 _EmissiveColor; - sampler2D _EmissiveColorMap; - float _EmissiveIntensity; - - ENDHLSL - - SubShader - { - Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } - LOD 300 - - // ------------------------------------------------------------------ - // forward pass - Pass - { - Name "Forward" // Name is not used - Tags { "LightMode" = "ForwardUnlit" } // This will be only for transparent object based on the RenderQueue index - - Blend [_SrcBlend] [_DstBlend] - ZWrite [_ZWrite] - Cull [_CullMode] - - HLSLPROGRAM - - #pragma vertex VertDefault - #pragma fragment FragForward - - // Forward - struct Attributes - { - float3 positionOS : POSITION; - float2 uv0 : TEXCOORD0; - }; - - struct Varyings - { - float4 positionHS; - float2 texCoord0; - }; - - struct PackedVaryings - { - float4 positionHS : SV_Position; - float4 interpolators[1] : TEXCOORD0; - }; - - // Function to pack data to use as few interpolator as possible, the ShaderGraph should generate these functions - PackedVaryings PackVaryings(Varyings input) - { - PackedVaryings output; - output.positionHS = input.positionHS; - output.interpolators[0].xy = input.texCoord0.xy; - output.interpolators[0].zw = float2(0.0, 0.0); - - return output; - } - - Varyings UnpackVaryings(PackedVaryings input) - { - Varyings output; - output.positionHS = input.positionHS; - output.texCoord0.xy = input.interpolators[0].xy; - - return output; - } - - PackedVaryings VertDefault(Attributes input) - { - Varyings output; - - float3 positionWS = TransformObjectToWorld(input.positionOS); - // TODO deal with camera center rendering and instancing (This is the reason why we always perform tow steps transform to clip space + instancing matrix) - output.positionHS = TransformWorldToHClip(positionWS); - - output.texCoord0 = input.uv0; - - return PackVaryings(output); - } - - - void GetSurfaceAndBuiltinData(Varyings input, out SurfaceData surfaceData, out BuiltinData builtinData) - { - surfaceData.color = tex2D(_ColorMap, input.texCoord0).rgb * _Color.rgb; - float alpha = tex2D(_ColorMap, input.texCoord0).a * _Color.rgb; - - #ifdef _ALPHATEST_ON - clip(alpha - _AlphaCutoff); - #endif - - builtinData.opacity = alpha; - - // Builtin Data - builtinData.bakeDiffuseLighting = float3(0.0, 0.0, 0.0); - - #ifdef _EMISSIVE_COLOR_MAP - builtinData.emissiveColor = tex2D(_EmissiveColorMap, input.texCoord0).rgb * _EmissiveColor; - #else - builtinData.emissiveColor = _EmissiveColor; - #endif - - builtinData.emissiveIntensity = _EmissiveIntensity; - - builtinData.velocity = float2(0.0, 0.0); - - builtinData.distortion = float2(0.0, 0.0); - builtinData.distortionBlur = 0.0; - } - - #if SHADER_STAGE_FRAGMENT - - float4 FragForward(PackedVaryings packedInput) : SV_Target - { - Varyings input = UnpackVaryings(packedInput); - - SurfaceData surfaceData; - BuiltinData builtinData; - GetSurfaceAndBuiltinData(input, surfaceData, builtinData); - - BSDFData bsdfData = ConvertSurfaceDataToBSDFData(surfaceData); - - return float4(bsdfData.color, builtinData.opacity); - } - - #endif - - ENDHLSL - } - } -} diff --git a/Assets/ScriptableRenderLoop/RenderPasses/ShadowRenderPass.cs b/Assets/ScriptableRenderLoop/RenderPasses/ShadowRenderPass.cs index 8131f571cc4..36ae5de4fe0 100644 --- a/Assets/ScriptableRenderLoop/RenderPasses/ShadowRenderPass.cs +++ b/Assets/ScriptableRenderLoop/RenderPasses/ShadowRenderPass.cs @@ -1,425 +1,425 @@ -using UnityEngine; -using System.Collections; using UnityEngine.Rendering; +using UnityEngine.Experimental.Rendering; using UnityEngine.Profiling; using System.Collections.Generic; using System; -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - [System.Serializable] - public struct ShadowSettings - { - public bool enabled; - public int shadowAtlasWidth; - public int shadowAtlasHeight; - - public float maxShadowDistance; - public int directionalLightCascadeCount; - public Vector3 directionalLightCascades; - - - public static ShadowSettings Default - { - get - { - ShadowSettings settings; - settings.enabled = true; - settings.shadowAtlasHeight = settings.shadowAtlasWidth = 4096; - settings.directionalLightCascadeCount = 1; - settings.directionalLightCascades = new Vector3 (0.05F, 0.2F, 0.3F); - settings.directionalLightCascadeCount = 4; - settings.maxShadowDistance = 1000.0F; - return settings; - } - } - } - - public struct InputShadowLightData - { - public int lightIndex; - public int shadowResolution; - } - - public struct ShadowLight - { - public int shadowSliceIndex; - public int shadowSliceCount; - } - - public struct ShadowSliceData - { - public Matrix4x4 shadowTransform; - public int atlasX; - public int atlasY; - public int shadowResolution; - } - - public struct ShadowOutput - { - public ShadowSliceData[] shadowSlices; - public ShadowLight[] shadowLights; - public Vector4[] directionalShadowSplitSphereSqr; - - public int GetShadowSliceCountLightIndex(int lightIndex) - { - return shadowLights[lightIndex].shadowSliceCount; - } - - public int GetShadowSliceIndex(int lightIndex, int sliceIndex) - { - if (sliceIndex >= shadowLights[lightIndex].shadowSliceCount) - throw new System.IndexOutOfRangeException (); - - return shadowLights[lightIndex].shadowSliceIndex + sliceIndex; - } - } - - public struct ShadowRenderPass : IDisposable - { - ShadowSettings m_Settings; - - [NonSerialized] - bool m_bFailedToPackLastTime; - int m_ShadowTexName; - const int kDepthBuffer = 24; - - - public ShadowRenderPass(ShadowSettings settings) - { - m_Settings = settings; - m_bFailedToPackLastTime = false; - m_ShadowTexName = Shader.PropertyToID("g_tShadowBuffer"); - } - - public void Dispose() - { - - } - - struct AtlasEntry - { - public AtlasEntry(int splitIndex, int lightIndex) - { - this.splitIndex = splitIndex; - this.lightIndex = lightIndex; - } - - public int splitIndex; - public int lightIndex; - } - - int CalculateNumShadowSplits(int index, ActiveLight[] lights) - { - LightType lightType = lights [index].lightType; - if (lightType == LightType.Spot) - return 1; - - if (lightType == LightType.Directional) - return m_Settings.directionalLightCascadeCount; - - return 6; - } - - static public void ClearPackedShadows(ActiveLight[] lights, out ShadowOutput packedShadows) - { - packedShadows.directionalShadowSplitSphereSqr = null; - packedShadows.shadowSlices = null; - packedShadows.shadowLights = new ShadowLight[lights.Length]; - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - bool AutoPackLightsIntoShadowTexture(List shadowLights, ActiveLight[] lights, out ShadowOutput packedShadows) - { - Dictionary activeShadowLights = new Dictionary(); - List shadowIndices = new List(); - - //@TODO: Disallow multiple directional lights - - for (int i = 0; i < shadowLights.Count; i++) - { - shadowIndices.Add (shadowLights[i].lightIndex); - activeShadowLights[shadowLights[i].lightIndex] = shadowLights[i]; - } - - // World's stupidest sheet packer: - // 1. Sort all lights from largest to smallest - // 2. In a left->right, top->bottom pattern, fill quads until you reach the edge of the texture - // 3. Move position to x=0, y=bottomOfFirstTextureInThisRow - // 4. Goto 2. - // Yes, this will produce holes as the quads shrink, but it's good enough for now. I'll work on this more later to fill the gaps. - - // Sort all lights from largest to smallest - shadowIndices.Sort( - delegate( int l1, int l2 ) - { - int nCompare = 0; - // Sort shadow-casting lights by shadow resolution - nCompare = activeShadowLights[l1].shadowResolution.CompareTo(activeShadowLights[l2].shadowResolution); // Sort by shadow size - - if ( nCompare == 0 ) // Same, so sort by range to stabilize sort results - nCompare = lights[l1].range.CompareTo( lights[l2].range ); // Sort by shadow size - - if ( nCompare == 0 ) // Still same, so sort by instance ID to stabilize sort results - nCompare = lights[l1].light.GetInstanceID().CompareTo( lights[l2].light.GetInstanceID() ); - - return nCompare; - } - ); - - // Start filling lights into texture - List requestedPages = new List(); - packedShadows.shadowLights = new ShadowLight[lights.Length]; - for (int i = 0; i != shadowIndices.Count;i++) - { - int numShadowSplits = CalculateNumShadowSplits(shadowIndices[i], lights); - - packedShadows.shadowLights[shadowIndices [i]].shadowSliceCount = numShadowSplits; - packedShadows.shadowLights[shadowIndices [i]].shadowSliceIndex = requestedPages.Count; - - for (int s = 0; s < numShadowSplits; s++) - requestedPages.Add (new AtlasEntry (requestedPages.Count, shadowIndices[i])); - } - - int nCurrentX = 0; - int nCurrentY = -1; - int nNextY = 0; - - packedShadows.shadowSlices = new ShadowSliceData[requestedPages.Count]; - packedShadows.directionalShadowSplitSphereSqr = new Vector4[4]; - - foreach (AtlasEntry entry in requestedPages) - { - int shadowResolution = activeShadowLights[entry.lightIndex].shadowResolution; - - // Check if first texture is too wide - if ( nCurrentY == -1 ) - { - if ( ( shadowResolution > m_Settings.shadowAtlasWidth ) || ( shadowResolution > m_Settings.shadowAtlasHeight ) ) - { - Debug.LogError( "ERROR! Shadow packer ran out of space in the " + m_Settings.shadowAtlasWidth + "x" + m_Settings.shadowAtlasHeight + " texture!\n\n" ); - m_bFailedToPackLastTime = true; - ClearPackedShadows (lights, out packedShadows); - return false; - } - } - - // Goto next scanline - if ( ( nCurrentY == -1 ) || ( ( nCurrentX + shadowResolution ) > m_Settings.shadowAtlasWidth ) ) - { - nCurrentX = 0; - nCurrentY = nNextY; - nNextY += shadowResolution; - } - - // Check if we've run out of space - if ( ( nCurrentY + shadowResolution ) > m_Settings.shadowAtlasHeight ) - { - Debug.LogError( "ERROR! Shadow packer ran out of space in the " + m_Settings.shadowAtlasWidth + "x" + m_Settings.shadowAtlasHeight + " texture!\n\n" ); - m_bFailedToPackLastTime = true; - ClearPackedShadows (lights, out packedShadows); - return false; - } - - // Save location to light - packedShadows.shadowSlices[entry.splitIndex].atlasX = nCurrentX; - packedShadows.shadowSlices[entry.splitIndex].atlasY = nCurrentY; - packedShadows.shadowSlices[entry.splitIndex].shadowResolution = shadowResolution; - - // Move ahead - nCurrentX += shadowResolution; - - //Debug.Log( "Sheet packer: " + vl.m_cachedLight.name + " ( " + vl.m_shadowX + ", " + vl.m_shadowY + " ) " + vl.m_shadowResolution + "\n\n" ); - } - - if ( m_bFailedToPackLastTime ) - { - m_bFailedToPackLastTime = false; - Debug.Log( "SUCCESS! Shadow packer can now fit all lights into the " + m_Settings.shadowAtlasWidth + "x" + m_Settings.shadowAtlasHeight + " texture!\n\n" ); - } - - return requestedPages.Count != 0; - } - - static List GetInputShadowLightData(CullResults cullResults) - { - var shadowCasters = new List (); - ActiveLight[] lights = cullResults.culledLights; - int directionalLightCount = 0; - for (int i = 0; i < lights.Length; i++) - { - //@TODO: ignore baked. move this logic to c++... - if (lights[i].light.shadows != LightShadows.None) - { - - // Only a single directional shadow casting light is supported - if (lights [i].lightType == LightType.Directional) - { - directionalLightCount++; - if (directionalLightCount != 1) - continue; - } - - AdditionalLightData additionalLight = lights [i].light.GetComponent (); - - InputShadowLightData light; - light.lightIndex = i; - light.shadowResolution = AdditionalLightData.GetShadowResolution(additionalLight); - - shadowCasters.Add (light); - } - } - return shadowCasters; - } - - public void UpdateCullingParameters(ref CullingParameters parameters) - { - parameters.shadowDistance = Mathf.Min (m_Settings.maxShadowDistance, parameters.shadowDistance); - } - - public void Render(RenderLoop loop, CullResults cullResults, out ShadowOutput packedShadows) - { - if (!m_Settings.enabled) - { - ClearPackedShadows(cullResults.culledLights, out packedShadows); - } - - // Pack all shadow quads into the texture - if ( !AutoPackLightsIntoShadowTexture(GetInputShadowLightData(cullResults), cullResults.culledLights, out packedShadows) ) - { - // No shadowing lights found, so skip all rendering - return; - } - - RenderPackedShadows (loop, cullResults, ref packedShadows); - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - // Render shadows - //--------------------------------------------------------------------------------------------------------------------------------------------------- - void RenderPackedShadows(RenderLoop loop, CullResults cullResults, ref ShadowOutput packedShadows) - { - var setRenderTargetCommandBuffer = new CommandBuffer (); - - setRenderTargetCommandBuffer.name = "Render packed shadows"; - setRenderTargetCommandBuffer.GetTemporaryRT (m_ShadowTexName, m_Settings.shadowAtlasWidth, m_Settings.shadowAtlasHeight, kDepthBuffer, FilterMode.Bilinear, RenderTextureFormat.Shadowmap, RenderTextureReadWrite.Linear); - setRenderTargetCommandBuffer.SetRenderTarget (new RenderTargetIdentifier (m_ShadowTexName)); - - setRenderTargetCommandBuffer.ClearRenderTarget (true, true, Color.green); - loop.ExecuteCommandBuffer (setRenderTargetCommandBuffer); - setRenderTargetCommandBuffer.Dispose (); - - ActiveLight[] activeLights = cullResults.culledLights; - var shadowSlices = packedShadows.shadowSlices; - - // Render each light's shadow buffer into a subrect of the shared depth texture - for ( int lightIndex = 0; lightIndex < packedShadows.shadowLights.Length; lightIndex++ ) - { - int shadowSliceCount = packedShadows.shadowLights[lightIndex].shadowSliceCount; - if (shadowSliceCount == 0) - continue; - - Profiler.BeginSample ("Shadows.GetShadowCasterBounds"); - Bounds bounds; - if (!cullResults.GetShadowCasterBounds (lightIndex, out bounds)) - { - Profiler.EndSample (); - return; - } - Profiler.EndSample (); - - Profiler.BeginSample ("Shadows.DrawShadows"); - - Matrix4x4 proj; - Matrix4x4 view; - - LightType lightType = activeLights[lightIndex].lightType; - Vector3 lightDirection = activeLights[lightIndex].light.transform.forward; - var shadowNearClip = activeLights[lightIndex].light.shadowNearPlane; - - int shadowSliceIndex = packedShadows.GetShadowSliceIndex (lightIndex, 0); - - if (lightType == LightType.Spot) - { - DrawShadowsSettings settings = new DrawShadowsSettings(cullResults, lightIndex); - bool needRendering = cullResults.ComputeSpotShadowsMatricesAndCullingPrimitives(lightIndex, out view, out proj, out settings.splitData); - SetupShadowSplitMatrices(ref packedShadows.shadowSlices[shadowSliceIndex], proj, view); - if (needRendering) - RenderShadowSplit(ref shadowSlices[shadowSliceIndex], lightDirection, proj, view, ref loop, settings); - } - else if (lightType == LightType.Directional) - { - Vector3 splitRatio = m_Settings.directionalLightCascades; - - for (int s = 0; s < 4; ++s) - packedShadows.directionalShadowSplitSphereSqr[s] = new Vector4 (0, 0, 0, float.NegativeInfinity); - - for (int s = 0; s < shadowSliceCount; ++s, shadowSliceIndex++) - { - var settings = new DrawShadowsSettings(cullResults, lightIndex); - var shadowResolution = shadowSlices [shadowSliceIndex].shadowResolution; - bool needRendering = cullResults.ComputeDirectionalShadowMatricesAndCullingPrimitives(lightIndex, s, shadowSliceCount, splitRatio, shadowResolution, shadowNearClip, out view, out proj, out settings.splitData); - - packedShadows.directionalShadowSplitSphereSqr[s] = settings.splitData.cullingSphere; - packedShadows.directionalShadowSplitSphereSqr[s].w *= packedShadows.directionalShadowSplitSphereSqr[s].w; - - SetupShadowSplitMatrices(ref shadowSlices[shadowSliceIndex], proj, view); - if (needRendering) - RenderShadowSplit(ref shadowSlices[shadowSliceIndex], lightDirection, proj, view, ref loop, settings); - } - } - else if (lightType == LightType.Point) - { - for(int s = 0; s < shadowSliceCount; ++s, shadowSliceIndex++) - { - DrawShadowsSettings settings = new DrawShadowsSettings(cullResults, lightIndex); - bool needRendering = cullResults.ComputePointShadowsMatricesAndCullingPrimitives(lightIndex, (CubemapFace)s, 2.0f, out view, out proj, out settings.splitData); - - SetupShadowSplitMatrices(ref shadowSlices[shadowSliceIndex], proj, view); - if (needRendering) - RenderShadowSplit(ref shadowSlices[shadowSliceIndex], lightDirection, proj, view, ref loop, settings); - } - } - Profiler.EndSample (); - } - } - - - private void SetupShadowSplitMatrices(ref ShadowSliceData lightData, Matrix4x4 proj, Matrix4x4 view) - { - Matrix4x4 matScaleBias = Matrix4x4.identity; - matScaleBias.m00 = 0.5f; - matScaleBias.m11 = 0.5f; - matScaleBias.m22 = 0.5f; - matScaleBias.m03 = 0.5f; - matScaleBias.m13 = 0.5f; - matScaleBias.m23 = 0.5f; - - Matrix4x4 matTile = Matrix4x4.identity; - matTile.m00 = (float)lightData.shadowResolution / (float)m_Settings.shadowAtlasWidth; - matTile.m11 = (float)lightData.shadowResolution / (float)m_Settings.shadowAtlasHeight; - matTile.m03 = (float)lightData.atlasX / (float)m_Settings.shadowAtlasWidth; - matTile.m13 = (float)lightData.atlasY / (float)m_Settings.shadowAtlasHeight; - lightData.shadowTransform = matTile * matScaleBias * proj * view; - } - - //--------------------------------------------------------------------------------------------------------------------------------------------------- - private void RenderShadowSplit(ref ShadowSliceData slice, Vector3 lightDirection, Matrix4x4 proj, Matrix4x4 view, ref RenderLoop loop, DrawShadowsSettings settings) - { - var commandBuffer = new CommandBuffer(); - commandBuffer.name = "ShadowSetup"; - - // Set viewport / matrices etc - commandBuffer.SetViewport(new Rect(slice.atlasX, slice.atlasY, slice.shadowResolution, slice.shadowResolution)); - //commandBuffer.ClearRenderTarget (true, true, Color.green); - commandBuffer.SetGlobalVector("g_vLightDirWs", new Vector4(lightDirection.x, lightDirection.y, lightDirection.z)); - commandBuffer.SetProjectionAndViewMatrices(proj, view); - // commandBuffer.SetGlobalDepthBias (1.0F, 1.0F); - loop.ExecuteCommandBuffer(commandBuffer); - commandBuffer.Dispose(); - - // Render - loop.DrawShadows(ref settings); - } - } -} \ No newline at end of file + [System.Serializable] + public struct ShadowSettings + { + public bool enabled; + public int shadowAtlasWidth; + public int shadowAtlasHeight; + + public float maxShadowDistance; + public int directionalLightCascadeCount; + public Vector3 directionalLightCascades; + + + public static ShadowSettings Default + { + get + { + ShadowSettings settings; + settings.enabled = true; + settings.shadowAtlasHeight = settings.shadowAtlasWidth = 4096; + settings.directionalLightCascadeCount = 1; + settings.directionalLightCascades = new Vector3(0.05F, 0.2F, 0.3F); + settings.directionalLightCascadeCount = 4; + settings.maxShadowDistance = 1000.0F; + return settings; + } + } + } + + public struct InputShadowLightData + { + public int lightIndex; + public int shadowResolution; + } + + public struct ShadowLight + { + public int shadowSliceIndex; + public int shadowSliceCount; + } + + public struct ShadowSliceData + { + public Matrix4x4 shadowTransform; + public int atlasX; + public int atlasY; + public int shadowResolution; + } + + public struct ShadowOutput + { + public ShadowSliceData[] shadowSlices; + public ShadowLight[] shadowLights; + public Vector4[] directionalShadowSplitSphereSqr; + + public int GetShadowSliceCountLightIndex(int lightIndex) + { + return shadowLights[lightIndex].shadowSliceCount; + } + + public int GetShadowSliceIndex(int lightIndex, int sliceIndex) + { + if (sliceIndex >= shadowLights[lightIndex].shadowSliceCount) + throw new System.IndexOutOfRangeException(); + + return shadowLights[lightIndex].shadowSliceIndex + sliceIndex; + } + } + + public struct ShadowRenderPass : IDisposable + { + ShadowSettings m_Settings; + + [NonSerialized] + bool m_FailedToPackLastTime; + int m_ShadowTexName; + const int k_DepthBuffer = 24; + + + public ShadowRenderPass(ShadowSettings settings) + { + m_Settings = settings; + m_FailedToPackLastTime = false; + m_ShadowTexName = Shader.PropertyToID("g_tShadowBuffer"); + } + + public void Dispose() + { + } + + struct AtlasEntry + { + public AtlasEntry(int splitIndex, int lightIndex) + { + this.splitIndex = splitIndex; + this.lightIndex = lightIndex; + } + + public readonly int splitIndex; + public readonly int lightIndex; + } + + int CalculateNumShadowSplits(int index, VisibleLight[] lights) + { + var lightType = lights[index].lightType; + switch (lightType) + { + case LightType.Spot: + return 1; + + case LightType.Directional: + return m_Settings.directionalLightCascadeCount; + + default: + return 6; + } + } + + public static void ClearPackedShadows(VisibleLight[] lights, out ShadowOutput packedShadows) + { + packedShadows.directionalShadowSplitSphereSqr = null; + packedShadows.shadowSlices = null; + packedShadows.shadowLights = new ShadowLight[lights.Length]; + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + bool AutoPackLightsIntoShadowTexture(List shadowLights, VisibleLight[] lights, out ShadowOutput packedShadows) + { + var activeShadowLights = new Dictionary(); + var shadowIndices = new List(); + + //@TODO: Disallow multiple directional lights + + for (int i = 0; i < shadowLights.Count; i++) + { + shadowIndices.Add(shadowLights[i].lightIndex); + activeShadowLights[shadowLights[i].lightIndex] = shadowLights[i]; + } + + // World's stupidest sheet packer: + // 1. Sort all lights from largest to smallest + // 2. In a left->right, top->bottom pattern, fill quads until you reach the edge of the texture + // 3. Move position to x=0, y=bottomOfFirstTextureInThisRow + // 4. Goto 2. + // Yes, this will produce holes as the quads shrink, but it's good enough for now. I'll work on this more later to fill the gaps. + + // Sort all lights from largest to smallest + shadowIndices.Sort( + delegate(int l1, int l2) + { + var nCompare = 0; + // Sort shadow-casting lights by shadow resolution + nCompare = activeShadowLights[l1].shadowResolution.CompareTo(activeShadowLights[l2].shadowResolution); // Sort by shadow size + + if (nCompare == 0) // Same, so sort by range to stabilize sort results + nCompare = lights[l1].range.CompareTo(lights[l2].range); // Sort by shadow size + + if (nCompare == 0) // Still same, so sort by instance ID to stabilize sort results + nCompare = lights[l1].light.GetInstanceID().CompareTo(lights[l2].light.GetInstanceID()); + + return nCompare; + } + ); + + // Start filling lights into texture + var requestedPages = new List(); + packedShadows.shadowLights = new ShadowLight[lights.Length]; + for (int i = 0; i != shadowIndices.Count; i++) + { + var numShadowSplits = CalculateNumShadowSplits(shadowIndices[i], lights); + + packedShadows.shadowLights[shadowIndices[i]].shadowSliceCount = numShadowSplits; + packedShadows.shadowLights[shadowIndices[i]].shadowSliceIndex = requestedPages.Count; + + for (int s = 0; s < numShadowSplits; s++) + requestedPages.Add(new AtlasEntry(requestedPages.Count, shadowIndices[i])); + } + + var nCurrentX = 0; + var nCurrentY = -1; + var nNextY = 0; + + packedShadows.shadowSlices = new ShadowSliceData[requestedPages.Count]; + packedShadows.directionalShadowSplitSphereSqr = new Vector4[4]; + + foreach (var entry in requestedPages) + { + var shadowResolution = activeShadowLights[entry.lightIndex].shadowResolution; + + // Check if first texture is too wide + if (nCurrentY == -1) + { + if ((shadowResolution > m_Settings.shadowAtlasWidth) || (shadowResolution > m_Settings.shadowAtlasHeight)) + { + Debug.LogError("ERROR! Shadow packer ran out of space in the " + m_Settings.shadowAtlasWidth + "x" + m_Settings.shadowAtlasHeight + " texture!\n\n"); + m_FailedToPackLastTime = true; + ClearPackedShadows(lights, out packedShadows); + return false; + } + } + + // Goto next scanline + if ((nCurrentY == -1) || ((nCurrentX + shadowResolution) > m_Settings.shadowAtlasWidth)) + { + nCurrentX = 0; + nCurrentY = nNextY; + nNextY += shadowResolution; + } + + // Check if we've run out of space + if ((nCurrentY + shadowResolution) > m_Settings.shadowAtlasHeight) + { + Debug.LogError("ERROR! Shadow packer ran out of space in the " + m_Settings.shadowAtlasWidth + "x" + m_Settings.shadowAtlasHeight + " texture!\n\n"); + m_FailedToPackLastTime = true; + ClearPackedShadows(lights, out packedShadows); + return false; + } + + // Save location to light + packedShadows.shadowSlices[entry.splitIndex].atlasX = nCurrentX; + packedShadows.shadowSlices[entry.splitIndex].atlasY = nCurrentY; + packedShadows.shadowSlices[entry.splitIndex].shadowResolution = shadowResolution; + + // Move ahead + nCurrentX += shadowResolution; + + //Debug.Log( "Sheet packer: " + vl.m_cachedLight.name + " ( " + vl.m_shadowX + ", " + vl.m_shadowY + " ) " + vl.m_shadowResolution + "\n\n" ); + } + + if (m_FailedToPackLastTime) + { + m_FailedToPackLastTime = false; + Debug.Log("SUCCESS! Shadow packer can now fit all lights into the " + m_Settings.shadowAtlasWidth + "x" + m_Settings.shadowAtlasHeight + " texture!\n\n"); + } + + return requestedPages.Count != 0; + } + + static List GetInputShadowLightData(CullResults cullResults) + { + var shadowCasters = new List(); + var lights = cullResults.visibleLights; + int directionalLightCount = 0; + + for (int i = 0; i < lights.Length; i++) + { + //@TODO: ignore baked. move this logic to c++... + if (lights[i].light.shadows == LightShadows.None) + continue; + + // Only a single directional shadow casting light is supported + if (lights[i].lightType == LightType.Directional) + { + directionalLightCount++; + if (directionalLightCount != 1) + continue; + } + + AdditionalLightData additionalLight = lights[i].light.GetComponent(); + + InputShadowLightData light; + light.lightIndex = i; + light.shadowResolution = AdditionalLightData.GetShadowResolution(additionalLight); + + shadowCasters.Add(light); + } + return shadowCasters; + } + + public void UpdateCullingParameters(ref CullingParameters parameters) + { + parameters.shadowDistance = Mathf.Min(m_Settings.maxShadowDistance, parameters.shadowDistance); + } + + public void Render(RenderLoop loop, CullResults cullResults, out ShadowOutput packedShadows) + { + if (!m_Settings.enabled) + { + ClearPackedShadows(cullResults.visibleLights, out packedShadows); + } + + // Pack all shadow quads into the texture + if (!AutoPackLightsIntoShadowTexture(GetInputShadowLightData(cullResults), cullResults.visibleLights, out packedShadows)) + { + // No shadowing lights found, so skip all rendering + return; + } + + RenderPackedShadows(loop, cullResults, ref packedShadows); + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + // Render shadows + //--------------------------------------------------------------------------------------------------------------------------------------------------- + void RenderPackedShadows(RenderLoop loop, CullResults cullResults, ref ShadowOutput packedShadows) + { + var setRenderTargetCommandBuffer = new CommandBuffer(); + + setRenderTargetCommandBuffer.name = "Render packed shadows"; + setRenderTargetCommandBuffer.GetTemporaryRT(m_ShadowTexName, m_Settings.shadowAtlasWidth, m_Settings.shadowAtlasHeight, k_DepthBuffer, FilterMode.Bilinear, RenderTextureFormat.Shadowmap, RenderTextureReadWrite.Linear); + setRenderTargetCommandBuffer.SetRenderTarget(new RenderTargetIdentifier(m_ShadowTexName)); + + setRenderTargetCommandBuffer.ClearRenderTarget(true, true, Color.green); + loop.ExecuteCommandBuffer(setRenderTargetCommandBuffer); + setRenderTargetCommandBuffer.Dispose(); + + VisibleLight[] visibleLights = cullResults.visibleLights; + var shadowSlices = packedShadows.shadowSlices; + + // Render each light's shadow buffer into a subrect of the shared depth texture + for (int lightIndex = 0; lightIndex < packedShadows.shadowLights.Length; lightIndex++) + { + int shadowSliceCount = packedShadows.shadowLights[lightIndex].shadowSliceCount; + if (shadowSliceCount == 0) + continue; + + Profiler.BeginSample("Shadows.GetShadowCasterBounds"); + Bounds bounds; + if (!cullResults.GetShadowCasterBounds(lightIndex, out bounds)) + { + Profiler.EndSample(); + return; + } + Profiler.EndSample(); + + Profiler.BeginSample("Shadows.DrawShadows"); + + Matrix4x4 proj; + Matrix4x4 view; + + var lightType = visibleLights[lightIndex].lightType; + var lightDirection = visibleLights[lightIndex].light.transform.forward; + var shadowNearClip = visibleLights[lightIndex].light.shadowNearPlane; + + int shadowSliceIndex = packedShadows.GetShadowSliceIndex(lightIndex, 0); + + if (lightType == LightType.Spot) + { + var settings = new DrawShadowsSettings(cullResults, lightIndex); + bool needRendering = cullResults.ComputeSpotShadowsMatricesAndCullingPrimitives(lightIndex, out view, out proj, out settings.splitData); + SetupShadowSplitMatrices(ref packedShadows.shadowSlices[shadowSliceIndex], proj, view); + if (needRendering) + RenderShadowSplit(ref shadowSlices[shadowSliceIndex], lightDirection, proj, view, ref loop, settings); + } + else if (lightType == LightType.Directional) + { + Vector3 splitRatio = m_Settings.directionalLightCascades; + + for (int s = 0; s < 4; ++s) + packedShadows.directionalShadowSplitSphereSqr[s] = new Vector4(0, 0, 0, float.NegativeInfinity); + + for (int s = 0; s < shadowSliceCount; ++s, shadowSliceIndex++) + { + var settings = new DrawShadowsSettings(cullResults, lightIndex); + var shadowResolution = shadowSlices[shadowSliceIndex].shadowResolution; + bool needRendering = cullResults.ComputeDirectionalShadowMatricesAndCullingPrimitives(lightIndex, s, shadowSliceCount, splitRatio, shadowResolution, shadowNearClip, out view, out proj, out settings.splitData); + + packedShadows.directionalShadowSplitSphereSqr[s] = settings.splitData.cullingSphere; + packedShadows.directionalShadowSplitSphereSqr[s].w *= packedShadows.directionalShadowSplitSphereSqr[s].w; + + SetupShadowSplitMatrices(ref shadowSlices[shadowSliceIndex], proj, view); + if (needRendering) + RenderShadowSplit(ref shadowSlices[shadowSliceIndex], lightDirection, proj, view, ref loop, settings); + } + } + else if (lightType == LightType.Point) + { + for (int s = 0; s < shadowSliceCount; ++s, shadowSliceIndex++) + { + var settings = new DrawShadowsSettings(cullResults, lightIndex); + bool needRendering = cullResults.ComputePointShadowsMatricesAndCullingPrimitives(lightIndex, (CubemapFace)s, 2.0f, out view, out proj, out settings.splitData); + + SetupShadowSplitMatrices(ref shadowSlices[shadowSliceIndex], proj, view); + if (needRendering) + RenderShadowSplit(ref shadowSlices[shadowSliceIndex], lightDirection, proj, view, ref loop, settings); + } + } + Profiler.EndSample(); + } + } + + private void SetupShadowSplitMatrices(ref ShadowSliceData lightData, Matrix4x4 proj, Matrix4x4 view) + { + var matScaleBias = Matrix4x4.identity; + matScaleBias.m00 = 0.5f; + matScaleBias.m11 = 0.5f; + matScaleBias.m22 = 0.5f; + matScaleBias.m03 = 0.5f; + matScaleBias.m13 = 0.5f; + matScaleBias.m23 = 0.5f; + + var matTile = Matrix4x4.identity; + matTile.m00 = (float)lightData.shadowResolution / (float)m_Settings.shadowAtlasWidth; + matTile.m11 = (float)lightData.shadowResolution / (float)m_Settings.shadowAtlasHeight; + matTile.m03 = (float)lightData.atlasX / (float)m_Settings.shadowAtlasWidth; + matTile.m13 = (float)lightData.atlasY / (float)m_Settings.shadowAtlasHeight; + lightData.shadowTransform = matTile * matScaleBias * proj * view; + } + + //--------------------------------------------------------------------------------------------------------------------------------------------------- + private void RenderShadowSplit(ref ShadowSliceData slice, Vector3 lightDirection, Matrix4x4 proj, Matrix4x4 view, ref RenderLoop loop, DrawShadowsSettings settings) + { + var commandBuffer = new CommandBuffer { name = "ShadowSetup" }; + + // Set viewport / matrices etc + commandBuffer.SetViewport(new Rect(slice.atlasX, slice.atlasY, slice.shadowResolution, slice.shadowResolution)); + //commandBuffer.ClearRenderTarget (true, true, Color.green); + commandBuffer.SetGlobalVector("g_vLightDirWs", new Vector4(lightDirection.x, lightDirection.y, lightDirection.z)); + commandBuffer.SetProjectionAndViewMatrices(proj, view); + // commandBuffer.SetGlobalDepthBias (1.0F, 1.0F); + loop.ExecuteCommandBuffer(commandBuffer); + commandBuffer.Dispose(); + + // Render + loop.DrawShadows(ref settings); + } + } +} diff --git a/Assets/ScriptableRenderLoop/ScriptableRenderLoop.cs b/Assets/ScriptableRenderLoop/ScriptableRenderLoop.cs index aa65887f186..206104dde77 100644 --- a/Assets/ScriptableRenderLoop/ScriptableRenderLoop.cs +++ b/Assets/ScriptableRenderLoop/ScriptableRenderLoop.cs @@ -1,16 +1,14 @@ -using UnityEngine; -using System.Collections; -using UnityEngine.Rendering; +using UnityEngine.Experimental.Rendering; -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - public abstract class ScriptableRenderLoop : ScriptableObject - { - public abstract void Render(Camera[] cameras, RenderLoop renderLoop); - public virtual void Rebuild() { } + public abstract class ScriptableRenderLoop : ScriptableObject + { + public abstract void Render(Camera[] cameras, RenderLoop renderLoop); + public virtual void Rebuild() {} - #if UNITY_EDITOR - public virtual UnityEditor.SupportedRenderingFeatures GetSupportedRenderingFeatures() { return new UnityEditor.SupportedRenderingFeatures(); } - #endif - } -} \ No newline at end of file + #if UNITY_EDITOR + public virtual UnityEditor.SupportedRenderingFeatures GetSupportedRenderingFeatures() { return new UnityEditor.SupportedRenderingFeatures(); } + #endif + } +} diff --git a/Assets/ScriptableRenderLoop/ScriptableRenderLoopPicker.cs b/Assets/ScriptableRenderLoop/ScriptableRenderLoopPicker.cs index 9ef3bd0497f..19b95076ddc 100644 --- a/Assets/ScriptableRenderLoop/ScriptableRenderLoopPicker.cs +++ b/Assets/ScriptableRenderLoop/ScriptableRenderLoopPicker.cs @@ -1,90 +1,86 @@ -using UnityEngine; -using System.Collections; -using UnityEngine.Rendering; -using System.Collections.Generic; -using System; +using UnityEngine.Experimental.Rendering; -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - //@TODO: This should be moved into GraphicsSettings - [ExecuteInEditMode] - public class ScriptableRenderLoopPicker : MonoBehaviour - { - public ScriptableRenderLoop renderloop - { - get { return m_RenderLoop; } - set { m_RenderLoop = value; } - } + //@TODO: This should be moved into GraphicsSettings + [ExecuteInEditMode] + public class ScriptableRenderLoopPicker : MonoBehaviour + { + public ScriptableRenderLoop renderloop + { + get { return m_RenderLoop; } + set { m_RenderLoop = value; } + } - [SerializeField] - private ScriptableRenderLoop m_RenderLoop; + [SerializeField] + private ScriptableRenderLoop m_RenderLoop; - void OnEnable () - { - RenderLoop.renderLoopDelegate += Render; + void OnEnable() + { + RenderLoop.renderLoopDelegate += Render; - SyncRenderingFeatures(); - } + SyncRenderingFeatures(); + } - void OnValidate() - { - SyncRenderingFeatures(); - } + void OnValidate() + { + SyncRenderingFeatures(); + } - void SyncRenderingFeatures () - { + void SyncRenderingFeatures() + { #if UNITY_EDITOR - if (m_RenderLoop != null && isActiveAndEnabled) - UnityEditor.SupportedRenderingFeatures.active = m_RenderLoop.GetSupportedRenderingFeatures(); - else - UnityEditor.SupportedRenderingFeatures.active = UnityEditor.SupportedRenderingFeatures.Default; + if (m_RenderLoop != null && isActiveAndEnabled) + UnityEditor.SupportedRenderingFeatures.active = m_RenderLoop.GetSupportedRenderingFeatures(); + else + UnityEditor.SupportedRenderingFeatures.active = UnityEditor.SupportedRenderingFeatures.Default; #endif - } + } - void OnDisable () - { - RenderLoop.renderLoopDelegate -= Render; + void OnDisable() + { + RenderLoop.renderLoopDelegate -= Render; - #if UNITY_EDITOR - UnityEditor.SupportedRenderingFeatures.active = UnityEditor.SupportedRenderingFeatures.Default; - #endif - } + #if UNITY_EDITOR + UnityEditor.SupportedRenderingFeatures.active = UnityEditor.SupportedRenderingFeatures.Default; + #endif + } - bool Render(Camera[] cameras, RenderLoop loop) - { - if (m_RenderLoop == null) - return false; + bool Render(Camera[] cameras, RenderLoop loop) + { + if (m_RenderLoop == null) + return false; #if UNITY_EDITOR - if (m_AssetVersion != ms_GlobalAssetVersion) - { - m_AssetVersion = ms_GlobalAssetVersion; - m_RenderLoop.Rebuild(); - } + if (m_AssetVersion != s_GlobalAssetVersion) + { + m_AssetVersion = s_GlobalAssetVersion; + m_RenderLoop.Rebuild(); + } #endif - m_RenderLoop.Render (cameras, loop); - return true; - } + m_RenderLoop.Render(cameras, loop); + return true; + } #if UNITY_EDITOR - // Temporary hack to allow compute shader reloading - internal class AssetReloader : UnityEditor.AssetPostprocessor + // Temporary hack to allow compute shader reloading + internal class AssetReloader : UnityEditor.AssetPostprocessor { static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { - foreach (string str in importedAssets) + foreach (var str in importedAssets) { if (str.EndsWith(".compute")) { - ms_GlobalAssetVersion++; + s_GlobalAssetVersion++; break; } } } } - public static int ms_GlobalAssetVersion = 0; - public int m_AssetVersion = 0; + static int s_GlobalAssetVersion = 0; + int m_AssetVersion = 0; #endif } } diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/API/D3D11.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/API/D3D11.hlsl index b9ccdb471d9..7f149aca377 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/API/D3D11.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/API/D3D11.hlsl @@ -8,4 +8,67 @@ #define IS_FRONT_VFACE(VAL, FRONT, BACK) ((VAL) ? (FRONT) : (BACK)) #define CBUFFER_START(name) cbuffer name { -#define CBUFFER_END }; \ No newline at end of file +#define CBUFFER_END }; + +// Initialize arbitrary structure with zero values. +// Do not exist on some platform, in this case we need to have a standard name that call a function that will initialize all parameters to 0 +#define ZERO_INITIALIZE(type, name) name = (type)0; + +// Macros to declare textures and samplers, possibly separately. For platforms +// that have separate samplers & textures (like DX11), and we'd want to conserve +// the samplers. +// - UNITY_DECLARE_TEX*_NOSAMPLER declares a texture, without a sampler. +// - UNITY_SAMPLE_TEX*_SAMPLER samples a texture, using sampler from another texture. +// That another texture must also be actually used in the current shader, otherwise +// the correct sampler will not be set. + +// 2D textures +#define UNITY_DECLARE_TEX2D(tex) Texture2D tex; SamplerState sampler##tex +#define UNITY_DECLARE_TEX2D_NOSAMPLER(tex) Texture2D tex +#define UNITY_SAMPLE_TEX2D(tex,coord) tex.Sample (sampler##tex,coord) +#define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex.SampleLevel (sampler##tex,coord, lod) +#define UNITY_SAMPLE_TEX2D_SAMPLER(tex,samplertex,coord) tex.Sample (sampler##samplertex,coord) + +// Cubemaps +#define UNITY_DECLARE_TEXCUBE(tex) TextureCube tex; SamplerState sampler##tex +#define UNITY_ARGS_TEXCUBE(tex) TextureCube tex, SamplerState sampler##tex +#define UNITY_PASS_TEXCUBE(tex) tex, sampler##tex +#define UNITY_PASS_TEXCUBE_SAMPLER(tex,samplertex) tex, sampler##samplertex +#define UNITY_DECLARE_TEXCUBE_NOSAMPLER(tex) TextureCube tex +#define UNITY_SAMPLE_TEXCUBE(tex,coord) tex.Sample (sampler##tex,coord) +#define UNITY_SAMPLE_TEXCUBE_LOD(tex,coord,lod) tex.SampleLevel (sampler##tex,coord, lod) +#define UNITY_SAMPLE_TEXCUBE_SAMPLER(tex,samplertex,coord) tex.Sample (sampler##samplertex,coord) + +// 3D textures +#define UNITY_DECLARE_TEX3D(tex) Texture3D tex; SamplerState sampler##tex +#define UNITY_DECLARE_TEX3D_NOSAMPLER(tex) Texture3D tex +#define UNITY_SAMPLE_TEX3D(tex,coord) tex.Sample (sampler##tex,coord) +#define UNITY_SAMPLE_TEX3D_LOD(tex,coord,lod) tex.SampleLevel (sampler##tex,coord, lod) +#define UNITY_SAMPLE_TEX3D_SAMPLER(tex,samplertex,coord) tex.Sample (sampler##samplertex,coord) + +// 2D arrays +#define UNITY_DECLARE_TEX2DARRAY(tex) Texture2DArray tex; SamplerState sampler##tex +#define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(tex) Texture2DArray tex +#define UNITY_ARGS_TEX2DARRAY(tex) Texture2DArray tex, SamplerState sampler##tex +#define UNITY_PASS_TEX2DARRAY(tex) tex, sampler##tex +#define UNITY_SAMPLE_TEX2DARRAY(tex,coord) tex.Sample (sampler##tex,coord) +#define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) tex.SampleLevel (sampler##tex,coord, lod) +#define UNITY_SAMPLE_TEX2DARRAY_SAMPLER(tex,samplertex,coord) tex.Sample (sampler##samplertex,coord) + +// Cube arrays +#define UNITY_DECLARE_TEXCUBEARRAY(tex) TextureCubeArray tex; SamplerState sampler##tex +#define UNITY_DECLARE_TEXCUBEARRAY_NOSAMPLER(tex) TextureCubeArray tex +#define UNITY_ARGS_TEXCUBEARRAY(tex) TextureCubeArray tex, SamplerState sampler##tex +#define UNITY_PASS_TEXCUBEARRAY(tex) tex, sampler##tex +#define UNITY_SAMPLE_TEXCUBEARRAY(tex,coord) tex.Sample (sampler##tex,coord) +#define UNITY_SAMPLE_TEXCUBEARRAY_LOD(tex,coord,lod) tex.SampleLevel (sampler##tex,coord, lod) +#define UNITY_SAMPLE_TEXCUBEARRAY_SAMPLER(tex,samplertex,coord) tex.Sample (sampler##samplertex,coord) + + + + +#define TEXTURE2D(textureName) Texture2D textureName; +#define SAMPLER2D(samplerName) SamplerState samplerName; +#define TEXTURE2D_ARGS(textureName, samplerName) Texture2D textureName, SamplerState samplerName +#define TEXTURE2D_PASS(textureName, samplerName) textureName, samplerName +#define SAMPLE_TEXTURE2D(textureName, samplerName, coord) textureName.Sample(samplerName, coord) diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/API/D3D11_1.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/API/D3D11_1.hlsl index 9e8b13ac224..4bead8d5b01 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/API/D3D11_1.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/API/D3D11_1.hlsl @@ -1,3 +1,3 @@ // This file assume SHADER_API_D3D11 is defined -#define UNITY_UV_STARTS_AT_TOP 1 \ No newline at end of file +#define UNITY_UV_STARTS_AT_TOP 1 diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/API/Validate.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/API/Validate.hlsl index fb3695e7fde..ef25f0ea027 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/API/Validate.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/API/Validate.hlsl @@ -1,9 +1,9 @@ // Wait for a fix from Trunk #error not supported yet /* #define REQUIRE_DEFINED(X_) \ - #ifndef X_ \ - #error X_ must be defined (in) the platform include \ - #endif X_ \ + #ifndef X_ \ + #error X_ must be defined (in) the platform include \ + #endif X_ \ REQUIRE_DEFINED(UNITY_UV_STARTS_AT_TOP) REQUIRE_DEFINED(UNITY_REVERSED_Z) @@ -13,4 +13,6 @@ REQUIRE_DEFINED(FACE) REQUIRE_DEFINED(CBUFFER_START) REQUIRE_DEFINED(CBUFFER_END) -*/ \ No newline at end of file +REQUIRE_DEFINED(INITIALIZE_OUTPUT) + +*/ diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/AreaLighting.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/AreaLighting.hlsl new file mode 100644 index 00000000000..1190a6d1a74 --- /dev/null +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/AreaLighting.hlsl @@ -0,0 +1,173 @@ +#ifndef UNITY_AREA_LIGHTING_INCLUDED +#define UNITY_AREA_LIGHTING_INCLUDED + +float IntegrateEdge(float3 v1, float3 v2) +{ + float cosTheta = dot(v1, v2); + // TODO: Explain the 0.9999 <= precision is important! + cosTheta = clamp(cosTheta, -0.9999, 0.9999); + + // TODO: Experiment with fastAcos + float theta = acos(cosTheta); + float res = cross(v1, v2).z * theta / sin(theta); + + return res; +} + +// Baum's equation +// Expects non-normalized vertex positions +float PolygonRadiance(float4x3 L, bool twoSided) +{ + // 1. ClipQuadToHorizon + + // detect clipping config + uint config = 0; + if (L[0].z > 0) config += 1; + if (L[1].z > 0) config += 2; + if (L[2].z > 0) config += 4; + if (L[3].z > 0) config += 8; + + // The fifth vertex for cases when clipping cuts off one corner. + // Due to a compiler bug, copying L into a vector array with 5 rows + // messes something up, so we need to stick with the matrix + the L4 vertex. + float3 L4 = L[3]; + + // This switch is surprisingly fast. Tried replacing it with a lookup array of vertices. + // Even though that replaced the switch with just some indexing and no branches, it became + // way, way slower - mem fetch stalls? + + uint n = 0; + switch (config) + { + case 0: // clip all + break; + + case 1: // V1 clip V2 V3 V4 + n = 3; + L[1] = -L[1].z * L[0] + L[0].z * L[1]; + L[2] = -L[3].z * L[0] + L[0].z * L[3]; + break; + + case 2: // V2 clip V1 V3 V4 + n = 3; + L[0] = -L[0].z * L[1] + L[1].z * L[0]; + L[2] = -L[2].z * L[1] + L[1].z * L[2]; + break; + + case 3: // V1 V2 clip V3 V4 + n = 4; + L[2] = -L[2].z * L[1] + L[1].z * L[2]; + L[3] = -L[3].z * L[0] + L[0].z * L[3]; + break; + + case 4: // V3 clip V1 V2 V4 + n = 3; + L[0] = -L[3].z * L[2] + L[2].z * L[3]; + L[1] = -L[1].z * L[2] + L[2].z * L[1]; + break; + + case 5: // V1 V3 clip V2 V4: impossible + break; + + case 6: // V2 V3 clip V1 V4 + n = 4; + L[0] = -L[0].z * L[1] + L[1].z * L[0]; + L[3] = -L[3].z * L[2] + L[2].z * L[3]; + break; + + case 7: // V1 V2 V3 clip V4 + n = 5; + L4 = -L[3].z * L[0] + L[0].z * L[3]; + L[3] = -L[3].z * L[2] + L[2].z * L[3]; + break; + + case 8: // V4 clip V1 V2 V3 + n = 3; + L[0] = -L[0].z * L[3] + L[3].z * L[0]; + L[1] = -L[2].z * L[3] + L[3].z * L[2]; + L[2] = L[3]; + break; + + case 9: // V1 V4 clip V2 V3 + n = 4; + L[1] = -L[1].z * L[0] + L[0].z * L[1]; + L[2] = -L[2].z * L[3] + L[3].z * L[2]; + break; + + case 10: // V2 V4 clip V1 V3: impossible + break; + + case 11: // V1 V2 V4 clip V3 + n = 5; + L[3] = -L[2].z * L[3] + L[3].z * L[2]; + L[2] = -L[2].z * L[1] + L[1].z * L[2]; + break; + + case 12: // V3 V4 clip V1 V2 + n = 4; + L[1] = -L[1].z * L[2] + L[2].z * L[1]; + L[0] = -L[0].z * L[3] + L[3].z * L[0]; + break; + + case 13: // V1 V3 V4 clip V2 + n = 5; + L[3] = L[2]; + L[2] = -L[1].z * L[2] + L[2].z * L[1]; + L[1] = -L[1].z * L[0] + L[0].z * L[1]; + break; + + case 14: // V2 V3 V4 clip V1 + n = 5; + L4 = -L[0].z * L[3] + L[3].z * L[0]; + L[0] = -L[0].z * L[1] + L[1].z * L[0]; + break; + + case 15: // V1 V2 V3 V4 + n = 4; + break; + } + + if (n == 0) + return 0; + if (n == 3) + L[3] = L[0]; + if (n == 4) + L4 = L[0]; + + // 2. Project onto sphere + L[0] = normalize(L[0]); + L[1] = normalize(L[1]); + L[2] = normalize(L[2]); + L[3] = normalize(L[3]); + L4 = normalize(L4); + + // 3. Integrate + float sum = 0; + sum += IntegrateEdge(L[0], L[1]); + sum += IntegrateEdge(L[1], L[2]); + sum += IntegrateEdge(L[2], L[3]); + if (n >= 4) + sum += IntegrateEdge(L[3], L4); + if (n == 5) + sum += IntegrateEdge(L4, L[0]); + + return twoSided > 0.0 ? abs(sum) : max(0.0, sum); +} + +float LTCEvaluate(float3 V, float3 N, float3x3 minV, float4x3 L, bool twoSided) +{ + // Construct local orthonormal basis around N, aligned with N + float3x3 basis; + basis[0] = normalize(V - N * dot(V, N)); + basis[1] = normalize(cross(N, basis[0])); + basis[2] = N; + + // rotate area light in local basis + minV = mul(transpose(basis), minV); + L = mul(L, minV); + + // Polygon radiance in transformed configuration - specular + return PolygonRadiance(L, twoSided); +} + +#endif // UNITY_AREA_LIGHTING_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/AreaLighting.hlsl.meta b/Assets/ScriptableRenderLoop/ShaderLibrary/AreaLighting.hlsl.meta new file mode 100644 index 00000000000..198139fb731 --- /dev/null +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/AreaLighting.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2af09bb13e6547242913c40dfb0e50f9 +timeCreated: 1476726533 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/BSDF.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/BSDF.hlsl index cbbfa0be7fb..d2e48ea6033 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/BSDF.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/BSDF.hlsl @@ -1,7 +1,9 @@ #ifndef UNITY_BSDF_INCLUDED #define UNITY_BSDF_INCLUDED -#include "Common.hlsl" +// Note: All NDF and diffuse term have a version with and without divide by PI. +// Version with divide by PI are use for direct lighting. +// Version without divide by PI are use for image based lighting where often the PI cancel during importance sampling //----------------------------------------------------------------------------- // Fresnel term @@ -9,9 +11,9 @@ float F_Schlick(float f0, float f90, float u) { - float x = 1.0 - u; - float x5 = x * x; - x5 = x5 * x5 * x; + float x = 1.0 - u; + float x5 = x * x; + x5 = x5 * x5 * x; return (f90 - f0) * x5 + f0; // sub mul mul mul sub mad } @@ -22,10 +24,10 @@ float F_Schlick(float f0, float u) float3 F_Schlick(float3 f0, float f90, float u) { - float x = 1.0 - u; - float x5 = x * x; - x5 = x5 * x5 * x; - return (float3(f90, f90, f90) - f0) * x5 + f0; // sub mul mul mul sub mad + float x = 1.0 - u; + float x5 = x * x; + x5 = x5 * x5 * x; + return (float3(f90, f90, f90) - f0) * x5 + f0; // sub mul mul mul sub mad } float3 F_Schlick(float3 f0, float u) @@ -37,55 +39,140 @@ float3 F_Schlick(float3 f0, float u) // Specular BRDF //----------------------------------------------------------------------------- -// With analytical light (not image based light) we clamp the minimun roughness to avoid numerical instability. +// With analytical light (not image based light) we clamp the minimun roughness in the NDF to avoid numerical instability. #define UNITY_MIN_ROUGHNESS 0.002 float D_GGX(float NdotH, float roughness) { - roughness = max(roughness, UNITY_MIN_ROUGHNESS); + roughness = max(roughness, UNITY_MIN_ROUGHNESS); + float a2 = roughness * roughness; - float f = (NdotH * a2 - NdotH) * NdotH + 1.0; - return INV_PI * a2 / (f * f); + float f = (NdotH * a2 - NdotH) * NdotH + 1.0; + return a2 / (f * f); } -// roughnessT -> roughness in tangent direction -// roughnessB -> roughness in bitangent direction -float D_GGX_Aniso(float NdotH, float TdotH, float BdotH, float roughnessT, float roughnessB) +float D_GGXDividePI(float NdotH, float roughness) { - // TODO: Do the clamp on the artists parameter - float f = TdotH * TdotH / (roughnessT * roughnessT) + BdotH * BdotH / (roughnessB * roughnessB) + NdotH * NdotH; - return INV_PI / (roughnessT * roughnessB * f * f); + return INV_PI * D_GGX(NdotH, roughness); } // Ref: http://jcgt.org/published/0003/02/03/paper.pdf float V_SmithJointGGX(float NdotL, float NdotV, float roughness) { -#if 1 - // Original formulation: - // lambda_v = (-1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5f; - // lambda_l = (-1 + sqrt(a2 * (1 - NdotV2) / NdotV2 + 1)) * 0.5f; - // G = 1 / (1 + lambda_v + lambda_l); + // Original formulation: + // lambda_v = (-1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5f; + // lambda_l = (-1 + sqrt(a2 * (1 - NdotV2) / NdotV2 + 1)) * 0.5f; + // G = 1 / (1 + lambda_v + lambda_l); + + float a = roughness; + float a2 = a * a; + // Reorder code to be more optimal + float lambdaV = NdotL * sqrt((-NdotV * a2 + NdotV) * NdotV + a2); + float lambdaL = NdotV * sqrt((-NdotL * a2 + NdotL) * NdotL + a2); + + // Simplify visibility term: (2.0f * NdotL * NdotV) / ((4.0f * NdotL * NdotV) * (lambda_v + lambda_l)); + return 0.5 / (lambdaV + lambdaL); +} - // Reorder code to be more optimal - half a = roughness; - half a2 = a * a; +// Precompute part of lambdaV +float GetSmithJointGGXLambdaV(float NdotV, float roughness) +{ + float a = roughness; + float a2 = a * a; + return sqrt((-NdotV * a2 + NdotV) * NdotV + a2); +} - half lambdaV = NdotL * sqrt((-NdotV * a2 + NdotV) * NdotV + a2); - half lambdaL = NdotV * sqrt((-NdotL * a2 + NdotL) * NdotL + a2); +float V_SmithJointGGX(float NdotL, float NdotV, float roughness, float lambdaV) +{ + float a = roughness; + float a2 = a * a; + // Reorder code to be more optimal + lambdaV *= NdotL; + float lambdaL = NdotV * sqrt((-NdotL * a2 + NdotL) * NdotL + a2); + + // Simplify visibility term: (2.0f * NdotL * NdotV) / ((4.0f * NdotL * NdotV) * (lambda_v + lambda_l)); + return 0.5 / (lambdaV + lambdaL); +} - // Simplify visibility term: (2.0f * NdotL * NdotV) / ((4.0f * NdotL * NdotV) * (lambda_v + lambda_l)); - return 0.5f / (lambdaV + lambdaL); -#else +float V_SmithJointGGXApprox(float NdotL, float NdotV, float roughness) +{ + float a = roughness; // Approximation of the above formulation (simplify the sqrt, not mathematically correct but close enough) - half a = roughness; - half lambdaV = NdotL * (NdotV * (1 - a) + a); - half lambdaL = NdotV * (NdotL * (1 - a) + a); + float lambdaV = NdotL * (NdotV * (1 - a) + a); + float lambdaL = NdotV * (NdotL * (1 - a) + a); + + return 0.5 / (lambdaV + lambdaL); +} + +// Precompute part of LambdaV +float GetSmithJointGGXApproxLambdaV(float NdotV, float roughness) +{ + float a = roughness; + return (NdotV * (1 - a) + a); +} + +float V_SmithJointGGXApprox(float NdotL, float NdotV, float roughness, float lambdaV) +{ + float a = roughness; + // Approximation of the above formulation (simplify the sqrt, not mathematically correct but close enough) + lambdaV *= NdotL; + float lambdaL = NdotV * (NdotL * (1 - a) + a); + + return 0.5 / (lambdaV + lambdaL); +} + +// roughnessT -> roughness in tangent direction +// roughnessB -> roughness in bitangent direction +float D_GGXAniso(float TdotH, float BdotH, float NdotH, float roughnessT, float roughnessB) +{ + roughnessT = max(roughnessT, UNITY_MIN_ROUGHNESS); + roughnessB = max(roughnessB, UNITY_MIN_ROUGHNESS); - return 0.5 / (lambdaV + lambdaL); -#endif + float f = TdotH * TdotH / (roughnessT * roughnessT) + BdotH * BdotH / (roughnessB * roughnessB) + NdotH * NdotH; + return 1.0 / (roughnessT * roughnessB * f * f); } -// TODO: V_ term for aniso GGX from farcry +float D_GGXAnisoDividePI(float TdotH, float BdotH, float NdotH, float roughnessT, float roughnessB) +{ + return INV_PI * D_GGXAniso(TdotH, BdotH, NdotH, roughnessT, roughnessB); +} + +// Ref: https://cedec.cesa.or.jp/2015/session/ENG/14698.html The Rendering Materials of Far Cry 4 +float V_SmithJointGGXAniso(float TdotV, float BdotV, float NdotV, float TdotL, float BdotL, float NdotL, float roughnessT, float roughnessB) +{ + float aT = roughnessT; + float aT2 = aT * aT; + float aB = roughnessB; + float aB2 = aB * aB; + + float lambdaV = NdotL * sqrt(aT2 * TdotV * TdotV + aB2 * BdotV * BdotV + NdotV * NdotV); + float lambdaL = NdotV * sqrt(aT2 * TdotL * TdotL + aB2 * BdotL * BdotL + NdotL * NdotL); + + return 0.5 / (lambdaV + lambdaL); +} + +float GetSmithJointGGXAnisoLambdaV(float TdotV, float BdotV, float NdotV, float roughnessT, float roughnessB) +{ + float aT = roughnessT; + float aT2 = aT * aT; + float aB = roughnessB; + float aB2 = aB * aB; + + return sqrt(aT2 * TdotV * TdotV + aB2 * BdotV * BdotV + NdotV * NdotV); +} + +float V_SmithJointGGXAnisoLambdaV(float TdotV, float BdotV, float NdotV, float TdotL, float BdotL, float NdotL, float roughnessT, float roughnessB, float lambdaV) +{ + float aT = roughnessT; + float aT2 = aT * aT; + float aB = roughnessB; + float aB2 = aB * aB; + + lambdaV *= NdotL; + float lambdaL = NdotV * sqrt(aT2 * TdotL * TdotL + aB2 * BdotL * BdotL + NdotL * NdotL); + + return 0.5 / (lambdaV + lambdaL); +} //----------------------------------------------------------------------------- // Diffuse BRDF - diffuseColor is expected to be multiply by the caller @@ -93,17 +180,28 @@ float V_SmithJointGGX(float NdotL, float NdotV, float roughness) float Lambert() { - return INV_PI; + return 1.0; +} + +float LambertDividePI() +{ + return INV_PI; } float DisneyDiffuse(float NdotV, float NdotL, float LdotH, float perceptualRoughness) { - float fd90 = 0.5 + 2 * LdotH * LdotH * perceptualRoughness; - // Two schlick fresnel term - float lightScatter = F_Schlick(1.0, fd90, NdotL); - float viewScatter = F_Schlick(1.0, fd90, NdotV); + float fd90 = 0.5 + 2 * LdotH * LdotH * perceptualRoughness; + // Two schlick fresnel term + float lightScatter = F_Schlick(1.0, fd90, NdotL); + float viewScatter = F_Schlick(1.0, fd90, NdotV); - return INV_PI * lightScatter * viewScatter; + return lightScatter * viewScatter; } +float DisneyDiffuseDividePI(float NdotV, float NdotL, float LdotH, float perceptualRoughness) +{ + return INV_PI * DisneyDiffuse(NdotV, NdotL, LdotH, perceptualRoughness); +} + + #endif // UNITY_BSDF_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/Color.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/Color.hlsl index 2076f6ad597..323cae37484 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/Color.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/Color.hlsl @@ -1,8 +1,6 @@ #ifndef UNITY_COLOR_INCLUDED #define UNITY_COLOR_INCLUDED -#include "Common.hlsl" - //----------------------------------------------------------------------------- // Gamma space - Assume positive values //----------------------------------------------------------------------------- @@ -10,112 +8,112 @@ // Gamma20 float Gamma20ToLinear(float c) { - return c * c; + return c * c; } float3 Gamma20ToLinear(float3 c) { - return c.rgb * c.rgb; + return c.rgb * c.rgb; } float4 Gamma20ToLinear(float4 c) { - return float4(Gamma20ToLinear(c.rgb), c.a); + return float4(Gamma20ToLinear(c.rgb), c.a); } float LinearToGamma20(float c) { - return sqrt(c); + return sqrt(c); } float3 LinearToGamma20(float3 c) { - return sqrt(c.rgb); + return sqrt(c.rgb); } float4 LinearToGamma20(float4 c) { - return float4(LinearToGamma20(c.rgb), c.a); + return float4(LinearToGamma20(c.rgb), c.a); } // Gamma22 float Gamma22ToLinear(float c) { - return pow(c, 2.2); + return pow(c, 2.2); } float3 Gamma22ToLinear(float3 c) { - return pow(c.rgb, float3(2.2, 2.2, 2.2)); + return pow(c.rgb, float3(2.2, 2.2, 2.2)); } float4 Gamma22ToLinear(float4 c) { - return float4(Gamma22ToLinear(c.rgb), c.a); + return float4(Gamma22ToLinear(c.rgb), c.a); } float LinearToGamma22(float c) { - return pow(c, 0.454545454545455); + return pow(c, 0.454545454545455); } float3 LinearToGamma22(float3 c) { - return pow(c.rgb, float3(0.454545454545455, 0.454545454545455, 0.454545454545455)); + return pow(c.rgb, float3(0.454545454545455, 0.454545454545455, 0.454545454545455)); } float4 LinearToGamma22(float4 c) { - return float4(LinearToGamma22(c.rgb), c.a); + return float4(LinearToGamma22(c.rgb), c.a); } // sRGB float3 SRGBToLinear(float3 c) { - float3 linearRGBLo = c / 12.92; - float3 linearRGBHi = pow((c + 0.055) / 1.055, float3(2.4, 2.4, 2.4)); - float3 linearRGB = (c <= 0.04045) ? linearRGBLo : linearRGBHi; - return linearRGB; + float3 linearRGBLo = c / 12.92; + float3 linearRGBHi = pow((c + 0.055) / 1.055, float3(2.4, 2.4, 2.4)); + float3 linearRGB = (c <= 0.04045) ? linearRGBLo : linearRGBHi; + return linearRGB; } float4 SRGBToLinear(float4 c) { - return float4(SRGBToLinear(c.rgb), c.a); + return float4(SRGBToLinear(c.rgb), c.a); } float3 LinearToSRGB(float3 c) { - float3 sRGBLo = c * 12.92; - float3 sRGBHi = (pow(c, float3(1.0/2.4, 1.0/2.4, 1.0/2.4)) * 1.055) - 0.055; - float3 sRGB = (c <= 0.0031308) ? sRGBLo : sRGBHi; - return sRGB; + float3 sRGBLo = c * 12.92; + float3 sRGBHi = (pow(c, float3(1.0/2.4, 1.0/2.4, 1.0/2.4)) * 1.055) - 0.055; + float3 sRGB = (c <= 0.0031308) ? sRGBLo : sRGBHi; + return sRGB; } float4 LinearToSRGB(float4 c) { - return float4(LinearToSRGB(c.rgb), c.a); + return float4(LinearToSRGB(c.rgb), c.a); } // TODO: Seb - To verify and refit! // Ref: http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1 float3 FastSRGBToLinear(float3 c) { - return c * (c * (c * 0.305306011 + 0.682171111) + 0.012522878); + return c * (c * (c * 0.305306011 + 0.682171111) + 0.012522878); } float4 FastSRGBToLinear(float4 c) { - return float4(FastSRGBToLinear(c.rgb), c.a); + return float4(FastSRGBToLinear(c.rgb), c.a); } float3 FastLinearToSRGB(float3 c) { - return max(1.055 * pow(c, 0.416666667) - 0.055, 0.0); + return max(1.055 * pow(c, 0.416666667) - 0.055, 0.0); } float4 FastLinearToSRGB(float4 c) { - return float4(FastLinearToSRGB(c.rgb), c.a); + return float4(FastLinearToSRGB(c.rgb), c.a); } //----------------------------------------------------------------------------- @@ -125,18 +123,18 @@ float4 FastLinearToSRGB(float4 c) // Convert rgb to luminance // with rgb in linear space with sRGB primaries and D65 white point float Luminance(float3 linearRgb) -{ - return dot(linearRgb, float3(0.2126729f, 0.7151522f, 0.0721750f)); +{ + return dot(linearRgb, float3(0.2126729f, 0.7151522f, 0.0721750f)); } // Ref: http://realtimecollisiondetection.net/blog/?p=15 float4 PackLogLuv(float3 vRGB) { - // M matrix, for encoding - const float3x3 M = float3x3( - 0.2209, 0.3390, 0.4184, - 0.1138, 0.6780, 0.7319, - 0.0102, 0.1130, 0.2969); + // M matrix, for encoding + const float3x3 M = float3x3( + 0.2209, 0.3390, 0.4184, + 0.1138, 0.6780, 0.7319, + 0.0102, 0.1130, 0.2969); float4 vResult; float3 Xp_Y_XYZp = mul(vRGB, M); @@ -150,11 +148,11 @@ float4 PackLogLuv(float3 vRGB) float3 UnpackLogLuv(float4 vLogLuv) { - // Inverse M matrix, for decoding - const float3x3 InverseM = float3x3( - 6.0014, -2.7008, -1.7996, - -1.3320, 3.1029, -5.7721, - 0.3008, -1.0882, 5.6268); + // Inverse M matrix, for decoding + const float3x3 InverseM = float3x3( + 6.0014, -2.7008, -1.7996, + -1.3320, 3.1029, -5.7721, + 0.3008, -1.0882, 5.6268); float Le = vLogLuv.z * 255.0 + vLogLuv.w; float3 Xp_Y_XYZp; @@ -165,39 +163,63 @@ float3 UnpackLogLuv(float4 vLogLuv) return max(vRGB, float3(0.0, 0.0, 0.0)); } -// TODO: check what is really use by the lightmap... should be hardcoded -// This function must handle various crappy case of lightmap ? -float4 UnityEncodeRGBM (float3 rgb, float maxRGBM) +// TODO: This function is used with the LightTransport pass to encode lightmap or emissive +float4 PackRGBM(float3 rgb, float maxRGBM) { - float kOneOverRGBMMaxRange = 1.0 / maxRGBM; - const float kMinMultiplier = 2.0 * 1e-2; + float kOneOverRGBMMaxRange = 1.0 / maxRGBM; + const float kMinMultiplier = 2.0 * 1e-2; + + float4 rgbm = float4(rgb * kOneOverRGBMMaxRange, 1.0); + rgbm.a = max(max(rgbm.r, rgbm.g), max(rgbm.b, kMinMultiplier)); + rgbm.a = ceil(rgbm.a * 255.0) / 255.0; - float4 rgbm = float4(rgb * kOneOverRGBMMaxRange, 1.0); - rgbm.a = max(max(rgbm.r, rgbm.g), max(rgbm.b, kMinMultiplier)); - rgbm.a = ceil(rgbm.a * 255.0) / 255.0; - - // Division-by-zero warning from d3d9, so make compiler happy. - rgbm.a = max(rgbm.a, kMinMultiplier); - - rgbm.rgb /= rgbm.a; - return rgbm; + // Division-by-zero warning from d3d9, so make compiler happy. + rgbm.a = max(rgbm.a, kMinMultiplier); + + rgbm.rgb /= rgbm.a; + return rgbm; } // Alternative... #define RGBMRANGE (8.0) -float4 packRGBM(float3 color) +float4 PackRGBM(float3 color) +{ + float4 rgbm; + color *= (1.0 / RGBMRANGE); + rgbm.a = saturate( max( max( color.r, color.g ), max( color.b, 1e-6 ) ) ); + rgbm.a = ceil( rgbm.a * 255.0 ) / 255.0; + rgbm.rgb = color / rgbm.a; + return rgbm; +} + +float3 UnpackRGBM(float4 rgbm) { - float4 rgbm; - color *= (1.0 / RGBMRANGE); - rgbm.a = saturate( max( max( color.r, color.g ), max( color.b, 1e-6 ) ) ); - rgbm.a = ceil( rgbm.a * 255.0 ) / 255.0; - rgbm.rgb = color / rgbm.a; - return rgbm; + return RGBMRANGE * rgbm.rgb * rgbm.a; } -float3 unpackRGBM(float4 rgbm) +// Ref: http://www.nvidia.com/object/real-time-ycocg-dxt-compression.html +#define CHROMA_BIAS (0.5 * 256.0 / 255.0) +float3 RGBToYCoCg(float3 rgb) { - return RGBMRANGE * rgbm.rgb * rgbm.a; + float3 YCoCg; + YCoCg.x = dot(rgb, float3(0.25, 0.5, 0.25)); + YCoCg.y = dot(rgb, float3(0.5, 0.0, -0.5)) + CHROMA_BIAS; + YCoCg.z = dot(rgb, float3(-0.25, 0.5, -0.25)) + CHROMA_BIAS; + + return YCoCg; } -#endif // UNITY_COLOR_INCLUDED \ No newline at end of file +float3 YCoCgToRGB(float3 YCoCg) +{ + float Y = YCoCg.x; + float Co = YCoCg.y - CHROMA_BIAS; + float Cg = YCoCg.z - CHROMA_BIAS; + + float3 rgb; + rgb.r = Y + Co - Cg; + rgb.g = Y + Cg; + rgb.b = Y - Co - Cg; + + return rgb; +} +#endif // UNITY_COLOR_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/Common.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/Common.hlsl index 458aad47917..bf60abe5a71 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/Common.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/Common.hlsl @@ -2,6 +2,9 @@ #define UNITY_COMMON_INCLUDED // Convention: + +// Unity is Y up - left handed + // space at the end of the variable name // WS: world space // VS: view space @@ -32,7 +35,7 @@ // constant floating number written as 1.0 (not 1, not 1.0f, not 1.0h) -// uniform have g_ as prefix (still lowercaseThenCamelCase) +// uniform have _ as prefix + uppercase _LowercaseThenCamelCase // Structure definition that are share between C# and hlsl. // These structures need to be align on float4 to respectect various packing rules from sahder language. @@ -44,6 +47,8 @@ // When declaring "out" argument of function, they are always last +// headers from ShaderLibrary do not include "common.hlsl", this should be included in the .shader using it (or Material.hlsl) + // Include language header #if defined(SHADER_API_D3D11) @@ -59,24 +64,26 @@ // Common math definition and fastmath function // ---------------------------------------------------------------------------- -#define PI 3.14159265359f -#define TWO_PI 6.28318530718f -#define FOUR_PI 12.56637061436f -#define INV_PI 0.31830988618f -#define INV_TWO_PI 0.15915494309f -#define INV_FOUR_PI 0.07957747155f -#define HALF_PI 1.57079632679f -#define INV_HALF_PI 0.636619772367f +#define PI 3.14159265359 +#define TWO_PI 6.28318530718 +#define FOUR_PI 12.56637061436 +#define INV_PI 0.31830988618 +#define INV_TWO_PI 0.15915494309 +#define INV_FOUR_PI 0.07957747155 +#define HALF_PI 1.57079632679 +#define INV_HALF_PI 0.636619772367 + +#define FLT_EPSILON 1.192092896e-07f // smallest such that 1.0 + FLT_EPSILON != 1.0 #define MERGE_NAME(X, Y) X##Y // Ref: https://seblagarde.wordpress.com/2014/12/01/inverse-trigonometric-functions-gpu-optimization-for-amd-gcn-architecture/ -float FastACos(float inX) -{ - float x = abs(inX); - float res = -0.156583 * x + HALF_PI; - res *= sqrt(1.0 - x); - return (inX >= 0) ? res : PI - res; +float FastACos(float inX) +{ + float x = abs(inX); + float res = -0.156583 * x + HALF_PI; + res *= sqrt(1.0 - x); + return (inX >= 0) ? res : PI - res; } // Same cost as Acos + 1 FR @@ -91,8 +98,8 @@ float FastASin(float x) // Eberly's odd polynomial degree 5 - respect bounds // 4 VGPR, 14 FR (10 FR, 1 QR), 2 scalar // input [0, infinity] and output [0, PI/2] -float FastATanPos(float x) -{ +float FastATanPos(float x) +{ float t0 = (x < 1.0) ? x : 1.0 / x; float t1 = t0 * t0; float poly = 0.0872929; @@ -105,9 +112,15 @@ float FastATanPos(float x) // 4 VGPR, 16 FR (12 FR, 1 QR), 2 scalar // input [-infinity, infinity] and output [-PI/2, PI/2] float FastATan(float x) -{ - float t0 = FastATanPos(abs(x)); - return (x < 0.0f) ? -t0 : t0; +{ + float t0 = FastATanPos(abs(x)); + return (x < 0.0) ? -t0 : t0; +} + +// Same smoothstep except it assume 0, 1 interval for x +float smoothstep01(float x) +{ + return x * x * (3.0 - (2.0 * x)); } // ---------------------------------------------------------------------------- @@ -116,30 +129,30 @@ float FastATan(float x) struct Coordinate { - // Normalize coordinates - float2 positionSS; - // Unormalize coordinates - int2 unPositionSS; + // Normalize coordinates + float2 positionSS; + // Unormalize coordinates + int2 unPositionSS; }; // This function is use to provide an easy way to sample into a screen texture, either from a pixel or a compute shaders. // This allow to easily share code. -// If a compute shader call this function inPositionSS is an interger usually calculate like: uint2 inPositionSS = groupId.xy * BLOCK_SIZE + groupThreadId.xy +// If a compute shader call this function inPositionSS is an integer usually calculate like: uint2 inPositionSS = groupId.xy * BLOCK_SIZE + groupThreadId.xy // else it is current unormalized screen coordinate like return by VPOS Coordinate GetCoordinate(float2 inPositionSS, float2 invScreenSize) { - Coordinate coord; - coord.positionSS = inPositionSS; - // TODO: How to detect automatically that we are a compute shader ? + Coordinate coord; + coord.positionSS = inPositionSS; + // TODO: How to detect automatically that we are a compute shader ? #if SHADER_STAGE_COMPUTE - // In case of compute shader an extra half offset is added to the screenPos to shift the integer position to pixel center. - coord.positionSS.xy += float2(0.5, 0.5); + // In case of compute shader an extra half offset is added to the screenPos to shift the integer position to pixel center. + coord.positionSS.xy += float2(0.5, 0.5); #endif - coord.positionSS *= invScreenSize; + coord.positionSS *= invScreenSize; - coord.unPositionSS = int2(inPositionSS); + coord.unPositionSS = int2(inPositionSS); - return coord; + return coord; } // screenPos is screen coordinate in [0..1] (return by Coordinate.positionSS) @@ -147,10 +160,10 @@ Coordinate GetCoordinate(float2 inPositionSS, float2 invScreenSize) // For information. In Unity Depth is always in range 0..1 (even on OpenGL) but can be reversed. float3 UnprojectToWorld(float depth, float2 screenPos, float4x4 invViewProjectionMatrix) { - float4 positionHS = float4(screenPos.xy * 2.0 - 1.0, depth, 1.0); - float4 hpositionWS = mul(invViewProjectionMatrix, positionHS); + float4 positionHS = float4(screenPos.xy * 2.0 - 1.0, depth, 1.0); + float4 hpositionWS = mul(invViewProjectionMatrix, positionHS); - return hpositionWS.xyz / hpositionWS.w; + return hpositionWS.xyz / hpositionWS.w; } // Z buffer to linear 0..1 depth @@ -164,4 +177,27 @@ float LinearEyeDepth(float depth, float4 zBufferParam) return 1.0 / (zBufferParam.z * depth + zBufferParam.w); } -#endif // UNITY_COMMON_INCLUDED \ No newline at end of file +// NdotV should not be negative for visible pixels, but it can happen due to perspective projection and normal mapping + decal +// In this case this may cause weird artifact. +// GetNdotV return a 'valid' data +float GetNdotV(float3 N, float3 V) +{ + return abs(dot(N, V)); // This abs allow to limit artifact +} + +// NdotV should not be negative for visible pixels, but it can happen due to perspective projection and normal mapping + decal +// In this case normal should be modified to become valid (i.e facing camera) and not cause weird artifacts. +// but this operation adds few ALU and users may not want it. Alternative is to simply take the abs of NdotV (less correct but works too). +// Note: This code is not compatible with two sided lighting used in SpeedTree (TODO: investigate). +float GetShiftedNdotV(float3 N, float3 V) +{ + // The amount we shift the normal toward the view vector is defined by the dot product. + float shiftAmount = dot(N, V); + N = shiftAmount < 0.0 ? N + V * (-shiftAmount + 1e-5f) : N; + N = normalize(N); + + return saturate(dot(N, V)); // TODO: this saturate should not be necessary here +} + + +#endif // UNITY_COMMON_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/CommonLighting.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/CommonLighting.hlsl index 792ee6c3921..7348dcf4866 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/CommonLighting.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/CommonLighting.hlsl @@ -1,7 +1,8 @@ #ifndef UNITY_COMMON_LIGHTING_INCLUDED #define UNITY_COMMON_LIGHTING_INCLUDED -#include "Common.hlsl" +// Ligthing convention +// Light direction is oriented backward (-Z). i.e in shader code, light direction is - lightData.forward //----------------------------------------------------------------------------- // Attenuation functions @@ -10,31 +11,122 @@ // Ref: Moving Frostbite to PBR float SmoothDistanceAttenuation(float squaredDistance, float invSqrAttenuationRadius) { - float factor = squaredDistance * invSqrAttenuationRadius; - float smoothFactor = saturate(1.0f - factor * factor); - return smoothFactor * smoothFactor; + float factor = squaredDistance * invSqrAttenuationRadius; + float smoothFactor = saturate(1.0f - factor * factor); + return smoothFactor * smoothFactor; } #define PUNCTUAL_LIGHT_THRESHOLD 0.01 // 1cm (in Unity 1 is 1m) float GetDistanceAttenuation(float3 unL, float invSqrAttenuationRadius) { - float sqrDist = dot(unL, unL); - float attenuation = 1.0f / (max(PUNCTUAL_LIGHT_THRESHOLD * PUNCTUAL_LIGHT_THRESHOLD, sqrDist)); - // Non physically based hack to limit light influence to attenuationRadius. - attenuation *= SmoothDistanceAttenuation(sqrDist, invSqrAttenuationRadius); + float sqrDist = dot(unL, unL); + float attenuation = 1.0f / (max(PUNCTUAL_LIGHT_THRESHOLD * PUNCTUAL_LIGHT_THRESHOLD, sqrDist)); + // Non physically based hack to limit light influence to attenuationRadius. + attenuation *= SmoothDistanceAttenuation(sqrDist, invSqrAttenuationRadius); - return attenuation; + return attenuation; } float GetAngleAttenuation(float3 L, float3 lightDir, float lightAngleScale, float lightAngleOffset) { - float cd = dot(lightDir, L); - float attenuation = saturate(cd * lightAngleScale + lightAngleOffset); - // smooth the transition - attenuation *= attenuation; + float cd = dot(lightDir, L); + float attenuation = saturate(cd * lightAngleScale + lightAngleOffset); + // smooth the transition + attenuation *= attenuation; - return attenuation; + return attenuation; } -#endif // UNITY_COMMON_LIGHTING_INCLUDED \ No newline at end of file +//----------------------------------------------------------------------------- +// Helper function for anisotropy +//----------------------------------------------------------------------------- + +// Ref: http://blog.selfshadow.com/publications/s2012-shading-course/burley/s2012_pbs_disney_brdf_notes_v3.pdf (in addenda) +// Convert anisotropic ratio (0->no isotropic; 1->full anisotropy in tangent direction) to roughness +void ConvertAnisotropyToRoughness(float roughness, float anisotropy, out float roughnessT, out float roughnessB) +{ + float anisoAspect = sqrt(1.0 - 0.9 * anisotropy); + roughnessT = roughness * anisoAspect; + roughnessB = roughness / anisoAspect; +} + +// Fake anisotropic by distorting the normal as suggested by: +// Ref: Donald Revie - Implementing Fur Using Deferred Shading (GPU Pro 2) +// anisotropic ratio (0->no isotropic; 1->full anisotropy in tangent direction) +float3 GetAnisotropicModifiedNormal(float3 N, float3 T, float3 V, float anisotropy) +{ + float3 anisoT = cross(-V, T); + float3 anisoN = cross(anisoT, T); + + return normalize(lerp(N, anisoN, anisotropy)); +} + +//----------------------------------------------------------------------------- +// Helper function for perceptual roughness +//----------------------------------------------------------------------------- + +float PerceptualRoughnessToRoughness(float perceptualRoughness) +{ + return perceptualRoughness * perceptualRoughness; +} + +float RoughnessToPerceptualRoughness(float roughness) +{ + return sqrt(roughness); +} + +float PerceptualSmoothnessToRoughness(float perceptualSmoothness) +{ + return (1 - perceptualSmoothness) * (1 - perceptualSmoothness); +} + +float PerceptualSmoothnessToPerceptualRoughness(float perceptualSmoothness) +{ + return (1 - perceptualSmoothness); +} + + +//----------------------------------------------------------------------------- +// Get local frame +//----------------------------------------------------------------------------- + +// generate an orthonormalBasis from 3d unit vector. +void GetLocalFrame(float3 N, out float3 tangentX, out float3 tangentY) +{ + float3 upVector = abs(N.z) < 0.999 ? float3(0.0, 0.0, 1.0) : float3(1.0, 0.0, 0.0); + tangentX = normalize(cross(upVector, N)); + tangentY = cross(N, tangentX); +} + +// TODO: test +/* +// http://orbit.dtu.dk/files/57573287/onb_frisvad_jgt2012.pdf +void GetLocalFrame(float3 N, out float3 tangentX, out float3 tangentY) +{ + if (N.z < -0.999) // Handle the singularity + { + tangentX = float3(0.0, -1.0, 0.0); + tangentY = float3(-1.0, 0.0, 0.0); + return ; + } + + float a = 1.0 / (1.0 + N.z); + float b = -N.x * N.y * a; + tangentX = float3(1.0f - N.x * N.x * a , b, -N.x); + tangentY = float3(b, 1.0f - N.y * N.y * a, -N.y); +} +*/ + +// ---------------------------------------------------------------------------- +// Parallax mapping +// ---------------------------------------------------------------------------- + +float2 ParallaxOffset(float3 viewDirTS, float height) +{ + // Parallax mapping with offset limiting to reduce weird artifcat (i.e do not divide by z), also save performance + return viewDirTS.xy * height; +} + + +#endif // UNITY_COMMON_LIGHTING_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/Debug.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/Debug.hlsl new file mode 100644 index 00000000000..1deb4097896 --- /dev/null +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/Debug.hlsl @@ -0,0 +1,34 @@ +#ifndef UNITY_DEBUG_INCLUDED +#define UNITY_DEBUG_INCLUDED + +// Given an enum (represented by an int here), return a color. +// Use for DebugView of enum +float3 GetIndexColor(int index) +{ + float3 outColor = float3(1.0, 0.0, 0.0); + + if (index == 0) + outColor = float3(1.0, 0.5, 0.5); + else if (index == 1) + outColor = float3(0.5, 1.0, 0.5); + else if (index == 2) + outColor = float3(0.5, 0.5, 1.0); + else if (index == 3) + outColor = float3(1.0, 1.0, 0.5); + else if (index == 4) + outColor = float3(1.0, 0.5, 1.0); + else if (index == 5) + outColor = float3(0.5, 1.0, 1.0); + else if (index == 6) + outColor = float3(0.25, 0.75, 1.0); + else if (index == 7) + outColor = float3(1.0, 0.75, 0.25); + else if (index == 8) + outColor = float3(0.75, 1.0, 0.25); + else if (index == 9) + outColor = float3(0.75, 0.25, 1.0); + + return outColor; +} + +#endif // UNITY_DEBUG_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/Debug.hlsl.meta b/Assets/ScriptableRenderLoop/ShaderLibrary/Debug.hlsl.meta new file mode 100644 index 00000000000..5423ffc257b --- /dev/null +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/Debug.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 90f3145f58b7eb44cb4252ac2a3ab258 +timeCreated: 1476051069 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/Filtering.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/Filtering.hlsl index 58ab578871c..c94dcc0f9ab 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/Filtering.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/Filtering.hlsl @@ -23,11 +23,11 @@ float4 SampleTextureCatmullRom(Texture2D tex, SamplerState linearSampler float2 w2 = (1.0f / 6.0) * (-9.0 * f3 + 12.0 * f2 + 3.0 * f); float2 w3 = (1.0f / 6.0) * (3.0 * f3 - 3.0 * f2); - // Otim by Vlad, to test - // float2 w0 = (1.0 / 2.0) * f * (-1.0 + f * (2.0 - f)); - // float2 w1 = (1.0 / 6.0) * f2 * (-15.0 + 9.0 * f)) + 1.0; - // float2 w2 = (1.0 / 6.0) * f * (3.0 + f * (12.0 - f * 9.0)); - // float2 w3 = (1.0 / 2.0) * f2 * (f - 1.0); + // Otim by Vlad, to test + // float2 w0 = (1.0 / 2.0) * f * (-1.0 + f * (2.0 - f)); + // float2 w1 = (1.0 / 6.0) * f2 * (-15.0 + 9.0 * f)) + 1.0; + // float2 w2 = (1.0 / 6.0) * f * (3.0 + f * (12.0 - f * 9.0)); + // float2 w3 = (1.0 / 2.0) * f2 * (f - 1.0); // Work out weighting factors and sampling offsets that will let us use bilinear filtering to // simultaneously evaluate the middle 2 samples from the 4x4 grid. @@ -79,4 +79,4 @@ mix( texture3D( samp, (qi+vec3(0.0,1.0,1.0))*oneOverUvMapSize ), texture3D( samp, (qi+vec3(1.0,1.0,1.0))*oneOverUvMapSize ), qa.x ), qa.y ), qa.z ); } -*/ \ No newline at end of file +*/ diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/GeometricTools.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/GeometricTools.hlsl index 9c1c9523ca6..baa34b336ac 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/GeometricTools.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/GeometricTools.hlsl @@ -1,6 +1,101 @@ #ifndef UNITY_GEOMETRICTOOLS_INCLUDED #define UNITY_GEOMETRICTOOLS_INCLUDED -#include "Common.hlsl" +//----------------------------------------------------------------------------- +// Intersection functions +//----------------------------------------------------------------------------- + +// return furthest near intersection in x and closest far intersection in y +// if (intersections.y > intersections.x) the ray hit the box, else it miss it +// Assume dir is normalize +float2 BoxRayIntersect(float3 start, float3 dir, float3 boxMin, float3 boxMax) +{ + float3 invDir = 1.0 / dir; + + // Find the ray intersection with box plane + float3 firstPlaneIntersect = (boxMin - start) * invDir; + float3 secondPlaneIntersect = (boxMax - start) * invDir; + + // Get the closest/furthest of these intersections along the ray (Ok because x/0 give +inf and -x/0 give �inf ) + float3 closestPlane = min(firstPlaneIntersect, secondPlaneIntersect); + float3 furthestPlane = max(firstPlaneIntersect, secondPlaneIntersect); + + float2 intersections; + // Find the furthest near intersection + intersections.x = max(closestPlane.x, max(closestPlane.y, closestPlane.z)); + // Find the closest far intersection + intersections.y = min(min(furthestPlane.x, furthestPlane.y), furthestPlane.z); + + return intersections; +} + +// This simplified version assume that we care about the result only when we are inside the box +// Assume dir is normalize +float BoxRayIntersectSimple(float3 start, float3 dir, float3 boxMin, float3 boxMax) +{ + float3 invDir = 1.0 / dir; + + // Find the ray intersection with box plane + float3 rbmin = (boxMin - start) * invDir; + float3 rbmax = (boxMax - start) * invDir; + + float3 rbminmax = (dir > 0.0) ? rbmax : rbmin; + + return min(min(rbminmax.x, rbminmax.y), rbminmax.z); +} + +// Assume Sphere is at the origin (i.e start = position - spherePosition) +float2 SphereRayIntersect(float3 start, float3 dir, float radius, out bool intersect) +{ + float a = dot(dir, dir); + float b = dot(dir, start) * 2.0; + float c = dot(start, start) - radius * radius; + float discriminant = b * b - 4.0 * a * c; + + float2 intersections = float2(0.0, 0.0); + intersect = false; + if (discriminant < 0.0 || a == 0.0) + { + intersections.x = 0.0; + intersections.y = 0.0; + } + else + { + float sqrtDiscriminant = sqrt(discriminant); + intersections.x = (-b - sqrtDiscriminant) / (2.0 * a); + intersections.y = (-b + sqrtDiscriminant) / (2.0 * a); + intersect = true; + } + + return intersections; +} + +// This simplified version assume that we care about the result only when we are inside the sphere +// Assume Sphere is at the origin (i.e start = position - spherePosition) and dir is normalized +// Ref: http://http.developer.nvidia.com/GPUGems/gpugems_ch19.html +float SphereRayIntersectSimple(float3 start, float3 dir, float radius) +{ + float b = dot(dir, start) * 2.0; + float c = dot(start, start) - radius * radius; + float discriminant = b * b - 4.0 * c; + + return abs(sqrt(discriminant) - b) * 0.5; +} + +float3 RayPlaneIntersect(in float3 rayOrigin, in float3 rayDirection, in float3 planeOrigin, in float3 planeNormal) +{ + float dist = dot(planeNormal, planeOrigin - rayOrigin) / dot(planeNormal, rayDirection); + return rayOrigin + rayDirection * dist; +} + +//----------------------------------------------------------------------------- +// Distance functions +//----------------------------------------------------------------------------- + +// Box is AABB +float DistancePointBox(float3 position, float3 boxMin, float3 boxMax) +{ + return length(max(max(position - boxMax, boxMin - position), float3(0.0, 0.0, 0.0))); +} #endif // UNITY_GEOMETRICTOOLS_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/ImageBasedLighting.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/ImageBasedLighting.hlsl new file mode 100644 index 00000000000..976faadc4ae --- /dev/null +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/ImageBasedLighting.hlsl @@ -0,0 +1,297 @@ +#ifndef UNITY_IMAGE_BASED_LIGHTING_INCLUDED +#define UNITY_IMAGE_BASED_LIGHTING_INCLUDED + +#include "CommonLighting.hlsl" +#include "BSDF.hlsl" +#include "Sampling.hlsl" + +//----------------------------------------------------------------------------- +// Util image based lighting +//----------------------------------------------------------------------------- + +// TODO: We need to change this hard limit! +#define UNITY_SPECCUBE_LOD_STEPS (6) + +float perceptualRoughnessToMipmapLevel(float perceptualRoughness) +{ + // TODO: Clean a bit this code + // CAUTION: remap from Morten may work only with offline convolution, see impact with runtime convolution! + + // For now disabled +#if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m*m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + + n /= 4.0; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + + perceptualRoughness = pow(2.0 / (n + 2.0), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) +#else + // MM: came up with a surprisingly close approximation to what the #if 0'ed out code above does. + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); +#endif + + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; +} + +// Ref: See "Moving Frostbite to PBR" Listing 22 +// This formulation is for GGX only (with smith joint visibility or regular) +float3 GetSpecularDominantDir(float3 N, float3 R, float roughness) +{ + float a = 1.0 - roughness; + float lerpFactor = a * (sqrt(a) + roughness); + // The result is not normalized as we fetch in a cubemap + return lerp(N, R, lerpFactor); +} + +//----------------------------------------------------------------------------- +// Anisotropic image based lighting +//----------------------------------------------------------------------------- +// To simulate the streching of highlight at grazing angle for IBL we shrink the roughness +// which allow to fake an anisotropic specular lobe. +// Ref: http://www.frostbite.com/2015/08/stochastic-screen-space-reflections/ - slide 84 +float AnisotropicStrechAtGrazingAngle(float roughness, float perceptualRoughness, float NdotV) +{ + return roughness * lerp(saturate(NdotV * 2.0), 1.0, perceptualRoughness); +} + +// ---------------------------------------------------------------------------- +// Importance sampling BSDF functions +// ---------------------------------------------------------------------------- + +void ImportanceSampleCosDir(float2 u, + float3 N, + float3 tangentX, + float3 tangentY, + out float3 L) +{ + // Cosine sampling - ref: http://www.rorydriscoll.com/2009/01/07/better-sampling/ + float cosTheta = sqrt(max(0.0, 1.0 - u.x)); + float sinTheta = sqrt(u.x); + float phi = TWO_PI * u.y; + + // Transform from spherical into cartesian + L = float3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); + // Local to world + L = tangentX * L.x + tangentY * L.y + N * L.z; +} + +void ImportanceSampleGGXDir(float2 u, + float3 V, + float3 N, + float3 tangentX, + float3 tangentY, + float roughness, + out float3 H, + out float3 L) +{ + // GGX NDF sampling + float cosThetaH = sqrt((1.0 - u.x) / (1.0 + (roughness * roughness - 1.0) * u.x)); + float sinThetaH = sqrt(max(0.0, 1.0 - cosThetaH * cosThetaH)); + float phiH = TWO_PI * u.y; + + // Transform from spherical into cartesian + H = float3(sinThetaH * cos(phiH), sinThetaH * sin(phiH), cosThetaH); + // Local to world + H = tangentX * H.x + tangentY * H.y + N * H.z; + + // Convert sample from half angle to incident angle + L = 2.0 * dot(V, H) * H - V; +} + +// weightOverPdf return the weight (without the diffuseAlbedo term) over pdf. diffuseAlbedo term must be apply by the caller. +void ImportanceSampleLambert( + float2 u, + float3 N, + float3 tangentX, + float3 tangentY, + out float3 L, + out float NdotL, + out float weightOverPdf) +{ + ImportanceSampleCosDir(u, N, tangentX, tangentY, L); + + NdotL = saturate(dot(N, L)); + + // Importance sampling weight for each sample + // pdf = N.L / PI + // weight = fr * (N.L) with fr = diffuseAlbedo / PI + // weight over pdf is: + // weightOverPdf = (diffuseAlbedo / PI) * (N.L) / (N.L / PI) + // weightOverPdf = diffuseAlbedo + // diffuseAlbedo is apply outside the function + + weightOverPdf = 1.0; +} + +// weightOverPdf return the weight (without the Fresnel term) over pdf. Fresnel term must be apply by the caller. +void ImportanceSampleGGX( + float2 u, + float3 V, + float3 N, + float3 tangentX, + float3 tangentY, + float roughness, + float NdotV, + out float3 L, + out float VdotH, + out float NdotL, + out float weightOverPdf) +{ + float3 H; + ImportanceSampleGGXDir(u, V, N, tangentX, tangentY, roughness, H, L); + + float NdotH = saturate(dot(N, H)); + // Note: since L and V are symmetric around H, LdotH == VdotH + VdotH = saturate(dot(V, H)); + NdotL = saturate(dot(N, L)); + + // Importance sampling weight for each sample + // pdf = D(H) * (N.H) / (4 * (L.H)) + // weight = fr * (N.L) with fr = F(H) * G(V, L) * D(H) / (4 * (N.L) * (N.V)) + // weight over pdf is: + // weightOverPdf = F(H) * G(V, L) * (L.H) / ((N.H) * (N.V)) + // weightOverPdf = F(H) * 4 * (N.L) * V(V, L) * (L.H) / (N.H) with V(V, L) = G(V, L) / (4 * (N.L) * (N.V)) + // Remind (L.H) == (V.H) + // F is apply outside the function + + float Vis = V_SmithJointGGX(NdotL, NdotV, roughness); + weightOverPdf = 4.0 * Vis * NdotL * VdotH / NdotH; +} + +// ---------------------------------------------------------------------------- +// Pre-integration +// ---------------------------------------------------------------------------- + +// Ref: Listing 18 in "Moving Frostbite to PBR" + https://knarkowicz.wordpress.com/2014/12/27/analytical-dfg-term-for-ibl/ +float4 IntegrateGGXAndDisneyFGD(float3 V, float3 N, float roughness, uint sampleCount) +{ + float NdotV = saturate(dot(N, V)); + float4 acc = float4(0.0, 0.0, 0.0, 0.0); + // Add some jittering on Hammersley2d + float2 randNum = InitRandom(V.xy * 0.5 + 0.5); + + float3 tangentX, tangentY; + GetLocalFrame(N, tangentX, tangentY); + + for (uint i = 0; i < sampleCount; ++i) + { + float2 u = Hammersley2d(i, sampleCount); + u = frac(u + randNum + 0.5); + + float VdotH; + float NdotL; + float weightOverPdf; + + float3 L; // Unused + ImportanceSampleGGX(u, V, N, tangentX, tangentY, roughness, NdotV, + L, VdotH, NdotL, weightOverPdf); + + if (NdotL > 0.0) + { + // Integral is + // 1 / NumSample * \int[ L * fr * (N.L) / pdf ] with pdf = D(H) * (N.H) / (4 * (L.H)) and fr = F(H) * G(V, L) * D(H) / (4 * (N.L) * (N.V)) + // This is split in two part: + // A) \int[ L * (N.L) ] + // B) \int[ F(H) * 4 * (N.L) * V(V, L) * (L.H) / (N.H) ] with V(V, L) = G(V, L) / (4 * (N.L) * (N.V)) + // = \int[ F(H) * weightOverPdf ] + + // Recombine at runtime with: ( f0 * weightOverPdf * (1 - Fc) + f90 * weightOverPdf * Fc ) with Fc =(1 - V.H)^5 + float Fc = pow(1.0 - VdotH, 5.0); + acc.x += (1.0 - Fc) * weightOverPdf; + acc.y += Fc * weightOverPdf; + } + + // for Disney we still use a Cosine importance sampling, true Disney importance sampling imply a look up table + ImportanceSampleLambert(u, N, tangentX, tangentY, L, NdotL, weightOverPdf); + + if (NdotL > 0.0) + { + float3 H = normalize(L + V); + float LdotH = dot(L, H); + float disneyDiffuse = DisneyDiffuse(NdotV, NdotL, LdotH, RoughnessToPerceptualRoughness(roughness)); + + acc.z += disneyDiffuse * weightOverPdf; + } + } + + return acc / sampleCount; +} + +// Ref: Listing 19 in "Moving Frostbite to PBR" +float4 IntegrateLD( UNITY_ARGS_TEXCUBE(tex), + float3 V, + float3 N, + float roughness, + float mipmapcount, + float invOmegaP, + uint sampleCount, + bool prefilter = true) // static bool +{ + float3 acc = float3(0.0, 0.0, 0.0); + float accWeight = 0; + + float2 randNum = InitRandom(V.xy * 0.5 + 0.5); + + float3 tangentX, tangentY; + GetLocalFrame(N, tangentX, tangentY); + + for (uint i = 0; i < sampleCount; ++i) + { + float2 u = Hammersley2d(i, sampleCount); + u = frac(u + randNum + 0.5); + + float3 H; + float3 L; + ImportanceSampleGGXDir(u, V, N, tangentX, tangentY, roughness, H, L); + + float NdotL = saturate(dot(N,L)); + + float mipLevel; + + if (!prefilter) // BRDF importance sampling + { + mipLevel = 0.0; + } + else // Prefiltered BRDF importance sampling + { + float NdotH = saturate(dot(N, H)); + // Note: since L and V are symmetric around H, LdotH == VdotH + float LdotH = saturate(dot(L, H)); + + // Use pre - filtered importance sampling (i.e use lower mipmap + // level for fetching sample with low probability in order + // to reduce the variance ). + // ( Reference : GPU Gem3: http://http.developer.nvidia.com/GPUGems3/gpugems3_ch20.html) + // + // Since we pre - integrate the result for normal direction , + // N == V and then NdotH == LdotH . This is why the BRDF pdf + // can be simplifed from : + // pdf = D * NdotH /(4* LdotH ) to pdf = D / 4; + // + // - OmegaS : Solid angle associated to a sample + // - OmegaP : Solid angle associated to a pixel of the cubemap + + float pdf = D_GGXDividePI(NdotH, roughness) * NdotH / (4.0 * LdotH); + float omegaS = 1.0 / (sampleCount * pdf); // Solid angle associated to a sample + // invOmegaP is precomputed on CPU and provide as a parameter of the function + // float omegaP = FOUR_PI / (6.0f * cubemapWidth * cubemapWidth); // Solid angle associated to a pixel of the cubemap + // Clamp is not necessary as the hardware will do it. + // mipLevel = clamp(0.5f * log2(omegaS * invOmegaP), 0, mipmapcount); + mipLevel = 0.5 * log2(omegaS * invOmegaP); // Clamp is not necessary as the hardware will do it. + } + + if (NdotL > 0.0f) + { + float3 val = UNITY_SAMPLE_TEXCUBE_LOD(tex, L, mipLevel).rgb; + + // See p63 equation (53) of moving Frostbite to PBR v2 for the extra NdotL here (both in weight and value) + acc += val * NdotL; + accWeight += NdotL; + } + } + + return float4(acc * (1.0 / accWeight), 1.0); +} + +#endif // UNITY_IMAGE_BASED_LIGHTING_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/ImageBasedLighting.hlsl.meta b/Assets/ScriptableRenderLoop/ShaderLibrary/ImageBasedLighting.hlsl.meta new file mode 100644 index 00000000000..618129258b1 --- /dev/null +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/ImageBasedLighting.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ae4dc0bfd9fc0b544a109513ba841d30 +timeCreated: 1476117021 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/Packing.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/Packing.hlsl index 816378b72ab..31b11177068 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/Packing.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/Packing.hlsl @@ -1,31 +1,29 @@ #ifndef UNITY_PACKING_INCLUDED #define UNITY_PACKING_INCLUDED -#include "Common.hlsl" - //----------------------------------------------------------------------------- // Normal packing //----------------------------------------------------------------------------- float3 PackNormalCartesian(float3 n) { - return n * 0.5 + 0.5; + return n * 0.5 + 0.5; } float3 UnpackNormalCartesian(float3 n) { - return normalize(n * 2.0 - 1.0); + return normalize(n * 2.0 - 1.0); } float3 PackNormalMaxComponent(float3 n) { - // TODO: use max3 - return (n / max(abs(n.x), max(abs(n.y), abs(n.z)))) * 0.5 + 0.5; + // TODO: use max3 + return (n / max(abs(n.x), max(abs(n.y), abs(n.z)))) * 0.5 + 0.5; } float3 UnpackNormalMaxComponent(float3 n) { - return normalize(n * 2.0 - 1.0); + return normalize(n * 2.0 - 1.0); } // Ref: http://jcgt.org/published/0003/02/01/paper.pdf @@ -33,29 +31,92 @@ float3 UnpackNormalMaxComponent(float3 n) // return float between [-1, 1] float2 PackNormalOctEncode(float3 n) { - float l1norm = abs(n.x) + abs(n.y) + abs(n.z); - float2 res0 = n.xy * (1.0 / l1norm); + float l1norm = abs(n.x) + abs(n.y) + abs(n.z); + float2 res0 = n.xy * (1.0 / l1norm); - float2 val = 1.0 - abs(res0.yx); - return (n.zz < float2(0.0, 0.0) ? (res0 >= 0.0 ? val : -val) : res0); + float2 val = 1.0 - abs(res0.yx); + return (n.zz < float2(0.0, 0.0) ? (res0 >= 0.0 ? val : -val) : res0); } float3 UnpackNormalOctEncode(float2 f) { - float3 n = float3(f.x, f.y, 1.0 - abs(f.x) - abs(f.y)); + float3 n = float3(f.x, f.y, 1.0 - abs(f.x) - abs(f.y)); + + float2 val = 1.0 - abs(n.yx); + n.xy = (n.zz < float2(0.0, 0.0) ? (n.xy >= 0.0 ? val : -val) : n.xy); + + return normalize(n); +} + +float3 UnpackNormalAG(float4 packedNormal) +{ + float3 normal; + normal.xy = packedNormal.wy * 2.0 - 1.0; + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; +} + +// Unpack normal as DXT5nm (1, y, 0, x) or BC5 (x, y, 0, 1) +float3 UnpackNormalmapRGorAG(float4 packedNormal) +{ + // This do the trick + packedNormal.x *= packedNormal.w; + + float3 normal; + normal.xy = packedNormal.xy * 2.0 - 1.0; + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; +} + +//----------------------------------------------------------------------------- +// Quaternion packing +//----------------------------------------------------------------------------- + +// Ref: https://cedec.cesa.or.jp/2015/session/ENG/14698.html The Rendering Materials of Far Cry 4 + +/* +// This is GCN intrinsic +uint FindBiggestComponent(float4 q) +{ + uint xyzIndex = CubeMapFaceID(q.x, q.y, q.z) * 0.5f; + uint wIndex = 3; - float2 val = 1.0 - abs(n.yx); - n.xy = (n.zz < float2(0.0, 0.0) ? (n.xy >= 0.0 ? val : -val) : n.xy); + bool wBiggest = abs(q.w) > max3(abs(q.x), qbs(q.y), qbs(q.z)); - return normalize(n); + return wBiggest ? wIndex : xyzIndex; } -float3 UnpackNormalDXT5nm (float4 packednormal) +// Pack a quaternion into a 10:10:10:2 +float4 PackQuat(float4 quat) { - float3 normal; - normal.xy = packednormal.wy * 2.0 - 1.0; - normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); - return normal; + uint index = FindBiggestComponent(quat); + + if (index == 0) quat = quat.yzwx; + if (index == 1) quat = quat.xzwy; + if (index == 2) quat = quat.xywz; + + float4 packedQuat; + packedQuat.xyz = quat.xyz * sign(quat.w) * sqrt(0.5) + 0.5; + packedQuat.w = index / 3.0; + + return packedQuat; +} +*/ + +// Unpack a quaternion from a 10:10:10:2 +float4 UnpackQuat(float4 packedQuat) +{ + uint index = (uint)(packedQuat.w * 3.0); + + float4 quat; + quat.xyz = packedQuat.xyz * sqrt(2.0) - (1.0 / sqrt(2.0)); + quat.w = sqrt(1.0 - saturate(dot(quat.xyz, quat.xyz))); + + if (index == 0) quat = quat.wxyz; + if (index == 1) quat = quat.xwyz; + if (index == 2) quat = quat.xywz; + + return quat; } //----------------------------------------------------------------------------- @@ -64,20 +125,20 @@ float3 UnpackNormalDXT5nm (float4 packednormal) float Pack2Byte(float2 inputs) { - float2 temp = inputs * float2(255.0, 255.0); - temp.x *= 256.0; - temp = round(temp); - float combined = temp.x + temp.y; - return combined * (1.0 / 65535.0); + float2 temp = inputs * float2(255.0, 255.0); + temp.x *= 256.0; + temp = round(temp); + float combined = temp.x + temp.y; + return combined * (1.0 / 65535.0); } float2 Unpack2Byte(float inputs) { - float temp = round(inputs * 65535.0); - float ipart; - float fpart = modf(temp / 256.0, ipart); - float2 result = float2(ipart, round(256.0 * fpart)); - return result * (1.0 / float2(255.0, 255.0)); + float temp = round(inputs * 65535.0); + float ipart; + float fpart = modf(temp / 256.0, ipart); + float2 result = float2(ipart, round(256.0 * fpart)); + return result * (1.0 / float2(255.0, 255.0)); } // Encode a float in [0..1] and an int in [0..maxi - 1] as a float [0..1] to be store in log2(precision) bit @@ -90,57 +151,57 @@ float2 Unpack2Byte(float inputs) //... float PackFloatInt(float f, int i, float maxi, float precision) { - // Constant - float precisionMinusOne = precision - 1.0; - float t1 = ((precision / maxi) - 1.0) / precisionMinusOne; - float t2 = (precision / maxi) / precisionMinusOne; + // Constant + float precisionMinusOne = precision - 1.0; + float t1 = ((precision / maxi) - 1.0) / precisionMinusOne; + float t2 = (precision / maxi) / precisionMinusOne; - return t1 * f + t2 * float(i); + return t1 * f + t2 * float(i); } void UnpackFloatInt(float val, float maxi, float precision, out float f, out int i) { - // Constant - float precisionMinusOne = precision - 1.0; - float t1 = ((precision / maxi) - 1.0) / precisionMinusOne; - float t2 = (precision / maxi) / precisionMinusOne; + // Constant + float precisionMinusOne = precision - 1.0; + float t1 = ((precision / maxi) - 1.0) / precisionMinusOne; + float t2 = (precision / maxi) / precisionMinusOne; - // extract integer part - i = int(val / t2); - // Now that we have i, solve formula in PackFloatInt for f - //f = (val - t2 * float(i)) / t1 => convert in mads form - f = (-t2 * float(i) + val) / t1; + // extract integer part + i = int(val / t2); + // Now that we have i, solve formula in PackFloatInt for f + //f = (val - t2 * float(i)) / t1 => convert in mads form + f = (-t2 * float(i) + val) / t1; } // Define various variante for ease of read float PackFloatInt8bit(float f, int i, float maxi) { - return PackFloatInt(f, i, maxi, 255.0); + return PackFloatInt(f, i, maxi, 255.0); } float UnpackFloatInt8bit(float val, float maxi, out float f, out int i) { - UnpackFloatInt(val, maxi, 255.0, f, i); + UnpackFloatInt(val, maxi, 255.0, f, i); } float PackFloatInt10bit(float f, int i, float maxi) { - return PackFloatInt(f, i, maxi, 1024.0); + return PackFloatInt(f, i, maxi, 1024.0); } float UnpackFloatInt10bit(float val, float maxi, out float f, out int i) { - UnpackFloatInt(val, maxi, 1024.0, f, i); + UnpackFloatInt(val, maxi, 1024.0, f, i); } float PackFloatInt16bit(float f, int i, float maxi) { - return PackFloatInt(f, i, maxi, 65536.0); + return PackFloatInt(f, i, maxi, 65536.0); } float UnpackFloatInt16bit(float val, float maxi, out float f, out int i) { - UnpackFloatInt(val, maxi, 65536.0, f, i); + UnpackFloatInt(val, maxi, 65536.0, f, i); } #endif // UNITY_PACKING_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/QuaternionMath.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/QuaternionMath.hlsl index 8e1d00981f4..24495068097 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/QuaternionMath.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/QuaternionMath.hlsl @@ -1,6 +1,32 @@ #ifndef UNITY_QUATERNIONMATH_INCLUDED #define UNITY_QUATERNIONMATH_INCLUDED -#include "Common.hlsl" +// Ref: https://cedec.cesa.or.jp/2015/session/ENG/14698.html The Rendering Materials of Far Cry 4 + +float4 TangentSpaceToQuat(float3 tagent, float3 bitangent, float3 normal) +{ + float4 quat; + quat.x = normal.y - bitangent.z; + quat.y = tangent.z - normal.x; + quat.z = bitangent.x - tangent.y; + quat.w = 1.0 + tangent.x + bitangent.y + normal.z; + + return normalize(quat); +} + +void QuatToTangentSpace(float4 quaterion, out float3 tangent, out float3 bitangent, out float3 normal) +{ + tangent = float3(1.0, 0.0, 0.0) + + float3(-2.0, 2.0, 2.0) * quat.y * quat.yxw + + float3(-2.0, -2.0, 2.0) * quat.z * quaternion.zwx; + + bitangent = float3(0.0, 1.0, 0.0) + + float3(2.0, -2.0, 2.0) * quat.z * quat.wzy + + float3(2.0, -2.0, -2.0) * quat.x * quaternion.yxw; + + normal = float3(0.0, 0.0, 1.0) + + float3(2.0, 2.0, -2.0) * quat.x * quat.zwx + + float3(-2.0, 2.0, -2.0) * quat.y * quaternion.wzy; +} #endif // UNITY_QUATERNIONMATH_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/SHMath.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/SHMath.hlsl index bda58710505..4a1b58d9303 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/SHMath.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/SHMath.hlsl @@ -1,6 +1,4 @@ #ifndef UNITY_SHMATH_INCLUDED #define UNITY_SHMATH_INCLUDED -#include "Common.hlsl" - #endif // UNITY_SHMATH_INCLUDED diff --git a/Assets/ScriptableRenderLoop/ShaderLibrary/Sampling.hlsl b/Assets/ScriptableRenderLoop/ShaderLibrary/Sampling.hlsl index b136c577ac3..956d8d7d8fd 100644 --- a/Assets/ScriptableRenderLoop/ShaderLibrary/Sampling.hlsl +++ b/Assets/ScriptableRenderLoop/ShaderLibrary/Sampling.hlsl @@ -1,6 +1,195 @@ #ifndef UNITY_SAMPLING_INCLUDED #define UNITY_SAMPLING_INCLUDED -#include "Common.hlsl" +//----------------------------------------------------------------------------- +// Sample generator +//----------------------------------------------------------------------------- + +// Ref: http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html +uint ReverseBits32(uint bits) +{ +#if 0 // Shader model 5 + return reversebits(bits); +#else + bits = (bits << 16) | (bits >> 16); + bits = ((bits & 0x00ff00ff) << 8) | ((bits & 0xff00ff00) >> 8); + bits = ((bits & 0x0f0f0f0f) << 4) | ((bits & 0xf0f0f0f0) >> 4); + bits = ((bits & 0x33333333) << 2) | ((bits & 0xcccccccc) >> 2); + bits = ((bits & 0x55555555) << 1) | ((bits & 0xaaaaaaaa) >> 1); + return bits; +#endif +} + +float RadicalInverse_VdC(uint bits) +{ + return float(ReverseBits32(bits)) * 2.3283064365386963e-10; // 0x100000000 +} + +float2 Hammersley2d(uint i, uint maxSampleCount) +{ + return float2(float(i) / float(maxSampleCount), RadicalInverse_VdC(i)); +} + +float Hash(uint s) +{ + s = s ^ 2747636419u; + s = s * 2654435769u; + s = s ^ (s >> 16); + s = s * 2654435769u; + s = s ^ (s >> 16); + s = s * 2654435769u; + return float(s) / 4294967295.0; +} + +float2 InitRandom(float2 input) +{ + float2 r; + r.x = Hash(uint(input.x * 4294967295.0)); + r.y = Hash(uint(input.y * 4294967295.0)); + + return r; +} + +//----------------------------------------------------------------------------- +// Sampling function +// Reference : http://www.cs.virginia.edu/~jdl/bib/globillum/mis/shirley96.pdf + PBRT +// Caution: Our light point backward (-Z), these sampling function follow this convention +//----------------------------------------------------------------------------- + +float3 UniformSampleSphere(float u1, float u2) +{ + float phi = TWO_PI * u2; + float cosTheta = 1.0 - 2.0 * u1; + float sinTheta = sqrt(max(0.0, 1.0 - cosTheta * cosTheta)); + + return float3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); // Light point backward (-Z) +} + +float3 UniformSampleHemisphere(float u1, float u2) +{ + float phi = TWO_PI * u2; + float cosTheta = u1; + float sinTheta = sqrt(max(0.0, 1.0 - cosTheta * cosTheta)); + + return float3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); // Light point backward (-Z) +} + +float3 UniformSampleDisk(float u1, float u2) +{ + float r = sqrt(u1); + float phi = TWO_PI * u2; + + return float3(r * cos(phi), r * sin(phi), 0); // Generate in XY plane as light point backward (-Z) +} + +void SampleSphere( float2 u, + float4x4 localToWorld, + float radius, + out float lightPdf, + out float3 P, + out float3 Ns) +{ + float u1 = u.x; + float u2 = u.y; + + Ns = UniformSampleSphere(u1, u2); + + // Transform from unit sphere to world space + P = radius * Ns + localToWorld[3].xyz; + + // pdf is inverse of area + lightPdf = 1.0 / (FOUR_PI * radius * radius); +} + +void SampleHemisphere( float2 u, + float4x4 localToWorld, + float radius, + out float lightPdf, + out float3 P, + out float3 Ns) +{ + float u1 = u.x; + float u2 = u.y; + + // Random point at hemisphere surface + Ns = -UniformSampleHemisphere(u1, u2); // We want the y down hemisphere + P = radius * Ns; + + // Transform to world space + P = mul(float4(P, 1.0), localToWorld).xyz; + Ns = mul(Ns, (float3x3)(localToWorld)); + + // pdf is inverse of area + lightPdf = 1.0 / (TWO_PI * radius * radius); +} + +// Note: The cylinder has no end caps (i.e. no disk on the side) +void SampleCylinder(float2 u, + float4x4 localToWorld, + float radius, + float width, + out float lightPdf, + out float3 P, + out float3 Ns) +{ + float u1 = u.x; + float u2 = u.y; + + // Random point at cylinder surface + float t = (u1 - 0.5) * width; + float theta = 2.0 * PI * u2; + float cosTheta = cos(theta); + float sinTheta = sin(theta); + + // Cylinder are align on the right axis + P = float3(t, radius * cosTheta, radius * sinTheta); + Ns = normalize(float3(0.0, cosTheta, sinTheta)); + + // Transform to world space + P = mul(float4(P, 1.0), localToWorld).xyz; + Ns = mul(Ns, (float3x3)(localToWorld)); + + // pdf is inverse of area + lightPdf = 1.0 / (TWO_PI * radius * width); +} + +void SampleRectangle( float2 u, + float4x4 localToWorld, + float width, + float height, + out float lightPdf, + out float3 P, + out float3 Ns) +{ + // Random point at rectangle surface + P = float3((u.x - 0.5) * width, (u.y - 0.5) * height, 0); + Ns = float3(0, 0, -1); // Light point backward (-Z) + + // Transform to world space + P = mul(float4(P, 1.0), localToWorld).xyz; + Ns = mul(Ns, (float3x3)(localToWorld)); + + // pdf is inverse of area + lightPdf = 1.0 / (width * height); +} + +void SampleDisk(float2 u, + float4x4 localToWorld, + float radius, + out float lightPdf, + out float3 P, + out float3 Ns) +{ + // Random point at disk surface + P = UniformSampleDisk(u.x, u.y) * radius; + Ns = float3(0.0, 0.0, -1.0); // Light point backward (-Z) + + // Transform to world space + P = mul(float4(P, 1.0), localToWorld).xyz; + Ns = mul(Ns, (float3x3)(localToWorld)); + + // pdf is inverse of area + lightPdf = 1.0 / (PI * radius * radius); +} #endif // UNITY_SAMPLING_INCLUDED diff --git a/Assets/ScriptableRenderLoop/Tests/RenderLoopWrapper.cs b/Assets/ScriptableRenderLoop/Tests/RenderLoopWrapper.cs index 6c86047a31b..1ad7f6b3d51 100644 --- a/Assets/ScriptableRenderLoop/Tests/RenderLoopWrapper.cs +++ b/Assets/ScriptableRenderLoop/Tests/RenderLoopWrapper.cs @@ -1,8 +1,8 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using UnityEngine.ScriptableRenderLoop; -using UnityEngine.Rendering; +using UnityEngine.Experimental.ScriptableRenderLoop; +using UnityEngine.Experimental.Rendering; [ExecuteInEditMode] public class RenderLoopWrapper : MonoBehaviour diff --git a/Assets/ScriptableRenderLoop/common/ShaderBase.h b/Assets/ScriptableRenderLoop/common/ShaderBase.h index 718ef924347..a60b963ef38 100644 --- a/Assets/ScriptableRenderLoop/common/ShaderBase.h +++ b/Assets/ScriptableRenderLoop/common/ShaderBase.h @@ -2,25 +2,25 @@ #define __SHADERBASE_H__ -#define __HLSL 1 +#define __HLSL 1 #define public -#define unistruct cbuffer -#define hbool bool +#define unistruct cbuffer +#define hbool bool -#define _CB_REGSLOT(x) : register(x) -#define _QALIGN(x) : packoffset(c0); +#define _CB_REGSLOT(x) : register(x) +#define _QALIGN(x) : packoffset(c0); float FetchDepth(Texture2D depthTexture, uint2 pixCoord) { - return 1 - depthTexture.Load(uint3(pixCoord.xy, 0)).x; + return 1 - depthTexture.Load(uint3(pixCoord.xy, 0)).x; } float FetchDepthMSAA(Texture2DMS depthTexture, uint2 pixCoord, uint sampleIdx) { - return 1 - depthTexture.Load(uint3(pixCoord.xy, 0), sampleIdx).x; + return 1 - depthTexture.Load(uint3(pixCoord.xy, 0), sampleIdx).x; } -#endif \ No newline at end of file +#endif diff --git a/Assets/ScriptableRenderLoop/common/SkyboxHelper.cs b/Assets/ScriptableRenderLoop/common/SkyboxHelper.cs index 6795b18b9aa..c5b32c95687 100644 --- a/Assets/ScriptableRenderLoop/common/SkyboxHelper.cs +++ b/Assets/ScriptableRenderLoop/common/SkyboxHelper.cs @@ -1,273 +1,273 @@ -using System.Collections; using System.Collections.Generic; using UnityEngine.Rendering; +using UnityEngine.Experimental.Rendering; using UnityEngine; public class SkyboxHelper { - public SkyboxHelper() - { - } - - const int NumFullSubdivisions = 3; // 3 subdivs == 2048 triangles - const int NumHorizonSubdivisions = 2; - - public void CreateMesh() - { - Vector3[] vertData = new Vector3[8 * 3]; - for (int i = 0; i < 8 * 3; i++) - { - vertData[i] = octaVerts[i]; - } - - // Regular subdivisions - for (int i = 0; i < NumFullSubdivisions; i++) - { - Vector3[] srcData = vertData.Clone() as Vector3[]; - List verts = new List(); - - for (int k = 0; k < srcData.Length; k += 3) - { - Subdivide(verts, srcData[k], srcData[k + 1], srcData[k + 2]); - } - vertData = verts.ToArray(); - } - - // Horizon subdivisions - float horizonLimit = 1.0f; - for (int i = 0; i < NumHorizonSubdivisions; i++) - { - Vector3[] srcData = vertData.Clone() as Vector3[]; - List verts = new List(); - - horizonLimit *= 0.5f; // First iteration limit to y < +-0.5, next one 0.25 etc. - for (int k = 0; k < srcData.Length; k += 3) - { - float maxAbsY = Mathf.Max(Mathf.Abs(srcData[k].y), Mathf.Abs(srcData[k + 1].y), Mathf.Abs(srcData[k + 2].y)); - if (maxAbsY > horizonLimit) - { - // Pass through existing triangle - verts.Add(srcData[k]); - verts.Add(srcData[k + 1]); - verts.Add(srcData[k + 2]); - } - else - { - SubdivideYOnly(verts, srcData[k], srcData[k + 1], srcData[k + 2]); - } - } - vertData = verts.ToArray(); - } - - // Write out the mesh - int vertexCount = vertData.Length; - var triangles = new int[vertexCount]; - for (int i = 0; i < vertexCount; i++) - { - triangles[i] = i; - } - - _mesh = new Mesh(); - _mesh.vertices = vertData; - _mesh.triangles = triangles; - } - - public UnityEngine.Mesh mesh - { - get { return _mesh; } - } - - public void Draw(RenderLoop loop, Camera camera) - { - if (camera.clearFlags != CameraClearFlags.Skybox) - { - return; - } - - Material mat = RenderSettings.skybox; - - if (mat == null) - { - return; - } - - CommandBuffer cmd = new CommandBuffer(); - cmd.name = "Skybox"; - - bool looksLikeSixSidedShader = true; - looksLikeSixSidedShader &= (mat.passCount == 6); // should have six passes - //looksLikeSixSidedShader &= !mat.GetShader()->GetShaderLabShader()->HasLightingPasses(); - - if (looksLikeSixSidedShader) - { - Debug.LogWarning("Six sided skybox not yet supported."); - } - else - { - if (mesh == null) - { - CreateMesh(); - } - - float dist = camera.farClipPlane * 10.0f; - - Matrix4x4 world = Matrix4x4.TRS(camera.transform.position, Quaternion.identity, new Vector3(dist, dist, dist)); - - Matrix4x4 skyboxProj = SkyboxHelper.GetProjectionMatrix(camera); - cmd.SetProjectionAndViewMatrices(skyboxProj, camera.worldToCameraMatrix); - cmd.DrawMesh(mesh, world, mat); - - cmd.SetProjectionAndViewMatrices(camera.projectionMatrix, camera.worldToCameraMatrix); - } - - loop.ExecuteCommandBuffer(cmd); - cmd.Dispose(); - } - - static public Matrix4x4 GetProjectionMatrix(Camera camera) - { - Matrix4x4 skyboxProj = Matrix4x4.Perspective(camera.fieldOfView, camera.aspect, camera.nearClipPlane, camera.farClipPlane); - - float nearPlane = camera.nearClipPlane * 0.01f; - skyboxProj = AdjustDepthRange(skyboxProj, camera.nearClipPlane, nearPlane, camera.farClipPlane); - return MakeProjectionInfinite(skyboxProj, nearPlane); - } - - static Matrix4x4 MakeProjectionInfinite(Matrix4x4 m, float nearPlane) - { - const float epsilon = 1e-6f; - - Matrix4x4 r = m; - r[2, 2] = -1.0f + epsilon; - r[2, 3] = (-2.0f + epsilon) * nearPlane; - r[3, 2] = -1.0f; - return r; - } - - static Matrix4x4 AdjustDepthRange(Matrix4x4 mat, float origNear, float newNear, float newFar) - { - float x = mat[0, 0]; - float y = mat[1, 1]; - float w = mat[0, 2]; - float z = mat[1, 2]; - - float r = ((2.0f * origNear) / x) * ((w + 1) * 0.5f); - float t = ((2.0f * origNear) / y) * ((z + 1) * 0.5f); - float l = ((2.0f * origNear) / x) * (((w + 1) * 0.5f) - 1); - float b = ((2.0f * origNear) / y) * (((z + 1) * 0.5f) - 1); - - float ratio = (newNear / origNear); - - r *= ratio; - t *= ratio; - l *= ratio; - b *= ratio; - - Matrix4x4 ret = new Matrix4x4(); - - ret[0, 0] = (2.0f * newNear) / (r - l); ret[0, 1] = 0; ret[0, 2] = (r + l) / (r - l); ret[0, 3] = 0; - ret[1, 0] = 0; ret[1, 1] = (2.0f * newNear) / (t - b); ret[1, 2] = (t + b) / (t - b); ret[1, 3] = 0; - ret[2, 0] = 0; ret[2, 1] = 0; ret[2, 2] = -(newFar + newNear) / (newFar - newNear); ret[2, 3] = -(2.0f * newFar * newNear) / (newFar - newNear); - ret[3, 0] = 0; ret[3, 1] = 0; ret[3, 2] = -1.0f; ret[3, 3] = 0; - - return ret; - } - - // Octahedron vertices - Vector3[] octaVerts = - { - new Vector3(0.0f, 1.0f, 0.0f), new Vector3(0.0f, 0.0f, -1.0f), new Vector3(1.0f, 0.0f, 0.0f), - new Vector3(0.0f, 1.0f, 0.0f), new Vector3(1.0f, 0.0f, 0.0f), new Vector3(0.0f, 0.0f, 1.0f), - new Vector3(0.0f, 1.0f, 0.0f), new Vector3(0.0f, 0.0f, 1.0f), new Vector3(-1.0f, 0.0f, 0.0f), - new Vector3(0.0f, 1.0f, 0.0f), new Vector3(-1.0f, 0.0f, 0.0f), new Vector3(0.0f, 0.0f, -1.0f), - new Vector3(0.0f, -1.0f, 0.0f), new Vector3(1.0f, 0.0f, 0.0f), new Vector3(0.0f, 0.0f, -1.0f), - new Vector3(0.0f, -1.0f, 0.0f), new Vector3(0.0f, 0.0f, 1.0f), new Vector3(1.0f, 0.0f, 0.0f), - new Vector3(0.0f, -1.0f, 0.0f), new Vector3(-1.0f, 0.0f, 0.0f), new Vector3(0.0f, 0.0f, 1.0f), - new Vector3(0.0f, -1.0f, 0.0f), new Vector3(0.0f, 0.0f, -1.0f), new Vector3(-1.0f, 0.0f, 0.0f), - }; - - Vector3 SubDivVert(Vector3 v1, Vector3 v2) - { - return Vector3.Normalize(v1 + v2); - } - - void Subdivide(List dest, Vector3 v1, Vector3 v2, Vector3 v3) - { - Vector3 v12 = SubDivVert(v1, v2); - Vector3 v23 = SubDivVert(v2, v3); - Vector3 v13 = SubDivVert(v1, v3); - - dest.Add(v1); - dest.Add(v12); - dest.Add(v13); - dest.Add(v12); - dest.Add(v2); - dest.Add(v23); - dest.Add(v23); - dest.Add(v13); - dest.Add(v12); - dest.Add(v3); - dest.Add(v13); - dest.Add(v23); - } - - void SubdivideYOnly(List dest, Vector3 v1, Vector3 v2, Vector3 v3) - { - // Find out which vertex is furthest out from the others on the y axis - - float d12 = Mathf.Abs(v2.y - v1.y); - float d23 = Mathf.Abs(v2.y - v3.y); - float d31 = Mathf.Abs(v3.y - v1.y); - - Vector3 top, va, vb; - - if (d12 < d23 && d12 < d31) - { - top = v3; - va = v1; - vb = v2; - } - else if (d23 < d12 && d23 < d31) - { - top = v1; - va = v2; - vb = v3; - } - else - { - top = v2; - va = v3; - vb = v1; - } - - Vector3 v12 = SubDivVert(top, va); - Vector3 v13 = SubDivVert(top, vb); - - dest.Add(top); - dest.Add(v12); - dest.Add(v13); - - // A bit of extra logic to prevent triangle slivers: choose the shorter of (13->va), (12->vb) as triangle base - if ((v13 - va).sqrMagnitude > (v12 - vb).sqrMagnitude) - { - dest.Add(v12); - dest.Add(va); - dest.Add(vb); - dest.Add(v13); - dest.Add(v12); - dest.Add(vb); - } - else - { - dest.Add(v13); - dest.Add(v12); - dest.Add(va); - dest.Add(v13); - dest.Add(va); - dest.Add(vb); - } - - } - - Mesh _mesh; + public SkyboxHelper() + { + } + + const int k_NumFullSubdivisions = 3; // 3 subdivs == 2048 triangles + const int k_NumHorizonSubdivisions = 2; + + public void CreateMesh() + { + var vertData = new Vector3[8 * 3]; + for (int i = 0; i < 8 * 3; i++) + { + vertData[i] = m_OctaVerts[i]; + } + + // Regular subdivisions + for (int i = 0; i < k_NumFullSubdivisions; i++) + { + var srcData = vertData.Clone() as Vector3[]; + var verts = new List(); + + for (int k = 0; k < srcData.Length; k += 3) + { + Subdivide(verts, srcData[k], srcData[k + 1], srcData[k + 2]); + } + vertData = verts.ToArray(); + } + + // Horizon subdivisions + var horizonLimit = 1.0f; + for (int i = 0; i < k_NumHorizonSubdivisions; i++) + { + var srcData = vertData.Clone() as Vector3[]; + var verts = new List(); + + horizonLimit *= 0.5f; // First iteration limit to y < +-0.5, next one 0.25 etc. + for (int k = 0; k < srcData.Length; k += 3) + { + var maxAbsY = Mathf.Max(Mathf.Abs(srcData[k].y), Mathf.Abs(srcData[k + 1].y), Mathf.Abs(srcData[k + 2].y)); + if (maxAbsY > horizonLimit) + { + // Pass through existing triangle + verts.Add(srcData[k]); + verts.Add(srcData[k + 1]); + verts.Add(srcData[k + 2]); + } + else + { + SubdivideYOnly(verts, srcData[k], srcData[k + 1], srcData[k + 2]); + } + } + vertData = verts.ToArray(); + } + + // Write out the mesh + var vertexCount = vertData.Length; + var triangles = new int[vertexCount]; + for (int i = 0; i < vertexCount; i++) + { + triangles[i] = i; + } + + m_Mesh = new Mesh + { + vertices = vertData, + triangles = triangles + }; + } + + public UnityEngine.Mesh mesh + { + get { return m_Mesh; } + } + + public void Draw(RenderLoop loop, Camera camera) + { + if (camera.clearFlags != CameraClearFlags.Skybox) + { + return; + } + + var mat = RenderSettings.skybox; + + if (mat == null) + { + return; + } + + var cmd = new CommandBuffer { name = "Skybox" }; + + var looksLikeSixSidedShader = true; + looksLikeSixSidedShader &= (mat.passCount == 6); // should have six passes + //looksLikeSixSidedShader &= !mat.GetShader()->GetShaderLabShader()->HasLightingPasses(); + + if (looksLikeSixSidedShader) + { + Debug.LogWarning("Six sided skybox not yet supported."); + } + else + { + if (mesh == null) + { + CreateMesh(); + } + + var dist = camera.farClipPlane * 10.0f; + + var world = Matrix4x4.TRS(camera.transform.position, Quaternion.identity, new Vector3(dist, dist, dist)); + + var skyboxProj = SkyboxHelper.GetProjectionMatrix(camera); + cmd.SetProjectionAndViewMatrices(skyboxProj, camera.worldToCameraMatrix); + cmd.DrawMesh(mesh, world, mat); + + cmd.SetProjectionAndViewMatrices(camera.projectionMatrix, camera.worldToCameraMatrix); + } + + loop.ExecuteCommandBuffer(cmd); + cmd.Dispose(); + } + + public static Matrix4x4 GetProjectionMatrix(Camera camera) + { + var skyboxProj = Matrix4x4.Perspective(camera.fieldOfView, camera.aspect, camera.nearClipPlane, camera.farClipPlane); + + var nearPlane = camera.nearClipPlane * 0.01f; + skyboxProj = AdjustDepthRange(skyboxProj, camera.nearClipPlane, nearPlane, camera.farClipPlane); + return MakeProjectionInfinite(skyboxProj, nearPlane); + } + + static Matrix4x4 MakeProjectionInfinite(Matrix4x4 m, float nearPlane) + { + const float epsilon = 1e-6f; + + var r = m; + r[2, 2] = -1.0f + epsilon; + r[2, 3] = (-2.0f + epsilon) * nearPlane; + r[3, 2] = -1.0f; + return r; + } + + static Matrix4x4 AdjustDepthRange(Matrix4x4 mat, float origNear, float newNear, float newFar) + { + var x = mat[0, 0]; + var y = mat[1, 1]; + var w = mat[0, 2]; + var z = mat[1, 2]; + + var r = ((2.0f * origNear) / x) * ((w + 1) * 0.5f); + var t = ((2.0f * origNear) / y) * ((z + 1) * 0.5f); + var l = ((2.0f * origNear) / x) * (((w + 1) * 0.5f) - 1); + var b = ((2.0f * origNear) / y) * (((z + 1) * 0.5f) - 1); + + var ratio = (newNear / origNear); + + r *= ratio; + t *= ratio; + l *= ratio; + b *= ratio; + + var ret = new Matrix4x4(); + + ret[0, 0] = (2.0f * newNear) / (r - l); ret[0, 1] = 0; ret[0, 2] = (r + l) / (r - l); ret[0, 3] = 0; + ret[1, 0] = 0; ret[1, 1] = (2.0f * newNear) / (t - b); ret[1, 2] = (t + b) / (t - b); ret[1, 3] = 0; + ret[2, 0] = 0; ret[2, 1] = 0; ret[2, 2] = -(newFar + newNear) / (newFar - newNear); ret[2, 3] = -(2.0f * newFar * newNear) / (newFar - newNear); + ret[3, 0] = 0; ret[3, 1] = 0; ret[3, 2] = -1.0f; ret[3, 3] = 0; + + return ret; + } + + // Octahedron vertices + readonly Vector3[] m_OctaVerts = + { + new Vector3(0.0f, 1.0f, 0.0f), new Vector3(0.0f, 0.0f, -1.0f), new Vector3(1.0f, 0.0f, 0.0f), + new Vector3(0.0f, 1.0f, 0.0f), new Vector3(1.0f, 0.0f, 0.0f), new Vector3(0.0f, 0.0f, 1.0f), + new Vector3(0.0f, 1.0f, 0.0f), new Vector3(0.0f, 0.0f, 1.0f), new Vector3(-1.0f, 0.0f, 0.0f), + new Vector3(0.0f, 1.0f, 0.0f), new Vector3(-1.0f, 0.0f, 0.0f), new Vector3(0.0f, 0.0f, -1.0f), + new Vector3(0.0f, -1.0f, 0.0f), new Vector3(1.0f, 0.0f, 0.0f), new Vector3(0.0f, 0.0f, -1.0f), + new Vector3(0.0f, -1.0f, 0.0f), new Vector3(0.0f, 0.0f, 1.0f), new Vector3(1.0f, 0.0f, 0.0f), + new Vector3(0.0f, -1.0f, 0.0f), new Vector3(-1.0f, 0.0f, 0.0f), new Vector3(0.0f, 0.0f, 1.0f), + new Vector3(0.0f, -1.0f, 0.0f), new Vector3(0.0f, 0.0f, -1.0f), new Vector3(-1.0f, 0.0f, 0.0f), + }; + + Vector3 SubDivVert(Vector3 v1, Vector3 v2) + { + return Vector3.Normalize(v1 + v2); + } + + void Subdivide(ICollection dest, Vector3 v1, Vector3 v2, Vector3 v3) + { + var v12 = SubDivVert(v1, v2); + var v23 = SubDivVert(v2, v3); + var v13 = SubDivVert(v1, v3); + + dest.Add(v1); + dest.Add(v12); + dest.Add(v13); + dest.Add(v12); + dest.Add(v2); + dest.Add(v23); + dest.Add(v23); + dest.Add(v13); + dest.Add(v12); + dest.Add(v3); + dest.Add(v13); + dest.Add(v23); + } + + void SubdivideYOnly(ICollection dest, Vector3 v1, Vector3 v2, Vector3 v3) + { + // Find out which vertex is furthest out from the others on the y axis + + var d12 = Mathf.Abs(v2.y - v1.y); + var d23 = Mathf.Abs(v2.y - v3.y); + var d31 = Mathf.Abs(v3.y - v1.y); + + Vector3 top, va, vb; + + if (d12 < d23 && d12 < d31) + { + top = v3; + va = v1; + vb = v2; + } + else if (d23 < d12 && d23 < d31) + { + top = v1; + va = v2; + vb = v3; + } + else + { + top = v2; + va = v3; + vb = v1; + } + + var v12 = SubDivVert(top, va); + var v13 = SubDivVert(top, vb); + + dest.Add(top); + dest.Add(v12); + dest.Add(v13); + + // A bit of extra logic to prevent triangle slivers: choose the shorter of (13->va), (12->vb) as triangle base + if ((v13 - va).sqrMagnitude > (v12 - vb).sqrMagnitude) + { + dest.Add(v12); + dest.Add(va); + dest.Add(vb); + dest.Add(v13); + dest.Add(v12); + dest.Add(vb); + } + else + { + dest.Add(v13); + dest.Add(v12); + dest.Add(va); + dest.Add(v13); + dest.Add(va); + dest.Add(vb); + } + } + + Mesh m_Mesh; } diff --git a/Assets/ScriptableRenderLoop/common/TextureCache.cs b/Assets/ScriptableRenderLoop/common/TextureCache.cs index 72faf668281..e5d1e30c41f 100644 --- a/Assets/ScriptableRenderLoop/common/TextureCache.cs +++ b/Assets/ScriptableRenderLoop/common/TextureCache.cs @@ -3,326 +3,333 @@ public class TextureCache2D : TextureCache { - private Texture2DArray cache; - - public override void TransferToSlice(int sliceIndex, Texture texture) - { - bool mismatch = (cache.width != texture.width) || (cache.height != texture.height); - - if (texture is Texture2D) - { - mismatch |= (cache.format != (texture as Texture2D).format); - } - - if (mismatch) - { - Debug.LogErrorFormat(texture, "Texture size or format of \"{0}\" doesn't match renderloop settings (should be {1}x{2} {3})", - texture.name, cache.width, cache.height, cache.format); - return; - } - - Graphics.CopyTexture(texture, 0, cache, sliceIndex); - } - - public override Texture GetTexCache() - { - return cache; - } - - public bool AllocTextureArray(int numTextures, int width, int height, TextureFormat format, bool isMipMapped) - { - bool res = AllocTextureArray(numTextures); - m_numMipLevels = GetNumMips(width, height); - - cache = new Texture2DArray(width, height, numTextures, format, isMipMapped); - cache.hideFlags = HideFlags.HideAndDontSave; - cache.wrapMode = TextureWrapMode.Clamp; - - return res; - } - - public void Release() - { - Texture.DestroyImmediate(cache); // do I need this? - } + private Texture2DArray m_Cache; + + public override void TransferToSlice(int sliceIndex, Texture texture) + { + var mismatch = (m_Cache.width != texture.width) || (m_Cache.height != texture.height); + + if (texture is Texture2D) + { + mismatch |= (m_Cache.format != (texture as Texture2D).format); + } + + if (mismatch) + { + Debug.LogErrorFormat(texture, "Texture size or format of \"{0}\" doesn't match renderloop settings (should be {1}x{2} {3})", + texture.name, m_Cache.width, m_Cache.height, m_Cache.format); + return; + } + + Graphics.CopyTexture(texture, 0, m_Cache, sliceIndex); + } + + public override Texture GetTexCache() + { + return m_Cache; + } + + public bool AllocTextureArray(int numTextures, int width, int height, TextureFormat format, bool isMipMapped) + { + var res = AllocTextureArray(numTextures); + m_NumMipLevels = GetNumMips(width, height); + + m_Cache = new Texture2DArray(width, height, numTextures, format, isMipMapped) + { + hideFlags = HideFlags.HideAndDontSave, + wrapMode = TextureWrapMode.Clamp + }; + + return res; + } + + public void Release() + { + Texture.DestroyImmediate(m_Cache); // do I need this? + } } public class TextureCacheCubemap : TextureCache { - private CubemapArray cache; - - public override void TransferToSlice(int sliceIndex, Texture texture) - { - bool mismatch = (cache.width != texture.width) || (cache.height != texture.height); - - if (texture is Cubemap) - { - mismatch |= (cache.format != (texture as Cubemap).format); - } - - if (mismatch) - { - Debug.LogErrorFormat(texture, "Texture size or format of \"{0}\" doesn't match renderloop settings (should be {1}x{2} {3})", - texture.name, cache.width, cache.height, cache.format); - return; - } - - for (int f = 0; f < 6; f++) - Graphics.CopyTexture(texture, f, cache, 6 * sliceIndex + f); - } - - public override Texture GetTexCache() - { - return cache; - } - - public bool AllocTextureArray(int numCubeMaps, int width, TextureFormat format, bool isMipMapped) - { - bool res = AllocTextureArray(6 * numCubeMaps); - m_numMipLevels = GetNumMips(width, width); - - cache = new CubemapArray(width, numCubeMaps, format, isMipMapped); - cache.hideFlags = HideFlags.HideAndDontSave; - cache.wrapMode = TextureWrapMode.Clamp; - - return res; - } - - public void Release() - { - Texture.DestroyImmediate(cache); // do I need this? - } + private CubemapArray m_Cache; + + public override void TransferToSlice(int sliceIndex, Texture texture) + { + var mismatch = (m_Cache.width != texture.width) || (m_Cache.height != texture.height); + + if (texture is Cubemap) + { + mismatch |= (m_Cache.format != (texture as Cubemap).format); + } + + if (mismatch) + { + Debug.LogErrorFormat(texture, "Texture size or format of \"{0}\" doesn't match renderloop settings (should be {1}x{2} {3})", + texture.name, m_Cache.width, m_Cache.height, m_Cache.format); + return; + } + + for (int f = 0; f < 6; f++) + Graphics.CopyTexture(texture, f, m_Cache, 6 * sliceIndex + f); + } + + public override Texture GetTexCache() + { + return m_Cache; + } + + public bool AllocTextureArray(int numCubeMaps, int width, TextureFormat format, bool isMipMapped) + { + var res = AllocTextureArray(6 * numCubeMaps); + m_NumMipLevels = GetNumMips(width, width); + + m_Cache = new CubemapArray(width, numCubeMaps, format, isMipMapped) + { + hideFlags = HideFlags.HideAndDontSave, + wrapMode = TextureWrapMode.Clamp, + filterMode = FilterMode.Trilinear, + anisoLevel = 0 // It is important to set 0 here, else unity force anisotropy filtering + }; + + return res; + } + + public void Release() + { + Texture.DestroyImmediate(m_Cache); // do I need this? + } } -abstract public class TextureCache : Object +public abstract class TextureCache : Object { - protected int m_numMipLevels; + protected int m_NumMipLevels; - public static int ms_GlobalTextureCacheVersion = 0; - public int m_TextureCacheVersion = 0; + static int s_GlobalTextureCacheVersion = 0; + int m_TextureCacheVersion = 0; #if UNITY_EDITOR - internal class AssetReloader : UnityEditor.AssetPostprocessor - { - void OnPostprocessTexture(Texture texture) - { - ms_GlobalTextureCacheVersion++; - } - } - private AssetReloader m_assetReloader; + internal class AssetReloader : UnityEditor.AssetPostprocessor + { + void OnPostprocessTexture(Texture texture) + { + s_GlobalTextureCacheVersion++; + } + } #endif - private struct SSliceEntry - { - public uint TexID; - public uint CountLRU; - }; - - private int m_numTextures; - private int[] m_SortedIdxArray; - private SSliceEntry[] m_SliceArray; - - Dictionary m_locatorInSliceArray; - - private static uint g_MaxFrameCount = unchecked((uint)(-1)); - private static uint g_InvalidTexID = (uint)0; - - public int FetchSlice(Texture texture) - { - uint TexID = (uint)texture.GetInstanceID(); - - //assert(TexID!=g_InvalidTexID); - if (TexID == g_InvalidTexID) return 0; - - bool bSwapSlice = false; - bool bFoundAvailOrExistingSlice = false; - int sliceIndex = -1; - - // search for existing copy - if (m_locatorInSliceArray.ContainsKey(TexID)) - { - if (m_TextureCacheVersion != ms_GlobalTextureCacheVersion) - { - m_locatorInSliceArray.Remove(TexID); - m_TextureCacheVersion++; - Debug.Assert(m_TextureCacheVersion <= ms_GlobalTextureCacheVersion); - } - else - { - sliceIndex = m_locatorInSliceArray[TexID]; - bFoundAvailOrExistingSlice = true; - } - //assert(m_SliceArray[sliceIndex].TexID==TexID); - } - - // If no existing copy found in the array - if (!bFoundAvailOrExistingSlice) - { - // look for first non zero entry. Will by the least recently used entry - // since the array was pre-sorted (in linear time) in NewFrame() - bool bFound = false; - int j = 0, idx = 0; - while ((!bFound) && j < m_numTextures) - { - idx = m_SortedIdxArray[j]; - if (m_SliceArray[idx].CountLRU == 0) ++j; // if entry already snagged by a new texture in this frame then ++j - else bFound = true; - } - - if (bFound) - { - // if we are replacing an existing entry delete it from m_locatorInSliceArray. - if (m_SliceArray[idx].TexID != g_InvalidTexID) - { - m_locatorInSliceArray.Remove(m_SliceArray[idx].TexID); - } - - m_locatorInSliceArray.Add(TexID, idx); - m_SliceArray[idx].TexID = TexID; - - sliceIndex = idx; - bFoundAvailOrExistingSlice = true; - bSwapSlice = true; - } - } - - - // wrap up - //assert(bFoundAvailOrExistingSlice); - if (bFoundAvailOrExistingSlice) - { - m_SliceArray[sliceIndex].CountLRU = 0; // mark slice as in use this frame - - if (bSwapSlice) // if this was a miss - { - // transfer new slice to sliceIndex from source texture - TransferToSlice(sliceIndex, texture); - } - } - - return sliceIndex; - } - - public void NewFrame() - { - int numNonZeros = 0; - int[] tmpBuffer = new int[m_numTextures]; - for (int i = 0; i < m_numTextures; i++) - { - tmpBuffer[i] = m_SortedIdxArray[i]; // copy buffer - if (m_SliceArray[m_SortedIdxArray[i]].CountLRU != 0) ++numNonZeros; - } - int nonZerosBase = 0, zerosBase = 0; - for (int i = 0; i < m_numTextures; i++) - { - if (m_SliceArray[tmpBuffer[i]].CountLRU == 0) - { - m_SortedIdxArray[zerosBase + numNonZeros] = tmpBuffer[i]; - ++zerosBase; - } - else - { - m_SortedIdxArray[nonZerosBase] = tmpBuffer[i]; - ++nonZerosBase; - } - } - - for (int i = 0; i < m_numTextures; i++) - { - if (m_SliceArray[i].CountLRU < g_MaxFrameCount) ++m_SliceArray[i].CountLRU; // next frame - } - - //for(int q=1; q=m_SliceArray[m_SortedIdxArray[q]].CountLRU); - } - - public TextureCache() - { - m_numTextures = 0; - m_numMipLevels = 0; - } - - public virtual void TransferToSlice(int sliceIndex, Texture texture) - { - } - - public virtual Texture GetTexCache() - { - return null; - } - - protected bool AllocTextureArray(int numTextures) - { - if (numTextures > 0) - { - m_SliceArray = new SSliceEntry[numTextures]; - m_SortedIdxArray = new int[numTextures]; - m_locatorInSliceArray = new Dictionary(); - - m_numTextures = numTextures; - for (int i = 0; i < m_numTextures; i++) - { - m_SliceArray[i].CountLRU = g_MaxFrameCount; // never used before - m_SliceArray[i].TexID = g_InvalidTexID; - m_SortedIdxArray[i] = i; - } - } - - //return m_SliceArray != NULL && m_SortedIdxArray != NULL && numTextures > 0; - return numTextures > 0; - } - - // should not really be used in general. Assuming lights are culled properly entries will automatically be replaced efficiently. - public void RemoveEntryFromSlice(Texture texture) - { - uint TexID = (uint)texture.GetInstanceID(); - - //assert(TexID!=g_InvalidTexID); - if (TexID == g_InvalidTexID) return; - - // search for existing copy - if (m_locatorInSliceArray.ContainsKey(TexID)) - { - int sliceIndex = m_locatorInSliceArray[TexID]; - - //assert(m_SliceArray[sliceIndex].TexID==TexID); - - // locate entry sorted by uCountLRU in m_pSortedIdxArray - bool bFoundIdxSortLRU = false; - int i = 0; - while ((!bFoundIdxSortLRU) && i < m_numTextures) - { - if (m_SortedIdxArray[i] == sliceIndex) bFoundIdxSortLRU = true; - else ++i; - } - - if (bFoundIdxSortLRU) - { - // relocate sliceIndex to front of m_pSortedIdxArray since uCountLRU will be set to maximum. - for (int j = 0; j < i; j++) { m_SortedIdxArray[j + 1] = m_SortedIdxArray[j]; } - m_SortedIdxArray[0] = sliceIndex; - - // delete from m_locatorInSliceArray and m_pSliceArray. - m_locatorInSliceArray.Remove(TexID); - m_SliceArray[sliceIndex].CountLRU = g_MaxFrameCount; // never used before - m_SliceArray[sliceIndex].TexID = g_InvalidTexID; - } - } - - } - - protected int GetNumMips(int width, int height) - { - return GetNumMips(width > height ? width : height); - } - - protected int GetNumMips(int dim) - { - uint uDim = (uint)dim; - int iNumMips = 0; - while (uDim > 0) - { ++iNumMips; uDim >>= 1; } - return iNumMips; - } + private struct SSliceEntry + { + public uint texId; + public uint countLRU; + }; + + private int m_NumTextures; + private int[] m_SortedIdxArray; + private SSliceEntry[] m_SliceArray; + + Dictionary m_LocatorInSliceArray; + + private static uint g_MaxFrameCount = unchecked((uint)(-1)); + private static uint g_InvalidTexID = (uint)0; + + public int FetchSlice(Texture texture) + { + var texId = (uint)texture.GetInstanceID(); + + //assert(TexID!=g_InvalidTexID); + if (texId == g_InvalidTexID) return 0; + + var bSwapSlice = false; + var bFoundAvailOrExistingSlice = false; + var sliceIndex = -1; + + // search for existing copy + if (m_LocatorInSliceArray.ContainsKey(texId)) + { + if (m_TextureCacheVersion != s_GlobalTextureCacheVersion) + { + m_LocatorInSliceArray.Remove(texId); + m_TextureCacheVersion++; + Debug.Assert(m_TextureCacheVersion <= s_GlobalTextureCacheVersion); + } + else + { + sliceIndex = m_LocatorInSliceArray[texId]; + bFoundAvailOrExistingSlice = true; + } + //assert(m_SliceArray[sliceIndex].TexID==TexID); + } + + // If no existing copy found in the array + if (!bFoundAvailOrExistingSlice) + { + // look for first non zero entry. Will by the least recently used entry + // since the array was pre-sorted (in linear time) in NewFrame() + var bFound = false; + int j = 0, idx = 0; + while ((!bFound) && j < m_NumTextures) + { + idx = m_SortedIdxArray[j]; + if (m_SliceArray[idx].countLRU == 0) ++j; // if entry already snagged by a new texture in this frame then ++j + else bFound = true; + } + + if (bFound) + { + // if we are replacing an existing entry delete it from m_locatorInSliceArray. + if (m_SliceArray[idx].texId != g_InvalidTexID) + { + m_LocatorInSliceArray.Remove(m_SliceArray[idx].texId); + } + + m_LocatorInSliceArray.Add(texId, idx); + m_SliceArray[idx].texId = texId; + + sliceIndex = idx; + bFoundAvailOrExistingSlice = true; + bSwapSlice = true; + } + } + + + // wrap up + //assert(bFoundAvailOrExistingSlice); + if (bFoundAvailOrExistingSlice) + { + m_SliceArray[sliceIndex].countLRU = 0; // mark slice as in use this frame + + if (bSwapSlice) // if this was a miss + { + // transfer new slice to sliceIndex from source texture + TransferToSlice(sliceIndex, texture); + } + } + + return sliceIndex; + } + + public void NewFrame() + { + var numNonZeros = 0; + var tmpBuffer = new int[m_NumTextures]; + for (int i = 0; i < m_NumTextures; i++) + { + tmpBuffer[i] = m_SortedIdxArray[i]; // copy buffer + if (m_SliceArray[m_SortedIdxArray[i]].countLRU != 0) ++numNonZeros; + } + int nonZerosBase = 0, zerosBase = 0; + for (int i = 0; i < m_NumTextures; i++) + { + if (m_SliceArray[tmpBuffer[i]].countLRU == 0) + { + m_SortedIdxArray[zerosBase + numNonZeros] = tmpBuffer[i]; + ++zerosBase; + } + else + { + m_SortedIdxArray[nonZerosBase] = tmpBuffer[i]; + ++nonZerosBase; + } + } + + for (int i = 0; i < m_NumTextures; i++) + { + if (m_SliceArray[i].countLRU < g_MaxFrameCount) ++m_SliceArray[i].countLRU; // next frame + } + + //for(int q=1; q=m_SliceArray[m_SortedIdxArray[q]].CountLRU); + } + + protected TextureCache() + { + m_NumTextures = 0; + m_NumMipLevels = 0; + } + + public virtual void TransferToSlice(int sliceIndex, Texture texture) + { + } + + public virtual Texture GetTexCache() + { + return null; + } + + protected bool AllocTextureArray(int numTextures) + { + if (numTextures > 0) + { + m_SliceArray = new SSliceEntry[numTextures]; + m_SortedIdxArray = new int[numTextures]; + m_LocatorInSliceArray = new Dictionary(); + + m_NumTextures = numTextures; + for (int i = 0; i < m_NumTextures; i++) + { + m_SliceArray[i].countLRU = g_MaxFrameCount; // never used before + m_SliceArray[i].texId = g_InvalidTexID; + m_SortedIdxArray[i] = i; + } + } + + //return m_SliceArray != NULL && m_SortedIdxArray != NULL && numTextures > 0; + return numTextures > 0; + } + + // should not really be used in general. Assuming lights are culled properly entries will automatically be replaced efficiently. + public void RemoveEntryFromSlice(Texture texture) + { + var texId = (uint)texture.GetInstanceID(); + + //assert(TexID!=g_InvalidTexID); + if (texId == g_InvalidTexID) return; + + // search for existing copy + if (!m_LocatorInSliceArray.ContainsKey(texId)) + return; + + var sliceIndex = m_LocatorInSliceArray[texId]; + + //assert(m_SliceArray[sliceIndex].TexID==TexID); + + // locate entry sorted by uCountLRU in m_pSortedIdxArray + var foundIdxSortLRU = false; + var i = 0; + while ((!foundIdxSortLRU) && i < m_NumTextures) + { + if (m_SortedIdxArray[i] == sliceIndex) foundIdxSortLRU = true; + else ++i; + } + + if (!foundIdxSortLRU) + return; + + // relocate sliceIndex to front of m_pSortedIdxArray since uCountLRU will be set to maximum. + for (int j = 0; j < i; j++) + { + m_SortedIdxArray[j + 1] = m_SortedIdxArray[j]; + } + m_SortedIdxArray[0] = sliceIndex; + + // delete from m_locatorInSliceArray and m_pSliceArray. + m_LocatorInSliceArray.Remove(texId); + m_SliceArray[sliceIndex].countLRU = g_MaxFrameCount; // never used before + m_SliceArray[sliceIndex].texId = g_InvalidTexID; + } + + protected int GetNumMips(int width, int height) + { + return GetNumMips(width > height ? width : height); + } + + protected int GetNumMips(int dim) + { + var uDim = (uint)dim; + var iNumMips = 0; + while (uDim > 0) + { ++iNumMips; uDim >>= 1; } + return iNumMips; + } } diff --git a/Assets/ScriptableRenderLoop/common/TextureSettings.cs b/Assets/ScriptableRenderLoop/common/TextureSettings.cs index 6b6ca21b33c..ddc6aa3b995 100644 --- a/Assets/ScriptableRenderLoop/common/TextureSettings.cs +++ b/Assets/ScriptableRenderLoop/common/TextureSettings.cs @@ -1,24 +1,19 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - [System.Serializable] public struct TextureSettings { - public uint spotCookieSize; - public uint pointCookieSize; - public uint reflectionCubemapSize; + public uint spotCookieSize; + public uint pointCookieSize; + public uint reflectionCubemapSize; - static public TextureSettings Default - { - get - { - TextureSettings settings; - settings.spotCookieSize = 128; - settings.pointCookieSize = 512; - settings.reflectionCubemapSize = 64; - return settings; - } - } + public static TextureSettings Default + { + get + { + TextureSettings settings; + settings.spotCookieSize = 128; + settings.pointCookieSize = 512; + settings.reflectionCubemapSize = 128; + return settings; + } + } } diff --git a/Assets/ScriptableRenderLoop/fptl/ClusteredUtils.h b/Assets/ScriptableRenderLoop/fptl/ClusteredUtils.h index 56286f2e5b5..828c21e40f3 100644 --- a/Assets/ScriptableRenderLoop/fptl/ClusteredUtils.h +++ b/Assets/ScriptableRenderLoop/fptl/ClusteredUtils.h @@ -2,72 +2,89 @@ #define __CLUSTEREDUTILS_H__ #ifndef FLT_EPSILON - #define FLT_EPSILON 1.192092896e-07f + #define FLT_EPSILON 1.192092896e-07f #endif float GetScaleFromBase(float base) { - const float C = (float) (1<(); - UnityEditor.AssetDatabase.CreateAsset(instance, "Assets/renderloopfptl.asset"); - //AssetDatabase.CreateAsset(instance, "Assets/ScriptableRenderLoop/fptl/renderloopfptl.asset"); - } + [UnityEditor.MenuItem("Renderloop/CreateRenderLoopFPTL")] + static void CreateRenderLoopFPTL() + { + var instance = ScriptableObject.CreateInstance(); + UnityEditor.AssetDatabase.CreateAsset(instance, "Assets/renderloopfptl.asset"); + //AssetDatabase.CreateAsset(instance, "Assets/ScriptableRenderLoop/fptl/renderloopfptl.asset"); + } + #endif - [SerializeField] - ShadowSettings m_ShadowSettings = ShadowSettings.Default; - ShadowRenderPass m_ShadowPass; - - [SerializeField] - TextureSettings m_TextureSettings = TextureSettings.Default; - - public Shader m_DeferredShader; - public Shader m_DeferredReflectionShader; - public Shader m_FinalPassShader; - - public ComputeShader m_BuildScreenAABBShader; - public ComputeShader m_BuildPerTileLightListShader; // FPTL - - public ComputeShader m_BuildPerVoxelLightListShader; // clustered - - private Material m_DeferredMaterial; - private Material m_DeferredReflectionMaterial; - static private int kGBufferAlbedo; - static private int kGBufferSpecRough; - static private int kGBufferNormal; - static private int kGBufferEmission; - static private int kGBufferZ; - static private int kCameraTarget; - static private int kCameraDepthTexture; - - static private int kGenAABBKernel; - static private int kGenListPerTileKernel; - static private int kGenListPerVoxelKernel; - static private int kClearVoxelAtomicKernel; - static private ComputeBuffer m_lightDataBuffer; - static private ComputeBuffer m_convexBoundsBuffer; - static private ComputeBuffer m_aabbBoundsBuffer; - static private ComputeBuffer lightList; - static private ComputeBuffer m_dirLightList; + [SerializeField] + ShadowSettings m_ShadowSettings = ShadowSettings.Default; + ShadowRenderPass m_ShadowPass; + + [SerializeField] + TextureSettings m_TextureSettings = TextureSettings.Default; + + public Shader deferredShader; + public Shader deferredReflectionShader; + public Shader finalPassShader; + + public ComputeShader buildScreenAABBShader; + public ComputeShader buildPerTileLightListShader; // FPTL + + public ComputeShader buildPerVoxelLightListShader; // clustered + + private Material m_DeferredMaterial; + private Material m_DeferredReflectionMaterial; + private static int s_GBufferAlbedo; + private static int s_GBufferSpecRough; + private static int s_GBufferNormal; + private static int s_GBufferEmission; + private static int s_GBufferZ; + private static int s_CameraTarget; + private static int s_CameraDepthTexture; + + private static int s_GenAABBKernel; + private static int s_GenListPerTileKernel; + private static int s_GenListPerVoxelKernel; + private static int s_ClearVoxelAtomicKernel; + private static ComputeBuffer s_LightDataBuffer; + private static ComputeBuffer s_ConvexBoundsBuffer; + private static ComputeBuffer s_AABBBoundsBuffer; + private static ComputeBuffer s_LightList; + private static ComputeBuffer s_DirLightList; // clustered light list specific buffers and data begin - public bool EnableClustered = false; - const bool gUseDepthBuffer = true;// // only has an impact when EnableClustered is true (requires a depth-prepass) - const int g_iLog2NumClusters = 6; // accepted range is from 0 to 6. NumClusters is 1< visibleLights) + { + var dirLightCount = 0; + var lights = new List(); + var worldToView = camera.worldToCameraMatrix; + + for (int nLight = 0; nLight < visibleLights.Count; nLight++) + { + var light = visibleLights[nLight]; + if (light.lightType == LightType.Directional) { - m_DeferredMaterial.SetBuffer("g_logBaseBuffer", m_perTileLogBaseTweak); - m_DeferredReflectionMaterial.SetBuffer("g_logBaseBuffer", m_perTileLogBaseTweak); + Debug.Assert(dirLightCount < MaxNumDirLights, "Too many directional lights."); + + var l = new DirectionalLight(); + + var lightToWorld = light.localToWorld; + + Vector3 lightDir = lightToWorld.GetColumn(2); // Z axis in world space + + // represents a left hand coordinate system in world space + Vector3 vx = lightToWorld.GetColumn(0); // X axis in world space + Vector3 vy = lightToWorld.GetColumn(1); // Y axis in world space + var vz = lightDir; // Z axis in world space + + vx = worldToView.MultiplyVector(vx); + vy = worldToView.MultiplyVector(vy); + vz = worldToView.MultiplyVector(vz); + + l.shadowLightIndex = (light.light.shadows != LightShadows.None) ? (uint)nLight : 0xffffffff; + + l.lightAxisX = vx; + l.lightAxisY = vy; + l.lightAxisZ = vz; + + l.color.Set(light.finalColor.r, light.finalColor.g, light.finalColor.b); + l.intensity = light.light.intensity; + + lights.Add(l); + dirLightCount++; } } - - //m_DeferredMaterial.SetBuffer("g_vLightList", EnableClustered ? m_perVoxelLightLists : lightList); - m_DeferredMaterial.SetBuffer("g_vLightList", lightList); - m_DeferredReflectionMaterial.SetBuffer("g_vLightList", lightList); - - m_DeferredMaterial.SetBuffer("g_vLightData", m_lightDataBuffer); - m_DeferredReflectionMaterial.SetBuffer("g_vLightData", m_lightDataBuffer); - - m_DeferredMaterial.SetBuffer("g_dirLightData", m_dirLightList); - - cmd.name = "DoTiledDeferredLighting"; - - //cmd.SetRenderTarget(new RenderTargetIdentifier(kGBufferEmission), new RenderTargetIdentifier(kGBufferZ)); - - cmd.SetGlobalMatrix("g_mViewToWorld", viewToWorld); - cmd.SetGlobalMatrix("g_mWorldToView", viewToWorld.inverse); - cmd.SetGlobalMatrix("g_mScrProjection", scrProj); - cmd.SetGlobalMatrix("g_mInvScrProjection", incScrProj); - - // Shadow constants - cmd.SetGlobalMatrixArray("g_matWorldToShadow", g_matWorldToShadow); - cmd.SetGlobalVectorArray("g_vDirShadowSplitSpheres", g_vDirShadowSplitSpheres); - cmd.SetGlobalVector("g_vShadow3x3PCFTerms0", g_vShadow3x3PCFTerms[0]); - cmd.SetGlobalVector("g_vShadow3x3PCFTerms1", g_vShadow3x3PCFTerms[1]); - cmd.SetGlobalVector("g_vShadow3x3PCFTerms2", g_vShadow3x3PCFTerms[2]); - cmd.SetGlobalVector("g_vShadow3x3PCFTerms3", g_vShadow3x3PCFTerms[3]); - - //cmd.Blit (kGBufferNormal, (RenderTexture)null); // debug: display normals - - cmd.Blit(kGBufferEmission, kCameraTarget, m_DeferredMaterial, 0); - cmd.Blit(kGBufferEmission, kCameraTarget, m_DeferredReflectionMaterial, 0); - - // Set the intermediate target for compositing (skybox, etc) - cmd.SetRenderTarget(new RenderTargetIdentifier(kCameraTarget), new RenderTargetIdentifier(kCameraDepthTexture)); - - loop.ExecuteCommandBuffer(cmd); - cmd.Dispose(); - } - - void SetMatrixCS(CommandBuffer cmd, ComputeShader shadercs, string name, Matrix4x4 mat) - { - float[] data = new float[16]; - - for (int c = 0; c < 4; c++) - for (int r = 0; r < 4; r++) - data[4 * c + r] = mat[r, c]; - - cmd.SetComputeFloatParams(shadercs, name, data); - } - - void UpdateDirectionalLights(Camera camera, ActiveLight[] activeLights) - { - int dirLightCount = 0; - List lights = new List(); - Matrix4x4 worldToView = camera.worldToCameraMatrix; - - for (int nLight = 0; nLight < activeLights.Length; nLight++) - { - ActiveLight light = activeLights[nLight]; - if (light.lightType == LightType.Directional) - { - Debug.Assert(dirLightCount < gMaxNumDirLights, "Too many directional lights."); - - DirectionalLight l = new DirectionalLight(); - - Matrix4x4 lightToWorld = light.localToWorld; - - Vector3 lightDir = lightToWorld.GetColumn(2); // Z axis in world space - - // represents a left hand coordinate system in world space - Vector3 vx = lightToWorld.GetColumn(0); // X axis in world space - Vector3 vy = lightToWorld.GetColumn(1); // Y axis in world space - Vector3 vz = lightDir; // Z axis in world space - - vx = worldToView.MultiplyVector(vx); - vy = worldToView.MultiplyVector(vy); - vz = worldToView.MultiplyVector(vz); - - l.uShadowLightIndex = (light.light.shadows != LightShadows.None) ? (uint)nLight : 0xffffffff; - - l.vLaxisX = vx; - l.vLaxisY = vy; - l.vLaxisZ = vz; - - l.vCol.Set(light.finalColor.r, light.finalColor.g, light.finalColor.b); - l.fLightIntensity = light.light.intensity; - - lights.Add(l); - dirLightCount++; - } - } - m_dirLightList.SetData(lights.ToArray()); - m_DeferredMaterial.SetInt("g_nDirLights", dirLightCount); - } - - void UpdateShadowConstants(ActiveLight[] activeLights, ref ShadowOutput shadow) - { - int nNumLightsIncludingTooMany = 0; - - int g_nNumLights = 0; - - Vector4[] g_vLightShadowIndex_vLightParams = new Vector4[MAX_LIGHTS]; - Vector4[] g_vLightFalloffParams = new Vector4[MAX_LIGHTS]; - - for (int nLight = 0; nLight < activeLights.Length; nLight++) - { - nNumLightsIncludingTooMany++; - if (nNumLightsIncludingTooMany > MAX_LIGHTS) - continue; - - ActiveLight light = activeLights[nLight]; - LightType lightType = light.lightType; - Vector3 position = light.light.transform.position; - Vector3 lightDir = light.light.transform.forward.normalized; - - // Setup shadow data arrays - bool hasShadows = shadow.GetShadowSliceCountLightIndex(nLight) != 0; - - if (lightType == LightType.Directional) - { - g_vLightShadowIndex_vLightParams[g_nNumLights] = new Vector4(0, 0, 1, 1); - g_vLightFalloffParams[g_nNumLights] = new Vector4(0.0f, 0.0f, float.MaxValue, (float)lightType); - - if (hasShadows) - { - for (int s = 0; s < MAX_DIRECTIONAL_SPLIT; ++s) - { - g_vDirShadowSplitSpheres[s] = shadow.directionalShadowSplitSphereSqr[s]; - } - } - } - else if (lightType == LightType.Point) - { - g_vLightShadowIndex_vLightParams[g_nNumLights] = new Vector4(0, 0, 1, 1); - g_vLightFalloffParams[g_nNumLights] = new Vector4(1.0f, 0.0f, light.range * light.range, (float)lightType); - } - else if (lightType == LightType.Spot) - { - g_vLightShadowIndex_vLightParams[g_nNumLights] = new Vector4(0, 0, 1, 1); - g_vLightFalloffParams[g_nNumLights] = new Vector4(1.0f, 0.0f, light.range * light.range, (float)lightType); - } - - if (hasShadows) - { - // Enable shadows - g_vLightShadowIndex_vLightParams[g_nNumLights].x = 1; - for (int s = 0; s < shadow.GetShadowSliceCountLightIndex(nLight); ++s) - { - int shadowSliceIndex = shadow.GetShadowSliceIndex(nLight, s); - g_matWorldToShadow[g_nNumLights * MAX_SHADOWMAP_PER_LIGHTS + s] = shadow.shadowSlices[shadowSliceIndex].shadowTransform.transpose; - } - } - - g_nNumLights++; - } - - // Warn if too many lights found - if (nNumLightsIncludingTooMany > MAX_LIGHTS) - { - if (nNumLightsIncludingTooMany > m_nWarnedTooManyLights) - { - Debug.LogError("ERROR! Found " + nNumLightsIncludingTooMany + " runtime lights! Valve renderer supports up to " + MAX_LIGHTS + - " active runtime lights at a time!\nDisabling " + (nNumLightsIncludingTooMany - MAX_LIGHTS) + " runtime light" + - ((nNumLightsIncludingTooMany - MAX_LIGHTS) > 1 ? "s" : "") + "!\n"); - } - m_nWarnedTooManyLights = nNumLightsIncludingTooMany; - } - else - { - if (m_nWarnedTooManyLights > 0) - { - m_nWarnedTooManyLights = 0; - Debug.Log("SUCCESS! Found " + nNumLightsIncludingTooMany + " runtime lights which is within the supported number of lights, " + MAX_LIGHTS + ".\n\n"); - } - } - - // PCF 3x3 Shadows - float flTexelEpsilonX = 1.0f / m_ShadowSettings.shadowAtlasWidth; - float flTexelEpsilonY = 1.0f / m_ShadowSettings.shadowAtlasHeight; - g_vShadow3x3PCFTerms[0] = new Vector4(20.0f / 267.0f, 33.0f / 267.0f, 55.0f / 267.0f, 0.0f); - g_vShadow3x3PCFTerms[1] = new Vector4(flTexelEpsilonX, flTexelEpsilonY, -flTexelEpsilonX, -flTexelEpsilonY); - g_vShadow3x3PCFTerms[2] = new Vector4(flTexelEpsilonX, flTexelEpsilonY, 0.0f, 0.0f); - g_vShadow3x3PCFTerms[3] = new Vector4(-flTexelEpsilonX, -flTexelEpsilonY, 0.0f, 0.0f); - } - - int GenerateSourceLightBuffers(Camera camera, CullResults inputs) - { - VisibleReflectionProbe[] probes = inputs.culledReflectionProbes; - //ReflectionProbe[] probes = Object.FindObjectsOfType(); - - int numLights = inputs.culledLights.Length; - int numProbes = probes.Length; - int numVolumes = numLights + numProbes; - - - SFiniteLightData[] lightData = new SFiniteLightData[numVolumes]; - SFiniteLightBound[] boundData = new SFiniteLightBound[numVolumes]; - Matrix4x4 worldToView = camera.worldToCameraMatrix; - - int i = 0; - uint shadowLightIndex = 0; - foreach (var cl in inputs.culledLights) - { - float range = cl.range; - - Matrix4x4 lightToWorld = cl.localToWorld; - //Matrix4x4 worldToLight = l.worldToLocal; - - Vector3 lightPos = lightToWorld.GetColumn(3); - - boundData[i].vBoxAxisX.Set(1, 0, 0); - boundData[i].vBoxAxisY.Set(0, 1, 0); - boundData[i].vBoxAxisZ.Set(0, 0, 1); - boundData[i].vScaleXY.Set(1.0f, 1.0f); - boundData[i].fRadius = range; - - lightData[i].flags = 0; - lightData[i].fRecipRange = 1.0f / range; - lightData[i].vCol.Set(cl.finalColor.r, cl.finalColor.g, cl.finalColor.b); - lightData[i].iSliceIndex = 0; - lightData[i].uLightModel = (uint)LightDefinitions.DIRECT_LIGHT; - lightData[i].uShadowLightIndex = shadowLightIndex; - shadowLightIndex++; - - bool bHasCookie = cl.light.cookie != null; - bool bHasShadow = cl.light.shadows != LightShadows.None; - - if (cl.lightType == LightType.Spot) - { - bool bIsCircularSpot = !bHasCookie; - if (!bIsCircularSpot) // square spots always have cookie - { - lightData[i].iSliceIndex = m_cookieTexArray.FetchSlice(cl.light.cookie); - } - - Vector3 lightDir = lightToWorld.GetColumn(2); // Z axis in world space - - // represents a left hand coordinate system in world space - Vector3 vx = lightToWorld.GetColumn(0); // X axis in world space - Vector3 vy = lightToWorld.GetColumn(1); // Y axis in world space - Vector3 vz = lightDir; // Z axis in world space - - // transform to camera space (becomes a left hand coordinate frame in Unity since Determinant(worldToView)<0) - vx = worldToView.MultiplyVector(vx); - vy = worldToView.MultiplyVector(vy); - vz = worldToView.MultiplyVector(vz); - - - const float pi = 3.1415926535897932384626433832795f; - const float degToRad = (float)(pi / 180.0); - const float radToDeg = (float)(180.0 / pi); - - - //float sa = cl.GetSpotAngle(); // total field of view from left to right side - float sa = radToDeg * (2 * Mathf.Acos(1.0f / cl.invCosHalfSpotAngle)); // spot angle doesn't exist in the structure so reversing it for now. - - - float cs = Mathf.Cos(0.5f * sa * degToRad); - float si = Mathf.Sin(0.5f * sa * degToRad); - float ta = cs > 0.0f ? (si / cs) : gFltMax; - - float cota = si > 0.0f ? (cs / si) : gFltMax; - - //const float cotasa = l.GetCotanHalfSpotAngle(); - - // apply nonuniform scale to OBB of spot light - bool bSqueeze = true;//sa < 0.7f * 90.0f; // arb heuristic - float fS = bSqueeze ? ta : si; - boundData[i].vCen = worldToView.MultiplyPoint(lightPos + ((0.5f * range) * lightDir)); // use mid point of the spot as the center of the bounding volume for building screen-space AABB for tiled lighting. - - lightData[i].vLaxisX = vx; - lightData[i].vLaxisY = vy; - lightData[i].vLaxisZ = vz; - - // scale axis to match box or base of pyramid - boundData[i].vBoxAxisX = (fS * range) * vx; - boundData[i].vBoxAxisY = (fS * range) * vy; - boundData[i].vBoxAxisZ = (0.5f * range) * vz; - - // generate bounding sphere radius - float fAltDx = si; - float fAltDy = cs; - fAltDy = fAltDy - 0.5f; - //if(fAltDy<0) fAltDy=-fAltDy; - - fAltDx *= range; fAltDy *= range; - - float fAltDist = Mathf.Sqrt(fAltDy * fAltDy + (bIsCircularSpot ? 1.0f : 2.0f) * fAltDx * fAltDx); - boundData[i].fRadius = fAltDist > (0.5f * range) ? fAltDist : (0.5f * range); // will always pick fAltDist - boundData[i].vScaleXY = bSqueeze ? new Vector2(0.01f, 0.01f) : new Vector2(1.0f, 1.0f); - - // fill up ldata - lightData[i].uLightType = (uint)LightDefinitions.SPOT_LIGHT; - lightData[i].vLpos = worldToView.MultiplyPoint(lightPos); - lightData[i].fSphRadiusSq = range * range; - lightData[i].fPenumbra = cs; - lightData[i].cotan = cota; - lightData[i].flags |= (bIsCircularSpot ? LightDefinitions.IS_CIRCULAR_SPOT_SHAPE : 0); - - lightData[i].flags |= (bHasCookie ? LightDefinitions.HAS_COOKIE_TEXTURE : 0); - lightData[i].flags |= (bHasShadow ? LightDefinitions.HAS_SHADOW : 0); - } - else if (cl.lightType == LightType.Point) - { - if (bHasCookie) - { - lightData[i].iSliceIndex = m_cubeCookieTexArray.FetchSlice(cl.light.cookie); - } - - boundData[i].vCen = worldToView.MultiplyPoint(lightPos); - boundData[i].vBoxAxisX.Set(range, 0, 0); - boundData[i].vBoxAxisY.Set(0, range, 0); - boundData[i].vBoxAxisZ.Set(0, 0, -range); // transform to camera space (becomes a left hand coordinate frame in Unity since Determinant(worldToView)<0) - boundData[i].vScaleXY.Set(1.0f, 1.0f); - boundData[i].fRadius = range; + s_DirLightList.SetData(lights.ToArray()); - // represents a left hand coordinate system in world space since det(worldToView)<0 - Matrix4x4 lightToView = worldToView * lightToWorld; - Vector3 vx = lightToView.GetColumn(0); - Vector3 vy = lightToView.GetColumn(1); - Vector3 vz = lightToView.GetColumn(2); - - // fill up ldata - lightData[i].uLightType = (uint)LightDefinitions.SPHERE_LIGHT; - lightData[i].vLpos = boundData[i].vCen; - lightData[i].fSphRadiusSq = range * range; - - lightData[i].vLaxisX = vx; - lightData[i].vLaxisY = vy; - lightData[i].vLaxisZ = vz; - - lightData[i].flags |= (bHasCookie ? LightDefinitions.HAS_COOKIE_TEXTURE : 0); - lightData[i].flags |= (bHasShadow ? LightDefinitions.HAS_SHADOW : 0); - } - else - { - //Assert(false); - } - - // next light - if (cl.lightType == LightType.Spot || cl.lightType == LightType.Point) - ++i; - } - int numLightsOut = i; - - // probe.m_BlendDistance - // Vector3f extents = 0.5*Abs(probe.m_BoxSize); - // C center of rendered refl box <-- GetComponent (Transform).GetPosition() + m_BoxOffset; - // cube map capture point: GetComponent (Transform).GetPosition() - // shader parameter min and max are C+/-(extents+blendDistance) - - int numProbesOut = 0; - foreach (var rl in probes) - { - Texture cubemap = rl.texture; - if (cubemap != null) // always a box for now - { - i = numProbesOut + numLightsOut; - - lightData[i].flags = 0; - - Bounds bnds = rl.bounds; - Vector3 boxOffset = rl.center; // reflection volume offset relative to cube map capture point - float blendDistance = rl.blendDistance; - float imp = rl.importance; - - Matrix4x4 mat = rl.localToWorld; - //Matrix4x4 mat = rl.transform.localToWorldMatrix; - Vector3 cubeCapturePos = mat.GetColumn(3); // cube map capture position in world space - - - // implicit in CalculateHDRDecodeValues() --> float ints = rl.intensity; - bool boxProj = (rl.boxProjection != 0); - Vector4 decodeVals = rl.hdr; - //Vector4 decodeVals = rl.CalculateHDRDecodeValues(); - - // C is reflection volume center in world space (NOT same as cube map capture point) - Vector3 e = bnds.extents; // 0.5f * Vector3.Max(-boxSizes[p], boxSizes[p]); - //Vector3 C = bnds.center; // P + boxOffset; - Vector3 C = mat.MultiplyPoint(boxOffset); // same as commented out line above when rot is identity - - //Vector3 posForShaderParam = bnds.center - boxOffset; // gives same as rl.GetComponent().position; - Vector3 posForShaderParam = cubeCapturePos; // same as commented out line above when rot is identity - Vector3 combinedExtent = e + new Vector3(blendDistance, blendDistance, blendDistance); - - Vector3 vx = mat.GetColumn(0); - Vector3 vy = mat.GetColumn(1); - Vector3 vz = mat.GetColumn(2); - - // transform to camera space (becomes a left hand coordinate frame in Unity since Determinant(worldToView)<0) - vx = worldToView.MultiplyVector(vx); - vy = worldToView.MultiplyVector(vy); - vz = worldToView.MultiplyVector(vz); - - Vector3 Cw = worldToView.MultiplyPoint(C); - - if (boxProj) lightData[i].flags |= LightDefinitions.IS_BOX_PROJECTED; - - lightData[i].vLpos = Cw; - lightData[i].vLaxisX = vx; - lightData[i].vLaxisY = vy; - lightData[i].vLaxisZ = vz; - lightData[i].vLocalCubeCapturePoint = -boxOffset; - lightData[i].fProbeBlendDistance = blendDistance; - - lightData[i].fLightIntensity = decodeVals.x; - lightData[i].fDecodeExp = decodeVals.y; - - lightData[i].iSliceIndex = m_cubeReflTexArray.FetchSlice(cubemap); - - Vector3 delta = combinedExtent - e; - lightData[i].vBoxInnerDist = e; - lightData[i].vBoxInvRange.Set(1.0f / delta.x, 1.0f / delta.y, 1.0f / delta.z); - - boundData[i].vCen = Cw; - boundData[i].vBoxAxisX = combinedExtent.x * vx; - boundData[i].vBoxAxisY = combinedExtent.y * vy; - boundData[i].vBoxAxisZ = combinedExtent.z * vz; - boundData[i].vScaleXY.Set(1.0f, 1.0f); - boundData[i].fRadius = combinedExtent.magnitude; - - // fill up ldata - lightData[i].uLightType = (uint)LightDefinitions.BOX_LIGHT; - lightData[i].uLightModel = (uint)LightDefinitions.REFLECTION_LIGHT; + return dirLightCount; + } + + void UpdateShadowConstants(IList visibleLights, ref ShadowOutput shadow) + { + var nNumLightsIncludingTooMany = 0; + + var numLights = 0; + + var lightShadowIndex_LightParams = new Vector4[k_MaxLights]; + var lightFalloffParams = new Vector4[k_MaxLights]; + + for (int nLight = 0; nLight < visibleLights.Count; nLight++) + { + nNumLightsIncludingTooMany++; + if (nNumLightsIncludingTooMany > k_MaxLights) + continue; + + var light = visibleLights[nLight]; + var lightType = light.lightType; + var position = light.light.transform.position; + var lightDir = light.light.transform.forward.normalized; + + // Setup shadow data arrays + var hasShadows = shadow.GetShadowSliceCountLightIndex(nLight) != 0; + + if (lightType == LightType.Directional) + { + lightShadowIndex_LightParams[numLights] = new Vector4(0, 0, 1, 1); + lightFalloffParams[numLights] = new Vector4(0.0f, 0.0f, float.MaxValue, (float)lightType); + + if (hasShadows) + { + for (int s = 0; s < k_MaxDirectionalSplit; ++s) + { + m_DirShadowSplitSpheres[s] = shadow.directionalShadowSplitSphereSqr[s]; + } + } + } + else if (lightType == LightType.Point) + { + lightShadowIndex_LightParams[numLights] = new Vector4(0, 0, 1, 1); + lightFalloffParams[numLights] = new Vector4(1.0f, 0.0f, light.range * light.range, (float)lightType); + } + else if (lightType == LightType.Spot) + { + lightShadowIndex_LightParams[numLights] = new Vector4(0, 0, 1, 1); + lightFalloffParams[numLights] = new Vector4(1.0f, 0.0f, light.range * light.range, (float)lightType); + } + + if (hasShadows) + { + // Enable shadows + lightShadowIndex_LightParams[numLights].x = 1; + for (int s = 0; s < shadow.GetShadowSliceCountLightIndex(nLight); ++s) + { + var shadowSliceIndex = shadow.GetShadowSliceIndex(nLight, s); + m_MatWorldToShadow[numLights * k_MaxShadowmapPerLights + s] = shadow.shadowSlices[shadowSliceIndex].shadowTransform.transpose; + } + } + + numLights++; + } + + // Warn if too many lights found + if (nNumLightsIncludingTooMany > k_MaxLights) + { + if (nNumLightsIncludingTooMany > m_WarnedTooManyLights) + { + Debug.LogError("ERROR! Found " + nNumLightsIncludingTooMany + " runtime lights! Valve renderer supports up to " + k_MaxLights + + " active runtime lights at a time!\nDisabling " + (nNumLightsIncludingTooMany - k_MaxLights) + " runtime light" + + ((nNumLightsIncludingTooMany - k_MaxLights) > 1 ? "s" : "") + "!\n"); + } + m_WarnedTooManyLights = nNumLightsIncludingTooMany; + } + else + { + if (m_WarnedTooManyLights > 0) + { + m_WarnedTooManyLights = 0; + Debug.Log("SUCCESS! Found " + nNumLightsIncludingTooMany + " runtime lights which is within the supported number of lights, " + k_MaxLights + ".\n\n"); + } + } + + // PCF 3x3 Shadows + var flTexelEpsilonX = 1.0f / m_ShadowSettings.shadowAtlasWidth; + var flTexelEpsilonY = 1.0f / m_ShadowSettings.shadowAtlasHeight; + m_Shadow3X3PCFTerms[0] = new Vector4(20.0f / 267.0f, 33.0f / 267.0f, 55.0f / 267.0f, 0.0f); + m_Shadow3X3PCFTerms[1] = new Vector4(flTexelEpsilonX, flTexelEpsilonY, -flTexelEpsilonX, -flTexelEpsilonY); + m_Shadow3X3PCFTerms[2] = new Vector4(flTexelEpsilonX, flTexelEpsilonY, 0.0f, 0.0f); + m_Shadow3X3PCFTerms[3] = new Vector4(-flTexelEpsilonX, -flTexelEpsilonY, 0.0f, 0.0f); + } + + int GenerateSourceLightBuffers(Camera camera, CullResults inputs) + { + var probes = inputs.visibleReflectionProbes; + //ReflectionProbe[] probes = Object.FindObjectsOfType(); + + var numModels = (int)LightDefinitions.NR_LIGHT_MODELS; + var numVolTypes = (int)LightDefinitions.MAX_TYPES; + var numEntries = new int[numModels,numVolTypes]; + var offsets = new int[numModels,numVolTypes]; + var numEntries2nd = new int[numModels,numVolTypes]; + + // first pass. Figure out how much we have of each and establish offsets + foreach (var cl in inputs.visibleLights) + { + var volType = cl.lightType==LightType.Spot ? LightDefinitions.SPOT_LIGHT : (cl.lightType==LightType.Point ? LightDefinitions.SPHERE_LIGHT : -1); + if(volType>=0) ++numEntries[LightDefinitions.DIRECT_LIGHT,volType]; + } - ++numProbesOut; - } - } - - - m_convexBoundsBuffer.SetData(boundData); - m_lightDataBuffer.SetData(lightData); - - - return numLightsOut + numProbesOut; - } - - /* public override void Render(Camera[] cameras, RenderLoop renderLoop) - { - foreach (var camera in cameras) - { - CullResults cullResults; - CullingParameters cullingParams; - if (!CullResults.GetCullingParameters(camera, out cullingParams)) - continue; + foreach (var rl in probes) + { + var volType = LightDefinitions.BOX_LIGHT; // always a box for now + if(rl.texture!=null) ++numEntries[LightDefinitions.REFLECTION_LIGHT,volType]; + } + + // add decals here too similar to the above + + // establish offsets + for(var m=0; m 0.0f ? (si / cs) : FltMax; - ResizeIfNecessary(iW, iH); + var cota = si > 0.0f ? (cs / si) : FltMax; - // do anything we need to do upon a new frame. - NewFrame(); + //const float cotasa = l.GetCotanHalfSpotAngle(); - ShadowOutput shadows; - m_ShadowPass.Render(loop, cullResults, out shadows); + // apply nonuniform scale to OBB of spot light + var squeeze = true;//sa < 0.7f * 90.0f; // arb heuristic + var fS = squeeze ? ta : si; + bound.center = worldToView.MultiplyPoint(lightPos + ((0.5f * range) * lightDir)); // use mid point of the spot as the center of the bounding volume for building screen-space AABB for tiled lighting. - //m_DeferredMaterial.SetInt("_SrcBlend", camera.hdr ? (int)BlendMode.One : (int)BlendMode.DstColor); - //m_DeferredMaterial.SetInt("_DstBlend", camera.hdr ? (int)BlendMode.One : (int)BlendMode.Zero); - //m_DeferredReflectionMaterial.SetInt("_SrcBlend", camera.hdr ? (int)BlendMode.One : (int)BlendMode.DstColor); - //m_DeferredReflectionMaterial.SetInt("_DstBlend", camera.hdr ? (int)BlendMode.One : (int)BlendMode.Zero); - loop.SetupCameraProperties(camera); + light.lightAxisX = vx; + light.lightAxisY = vy; + light.lightAxisZ = vz; - UpdateShadowConstants(cullResults.culledLights, ref shadows); + // scale axis to match box or base of pyramid + bound.boxAxisX = (fS * range) * vx; + bound.boxAxisY = (fS * range) * vy; + bound.boxAxisZ = (0.5f * range) * vz; - RenderGBuffer(cullResults, camera, loop); + // generate bounding sphere radius + var fAltDx = si; + var fAltDy = cs; + fAltDy = fAltDy - 0.5f; + //if(fAltDy<0) fAltDy=-fAltDy; - //@TODO: render forward-only objects into depth buffer - CopyDepthAfterGBuffer(loop); - //@TODO: render reflection probes + fAltDx *= range; fAltDy *= range; - //RenderLighting(camera, inputs, loop); + var altDist = Mathf.Sqrt(fAltDy * fAltDy + (isCircularSpot ? 1.0f : 2.0f) * fAltDx * fAltDx); + bound.radius = altDist > (0.5f * range) ? altDist : (0.5f * range); // will always pick fAltDist + bound.scaleXY = squeeze ? new Vector2(0.01f, 0.01f) : new Vector2(1.0f, 1.0f); - // - Matrix4x4 proj = camera.projectionMatrix; - Matrix4x4 temp = new Matrix4x4(); - temp.SetRow(0, new Vector4(1.0f, 0.0f, 0.0f, 0.0f)); - temp.SetRow(1, new Vector4(0.0f, 1.0f, 0.0f, 0.0f)); - temp.SetRow(2, new Vector4(0.0f, 0.0f, 0.5f, 0.5f)); - temp.SetRow(3, new Vector4(0.0f, 0.0f, 0.0f, 1.0f)); - Matrix4x4 projh = temp * proj; - Matrix4x4 invProjh = projh.inverse; + // fill up ldata + light.lightType = (uint)LightDefinitions.SPOT_LIGHT; + light.lightPos = worldToView.MultiplyPoint(lightPos); + light.radiusSq = range * range; + light.penumbra = cs; + light.cotan = cota; + light.flags |= (isCircularSpot ? LightDefinitions.IS_CIRCULAR_SPOT_SHAPE : 0); - temp.SetRow(0, new Vector4(0.5f * iW, 0.0f, 0.0f, 0.5f * iW)); - temp.SetRow(1, new Vector4(0.0f, 0.5f * iH, 0.0f, 0.5f * iH)); - temp.SetRow(2, new Vector4(0.0f, 0.0f, 0.5f, 0.5f)); - temp.SetRow(3, new Vector4(0.0f, 0.0f, 0.0f, 1.0f)); - Matrix4x4 projscr = temp * proj; - Matrix4x4 invProjscr = projscr.inverse; + light.flags |= (bHasCookie ? LightDefinitions.HAS_COOKIE_TEXTURE : 0); + light.flags |= (bHasShadow ? LightDefinitions.HAS_SHADOW : 0); + int i = LightDefinitions.DIRECT_LIGHT, j = LightDefinitions.SPOT_LIGHT; + idxOut = numEntries2nd[i,j] + offsets[i,j]; ++numEntries2nd[i,j]; + } + else if (cl.lightType == LightType.Point) + { + if (bHasCookie) + { + light.sliceIndex = m_CubeCookieTexArray.FetchSlice(cl.light.cookie); + } + + bound.center = worldToView.MultiplyPoint(lightPos); + bound.boxAxisX.Set(range, 0, 0); + bound.boxAxisY.Set(0, range, 0); + bound.boxAxisZ.Set(0, 0, -range); // transform to camera space (becomes a left hand coordinate frame in Unity since Determinant(worldToView)<0) + bound.scaleXY.Set(1.0f, 1.0f); + bound.radius = range; - int numLights = GenerateSourceLightBuffers(camera, cullResults); + // represents a left hand coordinate system in world space since det(worldToView)<0 + var lightToView = worldToView * lightToWorld; + Vector3 vx = lightToView.GetColumn(0); + Vector3 vy = lightToView.GetColumn(1); + Vector3 vz = lightToView.GetColumn(2); + // fill up ldata + light.lightType = (uint)LightDefinitions.SPHERE_LIGHT; + light.lightPos = bound.center; + light.radiusSq = range * range; - int nrTilesX = (iW + 15) / 16; - int nrTilesY = (iH + 15) / 16; - //ComputeBuffer lightList = new ComputeBuffer(nrTilesX * nrTilesY * (32 / 2), sizeof(uint)); + light.lightAxisX = vx; + light.lightAxisY = vy; + light.lightAxisZ = vz; + light.flags |= (bHasCookie ? LightDefinitions.HAS_COOKIE_TEXTURE : 0); + light.flags |= (bHasShadow ? LightDefinitions.HAS_SHADOW : 0); - var cmd = new CommandBuffer(); + int i = LightDefinitions.DIRECT_LIGHT, j = LightDefinitions.SPHERE_LIGHT; + idxOut = numEntries2nd[i,j] + offsets[i,j]; ++numEntries2nd[i,j]; + } + else + { + //Assert(false); + } - cmd.name = "Build light list"; - cmd.SetComputeIntParam(m_BuildScreenAABBShader, "g_iNrVisibLights", numLights); - SetMatrixCS(cmd, m_BuildScreenAABBShader, "g_mProjection", projh); - SetMatrixCS(cmd, m_BuildScreenAABBShader, "g_mInvProjection", invProjh); - cmd.SetComputeBufferParam(m_BuildScreenAABBShader, kGenAABBKernel, "g_vBoundsBuffer", m_aabbBoundsBuffer); - cmd.ComputeDispatch(m_BuildScreenAABBShader, kGenAABBKernel, (numLights + 7) / 8, 1, 1); + // next light + if (cl.lightType == LightType.Spot || cl.lightType == LightType.Point) + { + boundData[idxOut] = bound; + lightData[idxOut] = light; + } + } + var numLightsOut = offsets[LightDefinitions.DIRECT_LIGHT, numVolTypes-1] + numEntries[LightDefinitions.DIRECT_LIGHT, numVolTypes-1]; - cmd.SetComputeIntParam(m_BuildPerTileLightListShader, "g_iNrVisibLights", numLights); - SetMatrixCS(cmd, m_BuildPerTileLightListShader, "g_mScrProjection", projscr); - SetMatrixCS(cmd, m_BuildPerTileLightListShader, "g_mInvScrProjection", invProjscr); - cmd.SetComputeTextureParam(m_BuildPerTileLightListShader, kGenListPerTileKernel, "g_depth_tex", new RenderTargetIdentifier(kCameraDepthTexture)); - cmd.SetComputeBufferParam(m_BuildPerTileLightListShader, kGenListPerTileKernel, "g_vLightList", lightList); - cmd.ComputeDispatch(m_BuildPerTileLightListShader, kGenListPerTileKernel, nrTilesX, nrTilesY, 1); + // probe.m_BlendDistance + // Vector3f extents = 0.5*Abs(probe.m_BoxSize); + // C center of rendered refl box <-- GetComponent (Transform).GetPosition() + m_BoxOffset; + // cube map capture point: GetComponent (Transform).GetPosition() + // shader parameter min and max are C+/-(extents+blendDistance) + foreach (var rl in probes) + { + var cubemap = rl.texture; + + // always a box for now + if (cubemap == null) + continue; + + var bndData = new SFiniteLightBound(); + var lgtData = new SFiniteLightData(); + + var idxOut = 0; + lgtData.flags = 0; + + var bnds = rl.bounds; + var boxOffset = rl.center; // reflection volume offset relative to cube map capture point + var blendDistance = rl.blendDistance; + float imp = rl.importance; + + var mat = rl.localToWorld; + //Matrix4x4 mat = rl.transform.localToWorldMatrix; + Vector3 cubeCapturePos = mat.GetColumn(3); // cube map capture position in world space + + + // implicit in CalculateHDRDecodeValues() --> float ints = rl.intensity; + var boxProj = (rl.boxProjection != 0); + var decodeVals = rl.hdr; + //Vector4 decodeVals = rl.CalculateHDRDecodeValues(); + + // C is reflection volume center in world space (NOT same as cube map capture point) + var e = bnds.extents; // 0.5f * Vector3.Max(-boxSizes[p], boxSizes[p]); + //Vector3 C = bnds.center; // P + boxOffset; + var C = mat.MultiplyPoint(boxOffset); // same as commented out line above when rot is identity + + //Vector3 posForShaderParam = bnds.center - boxOffset; // gives same as rl.GetComponent().position; + var posForShaderParam = cubeCapturePos; // same as commented out line above when rot is identity + var combinedExtent = e + new Vector3(blendDistance, blendDistance, blendDistance); + + Vector3 vx = mat.GetColumn(0); + Vector3 vy = mat.GetColumn(1); + Vector3 vz = mat.GetColumn(2); + + // transform to camera space (becomes a left hand coordinate frame in Unity since Determinant(worldToView)<0) + vx = worldToView.MultiplyVector(vx); + vy = worldToView.MultiplyVector(vy); + vz = worldToView.MultiplyVector(vz); + + var Cw = worldToView.MultiplyPoint(C); + + if (boxProj) lgtData.flags |= LightDefinitions.IS_BOX_PROJECTED; + + lgtData.lightPos = Cw; + lgtData.lightAxisX = vx; + lgtData.lightAxisY = vy; + lgtData.lightAxisZ = vz; + lgtData.localCubeCapturePoint = -boxOffset; + lgtData.probeBlendDistance = blendDistance; + + lgtData.lightIntensity = decodeVals.x; + lgtData.decodeExp = decodeVals.y; + + lgtData.sliceIndex = m_CubeReflTexArray.FetchSlice(cubemap); + + var delta = combinedExtent - e; + lgtData.boxInnerDist = e; + lgtData.boxInvRange.Set(1.0f / delta.x, 1.0f / delta.y, 1.0f / delta.z); + + bndData.center = Cw; + bndData.boxAxisX = combinedExtent.x * vx; + bndData.boxAxisY = combinedExtent.y * vy; + bndData.boxAxisZ = combinedExtent.z * vz; + bndData.scaleXY.Set(1.0f, 1.0f); + bndData.radius = combinedExtent.magnitude; + + // fill up ldata + lgtData.lightType = (uint)LightDefinitions.BOX_LIGHT; + lgtData.lightModel = (uint)LightDefinitions.REFLECTION_LIGHT; + + + int i = LightDefinitions.REFLECTION_LIGHT, j = LightDefinitions.BOX_LIGHT; + idxOut = numEntries2nd[i,j] + offsets[i,j]; ++numEntries2nd[i,j]; + boundData[idxOut] = bndData; + lightData[idxOut] = lgtData; + } + + var numProbesOut = offsets[LightDefinitions.REFLECTION_LIGHT, numVolTypes-1] + numEntries[LightDefinitions.REFLECTION_LIGHT, numVolTypes-1]; + for(var m=0; m0 && m_HeightOnRecord>0) + if (s_WidthOnRecord > 0 && s_HeightOnRecord > 0) ReleaseResolutionDependentBuffers(); AllocResolutionDependentBuffers(curWidth, curHeight); // update recorded window resolution - m_WidthOnRecord = curWidth; - m_HeightOnRecord = curHeight; + s_WidthOnRecord = curWidth; + s_HeightOnRecord = curHeight; } } void ReleaseResolutionDependentBuffers() { - if (lightList != null) - lightList.Release(); + if (s_LightList != null) + s_LightList.Release(); - if(EnableClustered) + if (enableClustered) { - if(m_perVoxelLightLists != null) - m_perVoxelLightLists.Release(); + if (s_PerVoxelLightLists != null) + s_PerVoxelLightLists.Release(); - if(m_perVoxelOffset != null) - m_perVoxelOffset.Release(); + if (s_PerVoxelOffset != null) + s_PerVoxelOffset.Release(); - if(gUseDepthBuffer && m_perTileLogBaseTweak != null) - m_perTileLogBaseTweak.Release(); + if (k_UseDepthBuffer && s_PerTileLogBaseTweak != null) + s_PerTileLogBaseTweak.Release(); } } int NumLightIndicesPerClusteredTile() { - return 4*(1<>1; // room for 31 lights and a nrLights value. + var nrTilesX = (width + 15) / 16; + var nrTilesY = (height + 15) / 16; + var nrTiles = nrTilesX * nrTilesY; + const int capacityUShortsPerTile = 32; + const int dwordsPerTile = (capacityUShortsPerTile + 1) >> 1; // room for 31 lights and a nrLights value. - lightList = new ComputeBuffer(LightDefinitions.NR_LIGHT_MODELS * nrDWordsPerTileFPTL * nrTiles, sizeof(uint)); // enough list memory for a 4k x 4k display + s_LightList = new ComputeBuffer(LightDefinitions.NR_LIGHT_MODELS * dwordsPerTile * nrTiles, sizeof(uint)); // enough list memory for a 4k x 4k display - if(EnableClustered) + if (enableClustered) { - m_perVoxelOffset = new ComputeBuffer(LightDefinitions.NR_LIGHT_MODELS * (1< g_vLightList; -StructuredBuffer g_vLightData; - - -float GetLinearDepth(float zDptBufSpace) // 0 is near 1 is far -{ - float3 vP = float3(0.0f,0.0f,zDptBufSpace); - float4 v4Pres = mul(g_mInvScrProjection, float4(vP,1.0)); - return v4Pres.z / v4Pres.w; -} - - -float3 GetViewPosFromLinDepth(float2 v2ScrPos, float fLinDepth) -{ - float fSx = g_mScrProjection[0].x; - //float fCx = g_mScrProjection[2].x; - float fCx = g_mScrProjection[0].z; - float fSy = g_mScrProjection[1].y; - //float fCy = g_mScrProjection[2].y; - float fCy = g_mScrProjection[1].z; - -#ifdef LEFT_HAND_COORDINATES - return fLinDepth*float3( ((v2ScrPos.x-fCx)/fSx), ((v2ScrPos.y-fCy)/fSy), 1.0 ); -#else - return fLinDepth*float3( -((v2ScrPos.x+fCx)/fSx), -((v2ScrPos.y+fCy)/fSy), 1.0 ); -#endif -} - -#ifdef USE_CLUSTERED_LIGHTLIST - -uniform float g_fClustScale; -uniform float g_fClustBase; -uniform float g_fNearPlane; -uniform float g_fFarPlane; -//uniform int g_iLog2NumClusters; // numClusters = (1< g_vLayeredOffsetsBuffer; -#ifdef ENABLE_DEPTH_TEXTURE_BACKPLANE -Buffer g_logBaseBuffer; -#endif - -#include "ClusteredUtils.h" - -void GetLightCountAndStart(out uint uStart, out uint uNrLights, uint2 tileIDX, int nrTilesX, int nrTilesY, float linDepth) -{ - g_iLog2NumClusters = (int) (g_fLog2NumClusters+0.5); // ridiculous - -#ifdef ENABLE_DEPTH_TEXTURE_BACKPLANE - float logBase = g_logBaseBuffer[tileIDX.y*nrTilesX + tileIDX.x]; -#else - float logBase = g_fClustBase; -#endif - int clustIdx = SnapToClusterIdx(linDepth, logBase); - - int nrClusters = (1<>27)&31; -} - -uint FetchIndex(const uint tileOffs, const uint l) -{ - return g_vLightList[ tileOffs+l ]; -} - -#else - -void GetLightCountAndStart(out uint uStart, out uint uNrLights, uint2 tileIDX, int nrTilesX, int nrTilesY, float linDepth) -{ - const int tileOffs = (tileIDX.y+REFLECTION_LIGHT*nrTilesY)*nrTilesX+tileIDX.x; - - uNrLights = g_vLightList[ 16*tileOffs + 0]&0xffff; - uStart = tileOffs; -} - -uint FetchIndex(const uint tileOffs, const uint l) -{ - const uint l1 = l+1; - return (g_vLightList[ 16*tileOffs + (l1>>1)]>>((l1&1)*16))&0xffff; -} - -#endif float3 ExecuteReflectionProbes(uint2 pixCoord, uint start, uint numLights, float linDepth); -float3 OverlayHeatMap(uint uNumLights, float3 c); struct v2f { - float4 vertex : SV_POSITION; - float2 texcoord : TEXCOORD0; + float4 vertex : SV_POSITION; + float2 texcoord : TEXCOORD0; }; v2f vert (float4 vertex : POSITION, float2 texcoord : TEXCOORD0) { - v2f o; - o.vertex = UnityObjectToClipPos(vertex); - o.texcoord = texcoord.xy; - return o; + v2f o; + o.vertex = UnityObjectToClipPos(vertex); + o.texcoord = texcoord.xy; + return o; } -half4 frag (v2f i) : SV_Target -{ - uint2 pixCoord = ((uint2) i.vertex.xy); - - uint iWidth; - uint iHeight; - _CameraDepthTexture.GetDimensions(iWidth, iHeight); - uint nrTilesX = (iWidth+15)/16; - uint nrTilesY = (iHeight+15)/16; - - uint2 tileIDX = pixCoord / 16; - - float zbufDpth = FetchDepth(_CameraDepthTexture, pixCoord.xy).x; - float linDepth = GetLinearDepth(zbufDpth); - - uint numLights=0, start=0; - GetLightCountAndStart(start, numLights, tileIDX, nrTilesX, nrTilesY, linDepth); - - float3 c = ExecuteReflectionProbes(pixCoord, start, numLights, linDepth); - //c = OverlayHeatMap(numLights, c); - - return float4(c,1.0); -} struct StandardData { - float3 specularColor; - float3 diffuseColor; - float3 normalWorld; - float smoothness; - float occlusion; + float3 specularColor; + float3 diffuseColor; + float3 normalWorld; + float smoothness; + float occlusion; }; -StandardData UnityStandardDataFromGbuffer(float4 gbuffer0, float4 gbuffer1, float4 gbuffer2) +struct LocalDataBRDF { - StandardData data; - - data.normalWorld = normalize(2*gbuffer2.xyz-1); - data.smoothness = gbuffer1.a; - data.diffuseColor = gbuffer0.xyz; data.specularColor = gbuffer1.xyz; - data.occlusion = gbuffer0.a; + StandardData gbuf; - return data; -} - -half3 distanceFromAABB(half3 p, half3 aabbMin, half3 aabbMax) -{ - return max(max(p - aabbMax, aabbMin - p), half3(0.0, 0.0, 0.0)); -} + // extras + float oneMinusReflectivity; + float3 Vworld; +}; -half3 Unity_GlossyEnvironment (UNITY_ARGS_TEXCUBEARRAY(tex), int sliceIndex, half4 hdr, Unity_GlossyEnvironmentData glossIn); +static LocalDataBRDF g_localParams; -float3 ExecuteReflectionProbes(uint2 pixCoord, uint start, uint numLights, float linDepth) +StandardData UnityStandardDataFromGbuffer(float4 gbuffer0, float4 gbuffer1, float4 gbuffer2) { - float3 vP = GetViewPosFromLinDepth(float2(pixCoord.x+0.5, pixCoord.y+0.5), linDepth); - float3 worldPos = mul(g_mViewToWorld, float4(vP.xyz,1.0)).xyz; //unity_CameraToWorld - - float3 vWSpaceVDir = normalize(mul((float3x3) g_mViewToWorld, -vP).xyz); //unity_CameraToWorld - - float4 gbuffer0 = _CameraGBufferTexture0.Load( uint3(pixCoord.xy, 0) ); - float4 gbuffer1 = _CameraGBufferTexture1.Load( uint3(pixCoord.xy, 0) ); - float4 gbuffer2 = _CameraGBufferTexture2.Load( uint3(pixCoord.xy, 0) ); - - StandardData data = UnityStandardDataFromGbuffer(gbuffer0, gbuffer1, gbuffer2); - - float oneMinusReflectivity = 1.0 - SpecularStrength(data.specularColor.rgb); - float3 worldNormalRefl = reflect(-vWSpaceVDir, data.normalWorld); + StandardData data; - float3 vspaceRefl = mul((float3x3) g_mWorldToView, worldNormalRefl).xyz; + data.normalWorld = normalize(2*gbuffer2.xyz-1); + data.smoothness = gbuffer1.a; + data.diffuseColor = gbuffer0.xyz; data.specularColor = gbuffer1.xyz; + data.occlusion = gbuffer0.a; - - UnityLight light; - light.color = 0; - light.dir = 0; - - float3 ints = 0; - - uint l=0; - - // we need this outer loop for when we cannot assume a wavefront is 64 wide - // since in this case we cannot assume the lights will remain sorted by type - // during processing in lightlist_cs.hlsl -#if !defined(XBONE) && !defined(PLAYSTATION4) - while(l11 ? float4(1.0,1.0,1.0,1.0) : kRadarColors[nColorIndex]; - - return lerp(c, pow(col.xyz, 2.2), 0.3*col.w); + StandardData data = g_localParams.gbuf; + + return data.occlusion * UNITY_BRDF_PBS(0, data.specularColor, g_localParams.oneMinusReflectivity, data.smoothness, data.normalWorld, g_localParams.Vworld, light, ind).rgb; } -half3 Unity_GlossyEnvironment (UNITY_ARGS_TEXCUBEARRAY(tex), int sliceIndex, half4 hdr, Unity_GlossyEnvironmentData glossIn) +half4 frag (v2f i) : SV_Target { -#if UNITY_GLOSS_MATCHES_MARMOSET_TOOLBAG2 && (SHADER_TARGET >= 30) - // TODO: remove pow, store cubemap mips differently - half perceptualRoughness = pow(glossIn.roughness, 3.0/4.0); -#else - half perceptualRoughness = glossIn.roughness; // MM: switched to this -#endif - //perceptualRoughness = sqrt(sqrt(2/(64.0+2))); // spec power to the square root of real roughness + uint2 pixCoord = ((uint2) i.vertex.xy); -#if 0 - float m = perceptualRoughness*perceptualRoughness; // m is the real roughness parameter - const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) - float n = (2.0/max(fEps, m*m))-2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + float zbufDpth = FetchDepth(_CameraDepthTexture, pixCoord.xy).x; + float linDepth = GetLinearDepth(zbufDpth); - n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + float3 vP = GetViewPosFromLinDepth(i.vertex.xy, linDepth); + float3 vPw = mul(g_mViewToWorld, float4(vP, 1)).xyz; + float3 Vworld = normalize(mul((float3x3) g_mViewToWorld, -vP).xyz); //unity_CameraToWorld - perceptualRoughness = pow( 2/(n+2), 0.25); // remap back to square root of real roughness -#else - // MM: came up with a surprisingly close approximation to what the #if 0'ed out code above does. - perceptualRoughness = perceptualRoughness*(1.7 - 0.7*perceptualRoughness); -#endif + float4 gbuffer0 = _CameraGBufferTexture0.Load( uint3(pixCoord.xy, 0) ); + float4 gbuffer1 = _CameraGBufferTexture1.Load( uint3(pixCoord.xy, 0) ); + float4 gbuffer2 = _CameraGBufferTexture2.Load( uint3(pixCoord.xy, 0) ); + StandardData data = UnityStandardDataFromGbuffer(gbuffer0, gbuffer1, gbuffer2); + g_localParams.gbuf = data; + g_localParams.oneMinusReflectivity = 1.0 - SpecularStrength(data.specularColor.rgb); + g_localParams.Vworld = Vworld; - half mip = perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; - half4 rgbm = UNITY_SAMPLE_TEXCUBEARRAY_LOD(tex, float4(glossIn.reflUVW.xyz, sliceIndex), mip); + uint numReflectionsProcessed = 0; + float3 c = ExecuteReflectionList(numReflectionsProcessed, pixCoord, vP, data.normalWorld, Vworld, data.smoothness); - //return rgbm.xyz; - return DecodeHDR_NoLinearSupportInSM2 (rgbm, hdr); + //c = OverlayHeatMap(numLightsProcessed, c); + return float4(c,1.0); } -ENDCG +ENDCG } } diff --git a/Assets/ScriptableRenderLoop/fptl/Internal-DeferredShading.shader b/Assets/ScriptableRenderLoop/fptl/Internal-DeferredShading.shader index b3641ddfeb2..a2e8075c8d1 100644 --- a/Assets/ScriptableRenderLoop/fptl/Internal-DeferredShading.shader +++ b/Assets/ScriptableRenderLoop/fptl/Internal-DeferredShading.shader @@ -1,508 +1,135 @@ Shader "Hidden/Internal-Obscurity" { Properties { - _LightTexture0 ("", any) = "" {} - _ShadowMapTexture ("", any) = "" {} - _SrcBlend ("", Float) = 1 - _DstBlend ("", Float) = 1 + _LightTexture0 ("", any) = "" {} + _ShadowMapTexture ("", any) = "" {} + _SrcBlend ("", Float) = 1 + _DstBlend ("", Float) = 1 } SubShader { -Pass +Pass { - ZWrite Off - ZTest Always - Cull Off - Blend Off - //Blend [_SrcBlend] [_DstBlend] - + ZWrite Off + ZTest Always + Cull Off + Blend Off + //Blend [_SrcBlend] [_DstBlend] + CGPROGRAM #pragma target 5.0 #pragma vertex vert #pragma fragment frag -//#pragma multi_compile USE_FPTL_LIGHTLIST USE_CLUSTERED_LIGHTLIST - -//#define ENABLE_DEPTH_TEXTURE_BACKPLANE -//#define USE_CLUSTERED_LIGHTLIST - -#include "UnityCG.cginc" -#include "UnityStandardBRDF.cginc" -#include "UnityStandardUtils.cginc" -#include "UnityPBSLighting.cginc" - -#include "..\common\ShaderBase.h" -#include "LightDefinitions.cs.hlsl" - - -uniform float4x4 g_mViewToWorld; -uniform float4x4 g_mInvScrProjection; -uniform float4x4 g_mScrProjection; -uniform uint g_nDirLights; +#pragma multi_compile USE_FPTL_LIGHTLIST USE_CLUSTERED_LIGHTLIST -//--------------------------------------------------------------------------------------------------------------------------------------------------------- -// TODO: clean up.. -va -#define MAX_SHADOW_LIGHTS 10 -#define MAX_SHADOWMAP_PER_LIGHT 6 -#define MAX_DIRECTIONAL_SPLIT 4 +#include "UnityLightingCommon.cginc" -#define CUBEMAPFACE_POSITIVE_X 0 -#define CUBEMAPFACE_NEGATIVE_X 1 -#define CUBEMAPFACE_POSITIVE_Y 2 -#define CUBEMAPFACE_NEGATIVE_Y 3 -#define CUBEMAPFACE_POSITIVE_Z 4 -#define CUBEMAPFACE_NEGATIVE_Z 5 +float3 EvalMaterial(UnityLight light, UnityIndirect ind); -CBUFFER_START(ShadowLightData) +// uses the optimized single layered light list for opaques only -float4 g_vShadow3x3PCFTerms0; -float4 g_vShadow3x3PCFTerms1; -float4 g_vShadow3x3PCFTerms2; -float4 g_vShadow3x3PCFTerms3; - -float4 g_vDirShadowSplitSpheres[MAX_DIRECTIONAL_SPLIT]; -float4x4 g_matWorldToShadow[MAX_SHADOW_LIGHTS * MAX_SHADOWMAP_PER_LIGHT]; +#ifdef USE_FPTL_LIGHTLIST + #define OPAQUES_ONLY +#endif -CBUFFER_END -//--------------------------------------------------------------------------------------------------------------------------------------------------------- +#include "TiledLightingTemplate.hlsl" Texture2D _CameraDepthTexture; Texture2D _CameraGBufferTexture0; Texture2D _CameraGBufferTexture1; Texture2D _CameraGBufferTexture2; -//UNITY_DECLARE_TEX2D(_LightTextureB0); -sampler2D _LightTextureB0; -UNITY_DECLARE_TEX2DARRAY(_spotCookieTextures); -UNITY_DECLARE_TEXCUBEARRAY(_pointCookieTextures); - -StructuredBuffer g_vLightList; -StructuredBuffer g_vLightData; -StructuredBuffer g_dirLightData; - - - -float GetLinearDepth(float zDptBufSpace) // 0 is near 1 is far -{ - float3 vP = float3(0.0f,0.0f,zDptBufSpace); - float4 v4Pres = mul(g_mInvScrProjection, float4(vP,1.0)); - return v4Pres.z / v4Pres.w; -} - - -float3 GetViewPosFromLinDepth(float2 v2ScrPos, float fLinDepth) -{ - float fSx = g_mScrProjection[0].x; - //float fCx = g_mScrProjection[2].x; - float fCx = g_mScrProjection[0].z; - float fSy = g_mScrProjection[1].y; - //float fCy = g_mScrProjection[2].y; - float fCy = g_mScrProjection[1].z; - -#ifdef LEFT_HAND_COORDINATES - return fLinDepth*float3( ((v2ScrPos.x-fCx)/fSx), ((v2ScrPos.y-fCy)/fSy), 1.0 ); -#else - return fLinDepth*float3( -((v2ScrPos.x+fCx)/fSx), -((v2ScrPos.y+fCy)/fSy), 1.0 ); -#endif -} - -#ifdef USE_CLUSTERED_LIGHTLIST - -uniform float g_fClustScale; -uniform float g_fClustBase; -uniform float g_fNearPlane; -uniform float g_fFarPlane; -//uniform int g_iLog2NumClusters; // numClusters = (1< g_vLayeredOffsetsBuffer; -#ifdef ENABLE_DEPTH_TEXTURE_BACKPLANE -Buffer g_logBaseBuffer; -#endif - -#include "ClusteredUtils.h" - -void GetLightCountAndStart(out uint uStart, out uint uNrLights, uint2 tileIDX, int nrTilesX, int nrTilesY, float linDepth) -{ - g_iLog2NumClusters = (int) (g_fLog2NumClusters+0.5); // ridiculous - -#ifdef ENABLE_DEPTH_TEXTURE_BACKPLANE - float logBase = g_logBaseBuffer[tileIDX.y*nrTilesX + tileIDX.x]; -#else - float logBase = g_fClustBase; -#endif - int clustIdx = SnapToClusterIdx(linDepth, logBase); - - int nrClusters = (1<>27)&31; -} - -uint FetchIndex(const uint tileOffs, const uint l) -{ - return g_vLightList[ tileOffs+l ]; -} - -#else - -void GetLightCountAndStart(out uint uStart, out uint uNrLights, uint2 tileIDX, int nrTilesX, int nrTilesY, float linDepth) -{ - const int tileOffs = (tileIDX.y+DIRECT_LIGHT*nrTilesY)*nrTilesX+tileIDX.x; - - uNrLights = g_vLightList[ 16*tileOffs + 0]&0xffff; - uStart = tileOffs; -} - -uint FetchIndex(const uint tileOffs, const uint l) -{ - const uint l1 = l+1; - return (g_vLightList[ 16*tileOffs + (l1>>1)]>>((l1&1)*16))&0xffff; -} - -#endif - -float3 ExecuteLightList(uint2 pixCoord, uint start, uint numLights, float linDepth); -float3 OverlayHeatMap(uint uNumLights, float3 c); - -#define VALVE_DECLARE_SHADOWMAP( tex ) Texture2D tex; SamplerComparisonState sampler##tex -#define VALVE_SAMPLE_SHADOW( tex, coord ) tex.SampleCmpLevelZero( sampler##tex, (coord).xy, (coord).z ) - -VALVE_DECLARE_SHADOWMAP(g_tShadowBuffer); - -float ComputeShadow_PCF_3x3_Gaussian(float3 vPositionWs, float4x4 matWorldToShadow) -{ - float4 vPositionTextureSpace = mul(float4(vPositionWs.xyz, 1.0), matWorldToShadow); - vPositionTextureSpace.xyz /= vPositionTextureSpace.w; - - float2 shadowMapCenter = vPositionTextureSpace.xy; - - if ((shadowMapCenter.x < 0.0f) || (shadowMapCenter.x > 1.0f) || (shadowMapCenter.y < 0.0f) || (shadowMapCenter.y > 1.0f)) - return 1.0f; - - float objDepth = saturate(257.0 / 256.0 - vPositionTextureSpace.z); - - float4 v20Taps; - v20Taps.x = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.xy, objDepth)).x; // 1 1 - v20Taps.y = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.zy, objDepth)).x; // -1 1 - v20Taps.z = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.xw, objDepth)).x; // 1 -1 - v20Taps.w = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.zw, objDepth)).x; // -1 -1 - float flSum = dot(v20Taps.xyzw, float4(0.25, 0.25, 0.25, 0.25)); - if ((flSum == 0.0) || (flSum == 1.0)) - return flSum; - flSum *= g_vShadow3x3PCFTerms0.x * 4.0; - - float4 v33Taps; - v33Taps.x = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms2.xz, objDepth)).x; // 1 0 - v33Taps.y = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms3.xz, objDepth)).x; // -1 0 - v33Taps.z = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms3.zy, objDepth)).x; // 0 -1 - v33Taps.w = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms2.zy, objDepth)).x; // 0 1 - flSum += dot(v33Taps.xyzw, g_vShadow3x3PCFTerms0.yyyy); +Texture2D _CameraGBufferTexture3; - flSum += VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy, objDepth)).x * g_vShadow3x3PCFTerms0.z; - - return flSum; -} - -//--------------------------------------------------------------------------------------------------------------------------------------------------------- -/** -* Gets the cascade weights based on the world position of the fragment and the positions of the split spheres for each cascade. -* Returns an invalid split index if past shadowDistance (ie 4 is invalid for cascade) -*/ -float GetSplitSphereIndexForDirshadows(float3 wpos) -{ - float3 fromCenter0 = wpos.xyz - g_vDirShadowSplitSpheres[0].xyz; - float3 fromCenter1 = wpos.xyz - g_vDirShadowSplitSpheres[1].xyz; - float3 fromCenter2 = wpos.xyz - g_vDirShadowSplitSpheres[2].xyz; - float3 fromCenter3 = wpos.xyz - g_vDirShadowSplitSpheres[3].xyz; - float4 distances2 = float4(dot(fromCenter0, fromCenter0), dot(fromCenter1, fromCenter1), dot(fromCenter2, fromCenter2), dot(fromCenter3, fromCenter3)); - - float4 vDirShadowSplitSphereSqRadii; - vDirShadowSplitSphereSqRadii.x = g_vDirShadowSplitSpheres[0].w; - vDirShadowSplitSphereSqRadii.y = g_vDirShadowSplitSpheres[1].w; - vDirShadowSplitSphereSqRadii.z = g_vDirShadowSplitSpheres[2].w; - vDirShadowSplitSphereSqRadii.w = g_vDirShadowSplitSpheres[3].w; - fixed4 weights = float4(distances2 < vDirShadowSplitSphereSqRadii); - weights.yzw = saturate(weights.yzw - weights.xyz); - return 4 - dot(weights, float4(4, 3, 2, 1)); -} - -float SampleShadow(uint type, float3 vPositionWs, float3 vPositionToLightDirWs, uint lightIndex) -{ - float flShadowScalar = 1.0; - int shadowSplitIndex = 0; - - if (type == DIRECTIONAL_LIGHT) - { - shadowSplitIndex = GetSplitSphereIndexForDirshadows(vPositionWs); - } - - else if (type == SPHERE_LIGHT) - { - float3 absPos = abs(vPositionToLightDirWs); - shadowSplitIndex = (vPositionToLightDirWs.z > 0) ? CUBEMAPFACE_NEGATIVE_Z : CUBEMAPFACE_POSITIVE_Z; - if (absPos.x > absPos.y) - { - if (absPos.x > absPos.z) - { - shadowSplitIndex = (vPositionToLightDirWs.x > 0) ? CUBEMAPFACE_NEGATIVE_X : CUBEMAPFACE_POSITIVE_X; - } - } - else - { - if (absPos.y > absPos.z) - { - shadowSplitIndex = (vPositionToLightDirWs.y > 0) ? CUBEMAPFACE_NEGATIVE_Y : CUBEMAPFACE_POSITIVE_Y; - } - } - } - - flShadowScalar = ComputeShadow_PCF_3x3_Gaussian(vPositionWs.xyz, g_matWorldToShadow[lightIndex * MAX_SHADOWMAP_PER_LIGHT + shadowSplitIndex]); - return flShadowScalar; -} struct v2f { - float4 vertex : SV_POSITION; - float2 texcoord : TEXCOORD0; + float4 vertex : SV_POSITION; + float2 texcoord : TEXCOORD0; }; v2f vert (float4 vertex : POSITION, float2 texcoord : TEXCOORD0) { - v2f o; - o.vertex = UnityObjectToClipPos(vertex); - o.texcoord = texcoord.xy; - return o; -} - -half4 frag (v2f i) : SV_Target -{ - uint2 pixCoord = ((uint2) i.vertex.xy); - - uint iWidth; - uint iHeight; - _CameraDepthTexture.GetDimensions(iWidth, iHeight); - uint nrTilesX = (iWidth+15)/16; - uint nrTilesY = (iHeight+15)/16; - - uint2 tileIDX = pixCoord / 16; - - float zbufDpth = FetchDepth(_CameraDepthTexture, pixCoord.xy).x; - float linDepth = GetLinearDepth(zbufDpth); - - uint numLights=0, start=0; - GetLightCountAndStart(start, numLights, tileIDX, nrTilesX, nrTilesY, linDepth); - - float3 c = ExecuteLightList(pixCoord, start, numLights, linDepth); - //c = OverlayHeatMap(numLights, c); - return float4(c,1.0); + v2f o; + o.vertex = UnityObjectToClipPos(vertex); + o.texcoord = texcoord.xy; + return o; } struct StandardData { - float3 specularColor; - float3 diffuseColor; - float3 normalWorld; - float smoothness; + float3 specularColor; + float3 diffuseColor; + float3 normalWorld; + float smoothness; + float3 emission; }; -StandardData UnityStandardDataFromGbuffer(float4 gbuffer0, float4 gbuffer1, float4 gbuffer2) +struct LocalDataBRDF { - StandardData data; + StandardData gbuf; - data.normalWorld = normalize(2*gbuffer2.xyz-1); - data.smoothness = gbuffer1.a; - data.diffuseColor = gbuffer0.xyz; data.specularColor = gbuffer1.xyz; - float ao = gbuffer0.a; + // extras + float oneMinusReflectivity; + float3 Vworld; +}; - return data; -} +static LocalDataBRDF g_localParams; -float3 ExecuteLightList(uint2 pixCoord, uint start, uint numLights, float linDepth) +StandardData UnityStandardDataFromGbuffer(float4 gbuffer0, float4 gbuffer1, float4 gbuffer2, float4 gbuffer3) { - float3 vP = GetViewPosFromLinDepth(float2(pixCoord.x+0.5, pixCoord.y+0.5), linDepth); - float3 vWSpaceVDir = normalize(mul((float3x3) g_mViewToWorld, -vP).xyz); //unity_CameraToWorld - - float4 gbuffer0 = _CameraGBufferTexture0.Load( uint3(pixCoord.xy, 0) ); - float4 gbuffer1 = _CameraGBufferTexture1.Load( uint3(pixCoord.xy, 0) ); - float4 gbuffer2 = _CameraGBufferTexture2.Load( uint3(pixCoord.xy, 0) ); + StandardData data; - StandardData data = UnityStandardDataFromGbuffer(gbuffer0, gbuffer1, gbuffer2); + data.normalWorld = normalize(2*gbuffer2.xyz-1); + data.smoothness = gbuffer1.a; + data.diffuseColor = gbuffer0.xyz; data.specularColor = gbuffer1.xyz; + float ao = gbuffer0.a; + data.emission = gbuffer3.xyz; + return data; +} - float oneMinusReflectivity = 1.0 - SpecularStrength(data.specularColor.rgb); - - UnityIndirect ind; - UNITY_INITIALIZE_OUTPUT(UnityIndirect, ind); - ind.diffuse = 0; - ind.specular = 0; +float3 EvalMaterial(UnityLight light, UnityIndirect ind) +{ + StandardData data = g_localParams.gbuf; + return UNITY_BRDF_PBS(data.diffuseColor, data.specularColor, g_localParams.oneMinusReflectivity, data.smoothness, data.normalWorld, g_localParams.Vworld, light, ind); +} - float3 ints = 0; - - uint l=0; - float3 vPositionWs = mul(g_mViewToWorld, float4(vP, 1)); +half4 frag (v2f i) : SV_Target +{ + uint2 pixCoord = ((uint2) i.vertex.xy); - for (int i = 0; i < g_nDirLights; i++) - { - DirectionalLight lightData = g_dirLightData[i]; - float atten = 1; + float zbufDpth = FetchDepth(_CameraDepthTexture, pixCoord.xy).x; + float linDepth = GetLinearDepth(zbufDpth); - [branch] - if (lightData.uShadowLightIndex != 0xffffffff) - { - float shadowScalar = SampleShadow(DIRECTIONAL_LIGHT, vPositionWs, 0, lightData.uShadowLightIndex); - atten *= shadowScalar; - } + float3 vP = GetViewPosFromLinDepth(i.vertex.xy, linDepth); + float3 vPw = mul(g_mViewToWorld, float4(vP, 1)).xyz; + float3 Vworld = normalize(mul((float3x3) g_mViewToWorld, -vP).xyz); //unity_CameraToWorld - UnityLight light; - light.color.xyz = lightData.vCol.xyz * atten; - light.dir.xyz = mul((float3x3) g_mViewToWorld, -lightData.vLaxisZ).xyz; + float4 gbuffer0 = _CameraGBufferTexture0.Load( uint3(pixCoord.xy, 0) ); + float4 gbuffer1 = _CameraGBufferTexture1.Load( uint3(pixCoord.xy, 0) ); + float4 gbuffer2 = _CameraGBufferTexture2.Load( uint3(pixCoord.xy, 0) ); + float4 gbuffer3 = _CameraGBufferTexture3.Load( uint3(pixCoord.xy, 0) ); - ints += UNITY_BRDF_PBS(data.diffuseColor, data.specularColor, oneMinusReflectivity, data.smoothness, data.normalWorld, vWSpaceVDir, light, ind); - } + StandardData data = UnityStandardDataFromGbuffer(gbuffer0, gbuffer1, gbuffer2, gbuffer3); - // we need this outer loop for when we cannot assume a wavefront is 64 wide - // since in this case we cannot assume the lights will remain sorted by type - // during processing in lightlist_cs.hlsl -#if !defined(XBONE) && !defined(PLAYSTATION4) - while(l0.0); // finally apply this to the dist att. - - const bool bHasShadow = (lgtDat.flags&HAS_SHADOW)!=0; - [branch]if(bHasShadow) - { - float shadowScalar = SampleShadow(SPOT_LIGHT, vPositionWs, 0, lgtDat.uShadowLightIndex); - atten *= shadowScalar; - } - - UnityLight light; - light.color.xyz = lgtDat.vCol.xyz*atten*angularAtt.xyz; - light.dir.xyz = mul((float3x3) g_mViewToWorld, vL).xyz; //unity_CameraToWorld - - ints += UNITY_BRDF_PBS (data.diffuseColor, data.specularColor, oneMinusReflectivity, data.smoothness, data.normalWorld, vWSpaceVDir, light, ind); - - ++l; uIndex = l=MAX_TYPES) ++l; - if(uLgtType!=SPOT_LIGHT && uLgtType!=SPHERE_LIGHT) ++l; -#endif - } + g_localParams.gbuf = data; + g_localParams.oneMinusReflectivity = 1.0 - SpecularStrength(data.specularColor.rgb); + g_localParams.Vworld = Vworld; - return ints; -} + uint numLightsProcessed = 0; + float3 c = data.emission + ExecuteLightList(numLightsProcessed, pixCoord, vP, vPw, Vworld); -float3 OverlayHeatMap(uint uNumLights, float3 c) -{ - ///////////////////////////////////////////////////////////////////// - // - const float4 kRadarColors[12] = - { - float4(0.0,0.0,0.0,0.0), // black - float4(0.0,0.0,0.6,0.5), // dark blue - float4(0.0,0.0,0.9,0.5), // blue - float4(0.0,0.6,0.9,0.5), // light blue - float4(0.0,0.9,0.9,0.5), // cyan - float4(0.0,0.9,0.6,0.5), // blueish green - float4(0.0,0.9,0.0,0.5), // green - float4(0.6,0.9,0.0,0.5), // yellowish green - float4(0.9,0.9,0.0,0.5), // yellow - float4(0.9,0.6,0.0,0.5), // orange - float4(0.9,0.0,0.0,0.5), // red - float4(1.0,0.0,0.0,0.9) // strong red - }; - - float fMaxNrLightsPerTile = 24; - - - - int nColorIndex = uNumLights==0 ? 0 : (1 + (int) floor(10 * (log2((float)uNumLights) / log2(fMaxNrLightsPerTile))) ); - nColorIndex = nColorIndex<0 ? 0 : nColorIndex; - float4 col = nColorIndex>11 ? float4(1.0,1.0,1.0,1.0) : kRadarColors[nColorIndex]; - - return lerp(c, pow(col.xyz, 2.2), 0.3*col.w); + //c = OverlayHeatMap(numLightsProcessed, c); + return float4(c,1.0); } -ENDCG +ENDCG } } diff --git a/Assets/ScriptableRenderLoop/fptl/LightDefinitions.cs b/Assets/ScriptableRenderLoop/fptl/LightDefinitions.cs index c78d35ee3dc..d7b03b5a492 100644 --- a/Assets/ScriptableRenderLoop/fptl/LightDefinitions.cs +++ b/Assets/ScriptableRenderLoop/fptl/LightDefinitions.cs @@ -1,67 +1,68 @@ using UnityEngine; +using UnityEngine.Experimental.ScriptableRenderLoop; -[UnityEngine.ScriptableRenderLoop.GenerateHLSL] +[GenerateHLSL] public struct SFiniteLightData { - // setup constant buffer - public float fPenumbra; - public int flags; - public uint uLightType; - public uint uLightModel; // DIRECT_LIGHT=0, REFLECTION_LIGHT=1 - - public Vector3 vLpos; - public float fLightIntensity; - - public Vector3 vLaxisX; - public float fRecipRange; - - public Vector3 vLaxisY; - public float fSphRadiusSq; - - public Vector3 vLaxisZ; // spot +Z axis + // setup constant buffer + public float penumbra; + public int flags; + public uint lightType; + public uint lightModel; // DIRECT_LIGHT=0, REFLECTION_LIGHT=1 + + public Vector3 lightPos; + public float lightIntensity; + + public Vector3 lightAxisX; + public float recipRange; + + public Vector3 lightAxisY; + public float radiusSq; + + public Vector3 lightAxisZ; // spot +Z axis public float cotan; - - public Vector3 vCol; - public int iSliceIndex; - public Vector3 vBoxInnerDist; - public float fDecodeExp; + public Vector3 color; + public int sliceIndex; + + public Vector3 boxInnerDist; + public float decodeExp; - public Vector3 vBoxInvRange; - public uint uShadowLightIndex; + public Vector3 boxInvRange; + public uint shadowLightIndex; - public Vector3 vLocalCubeCapturePoint; - public float fProbeBlendDistance; + public Vector3 localCubeCapturePoint; + public float probeBlendDistance; }; -[UnityEngine.ScriptableRenderLoop.GenerateHLSL] +[GenerateHLSL] public struct SFiniteLightBound { - public Vector3 vBoxAxisX; - public Vector3 vBoxAxisY; - public Vector3 vBoxAxisZ; - public Vector3 vCen; // a center in camera space inside the bounding volume of the light source. - public Vector2 vScaleXY; - public float fRadius; + public Vector3 boxAxisX; + public Vector3 boxAxisY; + public Vector3 boxAxisZ; + public Vector3 center; // a center in camera space inside the bounding volume of the light source. + public Vector2 scaleXY; + public float radius; }; -[UnityEngine.ScriptableRenderLoop.GenerateHLSL] +[GenerateHLSL] public struct DirectionalLight { - public Vector3 vCol; - public float fLightIntensity; + public Vector3 color; + public float intensity; - public Vector3 vLaxisX; - public uint uShadowLightIndex; + public Vector3 lightAxisX; + public uint shadowLightIndex; - public Vector3 vLaxisY; - public float fPad0; + public Vector3 lightAxisY; + public float pad0; - public Vector3 vLaxisZ; - public float fPad1; + public Vector3 lightAxisZ; + public float pad1; }; -[UnityEngine.ScriptableRenderLoop.GenerateHLSL] +[GenerateHLSL] public class LightDefinitions { public static int MAX_NR_LIGHTS_PER_CAMERA = 1024; @@ -80,10 +81,10 @@ public class LightDefinitions public static int SPOT_LIGHT = 0; public static int SPHERE_LIGHT = 1; public static int BOX_LIGHT = 2; - public static int DIRECTIONAL_LIGHT = 3; + public static int DIRECTIONAL_LIGHT = 3; - // direct lights and reflection probes for now - public static int NR_LIGHT_MODELS = 2; + // direct lights and reflection probes for now + public static int NR_LIGHT_MODELS = 2; public static int DIRECT_LIGHT = 0; public static int REFLECTION_LIGHT = 1; } diff --git a/Assets/ScriptableRenderLoop/fptl/LightDefinitions.cs.hlsl b/Assets/ScriptableRenderLoop/fptl/LightDefinitions.cs.hlsl index b144138033c..45cfa5044c2 100644 --- a/Assets/ScriptableRenderLoop/fptl/LightDefinitions.cs.hlsl +++ b/Assets/ScriptableRenderLoop/fptl/LightDefinitions.cs.hlsl @@ -24,200 +24,200 @@ // PackingRules = Exact struct SFiniteLightData { - float fPenumbra; + float penumbra; int flags; - uint uLightType; - uint uLightModel; - float3 vLpos; - float fLightIntensity; - float3 vLaxisX; - float fRecipRange; - float3 vLaxisY; - float fSphRadiusSq; - float3 vLaxisZ; + uint lightType; + uint lightModel; + float3 lightPos; + float lightIntensity; + float3 lightAxisX; + float recipRange; + float3 lightAxisY; + float radiusSq; + float3 lightAxisZ; float cotan; - float3 vCol; - int iSliceIndex; - float3 vBoxInnerDist; - float fDecodeExp; - float3 vBoxInvRange; - uint uShadowLightIndex; - float3 vLocalCubeCapturePoint; - float fProbeBlendDistance; + float3 color; + int sliceIndex; + float3 boxInnerDist; + float decodeExp; + float3 boxInvRange; + uint shadowLightIndex; + float3 localCubeCapturePoint; + float probeBlendDistance; }; // Generated from SFiniteLightBound // PackingRules = Exact struct SFiniteLightBound { - float3 vBoxAxisX; - float3 vBoxAxisY; - float3 vBoxAxisZ; - float3 vCen; - float2 vScaleXY; - float fRadius; + float3 boxAxisX; + float3 boxAxisY; + float3 boxAxisZ; + float3 center; + float2 scaleXY; + float radius; }; // Generated from DirectionalLight // PackingRules = Exact struct DirectionalLight { - float3 vCol; - float fLightIntensity; - float3 vLaxisX; - uint uShadowLightIndex; - float3 vLaxisY; - float fPad0; - float3 vLaxisZ; - float fPad1; + float3 color; + float intensity; + float3 lightAxisX; + uint shadowLightIndex; + float3 lightAxisY; + float pad0; + float3 lightAxisZ; + float pad1; }; // // Accessors for SFiniteLightData // -float GetFPenumbra(SFiniteLightData value) +float GetPenumbra(SFiniteLightData value) { - return value.fPenumbra; + return value.penumbra; } int GetFlags(SFiniteLightData value) { return value.flags; } -uint GetULightType(SFiniteLightData value) +uint GetLightType(SFiniteLightData value) { - return value.uLightType; + return value.lightType; } -uint GetULightModel(SFiniteLightData value) +uint GetLightModel(SFiniteLightData value) { - return value.uLightModel; + return value.lightModel; } -float3 GetVLpos(SFiniteLightData value) +float3 GetLightPos(SFiniteLightData value) { - return value.vLpos; + return value.lightPos; } -float GetFLightIntensity(SFiniteLightData value) +float GetLightIntensity(SFiniteLightData value) { - return value.fLightIntensity; + return value.lightIntensity; } -float3 GetVLaxisX(SFiniteLightData value) +float3 GetLightAxisX(SFiniteLightData value) { - return value.vLaxisX; + return value.lightAxisX; } -float GetFRecipRange(SFiniteLightData value) +float GetRecipRange(SFiniteLightData value) { - return value.fRecipRange; + return value.recipRange; } -float3 GetVLaxisY(SFiniteLightData value) +float3 GetLightAxisY(SFiniteLightData value) { - return value.vLaxisY; + return value.lightAxisY; } -float GetFSphRadiusSq(SFiniteLightData value) +float GetRadiusSq(SFiniteLightData value) { - return value.fSphRadiusSq; + return value.radiusSq; } -float3 GetVLaxisZ(SFiniteLightData value) +float3 GetLightAxisZ(SFiniteLightData value) { - return value.vLaxisZ; + return value.lightAxisZ; } float GetCotan(SFiniteLightData value) { return value.cotan; } -float3 GetVCol(SFiniteLightData value) +float3 GetColor(SFiniteLightData value) { - return value.vCol; + return value.color; } -int GetISliceIndex(SFiniteLightData value) +int GetSliceIndex(SFiniteLightData value) { - return value.iSliceIndex; + return value.sliceIndex; } -float3 GetVBoxInnerDist(SFiniteLightData value) +float3 GetBoxInnerDist(SFiniteLightData value) { - return value.vBoxInnerDist; + return value.boxInnerDist; } -float GetFDecodeExp(SFiniteLightData value) +float GetDecodeExp(SFiniteLightData value) { - return value.fDecodeExp; + return value.decodeExp; } -float3 GetVBoxInvRange(SFiniteLightData value) +float3 GetBoxInvRange(SFiniteLightData value) { - return value.vBoxInvRange; + return value.boxInvRange; } -uint GetUShadowLightIndex(SFiniteLightData value) +uint GetShadowLightIndex(SFiniteLightData value) { - return value.uShadowLightIndex; + return value.shadowLightIndex; } -float3 GetVLocalCubeCapturePoint(SFiniteLightData value) +float3 GetLocalCubeCapturePoint(SFiniteLightData value) { - return value.vLocalCubeCapturePoint; + return value.localCubeCapturePoint; } -float GetFProbeBlendDistance(SFiniteLightData value) +float GetProbeBlendDistance(SFiniteLightData value) { - return value.fProbeBlendDistance; + return value.probeBlendDistance; } // // Accessors for SFiniteLightBound // -float3 GetVBoxAxisX(SFiniteLightBound value) +float3 GetBoxAxisX(SFiniteLightBound value) { - return value.vBoxAxisX; + return value.boxAxisX; } -float3 GetVBoxAxisY(SFiniteLightBound value) +float3 GetBoxAxisY(SFiniteLightBound value) { - return value.vBoxAxisY; + return value.boxAxisY; } -float3 GetVBoxAxisZ(SFiniteLightBound value) +float3 GetBoxAxisZ(SFiniteLightBound value) { - return value.vBoxAxisZ; + return value.boxAxisZ; } -float3 GetVCen(SFiniteLightBound value) +float3 GetCenter(SFiniteLightBound value) { - return value.vCen; + return value.center; } -float2 GetVScaleXY(SFiniteLightBound value) +float2 GetScaleXY(SFiniteLightBound value) { - return value.vScaleXY; + return value.scaleXY; } -float GetFRadius(SFiniteLightBound value) +float GetRadius(SFiniteLightBound value) { - return value.fRadius; + return value.radius; } // // Accessors for DirectionalLight // -float3 GetVCol(DirectionalLight value) +float3 GetColor(DirectionalLight value) { - return value.vCol; + return value.color; } -float GetFLightIntensity(DirectionalLight value) +float GetIntensity(DirectionalLight value) { - return value.fLightIntensity; + return value.intensity; } -float3 GetVLaxisX(DirectionalLight value) +float3 GetLightAxisX(DirectionalLight value) { - return value.vLaxisX; + return value.lightAxisX; } -uint GetUShadowLightIndex(DirectionalLight value) +uint GetShadowLightIndex(DirectionalLight value) { - return value.uShadowLightIndex; + return value.shadowLightIndex; } -float3 GetVLaxisY(DirectionalLight value) +float3 GetLightAxisY(DirectionalLight value) { - return value.vLaxisY; + return value.lightAxisY; } -float GetFPad0(DirectionalLight value) +float GetPad0(DirectionalLight value) { - return value.fPad0; + return value.pad0; } -float3 GetVLaxisZ(DirectionalLight value) +float3 GetLightAxisZ(DirectionalLight value) { - return value.vLaxisZ; + return value.lightAxisZ; } -float GetFPad1(DirectionalLight value) +float GetPad1(DirectionalLight value) { - return value.fPad1; + return value.pad1; } diff --git a/Assets/ScriptableRenderLoop/fptl/LightingTemplate.hlsl b/Assets/ScriptableRenderLoop/fptl/LightingTemplate.hlsl new file mode 100644 index 00000000000..232ccac16bd --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/LightingTemplate.hlsl @@ -0,0 +1,277 @@ +#ifndef __LIGHTINGTEMPLATE_H__ +#define __LIGHTINGTEMPLATE_H__ + + +#include "UnityCG.cginc" +#include "UnityStandardBRDF.cginc" +#include "UnityStandardUtils.cginc" +#include "UnityPBSLighting.cginc" + + +uniform uint g_nNumDirLights; + +//--------------------------------------------------------------------------------------------------------------------------------------------------------- +// TODO: clean up.. -va +#define MAX_SHADOW_LIGHTS 10 +#define MAX_SHADOWMAP_PER_LIGHT 6 +#define MAX_DIRECTIONAL_SPLIT 4 + +#define CUBEMAPFACE_POSITIVE_X 0 +#define CUBEMAPFACE_NEGATIVE_X 1 +#define CUBEMAPFACE_POSITIVE_Y 2 +#define CUBEMAPFACE_NEGATIVE_Y 3 +#define CUBEMAPFACE_POSITIVE_Z 4 +#define CUBEMAPFACE_NEGATIVE_Z 5 + +CBUFFER_START(ShadowLightData) + +float4 g_vShadow3x3PCFTerms0; +float4 g_vShadow3x3PCFTerms1; +float4 g_vShadow3x3PCFTerms2; +float4 g_vShadow3x3PCFTerms3; + +float4 g_vDirShadowSplitSpheres[MAX_DIRECTIONAL_SPLIT]; +float4x4 g_matWorldToShadow[MAX_SHADOW_LIGHTS * MAX_SHADOWMAP_PER_LIGHT]; + +CBUFFER_END +//--------------------------------------------------------------------------------------------------------------------------------------------------------- + + +//UNITY_DECLARE_TEX2D(_LightTextureB0); +sampler2D _LightTextureB0; +UNITY_DECLARE_TEX2DARRAY(_spotCookieTextures); +UNITY_DECLARE_TEXCUBEARRAY(_pointCookieTextures); + +StructuredBuffer g_dirLightData; + + +#define VALVE_DECLARE_SHADOWMAP( tex ) Texture2D tex; SamplerComparisonState sampler##tex +#define VALVE_SAMPLE_SHADOW( tex, coord ) tex.SampleCmpLevelZero( sampler##tex, (coord).xy, (coord).z ) + +VALVE_DECLARE_SHADOWMAP(g_tShadowBuffer); + +float ComputeShadow_PCF_3x3_Gaussian(float3 vPositionWs, float4x4 matWorldToShadow) +{ + float4 vPositionTextureSpace = mul(float4(vPositionWs.xyz, 1.0), matWorldToShadow); + vPositionTextureSpace.xyz /= vPositionTextureSpace.w; + + float2 shadowMapCenter = vPositionTextureSpace.xy; + + if ((shadowMapCenter.x < 0.0f) || (shadowMapCenter.x > 1.0f) || (shadowMapCenter.y < 0.0f) || (shadowMapCenter.y > 1.0f)) + return 1.0f; + + float objDepth = saturate(257.0 / 256.0 - vPositionTextureSpace.z); + + float4 v20Taps; + v20Taps.x = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.xy, objDepth)).x; // 1 1 + v20Taps.y = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.zy, objDepth)).x; // -1 1 + v20Taps.z = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.xw, objDepth)).x; // 1 -1 + v20Taps.w = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms1.zw, objDepth)).x; // -1 -1 + float flSum = dot(v20Taps.xyzw, float4(0.25, 0.25, 0.25, 0.25)); + if ((flSum == 0.0) || (flSum == 1.0)) + return flSum; + flSum *= g_vShadow3x3PCFTerms0.x * 4.0; + + float4 v33Taps; + v33Taps.x = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms2.xz, objDepth)).x; // 1 0 + v33Taps.y = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms3.xz, objDepth)).x; // -1 0 + v33Taps.z = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms3.zy, objDepth)).x; // 0 -1 + v33Taps.w = VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy + g_vShadow3x3PCFTerms2.zy, objDepth)).x; // 0 1 + flSum += dot(v33Taps.xyzw, g_vShadow3x3PCFTerms0.yyyy); + + flSum += VALVE_SAMPLE_SHADOW(g_tShadowBuffer, float3(shadowMapCenter.xy, objDepth)).x * g_vShadow3x3PCFTerms0.z; + + return flSum; +} + +//--------------------------------------------------------------------------------------------------------------------------------------------------------- +/** +* Gets the cascade weights based on the world position of the fragment and the positions of the split spheres for each cascade. +* Returns an invalid split index if past shadowDistance (ie 4 is invalid for cascade) +*/ +float GetSplitSphereIndexForDirshadows(float3 wpos) +{ + float3 fromCenter0 = wpos.xyz - g_vDirShadowSplitSpheres[0].xyz; + float3 fromCenter1 = wpos.xyz - g_vDirShadowSplitSpheres[1].xyz; + float3 fromCenter2 = wpos.xyz - g_vDirShadowSplitSpheres[2].xyz; + float3 fromCenter3 = wpos.xyz - g_vDirShadowSplitSpheres[3].xyz; + float4 distances2 = float4(dot(fromCenter0, fromCenter0), dot(fromCenter1, fromCenter1), dot(fromCenter2, fromCenter2), dot(fromCenter3, fromCenter3)); + + float4 vDirShadowSplitSphereSqRadii; + vDirShadowSplitSphereSqRadii.x = g_vDirShadowSplitSpheres[0].w; + vDirShadowSplitSphereSqRadii.y = g_vDirShadowSplitSpheres[1].w; + vDirShadowSplitSphereSqRadii.z = g_vDirShadowSplitSpheres[2].w; + vDirShadowSplitSphereSqRadii.w = g_vDirShadowSplitSpheres[3].w; + fixed4 weights = float4(distances2 < vDirShadowSplitSphereSqRadii); + weights.yzw = saturate(weights.yzw - weights.xyz); + return 4 - dot(weights, float4(4, 3, 2, 1)); +} + +float SampleShadow(uint type, float3 vPositionWs, float3 vPositionToLightDirWs, uint lightIndex) +{ + float flShadowScalar = 1.0; + int shadowSplitIndex = 0; + + if (type == DIRECTIONAL_LIGHT) + { + shadowSplitIndex = GetSplitSphereIndexForDirshadows(vPositionWs); + } + + else if (type == SPHERE_LIGHT) + { + float3 absPos = abs(vPositionToLightDirWs); + shadowSplitIndex = (vPositionToLightDirWs.z > 0) ? CUBEMAPFACE_NEGATIVE_Z : CUBEMAPFACE_POSITIVE_Z; + if (absPos.x > absPos.y) + { + if (absPos.x > absPos.z) + { + shadowSplitIndex = (vPositionToLightDirWs.x > 0) ? CUBEMAPFACE_NEGATIVE_X : CUBEMAPFACE_POSITIVE_X; + } + } + else + { + if (absPos.y > absPos.z) + { + shadowSplitIndex = (vPositionToLightDirWs.y > 0) ? CUBEMAPFACE_NEGATIVE_Y : CUBEMAPFACE_POSITIVE_Y; + } + } + } + + flShadowScalar = ComputeShadow_PCF_3x3_Gaussian(vPositionWs.xyz, g_matWorldToShadow[lightIndex * MAX_SHADOWMAP_PER_LIGHT + shadowSplitIndex]); + return flShadowScalar; +} + + +float3 ExecuteLightList(uint start, uint numLights, float3 vP, float3 vPw, float3 Vworld) +{ + UnityIndirect ind; + UNITY_INITIALIZE_OUTPUT(UnityIndirect, ind); + ind.diffuse = 0; + ind.specular = 0; + + + float3 ints = 0; + + for (int i = 0; i < g_nNumDirLights; i++) + { + DirectionalLight lightData = g_dirLightData[i]; + float atten = 1; + + [branch] + if (lightData.shadowLightIndex != 0xffffffff) + { + float shadowScalar = SampleShadow(DIRECTIONAL_LIGHT, vPw, 0, lightData.shadowLightIndex); + atten *= shadowScalar; + } + + UnityLight light; + light.color.xyz = lightData.color.xyz * atten; + light.dir.xyz = mul((float3x3) g_mViewToWorld, -lightData.lightAxisZ).xyz; + + ints += EvalMaterial(light, ind); + } + + uint l=0; + // don't need the outer loop since the lights are sorted by volume type + //while(l0) + { + uint uIndex = l0.0); // finally apply this to the dist att. + + const bool bHasShadow = (lgtDat.flags&HAS_SHADOW)!=0; + [branch]if(bHasShadow) + { + float shadowScalar = SampleShadow(SPOT_LIGHT, vPw, 0, lgtDat.shadowLightIndex); + atten *= shadowScalar; + } + + UnityLight light; + light.color.xyz = lgtDat.color.xyz*atten*angularAtt.xyz; + light.dir.xyz = mul((float3x3) g_mViewToWorld, vL).xyz; //unity_CameraToWorld + + ints += EvalMaterial(light, ind); + + ++l; uIndex = l11 ? float4(1.0,1.0,1.0,1.0) : kRadarColors[nColorIndex]; + + return lerp(c, pow(col.xyz, 2.2), 0.3*col.w); +} + + + +#endif diff --git a/Assets/ScriptableRenderLoop/fptl/LightingUtils.hlsl.meta b/Assets/ScriptableRenderLoop/fptl/LightingUtils.hlsl.meta new file mode 100644 index 00000000000..1fbde467593 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/LightingUtils.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0f0336214df2a1845afb1ce1b72075f5 +timeCreated: 1476376272 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/ReflectionTemplate.hlsl b/Assets/ScriptableRenderLoop/fptl/ReflectionTemplate.hlsl new file mode 100644 index 00000000000..4050d1d051d --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/ReflectionTemplate.hlsl @@ -0,0 +1,165 @@ +#ifndef __REFLECTIONTEMPLATE_H__ +#define __REFLECTIONTEMPLATE_H__ + +#include "UnityCG.cginc" +#include "UnityStandardBRDF.cginc" +#include "UnityStandardUtils.cginc" +#include "UnityPBSLighting.cginc" + + +UNITY_DECLARE_TEXCUBEARRAY(_reflCubeTextures); +UNITY_DECLARE_TEXCUBE(_reflRootCubeTexture); +//uniform int _reflRootSliceIndex; +uniform float _reflRootHdrDecodeMult; +uniform float _reflRootHdrDecodeExp; + + +half3 Unity_GlossyEnvironment (UNITY_ARGS_TEXCUBEARRAY(tex), int sliceIndex, half4 hdr, Unity_GlossyEnvironmentData glossIn); + +half3 distanceFromAABB(half3 p, half3 aabbMin, half3 aabbMax) +{ + return max(max(p - aabbMax, aabbMin - p), half3(0.0, 0.0, 0.0)); +} + + +float3 ExecuteReflectionList(uint start, uint numReflProbes, float3 vP, float3 vNw, float3 Vworld, float smoothness) +{ + float3 worldNormalRefl = reflect(-Vworld, vNw); + + float3 vspaceRefl = mul((float3x3) g_mWorldToView, worldNormalRefl).xyz; + + float percRoughness = SmoothnessToPerceptualRoughness(smoothness); + + UnityLight light; + light.color = 0; + light.dir = 0; + + float3 ints = 0; + + // root ibl begin + { + Unity_GlossyEnvironmentData g; + g.roughness = percRoughness; + g.reflUVW = worldNormalRefl; + + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(_reflRootCubeTexture), float4(_reflRootHdrDecodeMult, _reflRootHdrDecodeExp, 0.0, 0.0), g); + //half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBEARRAY(_reflCubeTextures), _reflRootSliceIndex, float4(_reflRootHdrDecodeMult, _reflRootHdrDecodeExp, 0.0, 0.0), g); + + UnityIndirect ind; + ind.diffuse = 0; + ind.specular = env0;// * data.occlusion; + ints = EvalIndirectSpecular(light, ind); + } + // root ibl end + + uint l=0; + // don't need the outer loop since the probes are sorted by volume type (currently one type in fact) + //while(l0) + { + uint uIndex = l= 30) + // TODO: remove pow, store cubemap mips differently + half perceptualRoughness = pow(glossIn.roughness, 3.0/4.0); +#else + half perceptualRoughness = glossIn.roughness; // MM: switched to this +#endif + //perceptualRoughness = sqrt(sqrt(2/(64.0+2))); // spec power to the square root of real roughness + +#if 0 + float m = perceptualRoughness*perceptualRoughness; // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0/max(fEps, m*m))-2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + + perceptualRoughness = pow( 2/(n+2), 0.25); // remap back to square root of real roughness +#else + // MM: came up with a surprisingly close approximation to what the #if 0'ed out code above does. + perceptualRoughness = perceptualRoughness*(1.7 - 0.7*perceptualRoughness); +#endif + + + + half mip = perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + half4 rgbm = UNITY_SAMPLE_TEXCUBEARRAY_LOD(tex, float4(glossIn.reflUVW.xyz, sliceIndex), mip); + + return DecodeHDR(rgbm, hdr); +} + + + + +#endif diff --git a/Assets/ScriptableRenderLoop/fptl/ReflectionTemplate.hlsl.meta b/Assets/ScriptableRenderLoop/fptl/ReflectionTemplate.hlsl.meta new file mode 100644 index 00000000000..18e3e1545a1 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/ReflectionTemplate.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7e1ced85dc3e259469da295c01d95ecd +timeCreated: 1476168722 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingTemplate.hlsl b/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingTemplate.hlsl new file mode 100644 index 00000000000..9701fa2e5d1 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingTemplate.hlsl @@ -0,0 +1,19 @@ +#ifndef __REGULARFORWARDLIGHTINGTEMPLATE_H__ +#define __REGULARFORWARDLIGHTINGTEMPLATE_H__ + + +#include "RegularForwardLightingUtils.hlsl" +#include "LightingTemplate.hlsl" + + +float3 ExecuteLightList(out uint numLightsProcessed, uint2 pixCoord, float3 vP, float3 vPw, float3 Vworld) +{ + uint start = 0, numLights = 0; + GetCountAndStart(start, numLights, DIRECT_LIGHT); + + numLightsProcessed = numLights; // mainly for debugging/heat maps + return ExecuteLightList(start, numLights, vP, vPw, Vworld); +} + + +#endif diff --git a/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingTemplate.hlsl.meta b/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingTemplate.hlsl.meta new file mode 100644 index 00000000000..0bb4c6f6594 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingTemplate.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: addc185d48decc34d9bf21cb3a4ea28c +timeCreated: 1476774180 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingUtils.hlsl b/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingUtils.hlsl new file mode 100644 index 00000000000..b6a504ffc7d --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingUtils.hlsl @@ -0,0 +1,25 @@ +#ifndef __REGULARFORWARDLIGHTINGUTILS_H__ +#define __REGULARFORWARDLIGHTINGUTILS_H__ + + +#include "LightingUtils.hlsl" + + +StructuredBuffer g_vLightData; +StructuredBuffer g_vLightListMeshInst; // build on CPU if in use. direct lights first, then reflection probes. + +uniform int g_numLights; +uniform int g_numReflectionProbes; + +void GetCountAndStart(out uint start, out uint nrLights, uint model) +{ + start = model==REFLECTION_LIGHT ? g_numLights : 0; // offset by numLights entries + nrLights = model==REFLECTION_LIGHT ? g_numReflectionProbes : g_numLights; +} + +uint FetchIndex(const uint start, const uint l) +{ + return g_vLightListMeshInst[start+l]; +} + +#endif \ No newline at end of file diff --git a/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingUtils.hlsl.meta b/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingUtils.hlsl.meta new file mode 100644 index 00000000000..d1b8b11aba9 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/RegularForwardLightingUtils.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 13dff6ea8f6c55743a3cbb841066cc27 +timeCreated: 1476774180 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/RegularForwardReflectionTemplate.hlsl b/Assets/ScriptableRenderLoop/fptl/RegularForwardReflectionTemplate.hlsl new file mode 100644 index 00000000000..b9593acec28 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/RegularForwardReflectionTemplate.hlsl @@ -0,0 +1,18 @@ +#ifndef __REGULARFORWARDREFLECTIONTEMPLATE_H__ +#define __REGULARFORWARDREFLECTIONTEMPLATE_H__ + + +#include "RegularForwardLightingUtils.hlsl" +#include "ReflectionTemplate.hlsl" + + +float3 ExecuteReflectionList(out uint numReflectionProbesProcessed, uint2 pixCoord, float3 vP, float3 vNw, float3 Vworld, float smoothness) +{ + uint start = 0, numReflectionProbes = 0; + GetCountAndStart(start, numReflectionProbes, REFLECTION_LIGHT); + + numReflectionProbesProcessed = numReflectionProbes; // mainly for debugging/heat maps + return ExecuteReflectionList(start, numReflectionProbes, vP, vNw, Vworld, smoothness); +} + +#endif diff --git a/Assets/ScriptableRenderLoop/fptl/RegularForwardReflectionTemplate.hlsl.meta b/Assets/ScriptableRenderLoop/fptl/RegularForwardReflectionTemplate.hlsl.meta new file mode 100644 index 00000000000..0b41812b24b --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/RegularForwardReflectionTemplate.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 61d33edab0cf72c4e881ea8c05dcd596 +timeCreated: 1476774180 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/StandardTest.shader b/Assets/ScriptableRenderLoop/fptl/StandardTest.shader new file mode 100644 index 00000000000..9b9656c3538 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/StandardTest.shader @@ -0,0 +1,172 @@ +Shader "Experim/StdShader" +{ + Properties + { + _Color("Color", Color) = (1,1,1,1) + _MainTex("Albedo", 2D) = "white" {} + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 + _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0 + [Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel ("Smoothness texture channel", Float) = 0 + + [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 + _MetallicGlossMap("Metallic", 2D) = "white" {} + + [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0 + [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0 + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + _Parallax ("Height Scale", Range (0.005, 0.08)) = 0.02 + _ParallaxMap ("Height Map", 2D) = "black" {} + + _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0 + _OcclusionMap("Occlusion", 2D) = "white" {} + + _EmissionColor("Color", Color) = (0,0,0) + _EmissionMap("Emission", 2D) = "white" {} + + _DetailMask("Detail Mask", 2D) = "white" {} + + _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {} + _DetailNormalMapScale("Scale", Float) = 1.0 + _DetailNormalMap("Normal Map", 2D) = "bump" {} + + [Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0 + + + // Blending state + [HideInInspector] _Mode ("__mode", Float) = 0.0 + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 + [HideInInspector] _DstBlend ("__dst", Float) = 0.0 + [HideInInspector] _ZWrite ("__zw", Float) = 1.0 + } + + CGINCLUDE + #define UNITY_SETUP_BRDF_INPUT MetallicSetup + ENDCG + + SubShader + { + Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" } + LOD 300 + + + // ------------------------------------------------------------------ + // Forward pass + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardSinglePass" } + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + + CGPROGRAM + #pragma target 5.0 + + // ------------------------------------- + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + #pragma shader_feature _PARALLAXMAP + + #pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON + #pragma multi_compile DIRLIGHTMAP_OFF DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE + #pragma multi_compile DYNAMICLIGHTMAP_OFF DYNAMICLIGHTMAP_ON + #pragma multi_compile_fog + + #pragma vertex vertForward + #pragma fragment fragForward + + #include "UnityStandardForwardNew.cginc" + + + ENDCG + } + + // ------------------------------------------------------------------ + // Depth Only + Pass + { + Name "DEPTHONLY" + Tags { "LightMode" = "DepthOnly" } + + Blend [_SrcBlend] [_DstBlend] + //ZWrite [_ZWrite] + ZWrite On ZTest LEqual + + CGPROGRAM + #pragma target 5.0 + + // TODO: figure out what's needed here wrt. alpha test etc. + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + #pragma shader_feature _PARALLAXMAP + + #pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON + #pragma multi_compile DIRLIGHTMAP_OFF DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE + #pragma multi_compile DYNAMICLIGHTMAP_OFF DYNAMICLIGHTMAP_ON + #pragma multi_compile_fog + #pragma multi_compile TILED_FORWARD REGULAR_FORWARD + + #pragma vertex vertForward + #pragma fragment fragNoLight + + #include "UnityStandardForwardNew.cginc" + + + ENDCG + } + + + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On ZTest LEqual + + CGPROGRAM + #pragma target 5.0 + + // ------------------------------------- + + + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _METALLICGLOSSMAP + #pragma multi_compile_shadowcaster + + #pragma vertex vertShadowCaster + #pragma fragment fragShadowCaster + + #include "UnityStandardShadow.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Deferred pass + + } + + + FallBack "VertexLit" + CustomEditor "StandardShaderGUI" +} diff --git a/Assets/ScriptableRenderLoop/fptl/StandardTest.shader.meta b/Assets/ScriptableRenderLoop/fptl/StandardTest.shader.meta new file mode 100644 index 00000000000..84a30d957f9 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/StandardTest.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8f28d6dbfdba66d4dbae80224aca5669 +timeCreated: 1476168726 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/TiledLightingTemplate.hlsl b/Assets/ScriptableRenderLoop/fptl/TiledLightingTemplate.hlsl new file mode 100644 index 00000000000..e4227dc6d84 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/TiledLightingTemplate.hlsl @@ -0,0 +1,23 @@ +#ifndef __TILEDLIGHTINGTEMPLATE_H__ +#define __TILEDLIGHTINGTEMPLATE_H__ + + +#include "TiledLightingUtils.hlsl" +#include "LightingTemplate.hlsl" + + + +float3 ExecuteLightList(out uint numLightsProcessed, uint2 pixCoord, float3 vP, float3 vPw, float3 Vworld) +{ + uint nrTilesX = (g_widthRT+15)/16; uint nrTilesY = (g_heightRT+15)/16; + uint2 tileIDX = pixCoord / 16; + + uint start = 0, numLights = 0; + GetCountAndStart(start, numLights, tileIDX, nrTilesX, nrTilesY, vP.z, DIRECT_LIGHT); + + numLightsProcessed = numLights; // mainly for debugging/heat maps + return ExecuteLightList(start, numLights, vP, vPw, Vworld); +} + + +#endif diff --git a/Assets/ScriptableRenderLoop/fptl/TiledLightingTemplate.hlsl.meta b/Assets/ScriptableRenderLoop/fptl/TiledLightingTemplate.hlsl.meta new file mode 100644 index 00000000000..c882561c0e5 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/TiledLightingTemplate.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b25f3fae508f5c04f8f15d77515e4a23 +timeCreated: 1476168722 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/TiledLightingUtils.hlsl b/Assets/ScriptableRenderLoop/fptl/TiledLightingUtils.hlsl new file mode 100644 index 00000000000..84e251120ee --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/TiledLightingUtils.hlsl @@ -0,0 +1,88 @@ +#ifndef __TILEDLIGHTINGUTILS_H__ +#define __TILEDLIGHTINGUTILS_H__ + + +#include "LightingUtils.hlsl" + + +StructuredBuffer g_vLightData; +StructuredBuffer g_vLightListGlobal; + +void GetCountAndStartOpaque(out uint uStart, out uint uNrLights, uint2 tileIDX, int nrTilesX, int nrTilesY, float linDepth, uint model) +{ + const int tileOffs = (tileIDX.y+model*nrTilesY)*nrTilesX+tileIDX.x; + + uNrLights = g_vLightListGlobal[ 16*tileOffs + 0]&0xffff; + uStart = tileOffs; +} + +uint FetchIndexOpaque(const uint tileOffs, const uint l) +{ + const uint l1 = l+1; + return (g_vLightListGlobal[ 16*tileOffs + (l1>>1)]>>((l1&1)*16))&0xffff; +} + +#ifdef OPAQUES_ONLY + +void GetCountAndStart(out uint uStart, out uint uNrLights, uint2 tileIDX, int nrTilesX, int nrTilesY, float linDepth, uint model) +{ + GetCountAndStartOpaque(uStart, uNrLights, tileIDX, nrTilesX, nrTilesY, linDepth, model); +} + +uint FetchIndex(const uint tileOffs, const uint l) +{ + return FetchIndexOpaque(tileOffs, l); +} + +#else + +uniform float g_fClustScale; +uniform float g_fClustBase; +uniform float g_fNearPlane; +uniform float g_fFarPlane; +//uniform int g_iLog2NumClusters; // numClusters = (1< g_vLayeredOffsetsBuffer; +Buffer g_logBaseBuffer; + +uniform uint g_isLogBaseBufferEnabled; +uniform uint g_isOpaquesOnlyEnabled; + +void GetCountAndStart(out uint uStart, out uint uNrLights, uint2 tileIDX, int nrTilesX, int nrTilesY, float linDepth, uint model) +{ + if(g_isOpaquesOnlyEnabled) + { + GetCountAndStartOpaque(uStart, uNrLights, tileIDX, nrTilesX, nrTilesY, linDepth, model); + } + else + { + float logBase = g_fClustBase; + if(g_isLogBaseBufferEnabled) + logBase = g_logBaseBuffer[tileIDX.y*nrTilesX + tileIDX.x]; + + int clustIdx = SnapToClusterIdxFlex(linDepth, logBase, g_isLogBaseBufferEnabled!=0); + + int nrClusters = (1<>27)&31; + } +} + +uint FetchIndex(const uint tileOffs, const uint l) +{ + if(g_isOpaquesOnlyEnabled) + return FetchIndexOpaque(tileOffs, l); + else + return g_vLightListGlobal[ tileOffs+l ]; +} + +#endif + + + +#endif diff --git a/Assets/ScriptableRenderLoop/fptl/TiledLightingUtils.hlsl.meta b/Assets/ScriptableRenderLoop/fptl/TiledLightingUtils.hlsl.meta new file mode 100644 index 00000000000..644bce4155b --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/TiledLightingUtils.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 25c458a8106d44444bea6b074b79cfdf +timeCreated: 1476168722 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/TiledReflectionTemplate.hlsl b/Assets/ScriptableRenderLoop/fptl/TiledReflectionTemplate.hlsl new file mode 100644 index 00000000000..8784287f2fd --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/TiledReflectionTemplate.hlsl @@ -0,0 +1,23 @@ +#ifndef __TILEDREFLECTIONTEMPLATE_H__ +#define __TILEDREFLECTIONTEMPLATE_H__ + + +#include "TiledLightingUtils.hlsl" +#include "ReflectionTemplate.hlsl" + + + +float3 ExecuteReflectionList(out uint numReflectionProbesProcessed, uint2 pixCoord, float3 vP, float3 vNw, float3 Vworld, float smoothness) +{ + uint nrTilesX = (g_widthRT+15)/16; uint nrTilesY = (g_heightRT+15)/16; + uint2 tileIDX = pixCoord / 16; + + uint start = 0, numReflectionProbes = 0; + GetCountAndStart(start, numReflectionProbes, tileIDX, nrTilesX, nrTilesY, vP.z, REFLECTION_LIGHT); + + numReflectionProbesProcessed = numReflectionProbes; // mainly for debugging/heat maps + return ExecuteReflectionList(start, numReflectionProbes, vP, vNw, Vworld, smoothness); +} + + +#endif diff --git a/Assets/ScriptableRenderLoop/fptl/TiledReflectionTemplate.hlsl.meta b/Assets/ScriptableRenderLoop/fptl/TiledReflectionTemplate.hlsl.meta new file mode 100644 index 00000000000..9bce4e7c48c --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/TiledReflectionTemplate.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a9b744e06937f8d4ca633dfa63e357b4 +timeCreated: 1476168722 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/UnityStandardForwardNew.cginc b/Assets/ScriptableRenderLoop/fptl/UnityStandardForwardNew.cginc new file mode 100644 index 00000000000..8946675a0b9 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/UnityStandardForwardNew.cginc @@ -0,0 +1,154 @@ +#ifndef UNITY_STANDARD_FORWARDNEW_INCLUDED +#define UNITY_STANDARD_FORWARDNEW_INCLUDED + + +// NOTE: had to split shadow functions into separate file, +// otherwise compiler gives trouble with LIGHTING_COORDS macro (in UnityStandardCore.cginc) + +#include "UnityStandardConfig.cginc" +#include "UnityStandardCore.cginc" + +struct VertexOutputForwardNew +{ + float4 pos : SV_POSITION; + float4 tex : TEXCOORD0; + half4 ambientOrLightmapUV : TEXCOORD1; // SH or Lightmap UV + half4 tangentToWorldAndParallax[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:empty] + + LIGHTING_COORDS(5,6) + UNITY_FOG_COORDS(7) + + UNITY_VERTEX_OUTPUT_STEREO +}; + + + +VertexOutputForwardNew vertForward(VertexInput v) +{ + UNITY_SETUP_INSTANCE_ID(v); + VertexOutputForwardNew o; + UNITY_INITIALIZE_OUTPUT(VertexOutputForwardNew, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + float4 posWorld = mul(unity_ObjectToWorld, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); + + o.tex = TexCoords(v); + + float3 normalWorld = UnityObjectToWorldNormal(v.normal); + #ifdef _TANGENT_TO_WORLD + float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + float3x3 tangentToWorld = CreateTangentToWorldPerVertex(normalWorld, tangentWorld.xyz, tangentWorld.w); + o.tangentToWorldAndParallax[0].xyz = tangentToWorld[0]; + o.tangentToWorldAndParallax[1].xyz = tangentToWorld[1]; + o.tangentToWorldAndParallax[2].xyz = tangentToWorld[2]; + #else + o.tangentToWorldAndParallax[0].xyz = 0; + o.tangentToWorldAndParallax[1].xyz = 0; + o.tangentToWorldAndParallax[2].xyz = normalWorld; + #endif + + o.ambientOrLightmapUV = VertexGIForward(v, posWorld, normalWorld); + + UNITY_TRANSFER_FOG(o,o.pos); + + return o; +} + +#include "LightingUtils.hlsl" + +static FragmentCommonData gdata; +static float occlusion; + +half4 fragNoLight(VertexOutputForwardNew i) : SV_Target +{ + float linZ = GetLinearZFromSVPosW(i.pos.w); // matching script side where camera space is right handed. + float3 vP = GetViewPosFromLinDepth(i.pos.xy, linZ); + float3 vPw = mul(g_mViewToWorld, float4(vP,1.0)).xyz; + float3 Vworld = normalize(mul((float3x3) g_mViewToWorld, -vP).xyz); // not same as unity_CameraToWorld + +#ifdef _PARALLAXMAP + half3 tangent = i.tangentToWorldAndParallax[0].xyz; + half3 bitangent = i.tangentToWorldAndParallax[1].xyz; + half3 normal = i.tangentToWorldAndParallax[2].xyz; + float3 vDirForParallax = float3( dot(tangent, Vworld), dot(bitangent, Vworld), dot(normal, Vworld)); +#else + float3 vDirForParallax = Vworld; +#endif + gdata = FragmentSetup(i.tex, -Vworld, vDirForParallax, i.tangentToWorldAndParallax, vPw); // eyeVec = -Vworld + + return OutputForward (float4(0.0,0.0,0.0,1.0), gdata.alpha); // figure out some alpha test stuff +} + + + + +float3 EvalMaterial(UnityLight light, UnityIndirect ind) +{ + return UNITY_BRDF_PBS(gdata.diffColor, gdata.specColor, gdata.oneMinusReflectivity, gdata.smoothness, gdata.normalWorld, -gdata.eyeVec, light, ind); +} + +float3 EvalIndirectSpecular(UnityLight light, UnityIndirect ind) +{ + return occlusion * UNITY_BRDF_PBS(gdata.diffColor, gdata.specColor, gdata.oneMinusReflectivity, gdata.smoothness, gdata.normalWorld, -gdata.eyeVec, light, ind); +} + + +#ifdef REGULAR_FORWARD + +#include "RegularForwardLightingTemplate.hlsl" +#include "RegularForwardReflectionTemplate.hlsl" + +#else + +#include "TiledLightingTemplate.hlsl" +#include "TiledReflectionTemplate.hlsl" + +#endif + + +half4 fragForward(VertexOutputForwardNew i) : SV_Target +{ + float linZ = GetLinearZFromSVPosW(i.pos.w); // matching script side where camera space is right handed. + float3 vP = GetViewPosFromLinDepth(i.pos.xy, linZ); + float3 vPw = mul(g_mViewToWorld, float4(vP,1.0)).xyz; + float3 Vworld = normalize(mul((float3x3) g_mViewToWorld, -vP).xyz); // not same as unity_CameraToWorld + +#ifdef _PARALLAXMAP + half3 tangent = i.tangentToWorldAndParallax[0].xyz; + half3 bitangent = i.tangentToWorldAndParallax[1].xyz; + half3 normal = i.tangentToWorldAndParallax[2].xyz; + float3 vDirForParallax = float3( dot(tangent, Vworld), dot(bitangent, Vworld), dot(normal, Vworld)); +#else + float3 vDirForParallax = Vworld; +#endif + gdata = FragmentSetup(i.tex, -Vworld, vDirForParallax, i.tangentToWorldAndParallax, vPw); // eyeVec = -Vworld + + + uint2 pixCoord = ((uint2) i.pos.xy); + + float atten = 1.0; + occlusion = Occlusion(i.tex.xy); + UnityGI gi = FragmentGI (gdata, occlusion, i.ambientOrLightmapUV, atten, DummyLight(), false); + + uint numLightsProcessed = 0, numReflectionsProcessed = 0; + float3 res = 0; + + // direct light contributions + res += ExecuteLightList(numLightsProcessed, pixCoord, vP, vPw, Vworld); + + // specular GI + res += ExecuteReflectionList(numReflectionsProcessed, pixCoord, vP, gdata.normalWorld, Vworld, gdata.smoothness); + + // diffuse GI + res += UNITY_BRDF_PBS (gdata.diffColor, gdata.specColor, gdata.oneMinusReflectivity, gdata.smoothness, gdata.normalWorld, -gdata.eyeVec, gi.light, gi.indirect).xyz; + res += UNITY_BRDF_GI (gdata.diffColor, gdata.specColor, gdata.oneMinusReflectivity, gdata.smoothness, gdata.normalWorld, -gdata.eyeVec, occlusion, gi); + + //res = OverlayHeatMap(numLightsProcessed, res); + + //UNITY_APPLY_FOG(i.fogCoord, res); + return OutputForward (float4(res,1.0), gdata.alpha); +} + +#endif diff --git a/Assets/ScriptableRenderLoop/fptl/UnityStandardForwardNew.cginc.meta b/Assets/ScriptableRenderLoop/fptl/UnityStandardForwardNew.cginc.meta new file mode 100644 index 00000000000..2f4fe8a86a9 --- /dev/null +++ b/Assets/ScriptableRenderLoop/fptl/UnityStandardForwardNew.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c185aa276c9670d4381a830ece205577 +timeCreated: 1476168722 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableRenderLoop/fptl/lightlistbuild-clustered.compute b/Assets/ScriptableRenderLoop/fptl/lightlistbuild-clustered.compute index 17035a8d5f7..5a4773bc49f 100644 --- a/Assets/ScriptableRenderLoop/fptl/lightlistbuild-clustered.compute +++ b/Assets/ScriptableRenderLoop/fptl/lightlistbuild-clustered.compute @@ -110,7 +110,7 @@ int SphericalIntersectionTests(uint threadID, int iNrCoarseLights, float2 screen // returns 1 for intersection and 0 for none -float4 GetPlaneEq(const float3 vBoxX, const float3 vBoxY, const float3 vBoxZ, const float3 vCen, const float2 vScaleXZ, const int sideIndex); +float4 GetPlaneEq(const float3 boxX, const float3 boxY, const float3 boxZ, const float3 center, const float2 vScaleXZ, const int sideIndex); float4 FetchPlane(int l, int p); @@ -329,7 +329,7 @@ void LIGHTLISTGEN(uint threadID : SV_GroupIndex, uint3 u3GroupID : SV_GroupID) { if(offs<(start+iSpaceAvail) && i0.0001 ? (maxZdir.z/len) : len; // since len>=(maxZdir.z/len) we can use len as an approximate value when len<=epsilon float fOffs = scalarProj*fRad; @@ -487,17 +487,17 @@ int SphericalIntersectionTests(uint threadID, int iNrCoarseLights, float2 screen #endif #ifdef LEFT_HAND_COORDINATES - fRad = fRad + (vCen.z+fOffs)*worldDistAtDepthOne; + fRad = fRad + (center.z+fOffs)*worldDistAtDepthOne; #else - fRad = fRad + (vCen.z-fOffs)*worldDistAtDepthOne; + fRad = fRad + (center.z-fOffs)*worldDistAtDepthOne; #endif float a = dot(V,V); - float CdotV = dot(vCen,V); - float c = dot(vCen,vCen) - fRad*fRad; + float CdotV = dot(center,V); + float c = dot(center,center) - fRad*fRad; float fDescDivFour = CdotV*CdotV - a*c; - if(!(c<0 || (fDescDivFour>0 && CdotV>0))) // if ray hit bounding sphere + if(!(c<0 || (fDescDivFour>0 && CdotV>0))) // if ray misses bounding sphere coarseList[l]=0xffffffff; } @@ -529,14 +529,14 @@ int SphericalIntersectionTests(uint threadID, int iNrCoarseLights, float2 screen #ifdef EXACT_EDGE_TESTS -float3 GetHullVertex(const float3 vBoxX, const float3 vBoxY, const float3 vBoxZ, const float3 vCen, const float2 vScaleXY, const int p) +float3 GetHullVertex(const float3 boxX, const float3 boxY, const float3 boxZ, const float3 center, const float2 scaleXY, const int p) { const bool bIsTopVertex = (p&4)!=0; - float3 vScales = float3( ((p&1)!=0 ? 1.0f : (-1.0f))*(bIsTopVertex ? vScaleXY.x : 1.0), ((p&2)!=0 ? 1.0f : (-1.0f))*(bIsTopVertex ? vScaleXY.y : 1.0), (p&4)!=0 ? 1.0f : (-1.0f) ); - return (vScales.x*vBoxX + vScales.y*vBoxY + vScales.z*vBoxZ) + vCen; + float3 vScales = float3( ((p&1)!=0 ? 1.0f : (-1.0f))*(bIsTopVertex ? scaleXY.x : 1.0), ((p&2)!=0 ? 1.0f : (-1.0f))*(bIsTopVertex ? scaleXY.y : 1.0), (p&4)!=0 ? 1.0f : (-1.0f) ); + return (vScales.x*boxX + vScales.y*boxY + vScales.z*boxZ) + center; } -void GetHullEdge(out int idx0, out int idx_twin, out float3 vP0, out float3 vE0, const int e0, const float3 vBoxX, const float3 vBoxY, const float3 vBoxZ, const float3 vCen, const float2 vScaleXY) +void GetHullEdge(out int idx0, out int idx_twin, out float3 vP0, out float3 vE0, const int e0, const float3 boxX, const float3 boxY, const float3 boxZ, const float3 center, const float2 scaleXY) { int iAxis = e0>>2; int iSwizzle = e0&0x3; @@ -548,8 +548,8 @@ void GetHullEdge(out int idx0, out int idx_twin, out float3 vP0, out float3 vE0, idx0 = bSwap ? i1 : i0; idx_twin = bSwap ? i0 : i1; - float3 p0 = GetHullVertex(vBoxX, vBoxY, vBoxZ, vCen, vScaleXY, idx0); - float3 p1 = GetHullVertex(vBoxX, vBoxY, vBoxZ, vCen, vScaleXY, idx_twin); + float3 p0 = GetHullVertex(boxX, boxY, boxZ, center, scaleXY, idx0); + float3 p1 = GetHullVertex(boxX, boxY, boxZ, center, scaleXY, idx_twin); vP0 = p0; vE0 = p1-p0; @@ -573,7 +573,7 @@ void GetFrustEdge(out float3 vP0, out float3 vE0, const int e0, uint2 viTilLL, u int i=iSwizzle + (2*(iSection&0x2)); // offset by 4 at section 2 vP0 = GetTileVertex(uint2(viTilLL.x, viTilUR.y), uint2(viTilUR.x, viTilLL.y), i, fTileFarPlane); - vE0 = iSection==0 ? vP0 : (((iSwizzle&0x2)==0 ? 1.0f : (-1.0f))*((iSwizzle&0x1)==(iSwizzle>>1) ? Vec3(1,0,0) : Vec3(0,1,0))); + vE0 = iSection==0 ? vP0 : (((iSwizzle&0x2)==0 ? 1.0f : (-1.0f))*((iSwizzle&0x1)==(iSwizzle>>1) ? float3(1,0,0) : float3(0,1,0))); } int CullByExactEdgeTests(uint threadID, int iNrCoarseLights, uint2 viTilLL, uint2 viTilUR, float fTileFarPlane) @@ -592,15 +592,15 @@ int CullByExactEdgeTests(uint threadID, int iNrCoarseLights, uint2 viTilLL, uint GroupMemoryBarrierWithGroupSync(); #endif const int idxCoarse = coarseList[l]; - [branch]if(g_vLightData[idxCoarse].uLightType!=SPHERE_LIGHT) // don't bother doing edge tests for sphere lights since these have camera aligned bboxes. + [branch]if(g_vLightData[idxCoarse].lightType!=SPHERE_LIGHT) // don't bother doing edge tests for sphere lights since these have camera aligned bboxes. { SFiniteLightBound lgtDat = g_data[idxCoarse]; - const float3 vBoxX = lgtDat.vBoxAxisX.xyz; - const float3 vBoxY = lgtDat.vBoxAxisY.xyz; - const float3 vBoxZ = -lgtDat.vBoxAxisZ.xyz; // flip an axis to make it right handed since Determinant(worldToView)<0 - const float3 vCen = lgtDat.vCen.xyz; - const float2 vScaleXY = lgtDat.vScaleXY; + const float3 boxX = lgtDat.boxAxisX.xyz; + const float3 boxY = lgtDat.boxAxisY.xyz; + const float3 boxZ = -lgtDat.boxAxisZ.xyz; // flip an axis to make it right handed since Determinant(worldToView)<0 + const float3 center = lgtDat.center.xyz; + const float2 scaleXY = lgtDat.scaleXY; for(int i=threadID; i0) ++positive; else if(fSignDist<0) ++negative; } diff --git a/Assets/ScriptableRenderLoop/fptl/lightlistbuild.compute b/Assets/ScriptableRenderLoop/fptl/lightlistbuild.compute index ccae54750d1..945d1a801f9 100644 --- a/Assets/ScriptableRenderLoop/fptl/lightlistbuild.compute +++ b/Assets/ScriptableRenderLoop/fptl/lightlistbuild.compute @@ -1,12 +1,17 @@ +// The implementation is based on the demo on "fine pruned tiled lighting" published in GPU Pro 7. +// https://github.com/wolfgangfengel/GPU-Pro-7 + #pragma kernel TileLightListGen #include "..\common\ShaderBase.h" #include "LightDefinitions.cs.hlsl" #define FINE_PRUNING_ENABLED +#define PERFORM_SPHERICAL_INTERSECTION_TESTS uniform int g_iNrVisibLights; +uniform uint2 g_viDimensions; uniform float4x4 g_mInvScrProjection; uniform float4x4 g_mScrProjection; @@ -14,6 +19,7 @@ uniform float4x4 g_mScrProjection; Texture2D g_depth_tex : register( t0 ); StructuredBuffer g_vBoundsBuffer : register( t1 ); StructuredBuffer g_vLightData : register( t2 ); +StructuredBuffer g_data : register( t3 ); #define NR_THREADS 64 @@ -39,6 +45,10 @@ groupshared int ldsNrLightsFinal; groupshared int ldsModelListCount[NR_LIGHT_MODELS]; // since NR_LIGHT_MODELS is 2 +#ifdef PERFORM_SPHERICAL_INTERSECTION_TESTS +groupshared uint lightOffsSph; +#endif + //float GetLinearDepth(float3 vP) //{ @@ -68,8 +78,20 @@ float3 GetViewPosFromLinDepth(float2 v2ScrPos, float fLinDepth) #endif } +float GetOnePixDiagWorldDistAtDepthOne() +{ + float fSx = g_mScrProjection[0].x; + float fSy = g_mScrProjection[1].y; + + return length( float2(1.0/fSx,1.0/fSy) ); +} + void sortLightList(int localThreadID, int n); +#ifdef PERFORM_SPHERICAL_INTERSECTION_TESTS +int SphericalIntersectionTests(uint threadID, int iNrCoarseLights, float2 screenCoordinate); +#endif + [numthreads(NR_THREADS, 1, 1)] void TileLightListGen(uint threadID : SV_GroupIndex, uint3 u3GroupID : SV_GroupID) @@ -80,9 +102,8 @@ void TileLightListGen(uint threadID : SV_GroupIndex, uint3 u3GroupID : SV_GroupI if(t>4)), uint2(iWidth-1, iHeight-1) ); - const float fDpth = FetchDepth(g_depth_tex, uCrd); - if(fDpth>4)), uint2(iWidth-1, iHeight-1) ); + const float fDepth = FetchDepth(g_depth_tex, uCrd); + vLinDepths[i] = GetLinearDepth(fDepth); + if(fDepth>4)), uint2(iWidth-1, iHeight-1) ); - float3 v3ScrPos = float3(uCrd.x+0.5, uCrd.y+0.5, FetchDepth(g_depth_tex, uCrd)); - vLinDepths[i] = GetLinearDepth(v3ScrPos.z); - } - uint uLightsFlags[2] = {0,0}; int l=0; - // we need this outer loop for when we cannot assume a wavefront is 64 wide - // since in this case we cannot assume the lights will remain sorted by type -#if !defined(XBONE) && !defined(PLAYSTATION4) + // need this outer loop even on xb1 and ps4 since direct lights and + // reflection lights are kept in separate regions. while(l float2(distSq, fDist2D*lgtDat.cotan) ) ) uVal = 1; + if( all( float2(lightData.radiusSq, fSclProj) > float2(distSq, fDist2D*lightData.cotan) ) ) uVal = 1; } uLightsFlags[l<32 ? 0 : 1] |= (uVal<<(l&31)); ++l; idxCoarse = ldistSq) uVal = 1; + if(lightData.radiusSq>distSq) uVal = 1; } uLightsFlags[l<32 ? 0 : 1] |= (uVal<<(l&31)); ++l; idxCoarse = l=MAX_TYPES) ++l; -#endif } InterlockedOr(ldsDoesLightIntersect[0], uLightsFlags[0]); @@ -305,7 +324,7 @@ void TileLightListGen(uint threadID : SV_GroupIndex, uint3 u3GroupID : SV_GroupI int nrLightsCombinedList = ldsNrLightsFinal float3(distSq, sqrt(distSqB)*lgtDat.fPenumbra, 0.0) ) ) uVal = 1; +//if( all( float3(lightData.radiusSq, fSclProj, fSclProj) > float3(distSq, sqrt(distSqB)*lightData.fPenumbra, 0.0) ) ) uVal = 1; // previous new version //float fDist2DSqr = bIsSpotDisc ? dot(V,V) : (maC*maC); -//if( all( float3(lgtDat.fSphRadiusSq, (fSclProj*fSclProj), fSclProj) > float3(distSq, fDist2DSqr*cotaSqr, fSpotNearPlane) ) ) uVal = 1; +//if( all( float3(lightData.radiusSq, (fSclProj*fSclProj), fSclProj) > float3(distSq, fDist2DSqr*cotaSqr, fSpotNearPlane) ) ) uVal = 1; #if 0 void merge(int l, int m, int r); @@ -432,7 +451,7 @@ void sortLightList(int localThreadID, int length) const int N = (const int) LimitPow2AndClamp((unsigned int) length, MAX_NR_COARSE_ENTRIES); // N is 1 when length is zero but will still not enter first for-loop // bitonic sort can only handle arrays with a power of two length. Fill remaining entries with greater than possible index. - for(int t=length+localThreadID; t0.0001 ? (maxZdir.z/len) : len; // since len>=(maxZdir.z/len) we can use len as an approximate value when len<=epsilon + float fOffs = scalarProj*fRad; +#else + float fOffs = fRad; // more false positives due to larger radius but works too +#endif + +#ifdef LEFT_HAND_COORDINATES + fRad = fRad + (center.z+fOffs)*worldDistAtDepthOne; +#else + fRad = fRad + (center.z-fOffs)*worldDistAtDepthOne; +#endif + + float a = dot(V,V); + float CdotV = dot(center,V); + float c = dot(center,center) - fRad*fRad; + + float fDescDivFour = CdotV*CdotV - a*c; + if(c<0 || (fDescDivFour>0 && CdotV>0)) // if ray hit bounding sphere + { + unsigned int uIndex; + InterlockedAdd(lightOffsSph, 1, uIndex); + coarseList[uIndex]=prunedList[l]; // read from the original copy of coarseList which is backed up in prunedList + } + } + +#if !defined(XBONE) && !defined(PLAYSTATION4) + GroupMemoryBarrierWithGroupSync(); +#endif + + return lightOffsSph; +} #endif \ No newline at end of file diff --git a/Assets/ScriptableRenderLoop/fptl/renderloopfptl.asset b/Assets/ScriptableRenderLoop/fptl/renderloopfptl.asset index 9b8c615bf75..b0c4de19789 100644 --- a/Assets/ScriptableRenderLoop/fptl/renderloopfptl.asset +++ b/Assets/ScriptableRenderLoop/fptl/renderloopfptl.asset @@ -20,15 +20,16 @@ MonoBehaviour: directionalLightCascades: {x: 0.05, y: 0.2, z: 0.3} m_TextureSettings: spotCookieSize: 512 - pointCookieSize: 256 + pointCookieSize: 128 reflectionCubemapSize: 128 - m_DeferredShader: {fileID: 4800000, guid: 1c102a89f3460254a8c413dbdcd63a2a, type: 3} - m_DeferredReflectionShader: {fileID: 4800000, guid: 3899e06d641c2cb4cbff794df0da536b, + deferredShader: {fileID: 4800000, guid: 1c102a89f3460254a8c413dbdcd63a2a, type: 3} + deferredReflectionShader: {fileID: 4800000, guid: 3899e06d641c2cb4cbff794df0da536b, type: 3} - m_FinalPassShader: {fileID: 4800000, guid: 5590f54ad211f594da4e687b698f2258, type: 3} - m_BuildScreenAABBShader: {fileID: 7200000, guid: e7a739144e735934b89a42a4b9d9e23c, + finalPassShader: {fileID: 4800000, guid: 5590f54ad211f594da4e687b698f2258, type: 3} + buildScreenAABBShader: {fileID: 7200000, guid: e7a739144e735934b89a42a4b9d9e23c, type: 3} - m_BuildPerTileLightListShader: {fileID: 7200000, guid: f54ef7cb596a714488693ef9cdaf63fb, + buildPerTileLightListShader: {fileID: 7200000, guid: f54ef7cb596a714488693ef9cdaf63fb, type: 3} - m_BuildPerVoxelLightListShader: {fileID: 7200000, guid: 4c2d6eb0553e2514bba3ea9a85d8c53c, + buildPerVoxelLightListShader: {fileID: 7200000, guid: 4c2d6eb0553e2514bba3ea9a85d8c53c, type: 3} + EnableClustered: 0 diff --git a/Assets/ScriptableRenderLoop/fptl/scrbound.compute b/Assets/ScriptableRenderLoop/fptl/scrbound.compute index e96e626510f..1b8e5b4f399 100644 --- a/Assets/ScriptableRenderLoop/fptl/scrbound.compute +++ b/Assets/ScriptableRenderLoop/fptl/scrbound.compute @@ -1,3 +1,6 @@ +// The implementation is based on the demo on "fine pruned tiled lighting" published in GPU Pro 7. +// https://github.com/wolfgangfengel/GPU-Pro-7 + #pragma kernel ScreenBoundsAABB #include "..\common\ShaderBase.h" @@ -34,8 +37,8 @@ groupshared unsigned int clipFlags[48]; unsigned int GetClip(const float4 P); int ClipAgainstPlane(const int iSrcIndex, const int iNrSrcVerts, const int subLigt, const int p); void CalcBound(out bool2 bIsMinValid, out bool2 bIsMaxValid, out float2 vMin, out float2 vMax, float4x4 InvProjection, float3 pos_view_space, float r); -void GetQuad(out float3 p0, out float3 p1, out float3 p2, out float3 p3, const float3 vBoxX, const float3 vBoxY, const float3 vBoxZ, const float3 vCen, const float2 vScaleXY, const int sideIndex); -void GetPlane(out float3 p0, out float3 vN, const float3 vBoxX, const float3 vBoxY, const float3 vBoxZ, const float3 vCen, const float2 vScaleXY, const int sideIndex); +void GetQuad(out float3 p0, out float3 p1, out float3 p2, out float3 p3, const float3 boxX, const float3 boxY, const float3 boxZ, const float3 center, const float2 scaleXY, const int sideIndex); +void GetPlane(out float3 p0, out float3 vN, const float3 boxX, const float3 boxY, const float3 boxZ, const float3 center, const float2 scaleXY, const int sideIndex); [numthreads(NR_THREADS, 1, 1)] @@ -53,18 +56,18 @@ void ScreenBoundsAABB(uint threadID : SV_GroupIndex, uint3 u3GroupID : SV_GroupI SFiniteLightBound lgtDat = g_data[lgtIndex]; - const float3 vBoxX = lgtDat.vBoxAxisX.xyz; - const float3 vBoxY = lgtDat.vBoxAxisY.xyz; - const float3 vBoxZ = -lgtDat.vBoxAxisZ.xyz; // flip an axis to make it right handed since Determinant(worldToView)<0 - const float3 vCen = lgtDat.vCen.xyz; - const float fRadius = lgtDat.fRadius; - const float2 vScaleXY = lgtDat.vScaleXY; + const float3 boxX = lgtDat.boxAxisX.xyz; + const float3 boxY = lgtDat.boxAxisY.xyz; + const float3 boxZ = -lgtDat.boxAxisZ.xyz; // flip an axis to make it right handed since Determinant(worldToView)<0 + const float3 center = lgtDat.center.xyz; + const float radius = lgtDat.radius; + const float2 scaleXY = lgtDat.scaleXY; { if(sideIndex<6 && lgtIndex<(int) g_iNrVisibLights) // mask 2 out of 8 threads { float3 q0, q1, q2, q3; - GetQuad(q0, q1, q2, q3, vBoxX, vBoxY, vBoxZ, vCen, vScaleXY, sideIndex); + GetQuad(q0, q1, q2, q3, boxX, boxY, boxZ, center, scaleXY, sideIndex); const float4 vP0 = mul(g_mProjection, float4(q0, 1)); @@ -166,7 +169,7 @@ void ScreenBoundsAABB(uint threadID : SV_GroupIndex, uint3 u3GroupID : SV_GroupI for(f=0; f<6; f++) { float3 q0, q1, q2, q3; - GetQuad(q0, q1, q2, q3, vBoxX, vBoxY, vBoxZ, vCen, vScaleXY, f); + GetQuad(q0, q1, q2, q3, boxX, boxY, boxZ, center, scaleXY, f); // 4 vertices to a quad of the convex hull in post projection space const float4 vP0 = mul(g_mProjection, float4(q0, 1)); @@ -235,7 +238,7 @@ void ScreenBoundsAABB(uint threadID : SV_GroupIndex, uint3 u3GroupID : SV_GroupI for(f=0; f<6; f++) { float3 vP0, vN; - GetPlane(vP0, vN, vBoxX, vBoxY, vBoxZ, vCen, vScaleXY, f); + GetPlane(vP0, vN, boxX, boxY, boxZ, center, scaleXY, f); for(i=0; i<8; i++) { @@ -273,37 +276,37 @@ void ScreenBoundsAABB(uint threadID : SV_GroupIndex, uint3 u3GroupID : SV_GroupI } else { - //if((vCen.z+fRadius)<0.0) - if( length(vCen)>fRadius) + //if((center.z+radius)<0.0) + if( length(center)>radius) { float2 vMi, vMa; bool2 bMi, bMa; - CalcBound(bMi, bMa, vMi, vMa, g_mInvProjection, vCen, fRadius); + CalcBound(bMi, bMa, vMi, vMa, g_mInvProjection, center, radius); vMin.xy = bMi ? max(vMin.xy, vMi) : vMin.xy; vMax.xy = bMa ? min(vMax.xy, vMa) : vMax.xy; } #ifdef LEFT_HAND_COORDINATES - if((vCen.z-fRadius)>0.0) + if((center.z-radius)>0.0) { - float4 vPosF = mul(g_mProjection, float4(0,0,vCen.z-fRadius,1)); + float4 vPosF = mul(g_mProjection, float4(0,0,center.z-radius,1)); vMin.z = max(vMin.z, vPosF.z/vPosF.w); } - if((vCen.z+fRadius)>0.0) + if((center.z+radius)>0.0) { - float4 vPosB = mul(g_mProjection, float4(0,0,vCen.z+fRadius,1)); + float4 vPosB = mul(g_mProjection, float4(0,0,center.z+radius,1)); vMax.z = min(vMax.z, vPosB.z/vPosB.w); } #else - if((vCen.z+fRadius)<0.0) + if((center.z+radius)<0.0) { - float4 vPosF = mul(g_mProjection, float4(0,0,vCen.z+fRadius,1)); + float4 vPosF = mul(g_mProjection, float4(0,0,center.z+radius,1)); vMin.z = max(vMin.z, vPosF.z/vPosF.w); } - if((vCen.z-fRadius)<0.0) + if((center.z-radius)<0.0) { - float4 vPosB = mul(g_mProjection, float4(0,0,vCen.z-fRadius,1)); + float4 vPosB = mul(g_mProjection, float4(0,0,center.z-radius,1)); vMax.z = min(vMax.z, vPosB.z/vPosB.w); } #endif @@ -402,52 +405,52 @@ float4 GenNewVert(const float4 vVisib, const float4 vInvisib, const int p) return vNew; } -void GetQuad(out float3 p0, out float3 p1, out float3 p2, out float3 p3, const float3 vBoxX, const float3 vBoxY, const float3 vBoxZ, const float3 vCen, const float2 vScaleXY, const int sideIndex) +void GetQuad(out float3 p0, out float3 p1, out float3 p2, out float3 p3, const float3 boxX, const float3 boxY, const float3 boxZ, const float3 center, const float2 scaleXY, const int sideIndex) { const int iAbsSide = (sideIndex == 0 || sideIndex == 1) ? 0 : ((sideIndex == 2 || sideIndex == 3) ? 1 : 2); const float fS = (sideIndex & 1) != 0 ? 1 : (-1); - float3 vA = fS*(iAbsSide == 0 ? vBoxX : (iAbsSide == 1 ? (-vBoxY) : vBoxZ)); - float3 vB = fS*(iAbsSide == 0 ? (-vBoxY) : (iAbsSide == 1 ? (-vBoxX) : (-vBoxY))); - float3 vC = iAbsSide == 0 ? vBoxZ : (iAbsSide == 1 ? vBoxZ : (-vBoxX)); + float3 vA = fS*(iAbsSide == 0 ? boxX : (iAbsSide == 1 ? (-boxY) : boxZ)); + float3 vB = fS*(iAbsSide == 0 ? (-boxY) : (iAbsSide == 1 ? (-boxX) : (-boxY))); + float3 vC = iAbsSide == 0 ? boxZ : (iAbsSide == 1 ? boxZ : (-boxX)); bool bIsTopQuad = iAbsSide == 2 && (sideIndex & 1) != 0; // in this case all 4 verts get scaled. bool bIsSideQuad = (iAbsSide == 0 || iAbsSide == 1); // if side quad only two verts get scaled (impacts q1 and q2) - if (bIsTopQuad) { vB *= vScaleXY.y; vC *= vScaleXY.x; } + if (bIsTopQuad) { vB *= scaleXY.y; vC *= scaleXY.x; } float3 vA2 = vA; float3 vB2 = vB; - if (bIsSideQuad) { vA2 *= (iAbsSide == 0 ? vScaleXY.x : vScaleXY.y); vB2 *= (iAbsSide == 0 ? vScaleXY.y : vScaleXY.x); } + if (bIsSideQuad) { vA2 *= (iAbsSide == 0 ? scaleXY.x : scaleXY.y); vB2 *= (iAbsSide == 0 ? scaleXY.y : scaleXY.x); } // delivered counterclockwise in right hand space and clockwise in left hand space - p0 = vCen + (vA + vB - vC); // vCen + vA is center of face when vScaleXY is 1.0 - p1 = vCen + (vA - vB - vC); - p2 = vCen + (vA2 - vB2 + vC); - p3 = vCen + (vA2 + vB2 + vC); + p0 = center + (vA + vB - vC); // center + vA is center of face when scaleXY is 1.0 + p1 = center + (vA - vB - vC); + p2 = center + (vA2 - vB2 + vC); + p3 = center + (vA2 + vB2 + vC); } -void GetPlane(out float3 p0, out float3 vN, const float3 vBoxX, const float3 vBoxY, const float3 vBoxZ, const float3 vCen, const float2 vScaleXY, const int sideIndex) +void GetPlane(out float3 p0, out float3 vN, const float3 boxX, const float3 boxY, const float3 boxZ, const float3 center, const float2 scaleXY, const int sideIndex) { const int iAbsSide = (sideIndex == 0 || sideIndex == 1) ? 0 : ((sideIndex == 2 || sideIndex == 3) ? 1 : 2); const float fS = (sideIndex & 1) != 0 ? 1 : (-1); - float3 vA = fS*(iAbsSide == 0 ? vBoxX : (iAbsSide == 1 ? (-vBoxY) : vBoxZ)); - float3 vB = fS*(iAbsSide == 0 ? (-vBoxY) : (iAbsSide == 1 ? (-vBoxX) : (-vBoxY))); - float3 vC = iAbsSide == 0 ? vBoxZ : (iAbsSide == 1 ? vBoxZ : (-vBoxX)); + float3 vA = fS*(iAbsSide == 0 ? boxX : (iAbsSide == 1 ? (-boxY) : boxZ)); + float3 vB = fS*(iAbsSide == 0 ? (-boxY) : (iAbsSide == 1 ? (-boxX) : (-boxY))); + float3 vC = iAbsSide == 0 ? boxZ : (iAbsSide == 1 ? boxZ : (-boxX)); bool bIsTopQuad = iAbsSide == 2 && (sideIndex & 1) != 0; // in this case all 4 verts get scaled. bool bIsSideQuad = (iAbsSide == 0 || iAbsSide == 1); // if side quad only two verts get scaled (impacts q1 and q2) - if (bIsTopQuad) { vB *= vScaleXY.y; vC *= vScaleXY.x; } + if (bIsTopQuad) { vB *= scaleXY.y; vC *= scaleXY.x; } float3 vA2 = vA; float3 vB2 = vB; - if (bIsSideQuad) { vA2 *= (iAbsSide == 0 ? vScaleXY.x : vScaleXY.y); vB2 *= (iAbsSide == 0 ? vScaleXY.y : vScaleXY.x); } + if (bIsSideQuad) { vA2 *= (iAbsSide == 0 ? scaleXY.x : scaleXY.y); vB2 *= (iAbsSide == 0 ? scaleXY.y : scaleXY.x); } - p0 = vCen + (vA + vB - vC); // vCen + vA is center of face when vScaleXY is 1.0 + p0 = center + (vA + vB - vC); // center + vA is center of face when scaleXY is 1.0 float3 vNout = cross( vB2, 0.5*(vA-vA2) - vC ); #ifdef LEFT_HAND_COORDINATES diff --git a/Assets/ShaderGenerator/CSharpToHLSL.cs b/Assets/ShaderGenerator/CSharpToHLSL.cs index 872361b3c37..ca6cfda1389 100644 --- a/Assets/ShaderGenerator/CSharpToHLSL.cs +++ b/Assets/ShaderGenerator/CSharpToHLSL.cs @@ -1,4 +1,3 @@ -using System; using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Visitors; using ICSharpCode.NRefactory.Ast; @@ -8,318 +7,313 @@ using System.Reflection; using UnityEditor; -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - public class CSharpToHLSL - { - public static bool GenerateHLSL(System.Type type, GenerateHLSL attribute, out string shaderSource) - { - List errors; - return GenerateHLSL(type, attribute, out shaderSource, out errors); - } - - public static bool GenerateHLSL(System.Type type, GenerateHLSL attribute, out string shaderSource, out List errors) - { - ShaderTypeGenerator gen = new ShaderTypeGenerator(type, attribute); - bool success = gen.Generate(); - - if (success) - { - shaderSource = gen.Emit(); - } - else - { - shaderSource = null; - } - - errors = gen.errors; - return success; - } - - public static void GenerateAll() - { - m_typeName = new Dictionary(); - - // Iterate over assemblyList, discover all applicable types with fully qualified names - var assemblyList = AssemblyEnumerator.EnumerateReferencedAssemblies(Assembly.GetCallingAssembly()); - - foreach (var assembly in assemblyList) - { - Type[] types = assembly.GetExportedTypes(); - - foreach (var type in types) - { - object[] attributes = type.GetCustomAttributes(true); - - foreach (var attr in attributes) - { - if (attr is GenerateHLSL) - { - Type parent = type.DeclaringType; - if (parent != null) - { - Debug.LogError("The GenerateHLSL attribute not supported on nested classes (" + type.FullName + "), skipping."); - } - else - { - ShaderTypeGenerator gen; - if (m_typeName.TryGetValue(type.FullName, out gen)) - { - Debug.LogError("Duplicate typename with the GenerateHLSL attribute detected: " + type.FullName + - " declared in both " + gen.type.Assembly.FullName + " and " + type.Assembly.FullName + ". Skipping the second instance."); - } - m_typeName[type.FullName] = new ShaderTypeGenerator(type, attr as GenerateHLSL); - } - } - } - } - } - - - // Now that we have extracted all the typenames that we care about, parse all .cs files in all asset - // paths and figure out in which files those types are actually declared. - m_sourceGenerators = new Dictionary>(); - - var assetPaths = AssetDatabase.GetAllAssetPaths().Where(s => s.EndsWith(".cs")).ToList(); - foreach (var assetPath in assetPaths) - { - LoadTypes(assetPath); - } - - // Finally, write out the generated code - foreach (var it in m_sourceGenerators) - { - string fileName = it.Key + ".hlsl"; - bool skipFile = false; - foreach (var gen in it.Value) - { - if (!gen.Generate()) - { - // Error reporting will be done by the generator. Skip this file. - gen.PrintErrors(); - skipFile = true; - break; ; - } - } - - if (!skipFile) - { - using (System.IO.StreamWriter writer = File.CreateText(fileName)) - { - writer.Write("//\n"); - writer.Write("// This file was automatically generated from " + it.Key + ". Please don't edit by hand.\n"); - writer.Write("//\n\n"); - - foreach (var gen in it.Value) - { - if (gen.hasStatics) - { - writer.Write(gen.EmitDefines() + "\n"); - } - } - - foreach (var gen in it.Value) - { - if (gen.hasFields) - { - writer.Write(gen.EmitTypeDecl() + "\n"); - } - } - - foreach (var gen in it.Value) - { - if (gen.hasFields) - { - writer.Write(gen.EmitAccessors() + "\n"); - } - } - - writer.Write("\n"); - } - } - } - } - - static Dictionary m_typeName; - - static void LoadTypes(string fileName) - { - using (var parser = ParserFactory.CreateParser(fileName)) - { - // @TODO any standard preprocessor symbols we need? - - /*var uniqueSymbols = new HashSet(definedSymbols.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); - foreach (var symbol in uniqueSymbols) - { - parser.Lexer.ConditionalCompilationSymbols.Add(symbol, string.Empty); - }*/ - parser.Lexer.EvaluateConditionalCompilation = true; - - parser.Parse(); - try - { - var visitor = new NamespaceVisitor(); - VisitorData data = new VisitorData(); - data.m_typeName = m_typeName; - parser.CompilationUnit.AcceptVisitor(visitor, data); - - if (data.generators.Count > 0) - m_sourceGenerators[fileName] = data.generators; - - } - catch - { - // does NRefactory throw anything we can handle here? - throw; - } - } - } - - static Dictionary> m_sourceGenerators; - - class VisitorData - { - public VisitorData() - { - currentNamespaces = new Stack(); - currentClasses = new Stack(); - generators = new List(); - } - - public string GetTypePrefix() - { - string fullNamespace = string.Empty; - - string separator = ""; - foreach (string ns in currentClasses) - { - fullNamespace = ns + "+" + fullNamespace; - } - - foreach (string ns in currentNamespaces) - { - if (fullNamespace == string.Empty) - { - separator = "."; - fullNamespace = ns; - } - else - fullNamespace = ns + "." + fullNamespace; - } - - string name = ""; - if (fullNamespace != string.Empty) - { - name = fullNamespace + separator + name; - } - return name; - } - - public Stack currentNamespaces; - public Stack currentClasses; - public List generators; - public Dictionary m_typeName; - } - - class NamespaceVisitor : AbstractAstVisitor - { - public override object VisitNamespaceDeclaration(ICSharpCode.NRefactory.Ast.NamespaceDeclaration namespaceDeclaration, object data) - { - VisitorData visitorData = (VisitorData)data; - visitorData.currentNamespaces.Push(namespaceDeclaration.Name); - namespaceDeclaration.AcceptChildren(this, visitorData); - visitorData.currentNamespaces.Pop(); - - return null; - } - - public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data) - { - // Structured types only - if (typeDeclaration.Type == ClassType.Class || typeDeclaration.Type == ClassType.Struct) - { - VisitorData visitorData = (VisitorData)data; - - string name = visitorData.GetTypePrefix() + typeDeclaration.Name; - - ShaderTypeGenerator gen; - if (visitorData.m_typeName.TryGetValue(name, out gen)) - { - visitorData.generators.Add(gen); - } - - visitorData.currentClasses.Push(typeDeclaration.Name); - typeDeclaration.AcceptChildren(this, visitorData); - visitorData.currentClasses.Pop(); - } - - return null; - } - } - } - - // Helper class to recursively enumerate assemblies referenced by the calling assembly, including unloaded ones - static class AssemblyEnumerator - { - public static List EnumerateReferencedAssemblies(Assembly assembly) - { - Dictionary assemblies = assembly.GetReferencedAssembliesRecursive(); - assemblies[GetName(assembly.FullName)] = assembly; - return assemblies.Values.ToList(); - } - - public static Dictionary GetReferencedAssembliesRecursive(this Assembly assembly) - { - assemblies = new Dictionary(); - InternalGetDependentAssembliesRecursive(assembly); - - // Skip assemblies from GAC (@TODO: any reason we'd want to include them?) - var keysToRemove = assemblies.Values.Where( - o => o.GlobalAssemblyCache == true).ToList(); - - foreach (var k in keysToRemove) - { - assemblies.Remove(GetName(k.FullName)); - } - - return assemblies; - } - - private static void InternalGetDependentAssembliesRecursive(Assembly assembly) - { - // Load assemblies with newest versions first. - var referencedAssemblies = assembly.GetReferencedAssemblies() - .OrderByDescending(o => o.Version); - - foreach (var r in referencedAssemblies) - { - if (String.IsNullOrEmpty(assembly.FullName)) - { - continue; - } - - if (assemblies.ContainsKey(GetName(r.FullName)) == false) - { - try - { - // Ensure that the assembly is loaded - var a = Assembly.Load(r.FullName); - assemblies[GetName(a.FullName)] = a; - InternalGetDependentAssembliesRecursive(a); - } - catch - { - // Missing dll, ignore. - } - } - } - } - - static string GetName(string name) - { - return name.Split(',')[0]; - } - - static Dictionary assemblies; - } -}; \ No newline at end of file + public class CSharpToHLSL + { + public static bool GenerateHLSL(System.Type type, GenerateHLSL attribute, out string shaderSource) + { + List errors; + return GenerateHLSL(type, attribute, out shaderSource, out errors); + } + + public static bool GenerateHLSL(System.Type type, GenerateHLSL attribute, out string shaderSource, out List errors) + { + ShaderTypeGenerator gen = new ShaderTypeGenerator(type, attribute); + bool success = gen.Generate(); + + if (success) + { + shaderSource = gen.Emit(); + } + else + { + shaderSource = null; + } + + errors = gen.errors; + return success; + } + + public static void GenerateAll() + { + s_TypeName = new Dictionary(); + + // Iterate over assemblyList, discover all applicable types with fully qualified names + var assemblyList = AssemblyEnumerator.EnumerateReferencedAssemblies(Assembly.GetCallingAssembly()); + + foreach (var assembly in assemblyList) + { + var types = assembly.GetExportedTypes(); + + foreach (var type in types) + { + var attributes = type.GetCustomAttributes(true); + + foreach (var attr in attributes) + { + if (attr is GenerateHLSL) + { + var parent = type.DeclaringType; + if (parent != null) + { + Debug.LogError("The GenerateHLSL attribute not supported on nested classes (" + type.FullName + "), skipping."); + } + else + { + ShaderTypeGenerator gen; + if (s_TypeName.TryGetValue(type.FullName, out gen)) + { + Debug.LogError("Duplicate typename with the GenerateHLSL attribute detected: " + type.FullName + + " declared in both " + gen.type.Assembly.FullName + " and " + type.Assembly.FullName + ". Skipping the second instance."); + } + s_TypeName[type.FullName] = new ShaderTypeGenerator(type, attr as GenerateHLSL); + } + } + } + } + } + + + // Now that we have extracted all the typenames that we care about, parse all .cs files in all asset + // paths and figure out in which files those types are actually declared. + s_SourceGenerators = new Dictionary>(); + + var assetPaths = AssetDatabase.GetAllAssetPaths().Where(s => s.EndsWith(".cs")).ToList(); + foreach (var assetPath in assetPaths) + { + LoadTypes(assetPath); + } + + // Finally, write out the generated code + foreach (var it in s_SourceGenerators) + { + string fileName = it.Key + ".hlsl"; + bool skipFile = false; + foreach (var gen in it.Value) + { + if (!gen.Generate()) + { + // Error reporting will be done by the generator. Skip this file. + gen.PrintErrors(); + skipFile = true; + break; + } + } + + if (skipFile) + continue; + + using (var writer = File.CreateText(fileName)) + { + writer.Write("//\n"); + writer.Write("// This file was automatically generated from " + it.Key + ". Please don't edit by hand.\n"); + writer.Write("//\n\n"); + + foreach (var gen in it.Value) + { + if (gen.hasStatics) + { + writer.Write(gen.EmitDefines() + "\n"); + } + } + + foreach (var gen in it.Value) + { + if (gen.hasFields) + { + writer.Write(gen.EmitTypeDecl() + "\n"); + } + } + + foreach (var gen in it.Value) + { + if (gen.hasFields && gen.needAccessors) + { + writer.Write(gen.EmitAccessors() + "\n"); + } + } + + writer.Write("\n"); + } + } + } + + static Dictionary s_TypeName; + + static void LoadTypes(string fileName) + { + using (var parser = ParserFactory.CreateParser(fileName)) + { + // @TODO any standard preprocessor symbols we need? + + /*var uniqueSymbols = new HashSet(definedSymbols.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); + foreach (var symbol in uniqueSymbols) + { + parser.Lexer.ConditionalCompilationSymbols.Add(symbol, string.Empty); + }*/ + parser.Lexer.EvaluateConditionalCompilation = true; + + parser.Parse(); + try + { + var visitor = new NamespaceVisitor(); + var data = new VisitorData { typeName = s_TypeName }; + parser.CompilationUnit.AcceptVisitor(visitor, data); + + if (data.generators.Count > 0) + s_SourceGenerators[fileName] = data.generators; + } + catch + { + // does NRefactory throw anything we can handle here? + throw; + } + } + } + + static Dictionary> s_SourceGenerators; + + class VisitorData + { + public VisitorData() + { + currentNamespaces = new Stack(); + currentClasses = new Stack(); + generators = new List(); + } + + public string GetTypePrefix() + { + var fullNamespace = string.Empty; + + var separator = ""; + + fullNamespace = currentClasses.Aggregate(fullNamespace, (current, ns) => ns + "+" + current); + foreach (var ns in currentNamespaces) + { + if (fullNamespace == string.Empty) + { + separator = "."; + fullNamespace = ns; + } + else + fullNamespace = ns + "." + fullNamespace; + } + + var name = ""; + if (fullNamespace != string.Empty) + { + name = fullNamespace + separator + name; + } + return name; + } + + public readonly Stack currentNamespaces; + public readonly Stack currentClasses; + public readonly List generators; + public Dictionary typeName; + } + + class NamespaceVisitor : AbstractAstVisitor + { + public override object VisitNamespaceDeclaration(ICSharpCode.NRefactory.Ast.NamespaceDeclaration namespaceDeclaration, object data) + { + var visitorData = (VisitorData)data; + visitorData.currentNamespaces.Push(namespaceDeclaration.Name); + namespaceDeclaration.AcceptChildren(this, visitorData); + visitorData.currentNamespaces.Pop(); + + return null; + } + + public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data) + { + // Structured types only + if (typeDeclaration.Type == ClassType.Class || typeDeclaration.Type == ClassType.Struct || typeDeclaration.Type == ClassType.Enum) + { + var visitorData = (VisitorData)data; + + var name = visitorData.GetTypePrefix() + typeDeclaration.Name; + + ShaderTypeGenerator gen; + if (visitorData.typeName.TryGetValue(name, out gen)) + { + visitorData.generators.Add(gen); + } + + visitorData.currentClasses.Push(typeDeclaration.Name); + typeDeclaration.AcceptChildren(this, visitorData); + visitorData.currentClasses.Pop(); + } + + return null; + } + } + } + + // Helper class to recursively enumerate assemblies referenced by the calling assembly, including unloaded ones + static class AssemblyEnumerator + { + public static List EnumerateReferencedAssemblies(Assembly assembly) + { + Dictionary referenced = assembly.GetReferencedAssembliesRecursive(); + referenced[GetName(assembly.FullName)] = assembly; + return referenced.Values.ToList(); + } + + public static Dictionary GetReferencedAssembliesRecursive(this Assembly assembly) + { + s_Assemblies = new Dictionary(); + InternalGetDependentAssembliesRecursive(assembly); + + // Skip assemblies from GAC (@TODO: any reason we'd want to include them?) + var keysToRemove = s_Assemblies.Values.Where( + o => o.GlobalAssemblyCache == true).ToList(); + + foreach (var k in keysToRemove) + { + s_Assemblies.Remove(GetName(k.FullName)); + } + + return s_Assemblies; + } + + private static void InternalGetDependentAssembliesRecursive(Assembly assembly) + { + // Load assemblies with newest versions first. + var referencedAssemblies = assembly.GetReferencedAssemblies() + .OrderByDescending(o => o.Version); + + foreach (var r in referencedAssemblies) + { + if (string.IsNullOrEmpty(assembly.FullName)) + { + continue; + } + + if (s_Assemblies.ContainsKey(GetName(r.FullName))) + continue; + + try + { + // Ensure that the assembly is loaded + var a = Assembly.Load(r.FullName); + s_Assemblies[GetName(a.FullName)] = a; + InternalGetDependentAssembliesRecursive(a); + } + catch + { + // Missing dll, ignore. + } + } + } + + static string GetName(string name) + { + return name.Split(',')[0]; + } + + static Dictionary s_Assemblies; + } +} diff --git a/Assets/ShaderGenerator/ShaderGeneratorMenu.cs b/Assets/ShaderGenerator/ShaderGeneratorMenu.cs index 6a3178224c1..042becb3eaa 100644 --- a/Assets/ShaderGenerator/ShaderGeneratorMenu.cs +++ b/Assets/ShaderGenerator/ShaderGeneratorMenu.cs @@ -1,19 +1,11 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using System.Runtime.InteropServices; -using UnityEngine; -using UnityEditor; - -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - public class ShaderGeneratorMenu - { - [UnityEditor.MenuItem("Renderloop/Generate Shader Includes")] - static void GenerateShaderIncludes() - { - CSharpToHLSL.GenerateAll(); - } - } + public class ShaderGeneratorMenu + { + [UnityEditor.MenuItem("Renderloop/Generate Shader Includes")] + static void GenerateShaderIncludes() + { + CSharpToHLSL.GenerateAll(); + } + } } diff --git a/Assets/ShaderGenerator/ShaderTypeGeneration.cs b/Assets/ShaderGenerator/ShaderTypeGeneration.cs index 597458e3061..5742c7538e7 100644 --- a/Assets/ShaderGenerator/ShaderTypeGeneration.cs +++ b/Assets/ShaderGenerator/ShaderTypeGeneration.cs @@ -1,516 +1,575 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Reflection; -using UnityEngine; -using ICSharpCode.NRefactory; -using ICSharpCode.NRefactory.Visitors; -namespace UnityEngine.ScriptableRenderLoop +namespace UnityEngine.Experimental.ScriptableRenderLoop { - public enum PackingRules - { - Exact, - Aggressive - }; - - [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class)] - public class GenerateHLSL : System.Attribute - { - public PackingRules packingRules; - public GenerateHLSL(PackingRules rules = PackingRules.Exact) - { - packingRules = rules; - } - } - - internal class ShaderTypeGenerator - { - public ShaderTypeGenerator(Type type, GenerateHLSL attr) - { - this.type = type; - this.attr = attr; - } - - enum PrimitiveType - { - Float, Int, UInt - }; - - static string PrimitiveToString(PrimitiveType type, int rows, int cols) - { - string text = ""; - switch (type) - { - case PrimitiveType.Float: - text = "float"; - break; - case PrimitiveType.Int: - text = "int"; - break; - case PrimitiveType.UInt: - text = "uint"; - break; - } - - if (rows > 1) - { - text += rows.ToString(); - if (cols > 1) - { - text += "x" + cols.ToString(); - } - } - - return text; - } - - class Accessor - { - public Accessor(PrimitiveType type, string name, int rows, int cols) - { - this.name = name; - this.fullType = PrimitiveToString(type, rows, cols); - field = name; - } - - Accessor(string name, string swizzle, string field, string fullType) - { - this.name = name; - this.field = field; - this.fullType = fullType; - } - - public string name; - public string field; - public string fullType; - }; - - class ShaderFieldInfo : ICloneable - { - public ShaderFieldInfo(PrimitiveType type, string name, int rows, int cols) - { - this.type = type; - this.name = originalName = name; - this.rows = rows; - this.cols = cols; - this.comment = ""; - swizzleOffset = 0; - packed = false; - accessor = new Accessor(type, name, rows, cols); - } - public ShaderFieldInfo(PrimitiveType type, string name, int rows, int cols, string comment) - { - this.type = type; - this.name = originalName = name; - this.rows = rows; - this.cols = cols; - this.comment = comment; - swizzleOffset = 0; - packed = false; - accessor = new Accessor(type, name, rows, cols); - } - - public string typeString - { - get { return PrimitiveToString(type, rows, cols); } - } - - public string DeclString() - { - return PrimitiveToString(type, rows, cols) + " " + name; - } - - public override string ToString() - { - string text = DeclString() + ";"; - if (comment.Length > 0) - { - text += " // " + comment; - } - return text; - } - - public int elementCount - { - get { return rows * cols; } - } - - public object Clone() - { - ShaderFieldInfo info = new ShaderFieldInfo(type, name, rows, cols, comment); - info.swizzleOffset = swizzleOffset; - info.packed = packed; - info.accessor = accessor; - return info; - } - - public PrimitiveType type; - public string name; - public string originalName; - public string comment; - public int rows; - public int cols; - public int swizzleOffset; - public bool packed; - public Accessor accessor; - }; - - void Error(string error) - { - if (errors == null) - { - errors = new List(); - } - errors.Add("Failed to generate shader type for " + type.ToString() + ": " + error); - } - - public void PrintErrors() - { - if (errors != null) - { - foreach (var e in errors) - { - Debug.LogError(e); - } - } - } - - void EmitPrimitiveType(PrimitiveType type, int elements, string name, string comment, List fields) - { - fields.Add(new ShaderFieldInfo(type, name, elements, 1, comment)); - } - - void EmitMatrixType(PrimitiveType type, int rows, int cols, string name, string comment, List fields) - { - fields.Add(new ShaderFieldInfo(type, name, rows, cols, comment)); - } - - bool ExtractComplex(FieldInfo field, List shaderFields) - { - List floatFields = new List(); - List intFields = new List(); - List uintFields = new List(); - string[] descs = new string[4] { "x: ", "y: ", "z: ", "w: " }; - int numFields = 0; - - string fieldName = "'" + field.FieldType.Name + " " + field.Name + "'"; - - foreach (FieldInfo subField in field.FieldType.GetFields()) - { - if (subField.IsStatic) - continue; - - if (!subField.FieldType.IsPrimitive) - { - Error("'" + fieldName + "' can not be packed into a register, since it contains a non-primitive field type '" + subField.FieldType + "'"); - return false; - } - if (subField.FieldType == typeof(float)) - floatFields.Add(subField); - else if (subField.FieldType == typeof(int)) - intFields.Add(subField); - else if (subField.FieldType == typeof(uint)) - uintFields.Add(subField); - else - { - Error("'" + fieldName + "' can not be packed into a register, since it contains an unsupported field type '" + subField.FieldType + "'"); - return false; - } - - if (numFields == 4) - { - Error("'" + fieldName + "' can not be packed into a register because it contains more than 4 fields."); - return false; - } - - descs[numFields] += subField.Name + " "; - numFields++; - } - Array.Resize(ref descs, numFields); - - string comment = string.Concat(descs); - string mismatchErrorMsg = "'" + fieldName + "' can not be packed into a single register because it contains mixed basic types."; - - if (floatFields.Count > 0) - { - if (intFields.Count + uintFields.Count > 0) - { - Error(mismatchErrorMsg); - return false; - } - EmitPrimitiveType(PrimitiveType.Float, floatFields.Count, field.Name, comment, shaderFields); - } - else if (intFields.Count > 0) - { - if (floatFields.Count + uintFields.Count > 0) - { - Error(mismatchErrorMsg); - return false; - } - EmitPrimitiveType(PrimitiveType.Int, intFields.Count, field.Name, "", shaderFields); - } - else if (uintFields.Count > 0) - { - if (floatFields.Count + intFields.Count > 0) - { - Error(mismatchErrorMsg); - return false; - } - EmitPrimitiveType(PrimitiveType.UInt, uintFields.Count, field.Name, "", shaderFields); - } - else - { - // Empty struct. - } - - return true; - } - - enum MergeResult - { - Merged, - Full, - Failed - }; - - MergeResult PackFields(ShaderFieldInfo info, ref ShaderFieldInfo merged) - { - if (merged.elementCount % 4 == 0) - { - return MergeResult.Full; - } - - if (info.type != merged.type) - { - Error("can't merge '" + merged.DeclString() + "' and '" + info.DeclString() + "' into the same register because they have incompatible types. Consider reordering the fields so that adjacent fields have the same primitive type."); - return MergeResult.Failed; // incompatible types - } - - if (info.cols > 1 || merged.cols > 1) - { - Error("merging matrix types not yet supported ('" + merged.DeclString() + "' and '" + info.DeclString() + "'). Consider reordering the fields to place matrix-typed variables on four-component vector boundaries."); - return MergeResult.Failed; // don't merge matrix types - } - - if (info.rows + merged.rows > 4) - { - // @TODO: lift the restriction - Error("can't merge '" + merged.DeclString() + "' and '" + info.DeclString() + "' because then " + info.name + " would cross register boundary. Consider reordering the fields so that none of them cross four-component vector boundaries when packed."); - return MergeResult.Failed; // out of space - } - - merged.rows += info.rows; - merged.name += "_" + info.name; - return MergeResult.Merged; - } - - List Pack(List shaderFields) - { - List mergedFields = new List(); - - List.Enumerator e = shaderFields.GetEnumerator(); - - if (!e.MoveNext()) - { - // Empty shader struct definition. - return shaderFields; - } - - ShaderFieldInfo current = e.Current.Clone() as ShaderFieldInfo; - - while (e.MoveNext()) - { - while (true) - { - int offset = current.elementCount; - MergeResult result = PackFields(e.Current, ref current); - - if (result == MergeResult.Failed) - { - return null; - } - else if (result == MergeResult.Full) - { - break; - } - - // merge accessors - Accessor acc = current.accessor; - - acc.name = current.name; - e.Current.accessor = acc; - e.Current.swizzleOffset += offset; - - current.packed = e.Current.packed = true; - - if (!e.MoveNext()) - { - mergedFields.Add(current); - return mergedFields; - } - } - mergedFields.Add(current); - current = e.Current.Clone() as ShaderFieldInfo; - } - - return mergedFields; - } - - public string EmitTypeDecl() - { - string shaderText = string.Empty; - - shaderText += "// Generated from " + type.FullName + "\n"; - shaderText += "// PackingRules = " + attr.packingRules.ToString() + "\n"; - shaderText += "struct " + type.Name + "\n"; - shaderText += "{\n"; - foreach (ShaderFieldInfo shaderFieldInfo in packedFields) - { - shaderText += "\t" + shaderFieldInfo.ToString() + "\n"; - } - shaderText += "};\n"; - - return shaderText; - } - - public string EmitAccessors() - { - string shaderText = string.Empty; - - shaderText += "//\n"; - shaderText += "// Accessors for " + type.FullName + "\n"; - shaderText += "//\n"; - foreach (var shaderField in shaderFields) - { - Accessor acc = shaderField.accessor; - string accessorName = shaderField.originalName; - accessorName = "Get" + char.ToUpper(accessorName[0]) + accessorName.Substring(1); - - shaderText += shaderField.typeString + " " + accessorName + "(" + type.Name + " value)\n"; - shaderText += "{\n"; - - string swizzle = ""; - - // @TODO: support matrix type packing? - if (shaderField.cols == 1) // @TEMP - { - // don't emit redundant swizzles - if (shaderField.originalName != acc.name) - { - swizzle = "." + "xyzw".Substring(shaderField.swizzleOffset, shaderField.elementCount); - } - } - - shaderText += "\treturn value." + acc.name + swizzle + ";\n"; - shaderText += "}\n"; - } - - return shaderText; - } - - public string EmitDefines() - { - string shaderText = string.Empty; - - shaderText += "//\n"; - shaderText += "// " + type.FullName + ": static fields\n"; - shaderText += "//\n"; - foreach (var def in statics) - { - shaderText += "#define " + def.Key + " (" + def.Value + ")\n"; - } - - return shaderText; - } - - public string Emit() - { - return EmitDefines() + EmitTypeDecl() + EmitAccessors(); - } - - public bool Generate() - { - statics = new Dictionary(); - - FieldInfo[] fields = type.GetFields(); - shaderFields = new List(); - - foreach (var field in fields) - { - if (field.IsStatic) - { - if (field.FieldType.IsPrimitive) - { - statics[field.Name] = field.GetValue(null).ToString(); - } - continue; - } - - if (field.FieldType.IsPrimitive) - { - if (field.FieldType == typeof(float)) - EmitPrimitiveType(PrimitiveType.Float, 1, field.Name, "", shaderFields); - else if (field.FieldType == typeof(int)) - EmitPrimitiveType(PrimitiveType.Int, 1, field.Name, "", shaderFields); - else if (field.FieldType == typeof(uint)) - EmitPrimitiveType(PrimitiveType.UInt, 1, field.Name, "", shaderFields); - else - { - Error("unsupported field type '" + field.FieldType + "'"); - return false; - } - } - else - { - // handle special types, otherwise try parsing the struct - if (field.FieldType == typeof(Vector2)) - EmitPrimitiveType(PrimitiveType.Float, 2, field.Name, "", shaderFields); - else if (field.FieldType == typeof(Vector3)) - EmitPrimitiveType(PrimitiveType.Float, 3, field.Name, "", shaderFields); - else if (field.FieldType == typeof(Vector4)) - EmitPrimitiveType(PrimitiveType.Float, 4, field.Name, "", shaderFields); - else if (field.FieldType == typeof(Matrix4x4)) - EmitMatrixType(PrimitiveType.Float, 4, 4, field.Name, "", shaderFields); - else if (!ExtractComplex(field, shaderFields)) - { - // Error reporting done in ExtractComplex() - return false; - } - } - } - - packedFields = shaderFields; - if (attr.packingRules == PackingRules.Aggressive) - { - packedFields = Pack(shaderFields); - - if (packedFields == null) - { - return false; - } - } - - errors = null; - return true; - } - - public bool hasFields - { - get { return shaderFields.Count > 0; } - } - - public bool hasStatics - { - get { return statics.Count > 0; } - } - - public Type type; - public GenerateHLSL attr; - public List errors = null; - - Dictionary statics; - List shaderFields; - List packedFields; - } + public enum PackingRules + { + Exact, + Aggressive + }; + + [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Enum)] + public class GenerateHLSL : System.Attribute + { + public PackingRules packingRules; + public bool needAccessors; // Whether or not to generate the accessors + public bool needParamDefines; // Wheter or not to generate define for each parameters of the struc + public int paramDefinesStart; // Start of the generated define + public GenerateHLSL(PackingRules rules = PackingRules.Exact, bool needAccessors = true, bool needParamDefines = false, int paramDefinesStart = 1) + { + packingRules = rules; + this.needAccessors = needAccessors; + this.needParamDefines = needParamDefines; + this.paramDefinesStart = paramDefinesStart; + } + } + + [AttributeUsage(AttributeTargets.Field)] + public class SurfaceDataAttributes : System.Attribute + { + public string displayName; + public SurfaceDataAttributes(string displayName = "") + { + this.displayName = displayName; + } + } + + internal class ShaderTypeGenerator + { + public ShaderTypeGenerator(Type type, GenerateHLSL attr) + { + this.type = type; + this.attr = attr; + debugCounter = 0; + } + + enum PrimitiveType + { + Float, Int, UInt + }; + + static string PrimitiveToString(PrimitiveType type, int rows, int cols) + { + string text = ""; + switch (type) + { + case PrimitiveType.Float: + text = "float"; + break; + case PrimitiveType.Int: + text = "int"; + break; + case PrimitiveType.UInt: + text = "uint"; + break; + } + + if (rows > 1) + { + text += rows.ToString(); + if (cols > 1) + { + text += "x" + cols.ToString(); + } + } + + return text; + } + + class Accessor + { + public Accessor(PrimitiveType type, string name, int rows, int cols) + { + this.name = name; + this.fullType = PrimitiveToString(type, rows, cols); + field = name; + } + + Accessor(string name, string swizzle, string field, string fullType) + { + this.name = name; + this.field = field; + this.fullType = fullType; + } + + public string name; + public string field; + public string fullType; + }; + + class ShaderFieldInfo : ICloneable + { + public ShaderFieldInfo(PrimitiveType type, string name, int rows, int cols) + { + this.type = type; + this.name = originalName = name; + this.rows = rows; + this.cols = cols; + this.comment = ""; + swizzleOffset = 0; + packed = false; + accessor = new Accessor(type, name, rows, cols); + } + + public ShaderFieldInfo(PrimitiveType type, string name, int rows, int cols, string comment) + { + this.type = type; + this.name = originalName = name; + this.rows = rows; + this.cols = cols; + this.comment = comment; + swizzleOffset = 0; + packed = false; + accessor = new Accessor(type, name, rows, cols); + } + + public string typeString + { + get { return PrimitiveToString(type, rows, cols); } + } + + public string DeclString() + { + return PrimitiveToString(type, rows, cols) + " " + name; + } + + public override string ToString() + { + string text = DeclString() + ";"; + if (comment.Length > 0) + { + text += " // " + comment; + } + return text; + } + + public int elementCount + { + get { return rows * cols; } + } + + public object Clone() + { + ShaderFieldInfo info = new ShaderFieldInfo(type, name, rows, cols, comment); + info.swizzleOffset = swizzleOffset; + info.packed = packed; + info.accessor = accessor; + return info; + } + + public readonly PrimitiveType type; + public string name; + public readonly string originalName; + public readonly string comment; + public int rows; + public int cols; + public int swizzleOffset; + public bool packed; + public Accessor accessor; + }; + + void Error(string error) + { + if (errors == null) + { + errors = new List(); + } + errors.Add("Failed to generate shader type for " + type.ToString() + ": " + error); + } + + public void PrintErrors() + { + if (errors != null) + { + foreach (var e in errors) + { + Debug.LogError(e); + } + } + } + + void EmitPrimitiveType(PrimitiveType type, int elements, string name, string comment, List fields) + { + fields.Add(new ShaderFieldInfo(type, name, elements, 1, comment)); + } + + void EmitMatrixType(PrimitiveType type, int rows, int cols, string name, string comment, List fields) + { + fields.Add(new ShaderFieldInfo(type, name, rows, cols, comment)); + } + + bool ExtractComplex(FieldInfo field, List shaderFields) + { + var floatFields = new List(); + var intFields = new List(); + var uintFields = new List(); + var descs = new string[4] { "x: ", "y: ", "z: ", "w: " }; + int numFields = 0; + + string fieldName = "'" + field.FieldType.Name + " " + field.Name + "'"; + + foreach (var subField in field.FieldType.GetFields()) + { + if (subField.IsStatic) + continue; + + if (!subField.FieldType.IsPrimitive) + { + Error("'" + fieldName + "' can not be packed into a register, since it contains a non-primitive field type '" + subField.FieldType + "'"); + return false; + } + if (subField.FieldType == typeof(float)) + floatFields.Add(subField); + else if (subField.FieldType == typeof(int)) + intFields.Add(subField); + else if (subField.FieldType == typeof(uint)) + uintFields.Add(subField); + else + { + Error("'" + fieldName + "' can not be packed into a register, since it contains an unsupported field type '" + subField.FieldType + "'"); + return false; + } + + if (numFields == 4) + { + Error("'" + fieldName + "' can not be packed into a register because it contains more than 4 fields."); + return false; + } + + descs[numFields] += subField.Name + " "; + numFields++; + } + Array.Resize(ref descs, numFields); + + string comment = string.Concat(descs); + string mismatchErrorMsg = "'" + fieldName + "' can not be packed into a single register because it contains mixed basic types."; + + if (floatFields.Count > 0) + { + if (intFields.Count + uintFields.Count > 0) + { + Error(mismatchErrorMsg); + return false; + } + EmitPrimitiveType(PrimitiveType.Float, floatFields.Count, field.Name, comment, shaderFields); + } + else if (intFields.Count > 0) + { + if (floatFields.Count + uintFields.Count > 0) + { + Error(mismatchErrorMsg); + return false; + } + EmitPrimitiveType(PrimitiveType.Int, intFields.Count, field.Name, "", shaderFields); + } + else if (uintFields.Count > 0) + { + if (floatFields.Count + intFields.Count > 0) + { + Error(mismatchErrorMsg); + return false; + } + EmitPrimitiveType(PrimitiveType.UInt, uintFields.Count, field.Name, "", shaderFields); + } + else + { + // Empty struct. + } + + return true; + } + + enum MergeResult + { + Merged, + Full, + Failed + }; + + MergeResult PackFields(ShaderFieldInfo info, ref ShaderFieldInfo merged) + { + if (merged.elementCount % 4 == 0) + { + return MergeResult.Full; + } + + if (info.type != merged.type) + { + Error("can't merge '" + merged.DeclString() + "' and '" + info.DeclString() + "' into the same register because they have incompatible types. Consider reordering the fields so that adjacent fields have the same primitive type."); + return MergeResult.Failed; // incompatible types + } + + if (info.cols > 1 || merged.cols > 1) + { + Error("merging matrix types not yet supported ('" + merged.DeclString() + "' and '" + info.DeclString() + "'). Consider reordering the fields to place matrix-typed variables on four-component vector boundaries."); + return MergeResult.Failed; // don't merge matrix types + } + + if (info.rows + merged.rows > 4) + { + // @TODO: lift the restriction + Error("can't merge '" + merged.DeclString() + "' and '" + info.DeclString() + "' because then " + info.name + " would cross register boundary. Consider reordering the fields so that none of them cross four-component vector boundaries when packed."); + return MergeResult.Failed; // out of space + } + + merged.rows += info.rows; + merged.name += "_" + info.name; + return MergeResult.Merged; + } + + List Pack(List shaderFields) + { + List mergedFields = new List(); + + using (var e = shaderFields.GetEnumerator()) + { + if (!e.MoveNext()) + { + // Empty shader struct definition. + return shaderFields; + } + + ShaderFieldInfo current = e.Current.Clone() as ShaderFieldInfo; + + while (e.MoveNext()) + { + while (true) + { + int offset = current.elementCount; + var result = PackFields(e.Current, ref current); + + if (result == MergeResult.Failed) + { + return null; + } + else if (result == MergeResult.Full) + { + break; + } + + // merge accessors + var acc = current.accessor; + + acc.name = current.name; + e.Current.accessor = acc; + e.Current.swizzleOffset += offset; + + current.packed = e.Current.packed = true; + + if (!e.MoveNext()) + { + mergedFields.Add(current); + return mergedFields; + } + } + mergedFields.Add(current); + current = e.Current.Clone() as ShaderFieldInfo; + } + + } + return mergedFields; + } + + public string EmitTypeDecl() + { + string shaderText = string.Empty; + + shaderText += "// Generated from " + type.FullName + "\n"; + shaderText += "// PackingRules = " + attr.packingRules.ToString() + "\n"; + shaderText += "struct " + type.Name + "\n"; + shaderText += "{\n"; + foreach (var shaderFieldInfo in m_PackedFields) + { + shaderText += "\t" + shaderFieldInfo.ToString() + "\n"; + } + shaderText += "};\n"; + + return shaderText; + } + + public string EmitAccessors() + { + string shaderText = string.Empty; + + shaderText += "//\n"; + shaderText += "// Accessors for " + type.FullName + "\n"; + shaderText += "//\n"; + foreach (var shaderField in m_ShaderFields) + { + Accessor acc = shaderField.accessor; + string accessorName = shaderField.originalName; + accessorName = "Get" + char.ToUpper(accessorName[0]) + accessorName.Substring(1); + + shaderText += shaderField.typeString + " " + accessorName + "(" + type.Name + " value)\n"; + shaderText += "{\n"; + + string swizzle = ""; + + // @TODO: support matrix type packing? + if (shaderField.cols == 1) // @TEMP + { + // don't emit redundant swizzles + if (shaderField.originalName != acc.name) + { + swizzle = "." + "xyzw".Substring(shaderField.swizzleOffset, shaderField.elementCount); + } + } + + shaderText += "\treturn value." + acc.name + swizzle + ";\n"; + shaderText += "}\n"; + } + + return shaderText; + } + + public string EmitDefines() + { + string shaderText = string.Empty; + + shaderText += "//\n"; + shaderText += "// " + type.FullName + ": static fields\n"; + shaderText += "//\n"; + foreach (var def in m_Statics) + { + shaderText += "#define " + def.Key + " (" + def.Value + ")\n"; + } + + return shaderText; + } + + public string Emit() + { + return EmitDefines() + EmitTypeDecl() + EmitAccessors(); + } + + // This function is a helper to follow unity convertion + // when converting fooBar ro FOO_BAR + string InsertUnderscore(string name) + { + for (int i = 1; i < name.Length; i++) + { + if (char.IsLower(name[i - 1]) && char.IsUpper(name[i])) + { + // case switch, insert underscore + name = name.Insert(i, "_"); + } + } + + return name; + } + + public bool Generate() + { + m_Statics = new Dictionary(); + + FieldInfo[] fields = type.GetFields(); + m_ShaderFields = new List(); + + if (type.IsEnum) + { + foreach (var field in fields) + { + if (!field.IsSpecialName) + { + string name = field.Name; + name = InsertUnderscore(name); + m_Statics[(type.Name + "_" + name).ToUpper()] = field.GetRawConstantValue().ToString(); + } + } + errors = null; + return true; + } + + foreach (var field in fields) + { + if (field.IsStatic) + { + if (field.FieldType.IsPrimitive) + { + m_Statics[field.Name] = field.GetValue(null).ToString(); + } + continue; + } + + if (attr.needParamDefines) + { + string subNamespace = type.Namespace.Substring(type.Namespace.LastIndexOf((".")) + 1); + string name = InsertUnderscore(field.Name); + m_Statics[("DEBUGVIEW_" + subNamespace + "_" + type.Name + "_" + name).ToUpper()] = Convert.ToString(attr.paramDefinesStart + debugCounter++); + } + + if (field.FieldType.IsPrimitive) + { + if (field.FieldType == typeof(float)) + EmitPrimitiveType(PrimitiveType.Float, 1, field.Name, "", m_ShaderFields); + else if (field.FieldType == typeof(int)) + EmitPrimitiveType(PrimitiveType.Int, 1, field.Name, "", m_ShaderFields); + else if (field.FieldType == typeof(uint)) + EmitPrimitiveType(PrimitiveType.UInt, 1, field.Name, "", m_ShaderFields); + else + { + Error("unsupported field type '" + field.FieldType + "'"); + return false; + } + } + else + { + // handle special types, otherwise try parsing the struct + if (field.FieldType == typeof(Vector2)) + EmitPrimitiveType(PrimitiveType.Float, 2, field.Name, "", m_ShaderFields); + else if (field.FieldType == typeof(Vector3)) + EmitPrimitiveType(PrimitiveType.Float, 3, field.Name, "", m_ShaderFields); + else if (field.FieldType == typeof(Vector4)) + EmitPrimitiveType(PrimitiveType.Float, 4, field.Name, "", m_ShaderFields); + else if (field.FieldType == typeof(Matrix4x4)) + EmitMatrixType(PrimitiveType.Float, 4, 4, field.Name, "", m_ShaderFields); + else if (!ExtractComplex(field, m_ShaderFields)) + { + // Error reporting done in ExtractComplex() + return false; + } + } + } + + m_PackedFields = m_ShaderFields; + if (attr.packingRules == PackingRules.Aggressive) + { + m_PackedFields = Pack(m_ShaderFields); + + if (m_PackedFields == null) + { + return false; + } + } + + errors = null; + return true; + } + + public bool hasFields + { + get { return m_ShaderFields.Count > 0; } + } + + public bool hasStatics + { + get { return m_Statics.Count > 0; } + } + + public bool needAccessors + { + get { return attr.needAccessors; } + } + + public Type type; + public GenerateHLSL attr; + public int debugCounter; + public List errors = null; + + Dictionary m_Statics; + List m_ShaderFields; + List m_PackedFields; + } } diff --git a/Assets/TestScenes/FPTL/Materials/FwdMat.mat.meta b/Assets/TestScenes/FPTL/Materials/FwdMat.mat.meta new file mode 100644 index 00000000000..af6f8cd5359 --- /dev/null +++ b/Assets/TestScenes/FPTL/Materials/FwdMat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24e6a15bf9d2c0944b380d860a738528 +timeCreated: 1475863528 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/HDRenderLoopTest.unity b/Assets/TestScenes/HDTest/HDRenderLoopTest.unity index 112103085d3..ce0145ea959 100644 --- a/Assets/TestScenes/HDTest/HDRenderLoopTest.unity +++ b/Assets/TestScenes/HDTest/HDRenderLoopTest.unity @@ -195,6 +195,172 @@ Prefab: m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 646b4ac0331f8e447bd20f06eba916a3, type: 3} m_IsPrefabParent: 0 +--- !u!1 &336015812 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 336015816} + - component: {fileID: 336015815} + - component: {fileID: 336015814} + - component: {fileID: 336015813} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &336015813 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 336015812} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 9d65ced14251eb743ba9702a6f3c2ce8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!64 &336015814 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 336015812} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &336015815 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 336015812} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &336015816 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 336015812} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 24.13, y: 0, z: 0} + m_LocalScale: {x: 2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1546103598} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &559905034 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 559905038} + - component: {fileID: 559905037} + - component: {fileID: 559905036} + - component: {fileID: 559905035} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &559905035 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 559905034} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 6abcdf01974b58c45af2b04a9c0fdd13, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!64 &559905036 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 559905034} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &559905037 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 559905034} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &559905038 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 559905034} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 933267878} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &580932146 GameObject: m_ObjectHideFlags: 0 @@ -416,6 +582,95 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &633911878 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 633911879} + - component: {fileID: 633911883} + - component: {fileID: 633911882} + - component: {fileID: 633911881} + - component: {fileID: 633911880} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &633911879 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 633911878} + m_LocalRotation: {x: -0, y: 0.9750333, z: -0.22205901, w: 0} + m_LocalPosition: {x: 23.67, y: 3.4, z: 6.22} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1247488470} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 25.66, y: 180, z: 0} +--- !u!81 &633911880 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 633911878} + m_Enabled: 1 +--- !u!92 &633911881 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 633911878} + m_Enabled: 1 +--- !u!124 &633911882 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 633911878} + m_Enabled: 1 +--- !u!20 &633911883 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 633911878} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 10 + field of view: 76.2 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 --- !u!1001 &653798720 Prefab: m_ObjectHideFlags: 0 @@ -503,7 +758,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 485392, guid: e641a36bceddbf24a89656e94dafb3e5, type: 2} propertyPath: m_RootOrder - value: 13 + value: 14 objectReference: {fileID: 0} - target: {fileID: 115764, guid: e641a36bceddbf24a89656e94dafb3e5, type: 2} propertyPath: m_Name @@ -566,62 +821,35 @@ Prefab: m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: e641a36bceddbf24a89656e94dafb3e5, type: 2} m_IsPrefabParent: 0 ---- !u!1 &970745596 +--- !u!1 &785457124 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - - component: {fileID: 970745597} - - component: {fileID: 970745599} - - component: {fileID: 970745598} + - component: {fileID: 785457126} + - component: {fileID: 785457125} m_Layer: 0 - m_Name: Spotlight (1) + m_Name: Point light (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &970745597 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 970745596} - m_LocalRotation: {x: 0.31429112, y: 0.005978446, z: -0.010438241, w: 0.94925046} - m_LocalPosition: {x: 2.919, y: 2.76, z: -3.651} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 37.039, y: 0, z: 0} ---- !u!114 &970745598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 970745596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3} - m_Name: - m_EditorClassIdentifier: - shadowResolution: 512 - innerSpotPercent: 49 ---- !u!108 &970745599 +--- !u!108 &785457125 Light: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 970745596} + m_GameObject: {fileID: 785457124} m_Enabled: 1 serializedVersion: 7 - m_Type: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Type: 2 + m_Color: {r: 0.3784602, g: 0.7352941, b: 0.4842799, a: 1} m_Intensity: 8 - m_Range: 40.6 - m_SpotAngle: 80 + m_Range: 8.65 + m_SpotAngle: 30 m_CookieSize: 10 m_Shadows: m_Type: 0 @@ -643,32 +871,267 @@ Light: m_BounceIntensity: 1 m_ShadowRadius: 0 m_ShadowAngle: 0 ---- !u!1 &1163258123 +--- !u!4 &785457126 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 785457124} + m_LocalRotation: {x: -0.0034919123, y: 0.0089843245, z: -0.007998787, w: 0.99992156} + m_LocalPosition: {x: 4.38, y: 1.87, z: 6.11} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: -0.39200002, y: 1.033, z: -0.92} +--- !u!1 &933267877 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - - component: {fileID: 1163258127} - - component: {fileID: 1163258126} - - component: {fileID: 1163258125} - - component: {fileID: 1163258124} + - component: {fileID: 933267878} m_Layer: 0 - m_Name: Plane + m_Name: Test - ReflectionProbe -OBB m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!23 &1163258124 -MeshRenderer: +--- !u!4 &933267878 +Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1163258123} - m_Enabled: 1 - m_CastShadows: 1 + m_GameObject: {fileID: 933267877} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -71.56, y: 0, z: 14.23} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1737318548} + - {fileID: 1035518233} + - {fileID: 559905038} + - {fileID: 2102536478} + m_Father: {fileID: 0} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &970745596 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 970745597} + - component: {fileID: 970745599} + - component: {fileID: 970745598} + m_Layer: 0 + m_Name: Spotlight (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &970745597 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 970745596} + m_LocalRotation: {x: 0.31429112, y: 0.005978446, z: -0.010438241, w: 0.94925046} + m_LocalPosition: {x: 3.576, y: 2.75, z: -3.662} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 37.039, y: 0, z: 0} +--- !u!114 &970745598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 970745596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3} + m_Name: + m_EditorClassIdentifier: + shadowResolution: 512 + innerSpotPercent: 49 +--- !u!108 &970745599 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 970745596} + m_Enabled: 1 + serializedVersion: 7 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 8 + m_Range: 40.6 + m_SpotAngle: 80 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &1035518232 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1035518233} + - component: {fileID: 1035518234} + m_Layer: 0 + m_Name: Reflection Probe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1035518233 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1035518232} + m_LocalRotation: {x: -0, y: 0.51840013, z: -0, w: 0.8551382} + m_LocalPosition: {x: -0.7599983, y: 1.8, z: -1.5999994} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 933267878} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 62.450005, z: 0} +--- !u!215 &1035518234 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1035518232} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 2 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 128 + m_UpdateFrequency: 0 + m_BoxSize: {x: 18.908352, y: 12.292334, z: 10} + m_BoxOffset: {x: 0, y: 0, z: 0} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 0 + m_HDR: 1 + m_BoxProjection: 1 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 8900000, guid: a6bda31e5e5c82a40b8e91ad0be087e8, + type: 3} +--- !u!1001 &1062558345 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1247488470} + m_Modifications: + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.x + value: 23.689999 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.y + value: 0.89 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.z + value: 0.37000084 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + m_IsPrefabParent: 0 +--- !u!4 &1062558346 stripped +Transform: + m_PrefabParentObject: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, + type: 2} + m_PrefabInternal: {fileID: 1062558345} +--- !u!1 &1163258123 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1163258127} + - component: {fileID: 1163258126} + - component: {fileID: 1163258125} + - component: {fileID: 1163258124} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1163258124 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1163258123} + m_Enabled: 1 + m_CastShadows: 1 m_ReceiveShadows: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 @@ -726,6 +1189,68 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1175446862 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1175446864} + - component: {fileID: 1175446863} + m_Layer: 0 + m_Name: Reflection Probe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!215 &1175446863 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1175446862} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 2 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 128 + m_UpdateFrequency: 0 + m_BoxSize: {x: 10, y: 10, z: 5} + m_BoxOffset: {x: -2.4527822, y: 0.115297556, z: -2.0854547} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 1 + m_HDR: 1 + m_BoxProjection: 1 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 8900000, guid: a6bda31e5e5c82a40b8e91ad0be087e8, + type: 3} +--- !u!4 &1175446864 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1175446862} + m_LocalRotation: {x: 0.14233047, y: 0.35877672, z: -0.58332473, w: 0.71467024} + m_LocalPosition: {x: 22.001999, y: -0.38, z: 0.32000065} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1546103598} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 38.463, y: 26.286001, z: -69.130005} --- !u!1 &1216278626 GameObject: m_ObjectHideFlags: 0 @@ -866,12 +1391,127 @@ Transform: m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1220024533} m_LocalRotation: {x: -0.0034919123, y: 0.0089843245, z: -0.007998787, w: 0.99992156} - m_LocalPosition: {x: 0.19, y: 1.46, z: 1.286} + m_LocalPosition: {x: 0.632, y: 1.453, z: 1.334} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: -0.39200002, y: 1.033, z: -0.92} +--- !u!1 &1247488469 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1247488470} + m_Layer: 0 + m_Name: Test - ReflectionProbe -OBB - regular + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1247488470 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1247488469} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -95.8, y: 0, z: -24.94} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1258713066} + - {fileID: 1586689953} + - {fileID: 1062558346} + - {fileID: 633911879} + m_Father: {fileID: 0} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1258713065 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1258713066} + - component: {fileID: 1258713069} + - component: {fileID: 1258713068} + - component: {fileID: 1258713067} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1258713066 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1258713065} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 24.13, y: 0, z: 0} + m_LocalScale: {x: 2, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1247488470} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1258713067 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1258713065} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 9d65ced14251eb743ba9702a6f3c2ce8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!64 &1258713068 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1258713065} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1258713069 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1258713065} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1326720837 Prefab: m_ObjectHideFlags: 0 @@ -922,6 +1562,100 @@ Prefab: m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: e641a36bceddbf24a89656e94dafb3e5, type: 2} m_IsPrefabParent: 0 +--- !u!1 &1546103597 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1546103598} + m_Layer: 0 + m_Name: Test - ReflectionProbe -OBB - Box offset + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1546103598 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1546103597} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -95.8, y: 0, z: -3.09} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 336015816} + - {fileID: 1175446864} + - {fileID: 1860830036} + - {fileID: 2050926016} + m_Father: {fileID: 0} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1586689952 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1586689953} + - component: {fileID: 1586689954} + m_Layer: 0 + m_Name: Reflection Probe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1586689953 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1586689952} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 25.23, y: -0.38, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1247488470} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!215 &1586689954 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1586689952} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 2 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 128 + m_UpdateFrequency: 0 + m_BoxSize: {x: 30, y: 10, z: 20} + m_BoxOffset: {x: 0, y: 0, z: 0} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 1 + m_HDR: 1 + m_BoxProjection: 1 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 8900000, guid: a6bda31e5e5c82a40b8e91ad0be087e8, + type: 3} --- !u!1001 &1610483060 Prefab: m_ObjectHideFlags: 0 @@ -1051,6 +1785,57 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1737318547 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 933267878} + m_Modifications: + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.x + value: -0.43999863 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.y + value: 0.89 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.z + value: 0.37000084 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + m_IsPrefabParent: 0 +--- !u!4 &1737318548 stripped +Transform: + m_PrefabParentObject: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, + type: 2} + m_PrefabInternal: {fileID: 1737318547} --- !u!1 &1828470159 GameObject: m_ObjectHideFlags: 0 @@ -1207,3 +1992,295 @@ Prefab: m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: e641a36bceddbf24a89656e94dafb3e5, type: 2} m_IsPrefabParent: 0 +--- !u!1 &1854618464 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1854618466} + - component: {fileID: 1854618465} + m_Layer: 0 + m_Name: Point light (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1854618465 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1854618464} + m_Enabled: 1 + serializedVersion: 7 + m_Type: 2 + m_Color: {r: 0.3784602, g: 0.7352941, b: 0.4842799, a: 1} + m_Intensity: 8 + m_Range: 6.01 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1854618466 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1854618464} + m_LocalRotation: {x: -0.0034919123, y: 0.0089843245, z: -0.007998787, w: 0.99992156} + m_LocalPosition: {x: 3.958, y: 1.411, z: 2.922} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: -0.39200002, y: 1.033, z: -0.92} +--- !u!4 &1860830036 stripped +Transform: + m_PrefabParentObject: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, + type: 2} + m_PrefabInternal: {fileID: 1889215922} +--- !u!1001 &1889215922 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1546103598} + m_Modifications: + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.x + value: 23.689999 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.y + value: 0.89 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalPosition.z + value: 0.37000084 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4000010760374938, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 1faa212e4ad88f04a81c5ed019001de5, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &2050926015 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2050926016} + - component: {fileID: 2050926020} + - component: {fileID: 2050926019} + - component: {fileID: 2050926018} + - component: {fileID: 2050926017} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2050926016 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2050926015} + m_LocalRotation: {x: -0, y: 0.9750333, z: -0.22205901, w: 0} + m_LocalPosition: {x: 22.63, y: 3.4, z: 7.6} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1546103598} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 25.66, y: 180, z: 0} +--- !u!81 &2050926017 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2050926015} + m_Enabled: 1 +--- !u!92 &2050926018 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2050926015} + m_Enabled: 1 +--- !u!124 &2050926019 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2050926015} + m_Enabled: 1 +--- !u!20 &2050926020 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2050926015} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 10 + field of view: 51.48 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!1 &2102536477 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2102536478} + - component: {fileID: 2102536482} + - component: {fileID: 2102536481} + - component: {fileID: 2102536480} + - component: {fileID: 2102536479} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2102536478 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2102536477} + m_LocalRotation: {x: 0, y: 0.9750333, z: -0.22205901, w: 0} + m_LocalPosition: {x: -0.85, y: 3.659, z: 8.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 933267878} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 25.66, y: 180, z: 0} +--- !u!81 &2102536479 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2102536477} + m_Enabled: 1 +--- !u!92 &2102536480 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2102536477} + m_Enabled: 1 +--- !u!124 &2102536481 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2102536477} + m_Enabled: 1 +--- !u!20 &2102536482 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2102536477} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 10 + field of view: 51.48 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 diff --git a/Assets/TestScenes/HDTest/EnlightenTest.unity b/Assets/TestScenes/HDTest/JulienTest.unity similarity index 92% rename from Assets/TestScenes/HDTest/EnlightenTest.unity rename to Assets/TestScenes/HDTest/JulienTest.unity index f515c68fa4b..84dcc21a372 100644 --- a/Assets/TestScenes/HDTest/EnlightenTest.unity +++ b/Assets/TestScenes/HDTest/JulienTest.unity @@ -285,6 +285,7 @@ Transform: - {fileID: 1330031309} - {fileID: 124873433} - {fileID: 399229767} + - {fileID: 1438296044} m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -810,6 +811,89 @@ MeshFilter: m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1330031308} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1438296043 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1438296044} + - component: {fileID: 1438296047} + - component: {fileID: 1438296046} + - component: {fileID: 1438296045} + m_Layer: 0 + m_Name: Ground Layered + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1438296044 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1438296043} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -47.2, y: -2.4372234, z: -4.174568} + m_LocalScale: {x: 4, y: 4, z: 4} + m_Children: [] + m_Father: {fileID: 1027688891} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1438296045 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1438296043} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 6e7fa39a7d1b15c4184c9f51d86eba22, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!64 &1438296046 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1438296043} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1438296047 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1438296043} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1457550750 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/TestScenes/HDTest/EnlightenTest.unity.meta b/Assets/TestScenes/HDTest/JulienTest.unity.meta similarity index 100% rename from Assets/TestScenes/HDTest/EnlightenTest.unity.meta rename to Assets/TestScenes/HDTest/JulienTest.unity.meta diff --git a/Assets/TestScenes/HDTest/Leaf/GroundLeaf/Materials/GroundLeaf_Albedo.mat b/Assets/TestScenes/HDTest/Leaf/GroundLeaf/Materials/GroundLeaf_Albedo.mat index 04883ce144b..2a7cf9b903c 100644 --- a/Assets/TestScenes/HDTest/Leaf/GroundLeaf/Materials/GroundLeaf_Albedo.mat +++ b/Assets/TestScenes/HDTest/Leaf/GroundLeaf/Materials/GroundLeaf_Albedo.mat @@ -7,7 +7,7 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: GroundLeaf_Albedo - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF _DOUBLESIDED_LIGHTING_FLIP _EMISSION _MASKMAP _METALLICGLOSSMAP _NORMALMAP _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 @@ -179,6 +179,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Blue_Alpha.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Blue_Alpha.mat index 8f7c199cd32..c46d0f9597d 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Blue_Alpha.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Blue_Alpha.mat @@ -7,9 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: Blue_Alpha - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DOUBLESIDED_LIGHTING_MIRROR _EMISSION - _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: 3000 stringTagMap: @@ -140,7 +140,7 @@ Material: m_Floats: - first: name: _AlphaCutoff - second: 0.5 + second: 0.187 - first: name: _AlphaCutoffEnable second: 0 @@ -173,7 +173,7 @@ Material: second: 1 - first: name: _DoubleSidedMode - second: 3 + second: 1 - first: name: _DstBlend second: 10 @@ -207,6 +207,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/CubeTransparent.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/CubeTransparent.mat new file mode 100644 index 00000000000..3314ca69c0b --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/CubeTransparent.mat @@ -0,0 +1,240 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: CubeTransparent + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 10 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mettalic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.5 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 5 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 0 + m_Colors: + - first: + name: _BaseColor + second: {r: 0.9117647, g: 0.1273789, b: 0.1273789, a: 0.566} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/CubeTransparent.mat.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/CubeTransparent.mat.meta new file mode 100644 index 00000000000..55e0ca684cf --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/CubeTransparent.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53db393fa1a97b244b8f7e9d8f0bbdba +timeCreated: 1475760437 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Gray.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Gray.mat index 6daafd087ce..42b2d0ea3dd 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Gray.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Gray.mat @@ -7,8 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: Gray - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _EMISSION _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: -1 stringTagMap: {} @@ -157,6 +158,12 @@ Material: - first: name: _DetailNormalMapScale second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 - first: name: _DoubleSided second: 1 @@ -199,6 +206,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Green.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Green.mat index 31c64b0a46f..811bcb7dd67 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Green.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Green.mat @@ -7,8 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: Green - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _EMISSION _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A m_LightmapFlags: 1 m_CustomRenderQueue: -1 stringTagMap: {} @@ -33,6 +34,12 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - first: + name: _ColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - first: name: _DetailAlbedoMap second: @@ -157,6 +164,12 @@ Material: - first: name: _DetailNormalMapScale second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 - first: name: _DoubleSided second: 1 @@ -199,6 +212,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 @@ -222,7 +238,7 @@ Material: second: 0.5 - first: name: _SmoothnessTextureChannel - second: 0 + second: 1 - first: name: _SpecularHighlights second: 1 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground.meta new file mode 100644 index 00000000000..5dca682c7eb --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2296a518234988544bd7e781578b5555 +folderAsset: yes +timeCreated: 1476192536 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Ground_01_2x2.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Ground_01_2x2.mat new file mode 100644 index 00000000000..f95c12583e9 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Ground_01_2x2.mat @@ -0,0 +1,326 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Ground_01_2x2 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _MASKMAP _NORMALMAP _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _AO + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 2800000, guid: ded78b6c0a9afd94a8d528c2ec647f8f, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailBlend + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DispTex + second: + m_Texture: {fileID: 2800000, guid: 9b4da9d589607fd41ad90c8cf780d4aa, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MSK + second: + m_Texture: {fileID: 2800000, guid: eddc784b66d317641bd2c3b078a694b1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: ded78b6c0a9afd94a8d528c2ec647f8f, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 2800000, guid: eddc784b66d317641bd2c3b078a694b1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 2800000, guid: d896c388b98bb614ebe6bb48e0f56dcf, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMapDetail + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMapDetail2 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _Smoothness + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _Displacement + second: 0.056 + - first: + name: _DisplacementCenter + second: 0.696 + - first: + name: _DisplacementFar + second: 12 + - first: + name: _DisplacementNear + second: 0 + - first: + name: _DisplacementfalloffFar + second: 2 + - first: + name: _DisplacementfalloffNear + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalDetailMul + second: 1 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 1 + - first: + name: _SmoothnessMul + second: 0.288 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _Tess + second: 64 + - first: + name: _TessFar + second: 2 + - first: + name: _TessNear + second: 1 + - first: + name: _Tiling + second: 1 + - first: + name: _TilingDetail + second: 1 + - first: + name: _TilingDetail2 + second: 4 + - first: + name: _UVSec + second: 0 + - first: + name: _UseDisplacementfalloff + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _SpecColor + second: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Ground_01_2x2.mat.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Ground_01_2x2.mat.meta new file mode 100644 index 00000000000..b6740f228a3 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Ground_01_2x2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01fa3be727161d249a81ad7065c15459 +timeCreated: 1475674849 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Needle_Moss_1x1.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Needle_Moss_1x1.mat new file mode 100644 index 00000000000..27421039382 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Needle_Moss_1x1.mat @@ -0,0 +1,287 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Needle_Moss_1x1 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _MASKMAP _NORMALMAP _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 2800000, guid: 9099cfe546c2a2c4bb7cc1f114c1985d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DispTex + second: + m_Texture: {fileID: 2800000, guid: abe37e776c6f4164ea0e794a3c201705, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MSK + second: + m_Texture: {fileID: 2800000, guid: 5b9c7f6055407ce41989dbb50fb6df10, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 9099cfe546c2a2c4bb7cc1f114c1985d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 2800000, guid: 5b9c7f6055407ce41989dbb50fb6df10, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 2800000, guid: 9f0707fef3f15394ab3aa08fd9b5def3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMapDetail + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _Displacement + second: 0.016 + - first: + name: _DisplacementCenter + second: 0.5 + - first: + name: _DisplacementfalloffFar + second: 9.1 + - first: + name: _DisplacementfalloffNear + second: 4.7 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalDetailMul + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 1 + - first: + name: _SmoothnessMul + second: 1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _Tess + second: 64 + - first: + name: _TessFar + second: 2 + - first: + name: _TessNear + second: 1 + - first: + name: _Tiling + second: 2 + - first: + name: _TilingDetail + second: 4 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Needle_Moss_1x1.mat.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Needle_Moss_1x1.mat.meta new file mode 100644 index 00000000000..24ce6cc0e68 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Needle_Moss_1x1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3acf8f156d29e494e8cd196462d1a17c +timeCreated: 1475677400 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Sand_02_2x2_02.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Sand_02_2x2_02.mat new file mode 100644 index 00000000000..8f220194014 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Sand_02_2x2_02.mat @@ -0,0 +1,287 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Sand_02_2x2_02 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _MASKMAP _NORMALMAP _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 2800000, guid: 68b970ec01d028a40a3e68e6e684e8e3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DispTex + second: + m_Texture: {fileID: 2800000, guid: 237bd6ccd5c8da74eb3b1230ab7504bb, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MSK + second: + m_Texture: {fileID: 2800000, guid: 2a19212b7194d8e45bf82f7b93422472, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 5f06911e08c17364899c2103d373fb84, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 2800000, guid: d24c0ec78314b3c47bb17c0f918bff7d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 2800000, guid: d6b5108542e0e7547b9afe26c79f9460, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMapDetail + second: + m_Texture: {fileID: 2800000, guid: cd9a47c83c764a3409d22b74deb99200, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _Displacement + second: 0.025 + - first: + name: _DisplacementCenter + second: 0.49 + - first: + name: _DisplacementfalloffFar + second: 150 + - first: + name: _DisplacementfalloffNear + second: 30 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalDetailMul + second: 0.71 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 1 + - first: + name: _SmoothnessMul + second: 0.344 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _Tess + second: 32 + - first: + name: _TessFar + second: 2 + - first: + name: _TessNear + second: 1 + - first: + name: _Tiling + second: 1 + - first: + name: _TilingDetail + second: 40 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Sand_02_2x2_02.mat.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Sand_02_2x2_02.mat.meta new file mode 100644 index 00000000000..8089a5c114b --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Sand_02_2x2_02.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62b3c923bc540b94a803550e9927936a +timeCreated: 1475683138 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures.meta new file mode 100644 index 00000000000..91337e8147a --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9459f176724510f469470c8b658c7029 +folderAsset: yes +timeCreated: 1476274963 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_BC.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_BC.tga new file mode 100644 index 00000000000..a2184f99d11 Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_BC.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_BC.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_BC.tga.meta new file mode 100644 index 00000000000..f17eb50433b --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_BC.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: ded78b6c0a9afd94a8d528c2ec647f8f +timeCreated: 1475674763 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_H.exr b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_H.exr new file mode 100644 index 00000000000..af65715a52e Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_H.exr differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_H.exr.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_H.exr.meta new file mode 100644 index 00000000000..6e0b5eaebbb --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_H.exr.meta @@ -0,0 +1,84 @@ +fileFormatVersion: 2 +guid: 9b4da9d589607fd41ad90c8cf780d4aa +timeCreated: 1475674753 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: 26 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + - buildTarget: PS4 + maxTextureSize: 2048 + textureFormat: 26 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_MSK.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_MSK.tga new file mode 100644 index 00000000000..4793fb58bc1 Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_MSK.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_MSK.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_MSK.tga.meta new file mode 100644 index 00000000000..b24ebe7eebe --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_MSK.tga.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: eddc784b66d317641bd2c3b078a694b1 +timeCreated: 1475675441 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_N.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_N.tga new file mode 100644 index 00000000000..0799e85d5e9 Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_N.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_N.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_N.tga.meta new file mode 100644 index 00000000000..2900aa120db --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Ground_01_2x2_N.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: d896c388b98bb614ebe6bb48e0f56dcf +timeCreated: 1475674758 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_BC.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_BC.tga new file mode 100644 index 00000000000..4dfb73eb957 Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_BC.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_BC.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_BC.tga.meta new file mode 100644 index 00000000000..987779185be --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_BC.tga.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 9099cfe546c2a2c4bb7cc1f114c1985d +timeCreated: 1475681782 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 4096 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 4096 + textureFormat: 25 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_H.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_H.tga new file mode 100644 index 00000000000..2564a636fc3 Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_H.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_H.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_H.tga.meta new file mode 100644 index 00000000000..76ff7d55edc --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_H.tga.meta @@ -0,0 +1,84 @@ +fileFormatVersion: 2 +guid: abe37e776c6f4164ea0e794a3c201705 +timeCreated: 1475677386 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 4096 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: 26 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + - buildTarget: PS4 + maxTextureSize: 2048 + textureFormat: 26 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_MSK.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_MSK.tga new file mode 100644 index 00000000000..c87627a163f Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_MSK.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_MSK.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_MSK.tga.meta new file mode 100644 index 00000000000..6f6989bc93f --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_MSK.tga.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 5b9c7f6055407ce41989dbb50fb6df10 +timeCreated: 1475677374 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 4096 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 4096 + textureFormat: 25 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_N.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_N.tga new file mode 100644 index 00000000000..f23ab03a14d Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_N.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_N.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_N.tga.meta new file mode 100644 index 00000000000..bd99a1d40a1 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Needle_Moss_1x1_N.tga.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 9f0707fef3f15394ab3aa08fd9b5def3 +timeCreated: 1475677385 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 4096 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 4096 + textureFormat: 25 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_BC.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_BC.tga new file mode 100644 index 00000000000..25efb9fa6fa Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_BC.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_BC.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_BC.tga.meta new file mode 100644 index 00000000000..e4287d8110b --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_BC.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 68b970ec01d028a40a3e68e6e684e8e3 +timeCreated: 1475684920 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_H.exr b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_H.exr new file mode 100644 index 00000000000..cb63c54aa27 Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_H.exr differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_H.exr.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_H.exr.meta new file mode 100644 index 00000000000..65aa3eded99 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_H.exr.meta @@ -0,0 +1,84 @@ +fileFormatVersion: 2 +guid: 52aca467536876944a1cc1133173a8f1 +timeCreated: 1475684915 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: 26 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + - buildTarget: PS4 + maxTextureSize: 2048 + textureFormat: 26 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_MSK.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_MSK.tga new file mode 100644 index 00000000000..a2b05947bc3 Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_MSK.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_MSK.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_MSK.tga.meta new file mode 100644 index 00000000000..62d05b0fe3e --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_MSK.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: d24c0ec78314b3c47bb17c0f918bff7d +timeCreated: 1475684925 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_N.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_N.tga new file mode 100644 index 00000000000..48653bbb35d Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_N.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_N.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_N.tga.meta new file mode 100644 index 00000000000..8b7425432f1 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Ground/Textures/Sand_02_2x2_02_N.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: d6b5108542e0e7547b9afe26c79f9460 +timeCreated: 1475684930 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/LayerMask.tga b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/LayerMask.tga new file mode 100644 index 00000000000..ea8549da50f Binary files /dev/null and b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/LayerMask.tga differ diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/LayerMask.tga.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/LayerMask.tga.meta new file mode 100644 index 00000000000..a61868540f3 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/LayerMask.tga.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 6b43fa9736beb354dba359b5d2ec3699 +timeCreated: 1476374214 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: tvOS + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Windows Store Apps + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Layered.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Layered.mat new file mode 100644 index 00000000000..be422060c7b --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Layered.mat @@ -0,0 +1,474 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Layered + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _LAYEREDLIT_4_LAYER _LAYEREDLIT_4_LAYERS _LAYERMASKMAP _MASKMAP _NORMALMAP + _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BaseColorMap0 + second: + m_Texture: {fileID: 2800000, guid: ded78b6c0a9afd94a8d528c2ec647f8f, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BaseColorMap1 + second: + m_Texture: {fileID: 2800000, guid: 9099cfe546c2a2c4bb7cc1f114c1985d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BaseColorMap2 + second: + m_Texture: {fileID: 2800000, guid: 68b970ec01d028a40a3e68e6e684e8e3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BaseColorMap3 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap0 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap1 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap2 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap3 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap0 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap1 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap2 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap3 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _LayerMaskMap + second: + m_Texture: {fileID: 2800000, guid: 6b43fa9736beb354dba359b5d2ec3699, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap0 + second: + m_Texture: {fileID: 2800000, guid: eddc784b66d317641bd2c3b078a694b1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap1 + second: + m_Texture: {fileID: 2800000, guid: 5b9c7f6055407ce41989dbb50fb6df10, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap2 + second: + m_Texture: {fileID: 2800000, guid: d24c0ec78314b3c47bb17c0f918bff7d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap3 + second: + m_Texture: {fileID: 2800000, guid: eddc784b66d317641bd2c3b078a694b1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap0 + second: + m_Texture: {fileID: 2800000, guid: d896c388b98bb614ebe6bb48e0f56dcf, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap1 + second: + m_Texture: {fileID: 2800000, guid: 9f0707fef3f15394ab3aa08fd9b5def3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap2 + second: + m_Texture: {fileID: 2800000, guid: d6b5108542e0e7547b9afe26c79f9460, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap3 + second: + m_Texture: {fileID: 2800000, guid: d896c388b98bb614ebe6bb48e0f56dcf, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap0 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap1 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap2 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap3 + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.122 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _EmissiveIntensity0 + second: 0 + - first: + name: _EmissiveIntensity1 + second: 0 + - first: + name: _EmissiveIntensity2 + second: 0 + - first: + name: _EmissiveIntensity3 + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightBias0 + second: 0 + - first: + name: _HeightBias1 + second: 0 + - first: + name: _HeightBias2 + second: 0 + - first: + name: _HeightBias3 + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _HeightScale0 + second: 1 + - first: + name: _HeightScale1 + second: 1 + - first: + name: _HeightScale2 + second: 1 + - first: + name: _HeightScale3 + second: 1 + - first: + name: _LayerCount + second: 4 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metalic0 + second: 0 + - first: + name: _Metalic1 + second: 0 + - first: + name: _Metalic2 + second: 0 + - first: + name: _Metalic3 + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.5 + - first: + name: _Smoothness0 + second: 1 + - first: + name: _Smoothness1 + second: 1 + - first: + name: _Smoothness2 + second: 1 + - first: + name: _Smoothness3 + second: 0.486 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _BaseColor0 + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _BaseColor1 + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _BaseColor2 + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _BaseColor3 + second: {r: 1, g: 0, b: 0, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor0 + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor1 + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor2 + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor3 + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Layered.mat.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Layered.mat.meta new file mode 100644 index 00000000000..2b79e0b9d82 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Layered.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e7fa39a7d1b15c4184c9f51d86eba22 +timeCreated: 1476275536 +licenseType: Pro +NativeFormatImporter: + userData: '{"GUIDArray":["01fa3be727161d249a81ad7065c15459","3acf8f156d29e494e8cd196462d1a17c","62b3c923bc540b94a803550e9927936a","c569253e641dc934db7c3595b31890da"]}' + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Red.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Red.mat index 8e52137b50c..56ebb74bb1e 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Red.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Red.mat @@ -7,8 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: Red - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _EMISSION _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _MASKMAP _NORMALMAP _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: -1 stringTagMap: {} @@ -84,7 +85,7 @@ Material: - first: name: _MaskMap second: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: eddc784b66d317641bd2c3b078a694b1, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - first: @@ -102,7 +103,7 @@ Material: - first: name: _NormalMap second: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: d896c388b98bb614ebe6bb48e0f56dcf, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - first: @@ -157,6 +158,12 @@ Material: - first: name: _DetailNormalMapScale second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 - first: name: _DoubleSided second: 1 @@ -199,6 +206,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 @@ -219,7 +229,7 @@ Material: second: 0.02 - first: name: _Smoothness - second: 0.5 + second: 0.486 - first: name: _SmoothnessTextureChannel second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Terrain.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Terrain.mat index b19385bef89..e2a82df36f9 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Terrain.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Terrain.mat @@ -7,8 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: Terrain - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _EMISSION _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: -1 stringTagMap: {} @@ -157,6 +158,12 @@ Material: - first: name: _DetailNormalMapScale second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 - first: name: _DoubleSidedMode second: 0 @@ -190,6 +197,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-alpha.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-alpha.mat index b86fe1f43df..27e0faabfd6 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-alpha.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-alpha.mat @@ -7,8 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: test-alpha - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _ALPHATEST_ON _EMISSION _NORMALMAP _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHATEST_ON _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF _EMISSION + _NORMALMAP _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: 2450 stringTagMap: @@ -242,6 +243,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-transparent.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-transparent.mat index 74eb6663530..db847354c7f 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-transparent.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-transparent.mat @@ -7,8 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: test-transparent - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _EMISSION _NORMALMAP _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: 3000 stringTagMap: @@ -187,7 +188,7 @@ Material: second: 0 - first: name: _CullMode - second: 0 + second: 2 - first: name: _Cutoff second: 0.5 @@ -242,6 +243,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-twosidedLighting.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-twosidedLighting.mat index 89feea0f33e..830928f11f5 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-twosidedLighting.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test-twosidedLighting.mat @@ -7,9 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: test-twosidedLighting - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DOUBLESIDED_LIGHTING_FLIP _EMISSION _NORMALMAP - _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _DOUBLESIDED_LIGHTING_FLIP _EMISSION _NORMALMAP _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: -1 stringTagMap: {} @@ -242,6 +242,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test.mat index d542282eeab..6c2551d4aee 100644 --- a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test.mat +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/test.mat @@ -7,8 +7,9 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: test - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _EMISSION _NORMALMAP _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: -1 stringTagMap: {} @@ -241,6 +242,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0 diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/unlitTest.mat b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/unlitTest.mat new file mode 100644 index 00000000000..13f21ac8624 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/unlitTest.mat @@ -0,0 +1,170 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: unlitTest + m_Shader: {fileID: 4800000, guid: c4edd00ff2db5b24391a4fcb1762e459, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/unlitTest.mat.meta b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/unlitTest.mat.meta new file mode 100644 index 00000000000..cce9518c490 --- /dev/null +++ b/Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/unlitTest.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1c297147b557ff4bb9d5e2059b70d67 +timeCreated: 1476887873 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Rock/rcgRock012/Materials/rcgRock012Material.mat b/Assets/TestScenes/HDTest/Rock/rcgRock012/Materials/rcgRock012Material.mat index 395eb073b53..0fbcc195dad 100644 --- a/Assets/TestScenes/HDTest/Rock/rcgRock012/Materials/rcgRock012Material.mat +++ b/Assets/TestScenes/HDTest/Rock/rcgRock012/Materials/rcgRock012Material.mat @@ -7,9 +7,10 @@ Material: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_Name: rcgRock012Material - m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} - m_ShaderKeywords: _DOUBLESIDEDLIGTHING_OFF _DOUBLESIDED_OFF _EMISSION _METALLICGLOSSMAP - _NORMALMAP _NORMALMAP_TANGENT_SPACE + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _DOUBLESIDEDLIGTHING_OFF _DOUBLESIDED_OFF _EMISSION _METALLICGLOSSMAP _NORMALMAP + _NORMALMAP_TANGENT_SPACE m_LightmapFlags: 1 m_CustomRenderQueue: -1 stringTagMap: {} @@ -161,6 +162,12 @@ Material: - first: name: _DetailNormalMapScale second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 - first: name: _DoubleSided second: 0 @@ -206,6 +213,9 @@ Material: - first: name: _MaterialId second: 0 + - first: + name: _Metalic + second: 0 - first: name: _Metallic second: 0.583 diff --git a/Assets/TestScenes/HDTest/SphereStandard.meta b/Assets/TestScenes/HDTest/SphereStandard.meta new file mode 100644 index 00000000000..10df4759e54 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b80c867ec9fb6de4b98ef86862d547c5 +folderAsset: yes +timeCreated: 1476868376 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_10.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_10.mat new file mode 100644 index 00000000000..5bf85c0339f --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_10.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.7 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.7 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_10.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_10.mat.meta new file mode 100644 index 00000000000..cd5bc1a3b51 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_10.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90d7cc703d2e7f54eb4fff6c4268b6ac +timeCreated: 1448039507 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_11.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_11.mat new file mode 100644 index 00000000000..40ec0e9290b --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_11.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_11 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.6 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.6 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_11.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_11.mat.meta new file mode 100644 index 00000000000..14feec43963 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_11.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97a0b0a8f86690e4dbd25517a4c124e1 +timeCreated: 1448039507 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_12.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_12.mat new file mode 100644 index 00000000000..e1364bdc6d5 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_12.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_12 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.4 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.4 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_12.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_12.mat.meta new file mode 100644 index 00000000000..a0b2013aa87 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_12.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a92557fb37c78dc42b30a3e696b83394 +timeCreated: 1448039507 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_13.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_13.mat new file mode 100644 index 00000000000..a8c3dbe0c0f --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_13.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_13 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.8 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.8 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_13.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_13.mat.meta new file mode 100644 index 00000000000..c0638eb7b60 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_13.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66d39d54753be4c408bfd6a05d011dce +timeCreated: 1448039506 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_14.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_14.mat new file mode 100644 index 00000000000..40c7d6c8c33 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_14.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_14 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.2 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.2 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_14.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_14.mat.meta new file mode 100644 index 00000000000..191302bb88a --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_14.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 84ca741b197c7584787f0ab1c43c0ce8 +timeCreated: 1448039530 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_15.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_15.mat new file mode 100644 index 00000000000..5bb1f06be1f --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_15.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_15 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.3 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.3 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_15.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_15.mat.meta new file mode 100644 index 00000000000..f648ae34487 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_15.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af6c751df6220a44cbcbbdcf7ade9193 +timeCreated: 1448039508 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_16.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_16.mat new file mode 100644 index 00000000000..b607f21c858 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_16.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_16 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.9 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.9 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_16.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_16.mat.meta new file mode 100644 index 00000000000..29fed860406 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_16.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cb79a0858b07c1047ac08b413a553ed8 +timeCreated: 1448039483 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_17.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_17.mat new file mode 100644 index 00000000000..c926ca5545d --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_17.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_17 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.1 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_17.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_17.mat.meta new file mode 100644 index 00000000000..9f6fe7239db --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_17.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e4fb22a39197844986d2a1fa35e7218 +timeCreated: 1448039530 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_18.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_18.mat new file mode 100644 index 00000000000..bb00f35ec5f --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_18.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_18 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.5 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_18.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_18.mat.meta new file mode 100644 index 00000000000..f3f11915c57 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_18.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c47e47ee203d47548b68c69c6b36bb9e +timeCreated: 1448039507 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_19.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_19.mat new file mode 100644 index 00000000000..caaef298f9b --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_19.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_19 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_19.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_19.mat.meta new file mode 100644 index 00000000000..bc75511a5aa --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth0_19.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3152548f14008844eab1605433b95636 +timeCreated: 1448039538 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth1_2.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth1_2.mat new file mode 100644 index 00000000000..4e3bfd34373 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth1_2.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth1_2 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 1 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth1_2.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth1_2.mat.meta new file mode 100644 index 00000000000..daf1132d02b --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smooth1_2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f72f69e2b63a38d47bff3d025bca4f6c +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_10.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_10.mat new file mode 100644 index 00000000000..cd58874cdfb --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_10.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.8 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.8 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_10.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_10.mat.meta new file mode 100644 index 00000000000..c28f78aed80 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_10.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b129de7d48a2f6e4182bdade9637e020 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_11.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_11.mat new file mode 100644 index 00000000000..1914c6a5a22 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_11.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_11 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_11.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_11.mat.meta new file mode 100644 index 00000000000..4f75de21c17 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_11.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ad58ded85ef3da40a117f42e053571a +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_12.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_12.mat new file mode 100644 index 00000000000..bf0cf2a493a --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_12.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_12 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.4 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.4 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_12.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_12.mat.meta new file mode 100644 index 00000000000..4927f82ae6d --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_12.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c78342dca4939d24982561a0635f4b8e +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_13.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_13.mat new file mode 100644 index 00000000000..43fc8b88042 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_13.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_13 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.5 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_13.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_13.mat.meta new file mode 100644 index 00000000000..f3c70622513 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_13.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e07f3c8b8cfa82a4eadef7a3ef527d9d +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_14.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_14.mat new file mode 100644 index 00000000000..8aa23f9491b --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_14.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_14 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.7 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.7 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_14.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_14.mat.meta new file mode 100644 index 00000000000..5f32bff4c52 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_14.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 52b5512542c743e4b86078ff73c47464 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_15.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_15.mat new file mode 100644 index 00000000000..d3ec94b2036 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_15.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_15 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.3 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.3 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_15.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_15.mat.meta new file mode 100644 index 00000000000..467dbea8397 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_15.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cb033f1f15b95324693fb49089844e74 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_16.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_16.mat new file mode 100644 index 00000000000..3604ce910f6 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_16.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_16 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.6 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.6 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_16.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_16.mat.meta new file mode 100644 index 00000000000..9492943bfa3 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_16.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 33251b8be4eebc74fb7bcf1153fe7bda +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_17.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_17.mat new file mode 100644 index 00000000000..8d7a82bc145 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_17.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_17 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.2 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.2 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_17.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_17.mat.meta new file mode 100644 index 00000000000..a7487033c96 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_17.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a80e805fa7e6a1c4c8c333ac51243ec0 +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_18.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_18.mat new file mode 100644 index 00000000000..caaa514d4e1 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_18.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_18 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.1 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_18.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_18.mat.meta new file mode 100644 index 00000000000..69f47e5cf14 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_18.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5a0154f3b4b43af4e9f6456007f81a67 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_19.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_19.mat new file mode 100644 index 00000000000..03ab91055dd --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_19.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_19 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.9 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.9 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_19.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_19.mat.meta new file mode 100644 index 00000000000..c87d45509b0 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric0_19.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bca841a846c5c3b47b65cc00ec323eff +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric1_1.mat b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric1_1.mat new file mode 100644 index 00000000000..344c8b6ad54 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric1_1.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric1_1 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 1 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric1_1.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric1_1.mat.meta new file mode 100644 index 00000000000..8ff48738760 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/Mat_smoothdielectric1_1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c47a26239081afc43a2e20ed3e999410 +timeCreated: 1448039441 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/SphereGroup 1.prefab b/Assets/TestScenes/HDTest/SphereStandard/SphereGroup 1.prefab new file mode 100644 index 00000000000..3f2a66e8bd0 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/SphereGroup 1.prefab @@ -0,0 +1,2454 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000012470308022} + m_IsPrefabParent: 1 +--- !u!1 &1000010007989558 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013674302558} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010071295928 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013302451620} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010087587216 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012813361656} + - component: {fileID: 33000013191588704} + - component: {fileID: 135000013332565106} + - component: {fileID: 23000012055495256} + m_Layer: 0 + m_Name: Sphere (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010289061002 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013647363470} + - component: {fileID: 33000012691087676} + - component: {fileID: 135000012343630262} + - component: {fileID: 23000011727209500} + m_Layer: 0 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010291928302 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012464417950} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010434065936 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010178680272} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010545922352 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010971999112} + - component: {fileID: 33000012182004980} + - component: {fileID: 135000010485048620} + - component: {fileID: 23000012140681540} + m_Layer: 0 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010629167112 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010794846548} + - component: {fileID: 33000012014437306} + - component: {fileID: 135000014046954128} + - component: {fileID: 23000012881930702} + m_Layer: 0 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010677277646 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010574205308} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010754605226 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012631573820} + - component: {fileID: 33000012496129964} + - component: {fileID: 135000010322373284} + - component: {fileID: 23000010922128364} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011140611266 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011801280982} + - component: {fileID: 33000012304415750} + - component: {fileID: 135000011788593278} + - component: {fileID: 23000013442133786} + m_Layer: 0 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011280293128 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013457853772} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011419217470 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012908174082} + - component: {fileID: 33000012165602584} + - component: {fileID: 135000012254264818} + - component: {fileID: 23000013069349862} + m_Layer: 0 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011439797364 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012634066572} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011498593814 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013798480240} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011603578742 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010113146392} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011677831218 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011206241358} + - component: {fileID: 33000010361159574} + - component: {fileID: 135000013244871946} + - component: {fileID: 23000012856979566} + m_Layer: 0 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011697605022 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012549693380} + - component: {fileID: 33000012341634524} + - component: {fileID: 135000012210333046} + - component: {fileID: 23000011036715798} + m_Layer: 0 + m_Name: Sphere (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011753996734 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013009955538} + - component: {fileID: 33000011373522048} + - component: {fileID: 135000012092621100} + - component: {fileID: 23000010311915246} + m_Layer: 0 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011787985402 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011030235908} + - component: {fileID: 33000011331132656} + - component: {fileID: 135000012989055838} + - component: {fileID: 23000013032495660} + m_Layer: 0 + m_Name: Sphere (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011836353396 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014170456964} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011887723186 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014187209622} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011973232756 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010163547154} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012112892728 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011685292612} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012344280542 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012542715892} + - component: {fileID: 33000011112248652} + - component: {fileID: 135000012388857190} + - component: {fileID: 23000013796798692} + m_Layer: 0 + m_Name: Sphere (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012378950814 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012054217298} + - component: {fileID: 33000010588528966} + - component: {fileID: 135000011902358174} + - component: {fileID: 23000010636634114} + m_Layer: 0 + m_Name: Sphere (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012470308022 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010760374938} + m_Layer: 0 + m_Name: SphereGroup 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012470888132 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010363248526} + - component: {fileID: 33000011331681606} + - component: {fileID: 135000013122701806} + - component: {fileID: 23000013523107472} + m_Layer: 0 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012481083098 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011403334846} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012743780564 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012871338094} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012774224490 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010433353240} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012798601726 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011488636830} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012848132142 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011224780184} + - component: {fileID: 33000011098133760} + - component: {fileID: 135000010906751980} + - component: {fileID: 23000013421624772} + m_Layer: 0 + m_Name: Sphere (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012862413288 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011920970476} + - component: {fileID: 33000014221939320} + - component: {fileID: 135000012222279098} + - component: {fileID: 23000013898528828} + m_Layer: 0 + m_Name: Sphere (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012877361228 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010224350464} + - component: {fileID: 33000010231940884} + - component: {fileID: 135000014092929856} + - component: {fileID: 23000012532277778} + m_Layer: 0 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013025147428 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010199868884} + - component: {fileID: 33000011615211680} + - component: {fileID: 135000013751575902} + - component: {fileID: 23000013751080654} + m_Layer: 0 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013055705134 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011256059824} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013240302738 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013336532474} + - component: {fileID: 33000014130596838} + - component: {fileID: 135000010665472466} + - component: {fileID: 23000012703457538} + m_Layer: 0 + m_Name: Sphere (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013308341636 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013466806034} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013343956054 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011101297958} + - component: {fileID: 33000011519123438} + - component: {fileID: 135000013266396486} + - component: {fileID: 23000014070242114} + m_Layer: 0 + m_Name: Sphere (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013554399048 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011818357032} + - component: {fileID: 33000011229769100} + - component: {fileID: 135000010500615814} + - component: {fileID: 23000010816873258} + m_Layer: 0 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013662182516 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013843224976} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014164875786 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011497627172} + - component: {fileID: 33000013419629684} + - component: {fileID: 135000012111690070} + - component: {fileID: 23000012110281398} + m_Layer: 0 + m_Name: Sphere (21) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014269651680 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014079264936} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010113146392 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011603578742} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011101297958} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010163547154 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011973232756} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012549693380} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010178680272 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010434065936} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012542715892} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010199868884 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013025147428} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.46, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013302451620} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010224350464 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012877361228} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.54, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013457853772} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010363248526 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470888132} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.04, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000014079264936} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010433353240 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012774224490} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010971999112} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010574205308 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010677277646} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000013336532474} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010760374938 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470308022} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012631573820} + - {fileID: 4000013647363470} + - {fileID: 4000010224350464} + - {fileID: 4000010363248526} + - {fileID: 4000013009955538} + - {fileID: 4000011801280982} + - {fileID: 4000010794846548} + - {fileID: 4000010971999112} + - {fileID: 4000011206241358} + - {fileID: 4000012908174082} + - {fileID: 4000010199868884} + - {fileID: 4000011818357032} + - {fileID: 4000012813361656} + - {fileID: 4000011920970476} + - {fileID: 4000011224780184} + - {fileID: 4000011101297958} + - {fileID: 4000012054217298} + - {fileID: 4000013336532474} + - {fileID: 4000011030235908} + - {fileID: 4000012542715892} + - {fileID: 4000012549693380} + - {fileID: 4000011497627172} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010794846548 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010629167112} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.46, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013674302558} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010971999112 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010545922352} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.96, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010433353240} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011030235908 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011787985402} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.04, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000011256059824} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011101297958 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013343956054} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.46, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010113146392} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011206241358 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011677831218} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.46, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013843224976} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011224780184 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012848132142} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.96, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010760374938} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011256059824 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013055705134} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011030235908} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011403334846 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012481083098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000013009955538} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011488636830 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012798601726} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012908174082} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011497627172 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014164875786} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7.54, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000014170456964} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011685292612 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012112892728} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012813361656} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011801280982 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011140611266} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.03999996, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012871338094} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011818357032 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013554399048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.46, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000014187209622} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011920970476 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862413288} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.46, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013466806034} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012054217298 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012378950814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.03999996, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013798480240} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012464417950 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010291928302} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000013647363470} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012542715892 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012344280542} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.54, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010178680272} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012549693380 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011697605022} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -6.04, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010163547154} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012631573820 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010754605226} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7.54, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012634066572} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012634066572 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011439797364} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012631573820} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012813361656 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010087587216} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.96, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000011685292612} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012871338094 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012743780564} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011801280982} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012908174082 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011419217470} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.96, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000011488636830} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013009955538 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011753996734} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.54, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000011403334846} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013302451620 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010071295928} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010199868884} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013336532474 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013240302738} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.54, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010574205308} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013457853772 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011280293128} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010224350464} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013466806034 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013308341636} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011920970476} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013647363470 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010289061002} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -6.04, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012464417950} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013674302558 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010007989558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010794846548} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013798480240 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011498593814} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012054217298} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013843224976 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013662182516} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011206241358} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014079264936 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014269651680} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010363248526} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014170456964 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011836353396} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011497627172} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014187209622 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011887723186} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011818357032} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23000010311915246 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011753996734} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 4e560d4bc2c20cc4fba9fb5b1f1be541, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000010636634114 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012378950814} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 163701ce9c397d542bbbfdea8cdf7296, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000010816873258 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013554399048} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 1cf5eed996385fa4fa3b8fcb5652286e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000010922128364 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010754605226} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 61f42391dbd7154448c0045c536e1d65, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000011036715798 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011697605022} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: fd05883380b8e33459781ce77287d924, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000011727209500 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010289061002} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: d843b398f9818ea44b1025499d6eb030, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012055495256 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010087587216} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: cc6c2aad115095e4c943d30cb25b33b2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012110281398 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014164875786} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0f837bd8819543a409b5e505acaa7de0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012140681540 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010545922352} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5561a61553f8b4c43821223f61cd7d29, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012532277778 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012877361228} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: a4895dde5062b86498cb244d8ec29364, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012703457538 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013240302738} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5e6573a30d7ca4b4784325f7cf75e402, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012856979566 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011677831218} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 4a2884ce64f12e1488bb34a0b873c9d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012881930702 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010629167112} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 72599c9a42ea42049a2a36b1828875c3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013032495660 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011787985402} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e4f7f026e60078a43a553e584d261671, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013069349862 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011419217470} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c43c315665a6e9e46a45b39cc3645d85, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013421624772 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012848132142} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c99506b671307f34c995cd21fd4badb8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013442133786 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011140611266} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 044b04b8868827a4b9c545bf762f0adc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013523107472 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470888132} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: efaced99acd4b8149a75a5c01e47e985, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013751080654 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013025147428} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: d3953630a3c6bd64eb0cb867beae30d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013796798692 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012344280542} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e682479f0c6d8c24db2635eea4343591, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013898528828 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862413288} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 4dee58bca878da146ba35583d00f6ed8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000014070242114 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013343956054} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 81b54dc3c415c894e9c176f3053eb0b8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &33000010231940884 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012877361228} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000010361159574 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011677831218} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000010588528966 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012378950814} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011098133760 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012848132142} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011112248652 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012344280542} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011229769100 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013554399048} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011331132656 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011787985402} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011331681606 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470888132} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011373522048 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011753996734} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011519123438 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013343956054} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011615211680 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013025147428} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012014437306 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010629167112} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012165602584 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011419217470} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012182004980 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010545922352} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012304415750 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011140611266} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012341634524 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011697605022} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012496129964 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010754605226} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012691087676 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010289061002} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000013191588704 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010087587216} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000013419629684 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014164875786} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000014130596838 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013240302738} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000014221939320 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862413288} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &135000010322373284 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010754605226} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000010485048620 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010545922352} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000010500615814 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013554399048} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000010665472466 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013240302738} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000010906751980 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012848132142} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000011788593278 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011140611266} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000011902358174 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012378950814} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012092621100 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011753996734} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012111690070 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014164875786} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012210333046 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011697605022} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012222279098 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862413288} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012254264818 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011419217470} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012343630262 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010289061002} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012388857190 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012344280542} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012989055838 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011787985402} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013122701806 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470888132} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013244871946 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011677831218} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013266396486 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013343956054} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013332565106 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010087587216} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013751575902 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013025147428} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000014046954128 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010629167112} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000014092929856 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012877361228} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/TestScenes/HDTest/SphereStandard/SphereGroup 1.prefab.meta b/Assets/TestScenes/HDTest/SphereStandard/SphereGroup 1.prefab.meta new file mode 100644 index 00000000000..769e57a6e7d --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/SphereGroup 1.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f2830c79042f2f47879fdec78f8de5f +timeCreated: 1460557875 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/SphereStandard/red.mat b/Assets/TestScenes/HDTest/SphereStandard/red.mat new file mode 100644 index 00000000000..c0ec3194134 --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/red.mat @@ -0,0 +1,127 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: red + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/SphereStandard/red.mat.meta b/Assets/TestScenes/HDTest/SphereStandard/red.mat.meta new file mode 100644 index 00000000000..4f12c28e92c --- /dev/null +++ b/Assets/TestScenes/HDTest/SphereStandard/red.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83f9931d31aac4d42b96d07245f13861 +timeCreated: 1476870536 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres.meta b/Assets/TestScenes/HDTest/Spheres.meta new file mode 100644 index 00000000000..2111a6c5bf0 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 37edb374d593ad44f905f1b46cc79f49 +folderAsset: yes +timeCreated: 1476481711 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_0.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_0.mat new file mode 100644 index 00000000000..811074b577a --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_0.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_0 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_0.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_0.mat.meta new file mode 100644 index 00000000000..a92bc401925 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_0.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3953630a3c6bd64eb0cb867beae30d3 +timeCreated: 1448039538 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_1.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_1.mat new file mode 100644 index 00000000000..191cfc70f0c --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_1.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_1 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.1 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_1.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_1.mat.meta new file mode 100644 index 00000000000..47c45612f0d --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c43c315665a6e9e46a45b39cc3645d85 +timeCreated: 1448039530 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_2.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_2.mat new file mode 100644 index 00000000000..2d5f4ca75ff --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_2.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_2 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.2 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.2 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_2.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_2.mat.meta new file mode 100644 index 00000000000..5925746a62c --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a2884ce64f12e1488bb34a0b873c9d3 +timeCreated: 1448039530 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_3.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_3.mat new file mode 100644 index 00000000000..43a61ffc015 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_3.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_3 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.3 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.3 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_3.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_3.mat.meta new file mode 100644 index 00000000000..0f920f1e9a5 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_3.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5561a61553f8b4c43821223f61cd7d29 +timeCreated: 1448039508 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_4.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_4.mat new file mode 100644 index 00000000000..4cfab39ccaa --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_4.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_4 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.4 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.4 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_4.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_4.mat.meta new file mode 100644 index 00000000000..55d857c3bff --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_4.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 72599c9a42ea42049a2a36b1828875c3 +timeCreated: 1448039507 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_5.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_5.mat new file mode 100644 index 00000000000..90f460f42ae --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_5.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_5 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.5 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_5.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_5.mat.meta new file mode 100644 index 00000000000..f994f409f47 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_5.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 044b04b8868827a4b9c545bf762f0adc +timeCreated: 1448039507 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_6.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_6.mat new file mode 100644 index 00000000000..5738ad15541 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_6.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_6 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.6 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.6 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_6.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_6.mat.meta new file mode 100644 index 00000000000..3ead16f0d9b --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_6.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4e560d4bc2c20cc4fba9fb5b1f1be541 +timeCreated: 1448039507 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_7.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_7.mat new file mode 100644 index 00000000000..1b15b20af6a --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_7.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_7 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.7 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.7 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_7.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_7.mat.meta new file mode 100644 index 00000000000..ced1470122d --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_7.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: efaced99acd4b8149a75a5c01e47e985 +timeCreated: 1448039507 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_8.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_8.mat new file mode 100644 index 00000000000..3685dabca28 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_8.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_8 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.8 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.8 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_8.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_8.mat.meta new file mode 100644 index 00000000000..11d2c4dfd5f --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_8.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4895dde5062b86498cb244d8ec29364 +timeCreated: 1448039506 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_9.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_9.mat new file mode 100644 index 00000000000..0cb2ea32cfc --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_9.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth0_9 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.9 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.9 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_9.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_9.mat.meta new file mode 100644 index 00000000000..dbba79e65e2 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth0_9.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d843b398f9818ea44b1025499d6eb030 +timeCreated: 1448039483 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth1_1.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smooth1_1.mat new file mode 100644 index 00000000000..3bccdb16840 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth1_1.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smooth1_1 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 1 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 1 + - first: + name: _Metallic + second: 1 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smooth1_1.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smooth1_1.mat.meta new file mode 100644 index 00000000000..f208746d6b8 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smooth1_1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 61f42391dbd7154448c0045c536e1d65 +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_0.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_0.mat new file mode 100644 index 00000000000..02e897810cc --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_0.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_0 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_0.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_0.mat.meta new file mode 100644 index 00000000000..060aec1b08c --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_0.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1cf5eed996385fa4fa3b8fcb5652286e +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_1.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_1.mat new file mode 100644 index 00000000000..9a91a805ff1 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_1.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_1 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.1 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_1.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_1.mat.meta new file mode 100644 index 00000000000..21cd2fe6260 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc6c2aad115095e4c943d30cb25b33b2 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_2.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_2.mat new file mode 100644 index 00000000000..1dde5129db0 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_2.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_2 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.2 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.2 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_2.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_2.mat.meta new file mode 100644 index 00000000000..9238ef8b2c5 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4dee58bca878da146ba35583d00f6ed8 +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_3.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_3.mat new file mode 100644 index 00000000000..dcd799978b0 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_3.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_3 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.3 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.3 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_3.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_3.mat.meta new file mode 100644 index 00000000000..ff3a77de843 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_3.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c99506b671307f34c995cd21fd4badb8 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_4.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_4.mat new file mode 100644 index 00000000000..55f59ba1d91 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_4.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_4 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.4 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.4 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_4.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_4.mat.meta new file mode 100644 index 00000000000..d69b12c6412 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_4.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 81b54dc3c415c894e9c176f3053eb0b8 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_5.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_5.mat new file mode 100644 index 00000000000..6b0e166f37c --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_5.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_5 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.5 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_5.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_5.mat.meta new file mode 100644 index 00000000000..c9b74d78bf3 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_5.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 163701ce9c397d542bbbfdea8cdf7296 +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_6.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_6.mat new file mode 100644 index 00000000000..0462dd65f1d --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_6.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_6 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.6 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.6 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_6.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_6.mat.meta new file mode 100644 index 00000000000..98db3749a16 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_6.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e6573a30d7ca4b4784325f7cf75e402 +timeCreated: 1453738565 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_7.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_7.mat new file mode 100644 index 00000000000..d0227788d91 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_7.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_7 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.7 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.7 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_7.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_7.mat.meta new file mode 100644 index 00000000000..5a436dc7328 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_7.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4f7f026e60078a43a553e584d261671 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_8.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_8.mat new file mode 100644 index 00000000000..e15f3788f05 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_8.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_8 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.8 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.8 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_8.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_8.mat.meta new file mode 100644 index 00000000000..730568d06d0 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_8.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e682479f0c6d8c24db2635eea4343591 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_9.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_9.mat new file mode 100644 index 00000000000..a9afba33f8a --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_9.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric0_9 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.9 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 0.9 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_9.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_9.mat.meta new file mode 100644 index 00000000000..2e305f171dc --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric0_9.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fd05883380b8e33459781ce77287d924 +timeCreated: 1453738566 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric1_0.mat b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric1_0.mat new file mode 100644 index 00000000000..1f0dfd4970d --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric1_0.mat @@ -0,0 +1,236 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat_smoothdielectric1_0 + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DISTORTIONDEPTHTEST_OFF _DISTORTIONONLY_OFF + _EMISSION _NORMALMAP_TANGENT_SPACE + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BaseColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DiffuseLightingMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissiveColorMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _HeightMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MaskMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecularOcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SubSurfaceRadiusMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _AlphaCutoff + second: 0.5 + - first: + name: _AlphaCutoffEnable + second: 0 + - first: + name: _BlendMode + second: 0 + - first: + name: _BumpScale + second: 1 + - first: + name: _CullMode + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DistortionDepthTest + second: 0 + - first: + name: _DistortionOnly + second: 0 + - first: + name: _DoubleSidedMode + second: 0 + - first: + name: _DstBlend + second: 0 + - first: + name: _EmissiveColorMode + second: 1 + - first: + name: _EmissiveIntensity + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 1 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _HeightBias + second: 0 + - first: + name: _HeightMapMode + second: 0 + - first: + name: _HeightScale + second: 1 + - first: + name: _MaterialId + second: 0 + - first: + name: _Metalic + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _NormalMapSpace + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _Smoothness + second: 1 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _SubSurfaceRadius + second: 0 + - first: + name: _SurfaceType + second: 0 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _Color + second: {r: 0.7176471, g: 0.7176471, b: 0.7176471, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _EmissiveColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric1_0.mat.meta b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric1_0.mat.meta new file mode 100644 index 00000000000..c59175b0bf9 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/Mat_smoothdielectric1_0.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0f837bd8819543a409b5e505acaa7de0 +timeCreated: 1448039441 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/HDTest/Spheres/SphereGroup.prefab b/Assets/TestScenes/HDTest/Spheres/SphereGroup.prefab new file mode 100644 index 00000000000..fe7317c77ce --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/SphereGroup.prefab @@ -0,0 +1,2454 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000012470308022} + m_IsPrefabParent: 1 +--- !u!1 &1000010007989558 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013674302558} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010071295928 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013302451620} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010087587216 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012813361656} + - component: {fileID: 33000013191588704} + - component: {fileID: 135000013332565106} + - component: {fileID: 23000012055495256} + m_Layer: 0 + m_Name: Sphere (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010289061002 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013647363470} + - component: {fileID: 33000012691087676} + - component: {fileID: 135000012343630262} + - component: {fileID: 23000011727209500} + m_Layer: 0 + m_Name: Sphere (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010291928302 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012464417950} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010434065936 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010178680272} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010545922352 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010971999112} + - component: {fileID: 33000012182004980} + - component: {fileID: 135000010485048620} + - component: {fileID: 23000012140681540} + m_Layer: 0 + m_Name: Sphere (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010629167112 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010794846548} + - component: {fileID: 33000012014437306} + - component: {fileID: 135000014046954128} + - component: {fileID: 23000012881930702} + m_Layer: 0 + m_Name: Sphere (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010677277646 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010574205308} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010754605226 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012631573820} + - component: {fileID: 33000012496129964} + - component: {fileID: 135000010322373284} + - component: {fileID: 23000010922128364} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011140611266 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011801280982} + - component: {fileID: 33000012304415750} + - component: {fileID: 135000011788593278} + - component: {fileID: 23000013442133786} + m_Layer: 0 + m_Name: Sphere (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011280293128 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013457853772} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011419217470 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012908174082} + - component: {fileID: 33000012165602584} + - component: {fileID: 135000012254264818} + - component: {fileID: 23000013069349862} + m_Layer: 0 + m_Name: Sphere (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011439797364 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012634066572} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011498593814 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013798480240} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011603578742 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010113146392} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011677831218 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011206241358} + - component: {fileID: 33000010361159574} + - component: {fileID: 135000013244871946} + - component: {fileID: 23000012856979566} + m_Layer: 0 + m_Name: Sphere (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011697605022 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012549693380} + - component: {fileID: 33000012341634524} + - component: {fileID: 135000012210333046} + - component: {fileID: 23000011036715798} + m_Layer: 0 + m_Name: Sphere (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011753996734 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013009955538} + - component: {fileID: 33000011373522048} + - component: {fileID: 135000012092621100} + - component: {fileID: 23000010311915246} + m_Layer: 0 + m_Name: Sphere (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011787985402 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011030235908} + - component: {fileID: 33000011331132656} + - component: {fileID: 135000012989055838} + - component: {fileID: 23000013032495660} + m_Layer: 0 + m_Name: Sphere (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011836353396 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014170456964} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011887723186 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014187209622} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011973232756 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010163547154} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012112892728 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011685292612} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012344280542 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012542715892} + - component: {fileID: 33000011112248652} + - component: {fileID: 135000012388857190} + - component: {fileID: 23000013796798692} + m_Layer: 0 + m_Name: Sphere (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012378950814 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012054217298} + - component: {fileID: 33000010588528966} + - component: {fileID: 135000011902358174} + - component: {fileID: 23000010636634114} + m_Layer: 0 + m_Name: Sphere (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012470308022 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010760374938} + m_Layer: 0 + m_Name: SphereGroup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012470888132 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010363248526} + - component: {fileID: 33000011331681606} + - component: {fileID: 135000013122701806} + - component: {fileID: 23000013523107472} + m_Layer: 0 + m_Name: Sphere (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012481083098 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011403334846} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012743780564 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012871338094} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012774224490 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010433353240} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012798601726 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011488636830} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012848132142 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011224780184} + - component: {fileID: 33000011098133760} + - component: {fileID: 135000010906751980} + - component: {fileID: 23000013421624772} + m_Layer: 0 + m_Name: Sphere (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012862413288 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011920970476} + - component: {fileID: 33000014221939320} + - component: {fileID: 135000012222279098} + - component: {fileID: 23000013898528828} + m_Layer: 0 + m_Name: Sphere (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012877361228 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010224350464} + - component: {fileID: 33000010231940884} + - component: {fileID: 135000014092929856} + - component: {fileID: 23000012532277778} + m_Layer: 0 + m_Name: Sphere (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013025147428 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010199868884} + - component: {fileID: 33000011615211680} + - component: {fileID: 135000013751575902} + - component: {fileID: 23000013751080654} + m_Layer: 0 + m_Name: Sphere (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013055705134 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011256059824} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013240302738 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013336532474} + - component: {fileID: 33000014130596838} + - component: {fileID: 135000010665472466} + - component: {fileID: 23000012703457538} + m_Layer: 0 + m_Name: Sphere (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013308341636 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013466806034} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013343956054 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011101297958} + - component: {fileID: 33000011519123438} + - component: {fileID: 135000013266396486} + - component: {fileID: 23000014070242114} + m_Layer: 0 + m_Name: Sphere (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013554399048 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011818357032} + - component: {fileID: 33000011229769100} + - component: {fileID: 135000010500615814} + - component: {fileID: 23000010816873258} + m_Layer: 0 + m_Name: Sphere (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013662182516 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013843224976} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014164875786 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011497627172} + - component: {fileID: 33000013419629684} + - component: {fileID: 135000012111690070} + - component: {fileID: 23000012110281398} + m_Layer: 0 + m_Name: Sphere (21) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014269651680 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000014079264936} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010113146392 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011603578742} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011101297958} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010163547154 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011973232756} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012549693380} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010178680272 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010434065936} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012542715892} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010199868884 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013025147428} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.46, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013302451620} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010224350464 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012877361228} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.54, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013457853772} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010363248526 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470888132} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.04, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000014079264936} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010433353240 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012774224490} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010971999112} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010574205308 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010677277646} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000013336532474} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010760374938 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470308022} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012631573820} + - {fileID: 4000013647363470} + - {fileID: 4000010224350464} + - {fileID: 4000010363248526} + - {fileID: 4000013009955538} + - {fileID: 4000011801280982} + - {fileID: 4000010794846548} + - {fileID: 4000010971999112} + - {fileID: 4000011206241358} + - {fileID: 4000012908174082} + - {fileID: 4000010199868884} + - {fileID: 4000011818357032} + - {fileID: 4000012813361656} + - {fileID: 4000011920970476} + - {fileID: 4000011224780184} + - {fileID: 4000011101297958} + - {fileID: 4000012054217298} + - {fileID: 4000013336532474} + - {fileID: 4000011030235908} + - {fileID: 4000012542715892} + - {fileID: 4000012549693380} + - {fileID: 4000011497627172} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010794846548 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010629167112} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.46, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013674302558} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000010971999112 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010545922352} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.96, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010433353240} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011030235908 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011787985402} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.04, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000011256059824} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011101297958 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013343956054} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.46, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010113146392} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011206241358 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011677831218} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.46, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013843224976} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011224780184 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012848132142} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.96, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010760374938} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011256059824 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013055705134} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011030235908} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011403334846 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012481083098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000013009955538} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011488636830 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012798601726} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012908174082} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011497627172 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014164875786} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7.54, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000014170456964} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011685292612 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012112892728} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012813361656} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011801280982 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011140611266} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.03999996, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012871338094} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011818357032 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013554399048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.46, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000014187209622} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011920970476 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862413288} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.46, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013466806034} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012054217298 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012378950814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.03999996, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000013798480240} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012464417950 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010291928302} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000013647363470} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012542715892 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012344280542} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.54, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010178680272} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012549693380 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011697605022} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -6.04, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010163547154} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012631573820 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010754605226} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7.54, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012634066572} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012634066572 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011439797364} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012631573820} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012813361656 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010087587216} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.96, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000011685292612} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012871338094 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012743780564} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011801280982} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012908174082 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011419217470} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.96, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000011488636830} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013009955538 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011753996734} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.54, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000011403334846} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013302451620 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010071295928} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010199868884} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013336532474 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013240302738} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.54, y: 0, z: -1.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000010574205308} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013457853772 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011280293128} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010224350464} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013466806034 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013308341636} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011920970476} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013647363470 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010289061002} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -6.04, y: 0, z: 0.8299999} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012464417950} + m_Father: {fileID: 4000010760374938} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013674302558 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010007989558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010794846548} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013798480240 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011498593814} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000012054217298} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000013843224976 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013662182516} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011206241358} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014079264936 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014269651680} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010363248526} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014170456964 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011836353396} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011497627172} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000014187209622 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011887723186} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000011818357032} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23000010311915246 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011753996734} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 4e560d4bc2c20cc4fba9fb5b1f1be541, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000010636634114 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012378950814} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 163701ce9c397d542bbbfdea8cdf7296, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000010816873258 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013554399048} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 1cf5eed996385fa4fa3b8fcb5652286e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000010922128364 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010754605226} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 61f42391dbd7154448c0045c536e1d65, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000011036715798 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011697605022} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: fd05883380b8e33459781ce77287d924, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000011727209500 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010289061002} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: d843b398f9818ea44b1025499d6eb030, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012055495256 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010087587216} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: cc6c2aad115095e4c943d30cb25b33b2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012110281398 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014164875786} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0f837bd8819543a409b5e505acaa7de0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012140681540 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010545922352} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5561a61553f8b4c43821223f61cd7d29, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012532277778 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012877361228} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: a4895dde5062b86498cb244d8ec29364, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012703457538 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013240302738} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 5e6573a30d7ca4b4784325f7cf75e402, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012856979566 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011677831218} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 4a2884ce64f12e1488bb34a0b873c9d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012881930702 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010629167112} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 72599c9a42ea42049a2a36b1828875c3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013032495660 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011787985402} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e4f7f026e60078a43a553e584d261671, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013069349862 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011419217470} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c43c315665a6e9e46a45b39cc3645d85, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013421624772 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012848132142} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: c99506b671307f34c995cd21fd4badb8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013442133786 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011140611266} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 044b04b8868827a4b9c545bf762f0adc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013523107472 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470888132} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: efaced99acd4b8149a75a5c01e47e985, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013751080654 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013025147428} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: d3953630a3c6bd64eb0cb867beae30d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013796798692 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012344280542} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e682479f0c6d8c24db2635eea4343591, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000013898528828 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862413288} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 4dee58bca878da146ba35583d00f6ed8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000014070242114 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013343956054} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 81b54dc3c415c894e9c176f3053eb0b8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &33000010231940884 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012877361228} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000010361159574 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011677831218} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000010588528966 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012378950814} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011098133760 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012848132142} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011112248652 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012344280542} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011229769100 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013554399048} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011331132656 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011787985402} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011331681606 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470888132} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011373522048 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011753996734} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011519123438 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013343956054} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000011615211680 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013025147428} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012014437306 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010629167112} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012165602584 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011419217470} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012182004980 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010545922352} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012304415750 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011140611266} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012341634524 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011697605022} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012496129964 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010754605226} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000012691087676 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010289061002} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000013191588704 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010087587216} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000013419629684 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014164875786} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000014130596838 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013240302738} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000014221939320 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862413288} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &135000010322373284 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010754605226} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000010485048620 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010545922352} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000010500615814 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013554399048} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000010665472466 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013240302738} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000010906751980 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012848132142} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000011788593278 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011140611266} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000011902358174 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012378950814} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012092621100 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011753996734} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012111690070 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014164875786} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012210333046 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011697605022} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012222279098 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012862413288} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012254264818 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011419217470} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012343630262 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010289061002} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012388857190 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012344280542} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000012989055838 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011787985402} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013122701806 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012470888132} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013244871946 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011677831218} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013266396486 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013343956054} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013332565106 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010087587216} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000013751575902 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013025147428} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000014046954128 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010629167112} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!135 &135000014092929856 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012877361228} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/TestScenes/HDTest/Spheres/SphereGroup.prefab.meta b/Assets/TestScenes/HDTest/Spheres/SphereGroup.prefab.meta new file mode 100644 index 00000000000..f0d733164a1 --- /dev/null +++ b/Assets/TestScenes/HDTest/Spheres/SphereGroup.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1faa212e4ad88f04a81c5ed019001de5 +timeCreated: 1460557875 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestScenes/fptl/Materials/FwdMat.mat b/Assets/TestScenes/fptl/Materials/FwdMat.mat new file mode 100644 index 00000000000..28ce9dbd82c --- /dev/null +++ b/Assets/TestScenes/fptl/Materials/FwdMat.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: FwdMat + m_Shader: {fileID: 4800000, guid: ccaa200b3477a2a4cbc0fecd9fc2dde8, type: 3} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _SpecColor + second: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/Assets/Textures/cubeTest.png.meta b/Assets/Textures/cubeTest.png.meta index c1acb1e399f..9bd8cc2b532 100644 --- a/Assets/Textures/cubeTest.png.meta +++ b/Assets/Textures/cubeTest.png.meta @@ -60,7 +60,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 - buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 128 textureFormat: 4 textureCompression: 1 compressionQuality: 50 diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000000..d6315ef330f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Unity Technologies + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index 09710d2e234..7322528c201 100644 --- a/ProjectSettings/GraphicsSettings.asset +++ b/ProjectSettings/GraphicsSettings.asset @@ -3,7 +3,7 @@ --- !u!30 &1 GraphicsSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Deferred: m_Mode: 0 m_Shader: {fileID: 0} @@ -36,18 +36,25 @@ GraphicsSettings: - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 4800000, guid: 36c23fe83f8e7a54d8fb168fa6cf2a3d, type: 3} + - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} m_PreloadedShaders: [] m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} m_TierSettings_Tier1: renderingPath: 1 useCascadedShadowMaps: 1 + useHDR: 0 + hdrMode: 0 m_TierSettings_Tier2: renderingPath: 1 useCascadedShadowMaps: 1 + useHDR: 0 + hdrMode: 0 m_TierSettings_Tier3: renderingPath: 1 useCascadedShadowMaps: 1 + useHDR: 0 + hdrMode: 0 m_DefaultRenderingPath: 1 m_DefaultMobileRenderingPath: 1 m_TierSettings: @@ -57,8 +64,10 @@ GraphicsSettings: m_Settings: standardShaderQuality: 2 renderingPath: 1 + hdrMode: 0 useReflectionProbeBoxProjection: 1 useReflectionProbeBlending: 1 + useHDR: 0 useDetailNormalMap: 1 useCascadedShadowMaps: 1 useDitherMaskForAlphaBlendedShadows: 1 @@ -69,8 +78,10 @@ GraphicsSettings: m_Settings: standardShaderQuality: 2 renderingPath: 1 + hdrMode: 0 useReflectionProbeBoxProjection: 1 useReflectionProbeBlending: 1 + useHDR: 0 useDetailNormalMap: 1 useCascadedShadowMaps: 1 useDitherMaskForAlphaBlendedShadows: 1 @@ -81,8 +92,10 @@ GraphicsSettings: m_Settings: standardShaderQuality: 2 renderingPath: 1 + hdrMode: 0 useReflectionProbeBoxProjection: 1 useReflectionProbeBlending: 1 + useHDR: 0 useDetailNormalMap: 1 useCascadedShadowMaps: 1 useDitherMaskForAlphaBlendedShadows: 1 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index e9c3eca8990..63da28ea80c 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,8 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 8 + serializedVersion: 10 + productGUID: 900e9e40d20cd3e44ad40e5b00239dcc AndroidProfiler: 0 defaultScreenOrientation: 4 targetDevice: 2 @@ -13,21 +14,45 @@ PlayerSettings: productName: dev defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} - m_SplashScreenStyle: 0 + m_SplashScreenBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21176471, a: 1} m_ShowUnitySplashScreen: 0 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_SplashScreenBackgroundLandscape: {fileID: 0} + m_SplashScreenBackgroundPortrait: {fileID: 0} m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} defaultScreenWidth: 1024 defaultScreenHeight: 768 defaultScreenWidthWeb: 960 defaultScreenHeightWeb: 600 - m_RenderingPath: 1 - m_MobileRenderingPath: 1 m_ActiveColorSpace: 1 m_MTRendering: 1 m_MobileMTRendering: 0 m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 + tizenShowActivityIndicatorOnLoading: -1 iosAppInBackgroundBehavior: 0 displayResolutionDialog: 2 iosAllowHTTPDownload: 1 @@ -42,7 +67,7 @@ PlayerSettings: defaultIsNativeResolution: 1 runInBackground: 1 captureSingleScreen: 0 - Override IPod Music: 0 + muteOtherAudioSources: 0 Prepare IOS For Recording: 0 submitAnalytics: 1 usePlayerLog: 1 @@ -72,7 +97,8 @@ PlayerSettings: uiUse16BitDepthBuffer: 0 ignoreAlphaClear: 0 xboxOneResolution: 0 - ps3SplashScreen: {fileID: 0} + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 videoMemoryForVertexBuffers: 0 psp2PowerMode: 0 psp2AcquireBGM: 1 @@ -94,11 +120,11 @@ PlayerSettings: bundleIdentifier: com.Company.ProductName bundleVersion: 1.0 preloadedAssets: [] - metroEnableIndependentInputSource: 0 + metroInputSource: 0 + m_HolographicPauseOnTrackingLoss: 1 xboxOneDisableKinectGpuReservation: 0 singlePassStereoRendering: 0 protectGraphicsMemory: 0 - productGUID: 900e9e40d20cd3e44ad40e5b00239dcc AndroidBundleVersionCode: 1 AndroidMinSdkVersion: 9 AndroidPreferredInstallLocation: 1 @@ -112,15 +138,16 @@ PlayerSettings: ForceSDCardPermission: 0 CreateWallpaper: 0 APKExpansionFiles: 0 - preloadShaders: 0 + keepLoadedShadersAlive: 0 StripUnusedMeshComponents: 0 VertexChannelCompressionMask: serializedVersion: 2 m_Bits: 238 iPhoneSdkVersion: 988 - iPhoneTargetOSVersion: 22 + iOSTargetOSVersionString: 6.0 tvOSSdkVersion: 0 - tvOSTargetOSVersion: 900 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 9.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 uIRequiresFullScreen: 1 @@ -160,6 +187,9 @@ PlayerSettings: iOSLaunchScreeniPadCustomXibPath: iOSDeviceRequirements: [] iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + appleDeveloperTeamID: AndroidTargetDevice: 0 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} @@ -189,6 +219,63 @@ PlayerSettings: - m_BuildTarget: WindowsStandaloneSupport m_APIs: 0200000001000000 m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Android + m_Enabled: 0 + m_Devices: + - Oculus + - m_BuildTarget: Metro + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: N3DS + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: PS3 + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: PS4 + m_Enabled: 0 + m_Devices: + - PlayStationVR + - m_BuildTarget: PSM + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: PSP2 + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: SamsungTV + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - m_BuildTarget: Tizen + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: WebGL + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: WebPlayer + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: WiiU + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: Xbox360 + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: XboxOne + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: iOS + m_Enabled: 0 + m_Devices: [] + - m_BuildTarget: tvOS + m_Enabled: 0 + m_Devices: [] + openGLRequireES31: 0 + openGLRequireES31AEP: 0 webPlayerTemplate: APPLICATION:Default m_TemplateCustomTags: {} wiiUTitleID: 0005000011000000 @@ -207,12 +294,15 @@ PlayerSettings: wiiUSystemHeapSize: 128 wiiUTVStartupScreen: {fileID: 0} wiiUGamePadStartupScreen: {fileID: 0} + wiiUDrcBufferDisabled: 0 wiiUProfilerLibPath: actionOnDotNetUnhandledException: 1 enableInternalProfiler: 0 logObjCUncaughtExceptions: 1 enableCrashReportAPI: 0 + cameraUsageDescription: locationUsageDescription: + microphoneUsageDescription: XboxTitleId: XboxImageXexPath: XboxSpaPath: @@ -223,24 +313,6 @@ PlayerSettings: xboxAdditionalTitleMemorySize: 0 xboxDeployKinectHeadOrientation: 0 xboxDeployKinectHeadPosition: 0 - ps3TitleConfigPath: - ps3DLCConfigPath: - ps3ThumbnailPath: - ps3BackgroundPath: - ps3SoundPath: - ps3NPAgeRating: 12 - ps3TrophyCommId: - ps3NpCommunicationPassphrase: - ps3TrophyPackagePath: - ps3BootCheckMaxSaveGameSizeKB: 128 - ps3TrophyCommSig: - ps3SaveGameSlots: 1 - ps3TrialMode: 0 - ps3VideoMemoryForAudio: 0 - ps3EnableVerboseMemoryStats: 0 - ps3UseSPUForUmbra: 0 - ps3EnableMoveSupport: 1 - ps3DisableDolbyEncoding: 0 ps4NPAgeRating: 12 ps4NPTitleSecret: ps4NPTrophyPackPath: @@ -252,7 +324,8 @@ PlayerSettings: ps4AppType: 0 ps4ParamSfxPath: ps4VideoOutPixelFormat: 0 - ps4VideoOutResolution: 4 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutReprojectionRate: 120 ps4PronunciationXMLPath: ps4PronunciationSIGPath: ps4BackgroundImagePath: @@ -266,6 +339,7 @@ PlayerSettings: ps4NPtitleDatPath: ps4RemotePlayKeyAssignment: -1 ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 ps4EnterButtonAssignment: 1 ps4ApplicationParam1: 0 ps4ApplicationParam2: 0 @@ -280,18 +354,24 @@ PlayerSettings: ps4pnFriends: 1 ps4pnGameCustomData: 1 playerPrefsSupport: 0 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 ps4ReprojectionSupport: 0 ps4UseAudio3dBackend: 0 ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 3 ps4Audio3dVirtualSpeakerCount: 14 ps4attribCpuUsage: 0 ps4PatchPkgPath: ps4PatchLatestPkgPath: ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 ps4attribUserManagement: 0 ps4attribMoveSupport: 0 ps4attrib3DSupport: 0 ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 ps4IncludedModules: [] monoEnv: psp2Splashimage: {fileID: 0} @@ -342,8 +422,35 @@ PlayerSettings: psp2InfoBarColor: 0 psp2UseDebugIl2cppLibs: 0 psmSplashimage: {fileID: 0} + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} spritePackerPolicy: + webGLMemorySize: 256 + webGLExceptionSupport: 1 + webGLDataCaching: 0 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLUseWasm: 0 + webGLCompressionFormat: 1 scriptingDefineSymbols: {} + platformArchitecture: + iOS: 2 + scriptingBackend: + Android: 0 + Metro: 2 + Standalone: 0 + WP8: 2 + WebGL: 1 + iOS: 1 + incrementalIl2cppBuild: + iOS: 0 + additionalIl2CppArgs: + m_RenderingPath: 1 + m_MobileRenderingPath: 1 metroPackageName: dev metroPackageVersion: metroCertificatePath: @@ -374,6 +481,9 @@ PlayerSettings: tizenSigningProfileName: tizenGPSPermissions: 0 tizenMicrophonePermissions: 0 + tizenDeploymentTarget: + tizenDeploymentTargetType: 0 + tizenMinOSVersion: 0 n3dsUseExtSaveData: 0 n3dsCompressStaticMem: 1 n3dsExtSaveDataNumber: 0x12345 @@ -403,141 +513,28 @@ PlayerSettings: XboxOnePackageEncryption: 0 XboxOnePackageUpdateGranularity: 2 XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} XboxOneIsContentPackage: 0 XboxOneEnableGPUVariability: 0 XboxOneSockets: {} XboxOneSplashScreen: {fileID: 0} XboxOneAllowedProductIds: [] XboxOnePersistentLocalStorageSize: 0 - intPropertyNames: - - Android::ScriptingBackend - - Metro::ScriptingBackend - - Standalone::ScriptingBackend - - WP8::ScriptingBackend - - WebGL::ScriptingBackend - - WebGL::audioCompressionFormat - - WebGL::exceptionSupport - - WebGL::memorySize - - iOS::Architecture - - iOS::EnableIncrementalBuildSupportForIl2cpp - - iOS::ScriptingBackend - Android::ScriptingBackend: 0 - Metro::ScriptingBackend: 2 - Standalone::ScriptingBackend: 0 - WP8::ScriptingBackend: 2 - WebGL::ScriptingBackend: 1 - WebGL::audioCompressionFormat: 4 - WebGL::exceptionSupport: 1 - WebGL::memorySize: 256 - iOS::Architecture: 2 - iOS::EnableIncrementalBuildSupportForIl2cpp: 0 - iOS::ScriptingBackend: 1 - boolPropertyNames: - - Android::VR::enable - - Metro::VR::enable - - N3DS::VR::enable - - PS3::VR::enable - - PS4::VR::enable - - PSM::VR::enable - - PSP2::VR::enable - - SamsungTV::VR::enable - - Standalone::VR::enable - - Tizen::VR::enable - - WebGL::VR::enable - - WebGL::analyzeBuildSize - - WebGL::dataCaching - - WebGL::useEmbeddedResources - - WebPlayer::VR::enable - - WiiU::VR::enable - - Xbox360::VR::enable - - XboxOne::VR::enable - - XboxOne::enus - - iOS::VR::enable - - tvOS::VR::enable - Android::VR::enable: 0 - Metro::VR::enable: 0 - N3DS::VR::enable: 0 - PS3::VR::enable: 0 - PS4::VR::enable: 0 - PSM::VR::enable: 0 - PSP2::VR::enable: 0 - SamsungTV::VR::enable: 0 - Standalone::VR::enable: 0 - Tizen::VR::enable: 0 - WebGL::VR::enable: 0 - WebGL::analyzeBuildSize: 0 - WebGL::dataCaching: 0 - WebGL::useEmbeddedResources: 0 - WebPlayer::VR::enable: 0 - WiiU::VR::enable: 0 - Xbox360::VR::enable: 0 - XboxOne::VR::enable: 0 - XboxOne::enus: 1 - iOS::VR::enable: 0 - tvOS::VR::enable: 0 - stringPropertyNames: - - Analytics_ServiceEnabled::Analytics_ServiceEnabled - - Build_ServiceEnabled::Build_ServiceEnabled - - Collab_ServiceEnabled::Collab_ServiceEnabled - - ErrorHub_ServiceEnabled::ErrorHub_ServiceEnabled - - Game_Performance_ServiceEnabled::Game_Performance_ServiceEnabled - - Hub_ServiceEnabled::Hub_ServiceEnabled - - Purchasing_ServiceEnabled::Purchasing_ServiceEnabled - - UNet_ServiceEnabled::UNet_ServiceEnabled - - Unity_Ads_ServiceEnabled::Unity_Ads_ServiceEnabled - - WebGL::emscriptenArgs - - WebGL::template - - additionalIl2CppArgs::additionalIl2CppArgs - Analytics_ServiceEnabled::Analytics_ServiceEnabled: False - Build_ServiceEnabled::Build_ServiceEnabled: False - Collab_ServiceEnabled::Collab_ServiceEnabled: False - ErrorHub_ServiceEnabled::ErrorHub_ServiceEnabled: False - Game_Performance_ServiceEnabled::Game_Performance_ServiceEnabled: False - Hub_ServiceEnabled::Hub_ServiceEnabled: False - Purchasing_ServiceEnabled::Purchasing_ServiceEnabled: False - UNet_ServiceEnabled::UNet_ServiceEnabled: False - Unity_Ads_ServiceEnabled::Unity_Ads_ServiceEnabled: False - WebGL::emscriptenArgs: - WebGL::template: APPLICATION:Default - additionalIl2CppArgs::additionalIl2CppArgs: - vectorPropertyNames: - - Android::VR::enabledDevices - - Metro::VR::enabledDevices - - N3DS::VR::enabledDevices - - PS3::VR::enabledDevices - - PS4::VR::enabledDevices - - PSM::VR::enabledDevices - - PSP2::VR::enabledDevices - - SamsungTV::VR::enabledDevices - - Standalone::VR::enabledDevices - - Tizen::VR::enabledDevices - - WebGL::VR::enabledDevices - - WebPlayer::VR::enabledDevices - - WiiU::VR::enabledDevices - - Xbox360::VR::enabledDevices - - XboxOne::VR::enabledDevices - - iOS::VR::enabledDevices - - tvOS::VR::enabledDevices - Android::VR::enabledDevices: - - Oculus - Metro::VR::enabledDevices: [] - N3DS::VR::enabledDevices: [] - PS3::VR::enabledDevices: [] - PS4::VR::enabledDevices: - - PlayStationVR - PSM::VR::enabledDevices: [] - PSP2::VR::enabledDevices: [] - SamsungTV::VR::enabledDevices: [] - Standalone::VR::enabledDevices: - - Oculus - Tizen::VR::enabledDevices: [] - WebGL::VR::enabledDevices: [] - WebPlayer::VR::enabledDevices: [] - WiiU::VR::enabledDevices: [] - Xbox360::VR::enabledDevices: [] - XboxOne::VR::enabledDevices: [] - iOS::VR::enabledDevices: [] - tvOS::VR::enabledDevices: [] + vrEditorSettings: {} + cloudServicesEnabled: + Analytics: 0 + Build: 0 + Collab: 0 + ErrorHub: 0 + Game_Performance: 0 + Hub: 0 + Purchasing: 0 + UNet: 0 + Unity_Ads: 0 + facebookSdkVersion: 7.8.2 cloudProjectId: projectName: organizationId: diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index 2c5769bb26f..fc88556c984 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -149,7 +149,7 @@ QualitySettings: shadowCascade4Split: {x: 0.021409363, y: 0.051549375, z: 0.07213539} blendWeights: 4 textureQuality: 0 - anisotropicTextures: 2 + anisotropicTextures: 1 antiAliasing: 0 softParticles: 1 softVegetation: 1 diff --git a/README.md b/README.md new file mode 100644 index 00000000000..54f878105f5 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# Unity Scriptable Render Loop testbed + +**NOTE**: this is a testbed for a Unity feature that has not shipped yet! The project will not work with any public +Unity version, and things in it might and will be broken. + +"Scriptable Render Loops" is a potential future Unity feature, think "Command Buffers, take two". We plan to ship the feature, and a +new modern built-in rendering loop with it. For now you can look around if you're _really_ curious, but like said above, this is +not useful for any public Unity version yet. + +There's a more detailed overview document here: [ScriptableRenderLoop google doc](https://docs.google.com/document/d/1e2jkr_-v5iaZRuHdnMrSv978LuJKYZhsIYnrDkNAuvQ/edit?usp=sharing) + +Did we mention it's a very WIP, no promises, may or might not ship feature, anything and everything in it can change? It totally is. diff --git a/ScriptableRenderLoop.userprefs b/ScriptableRenderLoop.userprefs deleted file mode 100644 index ff50da46745..00000000000 --- a/ScriptableRenderLoop.userprefs +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file