From 0ce4962c057c7de7afc73c0a6a93e19d36b4e3f6 Mon Sep 17 00:00:00 2001 From: max Date: Tue, 20 Apr 2021 03:52:32 +0200 Subject: [PATCH] Testing multiple MipMap/TexelDensity solutions --- Editor/CustomMipMapImporter.cs | 117 ++++++++++++++ Editor/CustomMipMapImporter.cs.meta | 11 ++ Editor/Presets/Icons/MipMaps.png | Bin 0 -> 1872 bytes Editor/Presets/Icons/MipMaps.png.meta | 144 ++++++++++++++++++ Editor/Presets/MipMaps.asset | 97 ++++++++++++ Editor/Presets/MipMaps.asset.meta | 8 + Editor/Presets/TexelDensityChecker.asset | 95 ++++++++++++ Editor/Presets/TexelDensityChecker.asset.meta | 8 + Runtime/Shaders/MipMaps.shader | 75 +++++++++ Runtime/Shaders/MipMaps.shader.meta | 10 ++ Runtime/Shaders/RSUtilsCG.cginc | 63 +++++++- Runtime/Shaders/TexelDensityChecker.shader | 64 ++++++++ .../Shaders/TexelDensityChecker.shader.meta | 10 ++ Runtime/Shaders/TriPlanarSurface.shader | 2 +- Runtime/Shaders/TriPlanarUnlit.shader | 2 +- Runtime/Textures/Mip.meta | 8 + Runtime/Textures/Mip/Mip.mip1.png | Bin 0 -> 505 bytes Runtime/Textures/Mip/Mip.mip1.png.meta | 144 ++++++++++++++++++ Runtime/Textures/Mip/Mip.mip2.png | Bin 0 -> 491 bytes Runtime/Textures/Mip/Mip.mip2.png.meta | 144 ++++++++++++++++++ Runtime/Textures/Mip/Mip.mip3.png | Bin 0 -> 497 bytes Runtime/Textures/Mip/Mip.mip3.png.meta | 144 ++++++++++++++++++ Runtime/Textures/Mip/Mip.mip4.png | Bin 0 -> 496 bytes Runtime/Textures/Mip/Mip.mip4.png.meta | 144 ++++++++++++++++++ Runtime/Textures/Mip/Mip.mip5.png | Bin 0 -> 489 bytes Runtime/Textures/Mip/Mip.mip5.png.meta | 144 ++++++++++++++++++ Runtime/Textures/Mip/Mip.png | Bin 0 -> 524 bytes Runtime/Textures/Mip/Mip.png.meta | 144 ++++++++++++++++++ Runtime/Textures/MipMap.asset | 49 ++++++ Runtime/Textures/MipMap.asset.meta | 8 + 30 files changed, 1632 insertions(+), 3 deletions(-) create mode 100644 Editor/CustomMipMapImporter.cs create mode 100644 Editor/CustomMipMapImporter.cs.meta create mode 100644 Editor/Presets/Icons/MipMaps.png create mode 100644 Editor/Presets/Icons/MipMaps.png.meta create mode 100644 Editor/Presets/MipMaps.asset create mode 100644 Editor/Presets/MipMaps.asset.meta create mode 100644 Editor/Presets/TexelDensityChecker.asset create mode 100644 Editor/Presets/TexelDensityChecker.asset.meta create mode 100644 Runtime/Shaders/MipMaps.shader create mode 100644 Runtime/Shaders/MipMaps.shader.meta create mode 100644 Runtime/Shaders/TexelDensityChecker.shader create mode 100644 Runtime/Shaders/TexelDensityChecker.shader.meta create mode 100644 Runtime/Textures/Mip.meta create mode 100644 Runtime/Textures/Mip/Mip.mip1.png create mode 100644 Runtime/Textures/Mip/Mip.mip1.png.meta create mode 100644 Runtime/Textures/Mip/Mip.mip2.png create mode 100644 Runtime/Textures/Mip/Mip.mip2.png.meta create mode 100644 Runtime/Textures/Mip/Mip.mip3.png create mode 100644 Runtime/Textures/Mip/Mip.mip3.png.meta create mode 100644 Runtime/Textures/Mip/Mip.mip4.png create mode 100644 Runtime/Textures/Mip/Mip.mip4.png.meta create mode 100644 Runtime/Textures/Mip/Mip.mip5.png create mode 100644 Runtime/Textures/Mip/Mip.mip5.png.meta create mode 100644 Runtime/Textures/Mip/Mip.png create mode 100644 Runtime/Textures/Mip/Mip.png.meta create mode 100644 Runtime/Textures/MipMap.asset create mode 100644 Runtime/Textures/MipMap.asset.meta diff --git a/Editor/CustomMipMapImporter.cs b/Editor/CustomMipMapImporter.cs new file mode 100644 index 0000000..c6fd025 --- /dev/null +++ b/Editor/CustomMipMapImporter.cs @@ -0,0 +1,117 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Text.RegularExpressions; + +public class CustomMipMapImporter : AssetPostprocessor +{ + bool m_isReadable; + bool m_importing; + + bool ShouldImportAsset(string path) + { + string pattern = GetMipmapFilenamePattern(path); + string mip1Path = string.Format(pattern, 1); + return File.Exists(mip1Path); + } + + string GetMipmapFilenamePattern(string path) + { + var filename = Path.GetFileName(path); + var filenameWithoutExtention = Path.GetFileNameWithoutExtension(path); + var extension = Path.GetExtension(path); + var directoryName = Path.GetDirectoryName(path); + + return Path.Combine(directoryName, filenameWithoutExtention + ".mip{0}" + extension); + } + + void OnPreprocessTexture() + { + string extension = Path.GetExtension(assetPath); + string filenameWithoutExtention = Path.GetFileNameWithoutExtension(assetPath); + var match = Regex.Match(filenameWithoutExtention, @".mip(\d)+$"); + + if (match.Success) + { + string filenameWithoutMip = filenameWithoutExtention.Substring(0, match.Index); + string directoryName = Path.GetDirectoryName(assetPath); + string mip0Path = Path.Combine(directoryName, filenameWithoutMip + extension); + + TextureImporter importer = (TextureImporter)TextureImporter.GetAtPath(mip0Path); + if (importer != null) + { + importer.SaveAndReimport(); + } + } + + if (ShouldImportAsset(assetPath)) + { + m_importing = true; + + string pattern = GetMipmapFilenamePattern(assetPath); + int m = 1; + + bool reimport = false; + + while (true) + { + string mipPath = string.Format(pattern, m); + m++; + + TextureImporter importer = (TextureImporter)TextureImporter.GetAtPath(mipPath); + if (importer != null) + { + + if (!importer.mipmapEnabled || !importer.isReadable) + { + importer.mipmapEnabled = true; + importer.isReadable = true; + importer.SaveAndReimport(); + + reimport = true; + } + + continue; + } + else + { + break; + } + } + + if (reimport) + { + m_importing = false; + return; + } + + TextureImporter textureImporter = (TextureImporter)assetImporter; + m_isReadable = textureImporter.isReadable; + textureImporter.isReadable = true; + } + } + + void OnPostprocessTexture(Texture2D texture) + { + if (m_importing) + { + string pattern = GetMipmapFilenamePattern(assetPath); + + for (int m = 0; m < texture.mipmapCount; m++) + { + var mipmapTexture = AssetDatabase.LoadAssetAtPath(string.Format(pattern, m)); + + if (mipmapTexture != null) + { + Color[] c = mipmapTexture.GetPixels(0); + texture.SetPixels(c, m); + } + } + + texture.Apply(false, !m_isReadable); + TextureImporter textureImporter = (TextureImporter)assetImporter; + textureImporter.isReadable = m_isReadable; + } + } +} + diff --git a/Editor/CustomMipMapImporter.cs.meta b/Editor/CustomMipMapImporter.cs.meta new file mode 100644 index 0000000..c317381 --- /dev/null +++ b/Editor/CustomMipMapImporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b3c6a9a745cf994c924b3a44a3309db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Presets/Icons/MipMaps.png b/Editor/Presets/Icons/MipMaps.png new file mode 100644 index 0000000000000000000000000000000000000000..857762626f73980549f77d3c87b6812188ae0b92 GIT binary patch literal 1872 zcmah~Yfuwc7~PCkF@jobt&hsA%c!)PY!U>TZ31F~kV+y1)XL!VpX2gsbH(E;wY6mC~Aw?7DJ6yTSPmc;*76W<5b7iNA2AW1{JkGHrad6Ip2QY z`R=1QOP3xc94mw%C`yx|)`NeTdm;vbU&iOV2|)uJh+G3}&}L#L${{wIseD}QaX0}E zL5dWQ(`YKdSvViJ5~LEjzV9Fc6J{kcFF`BOI#sxh$nep4j!&0s@)elmW+Ww9sPJGQ zfCFcZu*YF18O)Bc~P7>c^xZm~OFOwm?UDwoSqi42v=M1Ub;yd-P%h)5=u3lWN;#u*b$I9Y-sVJ@aI zpK`HE1OYhQ8yxo#ebGs#w|rm($|0y!EI}WovxMatbPnl9ciJeHVr-N%T)<V)*NLNgoS|H_2~S&$lWZ*S1m_Eu zMR;(#K}|Stk^$~2k$Bk?VBRx86=kRB9I&WxB_icDoO77QVYK4&2s3L7$LgEU#7XOu z0GFBF#kF=0Nq|~H-{&=kK1_)u$-tuG8qPy`PldvL!1(O6lo=!!&#U?%jY^e8Qx?Jw zFh-v~1J6MjB7Gf(9#*REvcGc6wp3bqFho)38)5?=>*2aocbZ@7dL%y}6;> zo_m;_0_~T+f+sw(Nr5gj2R1)AMbPju0tVrO2q(emLxW>xR>9I?5F}VmfX4J|2n5BI zxyk}l)Y&inm=dpQEt-*MXkPj2!mN?wKB~O;`qUrdR{UIT{a|b54Ij0+ZEmM7JHMx+ z@ZhrghPfpfZMwXX<8Ibm)P8I}`seR|HFduqxZK5jKVDNX=9`w`mG+|%rGqwfUaHaG zQoj&2?Zk@OMPDY%mC>8F@9#d}(BmqfzwKVr()z_xa?#nZN5vdxV<#&nDRxzzaCAkJ z$MsiggT*@oYljNEPx;!+M6fvc3!K-%x9m-d*igFh)@i|<>foH6+e-)d?_dK118S_Z{_)?H z1Sk16ZEn1tdLOHKcm3{Di8YSt{{1_~UMaosqI+_5kdAa^+nNijyj!e?mwa*!ZkV*d zHRR2G$6mX5^_2sH$|KhM(Vf578d>o>gA<+ literal 0 HcmV?d00001 diff --git a/Editor/Presets/Icons/MipMaps.png.meta b/Editor/Presets/Icons/MipMaps.png.meta new file mode 100644 index 0000000..80c508b --- /dev/null +++ b/Editor/Presets/Icons/MipMaps.png.meta @@ -0,0 +1,144 @@ +fileFormatVersion: 2 +guid: e613356da75e6764ea82a89a5ce3c6bc +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 + vTOnly: 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: 0 + 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 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + 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: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 8192 + 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: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 8192 + 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/Presets/MipMaps.asset b/Editor/Presets/MipMaps.asset new file mode 100644 index 0000000..2a2e82e --- /dev/null +++ b/Editor/Presets/MipMaps.asset @@ -0,0 +1,97 @@ +%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: 1aa272ccd1306c545b68254a527f8025, type: 3} + m_Name: MipMaps + m_EditorClassIdentifier: + content: + icon: {fileID: 2800000, guid: e613356da75e6764ea82a89a5ce3c6bc, type: 3} + tooltip: + sortingOrder: 30 + compact: + m_Text: + m_Image: {fileID: 2800000, guid: e613356da75e6764ea82a89a5ce3c6bc, type: 3} + m_Tooltip: + normal: + m_Text: ' MipMaps' + m_Image: {fileID: 2800000, guid: e613356da75e6764ea82a89a5ce3c6bc, type: 3} + m_Tooltip: + shader: {fileID: 4800000, guid: 19d63524eb012af4e8e086121f546128, type: 3} + replacementTag: + parameters: + - m_name: _Max + m_parameterType: 7 + m_texture: {fileID: 0} + m_vector: {x: 0, y: 0, z: 0, w: 0} + m_vectorArray: [] + m_color: {r: 0, g: 0, b: 0, a: 0} + m_colorArray: + - {r: 0, g: 0.4, b: 1, a: 1} + - {r: 0, g: 1, b: 1, a: 1} + - {r: 0, g: 1, b: 0.4, a: 1} + - {r: 0.2, g: 1, b: 0, a: 1} + - {r: 0.8, g: 1, b: 0, a: 1} + - {r: 1, g: 0.6, b: 0, a: 1} + m_float: 0 + m_floatArray: [] + m_int: 6 + m_matrix: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_matrixArray: [] + - m_name: _MipMapColors + m_parameterType: 4 + m_texture: {fileID: 0} + m_vector: {x: 0, y: 0, z: 0, w: 0} + m_vectorArray: [] + m_color: {r: 0, g: 0, b: 0, a: 0} + m_colorArray: + - {r: 0, g: 0.4, b: 1, a: 1} + - {r: 0, g: 1, b: 1, a: 1} + - {r: 0, g: 1, b: 0.4, a: 1} + - {r: 0.2, g: 1, b: 0, a: 1} + - {r: 0.8, g: 1, b: 0, a: 1} + - {r: 1, g: 0.6, b: 0, a: 1} + m_float: 0 + m_floatArray: [] + m_int: 0 + m_matrix: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_matrixArray: [] diff --git a/Editor/Presets/MipMaps.asset.meta b/Editor/Presets/MipMaps.asset.meta new file mode 100644 index 0000000..84bf51e --- /dev/null +++ b/Editor/Presets/MipMaps.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce4e894416ac8004fa4d80eddd059296 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Presets/TexelDensityChecker.asset b/Editor/Presets/TexelDensityChecker.asset new file mode 100644 index 0000000..3c6e2d2 --- /dev/null +++ b/Editor/Presets/TexelDensityChecker.asset @@ -0,0 +1,95 @@ +%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: 1aa272ccd1306c545b68254a527f8025, type: 3} + m_Name: TexelDensityChecker + m_EditorClassIdentifier: + content: + icon: {fileID: 2800000, guid: e613356da75e6764ea82a89a5ce3c6bc, type: 3} + tooltip: + sortingOrder: 31 + compact: + m_Text: + m_Image: {fileID: 2800000, guid: e613356da75e6764ea82a89a5ce3c6bc, type: 3} + m_Tooltip: + normal: + m_Text: ' TexelDensityChecker' + m_Image: {fileID: 2800000, guid: e613356da75e6764ea82a89a5ce3c6bc, type: 3} + m_Tooltip: + shader: {fileID: 4800000, guid: 83a3ee0da908c7542be7a089c047d28f, type: 3} + replacementTag: + parameters: + - m_name: _RS_Texture + m_parameterType: 0 + m_texture: {fileID: 0} + m_vector: {x: 0, y: 0, z: 0, w: 0} + m_vectorArray: + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + m_color: {r: 1, g: 0, b: 0, a: 0.14901961} + m_colorArray: [] + m_float: 0 + m_floatArray: + - 0 + - 0 + - 0 + m_int: 0 + m_matrix: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_matrixArray: + - e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + - e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 diff --git a/Editor/Presets/TexelDensityChecker.asset.meta b/Editor/Presets/TexelDensityChecker.asset.meta new file mode 100644 index 0000000..8c27ad1 --- /dev/null +++ b/Editor/Presets/TexelDensityChecker.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ce604b84317ba14f823bc107e0f895a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/MipMaps.shader b/Runtime/Shaders/MipMaps.shader new file mode 100644 index 0000000..74902d7 --- /dev/null +++ b/Runtime/Shaders/MipMaps.shader @@ -0,0 +1,75 @@ +// Ref: https://developer.nvidia.com/gpugems/gpugems2/part-iii-high-quality-rendering/chapter-28-mipmap-level-measurement +// https://github.com/jintiao/MipmapLevel/blob/master/Assets/MipmapColor.shader + +Shader "Hidden/RS/MipMaps" +{ + SubShader + { + Tags { "RenderType" = "Opaque" } + LOD 100 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + #include "RSUtilsCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float2 uvmip : TEXCOORD1; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + float4 _MainTex_TexelSize; + float4 _MipMapColors[15]; // max mipmaps = 1 + floor(log2(maxTexSize)) + int _Max; + + v2f vert(appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + + int mips = RS_MipCount(_MainTex_TexelSize); + float2 mipuv = v.uv * (_MainTex_TexelSize.zw / mips); + o.uvmip = TRANSFORM_TEX(mipuv, _MainTex); + + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + int mipLevels = 1 + floor(log2(max(_MainTex_TexelSize.z, _MainTex_TexelSize.w))); + + // int m = RS_MipMap(i.uvmip, _MainTex_TexelSize); + int m = RS_M(i.uvmip, _MainTex_TexelSize); + // int m = RS_Mip(i.uvmip, _MainTex_TexelSize, mipLevels); + // m = clamp(m, 0, _Max); + + // m = RS_Remap(m, 0, 15, 0, _Max); + + fixed4 mip = _MipMapColors[m]; + + fixed4 col = tex2D(_MainTex, i.uv); + fixed4 res; + res.rgb = lerp(col.rgb, mip.rgb, mip.a); + res.a = col.a; + + return res; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Runtime/Shaders/MipMaps.shader.meta b/Runtime/Shaders/MipMaps.shader.meta new file mode 100644 index 0000000..22a86fe --- /dev/null +++ b/Runtime/Shaders/MipMaps.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 19d63524eb012af4e8e086121f546128 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/RSUtilsCG.cginc b/Runtime/Shaders/RSUtilsCG.cginc index f30119a..10da6ea 100644 --- a/Runtime/Shaders/RSUtilsCG.cginc +++ b/Runtime/Shaders/RSUtilsCG.cginc @@ -2,7 +2,7 @@ #define RS_UTILS_CG_INCLUDED // https://www.ronja-tutorials.com/post/010-triplanar-mapping/ -fixed4 SampleTriPlanar(sampler2D tex, float4 tex_ST, float3 position, float3 normal, float sharpness) +fixed4 RS_TriPlanar(sampler2D tex, float4 tex_ST, float3 position, float3 normal, float sharpness) { //calculate UV coordinates for three projections float2 uv_front = TRANSFORM_TEX(position.xy, tex); @@ -34,4 +34,65 @@ fixed4 SampleTriPlanar(sampler2D tex, float4 tex_ST, float3 position, float3 nor return col; } +float RS_Remap(float value, float oldMin, float oldMax, float newMin, float newMax) +{ + return (newMin + (value - oldMin) * (newMax - newMin) / (oldMax - oldMin)); +} + +int RS_MipCount(float4 texelSize) +{ + int m = max(texelSize.z, texelSize.w); + int mip = 1 + floor(log2(m)); + + return mip; +} + +// https://github.com/jintiao/MipmapLevel/blob/master/Assets/MipmapColor.shader +int RS_MipMap(float2 uv, float4 texelSize) +{ + // Mipmap calculation. + float2 muv = uv * texelSize.zw; + float2 dx = ddx(muv); + float2 dy = ddy(muv); + +//#if 0 +// float rho = max(sqrt(dot(dx, dx)), sqrt(dot(dy, dy))); +// float lambda = log2(rho); +//#else + float rho = max(dot(dx, dx), dot(dy, dy)); + float lambda = 0.5 * log2(rho); +//#endif + + return max(int(lambda + 0.5), 0); +} + +float RS_Mip(float2 uv, float4 texelSize, int mipLevels) +{ + float2 muv = uv * texelSize.zw; + + float2 derivX = ddx(muv); + float2 derivY = ddy(muv); + + float delta_max_sqr = max(dot(derivX, derivX), dot(derivY, derivY)); + float mip = 0.5 * log2(delta_max_sqr) * mipLevels; + + return mip; +} + +// https://gamedev.stackexchange.com/questions/28401/detect-mip-mapping-level-in-the-shader +float RS_M(float2 uv, float4 texelSize) +{ + float2 dx = ddx(uv * texelSize.zw); + float2 dy = ddy(uv * texelSize.zw); + float d = max(dot(dx, dx), dot(dy, dy)); + + // Clamp the value to the max mip level counts + const float rangeClamp = pow(2.0, (RS_MipCount(texelSize) - 1) * 2.0); + d = clamp(d, 1.0, rangeClamp); + + float mipLevel = 0.5 * log2(d); + mipLevel = floor(mipLevel); + + return mipLevel; +} #endif \ No newline at end of file diff --git a/Runtime/Shaders/TexelDensityChecker.shader b/Runtime/Shaders/TexelDensityChecker.shader new file mode 100644 index 0000000..6b28658 --- /dev/null +++ b/Runtime/Shaders/TexelDensityChecker.shader @@ -0,0 +1,64 @@ +// Ref: https://aras-p.info/blog/2011/05/03/a-way-to-visualize-mip-levels/ + +Shader "Hidden/RS/TexelDensityChecker" +{ + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + #include "RSPropertiesCG.cginc" + #include "RSUtilsCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float2 uvmip : TEXCOORD1; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + float4 _MainTex_TexelSize; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + + int mips = RS_MipCount(_MainTex_TexelSize); + float2 mipuv = v.uv * (_MainTex_TexelSize.zw / mips); + o.uvmip = TRANSFORM_TEX(mipuv, _MainTex); + + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + fixed4 col = tex2D(_MainTex, i.uv); + fixed4 mip = tex2D(_RS_Texture, i.uvmip); + + fixed4 res; + res.rgb = lerp(col.rgb, mip.rgb, mip.a); + res.a = col.a; + + return res; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Runtime/Shaders/TexelDensityChecker.shader.meta b/Runtime/Shaders/TexelDensityChecker.shader.meta new file mode 100644 index 0000000..f83ee0c --- /dev/null +++ b/Runtime/Shaders/TexelDensityChecker.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 83a3ee0da908c7542be7a089c047d28f +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Shaders/TriPlanarSurface.shader b/Runtime/Shaders/TriPlanarSurface.shader index b351a8f..7fd3617 100644 --- a/Runtime/Shaders/TriPlanarSurface.shader +++ b/Runtime/Shaders/TriPlanarSurface.shader @@ -23,7 +23,7 @@ Shader "Hidden/RS/TriPlanarLit" void surf (Input IN, inout SurfaceOutputStandard o) { - fixed4 c = SampleTriPlanar(_RS_Texture, _RS_Texture_ST, IN.worldPos, IN.worldNormal, _RS_Sharpness); + fixed4 c = RS_TriPlanar(_RS_Texture, _RS_Texture_ST, IN.worldPos, IN.worldNormal, _RS_Sharpness); o.Albedo = c * _RS_Color; o.Metallic = _RS_Metallic; diff --git a/Runtime/Shaders/TriPlanarUnlit.shader b/Runtime/Shaders/TriPlanarUnlit.shader index 5c1aef5..1938486 100644 --- a/Runtime/Shaders/TriPlanarUnlit.shader +++ b/Runtime/Shaders/TriPlanarUnlit.shader @@ -38,7 +38,7 @@ Shader "Hidden/RS/TriPlanarUnlit" fixed4 frag(v2f i) : SV_Target { - fixed4 c = SampleTriPlanar(_RS_Texture, _RS_Texture_ST, i.worldPos, i.normal, _RS_Sharpness); + fixed4 c = RS_TriPlanar(_RS_Texture, _RS_Texture_ST, i.worldPos, i.normal, _RS_Sharpness); c *= _RS_Color; return c; } diff --git a/Runtime/Textures/Mip.meta b/Runtime/Textures/Mip.meta new file mode 100644 index 0000000..13cf03b --- /dev/null +++ b/Runtime/Textures/Mip.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c34197a0efc7bc4d84310213e806f7f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Textures/Mip/Mip.mip1.png b/Runtime/Textures/Mip/Mip.mip1.png new file mode 100644 index 0000000000000000000000000000000000000000..3bbe0a51ed0f628cde29b354b39fa2dc5dde2cb2 GIT binary patch literal 505 zcmV%EyY*(zH_iH%wg))R zRr2%uF!Uz+Mn!Y)fpZN`FDhDm8_w3D{a%e}u^-7MZcQfP%EyY*(zH_iH%wg))R zRr2%uF!Uz+Mn!Y)fpZN`FDhDm8_w3D{a%e}u^-7MZcQfP%EyY*(zH_iH%wg))R zRr2%uF!Uz+Mn!Y)fpZN`FDhDm8_w3D{a%e}u^-7MZcQfP%EyY*(zH_iH%wg))R zRr2%uF!Uz+Mn!Y)fpZN`FDhDm8_w3D{a%e}u^-7MZcQfP%EyY*(zH_iH%wg))R zRr2%uF!Uz+Mn!Y)fpZN`FDhDm8_w3D{a%e}u^-7MZcQfPZ z8tEA_FlbCHop@f`B~awJ{b%PR86wlU+TmrW? zeQ5b`#mmvO(tC%m=kaMR{w=n%Vgh~~yYe`-&df6Ong8Ui9vU3i#1g|-bv+JUvt;X< z4SQtD&4NSf-Y4%nGV#ROHr2Au@Exw#g^A;E>oCO|{#S9GG!XV7ZFl&wk zP|(2B#W5tJ_3b%BMg|3*0~?y^Ge5H!eOtmdD>y&uP2M?1pc*8w%I>Eq6SwZq8`nXC Mp00i_>zopr0I$K~bN~PV literal 0 HcmV?d00001 diff --git a/Runtime/Textures/Mip/Mip.png.meta b/Runtime/Textures/Mip/Mip.png.meta new file mode 100644 index 0000000..5249998 --- /dev/null +++ b/Runtime/Textures/Mip/Mip.png.meta @@ -0,0 +1,144 @@ +fileFormatVersion: 2 +guid: 408525e546bfde84796237d357ccc14e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 2 + mipBias: -100 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 8192 + 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: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 8192 + 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: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 8192 + 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/Runtime/Textures/MipMap.asset b/Runtime/Textures/MipMap.asset new file mode 100644 index 0000000..19e45e1 --- /dev/null +++ b/Runtime/Textures/MipMap.asset @@ -0,0 +1,49 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &2800000 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MipMap + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 2 + m_Width: 32 + m_Height: 32 + m_CompleteImageSize: 21840 + m_MipsStripped: 0 + m_TextureFormat: 20 + m_MipCount: 6 + m_IsReadable: 0 + m_IsPreProcessed: 0 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + m_PlatformBlob: + image data: 21840 + _typelessdata: 00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f00000000c8cccc3e0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803f0000803f0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803f000000000000803fd0cccc3e0000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fc8cc4c3e0000803f000000000000803fcccc4c3f0000803f000000000000803fcccc4c3f0000803f000000000000803fcccc4c3f0000803f000000000000803fcccc4c3f0000803f000000000000803f0000803f9a99193f000000000000803f + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Runtime/Textures/MipMap.asset.meta b/Runtime/Textures/MipMap.asset.meta new file mode 100644 index 0000000..a884bc2 --- /dev/null +++ b/Runtime/Textures/MipMap.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05a258bf93e7ca749ae1cd66d39fb477 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2800000 + userData: + assetBundleName: + assetBundleVariant: