commit e71658759fe78b67442762d3327b3d8af7eb8e86 Author: lrc <571244399@qq.com> Date: Sun Jul 20 20:29:23 2025 +0800 init diff --git a/Documentation.meta b/Documentation.meta new file mode 100644 index 0000000..fe71392 --- /dev/null +++ b/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc6c88a01f585ab4b9f46a0ff25a6bad +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Documentation.pdf b/Documentation/Documentation.pdf new file mode 100644 index 0000000..67ebf30 Binary files /dev/null and b/Documentation/Documentation.pdf differ diff --git a/Documentation/Documentation.pdf.meta b/Documentation/Documentation.pdf.meta new file mode 100644 index 0000000..b22a357 --- /dev/null +++ b/Documentation/Documentation.pdf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e1bbb55d9cc634ffcadd831c02b5d9e1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Kronnect Assets.pdf b/Documentation/Kronnect Assets.pdf new file mode 100644 index 0000000..3d1fda1 Binary files /dev/null and b/Documentation/Kronnect Assets.pdf differ diff --git a/Documentation/Kronnect Assets.pdf.meta b/Documentation/Kronnect Assets.pdf.meta new file mode 100644 index 0000000..43823a3 --- /dev/null +++ b/Documentation/Kronnect Assets.pdf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 69e3348e62e074f67a41f46346aa95c4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor.meta b/Editor.meta new file mode 100644 index 0000000..8ad8755 --- /dev/null +++ b/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44ff77cd201410b4ea54bb9e017b5b1b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Lrss3.ShinySsrr2Urp.Editor.asmdef b/Editor/Lrss3.ShinySsrr2Urp.Editor.asmdef new file mode 100644 index 0000000..ee65ce8 --- /dev/null +++ b/Editor/Lrss3.ShinySsrr2Urp.Editor.asmdef @@ -0,0 +1,10 @@ +{ + "name": "Lrss3.ShinySsrr2Urp.Editor", + "references": [ + "Lrss3.ShinySsrr2Urp" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} diff --git a/Editor/Lrss3.ShinySsrr2Urp.Editor.asmdef.meta b/Editor/Lrss3.ShinySsrr2Urp.Editor.asmdef.meta new file mode 100644 index 0000000..35f3585 --- /dev/null +++ b/Editor/Lrss3.ShinySsrr2Urp.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 399f2a0fe02e8aa499ad6abe66ca0f56 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/ReflectionsEditor.cs b/Editor/ReflectionsEditor.cs new file mode 100644 index 0000000..690c049 --- /dev/null +++ b/Editor/ReflectionsEditor.cs @@ -0,0 +1,198 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace ShinySSRR { + + [CustomEditor(typeof(Reflections))] + public class ReflectionsEditor : Editor { + + SerializedProperty ignore, scope, layerMask, nameFilter, subMeshMask; + SerializedProperty smoothness, perSubMeshSmoothness, subMeshSettings; + SerializedProperty useMaterialSmoothness, materialSmoothnessMapPropertyName, materialSmoothnessIntensityPropertyName; + SerializedProperty useMaterialNormalMap, materialNormalMapPropertyName; + SerializedProperty fresnel, fuzzyness, contactHardening; + SerializedProperty overrideGlobalSettings; + SerializedProperty sampleCount, maxRayLength, thickness, binarySearchIterations, refineThickness, thicknessFine, decay, jitter; + + private void OnEnable() { + ignore = serializedObject.FindProperty("ignore"); + scope = serializedObject.FindProperty("scope"); + layerMask = serializedObject.FindProperty("layerMask"); + nameFilter = serializedObject.FindProperty("nameFilter"); + subMeshMask = serializedObject.FindProperty("subMeshMask"); + smoothness = serializedObject.FindProperty("smoothness"); + useMaterialSmoothness = serializedObject.FindProperty("useMaterialSmoothness"); + materialSmoothnessMapPropertyName = serializedObject.FindProperty("materialSmoothnessMapPropertyName"); + materialSmoothnessIntensityPropertyName = serializedObject.FindProperty("materialSmoothnessIntensityPropertyName"); + perSubMeshSmoothness = serializedObject.FindProperty("perSubMeshSmoothness"); + subMeshSettings = serializedObject.FindProperty("subMeshSettings"); + useMaterialNormalMap = serializedObject.FindProperty("useMaterialNormalMap"); + materialNormalMapPropertyName = serializedObject.FindProperty("materialNormalMapPropertyName"); + fresnel = serializedObject.FindProperty("fresnel"); + fuzzyness = serializedObject.FindProperty("fuzzyness"); + contactHardening = serializedObject.FindProperty("contactHardening"); + overrideGlobalSettings = serializedObject.FindProperty("overrideGlobalSettings"); + sampleCount = serializedObject.FindProperty("sampleCount"); + maxRayLength = serializedObject.FindProperty("maxRayLength"); + binarySearchIterations = serializedObject.FindProperty("binarySearchIterations"); + thickness = serializedObject.FindProperty("thickness"); + refineThickness = serializedObject.FindProperty("refineThickness"); + thicknessFine = serializedObject.FindProperty("thicknessFine"); + decay = serializedObject.FindProperty("decay"); + jitter = serializedObject.FindProperty("jitter"); + } + + public override void OnInspectorGUI() { + + UnityEngine.Rendering.Universal.UniversalRenderPipelineAsset pipe = UnityEngine.Rendering.GraphicsSettings.currentRenderPipeline as UnityEngine.Rendering.Universal.UniversalRenderPipelineAsset; + if (pipe == null) { + EditorGUILayout.HelpBox("Universal Rendering Pipeline asset is not set in 'Project Settings / Graphics or Quality' !", MessageType.Error); + EditorGUILayout.Separator(); + GUI.enabled = false; + } else if (!ShinySSRR.installed) { + EditorGUILayout.HelpBox("Shiny SSRR Render Feature must be added to the rendering pipeline renderer.", MessageType.Error); + if (GUILayout.Button("Go to Universal Rendering Pipeline Asset")) { + Selection.activeObject = pipe; + } + EditorGUILayout.Separator(); + GUI.enabled = false; + } else { + if (!pipe.supportsCameraDepthTexture) { + EditorGUILayout.HelpBox("Depth Texture option is required. Check Universal Rendering Pipeline asset!", MessageType.Warning); + if (GUILayout.Button("Go to Universal Rendering Pipeline Asset")) { + Selection.activeObject = pipe; + } + EditorGUILayout.Separator(); + GUI.enabled = false; + } + EditorGUILayout.BeginVertical(GUI.skin.box); + if (GUILayout.Button("Show Global Settings")) { + if (pipe != null) { + var so = new SerializedObject(pipe); + var prop = so.FindProperty("m_RendererDataList"); + if (prop != null && prop.arraySize > 0) { + var o = prop.GetArrayElementAtIndex(0); + if (o != null) { + Selection.SetActiveObjectWithContext(o.objectReferenceValue, null); + GUIUtility.ExitGUI(); + } + } + } + } + EditorGUILayout.EndVertical(); + } + + bool isForwardPath = true; + if (ShinySSRR.isDeferredActive) { + EditorGUILayout.HelpBox("In deferred mode, material properties like smoothness and normal map plus global SSR settings are used.", MessageType.Warning); + isForwardPath = false; + GUI.enabled = false; + } + + // ensure submesh array size matches materials count + Reflections refl = (Reflections)target; + if (refl.ssrRenderers != null && refl.ssrRenderers.Count == 1 && refl.ssrRenderers[0].originalMaterials != null) { + List materials = refl.ssrRenderers[0].originalMaterials; + if (refl.subMeshSettings == null) { + refl.subMeshSettings = new SubMeshSettingsData[materials.Count]; + } else if (refl.subMeshSettings.Length < materials.Count) { + System.Array.Resize(ref refl.subMeshSettings, materials.Count); + } + } + + serializedObject.Update(); + + EditorGUILayout.PropertyField(ignore); + if (!ignore.boolValue) { + + if (refl.renderers?.Count == 0) { + if (scope.intValue == (int)Scope.OnlyThisObject) { + EditorGUILayout.HelpBox("No renderers found on this gameobject. Switch to 'Include Children' or add this script to another object which contains a renderer.", MessageType.Warning); + } else { + EditorGUILayout.HelpBox("No renderers found under this gameobject.", MessageType.Warning); + } + } + + EditorGUILayout.PropertyField(scope); + if (scope.intValue == (int)Scope.IncludeChildren) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(layerMask); + EditorGUILayout.PropertyField(nameFilter); + EditorGUILayout.PropertyField(subMeshMask); + EditorGUI.indentLevel--; + } + + EditorGUILayout.PropertyField(useMaterialSmoothness); + GUI.enabled = !useMaterialSmoothness.boolValue; + EditorGUILayout.PropertyField(perSubMeshSmoothness); + if (perSubMeshSmoothness.boolValue) { + EditorGUILayout.PropertyField(subMeshSettings, new GUIContent("Smoothness Values"), true); + } else { + EditorGUILayout.PropertyField(smoothness); + } + GUI.enabled = isForwardPath; + EditorGUILayout.PropertyField(useMaterialNormalMap); + + if (useMaterialSmoothness.boolValue || perSubMeshSmoothness.boolValue || useMaterialNormalMap.boolValue) { + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Material Property Names", EditorStyles.miniBoldLabel); + if (useMaterialSmoothness.boolValue || perSubMeshSmoothness.boolValue) { + EditorGUILayout.PropertyField(materialSmoothnessMapPropertyName, new GUIContent("Smoothness Map", "The material property name for the smoothness map")); + EditorGUILayout.PropertyField(materialSmoothnessIntensityPropertyName, new GUIContent("Smoothness Intensity", "The material property name for the smoothness intensity")); + } + if (useMaterialNormalMap.boolValue) { + EditorGUILayout.PropertyField(materialNormalMapPropertyName, new GUIContent("NormalMap", "The material property name for the normal map")); + } + } + + EditorGUILayout.PropertyField(overrideGlobalSettings); + if (overrideGlobalSettings.boolValue) { + EditorGUI.indentLevel++; + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Apply Quality Preset:", GUILayout.Width(EditorGUIUtility.labelWidth)); + if (GUILayout.Button("Fast")) { + ApplyRaytracingPreset(RaytracingPreset.Fast); + } + if (GUILayout.Button("Medium")) { + ApplyRaytracingPreset(RaytracingPreset.Medium); + } + if (GUILayout.Button("High")) { + ApplyRaytracingPreset(RaytracingPreset.High); + } + if (GUILayout.Button("Superb")) { + ApplyRaytracingPreset(RaytracingPreset.Superb); + } + if (GUILayout.Button("Ultra")) { + ApplyRaytracingPreset(RaytracingPreset.Ultra); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.PropertyField(sampleCount); + EditorGUILayout.PropertyField(maxRayLength); + EditorGUILayout.PropertyField(thickness); + EditorGUILayout.PropertyField(binarySearchIterations); + EditorGUILayout.PropertyField(refineThickness); + if (refineThickness.boolValue) { + EditorGUILayout.PropertyField(thicknessFine); + } + EditorGUILayout.PropertyField(jitter); + EditorGUILayout.PropertyField(fresnel); + EditorGUILayout.PropertyField(decay); + EditorGUILayout.PropertyField(fuzzyness, new GUIContent("Fuzziness")); + EditorGUILayout.PropertyField(contactHardening); + EditorGUI.indentLevel--; + } + } + + serializedObject.ApplyModifiedProperties(); + } + + + void ApplyRaytracingPreset(RaytracingPreset preset) { + Reflections ssr = (Reflections)target; + ssr.ApplyRaytracingPreset(preset); + EditorUtility.SetDirty(ssr); + } + + } +} \ No newline at end of file diff --git a/Editor/ReflectionsEditor.cs.meta b/Editor/ReflectionsEditor.cs.meta new file mode 100644 index 0000000..670e77f --- /dev/null +++ b/Editor/ReflectionsEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9d5f488a96de4e9990356f3caab6a5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/RenderFeatureEditor.cs b/Editor/RenderFeatureEditor.cs new file mode 100644 index 0000000..50b9201 --- /dev/null +++ b/Editor/RenderFeatureEditor.cs @@ -0,0 +1,180 @@ +using UnityEngine; +using UnityEditor; + +namespace ShinySSRR { + + [CustomEditor(typeof(ShinySSRR))] + public class RenderFeatureEditor : Editor { + + SerializedProperty useDeferred, renderPassEvent, showInSceneView; + SerializedProperty smoothnessThreshold, reflectionsMultiplier, reflectionsMinIntensity, reflectionsMaxIntensity; + SerializedProperty downsampling, depthBias, outputMode, separationPos, lowPrecision, stopNaN; + SerializedProperty sampleCount, maxRayLength, thickness, binarySearchIterations, refineThickness, thicknessFine, decay, jitter, animatedJitter; + SerializedProperty fresnel, fuzzyness, contactHardening, minimumBlur; + SerializedProperty blurDownsampling, blurStrength, specularControl, specularSoftenPower, vignetteSize; + Reflections[] reflections; + public Texture bulbOnIcon, bulbOffIcon, deleteIcon, arrowRight; + + private void OnEnable() { + renderPassEvent = serializedObject.FindProperty("renderPassEvent"); + useDeferred = serializedObject.FindProperty("useDeferred"); + showInSceneView = serializedObject.FindProperty("showInSceneView"); + smoothnessThreshold = serializedObject.FindProperty("smoothnessThreshold"); + reflectionsMultiplier = serializedObject.FindProperty("reflectionsMultiplier"); + reflectionsMinIntensity = serializedObject.FindProperty("reflectionsMinIntensity"); + reflectionsMaxIntensity = serializedObject.FindProperty("reflectionsMaxIntensity"); + downsampling = serializedObject.FindProperty("downsampling"); + depthBias = serializedObject.FindProperty("depthBias"); + outputMode = serializedObject.FindProperty("outputMode"); + separationPos = serializedObject.FindProperty("separationPos"); + lowPrecision = serializedObject.FindProperty("lowPrecision"); + stopNaN = serializedObject.FindProperty("stopNaN"); + sampleCount = serializedObject.FindProperty("sampleCount"); + maxRayLength = serializedObject.FindProperty("maxRayLength"); + binarySearchIterations = serializedObject.FindProperty("binarySearchIterations"); + thickness = serializedObject.FindProperty("thickness"); + thicknessFine = serializedObject.FindProperty("thicknessFine"); + refineThickness = serializedObject.FindProperty("refineThickness"); + decay = serializedObject.FindProperty("decay"); + fresnel = serializedObject.FindProperty("fresnel"); + fuzzyness = serializedObject.FindProperty("fuzzyness"); + contactHardening = serializedObject.FindProperty("contactHardening"); + minimumBlur = serializedObject.FindProperty("minimumBlur"); + jitter = serializedObject.FindProperty("jitter"); + animatedJitter = serializedObject.FindProperty("animatedJitter"); + blurDownsampling = serializedObject.FindProperty("blurDownsampling"); + blurStrength = serializedObject.FindProperty("blurStrength"); + specularControl = serializedObject.FindProperty("specularControl"); + specularSoftenPower = serializedObject.FindProperty("specularSoftenPower"); + vignetteSize = serializedObject.FindProperty("vignetteSize"); + +#if UNITY_2020_1_OR_NEWER + reflections = FindObjectsOfType(true); +#else + reflections = FindObjectsOfType(); +#endif + } + + public override void OnInspectorGUI() { + + int reflectionsCount = reflections != null ? reflections.Length : 0; + EditorGUILayout.PropertyField(useDeferred); + EditorGUILayout.PropertyField(renderPassEvent); + EditorGUILayout.PropertyField(showInSceneView); + EditorGUILayout.PropertyField(downsampling); + if (downsampling.intValue > 1 && !useDeferred.boolValue) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(depthBias); + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(outputMode); + if (outputMode.intValue == (int)OutputMode.SideBySideComparison) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(separationPos); + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(lowPrecision); + EditorGUILayout.PropertyField(stopNaN, new GUIContent("Stop NaN")); + + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Raytracing Settings", EditorStyles.boldLabel); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Apply Quality Preset:", GUILayout.Width(EditorGUIUtility.labelWidth)); + ShinySSRR ssr = (ShinySSRR)target; + if (GUILayout.Button("Fast")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.Fast); + } + if (GUILayout.Button("Medium")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.Medium); + } + if (GUILayout.Button("High")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.High); + } + if (GUILayout.Button("Superb")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.Superb); + } + if (GUILayout.Button("Ultra")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.Ultra); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.PropertyField(sampleCount); + EditorGUILayout.PropertyField(maxRayLength); + EditorGUILayout.PropertyField(thickness); + EditorGUILayout.PropertyField(binarySearchIterations); + EditorGUILayout.PropertyField(refineThickness); + if (refineThickness.boolValue) { + EditorGUILayout.PropertyField(thicknessFine); + } + EditorGUILayout.PropertyField(jitter); + EditorGUILayout.PropertyField(animatedJitter); + + EditorGUILayout.PropertyField(smoothnessThreshold, new GUIContent("Smoothness Threshold", "Minimum smoothness to receive reflections")); + EditorGUILayout.PropertyField(reflectionsMultiplier, new GUIContent("Global Multiplier")); + EditorGUILayout.PropertyField(reflectionsMinIntensity, new GUIContent("Min Intensity")); + EditorGUILayout.PropertyField(reflectionsMaxIntensity, new GUIContent("Max Intensity")); + EditorGUILayout.PropertyField(fresnel); + EditorGUILayout.PropertyField(decay); + EditorGUILayout.PropertyField(specularControl); + if (specularControl.boolValue) { + EditorGUILayout.PropertyField(specularSoftenPower); + } + EditorGUILayout.PropertyField(vignetteSize); + + EditorGUILayout.PropertyField(fuzzyness, new GUIContent("Fuzziness")); + EditorGUILayout.PropertyField(contactHardening); + EditorGUILayout.PropertyField(minimumBlur); + EditorGUILayout.PropertyField(blurDownsampling); + EditorGUILayout.PropertyField(blurStrength); + + if (reflectionsCount > 0) { + if (!ShinySSRR.isDeferredActive) { + EditorGUILayout.HelpBox("Some settings may be overriden by Reflections scripts on specific objects.", MessageType.Info); + } + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Reflections scripts in Scene", EditorStyles.helpBox); + if (ShinySSRR.isDeferredActive) { + EditorGUILayout.HelpBox("In deferred rendering path, only global SSR settings are used.", MessageType.Warning); + } + for (int k = 0; k < reflectionsCount; k++) { + Reflections refl = reflections[k]; + if (refl == null) continue; + EditorGUILayout.BeginHorizontal(); + GUI.enabled = refl.gameObject.activeInHierarchy; + if (GUILayout.Button(new GUIContent(refl.enabled ? bulbOnIcon : bulbOffIcon, "Toggle on/off this reflection"), EditorStyles.miniButton, GUILayout.Width(35))) { + refl.enabled = !refl.enabled; + } + GUI.enabled = true; + if (GUILayout.Button(new GUIContent(deleteIcon, "Remove this reflection script"), EditorStyles.miniButton, GUILayout.Width(35))) { + if (EditorUtility.DisplayDialog("Confirmation", "Remove the reflection script on " + refl.gameObject.name + "?", "Ok", "Cancel")) { + DestroyImmediate(refl); + reflections[k] = null; + continue; + } + } + if (GUILayout.Button(new GUIContent(arrowRight, "Select this reflection script"), EditorStyles.miniButton, GUILayout.Width(35), GUILayout.Width(40))) { + Selection.activeObject = refl.gameObject; + EditorGUIUtility.PingObject(refl.gameObject); + GUIUtility.ExitGUI(); + } + GUI.enabled = refl.isActiveAndEnabled; + if (!refl.gameObject.activeInHierarchy) { + GUILayout.Label(refl.name + " (hidden gameobject)"); + } else { + GUILayout.Label(refl.name); + } + GUI.enabled = true; + EditorGUILayout.EndHorizontal(); + } + } else if (reflectionsCount == 0) { + if (!ShinySSRR.isDeferredActive) { + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Reflections in Scene", EditorStyles.helpBox); + EditorGUILayout.HelpBox("In forward rendering path, add a Reflections script to any object or group of objects that you want to get reflections.", MessageType.Info); + } + + } + + } + + } +} \ No newline at end of file diff --git a/Editor/RenderFeatureEditor.cs.meta b/Editor/RenderFeatureEditor.cs.meta new file mode 100644 index 0000000..ba2a59b --- /dev/null +++ b/Editor/RenderFeatureEditor.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 13896aabf7b59431f81d75f56d7dece0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - bulbOnIcon: {fileID: 2800000, guid: dd840e0a27f8e4bb5844722993c541be, type: 3} + - bulbOffIcon: {fileID: 2800000, guid: 7f28d2ee7b6104945a9761f8a6879afc, type: 3} + - deleteIcon: {fileID: 2800000, guid: d156c5754f844469b8874c1c5fb37e8b, type: 3} + - arrowRight: {fileID: 2800000, guid: cb3a0e4282dfb452884cb8f63e7975f5, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources.meta b/Editor/Resources.meta new file mode 100644 index 0000000..e07b515 --- /dev/null +++ b/Editor/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48f41183a3a11478dbfd6fa43108a255 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources/arrowRight.png b/Editor/Resources/arrowRight.png new file mode 100644 index 0000000..2c2168d Binary files /dev/null and b/Editor/Resources/arrowRight.png differ diff --git a/Editor/Resources/arrowRight.png.meta b/Editor/Resources/arrowRight.png.meta new file mode 100644 index 0000000..074abac --- /dev/null +++ b/Editor/Resources/arrowRight.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: cb3a0e4282dfb452884cb8f63e7975f5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources/bulbOff.png b/Editor/Resources/bulbOff.png new file mode 100644 index 0000000..c3a530d Binary files /dev/null and b/Editor/Resources/bulbOff.png differ diff --git a/Editor/Resources/bulbOff.png.meta b/Editor/Resources/bulbOff.png.meta new file mode 100644 index 0000000..9513af5 --- /dev/null +++ b/Editor/Resources/bulbOff.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: 7f28d2ee7b6104945a9761f8a6879afc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources/bulbOn.png b/Editor/Resources/bulbOn.png new file mode 100644 index 0000000..5d9abb9 Binary files /dev/null and b/Editor/Resources/bulbOn.png differ diff --git a/Editor/Resources/bulbOn.png.meta b/Editor/Resources/bulbOn.png.meta new file mode 100644 index 0000000..16b3fec --- /dev/null +++ b/Editor/Resources/bulbOn.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: dd840e0a27f8e4bb5844722993c541be +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources/delete.png b/Editor/Resources/delete.png new file mode 100644 index 0000000..86acef2 Binary files /dev/null and b/Editor/Resources/delete.png differ diff --git a/Editor/Resources/delete.png.meta b/Editor/Resources/delete.png.meta new file mode 100644 index 0000000..e51aa7c --- /dev/null +++ b/Editor/Resources/delete.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: d156c5754f844469b8874c1c5fb37e8b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/SubMeshSettingsDrawer.cs b/Editor/SubMeshSettingsDrawer.cs new file mode 100644 index 0000000..62900ef --- /dev/null +++ b/Editor/SubMeshSettingsDrawer.cs @@ -0,0 +1,56 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace ShinySSRR { + + [CustomPropertyDrawer(typeof(SubMeshSettingsData))] + public class SubMeshSettingsDrawer : PropertyDrawer { + + public override float GetPropertyHeight(SerializedProperty prop, GUIContent label) { + GUIStyle style = GUI.skin.GetStyle("label"); + float lineHeight = style.CalcHeight(label, EditorGUIUtility.currentViewWidth); + return lineHeight; + } + + + public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) { + Rect firstColumn = position; + firstColumn.width = EditorGUIUtility.labelWidth - firstColumn.x; + Rect secondColumn = position; + secondColumn.x = EditorGUIUtility.labelWidth + 5; + secondColumn.width = position.width - secondColumn.x; + int propIndex = GetArrayIndex(prop); + Reflections refl = (Reflections)prop.serializedObject.targetObject; + if (refl.ssrRenderers != null && refl.ssrRenderers.Count == 1 && refl.ssrRenderers[0].originalMaterials != null) { + List materials = refl.ssrRenderers[0].originalMaterials; + int matIndex = propIndex; + if (matIndex >= materials.Count) { + matIndex = materials.Count - 1; + } + EditorGUI.LabelField(firstColumn, materials[matIndex].name); + } else { + EditorGUI.LabelField(firstColumn, "SubMesh " + propIndex); + } + EditorGUI.PropertyField(secondColumn, prop.FindPropertyRelative("smoothness"), GUIContent.none); + } + + /// + /// Returns the index of this property in the array + /// + int GetArrayIndex(SerializedProperty property) { + string s = property.propertyPath; + int bracket = s.LastIndexOf("["); + if (bracket >= 0) { + string indexStr = s.Substring(bracket + 1, s.Length - bracket - 2); + int index; + if (int.TryParse(indexStr, out index)) { + return index; + } + } + return 0; + } + + } + +} diff --git a/Editor/SubMeshSettingsDrawer.cs.meta b/Editor/SubMeshSettingsDrawer.cs.meta new file mode 100644 index 0000000..e9ef767 --- /dev/null +++ b/Editor/SubMeshSettingsDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b3f27cbc12734736a0815f99ff123c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..7839d69 --- /dev/null +++ b/README.txt @@ -0,0 +1,103 @@ +************************************** +* SHINY - URP SSRR * +* Created by Kronnect * +* README FILE * +************************************** + + +Notice about Universal Rendering Pipeline +----------------------------------------- +This package is designed for URP. +It requires Unity 2019.4 and URP 7.2 or later +To install the plugin correctly: + +1) Make sure you have Universal Rendering Pipeline asset installed (from Package Manager). +2) Go to Project Settings / Graphics. +3) Double click the Universal Rendering Pipeline asset. +4) Make sure the "Depth Texture" option is enabled. +5) Double click the Forward Renderer asset. +6) Click "+" to add the Shiny SSRR Renderer Feature to the list of the Forward Renderer Features. + + +Help & Support Forum +-------------------- + +Check the Documentation (PDF) for detailed instructions: + +Have any question or issue? +* Email: contact@kronnect.com +* Support Forum: https://kronnect.com +* Twitter: @Kronnect + +If you like Shiny, please rate it on the Asset Store. It encourages us to keep improving it! Thanks! + + +Future updates +-------------- + +All our assets follow an incremental development process by which a few beta releases are published on our support forum (kronnect.com). +We encourage you to signup and engage our forum. The forum is the primary support and feature discussions medium. + +Of course, all updates of the asset will be eventually available on the Asset Store. + + + +More Cool Assets! +----------------- +Check out our other assets here: +https://assetstore.unity.com/publishers/15018 + + + +Version history +--------------- + +Version 4.1.1 +- Internal improvements + +Version 4.1 +- Added "Smoothness Threshold" parameter to global settings + +Version 4.0.1 +- Added compatibility with third-party shaders (Ciconia) + +Version 4.0 +- Added raytracing quality presets +- Added "Refine Thickness" option +- Replaced "Step Size" with "Max Ray Length" +- Added "Stop NaN" option which can prevents artifacts when blending reflections due to pixel values out of range +- Added "Blur Strength" option +- Fixes and minor improvements + +Version 3.0 +- Redesigned reflection blur with simpler settings and contact hardening option +- New pyramid-blur for contact hardening/distance blur +- Rearranged inspector options +- Material smoothness now reduces fuzzyness + +Version 2.6 +- Ability to customize the material property names for smoothness map & normal map in Reflections script + +Version 2.5 +- Added support for smoothness map when using metallic workflow in forward rendering path + +Version 2.4 +- Max Reflections Multiplier increased to 2 +- Added Reflections Min and Max clamping parameters + +Version 2.3.1 +- Improved Reflections component UI interface + +Version 2.3 +- Smoothness can now be set per submesh + +Version 2.2 +- In forward rendering mode, material alpha color now influence reflection intensity. This allows further customization when using objects with different materials, as you can customize reflections per material now by using different alpha values. + +Version 2.1 16-FEB-2021 +- Added "Animated Jitter" option +- Reflections are now listed in the inspector of the Shiny SSRR render feature + +Version 2.0 15-FEB-2021 +- First release to the Asset Store +- Added support for deferred rendering path in URP 12 diff --git a/README.txt.meta b/README.txt.meta new file mode 100644 index 0000000..b73383f --- /dev/null +++ b/README.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afa59e23243a84ed78c2b40071a90760 +timeCreated: 1542901568 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime.meta b/Runtime.meta new file mode 100644 index 0000000..c2a30b0 --- /dev/null +++ b/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9f7360e206d716649bf5d8196aad9d9c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Pipelines.meta b/Runtime/Pipelines.meta new file mode 100644 index 0000000..b554265 --- /dev/null +++ b/Runtime/Pipelines.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cdd31f63710364ca3b489d1b50280ebc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Pipelines/URP.meta b/Runtime/Pipelines/URP.meta new file mode 100644 index 0000000..908367c --- /dev/null +++ b/Runtime/Pipelines/URP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 961e059b026ca477f977e9bcda8970ba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Pipelines/URP/ForwardRenderer.asset b/Runtime/Pipelines/URP/ForwardRenderer.asset new file mode 100644 index 0000000..1b47a0e --- /dev/null +++ b/Runtime/Pipelines/URP/ForwardRenderer.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: ForwardRenderer + m_EditorClassIdentifier: + m_RendererFeatures: + - {fileID: 3276129570691841282} + m_RendererFeatureMap: 027d3da37c26772d + postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} + shaders: + blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} + copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + screenSpaceShadowPS: {fileID: 4800000, guid: 0f854b35a0cf61a429bd5dcfea30eddd, + type: 3} + samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + tileDepthInfoPS: {fileID: 0} + tileDeferredPS: {fileID: 0} + stencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + materialErrorPS: {fileID: 4800000, guid: 5fd9a8feb75a4b5894c241777f519d4e, type: 3} + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 0 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 0 + m_AccurateGbufferNormals: 0 +--- !u!114 &3276129570691841282 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cf716a1be50b448e7b1d1968ab734946, type: 3} + m_Name: ShinySSRR + m_EditorClassIdentifier: + m_Active: 1 + renderPassEvent: 500 + useDeferred: 0 + showInSceneView: 1 + downsampling: 1 + depthBias: 0.01 + outputMode: 0 + separationPos: 0.5 + lowPrecision: 0 + stopNaN: 0 + sampleCount: 16 + stepSize: 0.1 + maxRayLength: 15 + thickness: 0.3 + binarySearchIterations: 6 + refineThickness: 0 + thicknessFine: 0.05 + jitter: 0.3 + animatedJitter: 1 + smoothnessThreshold: 0 + reflectionsMultiplier: 1 + reflectionsMinIntensity: 0 + reflectionsMaxIntensity: 1 + fresnel: 0.75 + decay: 2 + specularControl: 1 + specularSoftenPower: 15 + vignetteSize: 1.1 + fuzzyness: 0 + contactHardening: 0 + minimumBlur: 0.25 + blurDownsampling: 1 + blurStrength: {x: 1, y: 1} diff --git a/Runtime/Pipelines/URP/ForwardRenderer.asset.meta b/Runtime/Pipelines/URP/ForwardRenderer.asset.meta new file mode 100644 index 0000000..f908f68 --- /dev/null +++ b/Runtime/Pipelines/URP/ForwardRenderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca27235afa4bd4376a68839dc070d9f5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Pipelines/URP/UniversalRenderPipelineAsset.asset b/Runtime/Pipelines/URP/UniversalRenderPipelineAsset.asset new file mode 100644 index 0000000..efc68c0 --- /dev/null +++ b/Runtime/Pipelines/URP/UniversalRenderPipelineAsset.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3} + m_Name: UniversalRenderPipelineAsset + m_EditorClassIdentifier: + k_AssetVersion: 5 + k_AssetPreviousVersion: 5 + m_RendererType: 1 + m_RendererData: {fileID: 0} + m_RendererDataList: + - {fileID: 11400000, guid: ca27235afa4bd4376a68839dc070d9f5, type: 2} + m_DefaultRendererIndex: 0 + m_RequireDepthTexture: 1 + m_RequireOpaqueTexture: 0 + m_OpaqueDownsampling: 1 + m_SupportsTerrainHoles: 0 + m_SupportsHDR: 1 + m_MSAA: 2 + m_RenderScale: 1 + m_MainLightRenderingMode: 1 + m_MainLightShadowsSupported: 1 + m_MainLightShadowmapResolution: 2048 + m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsPerObjectLimit: 4 + m_AdditionalLightShadowsSupported: 0 + m_AdditionalLightsShadowmapResolution: 512 + m_ShadowDistance: 50 + m_ShadowCascades: 2 + m_Cascade2Split: 0.25 + m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467} + m_ShadowDepthBias: 1 + m_ShadowNormalBias: 1 + m_SoftShadowsSupported: 1 + m_UseSRPBatcher: 1 + m_SupportsDynamicBatching: 0 + m_MixedLightingSupported: 1 + m_DebugLevel: 0 + m_UseAdaptivePerformance: 0 + m_PostProcessingFeatureSet: 0 + m_ColorGradingMode: 0 + m_ColorGradingLutSize: 32 + m_ShadowType: 1 + m_LocalShadowsSupported: 0 + m_LocalShadowsAtlasResolution: 256 + m_MaxPixelLights: 0 + m_ShadowAtlasResolution: 256 + m_ShaderVariantLogLevel: 0 diff --git a/Runtime/Pipelines/URP/UniversalRenderPipelineAsset.asset.meta b/Runtime/Pipelines/URP/UniversalRenderPipelineAsset.asset.meta new file mode 100644 index 0000000..568f917 --- /dev/null +++ b/Runtime/Pipelines/URP/UniversalRenderPipelineAsset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 25ff2656f0971428f92ec3c0985d9c19 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources.meta b/Runtime/Resources.meta new file mode 100644 index 0000000..956eddd --- /dev/null +++ b/Runtime/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8dba4c348fa3a43c096bbbabc14d44b8 +folderAsset: yes +timeCreated: 1542876301 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR.meta b/Runtime/Resources/SSR.meta new file mode 100644 index 0000000..932440a --- /dev/null +++ b/Runtime/Resources/SSR.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 544859eb1711348f3888a2d91d804bd4 +folderAsset: yes +timeCreated: 1542893576 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR/SSR.shader b/Runtime/Resources/SSR/SSR.shader new file mode 100644 index 0000000..3fb4a72 --- /dev/null +++ b/Runtime/Resources/SSR/SSR.shader @@ -0,0 +1,138 @@ +Shader "Hidden/Kronnect/SSR_URP" { +Properties { + _BumpMap("Normal Map", 2D) = "bump" {} + _SmoothnessMap("Smoothness Map", 2D) = "white" {} + _Color("", Color) = (1,1,1) + _NoiseTex("", any) = "" {} + _SSRSettings("", Vector) = (1,1,1,1) + _SSRSettings2("", Vector) = (1,1,1,1) +} + +HLSLINCLUDE + #pragma target 3.0 +ENDHLSL + + +Subshader { + + Tags { "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" "DisableBatching"="True" "ForceNoShadowCasting"="True" } + + HLSLINCLUDE + #pragma target 3.0 + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Filtering.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/PostProcessing/Common.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl" + #include "SSR_Common.hlsl" + ENDHLSL + + Pass { // 0: Copy exact + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCopyExact + #include "SSR_Blends.hlsl" + ENDHLSL + } + + Pass { // 1: Surface reflection + HLSLPROGRAM + #pragma vertex VertSSRSurf + #pragma fragment FragSSRSurf + #pragma multi_compile_local _ SSR_NORMALMAP + #pragma multi_compile_local _ SSR_SMOOTHNESSMAP + #pragma multi_compile_local _ SSR_JITTER + #pragma multi_compile_local _ SSR_THICKNESS_FINE + #include "SSR_Surface_Pass.hlsl" + ENDHLSL + } + + Pass { // 2 Resolve + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragResolve + #include "SSR_Solve.hlsl" + ENDHLSL + } + + Pass { // 3 Blur horizontally + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertBlur + #pragma fragment FragBlur + #pragma multi_compile_local _ SSR_DENOISE + #define SSR_BLUR_HORIZ + #include "SSR_Blur.hlsl" + ENDHLSL + } + + Pass { // 4 Blur vertically + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertBlur + #pragma fragment FragBlur + #pragma multi_compile_local _ SSR_DENOISE + #include "SSR_Blur.hlsl" + ENDHLSL + } + + Pass { // 5 Debug + ZWrite Off ZTest Always Cull Off + Blend One Zero + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCopyExact + #include "SSR_Blends.hlsl" + ENDHLSL + } + + Pass { // 6 Combine + ZWrite Off ZTest Always Cull Off + Blend One One // precomputed alpha in Resolve pass + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCombine + #include "SSR_Blends.hlsl" + ENDHLSL + } + + Pass { // 7 Combine with compare + ZWrite Off ZTest Always Cull Off + Blend One One // precomputed alpha in Resolve pass + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCombineWithCompare + #include "SSR_Blends.hlsl" + ENDHLSL + } + + Pass { // 8 Deferred pass + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragSSR + #pragma multi_compile_local _ SSR_JITTER + #pragma multi_compile_local _ SSR_THICKNESS_FINE + #pragma multi_compile _ _GBUFFER_NORMALS_OCT + #include "SSR_GBuf_Pass.hlsl" + ENDHLSL + } + + Pass { // 9: Copy with bilinear filter + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCopy + #include "SSR_Blends.hlsl" + ENDHLSL + } + +} +FallBack Off +} diff --git a/Runtime/Resources/SSR/SSR.shader.meta b/Runtime/Resources/SSR/SSR.shader.meta new file mode 100644 index 0000000..1766194 --- /dev/null +++ b/Runtime/Resources/SSR/SSR.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3dc251e8adb204285a24311c59c0dc71 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR/SSR_Blends.hlsl b/Runtime/Resources/SSR/SSR_Blends.hlsl new file mode 100644 index 0000000..dd41e21 --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Blends.hlsl @@ -0,0 +1,123 @@ +#ifndef SSR_BLENDS +#define SSR_BLENDS + + // Copyright 2021 Kronnect - All Rights Reserved. + + TEXTURE2D_X(_MainTex); + float4 _MainTex_TexelSize; + float4 _SSRSettings4; + #define SEPARATION_POS _SSRSettings4.x + float _MinimumBlur; + + TEXTURE2D_X(_RayCastRT); + TEXTURE2D_X(_ReflectionsRT); + TEXTURE2D_X(_BlurRTMip0); + TEXTURE2D_X(_BlurRTMip1); + TEXTURE2D_X(_BlurRTMip2); + TEXTURE2D_X(_BlurRTMip3); + TEXTURE2D_X(_BlurRTMip4); + + struct AttributesFS { + float4 positionHCS : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsSSR { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + + VaryingsSSR VertSSR(AttributesFS input) { + VaryingsSSR output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + output.positionCS = float4(input.positionHCS.xyz, 1.0); + + #if UNITY_UV_STARTS_AT_TOP + output.positionCS.y *= -1; + #endif + + output.uv = input.uv; + return output; + } + + + half4 FragCopy (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + i.uv = SSRStereoTransformScreenSpaceTex(i.uv); + half4 pixel = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, i.uv); + return pixel; + } + + half4 FragCopyExact (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + i.uv = SSRStereoTransformScreenSpaceTex(i.uv); + half4 pixel = SAMPLE_TEXTURE2D_X(_MainTex, sampler_PointClamp, i.uv); + pixel = max(pixel, 0.0); + return pixel; + } + + half4 Combine(VaryingsSSR i) { + + // exclude skybox from blur bleed + float depth = SAMPLE_TEXTURE2D_X(_CameraDepthTexture, sampler_PointClamp, i.uv).r; + #if UNITY_REVERSED_Z + depth = 1.0 - depth; + #endif + if (depth >= 1.0) return float4(0,0,0,0); + + half4 mip0 = SAMPLE_TEXTURE2D_X(_ReflectionsRT, sampler_LinearClamp, i.uv); + half4 mip1 = SAMPLE_TEXTURE2D_X(_BlurRTMip0, sampler_LinearClamp, i.uv); + half4 mip2 = SAMPLE_TEXTURE2D_X(_BlurRTMip1, sampler_LinearClamp, i.uv); + half4 mip3 = SAMPLE_TEXTURE2D_X(_BlurRTMip2, sampler_LinearClamp, i.uv); + half4 mip4 = SAMPLE_TEXTURE2D_X(_BlurRTMip3, sampler_LinearClamp, i.uv); + half4 mip5 = SAMPLE_TEXTURE2D_X(_BlurRTMip4, sampler_LinearClamp, i.uv); + + half r = mip5.a; + half4 reflData = SAMPLE_TEXTURE2D_X(_RayCastRT, sampler_PointClamp, i.uv); + if (reflData.z > 0) { + r = min(reflData.z, r); + } + + half roughness = clamp(r + _MinimumBlur, 0, 5); + + half w0 = max(0, 1.0 - roughness); + half w1 = max(0, 1.0 - abs(roughness - 1.0)); + half w2 = max(0, 1.0 - abs(roughness - 2.0)); + half w3 = max(0, 1.0 - abs(roughness - 3.0)); + half w4 = max(0, 1.0 - abs(roughness - 4.0)); + half w5 = max(0, 1.0 - abs(roughness - 5.0)); + + half4 refl = mip0 * w0 + mip1 * w1 + mip2 * w2 + mip3 * w3 + mip4 * w4 + mip5 * w5; + return refl; + } + + half4 FragCombine (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + i.uv = SSRStereoTransformScreenSpaceTex(i.uv); + return Combine(i); + } + + + half4 FragCombineWithCompare (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + i.uv = SSRStereoTransformScreenSpaceTex(i.uv); + if (i.uv.x < SEPARATION_POS - _MainTex_TexelSize.x * 3) { + return 0; + } else if (i.uv.x < SEPARATION_POS + _MainTex_TexelSize.x * 3) { + return 1.0; + } else { + return Combine(i); + } + } + +#endif // SSR_BLENDS \ No newline at end of file diff --git a/Runtime/Resources/SSR/SSR_Blends.hlsl.meta b/Runtime/Resources/SSR/SSR_Blends.hlsl.meta new file mode 100644 index 0000000..9ca423e --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Blends.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 744b9a39168214ae0a406965afb5f3d5 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR/SSR_Blur.hlsl b/Runtime/Resources/SSR/SSR_Blur.hlsl new file mode 100644 index 0000000..e4fb4d0 --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Blur.hlsl @@ -0,0 +1,105 @@ +#ifndef SSR_BLUR +#define SSR_BLUR + + // Copyright 2021 Kronnect - All Rights Reserved. + TEXTURE2D_X(_MainTex); + float4 _MainTex_TexelSize; + TEXTURE2D_X(_RayCastRT); + float4 _SSRSettings2; + #define BLUR_MULTIPLIER _SSRSettings2.y + float4 _SSRSettings4; + #define DENOISE_POWER _SSRSettings4.w + float2 _SSRBlurStrength; + #define BLUR_STRENGTH_HORIZ _SSRBlurStrength.x + #define BLUR_STRENGTH_VERT _SSRBlurStrength.y + +#if defined(UNITY_SINGLE_PASS_STEREO) + #define SSR_VERTEX_CROSS_DATA + #define SSR_VERTEX_OUTPUT_GAUSSIAN_UV(o) + #if defined(SSR_BLUR_HORIZ) + #define SSR_FRAG_SETUP_GAUSSIAN_UV(i) float2 offset1 = float2(_MainTex_TexelSize.x * 1.3846153846 * BLUR_STRENGTH_HORIZ, 0); float2 offset2 = float2(_MainTex_TexelSize.x * 3.2307692308 * BLUR_STRENGTH_HORIZ, 0); + #else + #define SSR_FRAG_SETUP_GAUSSIAN_UV(i) float2 offset1 = float2(0, _MainTex_TexelSize.y * 1.3846153846 * BLUR_STRENGTH_VERT); float2 offset2 = float2(0, _MainTex_TexelSize.y * 3.2307692308 * BLUR_STRENGTH_VERT); + #endif + +#else + #define SSR_VERTEX_CROSS_DATA float2 offset1 : TEXCOORD1; float2 offset2 : TEXCOORD2; + #if defined(SSR_BLUR_HORIZ) + #define SSR_VERTEX_OUTPUT_GAUSSIAN_UV(o) o.offset1 = float2(_MainTex_TexelSize.x * 1.3846153846 * BLUR_STRENGTH_HORIZ, 0); o.offset2 = float2(_MainTex_TexelSize.x * 3.2307692308 * BLUR_STRENGTH_HORIZ, 0); + #else + #define SSR_VERTEX_OUTPUT_GAUSSIAN_UV(o) o.offset1 = float2(0, _MainTex_TexelSize.y * 1.3846153846 * BLUR_STRENGTH_VERT); o.offset2 = float2(0, _MainTex_TexelSize.y * 3.2307692308 * BLUR_STRENGTH_VERT); + #endif + #define SSR_FRAG_SETUP_GAUSSIAN_UV(i) float2 offset1 = i.offset1; float2 offset2 = i.offset2; + +#endif + + struct AttributesFS { + float4 positionHCS : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsCross { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + SSR_VERTEX_CROSS_DATA + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + + VaryingsCross VertBlur(AttributesFS input) { + VaryingsCross output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + output.positionCS = float4(input.positionHCS.xyz, 1.0); + + #if UNITY_UV_STARTS_AT_TOP + output.positionCS.y *= -1; + #endif + + output.uv = input.uv; + + SSR_VERTEX_OUTPUT_GAUSSIAN_UV(output) + + return output; + } + + + half4 FragBlur (VaryingsCross input): SV_Target { + + UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + input.uv = SSRStereoTransformScreenSpaceTex(input.uv); + SSR_FRAG_SETUP_GAUSSIAN_UV(input) + + float2 uv = input.uv; + + half4 c0 = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv); + half4 c1 = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv + offset1); + half4 c2 = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv - offset1); + half4 c3 = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv + offset2); + half4 c4 = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv - offset2); + + #if SSR_DENOISE + half l0 = abs(getLuma(c0.rgb)); + half l1 = abs(getLuma(c1.rgb)); + half l2 = abs(getLuma(c2.rgb)); + half l3 = abs(getLuma(c3.rgb)); + half l4 = abs(getLuma(c4.rgb)); + + half ml = (l0+l1+l2+l3+l4) * 0.2; + c0.rgb *= pow( (1.0 + min(ml, l0)) / (1.0 + l0) , DENOISE_POWER); + c1.rgb *= pow( (1.0 + min(ml, l1)) / (1.0 + l1) , DENOISE_POWER); + c2.rgb *= pow( (1.0 + min(ml, l2)) / (1.0 + l2) , DENOISE_POWER); + c3.rgb *= pow( (1.0 + min(ml, l3)) / (1.0 + l3) , DENOISE_POWER); + c4.rgb *= pow( (1.0 + min(ml, l4)) / (1.0 + l4) , DENOISE_POWER); + #endif + + half4 blurred = c0 * 0.2270270270 + (c1 + c2) * 0.3162162162 + (c3 + c4) * 0.0702702703; + return blurred; + } + +#endif // SSR_BLUR \ No newline at end of file diff --git a/Runtime/Resources/SSR/SSR_Blur.hlsl.meta b/Runtime/Resources/SSR/SSR_Blur.hlsl.meta new file mode 100644 index 0000000..d3264be --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Blur.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 22f6b60d67e3646a5af5737d10b8b4d8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR/SSR_Common.hlsl b/Runtime/Resources/SSR/SSR_Common.hlsl new file mode 100644 index 0000000..f089a4f --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Common.hlsl @@ -0,0 +1,17 @@ +#ifndef SSR_COMMON +#define SSR_COMMON + + // XR is not supported but we leave this macro for future uses + #define SSRStereoTransformScreenSpaceTex(x) UnityStereoTransformScreenSpaceTex(x) + //#define SSRStereoTransformScreenSpaceTex(x) x + + #define dot2(x) dot(x, x) + + inline half getLuma(float3 rgb) { + const half3 lum = float3(0.299, 0.587, 0.114); + return dot(rgb, lum); + } + + + +#endif // SSR_BLUR \ No newline at end of file diff --git a/Runtime/Resources/SSR/SSR_Common.hlsl.meta b/Runtime/Resources/SSR/SSR_Common.hlsl.meta new file mode 100644 index 0000000..291e423 --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Common.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4a124b76f6f9948658b94b56c17c451b +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl b/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl new file mode 100644 index 0000000..68ffeba --- /dev/null +++ b/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl @@ -0,0 +1,216 @@ +#ifndef SSR_GBUF_PASS +#define SSR_GBUF_PASS + + // Copyright 2021 Kronnect - All Rights Reserved. + TEXTURE2D(_NoiseTex); + float4 _NoiseTex_TexelSize; + + float4 _MaterialData; + #define SMOOTHNESS _MaterialData.x + #define FRESNEL _MaterialData.y + #define FUZZYNESS _MaterialData.z + #define DECAY _MaterialData.w + + float4 _SSRSettings; + #define THICKNESS _SSRSettings.x + #define SAMPLES _SSRSettings.y + #define BINARY_SEARCH_ITERATIONS _SSRSettings.z + #define MAX_RAY_LENGTH _SSRSettings.w + + float2 _SSRSettings5; + #define REFLECTIONS_THRESHOLD _SSRSettings5.y + +#if SSR_THICKNESS_FINE + #define THICKNESS_FINE _SSRSettings5.x +#else + #define THICKNESS_FINE THICKNESS +#endif + + float4 _SSRSettings2; + #define JITTER _SSRSettings2.x + #define CONTACT_HARDENING _SSRSettings2.y + + float4 _SSRSettings3; + #define INPUT_SIZE _SSRSettings3.xy + #define GOLDEN_RATIO_ACUM _SSRSettings3.z + #define DEPTH_BIAS _SSRSettings3.w + + float4x4 _WorldToViewDir; + + TEXTURE2D_X(_GBuffer2); + + + + struct AttributesFS { + float4 positionHCS : POSITION; + float4 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsSSR { + float4 positionCS : SV_POSITION; + float4 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + + VaryingsSSR VertSSR(AttributesFS input) { + VaryingsSSR output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + output.positionCS = float4(input.positionHCS.xyz, 1.0); + + #if UNITY_UV_STARTS_AT_TOP + output.positionCS.y *= -1; + #endif + + output.uv = input.uv; + float4 projPos = output.positionCS * 0.5; + projPos.xy = projPos.xy + projPos.w; + output.uv.zw = projPos.xy; + return output; + } + + inline float GetLinearDepth(float2 uv) { + float rawDepth = SAMPLE_TEXTURE2D_X_LOD(_CameraDepthTexture, sampler_CameraDepthTexture, SSRStereoTransformScreenSpaceTex(uv), 0).r; + return LinearEyeDepth(rawDepth, _ZBufferParams); + } + + + float4 SSR_Pass(float2 uv, float3 normalVS, float3 rayStart, float smoothness) { + + float3 viewDirVS = normalize(rayStart); + float3 rayDir = reflect( viewDirVS, normalVS ); + + // if ray is toward the camera, early exit (optional) + //if (rayDir.z < 0) return 0.0.xxxx; + + float rayLength = MAX_RAY_LENGTH; + + float3 rayEnd = rayStart + rayDir * rayLength; + if (rayEnd.z < _ProjectionParams.y) { + rayLength = (rayStart.z - _ProjectionParams.y) / rayDir.z; + } + rayEnd = rayStart + rayDir * rayLength; + + float4 sposStart = mul(unity_CameraProjection, float4(rayStart, 1.0)); + float4 sposEnd = mul(unity_CameraProjection, float4(rayEnd, 1.0)); + float k0 = rcp(sposStart.w); + float q0 = rayStart.z * k0; + float k1 = rcp(sposEnd.w); + float q1 = rayEnd.z * k1; + float4 p = float4(uv, q0, k0); + + // length in pixels + float2 uv1 = (sposEnd.xy * rcp(rayEnd.z) + 1.0) * 0.5; + float2 duv = uv1 - uv; + float2 duvPixel = abs(duv * INPUT_SIZE); + float pixelDistance = max(duvPixel.x, duvPixel.y); + pixelDistance = max(1, pixelDistance); + int sampleCount = (int)SAMPLES; + float scale = max(1, SAMPLES * rcp(pixelDistance)); + sampleCount = (int)(sampleCount * rcp(scale)); + float4 pincr = float4(duv, q1-q0, k1-k0) * rcp(sampleCount); + + #if SSR_JITTER + float jitter = SAMPLE_TEXTURE2D(_NoiseTex, sampler_PointRepeat, uv * INPUT_SIZE * _NoiseTex_TexelSize.xy + GOLDEN_RATIO_ACUM).r; + pincr *= 1.0 + jitter * JITTER; + p += pincr * (jitter * JITTER); + #endif + + float collision = 0; + float dist = 0; + float zdist = 0; + + UNITY_LOOP + for (int k = 0; k < sampleCount; k++) { + p += pincr; + if (any(floor(p.xy)!=0)) return 0.0.xxxx; // exit if out of screen space + float sceneDepth = GetLinearDepth(p.xy); + float pz = p.z / p.w; + float depthDiff = pz - sceneDepth; + if (depthDiff > 0 && depthDiff < THICKNESS) { + float4 origPincr = pincr; + p -= pincr; + float reduction = 1.0; + UNITY_LOOP + for (int j = 0; j < BINARY_SEARCH_ITERATIONS; j++) { + reduction *= 0.5; + p += pincr * reduction; + sceneDepth = GetLinearDepth(p.xy); + pz = p.z / p.w; + depthDiff = sceneDepth - pz; + pincr = sign(depthDiff) * origPincr; + } +#if SSR_THICKNESS_FINE + if (abs(depthDiff) < THICKNESS_FINE) +#endif + { + float hitAccuracy = 1.0 - abs(depthDiff) / THICKNESS_FINE; + zdist = (pz - rayStart.z) / (0.0001 + rayEnd.z - rayStart.z); + float rayFade = 1.0 - saturate(zdist); + collision = hitAccuracy * rayFade; + break; + } + pincr = origPincr; + p += pincr; + } + } + + if (collision > 0) { + + // intersection found + float reflectionIntensity = smoothness * pow(collision, DECAY); + + // compute fresnel + float fresnel = 1.0 - FRESNEL * abs(dot(normalVS, viewDirVS)); + float reflectionAmount = reflectionIntensity * fresnel; + + // compute blur amount + float wdist = rayLength * zdist; + float blurAmount = max(0, wdist - CONTACT_HARDENING) * FUZZYNESS * (1 - smoothness); + + // return hit pixel + return float4(p.xy, blurAmount + 0.001, reflectionAmount); + } + + return float4(0,0,0,0); + } + + + float4 FragSSR (VaryingsSSR input) : SV_Target { + UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float depth = SAMPLE_TEXTURE2D_X(_CameraDepthTexture, sampler_PointClamp, input.uv.xy).r; + #if UNITY_REVERSED_Z + depth = 1.0 - depth; + #endif + if (depth >= 1.0) return float4(0,0,0,0); + + depth = 2.0 * depth - 1.0; + float2 zw = SSRStereoTransformScreenSpaceTex(input.uv.zw); + float3 positionVS = ComputeViewSpacePosition(zw, depth, unity_CameraInvProjection); + + float4 normals = SAMPLE_TEXTURE2D_X(_GBuffer2, sampler_PointClamp, SSRStereoTransformScreenSpaceTex(input.uv.xy)); + #if defined(_GBUFFER_NORMALS_OCT) + half2 remappedOctNormalWS = Unpack888ToFloat2(normals.xyz); // values between [ 0, 1] + half2 octNormalWS = remappedOctNormalWS.xy * 2.0h - 1.0h; // values between [-1, +1] + float3 normalWS = UnpackNormalOctQuadEncode(octNormalWS); + #else + float3 normalWS = normals.xyz; + #endif + float3 normalVS = mul((float3x3)_WorldToViewDir, normalWS); + normalVS.z *= -1.0; + + float smoothness = max(0, normals.w - REFLECTIONS_THRESHOLD); + + float4 reflection = SSR_Pass(input.uv.xy, normalVS, positionVS, smoothness); + + return reflection; + } + + +#endif // SSR_GBUF_PASS \ No newline at end of file diff --git a/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl.meta b/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl.meta new file mode 100644 index 0000000..7731004 --- /dev/null +++ b/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 60e6293b2213646e387fe487ef2adfcf +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR/SSR_Solve.hlsl b/Runtime/Resources/SSR/SSR_Solve.hlsl new file mode 100644 index 0000000..f599bd7 --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Solve.hlsl @@ -0,0 +1,74 @@ +#ifndef SSR_SOLVE +#define SSR_SOLVE + + // Copyright 2021 Kronnect - All Rights Reserved. + TEXTURE2D_X(_MainTex); + float4 _MainTex_TexelSize; + TEXTURE2D_X(_RayCastRT); + float4 _SSRSettings2; + #define ENERGY_CONSERVATION _SSRSettings2.y + #define REFLECTIONS_MULTIPLIER _SSRSettings2.z + float4 _SSRSettings4; + #define REFLECTIONS_MIN_INTENSITY _SSRSettings4.y + #define REFLECTIONS_MAX_INTENSITY _SSRSettings4.z + #define VIGNETTE_SIZE _SSRSettings2.w + + struct AttributesFS { + float4 positionHCS : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsSSR { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + + VaryingsSSR VertSSR(AttributesFS input) { + VaryingsSSR output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + output.positionCS = float4(input.positionHCS.xyz, 1.0); + + #if UNITY_UV_STARTS_AT_TOP + output.positionCS.y *= -1; + #endif + + output.uv = input.uv; + return output; + } + + half4 FragResolve (VaryingsSSR i) : SV_Target { + + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + i.uv = SSRStereoTransformScreenSpaceTex(i.uv); + + half4 reflData = SAMPLE_TEXTURE2D_X(_RayCastRT, sampler_PointClamp, i.uv); + half4 reflection = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, reflData.xy); + + reflection.rgb = min(reflection.rgb, 1.0); // stop NAN pixels + half vd = dot2( (reflData.xy - 0.5) * 2.0 ); + half vignette = saturate( VIGNETTE_SIZE - vd * vd ); + + half reflectionIntensity = clamp( reflData.a * REFLECTIONS_MULTIPLIER, REFLECTIONS_MIN_INTENSITY, REFLECTIONS_MAX_INTENSITY) * vignette; + reflection.rgb *= reflectionIntensity; + + reflection.rgb = min(reflection.rgb, 1.2); // clamp max brightness + + // conserve energy + half4 pixel = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, i.uv); + reflection.rgb -= pixel.rgb * reflectionIntensity; + + // keep blur factor in alpha channel + reflection.a = reflData.z; + return reflection; + } + + + +#endif // SSR_SOLVE \ No newline at end of file diff --git a/Runtime/Resources/SSR/SSR_Solve.hlsl.meta b/Runtime/Resources/SSR/SSR_Solve.hlsl.meta new file mode 100644 index 0000000..db56f11 --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Solve.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a40b0a3683e1a478ab7da6e74a644e00 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl b/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl new file mode 100644 index 0000000..f57182a --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl @@ -0,0 +1,244 @@ +#ifndef SSR_SURF_FX +#define SSR_SURF_FX + + // Copyright 2021 Kronnect - All Rights Reserved. + TEXTURE2D(_NoiseTex); + TEXTURE2D(_BumpMap); + TEXTURE2D(_SmoothnessMap); + float4 _BumpMap_ST; + float4 _NoiseTex_TexelSize; + + float4 _MaterialData; + #define SMOOTHNESS _MaterialData.x + #define FRESNEL _MaterialData.y + #define FUZZYNESS _MaterialData.z + #define DECAY _MaterialData.w + + float4 _SSRSettings; + #define THICKNESS _SSRSettings.x + #define SAMPLES _SSRSettings.y + #define BINARY_SEARCH_ITERATIONS _SSRSettings.z + #define MAX_RAY_LENGTH _SSRSettings.w + + float2 _SSRSettings5; + #define REFLECTIONS_THRESHOLD _SSRSettings5.y + +#if SSR_THICKNESS_FINE + #define THICKNESS_FINE _SSRSettings5.x +#else + #define THICKNESS_FINE THICKNESS +#endif + + float4 _SSRSettings2; + #define JITTER _SSRSettings2.x + #define CONTACT_HARDENING _SSRSettings2.y + + float4 _SSRSettings3; + #define INPUT_SIZE _SSRSettings3.xy + #define GOLDEN_RATIO_ACUM _SSRSettings3.z + #define DEPTH_BIAS _SSRSettings3.w + + struct AttributesSurf { + float4 positionOS : POSITION; + float2 texcoord : TEXCOORD0; + float3 normalOS : NORMAL; + float4 tangentOS : TANGENT; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsSSRSurf { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + float4 scrPos : TEXCOORD1; + float3 positionVS : TEXCOORD2; + #if SSR_NORMALMAP + float4 normal : TEXCOORD3; // xyz: normal, w: viewDir.x + float4 tangent : TEXCOORD4; // xyz: tangent, w: viewDir.y + float4 bitangent : TEXCOORD5; // xyz: bitangent, w: viewDir.z + #else + float3 normal : TEXCOORD3; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + VaryingsSSRSurf VertSSRSurf(AttributesSurf input) { + + VaryingsSSRSurf output = (VaryingsSSRSurf)0; + + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + VertexPositionInputs positions = GetVertexPositionInputs(input.positionOS.xyz); + VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS); + + output.positionCS = positions.positionCS; + output.positionVS = positions.positionVS * float3(1,1,-1); + output.scrPos = ComputeScreenPos(positions.positionCS); + output.uv = TRANSFORM_TEX(input.texcoord, _BumpMap); + + #if SSR_NORMALMAP + half3 viewDirWS = GetCameraPositionWS() - positions.positionWS; + output.normal = half4(normalInput.normalWS, viewDirWS.x); + output.tangent = half4(normalInput.tangentWS, viewDirWS.y); + output.bitangent = half4(normalInput.bitangentWS, viewDirWS.z); + #else + output.normal = TransformWorldToViewDir(normalInput.normalWS) * float3(1,1,-1); + #endif + + #if UNITY_REVERSED_Z + output.positionCS.z += 0.001; + #else + output.positionCS.z -= 0.001; + #endif + + return output; + } + + + + inline float GetLinearDepth(float2 uv) { + float rawDepth = SAMPLE_TEXTURE2D_X_LOD(_CameraDepthTexture, sampler_CameraDepthTexture, SSRStereoTransformScreenSpaceTex(uv), 0).r; + return LinearEyeDepth(rawDepth, _ZBufferParams); + } + + + float4 SSR_Pass(float2 uv, float3 normalVS, float3 rayStart, float smoothness) { + + float3 viewDirVS = normalize(rayStart); + float3 rayDir = reflect( viewDirVS, normalVS ); + + // if ray is toward the camera, early exit (optional) + //if (rayDir.z < 0) return 0.0.xxxx; + + float rayLength = MAX_RAY_LENGTH; + + float3 rayEnd = rayStart + rayDir * rayLength; + if (rayEnd.z < _ProjectionParams.y) { + rayLength = (rayStart.z - _ProjectionParams.y) / rayDir.z; + } + rayEnd = rayStart + rayDir * rayLength; + + float4 sposStart = mul(unity_CameraProjection, float4(rayStart, 1.0)); + float4 sposEnd = mul(unity_CameraProjection, float4(rayEnd, 1.0)); + float k0 = rcp(sposStart.w); + float q0 = rayStart.z * k0; + float k1 = rcp(sposEnd.w); + float q1 = rayEnd.z * k1; + float4 p = float4(uv, q0, k0); + + // depth clip check + float sceneDepth = GetLinearDepth(p.xy); + float pz = p.z / p.w; + if (sceneDepth < pz - DEPTH_BIAS) return 0; + + // length in pixels + float2 uv1 = (sposEnd.xy * rcp(rayEnd.z) + 1.0) * 0.5; + float2 duv = uv1 - uv; + float2 duvPixel = abs(duv * INPUT_SIZE); + float pixelDistance = max(duvPixel.x, duvPixel.y); + pixelDistance = max(1, pixelDistance); + int sampleCount = (int)SAMPLES; + float scale = max(1, SAMPLES * rcp(pixelDistance)); + sampleCount = (int)(sampleCount * rcp(scale)); + float4 pincr = float4(duv, q1-q0, k1-k0) * rcp(sampleCount); + + #if SSR_JITTER + float jitter = SAMPLE_TEXTURE2D(_NoiseTex, sampler_PointRepeat, uv * INPUT_SIZE * _NoiseTex_TexelSize.xy + GOLDEN_RATIO_ACUM).r; + //pincr *= 1.0 + jitter * JITTER; + p += pincr * (jitter * JITTER); + #endif + + float collision = 0; + float dist = 0; + float zdist = 0; + + UNITY_LOOP + for (int k = 0; k < sampleCount; k++) { + p += pincr; + if (any(floor(p.xy)!=0)) return 0.0.xxxx; // exit if out of screen space + sceneDepth = GetLinearDepth(p.xy); + pz = p.z / p.w; + float depthDiff = pz - sceneDepth; + if (depthDiff > 0 && depthDiff < THICKNESS) { + float4 origPincr = pincr; + p -= pincr; + float reduction = 1.0; + UNITY_LOOP + for (int j = 0; j < BINARY_SEARCH_ITERATIONS; j++) { + reduction *= 0.5; + p += pincr * reduction; + sceneDepth = GetLinearDepth(p.xy); + pz = p.z / p.w; + depthDiff = sceneDepth - pz; + pincr = sign(depthDiff) * origPincr; + } +#if SSR_THICKNESS_FINE + if (abs(depthDiff) < THICKNESS_FINE) + { +#endif + float hitAccuracy = 1.0 - abs(depthDiff) / THICKNESS_FINE; + zdist = (pz - rayStart.z) / (0.0001 + rayEnd.z - rayStart.z); + float rayFade = 1.0 - saturate(zdist); + collision = hitAccuracy * rayFade; + break; +#if SSR_THICKNESS_FINE + } + pincr = origPincr; + p += pincr; +#endif + } + } + + if (collision > 0) { + + // intersection found + float reflectionIntensity = smoothness * pow(collision, DECAY); + + // compute fresnel + float fresnel = 1.0 - FRESNEL * abs(dot(normalVS, viewDirVS)); + float reflectionAmount = reflectionIntensity * fresnel; + + // compute blur amount + float wdist = rayLength * zdist; + float blurAmount = max(0, wdist - CONTACT_HARDENING) * FUZZYNESS * (1 - smoothness); + + // return hit pixel + return float4(p.xy, blurAmount + 0.001, reflectionAmount); + } + + return float4(0,0,0,0); + } + + + float4 FragSSRSurf (VaryingsSSRSurf input) : SV_Target { + UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + input.scrPos.xy /= input.scrPos.w; + //input.scrPos = SSRStereoTransformScreenSpaceTex(input.scrPos); + #if SSR_NORMALMAP + float4 packedNormal = SAMPLE_TEXTURE2D(_BumpMap, sampler_PointRepeat, input.uv); + float3 normalTS = UnpackNormal(packedNormal); + half3 viewDirWS = half3(input.normal.w, input.tangent.w, input.bitangent.w); + float3 normalWS = TransformTangentToWorld(normalTS, half3x3(input.tangent.xyz, input.bitangent.xyz, input.normal.xyz)); + float3 normalVS = TransformWorldToViewDir(normalWS); + normalVS.z *= -1; + #else + float3 normalVS = input.normal; + #endif + + #if SSR_SMOOTHNESSMAP + float smoothness = SMOOTHNESS * SAMPLE_TEXTURE2D(_SmoothnessMap, sampler_PointRepeat, input.uv).a; + #else + float smoothness = SMOOTHNESS; + #endif + + smoothness = max(0, smoothness - REFLECTIONS_THRESHOLD); + float4 reflection = SSR_Pass(input.scrPos.xy, normalVS, input.positionVS, smoothness); + + return reflection; + } + + +#endif // SSR_SURF_FX \ No newline at end of file diff --git a/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl.meta b/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl.meta new file mode 100644 index 0000000..1a361ea --- /dev/null +++ b/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4e563a51a6e3e4c53bb04c621a65ff93 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Resources/SSR/blueNoiseSSR64.png b/Runtime/Resources/SSR/blueNoiseSSR64.png new file mode 100644 index 0000000..81cdc3d Binary files /dev/null and b/Runtime/Resources/SSR/blueNoiseSSR64.png differ diff --git a/Runtime/Resources/SSR/blueNoiseSSR64.png.meta b/Runtime/Resources/SSR/blueNoiseSSR64.png.meta new file mode 100644 index 0000000..f0ec56c --- /dev/null +++ b/Runtime/Resources/SSR/blueNoiseSSR64.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: 61cdb903ff6ea425583a56231df1cd06 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts.meta b/Runtime/Scripts.meta new file mode 100644 index 0000000..2952171 --- /dev/null +++ b/Runtime/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 65b2a3467f08e49a0b54b38f4418a07b +folderAsset: yes +timeCreated: 1542876305 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/Reflections.cs b/Runtime/Scripts/Reflections.cs new file mode 100644 index 0000000..348be8c --- /dev/null +++ b/Runtime/Scripts/Reflections.cs @@ -0,0 +1,413 @@ +/// +/// Shiny SSRR - Screen Space Reflections for URP - (c) 2021 Kronnect +/// + +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace ShinySSRR { + + public enum Scope { + OnlyThisObject = 0, + IncludeChildren = 10 + } + + + [Serializable] + public struct SubMeshSettingsData { + [Range(0, 1)] + public float smoothness; + } + + [ExecuteInEditMode] + public partial class Reflections : MonoBehaviour { + + + [Tooltip("Prevent this object from receiving reflections")] + public bool ignore; + + [Tooltip("On which objects should reflections apply")] + public Scope scope; + + [Tooltip("Include only objects matching this layer mask")] + public LayerMask layerMask = -1; + + [Tooltip("Include only objects including this text")] + public string nameFilter; + + [Tooltip("Optionally specify which submeshes can receive reflections. Set this to 0 to apply reflections to all submeshes.")] + public int subMeshMask; + + [Header("Material Features")] + [Tooltip("Use smoothness from object material (ignored if material doesn't have a smoothness property)")] + public bool useMaterialSmoothness = true; + + [Tooltip("Custom material property name for the smoothness map")] + public string materialSmoothnessMapPropertyName = "_MetallicGlossMap"; + + [Tooltip("Custom material property name for the smoothness intensity")] + public string materialSmoothnessIntensityPropertyName = "_Smoothness"; + + [Tooltip("Smoothness value used if material has no smoothness property.")] + [Range(0, 1)] + public float smoothness = 0.75f; + + [Tooltip("Apply a different smoothness multiplier per submesh")] + public bool perSubMeshSmoothness; + + [Tooltip("Smoothness values per each submesh")] + public SubMeshSettingsData[] subMeshSettings; + + [Tooltip("Use normal map from object material (ignored if material doesn't have a smoothness property)")] + public bool useMaterialNormalMap = true; + + [Tooltip("Custom material property name for the normal map")] + public string materialNormalMapPropertyName = "_BumpMap"; + + [Header("Raytracing Settings")] + public bool overrideGlobalSettings; + + [Tooltip("Max number of samples used during the raymarch loop")] + [Range(4, 128)] public int sampleCount = 16; + + [HideInInspector] + public float stepSize; // no longer used; kept for backward compatibility during upgrade + + [Tooltip("Maximum reflection distance")] + public float maxRayLength; + + [Tooltip("Assumed thickness of geometry in the depth buffer before binary search")] + public float thickness = 0.2f; + + [Tooltip("Number of refinements steps when a reflection hit is found")] + [Range(0, 16)] public int binarySearchIterations = 6; + + [Tooltip("Increase accuracy of reflection hit after binary search by discarding points further than a reduced thickness.")] + public bool refineThickness; + + [Tooltip("Assumed thickness of geometry in the depth buffer after binary search")] + [Range(0.005f, 1f)] + public float thicknessFine = 0.05f; + + [Tooltip("Reflection decay with distance to reflective point")] + public float decay = 2f; + + [Range(0, 1)] + [Tooltip("Reduces reflection based on view angle")] + public float fresnel = 0.75f; + + [Min(0)] + [Tooltip("Ray dispersion with distance")] + public float fuzzyness; + + [Tooltip("Makes sharpen reflections near objects")] + public float contactHardening; + + + [Tooltip("Jitter helps smoothing edges")] + [Range(0, 1f)] public float jitter = 0.3f; + + + [NonSerialized] + public readonly static List instances = new List(); + + [NonSerialized] + public readonly List ssrRenderers = new List(); + + [NonSerialized] + public readonly List renderers = new List(); + + void OnEnable() { + if (maxRayLength == 0) { + maxRayLength = Mathf.Max(0.1f, stepSize * sampleCount); + } + Refresh(); + instances.Add(this); + } + + void OnDisable() { + if (instances != null) { + int k = instances.IndexOf(this); + if (k >= 0) { + instances.RemoveAt(k); + } + } + } + + private void OnValidate() { + fuzzyness = Mathf.Max(0, fuzzyness); + thickness = Mathf.Max(0.01f, thickness); + thicknessFine = Mathf.Max(0.01f, thicknessFine); + contactHardening = Mathf.Max(0, contactHardening); + decay = Mathf.Max(1f, decay); + if (maxRayLength == 0) { + maxRayLength = stepSize * sampleCount; + } + maxRayLength = Mathf.Max(0.1f, maxRayLength); + Refresh(); + } + + private void OnDestroy() { + if (ssrRenderers == null) return; + for (int k = 0; k < ssrRenderers.Count; k++) { + Material[] mats = ssrRenderers[k].ssrMaterials; + if (mats != null) { + for (int j = 0; j < mats.Length; j++) { + if (mats[j] != null) DestroyImmediate(mats[j]); + } + } + } + } + + /// + /// Updates the list of included renderers to receive reflections + /// + public void Refresh() { + + switch (scope) { + case Scope.OnlyThisObject: { + renderers.Clear(); + Renderer r = GetComponent(); + if (r != null) { + renderers.Add(r); + } + } + break; + case Scope.IncludeChildren: + GetComponentsInChildren(true, renderers); + // Check if some children has an exclusive reflections component + int rCount = renderers.Count; + bool usesNameFilter = !string.IsNullOrEmpty(nameFilter); + for (int k = 0; k < rCount; k++) { + Renderer r = renderers[k]; + if (((1 << r.gameObject.layer) & layerMask) == 0) { + renderers[k] = null; + continue; + } + if (usesNameFilter) { + if (!r.name.Contains(nameFilter)) { + renderers[k] = null; + continue; + } + } + Reflections refl = r.GetComponent(); + if (refl != null && refl != this) { + renderers[k] = null; + } + } + break; + } + + // Prepare required ssr materials slots + int renderersCount = renderers.Count; + ssrRenderers.Clear(); + if (ignore) return; + + for (int k = 0; k < renderersCount; k++) { + Renderer r = renderers[k]; + if (r == null) continue; + Reflections refl = r.GetComponent(); + if (refl != null && refl.ignore) { + continue; + } + SSR_Renderer ssr = new SSR_Renderer { + renderer = r + }; + ssrRenderers.Add(ssr); + } + } + + + + public class SSR_Renderer { + public Renderer renderer; + public Material[] ssrMaterials; + public List originalMaterials; + public bool isInitialized; + public bool exclude; + public Collider collider; + public bool hasStaticBounds; + public Bounds staticBounds; + + public void Init(Material ssrMat) { + isInitialized = true; + originalMaterials = new List(); + renderer.GetSharedMaterials(originalMaterials); + collider = renderer.GetComponent(); + hasStaticBounds = false; + if (renderer.isPartOfStaticBatch && collider == null) { + MeshFilter mf = renderer.GetComponent(); + if (mf != null) { + Mesh mesh = mf.sharedMesh; + if (mesh != null) { + int subMeshStartIndex = ((MeshRenderer)renderer).subMeshStartIndex; + staticBounds = mesh.GetSubMesh(subMeshStartIndex).bounds; + int subMeshesCount = originalMaterials.Count; + for (int k = 1; k < subMeshesCount; k++) { + staticBounds.Encapsulate(mesh.GetSubMesh(subMeshStartIndex + k).bounds); + } + hasStaticBounds = true; + } + } + } + ssrMaterials = new Material[originalMaterials.Count]; + for (int k = 0; k < ssrMaterials.Length; k++) { + ssrMaterials[k] = Instantiate(ssrMat); + } + } + + public void UpdateMaterialProperties(Reflections go, ShinySSRR globalSettings) { + if (go.subMeshSettings == null) { + go.subMeshSettings = new SubMeshSettingsData[0]; + } + float totalSmoothness = 0; + for (int s = 0; s < ssrMaterials.Length; s++) { + Material ssrMat = ssrMaterials[s]; + Material originalMaterial = originalMaterials[s]; + + float smoothness = go.smoothness; + if (go.perSubMeshSmoothness) { + if (s < go.subMeshSettings.Length) { + smoothness = go.subMeshSettings[s].smoothness; + } + } + bool hasSmoothnessMap = false; + bool hasNormalMap = false; + if (originalMaterial != null) { + if (go.useMaterialSmoothness) { + if (!string.IsNullOrEmpty(go.materialSmoothnessIntensityPropertyName) && originalMaterial.HasProperty(go.materialSmoothnessIntensityPropertyName)) { + smoothness = originalMaterial.GetFloat(go.materialSmoothnessIntensityPropertyName); + } else if (originalMaterial.HasProperty(ShaderParams.Smoothness)) { + smoothness = originalMaterial.GetFloat(ShaderParams.Smoothness); + } + Texture metallicGlossMap = null; + if (!string.IsNullOrEmpty(go.materialSmoothnessMapPropertyName) && originalMaterial.HasProperty(go.materialSmoothnessMapPropertyName)) { + metallicGlossMap = originalMaterial.GetTexture(go.materialSmoothnessMapPropertyName); + } else if (originalMaterial.HasProperty(ShaderParams.MetallicGlossMap)) { + metallicGlossMap = originalMaterial.GetTexture(ShaderParams.MetallicGlossMap); + } + if (metallicGlossMap != null) { + ssrMat.SetTexture(ShaderParams.SmoothnessMap, metallicGlossMap); + ssrMat.EnableKeyword(ShaderParams.SKW_SMOOTHNESSMAP); + hasSmoothnessMap = true; + } + } else { + // color alpha can also influence smoothness + if (originalMaterial.HasProperty(ShaderParams.Color)) { + smoothness *= originalMaterial.color.a; + } else if (originalMaterial.HasProperty(ShaderParams.BaseColor)) { + smoothness *= originalMaterial.GetColor(ShaderParams.BaseColor).a; + } + } + if (go.useMaterialNormalMap) { + Texture bumpMap = null; + if (!string.IsNullOrEmpty(go.materialNormalMapPropertyName) && originalMaterial.HasProperty(go.materialNormalMapPropertyName)) { + bumpMap = originalMaterial.GetTexture(go.materialNormalMapPropertyName); + } else if (originalMaterial.HasProperty(ShaderParams.BumpMap)) { + bumpMap = originalMaterial.GetTexture(ShaderParams.BumpMap); + } + if (bumpMap != null) { + ssrMat.SetTexture(ShaderParams.BumpMap, bumpMap); + ssrMat.SetVector(ShaderParams.BumpMap_ST, originalMaterial.GetVector(ShaderParams.BaseMap_ST)); + ssrMat.EnableKeyword(ShaderParams.SKW_NORMALMAP); + hasNormalMap = true; + } + } + } + if (!hasSmoothnessMap) { + ssrMat.DisableKeyword(ShaderParams.SKW_SMOOTHNESSMAP); + } + if (!hasNormalMap) { + ssrMat.DisableKeyword(ShaderParams.SKW_NORMALMAP); + } + + totalSmoothness += smoothness; + if (go.overrideGlobalSettings) { + if (go.jitter > 0) { + ssrMat.EnableKeyword(ShaderParams.SKW_JITTER); + } else { + ssrMat.DisableKeyword(ShaderParams.SKW_JITTER); + } + if (go.refineThickness) { + ssrMat.EnableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } else { + ssrMat.DisableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } + ssrMat.SetVector(ShaderParams.SSRSettings5, new Vector4(go.thicknessFine * go.thickness, globalSettings.smoothnessThreshold, 0, 0)); + ssrMat.SetVector(ShaderParams.SSRSettings2, new Vector4(go.jitter, go.contactHardening, globalSettings.reflectionsMultiplier, globalSettings.vignetteSize)); + ssrMat.SetVector(ShaderParams.SSRSettings, new Vector4(go.thickness, go.sampleCount, go.binarySearchIterations, go.maxRayLength)); + ssrMat.SetVector(ShaderParams.MaterialData, new Vector4(smoothness, go.fresnel, go.fuzzyness, go.decay)); + } else { + if (globalSettings.jitter > 0) { + ssrMat.EnableKeyword(ShaderParams.SKW_JITTER); + } else { + ssrMat.DisableKeyword(ShaderParams.SKW_JITTER); + } + if (globalSettings.refineThickness) { + ssrMat.EnableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } else { + ssrMat.DisableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } + ssrMat.SetVector(ShaderParams.SSRSettings5, new Vector4(globalSettings.thicknessFine * globalSettings.thickness, globalSettings.smoothnessThreshold, 0, 0)); + ssrMat.SetVector(ShaderParams.SSRSettings2, new Vector4(globalSettings.jitter, globalSettings.contactHardening, globalSettings.reflectionsMultiplier, globalSettings.vignetteSize)); + ssrMat.SetVector(ShaderParams.SSRSettings, new Vector4(globalSettings.thickness, globalSettings.sampleCount, globalSettings.binarySearchIterations, globalSettings.maxRayLength)); + ssrMat.SetVector(ShaderParams.MaterialData, new Vector4(smoothness, globalSettings.fresnel, globalSettings.fuzzyness, globalSettings.decay)); + } + } + exclude = (totalSmoothness == 0); + } + } + + private void OnDrawGizmos() { + for (int k = 0; k < ssrRenderers.Count; k++) { + Bounds bounds = ssrRenderers[k].staticBounds; + Gizmos.DrawWireCube(bounds.center, bounds.size); + } + + } + + + public void ApplyRaytracingPreset(RaytracingPreset preset) { + switch (preset) { + case RaytracingPreset.Fast: + sampleCount = 16; + maxRayLength = 6; + binarySearchIterations = 4; + thickness = 0.5f; + refineThickness = false; + jitter = 0.3f; + break; + case RaytracingPreset.Medium: + sampleCount = 24; + maxRayLength = 12; + binarySearchIterations = 5; + refineThickness = false; + break; + case RaytracingPreset.High: + sampleCount = 48; + maxRayLength = 24; + binarySearchIterations = 6; + refineThickness = false; + thicknessFine = 0.05f; + break; + case RaytracingPreset.Superb: + sampleCount = 88; + maxRayLength = 48; + binarySearchIterations = 7; + refineThickness = true; + thicknessFine = 0.02f; + break; + case RaytracingPreset.Ultra: + sampleCount = 128; + maxRayLength = 64; + binarySearchIterations = 8; + refineThickness = true; + thicknessFine = 0.02f; + break; + } + } + } +} + + diff --git a/Runtime/Scripts/Reflections.cs.meta b/Runtime/Scripts/Reflections.cs.meta new file mode 100644 index 0000000..0478bc1 --- /dev/null +++ b/Runtime/Scripts/Reflections.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 75f82f03739e4499282c234601d0b1ad +timeCreated: 1545593776 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 900 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/ShaderParams.cs b/Runtime/Scripts/ShaderParams.cs new file mode 100644 index 0000000..2a6bf48 --- /dev/null +++ b/Runtime/Scripts/ShaderParams.cs @@ -0,0 +1,49 @@ +/// +/// Shiny SSRR - Screen Space Reflections for URP - (c) 2021 Kronnect +/// + +using UnityEngine; + +namespace ShinySSRR { + + public static class ShaderParams { + + // input textures + public static int MainTex = Shader.PropertyToID("_MainTex"); + public static int NoiseTex = Shader.PropertyToID("_NoiseTex"); + public static int BumpMap = Shader.PropertyToID("_BumpMap"); + public static int BumpMap_ST = Shader.PropertyToID("_BumpMap_ST"); + public static int BaseMap_ST = Shader.PropertyToID("_BaseMap_ST"); + + // shader uniforms + public static int Color = Shader.PropertyToID("_Color"); + public static int BaseColor = Shader.PropertyToID("_BaseColor"); + public static int Smoothness = Shader.PropertyToID("_Smoothness"); + public static int SmoothnessMap = Shader.PropertyToID("_SmoothnessMap"); + public static int MetallicGlossMap = Shader.PropertyToID("_MetallicGlossMap"); + public static int MaterialData = Shader.PropertyToID("_MaterialData"); + public static int SSRSettings = Shader.PropertyToID("_SSRSettings"); + public static int SSRSettings2 = Shader.PropertyToID("_SSRSettings2"); + public static int SSRSettings3 = Shader.PropertyToID("_SSRSettings3"); + public static int SSRSettings4 = Shader.PropertyToID("_SSRSettings4"); + public static int SSRSettings5 = Shader.PropertyToID("_SSRSettings5"); + public static int SSRBlurStrength = Shader.PropertyToID("_SSRBlurStrength"); + public static int WorldToViewDir = Shader.PropertyToID("_WorldToViewDir"); + public static int MinimumBlur = Shader.PropertyToID("_MinimumBlur"); + + // targets + public static int ColorTex = Shader.PropertyToID("_ColorTex"); + public static int RayCast = Shader.PropertyToID("_RayCastRT"); + public static int BlurRT = Shader.PropertyToID("_BlurRT"); + public static int ReflectionsTex = Shader.PropertyToID("_ReflectionsRT"); + public static int NaNBuffer = Shader.PropertyToID("_NaNBuffer"); + + // shader keywords + public const string SKW_JITTER = "SSR_JITTER"; + public const string SKW_NORMALMAP = "SSR_NORMALMAP"; + public const string SKW_DENOISE = "SSR_DENOISE"; + public const string SKW_SMOOTHNESSMAP = "SSR_SMOOTHNESSMAP"; + public const string SKW_REFINE_THICKNESS = "SSR_THICKNESS_FINE"; + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/ShaderParams.cs.meta b/Runtime/Scripts/ShaderParams.cs.meta new file mode 100644 index 0000000..cfbef25 --- /dev/null +++ b/Runtime/Scripts/ShaderParams.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81cb18e4990a74f1cbee86972646d4db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/ShinySSRR.cs b/Runtime/Scripts/ShinySSRR.cs new file mode 100644 index 0000000..a2cd7ce --- /dev/null +++ b/Runtime/Scripts/ShinySSRR.cs @@ -0,0 +1,489 @@ +/// +/// Shiny SSRR - Screen Space Reflections for URP - (c) 2021 Kronnect +/// + +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace ShinySSRR { + + public enum OutputMode { + Final, + OnlyReflections, + SideBySideComparison + } + + public enum RaytracingPreset { + Fast = 10, + Medium = 20, + High = 30, + Superb = 35, + Ultra = 40 + } + + public class ShinySSRR : ScriptableRendererFeature { + + class SSRPass : ScriptableRenderPass { + + enum Pass { + CopyExact = 0, + SSRSurf = 1, + Resolve = 2, + BlurHoriz = 3, + BlurVert = 4, + Debug = 5, + Combine = 6, + CombineWithCompare = 7, + GBuffPass = 8, + Copy = 9 + } + + const string SHINY_CBUFNAME = "Shiny_SSRR"; + const float GOLDEN_RATIO = 0.618033989f; + ScriptableRenderer renderer; + Material sMat; + Texture noiseTex; + ShinySSRR settings; + readonly Plane[] frustumPlanes = new Plane[6]; + const int MIP_COUNT = 5; + int[] rtPyramid; + + public void Setup(ScriptableRenderer renderer, ShinySSRR settings) { + this.renderer = renderer; + this.settings = settings; + this.renderPassEvent = settings.renderPassEvent; + if (sMat == null) { + Shader shader = Shader.Find("Hidden/Kronnect/SSR_URP"); + sMat = CoreUtils.CreateEngineMaterial(shader); + } + if (noiseTex == null) { + noiseTex = Resources.Load("SSR/blueNoiseSSR64"); + } + sMat.SetTexture(ShaderParams.NoiseTex, noiseTex); + + // set global settings + sMat.SetVector(ShaderParams.SSRSettings2, new Vector4(settings.jitter, settings.contactHardening, settings.reflectionsMultiplier, settings.vignetteSize)); + sMat.SetVector(ShaderParams.SSRSettings4, new Vector4(settings.separationPos, settings.reflectionsMinIntensity, settings.reflectionsMaxIntensity, settings.specularSoftenPower)); + sMat.SetVector(ShaderParams.SSRBlurStrength, new Vector4(settings.blurStrength.x, settings.blurStrength.y, 0, 0)); + sMat.SetVector(ShaderParams.SSRSettings5, new Vector4(settings.thicknessFine * settings.thickness, settings.smoothnessThreshold, 0, 0)); + if (settings.specularControl) { + sMat.EnableKeyword(ShaderParams.SKW_DENOISE); + } else { + sMat.DisableKeyword(ShaderParams.SKW_DENOISE); + } + sMat.SetFloat(ShaderParams.MinimumBlur, settings.minimumBlur); + + if (settings.useDeferred) { + if (settings.jitter > 0) { + sMat.EnableKeyword(ShaderParams.SKW_JITTER); + } else { + sMat.DisableKeyword(ShaderParams.SKW_JITTER); + } + if (settings.refineThickness) { + sMat.EnableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } else { + sMat.DisableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } + sMat.SetVector(ShaderParams.SSRSettings, new Vector4(settings.thickness, settings.sampleCount, settings.binarySearchIterations, settings.maxRayLength)); + sMat.SetVector(ShaderParams.MaterialData, new Vector4(0, settings.fresnel, settings.fuzzyness, settings.decay)); + } + + if (rtPyramid == null || rtPyramid.Length != MIP_COUNT) { + rtPyramid = new int[MIP_COUNT]; + for (int k = 0; k < rtPyramid.Length; k++) { + rtPyramid[k] = Shader.PropertyToID("_BlurRTMip" + k); + } + } + } + + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) { + ConfigureInput(ScriptableRenderPassInput.Depth); + } + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { + + Camera cam = renderingData.cameraData.camera; + + // ignore SceneView depending on setting + if (cam.cameraType == CameraType.SceneView) { + if (!settings.showInSceneView) return; + } else { + // ignore any camera other than GameView + if (cam.cameraType != CameraType.Game) return; + } + + RenderTextureDescriptor sourceDesc = renderingData.cameraData.cameraTargetDescriptor; + sourceDesc.colorFormat = settings.lowPrecision ? RenderTextureFormat.ARGB32 : RenderTextureFormat.ARGBHalf; + sourceDesc.width /= settings.downsampling; + sourceDesc.height /= settings.downsampling; + sourceDesc.msaaSamples = 1; + + float goldenFactor = GOLDEN_RATIO; + if (settings.animatedJitter) { + goldenFactor *= (Time.frameCount % 480); + } + Shader.SetGlobalVector(ShaderParams.SSRSettings3, new Vector4(sourceDesc.width, sourceDesc.height, goldenFactor, settings.depthBias)); + + CommandBuffer cmd = null; + RenderTargetIdentifier source = renderer.cameraColorTarget; + + if (settings.useDeferred) { + // init command buffer + cmd = CommandBufferPool.Get(SHINY_CBUFNAME); + + // pass UNITY_MATRIX_V + sMat.SetMatrix(ShaderParams.WorldToViewDir, cam.worldToCameraMatrix); + + // prepare ssr target + cmd.GetTemporaryRT(ShaderParams.RayCast, sourceDesc, FilterMode.Point); + + // raytrace using gbuffers + FullScreenBlit(cmd, source, ShaderParams.RayCast, Pass.GBuffPass); + + } else { + + // early exit if no reflection objects + int count = Reflections.instances.Count; + if (count == 0) return; + + bool firstSSR = true; + + GeometryUtility.CalculateFrustumPlanes(cam, frustumPlanes); + + for (int k = 0; k < count; k++) { + Reflections go = Reflections.instances[k]; + if (go == null) continue; + int rendererCount = go.ssrRenderers.Count; + for (int j = 0; j < rendererCount; j++) { + Reflections.SSR_Renderer ssrRenderer = go.ssrRenderers[j]; + Renderer goRenderer = ssrRenderer.renderer; + + if (goRenderer == null || !goRenderer.isVisible) continue; + + // if object is part of static batch, check collider bounds (if existing) + if (goRenderer.isPartOfStaticBatch) { + if (ssrRenderer.hasStaticBounds) { + // check artifically computed bounds + if (!GeometryUtility.TestPlanesAABB(frustumPlanes, ssrRenderer.staticBounds)) continue; + } else if (ssrRenderer.collider != null) { + // check if object is visible by current camera using collider bounds + if (!GeometryUtility.TestPlanesAABB(frustumPlanes, ssrRenderer.collider.bounds)) continue; + } + } else { + // check if object is visible by current camera using renderer bounds + if (!GeometryUtility.TestPlanesAABB(frustumPlanes, goRenderer.bounds)) continue; + } + + if (!ssrRenderer.isInitialized) { + ssrRenderer.Init(sMat); + ssrRenderer.UpdateMaterialProperties(go, settings); + } +#if UNITY_EDITOR + else if (!Application.isPlaying) { + ssrRenderer.UpdateMaterialProperties(go, settings); + } +#endif + if (ssrRenderer.exclude) continue; + + if (firstSSR) { + firstSSR = false; + + // init command buffer + cmd = CommandBufferPool.Get(SHINY_CBUFNAME); + + // prepare ssr target + cmd.GetTemporaryRT(ShaderParams.RayCast, sourceDesc, FilterMode.Point); + cmd.SetRenderTarget(ShaderParams.RayCast, 0, CubemapFace.Unknown, -1); + cmd.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); + } + for (int s = 0; s < ssrRenderer.ssrMaterials.Length; s++) { + if (go.subMeshMask <= 0 || ((1 << s) & go.subMeshMask) != 0) { + Material ssrMat = ssrRenderer.ssrMaterials[s]; + cmd.DrawRenderer(goRenderer, ssrMat, s, (int)Pass.SSRSurf); + } + } + } + } + + if (firstSSR) return; + } + + + // Resolve reflections + RenderTextureDescriptor copyDesc = sourceDesc; + copyDesc.depthBufferBits = 0; + + cmd.GetTemporaryRT(ShaderParams.ReflectionsTex, copyDesc); + FullScreenBlit(cmd, source, ShaderParams.ReflectionsTex, Pass.Resolve); + RenderTargetIdentifier input = ShaderParams.ReflectionsTex; + + // Pyramid blur + copyDesc.width /= settings.blurDownsampling; + copyDesc.height /= settings.blurDownsampling; + for (int k = 0; k < MIP_COUNT; k++) { + copyDesc.width = Mathf.Max(2, copyDesc.width / 2); + copyDesc.height = Mathf.Max(2, copyDesc.height / 2); + cmd.GetTemporaryRT(rtPyramid[k], copyDesc, FilterMode.Bilinear); + cmd.GetTemporaryRT(ShaderParams.BlurRT, copyDesc, FilterMode.Bilinear); + FullScreenBlit(cmd, input, ShaderParams.BlurRT, Pass.BlurHoriz); + FullScreenBlit(cmd, ShaderParams.BlurRT, rtPyramid[k], Pass.BlurVert); + cmd.ReleaseTemporaryRT(ShaderParams.BlurRT); + input = rtPyramid[k]; + } + + // Output + int finalPass; + if (settings.outputMode == OutputMode.Final) { + finalPass = (int)Pass.Combine; + } else if (settings.outputMode == OutputMode.SideBySideComparison) { + finalPass = (int)Pass.CombineWithCompare; + } else { + finalPass = (int)Pass.Debug; + } + FullScreenBlit(cmd, ShaderParams.ReflectionsTex, source, (Pass)finalPass); + + if (settings.stopNaN) { + RenderTextureDescriptor nanDesc = renderingData.cameraData.cameraTargetDescriptor; + nanDesc.depthBufferBits = 0; + nanDesc.msaaSamples = 1; + cmd.GetTemporaryRT(ShaderParams.NaNBuffer, nanDesc); + FullScreenBlit(cmd, source, ShaderParams.NaNBuffer, Pass.CopyExact); + FullScreenBlit(cmd, ShaderParams.NaNBuffer, source, Pass.CopyExact); + } + + // Clean up + for (int k = 0; k < rtPyramid.Length; k++) { + cmd.ReleaseTemporaryRT(rtPyramid[k]); + } + cmd.ReleaseTemporaryRT(ShaderParams.ReflectionsTex); + cmd.ReleaseTemporaryRT(ShaderParams.RayCast); + + context.ExecuteCommandBuffer(cmd); + + CommandBufferPool.Release(cmd); + } + + void FullScreenBlit(CommandBuffer cmd, RenderTargetIdentifier source, RenderTargetIdentifier destination, Pass pass) { + cmd.SetRenderTarget(destination, 0, CubemapFace.Unknown, -1); + cmd.SetGlobalTexture(ShaderParams.MainTex, source); + cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, sMat, 0, (int)pass); + } + + /// Cleanup any allocated resources that were created during the execution of this render pass. + public override void FrameCleanup(CommandBuffer cmd) { + } + + + public void Cleanup() { + CoreUtils.Destroy(sMat); + } + } + + public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingTransparents; + [Tooltip("Use deferred g-buffers (requires deferred rendering in URP 12 or later)")] + public bool useDeferred; + + [Header("General Settings")] + + [Tooltip("Show reflections in SceneView window")] + public bool showInSceneView = true; + + [Tooltip("Downsampling multiplier applied to the final blurred reflections")] + [Range(1, 8)] public int downsampling = 1; + + [Tooltip("Bias applied to depth checking. Increase if reflections desappear at the distance when downsampling is used")] + [Min(0)] public float depthBias = 0.01f; + + [Tooltip("Show final result / debug view or compare view")] + public OutputMode outputMode = OutputMode.Final; + + [Tooltip("Position of the dividing line")] + [Range(-0.01f, 1.01f)] public float separationPos = 0.5f; + + [Tooltip("HDR reflections")] + public bool lowPrecision; + + [Tooltip("Prevents out of range colors when composing reflections in the destination buffer. This operation performs a ping-pong copy of the frame buffer which can be expensive. Use only if required.")] + public bool stopNaN; + + [Tooltip("Max number of samples used during the raymarch loop")] + [Range(4, 128)] public int sampleCount = 16; + + [HideInInspector] + public float stepSize; // no longer used; kept for backward compatibility during upgrade + + [Tooltip("Maximum reflection distance")] + public float maxRayLength; + + [Tooltip("Assumed thickness of geometry in the depth buffer before binary search")] + public float thickness = 0.2f; + + [Tooltip("Number of refinements steps when a reflection hit is found")] + [Range(0, 16)] public int binarySearchIterations = 6; + + [Tooltip("Increase accuracy of reflection hit after binary search by discarding points further than a reduced thickness.")] + public bool refineThickness; + + [Tooltip("Assumed thickness of geometry in the depth buffer after binary search")] + [Range(0.005f, 1f)] + public float thicknessFine = 0.05f; + + [Tooltip("Jitter helps smoothing edges")] + [Range(0, 1f)] public float jitter = 0.3f; + + [Tooltip("Animates jitter every frame")] + public bool animatedJitter = true; + + [Header("Reflection Intensity")] + + [Tooltip("Minimum smoothness to receive reflections")] + [Range(0,1)] + public float smoothnessThreshold; + + [Tooltip("Reflection multiplier")] + [Range(0, 2)] + public float reflectionsMultiplier = 1f; + + [Tooltip("Reflection min intensity")] + [Range(0, 1)] + public float reflectionsMinIntensity; + + [Tooltip("Reflection max intensity")] + [Range(0, 1)] + public float reflectionsMaxIntensity = 1f; + + [Range(0, 1)] + [Tooltip("Reduces reflection based on view angle")] + public float fresnel = 0.75f; + + [Tooltip("Reflection decay with distance to reflective point")] + public float decay = 2f; + + [Tooltip("Reduces intensity of specular reflections")] + public bool specularControl; + + [Min(0), Tooltip("Power of the specular filter")] + public float specularSoftenPower = 15f; + + [Tooltip("Controls the attenuation range of effect on screen borders")] + [Range(0.5f, 2f)] + public float vignetteSize = 1.1f; + + [Header("Reflection Sharpness")] + + [Min(0)] + [Tooltip("Ray dispersion with distance")] + public float fuzzyness; + + [Tooltip("Makes sharpen reflections near objects")] + public float contactHardening; + + [Range(0, 4f)] + [Tooltip("Produces sharper reflections based on distance")] + public float minimumBlur = 0.25f; + + [Tooltip("Downsampling multiplier applied to the blur")] + [Range(1, 8)] public int blurDownsampling = 1; + + [Tooltip("Custom directional blur strength")] + public Vector2 blurStrength = Vector2.one; + + SSRPass renderPass; + public static bool installed; + + public static bool isDeferredActive; + + public static bool isEnabled = true; + + + void OnDisable() { + installed = false; + if (renderPass != null) { + renderPass.Cleanup(); + } + } + + public override void Create() { + if (maxRayLength == 0) { + maxRayLength = Mathf.Max(0.1f, stepSize * sampleCount); + } + if (renderPass == null) { + renderPass = new SSRPass(); + } + installed = true; + } + + private void OnValidate() { + decay = Mathf.Max(1f, decay); + if (maxRayLength == 0) { + maxRayLength = stepSize * sampleCount; + } + maxRayLength = Mathf.Max(0.1f, maxRayLength); + fuzzyness = Mathf.Max(0, fuzzyness); + thickness = Mathf.Max(0.01f, thickness); + thicknessFine = Mathf.Max(0.01f, thicknessFine); + contactHardening = Mathf.Max(0, contactHardening); + reflectionsMaxIntensity = Mathf.Max(reflectionsMinIntensity, reflectionsMaxIntensity); + blurStrength.x = Mathf.Max(blurStrength.x, 0f); + blurStrength.y = Mathf.Max(blurStrength.y, 0f); + } + + // Here you can inject one or multiple render passes in the renderer. + // This method is called when setting up the renderer once per-camera. + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { + if (!isEnabled) return; + isDeferredActive = useDeferred; + renderPass.Setup(renderer, this); + renderer.EnqueuePass(renderPass); + installed = true; + } + + + public void ApplyRaytracingPreset(RaytracingPreset preset) { + switch (preset) { + case RaytracingPreset.Fast: + sampleCount = 16; + maxRayLength = 6; + binarySearchIterations = 4; + downsampling = 3; + thickness = 0.5f; + refineThickness = false; + jitter = 0.3f; + break; + case RaytracingPreset.Medium: + sampleCount = 24; + maxRayLength = 12; + binarySearchIterations = 5; + downsampling = 2; + refineThickness = false; + break; + case RaytracingPreset.High: + sampleCount = 48; + maxRayLength = 24; + binarySearchIterations = 6; + downsampling = 1; + refineThickness = false; + thicknessFine = 0.05f; + break; + case RaytracingPreset.Superb: + sampleCount = 88; + maxRayLength = 48; + binarySearchIterations = 7; + downsampling = 1; + refineThickness = true; + thicknessFine = 0.02f; + break; + case RaytracingPreset.Ultra: + sampleCount = 128; + maxRayLength = 64; + binarySearchIterations = 8; + downsampling = 1; + refineThickness = true; + thicknessFine = 0.02f; + break; + } + } + } + +} diff --git a/Runtime/Scripts/ShinySSRR.cs.meta b/Runtime/Scripts/ShinySSRR.cs.meta new file mode 100644 index 0000000..47c2efa --- /dev/null +++ b/Runtime/Scripts/ShinySSRR.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf716a1be50b448e7b1d1968ab734946 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ShinySSRR.asmdef b/Runtime/ShinySSRR.asmdef new file mode 100644 index 0000000..0e68c7b --- /dev/null +++ b/Runtime/ShinySSRR.asmdef @@ -0,0 +1,16 @@ +{ + "name": "ScreenSpaceReflections", + "references": [ + "GUID:15fc0a57446b3144c949da3e2b9737a9", + "GUID:df380645f10b7bc4b97d4f5eb6303d95" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Runtime/ShinySSRR.asmdef.meta b/Runtime/ShinySSRR.asmdef.meta new file mode 100644 index 0000000..7eb5f0c --- /dev/null +++ b/Runtime/ShinySSRR.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9e8d8d01326844c7b962a38be41a11b0 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package.json b/package.json new file mode 100644 index 0000000..7bd03ed --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "com.lrss3.shinyssrr2urp", + "displayName": "Shiny SSRR 2 URP", + "version": "1.0.0", + "unity": "2021.3", + "description": "Shiny SSR adds beautiful screen space reflections to your scenes in real-time making them more realistic.", + "keywords": [ + "unity", + "xeric" + ], + "category": "library", + "type": "library", + "hideInEditor": true, + "author": "Lrss3", + "samples": [ + { + "displayName": "Demo", + "description": "", + "path": "~Samples/Demo" + } + ] +} \ No newline at end of file diff --git a/package.json.meta b/package.json.meta new file mode 100644 index 0000000..35ac2f4 --- /dev/null +++ b/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 720d65801c9e4f84e9a0b166c28b0e85 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples.meta b/~Samples.meta new file mode 100644 index 0000000..d2d40f0 --- /dev/null +++ b/~Samples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bdc3d1e4d9fa3f443b522a4b63711fc3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo.meta b/~Samples/Demo.meta new file mode 100644 index 0000000..f178af1 --- /dev/null +++ b/~Samples/Demo.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 271fbc457f4af4a44a2a7ce4705d2df2 +folderAsset: yes +timeCreated: 1542876294 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Materials.meta b/~Samples/Demo/Materials.meta new file mode 100644 index 0000000..414b5cb --- /dev/null +++ b/~Samples/Demo/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cb45faf5ebb76442a9c88b4e977fa069 +folderAsset: yes +timeCreated: 1542877572 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Materials/Floor.mat b/~Samples/Demo/Materials/Floor.mat new file mode 100644 index 0000000..8772524 --- /dev/null +++ b/~Samples/Demo/Materials/Floor.mat @@ -0,0 +1,121 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8558442800701317947 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Floor + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 40351333731c94777b93eda89ce1d4eb, type: 3} + m_Scale: {x: 2, y: 2} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 69735cf47f0104165973f07ff96d4d98, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 10, y: 10} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 2, y: 2} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 40351333731c94777b93eda89ce1d4eb, type: 3} + m_Scale: {x: 2, y: 2} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 943181a31ab5a411496dc4b0d6a41630, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 0.02 + - _DstBlend: 0 + - _EmissionScaleUI: 1 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0.538 + - _Glossiness: 0.34 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 0.1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.0104 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0.99999994} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 1, g: 1, b: 1, a: 1} + - _SpecularColor: {r: 0.11764706, g: 0.11764706, b: 0.11764706, a: 1} + m_BuildTextureStacks: [] diff --git a/~Samples/Demo/Materials/Floor.mat.meta b/~Samples/Demo/Materials/Floor.mat.meta new file mode 100644 index 0000000..7968540 --- /dev/null +++ b/~Samples/Demo/Materials/Floor.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: c5e68f4db72684d25be883ee27d7fa97 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/~Samples/Demo/Materials/Gold.mat b/~Samples/Demo/Materials/Gold.mat new file mode 100644 index 0000000..1d5df21 --- /dev/null +++ b/~Samples/Demo/Materials/Gold.mat @@ -0,0 +1,121 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5610605729892836785 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Gold + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.9 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.908 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.96078426, g: 0.8392157, b: 0.47450978, a: 1} + - _Color: {r: 0.9607843, g: 0.8392157, b: 0.4745098, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SpecularColor: {r: 0.8088235, g: 0.6295969, b: 0.3033088, a: 1} + m_BuildTextureStacks: [] diff --git a/~Samples/Demo/Materials/Gold.mat.meta b/~Samples/Demo/Materials/Gold.mat.meta new file mode 100644 index 0000000..d770345 --- /dev/null +++ b/~Samples/Demo/Materials/Gold.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 5096e016b7e68464899a979f01e98542 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/~Samples/Demo/Materials/Mirror.mat b/~Samples/Demo/Materials/Mirror.mat new file mode 100644 index 0000000..b9790d4 --- /dev/null +++ b/~Samples/Demo/Materials/Mirror.mat @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mirror + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 1 + - _OcclusionStrength: 1 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] +--- !u!114 &5106466146314827787 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 diff --git a/~Samples/Demo/Materials/Mirror.mat.meta b/~Samples/Demo/Materials/Mirror.mat.meta new file mode 100644 index 0000000..fa9a049 --- /dev/null +++ b/~Samples/Demo/Materials/Mirror.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 823e4ead765ed42a58a2334b8058ca00 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Materials/PlasticGlossy.mat b/~Samples/Demo/Materials/PlasticGlossy.mat new file mode 100644 index 0000000..44b795f --- /dev/null +++ b/~Samples/Demo/Materials/PlasticGlossy.mat @@ -0,0 +1,121 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2992342339722848979 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PlasticGlossy + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.8 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.8 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0, g: 0.78942597, b: 0.79607844, a: 1} + - _Color: {r: 0, g: 0.78942597, b: 0.79607844, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SpecularColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_BuildTextureStacks: [] diff --git a/~Samples/Demo/Materials/PlasticGlossy.mat.meta b/~Samples/Demo/Materials/PlasticGlossy.mat.meta new file mode 100644 index 0000000..3620f31 --- /dev/null +++ b/~Samples/Demo/Materials/PlasticGlossy.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 1f83895e6354f411da22ab491b664095 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/~Samples/Demo/Materials/SHINY.asset b/~Samples/Demo/Materials/SHINY.asset new file mode 100644 index 0000000..d4f2f3d --- /dev/null +++ b/~Samples/Demo/Materials/SHINY.asset @@ -0,0 +1,165 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SHINY + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 1296 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 526 + localAABB: + m_Center: {x: 2.0361328, y: -1.2124023, z: 0.125} + m_Extent: {x: 2.0361328, y: 0.73095703, z: 0.125} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 0 + m_IndexBuffer: 3500000001003500010002003500020003003500030004003500040005003500050006003500060007000b000c000d000b000d000e000b000e000f000b000f0010000b00100011000b00110012000b00120013000b00130014000b00140015000b0015001600160017001800160018001900160019001a0016001a001b0016001b001c0016001c001d0016001d001e0016001e001f0016001f002000160020002100160021002200160022002300160023002400270028002900270029002a0027002a002b0027002b002c0027002c002d0027002d002e0027002e002f0027002f0030003000310032003000320033003000330034003000340035003000350007003000070008003000080009000b00160024000b00240025000b00250026000b0026002700270030000900270009000a000a000b002700370036006b00380037006b00390038006b003a0039006b003b003a006b003c003b006b003d003c006b004300420041004400430041004500440041004600450041004700460041004800470041004900480041004a00490041004b004a0041004c004b0041004e004d004c004f004e004c0050004f004c00510050004c00520051004c00530052004c00540053004c00550054004c00560055004c00570056004c00580057004c00590058004c005a0059004c005f005e005d0060005f005d00610060005d00620061005d00630062005d00640063005d00650064005d00660065005d006800670066006900680066006a00690066006b006a0066003d006b0066003e003d0066003f003e0066005a004c0041005b005a0041005c005b0041005d005c0041003f0066005d0040003f005d005d00410040006c006d006e006d006f006e00700071007200710073007200720073007400730075007400740075007600750077007600760077007800770079007800780079007a0079007b007a007a007b007c007b007d007c007c007d007e007d007f007e007e007f0080007f0081008000800081008200810083008200820083008400830085008400840085008600850087008600860087008800870089008800880089008a0089008b008a008a008b008c008b008d008c008c008d008e008d008f008e008e008f0090008f0091009000900091009200910093009200920093009400930095009400940095009600950097009600960097009800970099009800980099009a0099009b009a009a009b009c009b009d009c009c009d009e009d009f009e009e009f00a0009f00a100a000a000a100a200a100a300a200a200a300a400a300a500a400a600a700a800a700a900a800aa00ab00ac00ab00ad00ac00ac00ad00ae00ad00af00ae00ae00af00b000af00b100b000b000b100b200b100b300b200b200b300b400b300b500b400b400b500b600b500b700b600b600b700b800b700b900b800b800b900ba00b900bb00ba00ba00bb00bc00bb00bd00bc00bc00bd00be00bd00bf00be00be00bf00c000bf00c100c000c000c100c200c100c300c200c200c300c400c300c500c400c400c500c600c500c700c600c600c700c800c700c900c800c800c900ca00c900cb00ca00ca00cb00cc00cb00cd00cc00cc00cd00ce00cd00cf00ce00ce00cf00d000cf00d100d000d000d100d200d100d300d200d200d300d400d300d500d400d400d500d600d500d700d600d600d700d800d700d900d800d800d900da00d900db00da00da00db00dc00db00dd00dc00dc00dd00de00dd00df00de00eb00e000e100eb00e100e200eb00e200e300e400e500e600e400e600e700e400e700e800e400e800e900e400e900ea00ea00eb00e300e300e400ea00ed00ec00f700ee00ed00f700ef00ee00f700f200f100f000f300f200f000f400f300f000f500f400f000f600f500f000ef00f700f600f600f000ef00f800f900fa00f900fb00fa00fc00fd00fe00fd00ff00fe00000101010201010103010201040105010601050107010601080109010a0109010b010a010c010d010e010d010f010e01100111011201110113011201140115011601150117011601180119011a0119011b011a011c011d011e011d011f011e012001210122012101230122012401250126012501270126012b012801290129012a012b012d012c012f012f012e012d01300131013201310133013201340135013601350137013601380139013a0139013b013a013c013d013e013d013f013e01590140014101410142014301410143014401410144014501410145014601410146014701470148014901470149014a0147014a014b0147014b014c0147014c014d0147014d014e0147014e014f0147014f0150014701500151014701510152014701520153014701530154015401550156015401560157015401570158015401580159015401590141014101470154015b015a0173015d015c015b015e015d015b015f015e015b0160015f015b01610160015b016301620161016401630161016501640161016601650161016701660161016801670161016901680161016a01690161016b016a0161016c016b0161016d016c0161016e016d01610170016f016e01710170016e01720171016e01730172016e015b0173016e016e0161015b01740175017601750177017601780179017a0179017b017a017c017d017e017d017f017e017e017f0180017f0181018001800181018201810183018201820183018401830185018401840185018601850187018601880189018a0189018b018a018a018b018c018b018d018c018c018d018e018d018f018e018e018f0190018f0191019001900191019201910193019201940195019601950197019601980199019a0199019b019a019c019d019e019d019f019e01a001a101a201a101a301a201a201a301a401a301a501a401a401a501a601a501a701a601a601a701a801a701a901a801a801a901aa01a901ab01aa01ac01ad01ae01ad01af01ae01ae01af01b001af01b101b001b001b101b201b101b301b201b201b301b401b301b501b401b401b501b601b501b701b601b801b901ba01b901bb01ba01cc01bc01bd01bd01be01bf01bd01bf01c001bd01c001c101bd01c101c201bd01c201c301bd01c301c401c401c501c601c401c601c701c401c701c801c401c801c901c401c901ca01c401ca01cb01c401cb01cc01bd01c401cc01ce01cd01dd01d001cf01ce01d101d001ce01d201d101ce01d301d201ce01d401d301ce01d501d401ce01d701d601d501d801d701d501d901d801d501da01d901d501db01da01d501dc01db01d501dd01dc01d501dd01d501ce01de01df01e001df01e101e001e001e101e201e101e301e201e401e501e601e501e701e601e801e901ea01e901eb01ea01ea01eb01ec01eb01ed01ec01ec01ed01ee01ed01ef01ee01ee01ef01f001ef01f101f001f001f101f201f101f301f201f401f501f601f501f701f601f601f701f801f701f901f801f801f901fa01f901fb01fa01fa01fb01fc01fb01fd01fc01fc01fd01fe01fd01ff01fe010002010202020102030202020402050206020502070206020602070208020702090208020a020b020c020b020d020c02 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 526 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 24 + format: 2 + dimension: 4 + - stream: 0 + offset: 28 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 18936 + _typelessdata: 0000b83c0020f0bf000000000000000000000000000080bfffffffff14bf073d29cb3c3d0000b83c0040cabf000000000000000000000000ffff7fbfffffffff14bf073dff757e3e00009b3d0080cfbf000000000000000000000000000080bfffffffff03b4e43d41bb613e0000033e0040d3bf000000000000000000000000000080bfffffffff834a413ede354d3e0040383e0080d5bf000000000000000000000000000080bfffffffff4bee873ed6e5403e00006e3e0040d6bf000000000000000000000000000080bfffffffffc495af3e29cb3c3e0010983e0008d5bf000000000000000000000000000080bfffffffff6f5ee03e8276433e0040b13e0060d1bf000000000000000000000000000080bfffffffff3ec4023f9078573e0030c13e00a0cbbf000000000000000000000000000080bfffffffff45860e3fc1ef763e0080c63e0020c4bf000000000000000000000000000080bfffffffff9d71123f44fd8f3e0020b83e0050b9bf000000000000000000000000000080bfffffffffb0d6073fe592ad3e00008d3e00a0adbf000000000000000000000000000080bfffffffffce0bd03e6d8dcd3e00007e3e00a0aabf000000000000000000000000000080bfffffffff9963bb3ec7c2d53e00006a3e0060a8bf000000000000000000000000000080bfffffffff4ea2ac3ecceadb3e0000f23d00249abf000000000000000000000000000080bfffffffff3989323ea56e013f0000483d00708dbf000000000000000000000000000080bfffffffffe98c933d9bcf123f0000483c00b480bf000000000000000000000000ffff7fbfffffffffe98c933c833b243f0000000000c064bf000000000000000000000000ffff7fbfffffffff0000000097d5373f54553d3c904347bf000000000000000000000000000080bfffffffff5aae8b3cfc004c3f56553d3d38ce2dbf000000000000000000000000000080bfffffffff5bae8b3d136b5d3f0000d53d006018bf000000000000000000000000000080bfffffffff26241d3ed6136c3f1cc7383ec83108bf000000000000000000000000000080bffffffffff951883e4225773f39ce8a3ee4f8fcbe000000000000000000000000000080bfffffffffe6cecc3e51c97d3f0080c03e0080f6be000000000000000000000000000080bfffffffff6d040e3f0000803f00d0de3e00b0f8be000000000000000000000000ffff7fbfffffffff6261243f78407f3f00c0fc3e0040ffbe000000000000000000000000ffff7fbfffffffff84773a3fe2017d3f00a80d3f003805bf000000000000000000000000000080bfffffffffb003513f582e793f00c01d3f00400dbf000000000000000000000000000080bfffffffffc4c2683ff8af733f00c01d3f00c04dbf000000000000000000000000000080bfffffffffc4c2683f3091473f00a80c3f00f045bf000000000000000000000000000080bffffffffff6894f3f41e94c3f00c0ff3e000041bf000000000000000000000000000080bfffffffff1cae3c3fe049503f00b0eb3e00603ebf000000000000000000000000000080bfffffffff04e12d3f8c15523f0000da3e00803dbf000000000000000000000000000080bfffffffff79d4203fc5ae523f0060bd3e00f83fbf000000000000000000000000ffff7fbfffffffff3ab60b3f76fe503f0080a63e006047bf000000000000000000000000000080bfffffffffe5abf53e88ed4b3f0080973e00c852bf000000000000000000000000000080bffffffffff689df3e2620443f0080923e004061bf000000000000000000000000000080bfffffffff5029d83e7c3a3a3f0040963e00c86ebf000000000000000000000000000080bfffffffffccb1dd3efdf8303f0080a13e00607bbf000000000000000000000000000080bfffffffff404bee3ea95b283f0080ba3e003485bf000000000000000000000000000080bfffffffff3d97093f7f131e3f0080e73e00a08fbf000000000000000000000000000080bfffffffff25ca2a3f7cd10f3f00f0113f000c9ebf000000000000000000000000000080bfffffffffd754573f252df83e0000233f00d0a9bf000000000000000000000000000080bfffffffffd881703fe5fbd73e00e02a3f0054b5bf000000000000000000000000000080bfffffffff76207c3fc279b83e00802d3f0000c3bf000000000000000000000000000080bfffffffff0000803f4611933eff5f2a3f726cd2bf000000000000000000000000000080bfffffffff97637b3f8ebb513e0000213f1c87dfbf000000000000000000000000ffff7fbfffffffff638e6d3fe4050a3e0060113f0050eabf000000000000000000000000000080bfffffffff5e80563f14039e3de2b8f83e5555f2bf000000000000000000000000000080bfffffffffcf7e373f83740c3d8ea3c53e5525f7bf000000000000000000000000000080bffffffffffbce113f82740c3c0080893e00c0f8bf000000000000000000000000000080bfffffffffc1e1ca3e0000000000e04b3e0038f8bf000000000000000000000000000080bfffffffffc368963eb50e3a3b00800a3e00a0f6bf000000000000000000000000000080bfffffffff7b5b4c3eb50e3a3c00c09c3d00f0f3bf000000000000000000000000000080bfffffffff0a49e73dc5aed23c0000b83c0020f0bf0000803e00000000000000000000803fffffffff14bf073d29cb3c3d0000b83c0040cabf0000803e0000000000000000ffff7f3fffffffff14bf073dff757e3e00009b3d0080cfbf0000803e00000000000000000000803fffffffff03b4e43d41bb613e0000033e0040d3bf0000803e00000000000000000000803fffffffff834a413ede354d3e0040383e0080d5bf0000803e00000000000000000000803fffffffff4bee873ed6e5403e00006e3e0040d6bf0000803e00000000000000000000803fffffffffc495af3e29cb3c3e0010983e0008d5bf0000803e00000000000000000000803fffffffff6f5ee03e8276433e0040b13e0060d1bf0000803e00000000000000000000803fffffffff3ec4023f9078573e0030c13e00a0cbbf0000803e00000000000000000000803fffffffff45860e3fc1ef763e0080c63e0020c4bf0000803e00000000000000000000803fffffffff9d71123f44fd8f3e0020b83e0050b9bf0000803e00000000000000000000803fffffffffb0d6073fe592ad3e00008d3e00a0adbf0000803e00000000000000000000803fffffffffce0bd03e6d8dcd3e00007e3e00a0aabf0000803e00000000000000000000803fffffffff9963bb3ec7c2d53e00006a3e0060a8bf0000803e00000000000000000000803fffffffff4ea2ac3ecceadb3e0000f23d00249abf0000803e00000000000000000000803fffffffff3989323ea56e013f0000483d00708dbf0000803e00000000000000000000803fffffffffe98c933d9bcf123f0000483c00b480bf0000803e0000000000000000ffff7f3fffffffffe98c933c833b243f0000000000c064bf0000803e00000000000000000000803fffffffff0000000097d5373f54553d3c904347bf0000803e00000000000000000000803fffffffff5aae8b3cfc004c3f56553d3d38ce2dbf0000803e00000000000000000000803fffffffff5bae8b3d136b5d3f0000d53d006018bf0000803e00000000000000000000803fffffffff26241d3ed6136c3f1cc7383ec83108bf0000803e00000000000000000000803ffffffffff951883e4225773f39ce8a3ee4f8fcbe0000803e00000000000000000000803fffffffffe6cecc3e51c97d3f0080c03e0080f6be0000803e00000000000000000000803fffffffff6d040e3f0000803f00d0de3e00b0f8be0000803e0000000000000000ffff7f3fffffffff6261243f78407f3f00c0fc3e0040ffbe0000803e00000000000000000000803fffffffff84773a3fe2017d3f00a80d3f003805bf0000803e00000000000000000000803fffffffffb003513f582e793f00c01d3f00400dbf0000803e00000000000000000000803fffffffffc4c2683ff8af733f00c01d3f00c04dbf0000803e00000000000000000000803fffffffffc4c2683f3091473f00a80c3f00f045bf0000803e00000000000000000000803ffffffffff6894f3f41e94c3f00c0ff3e000041bf0000803e00000000000000000000803fffffffff1cae3c3fe049503f00b0eb3e00603ebf0000803e00000000000000000000803fffffffff04e12d3f8c15523f0000da3e00803dbf0000803e00000000000000000000803fffffffff79d4203fc5ae523f0060bd3e00f83fbf0000803e0000000000000000ffff7f3fffffffff3ab60b3f76fe503f0080a63e006047bf0000803e00000000000000000000803fffffffffe5abf53e88ed4b3f0080973e00c852bf0000803e00000000000000000000803ffffffffff689df3e2620443f0080923e004061bf0000803e00000000000000000000803fffffffff5029d83e7c3a3a3f0040963e00c86ebf0000803e00000000000000000000803fffffffffccb1dd3efdf8303f0080a13e00607bbf0000803e00000000000000000000803fffffffff404bee3ea95b283f0080ba3e003485bf0000803e00000000000000000000803fffffffff3d97093f7f131e3f0080e73e00a08fbf0000803e00000000000000000000803fffffffff25ca2a3f7cd10f3f00f0113f000c9ebf0000803e00000000000000000000803fffffffffd754573f252df83e0000233f00d0a9bf0000803e00000000000000000000803fffffffffd881703fe5fbd73e00e02a3f0054b5bf0000803e00000000000000000000803fffffffff76207c3fc279b83e00802d3f0000c3bf0000803e00000000000000000000803fffffffff0000803f4611933eff5f2a3f726cd2bf0000803e00000000000000000000803fffffffff97637b3f8ebb513e0000213f1c87dfbf0000803e0000000000000000ffff7f3fffffffff638e6d3fe4050a3e0060113f0050eabf0000803e00000000000000000000803fffffffff5e80563f14039e3de2b8f83e5555f2bf0000803e00000000000000000000803fffffffffcf7e373f83740c3d8ea3c53e5525f7bf0000803e00000000000000000000803ffffffffffbce113f82740c3c0080893e00c0f8bf0000803e00000000000000000000803fffffffffc1e1ca3e0000000000e04b3e0038f8bf0000803e00000000000000000000803fffffffffc368963eb50e3a3b00800a3e00a0f6bf0000803e00000000000000000000803fffffffff7b5b4c3eb50e3a3c00c09c3d00f0f3bf0000803e00000000000000000000803fffffffff0a49e73dc5aed23c0000b83c0020f0bf00000000000080bf0000000000000000ffffffff14bf073d29cb3c3d0000b83c0020f0bf0000803e000080bf0000000000000000ffffffff14bf073d29cb3c3d0000b83c0040cabf00000000000080bf0000000000000000ffffffff14bf073dff757e3e0000b83c0040cabf0000803e000080bf0000000000000000ffffffff14bf073dff757e3e0000b83c0040cabf0000000005441c3ffbc54a3f00000000ffffffff14bf073dff757e3e0000b83c0040cabf0000803e05441c3ffbc54a3f00000000ffffffff14bf073dff757e3e00009b3d0080cfbf00000000cd05133f6092513f00000000ffffffff03b4e43d41bb613e00009b3d0080cfbf0000803ec4b3083ff671583f00000000ffffffff03b4e43d41bb613e0000033e0040d3bf000000009e13e03e682e663f00000000ffffffff834a413ede354d3e0000033e0040d3bf0000803ecf3dc33e02a86c3f00000000ffffffff834a413ede354d3e0040383e0080d5bf000000005cce813ed3a2773f00000000ffffffff4bee873ed6e5403e0040383e0080d5bf0000803e57dc3b3eb2a77b3f00000000ffffffff4bee873ed6e5403e00006e3e0040d6bf00000000454d543c80fa7f3f00000000ffffffffc495af3e29cb3c3e00006e3e0040d6bf0000803e534194bd0f547f3f00000000ffffffffc495af3e29cb3c3e0010983e0008d5bf00000000ba0c84bedb56773f00000000ffffffff6f5ee03e8276433e0010983e0008d5bf0000803e8dd1c1bed1f26c3f00000000ffffffff6f5ee03e8276433e0040b13e0060d1bf000000003a701ebf8e14493f00000000ffffffff3ec4023f9078573e0040b13e0060d1bf0000803ee0693abf99752f3f00000000ffffffff3ec4023f9078573e0030c13e00a0cbbf00000000c0f265bf1608e13e00000000ffffffff45860e3fc1ef763e0030c13e00a0cbbf0000803e85d173bff90e9c3e00000000ffffffff45860e3fc1ef763e0080c63e0020c4bf00000000d1d47fbfc8aa14bd00000000ffffffff9d71123f44fd8f3e0080c63e0020c4bf0000803eb6f87abf4af649be00000000ffffffff9d71123f44fd8f3e0020b83e0050b9bf00000000f44f61bf1711f3be00000000ffffffffb0d6073fe592ad3e0020b83e0050b9bf0000803e99314ebf52b917bf00000000ffffffffb0d6073fe592ad3e00008d3e00a0adbf00000000f19339bfcd5730bf00000000ffffffffce0bd03e6d8dcd3e00008d3e00a0adbf0000803e4d8a34bf467f35bf00000000ffffffffce0bd03e6d8dcd3e00007e3e00a0aabf0000000014db27bfd94941bf00000000ffffffff9963bb3ec7c2d53e00007e3e00a0aabf0000803e096029bf5ff53fbf00000000ffffffff9963bb3ec7c2d53e00006a3e0060a8bf00000000602433bf98e036bf00000000ffffffff4ea2ac3ecceadb3e00006a3e0060a8bf0000803e62ed34bf811c35bf00000000ffffffff4ea2ac3ecceadb3e0000f23d00249abf000000002d1f3ebf2e6f2bbf00000000ffffffff3989323ea56e013f0000f23d00249abf0000803ebb8047bf8c6b20bf00000000ffffffff3989323ea56e013f0000483d00708dbf0000000088a65cbf18ce01bf00000000ffffffffe98c933d9bcf123f0000483d00708dbf0000803ef3f566bf51d8dcbe00000000ffffffffe98c933d9bcf123f0000483c00b480bf00000000dcd876bffcae87be00000000ffffffffe98c933c833b243f0000483c00b480bf0000803ee08e7bbf46ed3dbe00000000ffffffffe98c933c833b243f0000000000c064bf00000000ecd07fbfa2381bbd00000000ffffffff0000000097d5373f0000000000c064bf0000803ec4de7fbf986c023d00000000ffffffff0000000097d5373f54553d3c904347bf00000000d5287cbfe7b4303e00000000ffffffff5aae8b3cfc004c3f54553d3c904347bf0000803ecee877bf4b677f3e00000000ffffffff5aae8b3cfc004c3f56553d3d38ce2dbf00000000357869bf3e07d23e00000000ffffffff5bae8b3d136b5d3f56553d3d38ce2dbf0000803e59155fbfe627fb3e00000000ffffffff5bae8b3d136b5d3f0000d53d006018bf0000000086be44bfa9ca233f00000000ffffffff26241d3ed6136c3f0000d53d006018bf0000803e26c934bfad40353f00000000ffffffff26241d3ed6136c3f1cc7383ec83108bf00000000ab300fbf7835543f00000000fffffffff951883e4225773f1cc7383ec83108bf0000803ef816f3be5d4e613f00000000fffffffff951883e4225773f39ce8a3ee4f8fcbe000000003d3e97be6f93743f00000000ffffffffe6cecc3e51c97d3f39ce8a3ee4f8fcbe0000803e1cd652bed4837a3f00000000ffffffffe6cecc3e51c97d3f0080c03e0080f6be00000000ef7f9fbdf1387f3f00000000ffffffff6d040e3f0000803f0080c03e0080f6be0000803e7e4296bcfaf47f3f00000000ffffffff6d040e3f0000803f00d0de3e00b0f8be00000000018ff53d35277e3f00000000ffffffff6261243f78407f3f00d0de3e00b0f8be0000803e30682b3e57637c3f00000000ffffffff6261243f78407f3f00c0fc3e0040ffbe0000000030ec843eee38773f00000000ffffffff84773a3fe2017d3f00c0fc3e0040ffbe0000803e810f9b3e42fa733f00000000ffffffff84773a3fe2017d3f00a80d3f003805bf00000000f801c33e58b46c3f00000000ffffffffb003513f582e793f00a80d3f003805bf0000803e8a83d43e15e8683f00000000ffffffffb003513f582e793f00c01d3f00400dbf00000000129ee43ef00f653f00000000ffffffffc4c2683ff8af733f00c01d3f00400dbf0000803e129ee43ef00f653f00000000ffffffffc4c2683ff8af733f00c01d3f00400dbf000000000000803f0000000000000000ffffffffc4c2683ff8af733f00c01d3f00400dbf0000803e0000803f0000000000000000ffffffffc4c2683ff8af733f00c01d3f00c04dbf000000000000803f0000000000000000ffffffffc4c2683f3091473f00c01d3f00c04dbf0000803e0000803f0000000000000000ffffffffc4c2683f3091473f00c01d3f00c04dbf0000000029d4d4beacd568bf00000000ffffffffc4c2683f3091473f00c01d3f00c04dbf0000803e29d4d4beacd568bf00000000ffffffffc4c2683f3091473f00a80c3f00f045bf000000007655cdbede826abf00000000fffffffff6894f3f41e94c3f00a80c3f00f045bf0000803e651cc4befb796cbf00000000fffffffff6894f3f41e94c3f00c0ff3e000041bf000000003fa6a9bed08971bf00000000ffffffff1cae3c3fe049503f00c0ff3e000041bf0000803ee8ae97befd8174bf00000000ffffffff1cae3c3fe049503f00b0eb3e00603ebf00000000b44354be88707abf00000000ffffffff04e12d3f8c15523f00b0eb3e00603ebf0000803ea9a51fbea0de7cbf00000000ffffffff04e12d3f8c15523f0000da3e00803dbf000000001ff4b73c79ef7fbf00000000ffffffff79d4203fc5ae523f0000da3e00803dbf0000803e06c2dc3d26827ebf00000000ffffffff79d4203fc5ae523f0060bd3e00f83fbf000000007bc2963e89a674bf00000000ffffffff3ab60b3f76fe503f0060bd3e00f83fbf0000803efcc4d73e332868bf00000000ffffffff3ab60b3f76fe503f0080a63e006047bf000000005846273fa1ca41bf00000000ffffffffe5abf53e88ed4b3f0080a63e006047bf0000803e07ac403f269028bf00000000ffffffffe5abf53e88ed4b3f0080973e00c852bf0000000038bd673f178fd9be00000000fffffffff689df3e2620443f0080973e00c852bf0000803e1288743fae8797be00000000fffffffff689df3e2620443f0080923e004061bf000000004b4f7f3fef4a96bd00000000ffffffff5029d83e7c3a3a3f0080923e004061bf0000803e56e27f3f2173f63c00000000ffffffff5029d83e7c3a3a3f0040963e00c86ebf000000000422793f2e966b3e00000000ffffffffccb1dd3efdf8303f0040963e00c86ebf0000803eea72723f435fa43e00000000ffffffffccb1dd3efdf8303f0080a13e00607bbf00000000486f5c3fd52b023f00000000ffffffff404bee3ea95b283f0080a13e00607bbf0000803e73f44f3f0a4d153f00000000ffffffff404bee3ea95b283f0080ba3e003485bf000000004f2c3b3f1fa62e3f00000000ffffffff3d97093f7f131e3f0080ba3e003485bf0000803ee8c6333fd540363f00000000ffffffff3d97093f7f131e3f0080e73e00a08fbf000000004d252f3f52b53a3f00000000ffffffff25ca2a3f7cd10f3f0080e73e00a08fbf0000803e8215303fdad2393f00000000ffffffff25ca2a3f7cd10f3f00f0113f000c9ebf00000000ec47393faaa7303f00000000ffffffffd754573f252df83e00f0113f000c9ebf0000803ef251433fc37c253f00000000ffffffffd754573f252df83e0000233f00d0a9bf000000008d985b3fd194033f00000000ffffffffd881703fe5fbd73e0000233f00d0a9bf0000803eac8d673f3859da3e00000000ffffffffd881703fe5fbd73e00e02a3f0054b5bf000000007b56783fada7783e00000000ffffffff76207c3fc279b83e00e02a3f0054b5bf0000803efd6c7c3f4c842a3e00000000ffffffff76207c3fc279b83e00802d3f0000c3bf00000000c9eb7f3f9874cb3c00000000ffffffff0000803f4611933e00802d3f0000c3bf0000803ec1c97f3f8d9f26bd00000000ffffffff0000803f4611933eff5f2a3f726cd2bf00000000900c7c3fd63533be00000000ffffffff97637b3f8ebb513eff5f2a3f726cd2bf0000803e0999773fe31882be00000000ffffffff97637b3f8ebb513e0000213f1c87dfbf00000000492a683f00bcd7be00000000ffffffff638e6d3fe4050a3e0000213f1c87dfbf0000803e52e35c3f8b6601bf00000000ffffffff638e6d3fe4050a3e0060113f0050eabf0000000089e23f3f637529bf00000000ffffffff5e80563f14039e3d0060113f0050eabf0000803ec2662e3f5b673bbf00000000ffffffff5e80563f14039e3de2b8f83e5555f2bf000000004e77063f66d759bf00000000ffffffffcf7e373f83740c3de2b8f83e5555f2bf0000803e4e1ae13e4cee65bf00000000ffffffffcf7e373f83740c3d8ea3c53e5525f7bf00000000158f883ef5b976bf00000000fffffffffbce113f82740c3c8ea3c53e5525f7bf0000803e1b723c3eb2a07bbf00000000fffffffffbce113f82740c3c0080893e00c0f8bf000000000f658c3dd4657fbf00000000ffffffffc1e1ca3e000000000080893e00c0f8bf0000803e9a33873c13f77fbf00000000ffffffffc1e1ca3e0000000000e04b3e0038f8bf00000000f784d0bd6eab7ebf00000000ffffffffc368963eb50e3a3b00e04b3e0038f8bf0000803ef74a15bebf437dbf00000000ffffffffc368963eb50e3a3b00800a3e00a0f6bf00000000c1d474be3e9378bf00000000ffffffff7b5b4c3eb50e3a3c00800a3e00a0f6bf0000803e094693be482e75bf00000000ffffffff7b5b4c3eb50e3a3c00c09c3d00f0f3bf00000000ada9c5be3c276cbf00000000ffffffff0a49e73dc5aed23c00c09c3d00f0f3bf0000803e419cdebe628966bf00000000ffffffff0a49e73dc5aed23c0000b83c0020f0bf00000000ae03f7be863c60bf00000000ffffffff14bf073d29cb3c3d0000b83c0020f0bf0000803eae03f7be863c60bf00000000ffffffff14bf073d29cb3c3d00c0383f0080f6bf000000000000000000000000000080bfffffffff000000000000000000c0383f000000bf000000000000000000000000000080bfffffffff000000000000803f0060803f000000bf000000000000000000000000000080bfffffffff4fefa23e0000803f0060803f008083bf000000000000000000000000000080bfffffffff4fefa23ea850213f0020a93f008083bf000000000000000000000000000080bfffffffff19af2d3fa850213f0020a93f000000bf000000000000000000000000000080bfffffffff19af2d3f0000803f0080cd3f000000bf000000000000000000000000000080bfffffffff0000803f0000803f0080cd3f0080f6bf000000000000000000000000000080bfffffffff0000803f000000000020a93f0080f6bf000000000000000000000000000080bfffffffff19af2d3f000000000020a93f0020a7bf000000000000000000000000000080bfffffffff19af2d3f58afde3e0060803f0020a7bf000000000000000000000000000080bfffffffff4fefa23e58afde3e0060803f0080f6bf000000000000000000000000000080bfffffffff4fefa23e0000000000c0383f0080f6bf0000803e00000000000000000000803fffffffff000000000000000000c0383f000000bf0000803e00000000000000000000803fffffffff000000000000803f0060803f000000bf0000803e00000000000000000000803fffffffff4fefa23e0000803f0060803f008083bf0000803e00000000000000000000803fffffffff4fefa23ea850213f0020a93f008083bf0000803e00000000000000000000803fffffffff19af2d3fa850213f0020a93f000000bf0000803e00000000000000000000803fffffffff19af2d3f0000803f0080cd3f000000bf0000803e00000000000000000000803fffffffff0000803f0000803f0080cd3f0080f6bf0000803e00000000000000000000803fffffffff0000803f000000000020a93f0080f6bf0000803e00000000000000000000803fffffffff19af2d3f000000000020a93f0020a7bf0000803e00000000000000000000803fffffffff19af2d3f58afde3e0060803f0020a7bf0000803e00000000000000000000803fffffffff4fefa23e58afde3e0060803f0080f6bf0000803e00000000000000000000803fffffffff4fefa23e0000000000c0383f0080f6bf00000000000080bf0000000000000000ffffffff000000000000000000c0383f0080f6bf0000803e000080bf0000000000000000ffffffff000000000000000000c0383f000000bf00000000000080bf0000000000000000ffffffff000000000000803f00c0383f000000bf0000803e000080bf0000000000000000ffffffff000000000000803f00c0383f000000bf00000000000000000000803f00000000ffffffff000000000000803f00c0383f000000bf0000803e000000000000803f00000000ffffffff000000000000803f0060803f000000bf00000000000000000000803f00000000ffffffff4fefa23e0000803f0060803f000000bf0000803e000000000000803f00000000ffffffff4fefa23e0000803f0060803f000000bf000000000000803f0000000000000000ffffffff4fefa23e0000803f0060803f000000bf0000803e0000803f0000000000000000ffffffff4fefa23e0000803f0060803f008083bf000000000000803f0000000000000000ffffffff4fefa23ea850213f0060803f008083bf0000803e0000803f0000000000000000ffffffff4fefa23ea850213f0060803f008083bf00000000000000000000803f00000000ffffffff4fefa23ea850213f0060803f008083bf0000803e000000000000803f00000000ffffffff4fefa23ea850213f0020a93f008083bf00000000000000000000803f00000000ffffffff19af2d3fa850213f0020a93f008083bf0000803e000000000000803f00000000ffffffff19af2d3fa850213f0020a93f008083bf00000000000080bf0000000000000000ffffffff19af2d3fa850213f0020a93f008083bf0000803e000080bf0000000000000000ffffffff19af2d3fa850213f0020a93f000000bf00000000000080bf0000000000000000ffffffff19af2d3f0000803f0020a93f000000bf0000803e000080bf0000000000000000ffffffff19af2d3f0000803f0020a93f000000bf00000000000000000000803f00000000ffffffff19af2d3f0000803f0020a93f000000bf0000803e000000000000803f00000000ffffffff19af2d3f0000803f0080cd3f000000bf00000000000000000000803f00000000ffffffff0000803f0000803f0080cd3f000000bf0000803e000000000000803f00000000ffffffff0000803f0000803f0080cd3f000000bf000000000000803f0000000000000000ffffffff0000803f0000803f0080cd3f000000bf0000803e0000803f0000000000000000ffffffff0000803f0000803f0080cd3f0080f6bf000000000000803f0000000000000000ffffffff0000803f000000000080cd3f0080f6bf0000803e0000803f0000000000000000ffffffff0000803f000000000080cd3f0080f6bf0000000000000000000080bf00000000ffffffff0000803f000000000080cd3f0080f6bf0000803e00000000000080bf00000000ffffffff0000803f000000000020a93f0080f6bf0000000000000000000080bf00000000ffffffff19af2d3f000000000020a93f0080f6bf0000803e00000000000080bf00000000ffffffff19af2d3f000000000020a93f0080f6bf00000000000080bf0000000000000000ffffffff19af2d3f000000000020a93f0080f6bf0000803e000080bf0000000000000000ffffffff19af2d3f000000000020a93f0020a7bf00000000000080bf0000000000000000ffffffff19af2d3f58afde3e0020a93f0020a7bf0000803e000080bf0000000000000000ffffffff19af2d3f58afde3e0020a93f0020a7bf0000000000000000000080bf00000000ffffffff19af2d3f58afde3e0020a93f0020a7bf0000803e00000000000080bf00000000ffffffff19af2d3f58afde3e0060803f0020a7bf0000000000000000000080bf00000000ffffffff4fefa23e58afde3e0060803f0020a7bf0000803e00000000000080bf00000000ffffffff4fefa23e58afde3e0060803f0020a7bf000000000000803f0000000000000000ffffffff4fefa23e58afde3e0060803f0020a7bf0000803e0000803f0000000000000000ffffffff4fefa23e58afde3e0060803f0080f6bf000000000000803f0000000000000000ffffffff4fefa23e000000000060803f0080f6bf0000803e0000803f0000000000000000ffffffff4fefa23e000000000060803f0080f6bf0000000000000000000080bf00000000ffffffff4fefa23e000000000060803f0080f6bf0000803e00000000000080bf00000000ffffffff4fefa23e0000000000c0383f0080f6bf0000000000000000000080bf00000000ffffffff000000000000000000c0383f0080f6bf0000803e00000000000080bf00000000ffffffff000000000000000000a0db3f0080f6bf000000000000000000000000ffff7fbfffffffff000000000000000000a0db3f000000bf000000000000000000000000ffff7fbfffffffff000000000000803f00600040000000bf000000000000000000000000ffff7fbfffffffff0000803f0000803f006000400080f6bf000000000000000000000000ffff7fbfffffffff0000803f0000000000a0db3f0080f6bf0000803e0000000000000000ffff7f3fffffffff000000000000000000a0db3f000000bf0000803e0000000000000000ffff7f3fffffffff000000000000803f00600040000000bf0000803e0000000000000000ffff7f3fffffffff0000803f0000803f006000400080f6bf0000803e0000000000000000ffff7f3fffffffff0000803f0000000000a0db3f0080f6bf00000000000080bf0000000000000000ffffffff000000000000000000a0db3f0080f6bf0000803e000080bf0000000000000000ffffffff000000000000000000a0db3f000000bf00000000000080bf0000000000000000ffffffff000000000000803f00a0db3f000000bf0000803e000080bf0000000000000000ffffffff000000000000803f00a0db3f000000bf00000000000000000000803f00000000ffffffff000000000000803f00a0db3f000000bf0000803e000000000000803f00000000ffffffff000000000000803f00600040000000bf00000000000000000000803f00000000ffffffff0000803f0000803f00600040000000bf0000803e000000000000803f00000000ffffffff0000803f0000803f00600040000000bf000000000000803f0000000000000000ffffffff0000803f0000803f00600040000000bf0000803e0000803f0000000000000000ffffffff0000803f0000803f006000400080f6bf000000000000803f0000000000000000ffffffff0000803f00000000006000400080f6bf0000803e0000803f0000000000000000ffffffff0000803f00000000006000400080f6bf0000000000000000000080bf00000000ffffffff0000803f00000000006000400080f6bf0000803e00000000000080bf00000000ffffffff0000803f0000000000a0db3f0080f6bf0000000000000000000080bf00000000ffffffff000000000000000000a0db3f0080f6bf0000803e00000000000080bf00000000ffffffff0000000000000000007008400080f6bf000000000000000000000000000080bfffffffff000000000000000000700840000000bf000000000000000000000000000080bfffffffff000000000000803f00e01a40000000bf000000000000000000000000000080bfffffffff21e5a63e0000803f00502d400040a2bf000000000000000000000000000080bfffffffff21e5263f955cec3e004a2e400044a8bf000000000000000000000000000080bfffffffff9e502b3f247cdb3e00982f4000d0b0bf000000000000000000000000ffff7fbfffffffff4b38313fc181c33e002a3140007cbbbf000000000000000000000000000080bfffffffffbb53383f2f91a53e00f0324000e0c7bf000000000000000000000000000080bfffffffff855a403f34ce823e00b03140004cb5bf000000000000000000000000000080bfffffffff36b23a3f10edb63e00d030400050a4bf000000000000000000000000000080bfffffffff65bc363f4a93e63e004c304000ac94bf000000000000000000000000000080bffffffffff766343f373a093f00203040002086bf000000000000000000000000ffff7fbfffffffffd39f333f04a21d3f00203040000000bf000000000000000000000000000080bfffffffffd39f333f0000803f00004140000000bf000000000000000000000000000080bfffffffff0000803f0000803f000041400080f6bf000000000000000000000000000080bfffffffff0000803f00000000002030400080f6bf000000000000000000000000000080bfffffffffd39f333f0000000000201c40006090bf000000000000000000000000000080bfffffffffbf35b23e3a410f3f00381b4000988abf000000000000000000000000ffff7fbfffffffffb201aa3e485d173f0080194000807bbf000000000000000000000000000080bfffffffffd9729a3e7e61293f009c184000206ebf000000000000000000000000000080bfffffffff0163923efbc2323f00f01740000064bf000000000000000000000000000080bfffffffff134e8c3eeedc393f007c184000987abf000000000000000000000000000080bfffffffff5841913e35042a3f00e0184000f089bf000000000000000000000000000080bfffffffff89ca943ef148183f001c1940008c98bf000000000000000000000000000080bfffffffffa7e9963eb2ca033f0030194000c0a9bf000000000000000000000000000080bfffffffffb19e973e0f52d73e003019400080f6bf000000000000000000000000ffff7fbfffffffffb19e973e00000000007008400080f6bf0000803e00000000000000000000803fffffffff000000000000000000700840000000bf0000803e00000000000000000000803fffffffff000000000000803f00e01a40000000bf0000803e00000000000000000000803fffffffff21e5a63e0000803f00502d400040a2bf0000803e00000000000000000000803fffffffff21e5263f955cec3e004a2e400044a8bf0000803e00000000000000000000803fffffffff9e502b3f247cdb3e00982f4000d0b0bf0000803e0000000000000000ffff7f3fffffffff4b38313fc181c33e002a3140007cbbbf0000803e00000000000000000000803fffffffffbb53383f2f91a53e00f0324000e0c7bf0000803e00000000000000000000803fffffffff855a403f34ce823e00b03140004cb5bf0000803e00000000000000000000803fffffffff36b23a3f10edb63e00d030400050a4bf0000803e00000000000000000000803fffffffff65bc363f4a93e63e004c304000ac94bf0000803e00000000000000000000803ffffffffff766343f373a093f00203040002086bf0000803e0000000000000000ffff7f3fffffffffd39f333f04a21d3f00203040000000bf0000803e00000000000000000000803fffffffffd39f333f0000803f00004140000000bf0000803e00000000000000000000803fffffffff0000803f0000803f000041400080f6bf0000803e00000000000000000000803fffffffff0000803f00000000002030400080f6bf0000803e00000000000000000000803fffffffffd39f333f0000000000201c40006090bf0000803e00000000000000000000803fffffffffbf35b23e3a410f3f00381b4000988abf0000803e0000000000000000ffff7f3fffffffffb201aa3e485d173f0080194000807bbf0000803e00000000000000000000803fffffffffd9729a3e7e61293f009c184000206ebf0000803e00000000000000000000803fffffffff0163923efbc2323f00f01740000064bf0000803e00000000000000000000803fffffffff134e8c3eeedc393f007c184000987abf0000803e00000000000000000000803fffffffff5841913e35042a3f00e0184000f089bf0000803e00000000000000000000803fffffffff89ca943ef148183f001c1940008c98bf0000803e00000000000000000000803fffffffffa7e9963eb2ca033f0030194000c0a9bf0000803e00000000000000000000803fffffffffb19e973e0f52d73e003019400080f6bf0000803e0000000000000000ffff7f3fffffffffb19e973e00000000007008400080f6bf00000000000080bf0000000000000000ffffffff0000000000000000007008400080f6bf0000803e000080bf0000000000000000ffffffff000000000000000000700840000000bf00000000000080bf0000000000000000ffffffff000000000000803f00700840000000bf0000803e000080bf0000000000000000ffffffff000000000000803f00700840000000bf00000000000000000000803f00000000ffffffff000000000000803f00700840000000bf0000803e000000000000803f00000000ffffffff000000000000803f00e01a40000000bf00000000000000000000803f00000000ffffffff21e5a63e0000803f00e01a40000000bf0000803e000000000000803f00000000ffffffff21e5a63e0000803f00e01a40000000bf00000000d9ac6f3fabe8b33e00000000ffffffff21e5a63e0000803f00e01a40000000bf0000803ed9ac6f3fabe8b33e00000000ffffffff21e5a63e0000803f00502d400040a2bf000000002ecb6f3fbe46b33e00000000ffffffff21e5263f955cec3e00502d400040a2bf0000803eda1b703fc794b13e00000000ffffffff21e5263f955cec3e004a2e400044a8bf00000000ec0e743f3d8d9a3e00000000ffffffff9e502b3f247cdb3e004a2e400044a8bf0000803e157f743fa3c1973e00000000ffffffff9e502b3f247cdb3e00982f4000d0b0bf000000009b21753f5c9a933e00000000ffffffff4b38313fc181c33e00982f4000d0b0bf0000803e3760753feef7913e00000000ffffffff4b38313fc181c33e002a3140007cbbbf000000001bc8753f1c368f3e00000000ffffffffbb53383f2f91a53e002a3140007cbbbf0000803efcf4753fa3008e3e00000000ffffffffbb53383f2f91a53e00f0324000e0c7bf000000006f1d763f35e78c3e00000000ffffffff855a403f34ce823e00f0324000e0c7bf0000803e6f1d763f35e78c3e00000000ffffffff855a403f34ce823e00f0324000e0c7bf0000000091b67dbfc79008be00000000ffffffff855a403f34ce823e00f0324000e0c7bf0000803e91b67dbfc79008be00000000ffffffff855a403f34ce823e00b03140004cb5bf0000000085087ebf9b5ffdbd00000000ffffffff36b23a3f10edb63e00b03140004cb5bf0000803ee7587ebfb156e8bd00000000ffffffff36b23a3f10edb63e00d030400050a4bf0000000053f07ebf3549babd00000000ffffffff65bc363f4a93e63e00d030400050a4bf0000803e7f347fbfe444a1bd00000000ffffffff65bc363f4a93e63e004c304000ac94bf00000000d9a57fbfc2c456bd00000000fffffffff766343f373a093f004c304000ac94bf0000803eafcf7fbfe3411dbd00000000fffffffff766343f373a093f00203040002086bf000000006dfe7fbf640ce3bb00000000ffffffffd39f333f04a21d3f00203040002086bf0000803ed6ff7fbf448811bb00000000ffffffffd39f333f04a21d3f00203040000000bf00000000000080bf0000000000000000ffffffffd39f333f0000803f00203040000000bf0000803e000080bf0000000000000000ffffffffd39f333f0000803f00203040000000bf00000000000000000000803f00000000ffffffffd39f333f0000803f00203040000000bf0000803e000000000000803f00000000ffffffffd39f333f0000803f00004140000000bf00000000000000000000803f00000000ffffffff0000803f0000803f00004140000000bf0000803e000000000000803f00000000ffffffff0000803f0000803f00004140000000bf000000000000803f0000000000000000ffffffff0000803f0000803f00004140000000bf0000803e0000803f0000000000000000ffffffff0000803f0000803f000041400080f6bf000000000000803f0000000000000000ffffffff0000803f00000000000041400080f6bf0000803e0000803f0000000000000000ffffffff0000803f00000000000041400080f6bf0000000000000000000080bf00000000ffffffff0000803f00000000000041400080f6bf0000803e00000000000080bf00000000ffffffff0000803f00000000002030400080f6bf0000000000000000000080bf00000000ffffffffd39f333f00000000002030400080f6bf0000803e00000000000080bf00000000ffffffffd39f333f00000000002030400080f6bf00000000365e6ebffab9babe00000000ffffffffd39f333f00000000002030400080f6bf0000803e365e6ebffab9babe00000000ffffffffd39f333f0000000000201c40006090bf00000000b88a6ebf13d6b9be00000000ffffffffbf35b23e3a410f3f00201c40006090bf0000803eed016fbf6d6db7be00000000ffffffffbf35b23e3a410f3f00381b4000988abf000000003ee975bfe3518ebe00000000ffffffffb201aa3e485d173f00381b4000988abf0000803ee5c476bff83f88be00000000ffffffffb201aa3e485d173f0080194000807bbf00000000005077bf084084be00000000ffffffffd9729a3e7e61293f0080194000807bbf0000803e295677bfef1184be00000000ffffffffd9729a3e7e61293f009c184000206ebf00000000126477bf8ba983be00000000ffffffff0163923efbc2323f009c184000206ebf0000803ed46877bfc48583be00000000ffffffff0163923efbc2323f00f01740000064bf00000000996e77bf515a83be00000000ffffffff134e8c3eeedc393f00f01740000064bf0000803e996e77bf515a83be00000000ffffffff134e8c3eeedc393f00f01740000064bf00000000fbce7e3fb05cc53d00000000ffffffff134e8c3eeedc393f00f01740000064bf0000803efbce7e3fb05cc53d00000000ffffffff134e8c3eeedc393f007c184000987abf000000009b187f3f11f3ab3d00000000ffffffff5841913e35042a3f007c184000987abf0000803ee1537f3f0955943d00000000ffffffff5841913e35042a3f00e0184000f089bf0000000033ab7f3fe94c503d00000000ffffffff89ca943ef148183f00e0184000f089bf0000803ed4c87f3f630a283d00000000ffffffff89ca943ef148183f001c1940008c98bf00000000d1ed7f3f7bf5c03c00000000ffffffffa7e9963eb2ca033f001c1940008c98bf0000803eaef77f3fd58d823c00000000ffffffffa7e9963eb2ca033f0030194000c0a9bf00000000beff7f3f923e383b00000000ffffffffb19e973e0f52d73e0030194000c0a9bf0000803ef9ff7f3fdaf26f3a00000000ffffffffb19e973e0f52d73e003019400080f6bf00000000ffff7f3f0000000000000000ffffffffb19e973e00000000003019400080f6bf0000803effff7f3f0000000000000000ffffffffb19e973e00000000003019400080f6bf0000000000000000000080bf00000000ffffffffb19e973e00000000003019400080f6bf0000803e00000000000080bf00000000ffffffffb19e973e00000000007008400080f6bf0000000000000000000080bf00000000ffffffff0000000000000000007008400080f6bf0000803e00000000000080bf00000000ffffffff000000000000000000505d400080f6bf000000000000000000000000000080bfffffffff34f6b23e0000000000505d4000c0a0bf000000000000000000000000000080bfffffffff34f6b23ee391f03e00304840000000bf000000000000000000000000ffff7fbfffffffff000000000000803f00605b40000000bf000000000000000000000000000080bfffffffff4f8ca23e0000803f00606140000042bf000000000000000000000000000080bfffffffffa160d53ea8b5513f00fc624000b853bf000000000000000000000000000080bfffffffffe902e33e3e48453f00706440006065bf000000000000000000000000ffff7fbfffffffff5552ef3e0de6383f00c86540002877bf000000000000000000000000000080bfffffffff8db4fa3e6a6d2c3f0010674000a084bf000000000000000000000000000080bfffffffff9cc7023fabbc1f3f003c684000b075bf000000000000000000000000000080bfffffffff58be073f21752d3f00806940008063bf000000000000000000000000000080bfffffffffbd1a0d3fb5363a3f00d46a4000e052bf000000000000000000000000000080bfffffffffe7ba123fbddf453f00306c40000044bf000000000000000000000000000080bffffffffff57c183f8e4e503f00d07240000000bf000000000000000000000000000080bfffffffffd78c343f0000803f00508240000000bf000000000000000000000000000080bfffffffff0000803f0000803f00606f4000c0a0bf000000000000000000000000000080bfffffffff5afd253fe391f03e00606f400080f6bf000000000000000000000000000080bfffffffff5afd253f0000000000505d400080f6bf0000803e00000000000000000000803fffffffff34f6b23e0000000000505d4000c0a0bf0000803e00000000000000000000803fffffffff34f6b23ee391f03e00304840000000bf0000803e0000000000000000ffff7f3fffffffff000000000000803f00605b40000000bf0000803e00000000000000000000803fffffffff4f8ca23e0000803f00606140000042bf0000803e00000000000000000000803fffffffffa160d53ea8b5513f00fc624000b853bf0000803e00000000000000000000803fffffffffe902e33e3e48453f00706440006065bf0000803e0000000000000000ffff7f3fffffffff5552ef3e0de6383f00c86540002877bf0000803e00000000000000000000803fffffffff8db4fa3e6a6d2c3f0010674000a084bf0000803e00000000000000000000803fffffffff9cc7023fabbc1f3f003c684000b075bf0000803e00000000000000000000803fffffffff58be073f21752d3f00806940008063bf0000803e00000000000000000000803fffffffffbd1a0d3fb5363a3f00d46a4000e052bf0000803e00000000000000000000803fffffffffe7ba123fbddf453f00306c40000044bf0000803e00000000000000000000803ffffffffff57c183f8e4e503f00d07240000000bf0000803e00000000000000000000803fffffffffd78c343f0000803f00508240000000bf0000803e00000000000000000000803fffffffff0000803f0000803f00606f4000c0a0bf0000803e00000000000000000000803fffffffff5afd253fe391f03e00606f400080f6bf0000803e00000000000000000000803fffffffff5afd253f0000000000505d400080f6bf00000000000080bf0000000000000000ffffffff34f6b23e0000000000505d400080f6bf0000803e000080bf0000000000000000ffffffff34f6b23e0000000000505d4000c0a0bf00000000f2e17cbf82511fbe00000000ffffffff34f6b23ee391f03e00505d4000c0a0bf0000803e1b0775bff94994be00000000ffffffff34f6b23ee391f03e00304840000000bf00000000159b6abfb3e6ccbe00000000ffffffff000000000000803f00304840000000bf0000803e159b6abfb3e6ccbe00000000ffffffff000000000000803f00304840000000bf0000000000000000ffff7f3f00000000ffffffff000000000000803f00304840000000bf0000803e00000000ffff7f3f00000000ffffffff000000000000803f00605b40000000bf0000000000000000ffff7f3f00000000ffffffff4f8ca23e0000803f00605b40000000bf0000803e00000000ffff7f3f00000000ffffffff4f8ca23e0000803f00605b40000000bf000000004c96703ff2f8ae3e00000000ffffffff4f8ca23e0000803f00605b40000000bf0000803e4c96703ff2f8ae3e00000000ffffffff4f8ca23e0000803f00606140000042bf000000000e97703fd2f4ae3e00000000ffffffffa160d53ea8b5513f00606140000042bf0000803e8498703fc2ecae3e00000000ffffffffa160d53ea8b5513f00fc624000b853bf00000000997a713fcdfca93e00000000ffffffffe902e33e3e48453f00fc624000b853bf0000803e5454723f4713a53e00000000ffffffffe902e33e3e48453f00706440006065bf00000000a7ce733fe3209c3e00000000ffffffff5552ef3e0de6383f00706440006065bf0000803ea46f743f0525983e00000000ffffffff5552ef3e0de6383f00c86540002877bf000000002c7b753f2d42913e00000000ffffffff8db4fa3e6a6d2c3f00c86540002877bf0000803ec6e6753ff0628e3e00000000ffffffff8db4fa3e6a6d2c3f0010674000a084bf000000005e4f763f7c888b3e00000000ffffffff9cc7023fabbc1f3f0010674000a084bf0000803e5e4f763f7c888b3e00000000ffffffff9cc7023fabbc1f3f0010674000a084bf00000000eaf378bfe69c6e3e00000000ffffffff9cc7023fabbc1f3f0010674000a084bf0000803eeaf378bfe69c6e3e00000000ffffffff9cc7023fabbc1f3f003c684000b075bf000000009f3e78bfbe237a3e00000000ffffffff58be073f21752d3f003c684000b075bf0000803e737877bf0610833e00000000ffffffff58be073f21752d3f00806940008063bf0000000034c975bf922e8f3e00000000ffffffffbd1a0d3fb5363a3f00806940008063bf0000803e7fdd74bfde5b953e00000000ffffffffbd1a0d3fb5363a3f00d46a4000e052bf00000000d6d472bf0c19a23e00000000ffffffffe7ba123fbddf453f00d46a4000e052bf0000803ee2b271bfacbba83e00000000ffffffffe7ba123fbddf453f00306c40000044bf00000000061e6fbfb9dab63e00000000fffffffff57c183f8e4e503f00306c40000044bf0000803e1bb86ebf5decb83e00000000fffffffff57c183f8e4e503f00d07240000000bf00000000fe866ebf37e9b93e00000000ffffffffd78c343f0000803f00d07240000000bf0000803efe866ebf37e9b93e00000000ffffffffd78c343f0000803f00d07240000000bf00000000000000000000803f00000000ffffffffd78c343f0000803f00d07240000000bf0000803e000000000000803f00000000ffffffffd78c343f0000803f00508240000000bf00000000000000000000803f00000000ffffffff0000803f0000803f00508240000000bf0000803e000000000000803f00000000ffffffff0000803f0000803f00508240000000bf0000000014626a3f01ebcdbe00000000ffffffff0000803f0000803f00508240000000bf0000803e14626a3f01ebcdbe00000000ffffffff0000803f0000803f00606f4000c0a0bf00000000e5e7743f991795be00000000ffffffff5afd253fe391f03e00606f4000c0a0bf0000803ea6d87c3ff43c20be00000000ffffffff5afd253fe391f03e00606f400080f6bf000000000000803f0000000000000000ffffffff5afd253f0000000000606f400080f6bf0000803e0000803f0000000000000000ffffffff5afd253f0000000000606f400080f6bf0000000000000000000080bf00000000ffffffff5afd253f0000000000606f400080f6bf0000803e00000000000080bf00000000ffffffff5afd253f0000000000505d400080f6bf0000000000000000000080bf00000000ffffffff34f6b23e0000000000505d400080f6bf0000803e00000000000080bf00000000ffffffff34f6b23e00000000 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 2.0361328, y: -1.2124023, z: 0.125} + m_Extent: {x: 2.0361328, y: 0.73095703, z: 0.125} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/~Samples/Demo/Materials/SHINY.asset.meta b/~Samples/Demo/Materials/SHINY.asset.meta new file mode 100644 index 0000000..201d0f0 --- /dev/null +++ b/~Samples/Demo/Materials/SHINY.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7df98aac384664f258cb7819563222e0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Materials/ShinyText.mat b/~Samples/Demo/Materials/ShinyText.mat new file mode 100644 index 0000000..005c574 --- /dev/null +++ b/~Samples/Demo/Materials/ShinyText.mat @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3129266592905315525 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ShinyText + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: _RECEIVE_SHADOWS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _QueueOffset: 0 + - _ReceiveShadows: 0 + - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] diff --git a/~Samples/Demo/Materials/ShinyText.mat.meta b/~Samples/Demo/Materials/ShinyText.mat.meta new file mode 100644 index 0000000..052d35f --- /dev/null +++ b/~Samples/Demo/Materials/ShinyText.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4722affc8a4174224b0373590433dd61 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Materials/Silk.mat b/~Samples/Demo/Materials/Silk.mat new file mode 100644 index 0000000..51602cf --- /dev/null +++ b/~Samples/Demo/Materials/Silk.mat @@ -0,0 +1,121 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Silk + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.6 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 0.75 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.6 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.49411762, g: 0.14509797, b: 0.16470581, a: 1} + - _Color: {r: 0.49411765, g: 0.14509805, b: 0.16470589, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SpecularColor: {r: 0.74264705, g: 0.20750435, b: 0.216731, a: 1} + m_BuildTextureStacks: [] +--- !u!114 &7254247028269435741 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 diff --git a/~Samples/Demo/Materials/Silk.mat.meta b/~Samples/Demo/Materials/Silk.mat.meta new file mode 100644 index 0000000..56c2632 --- /dev/null +++ b/~Samples/Demo/Materials/Silk.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: cc0954b3a33054342b0fd89feda97068 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/~Samples/Demo/Materials/Wall.mat b/~Samples/Demo/Materials/Wall.mat new file mode 100644 index 0000000..816323b --- /dev/null +++ b/~Samples/Demo/Materials/Wall.mat @@ -0,0 +1,121 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6803998695329737601 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 4 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Wall + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_ShaderKeywords: _NORMALMAP _OCCLUSIONMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 9d4329142f9cd482983a58ac599786dd, type: 3} + m_Scale: {x: 3, y: 3} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: fd639c096a8584af0b7b70577421b9a1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 10, y: 10} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 3, y: 3} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 9d4329142f9cd482983a58ac599786dd, type: 3} + m_Scale: {x: 3, y: 3} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 4eef545667c58495ea824bd3998da006, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 2800000, guid: 4c5aaebe522004ddfbf0da83b147e635, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 2800000, guid: a1d43acc22aa4427f89ca56382ce5272, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 0.02 + - _DstBlend: 0 + - _EmissionScaleUI: 1 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0.325 + - _Glossiness: 0.311 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.0203 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.311 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0.99999994} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 1, g: 1, b: 1, a: 1} + - _SpecularColor: {r: 0.11764706, g: 0.11764706, b: 0.11764706, a: 1} + m_BuildTextureStacks: [] diff --git a/~Samples/Demo/Materials/Wall.mat.meta b/~Samples/Demo/Materials/Wall.mat.meta new file mode 100644 index 0000000..79a3b11 --- /dev/null +++ b/~Samples/Demo/Materials/Wall.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: c756ee1000105437892bd5901771ff7b +NativeFormatImporter: + userData: + assetBundleName: diff --git a/~Samples/Demo/Scene.unity b/~Samples/Demo/Scene.unity new file mode 100644 index 0000000..1b3968f --- /dev/null +++ b/~Samples/Demo/Scene.unity @@ -0,0 +1,1674 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 2 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.1804663, g: 0.22593236, b: 0.30702642, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 1 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000000, guid: 334c1ca31d9f941d69425982909406b3, + type: 2} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &165230857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 102722, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 165230858} + m_Layer: 0 + m_Name: CalibrationWalls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &165230858 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 431536, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165230857} + 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: 1165184421} + - {fileID: 181859161} + - {fileID: 1435719952} + - {fileID: 1525858954} + m_Father: {fileID: 1694850532} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &181859160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 125776, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 181859161} + - component: {fileID: 181859164} + - component: {fileID: 181859163} + - component: {fileID: 181859162} + m_Layer: 0 + m_Name: CalibrationWallRearRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &181859161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 494730, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181859160} + m_LocalRotation: {x: 0.5, y: 0.5, z: -0.5000001, w: 0.49999994} + m_LocalPosition: {x: -2.5, y: 2.5, z: 0} + m_LocalScale: {x: 0.5, y: 1, z: 0.49999997} + m_Children: [] + m_Father: {fileID: 165230858} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &181859162 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2304408, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181859160} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c756ee1000105437892bd5901771ff7b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &181859163 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6442406, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181859160} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &181859164 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3378452, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181859160} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &472769855 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100000, guid: e11f662626928b14e8f57acb029360b9, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 472769856} + - component: {fileID: 472769857} + - component: {fileID: 472769858} + m_Layer: 0 + m_Name: DirectionalLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &472769856 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400000, guid: e11f662626928b14e8f57acb029360b9, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472769855} + m_LocalRotation: {x: 0.4095739, y: -0.74160993, z: 0.53017515, w: -0.0343263} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 409.31, y: 131.908, z: -80.97} +--- !u!108 &472769857 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 10800000, guid: e11f662626928b14e8f57acb029360b9, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472769855} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.9885849, b: 0.95686275, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 1 + m_NormalBias: 1 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!114 &472769858 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472769855} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UsePipelineSettings: 1 +--- !u!1 &567592204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 567592205} + - component: {fileID: 567592208} + - component: {fileID: 567592207} + - component: {fileID: 567592206} + - component: {fileID: 567592209} + - component: {fileID: 567592210} + m_Layer: 0 + m_Name: Mirror + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &567592205 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_LocalRotation: {x: -0.12019721, y: -0.19789091, z: 0.1420371, w: -0.9624018} + m_LocalPosition: {x: 1.667, y: 0.42, z: 0.716} + m_LocalScale: {x: 0.5, y: 0.72956, z: 0.01} + m_Children: [] + m_Father: {fileID: 1694850532} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 16.713001, y: -338.774, z: -13.6380005} +--- !u!23 &567592206 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 823e4ead765ed42a58a2334b8058ca00, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &567592207 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &567592208 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &567592209 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 75f82f03739e4499282c234601d0b1ad, type: 3} + m_Name: + m_EditorClassIdentifier: + ignore: 0 + scope: 0 + layerMask: + serializedVersion: 2 + m_Bits: 4294967295 + nameFilter: + subMeshMask: 0 + useMaterialSmoothness: 0 + materialSmoothnessMapPropertyName: _MetallicGlossMap + materialSmoothnessIntensityPropertyName: _Smoothness + smoothness: 1 + perSubMeshSmoothness: 0 + subMeshSettings: [] + useMaterialNormalMap: 0 + materialNormalMapPropertyName: _BumpMap + overrideGlobalSettings: 1 + sampleCount: 16 + stepSize: 0.1 + binarySearchIterations: 6 + thickness: 0.2 + decay: 1 + fresnel: 0 + fuzzyness: 0 + contactHardening: 0 + jitter: 0.3 +--- !u!114 &567592210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c13d913a91f304bc5bc349878064d02d, type: 3} + m_Name: + m_EditorClassIdentifier: + axis: {x: 0, y: 1, z: 0} + speed: 60 +--- !u!1 &617211756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 195550, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 617211757} + - component: {fileID: 617211762} + - component: {fileID: 617211761} + - component: {fileID: 617211760} + m_Layer: 1 + m_Name: SilkSphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &617211757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 403562, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617211756} + m_LocalRotation: {x: 0.6559353, y: -0, z: -0, w: 0.7548171} + m_LocalPosition: {x: 0.53, y: -0.021, z: 1.08} + m_LocalScale: {x: 1, y: 1, z: 0.3} + m_Children: [] + m_Father: {fileID: 1202089666} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 81.981, y: 0, z: 0} +--- !u!23 &617211760 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2319362, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617211756} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 3 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: cc0954b3a33054342b0fd89feda97068, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 617211757} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &617211761 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 13518414, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617211756} + 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!33 &617211762 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3336432, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617211756} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &656694097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 158430, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 656694098} + - component: {fileID: 656694104} + - component: {fileID: 656694103} + - component: {fileID: 656694102} + m_Layer: 1 + m_Name: GoldSphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &656694098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 494476, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656694097} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.837, y: 0.268, z: -0.108} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1202089666} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &656694102 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2319392, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656694097} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 3 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5096e016b7e68464899a979f01e98542, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &656694103 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 13548954, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656694097} + 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!33 &656694104 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3351936, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656694097} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &965526239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100000, guid: 97b34cadc45c6d94abd78dfc533fc3b2, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 965526244} + - component: {fileID: 965526243} + - component: {fileID: 965526240} + - component: {fileID: 965526241} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &965526240 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 8100000, guid: 97b34cadc45c6d94abd78dfc533fc3b2, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965526239} + m_Enabled: 1 +--- !u!114 &965526241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965526239} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 +--- !u!20 &965526243 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2000000, guid: 97b34cadc45c6d94abd78dfc533fc3b2, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965526239} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.25, g: 0.25, b: 0.25, a: 0.003921569} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 20 + field of view: 60 + 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_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &965526244 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400000, guid: 97b34cadc45c6d94abd78dfc533fc3b2, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965526239} + m_LocalRotation: {x: 0.009687304, y: -0.99049336, z: 0.0896651, w: 0.10387209} + m_LocalPosition: {x: 0.9737709, y: 0.86444944, z: 2.951747} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 10, y: -180, z: 0} +--- !u!1 &1016798143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1016798146} + - component: {fileID: 1016798145} + - component: {fileID: 1016798144} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1016798144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016798143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1016798145 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016798143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1016798146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016798143} + 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: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1165184420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 182018, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1165184421} + - component: {fileID: 1165184424} + - component: {fileID: 1165184423} + - component: {fileID: 1165184422} + m_Layer: 0 + m_Name: CalibrationWallRearLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1165184421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 464034, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165184420} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} + m_LocalPosition: {x: 0, y: 2.5, z: -2.5} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_Children: [] + m_Father: {fileID: 165230858} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1165184422 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2391912, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165184420} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c756ee1000105437892bd5901771ff7b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1165184423 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6494426, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165184420} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1165184424 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3305810, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165184420} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1179472412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100006, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1179472413} + - component: {fileID: 1179472416} + - component: {fileID: 1179472415} + - component: {fileID: 1179472414} + - component: {fileID: 1179472417} + m_Layer: 0 + m_Name: CalibrationFloor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1179472413 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400006, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_Children: [] + m_Father: {fileID: 1694850532} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1179472414 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2300004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c5e68f4db72684d25be883ee27d7fa97, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1179472415 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6400004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1179472416 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3300004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1179472417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 75f82f03739e4499282c234601d0b1ad, type: 3} + m_Name: + m_EditorClassIdentifier: + ignore: 0 + scope: 0 + layerMask: + serializedVersion: 2 + m_Bits: 4294967295 + nameFilter: + subMeshMask: 0 + useMaterialSmoothness: 1 + materialSmoothnessMapPropertyName: _MetallicGlossMap + materialSmoothnessIntensityPropertyName: _Smoothness + smoothness: 0.7 + perSubMeshSmoothness: 0 + subMeshSettings: + - smoothness: 0 + useMaterialNormalMap: 1 + materialNormalMapPropertyName: _BumpMap + overrideGlobalSettings: 1 + sampleCount: 73 + stepSize: 0.29 + binarySearchIterations: 6 + thickness: 0.15 + decay: 2 + fresnel: 0.718 + fuzzyness: 0 + contactHardening: 0 + jitter: 0.268 +--- !u!1 &1202089665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 190392, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1202089666} + - component: {fileID: 1202089667} + m_Layer: 0 + m_Name: SampleSpheres + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1202089666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 470018, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202089665} + 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: 1392572691} + - {fileID: 656694098} + - {fileID: 617211757} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1202089667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202089665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 75f82f03739e4499282c234601d0b1ad, type: 3} + m_Name: + m_EditorClassIdentifier: + ignore: 0 + scope: 10 + layerMask: + serializedVersion: 2 + m_Bits: 4294967295 + nameFilter: + subMeshMask: 0 + useMaterialSmoothness: 1 + materialSmoothnessMapPropertyName: _MetallicGlossMap + materialSmoothnessIntensityPropertyName: _Smoothness + smoothness: 0.75 + perSubMeshSmoothness: 0 + subMeshSettings: [] + useMaterialNormalMap: 1 + materialNormalMapPropertyName: _BumpMap + overrideGlobalSettings: 1 + sampleCount: 73 + stepSize: 0.29 + binarySearchIterations: 6 + thickness: 0.276 + decay: 2 + fresnel: 0.75 + fuzzyness: 0 + contactHardening: 0 + jitter: 0.268 +--- !u!1 &1392572690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 145214, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1392572691} + - component: {fileID: 1392572696} + - component: {fileID: 1392572695} + - component: {fileID: 1392572694} + - component: {fileID: 1392572692} + m_Layer: 1 + m_Name: PlasticSphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1392572691 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 473706, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.765, y: 0.23, z: 1.473} + m_LocalScale: {x: 0.88, y: 0.65, z: 0.5} + m_Children: [] + m_Father: {fileID: 1202089666} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1392572692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c13d913a91f304bc5bc349878064d02d, type: 3} + m_Name: + m_EditorClassIdentifier: + axis: {x: 0, y: 1, z: 0} + speed: 60 +--- !u!23 &1392572694 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2375834, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 3 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1f83895e6354f411da22ab491b664095, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &1392572695 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 13564548, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + 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!33 &1392572696 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3335484, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1435719951 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1435719952} + - component: {fileID: 1435719955} + - component: {fileID: 1435719954} + - component: {fileID: 1435719953} + m_Layer: 0 + m_Name: CalibrationWallFrontLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1435719952 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435719951} + m_LocalRotation: {x: 0.5000003, y: -0.5000001, z: -0.49999964, w: -0.50000006} + m_LocalPosition: {x: 2.4999998, y: 2.5, z: 0} + m_LocalScale: {x: 0.4999999, y: 1, z: 0.4999999} + m_Children: [] + m_Father: {fileID: 165230858} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1435719953 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2300002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435719951} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c756ee1000105437892bd5901771ff7b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1435719954 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6400002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435719951} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1435719955 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3300002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435719951} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1525858953 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1525858954} + - component: {fileID: 1525858957} + - component: {fileID: 1525858956} + - component: {fileID: 1525858955} + m_Layer: 0 + m_Name: CalibrationWallFrontRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1525858954 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525858953} + m_LocalRotation: {x: 0.70710695, y: 0.0000002682209, z: 0.00000021584746, w: -0.7071066} + m_LocalPosition: {x: 0, y: 2.500002, z: 2.5000014} + m_LocalScale: {x: 0.49999997, y: 1, z: 0.5} + m_Children: [] + m_Father: {fileID: 165230858} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1525858955 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2300000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525858953} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 823e4ead765ed42a58a2334b8058ca00, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1525858956 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6400000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525858953} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1525858957 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3300000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525858953} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1630391515 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1630391517} + - component: {fileID: 1630391516} + m_Layer: 0 + m_Name: GlobalToggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1630391516 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630391515} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fa917740e1dd94f7c937060c5a3c6b7d, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1630391517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630391515} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.8022075, y: -5.1783943, z: -8.613068} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1694850531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1694850532} + m_Layer: 0 + m_Name: StaticGeometry + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1694850532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694850531} + 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: 1179472413} + - {fileID: 165230858} + - {fileID: 567592205} + - {fileID: 2117803091} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2117803087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2117803091} + - component: {fileID: 2117803090} + - component: {fileID: 2117803089} + m_Layer: 0 + m_Name: ShinyText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2117803089 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117803087} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4722affc8a4174224b0373590433dd61, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2117803090 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117803087} + m_Mesh: {fileID: 4300000, guid: 7df98aac384664f258cb7819563222e0, type: 2} +--- !u!4 &2117803091 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117803087} + m_LocalRotation: {x: 0, y: 0.9893614, z: -0, w: -0.14547859} + m_LocalPosition: {x: 2.17, y: 1.93, z: -1.58} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1694850532} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 196.73, z: 0} diff --git a/~Samples/Demo/Scene.unity.meta b/~Samples/Demo/Scene.unity.meta new file mode 100644 index 0000000..c9f4f93 --- /dev/null +++ b/~Samples/Demo/Scene.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6f71b213fc61141bd8073cd41403bdf7 +timeCreated: 1542877475 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Scripts.meta b/~Samples/Demo/Scripts.meta new file mode 100644 index 0000000..36da5e0 --- /dev/null +++ b/~Samples/Demo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1cd737baac9345c4a35ba1a8739e71e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Scripts/Rotate.cs b/~Samples/Demo/Scripts/Rotate.cs new file mode 100644 index 0000000..0d98762 --- /dev/null +++ b/~Samples/Demo/Scripts/Rotate.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +namespace ShinySSRR { + + public class Rotate : MonoBehaviour { + + public Vector3 axis = Vector3.up; + public float speed = 60f; + + void Update() { + transform.Rotate(axis * (Time.deltaTime * speed)); + + } + } + +} \ No newline at end of file diff --git a/~Samples/Demo/Scripts/Rotate.cs.meta b/~Samples/Demo/Scripts/Rotate.cs.meta new file mode 100644 index 0000000..b352bdb --- /dev/null +++ b/~Samples/Demo/Scripts/Rotate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c13d913a91f304bc5bc349878064d02d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Scripts/ToggleEffect.cs b/~Samples/Demo/Scripts/ToggleEffect.cs new file mode 100644 index 0000000..ff36b92 --- /dev/null +++ b/~Samples/Demo/Scripts/ToggleEffect.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace ShinySSRR { + public class ToggleEffect : MonoBehaviour { + + void Update() { + if (Input.GetKeyDown(KeyCode.Space)) { + ShinySSRR.isEnabled = !ShinySSRR.isEnabled; + } + } + } + +} \ No newline at end of file diff --git a/~Samples/Demo/Scripts/ToggleEffect.cs.meta b/~Samples/Demo/Scripts/ToggleEffect.cs.meta new file mode 100644 index 0000000..1153b15 --- /dev/null +++ b/~Samples/Demo/Scripts/ToggleEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa917740e1dd94f7c937060c5a3c6b7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Textures.meta b/~Samples/Demo/Textures.meta new file mode 100644 index 0000000..c2fbb3d --- /dev/null +++ b/~Samples/Demo/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9030b1a978d064cad96fc5af58408379 +folderAsset: yes +timeCreated: 1542901861 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Textures/floor_tiles_06_diff_1k.png b/~Samples/Demo/Textures/floor_tiles_06_diff_1k.png new file mode 100644 index 0000000..05469a0 Binary files /dev/null and b/~Samples/Demo/Textures/floor_tiles_06_diff_1k.png differ diff --git a/~Samples/Demo/Textures/floor_tiles_06_diff_1k.png.meta b/~Samples/Demo/Textures/floor_tiles_06_diff_1k.png.meta new file mode 100644 index 0000000..c82ea09 --- /dev/null +++ b/~Samples/Demo/Textures/floor_tiles_06_diff_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 40351333731c94777b93eda89ce1d4eb +timeCreated: 1542918613 +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: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Textures/floor_tiles_06_nor_1k.png b/~Samples/Demo/Textures/floor_tiles_06_nor_1k.png new file mode 100644 index 0000000..9bbac77 Binary files /dev/null and b/~Samples/Demo/Textures/floor_tiles_06_nor_1k.png differ diff --git a/~Samples/Demo/Textures/floor_tiles_06_nor_1k.png.meta b/~Samples/Demo/Textures/floor_tiles_06_nor_1k.png.meta new file mode 100644 index 0000000..4934abb --- /dev/null +++ b/~Samples/Demo/Textures/floor_tiles_06_nor_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 69735cf47f0104165973f07ff96d4d98 +timeCreated: 1542918925 +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: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png b/~Samples/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png new file mode 100644 index 0000000..e4491ca Binary files /dev/null and b/~Samples/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png differ diff --git a/~Samples/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png.meta b/~Samples/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png.meta new file mode 100644 index 0000000..20059ed --- /dev/null +++ b/~Samples/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 4eef545667c58495ea824bd3998da006 +timeCreated: 1542918613 +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: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png b/~Samples/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png new file mode 100644 index 0000000..1f5d926 Binary files /dev/null and b/~Samples/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png differ diff --git a/~Samples/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png.meta b/~Samples/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png.meta new file mode 100644 index 0000000..a303699 --- /dev/null +++ b/~Samples/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: fd639c096a8584af0b7b70577421b9a1 +timeCreated: 1542918741 +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: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/~Samples/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png b/~Samples/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png new file mode 100644 index 0000000..10e299c Binary files /dev/null and b/~Samples/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png differ diff --git a/~Samples/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png.meta b/~Samples/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png.meta new file mode 100644 index 0000000..a270051 --- /dev/null +++ b/~Samples/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 9d4329142f9cd482983a58ac599786dd +timeCreated: 1542918615 +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: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: