├── .gitignore ├── LICENSE ├── README.md ├── images ├── editor-windows-1.png ├── editor-windows-2.png ├── menu.png ├── noise-1.png ├── noise-2.png ├── noise-3.png ├── noise-4.png └── noise-5.png └── source ├── Assets ├── Editor.meta ├── Editor │ ├── Scripts.meta │ ├── Scripts │ │ ├── CellularGenerator.cs │ │ ├── CellularGenerator.cs.meta │ │ ├── GradientGenerator.cs │ │ ├── GradientGenerator.cs.meta │ │ ├── OpenSimplexGenerator.cs │ │ ├── OpenSimplexGenerator.cs.meta │ │ ├── TextureCombiner.cs │ │ └── TextureCombiner.cs.meta │ ├── Shaders.meta │ └── Shaders │ │ ├── CellularNoiseTex.shader │ │ ├── CellularNoiseTex.shader.meta │ │ ├── CombinedTex.shader │ │ └── CombinedTex.shader.meta ├── Scripts.meta └── Scripts │ ├── OpenSimplex2S.cs │ └── OpenSimplex2S.cs.meta ├── Packages ├── manifest.json └── packages-lock.json └── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── SceneTemplateSettings.json ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset ├── XRSettings.asset └── boot.config /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 4 | # 5 | 6 | source/[Ll]ibrary/ 7 | source/[Tt]emp/ 8 | source/[Oo]bj/ 9 | source/[Bb]uild/ 10 | source/[Bb]uilds/ 11 | source/[Ll]ogs/ 12 | source/[Mm]emoryCaptures/ 13 | source/[Uu]serSettings 14 | 15 | source/[Aa]ssets/AssetStoreTools* 16 | source/[Aa]ssets/Plugins/Editor/JetBrains* 17 | 18 | source/.vscode/ 19 | 20 | source/.gradle/ 21 | 22 | ExportedObj/ 23 | source/.consulo/ 24 | source/*.csproj 25 | source/*.unityproj 26 | source/*.sln 27 | source/*.suo 28 | source/*.tmp 29 | source/*.user 30 | source/*.userprefs 31 | source/*.pidb 32 | source/*.booproj 33 | source/*.svd 34 | source/*.pdb 35 | source/*.mdb 36 | source/*.opendb 37 | source/*.VC.db 38 | 39 | source/*.pidb.meta 40 | source/*.pdb.meta 41 | source/*.mdb.meta 42 | 43 | source/sysinfo.txt 44 | 45 | source/*.apk 46 | source/*.unitypackage 47 | 48 | source/crashlytics-build.properties 49 | 50 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Rafael Bordoni 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unity Support Textures Generators 2 | 3 | Open Simplex noise example Open Simplex noise example 4 | 5 | Cellular noise example Cellular noise example 6 | 7 | This project is a compilation of tools to generate useful textures like seamless noise, gradients and tools to modify them. It's very common to use them in shaders or other procedural generation, so I think having tools to deal with them directly in Unity would be of great use. They are all MIT, so feel free to use it as is, improve it or adapt it as you wish. The noise generation code is not tied to the tools and can be easily used in other procedural generation needs you may have, but if you just want the noise, check the Credits section where you can have more data about them. 8 | 9 | ## Instructions 10 | 11 | Just put all files on [Assets/Editor](source/Assets/Editor), and [Assets/Scripts](source/Assets/Scripts) on your project. A new option on Unity's editor menu should show up. 12 | 13 | ![](images/menu.png) 14 | 15 | Just click any of them and a new editor window should pop up for you to use it. 16 | 17 | 18 | ![](images/editor-windows-1.png) 19 | ![](images/editor-windows-2.png) 20 | 21 | ## Credits 22 | 23 | All of this would never be possible without the awesome open source community. None of the noise generation algorithms used are mine. 24 | - [KdotJPG](https://github.com/KdotJPG/OpenSimplex2) for this great Open Simplex noise generation code. 25 | - [Justin (Scrawk)](https://github.com/Scrawk/GPU-Voronoi-Noise) for this awesome Voronoi noise generation code. 26 | - The implementation and everything else was done by me, [Rafael Bordoni](https://github.com/eldskald). 27 | -------------------------------------------------------------------------------- /images/editor-windows-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/images/editor-windows-1.png -------------------------------------------------------------------------------- /images/editor-windows-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/images/editor-windows-2.png -------------------------------------------------------------------------------- /images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/images/menu.png -------------------------------------------------------------------------------- /images/noise-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/images/noise-1.png -------------------------------------------------------------------------------- /images/noise-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/images/noise-2.png -------------------------------------------------------------------------------- /images/noise-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/images/noise-3.png -------------------------------------------------------------------------------- /images/noise-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/images/noise-4.png -------------------------------------------------------------------------------- /images/noise-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/images/noise-5.png -------------------------------------------------------------------------------- /source/Assets/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 78d69f36790e164e58243a6421c1582a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cd5be13aa866e6817b98abc407001490 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts/CellularGenerator.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using UnityEngine; 5 | using UnityEditor; 6 | 7 | public class CellularGenerator : EditorWindow { 8 | 9 | [MenuItem( 10 | "Tools/Support Textures Generators/Cellular Noise Generator", 11 | false, 102)] 12 | public static void OpenWindow () => GetWindow(); 13 | 14 | private enum CombinationMode { 15 | First = 0, 16 | SecondMinusFirst = 1 17 | } 18 | 19 | private bool _seamless; 20 | private CombinationMode _combination; 21 | private bool _squaredDistance; 22 | private float _variation; 23 | private float _frequency; 24 | private int _octaves; 25 | private float _persistance; 26 | private float _lacunarity; 27 | private float _jitter; 28 | private float _rangeMin; 29 | private float _rangeMax; 30 | private float _power; 31 | private bool _inverted; 32 | private Vector2Int _resolution; 33 | private string _path; 34 | 35 | private Material _material; 36 | private Texture2D _preview; 37 | 38 | private void OnEnable () { 39 | 40 | // EditorPrefs to load settings when you last used it. 41 | _seamless = EditorPrefs.GetBool( 42 | "TOOL_CELLULARGENERATOR_seamless", true); 43 | _combination = (CombinationMode)EditorPrefs.GetInt( 44 | "TOOL_CELLULARGENERATOR_combination", 0); 45 | _squaredDistance = EditorPrefs.GetBool( 46 | "TOOL_CELLULARGENERATOR_squaredDistance", false); 47 | _variation = EditorPrefs.GetFloat( 48 | "TOOL_CELLULARGENERATOR_variation", 0f); 49 | _frequency = EditorPrefs.GetFloat( 50 | "TOOL_CELLULARGENERATOR_frequency", 1f); 51 | _octaves = EditorPrefs.GetInt( 52 | "TOOL_CELLULARGENERATOR_octaves", 1); 53 | _persistance = EditorPrefs.GetFloat( 54 | "TOOL_CELLULARGENERATOR_persistance", 0.5f); 55 | _lacunarity = EditorPrefs.GetFloat( 56 | "TOOL_CELLULARGENERATOR_lacunarity", 2f); 57 | _jitter = EditorPrefs.GetFloat( 58 | "TOOL_CELLULARGENERATOR_jitter", 1f); 59 | _rangeMin = EditorPrefs.GetFloat( 60 | "TOOL_CELLULARGENERATOR_rangeMin", 0f); 61 | _rangeMax = EditorPrefs.GetFloat( 62 | "TOOL_CELLULARGENERATOR_rangeMax", 1f); 63 | _power = EditorPrefs.GetFloat( 64 | "TOOL_CELLULARGENERATOR_power", 1f); 65 | _inverted = EditorPrefs.GetBool( 66 | "TOOL_CELLULARGENERATOR_inverted", false); 67 | _resolution.x = EditorPrefs.GetInt( 68 | "TOOL_CELLULARGENERATOR_resolution_x", 256); 69 | _resolution.y = EditorPrefs.GetInt( 70 | "TOOL_CELLULARGENERATOR_resolution_y", 256); 71 | _path = EditorPrefs.GetString( 72 | "TOOL_CELLULARGENERATOR_path", "Textures/new-noise.png"); 73 | 74 | _material = new Material(Shader.Find("Editor/CellularNoiseGenerator")); 75 | UpdateMaterial(); 76 | _preview = GeneratePreview(192, 192); 77 | 78 | this.minSize = new Vector2(300, 760); 79 | } 80 | 81 | private void OnDisable () { 82 | 83 | // EditorPrefs to save settings for when you next use it. 84 | EditorPrefs.SetBool( 85 | "TOOL_CELLULARGENERATOR_seamless", _seamless); 86 | EditorPrefs.SetInt( 87 | "TOOL_CELLULARGENERATOR_combination", (int)_combination); 88 | EditorPrefs.SetBool( 89 | "TOOL_CELLULARGENERATOR_squaredDistance", _squaredDistance); 90 | EditorPrefs.SetFloat( 91 | "TOOL_CELLULARGENERATOR_variation", _variation); 92 | EditorPrefs.SetFloat( 93 | "TOOL_CELLULARGENERATOR_frequency", _frequency); 94 | EditorPrefs.SetInt( 95 | "TOOL_CELLULARGENERATOR_octaves", _octaves); 96 | EditorPrefs.SetFloat( 97 | "TOOL_CELLULARGENERATOR_persistance", _persistance); 98 | EditorPrefs.SetFloat( 99 | "TOOL_CELLULARGENERATOR_lacunarity", _lacunarity); 100 | EditorPrefs.SetFloat( 101 | "TOOL_CELLULARGENERATOR_jitter", _jitter); 102 | EditorPrefs.SetFloat( 103 | "TOOL_CELLULARGENERATOR_rangeMin", _rangeMin); 104 | EditorPrefs.SetFloat( 105 | "TOOL_CELLULARGENERATOR_rangeMax", _rangeMax); 106 | EditorPrefs.SetFloat( 107 | "TOOL_CELLULARGENERATOR_power", _power); 108 | EditorPrefs.SetBool( 109 | "TOOL_CELLULARGENERATOR_inverted", _inverted); 110 | EditorPrefs.SetInt( 111 | "TOOL_CELLULARGENERATOR_resolution_x", _resolution.x); 112 | EditorPrefs.SetInt( 113 | "TOOL_CELLULARGENERATOR_resolution_y", _resolution.y); 114 | EditorPrefs.SetString( 115 | "TOOL_CELLULARGENERATOR_path", _path); 116 | } 117 | 118 | private void OnGUI () { 119 | 120 | // Noise settings. 121 | EditorGUI.BeginChangeCheck(); 122 | _seamless = EditorGUILayout.ToggleLeft( 123 | "Seamless", _seamless); 124 | _combination = (CombinationMode)EditorGUILayout.EnumPopup( 125 | "Combination Mode", (CombinationMode)_combination); 126 | _squaredDistance = EditorGUILayout.ToggleLeft( 127 | "Squared Distance", _squaredDistance); 128 | _variation = EditorGUILayout.FloatField( 129 | "Variation", _variation); 130 | _frequency = EditorGUILayout.FloatField( 131 | "Frequency", _frequency); 132 | _jitter = EditorGUILayout.Slider( 133 | "Jitter", _jitter, 0f, 1f); 134 | 135 | GUILayout.Space(16); 136 | GUILayout.Label("Fractal Settings", EditorStyles.boldLabel); 137 | _octaves = EditorGUILayout.IntSlider( 138 | "Octaves", _octaves, 1, 9); 139 | _persistance = EditorGUILayout.Slider( 140 | "Persistance", _persistance, 0f, 1f); 141 | _lacunarity = EditorGUILayout.Slider( 142 | "Lacunarity", _lacunarity, 0.1f, 4.0f); 143 | 144 | GUILayout.Space(16); 145 | GUILayout.Label("Modifiers", EditorStyles.boldLabel); 146 | EditorGUILayout.LabelField( 147 | "Range:", _rangeMin.ToString() + " to " + _rangeMax.ToString()); 148 | EditorGUILayout.MinMaxSlider(ref _rangeMin, ref _rangeMax, 0f, 1f); 149 | 150 | _power = EditorGUILayout.Slider( 151 | "Interpolation Power", _power, 1f, 8f); 152 | _inverted = EditorGUILayout.Toggle( 153 | "Inverted", _inverted); 154 | 155 | if (EditorGUI.EndChangeCheck()) { 156 | _variation = _variation < 0f ? 0f : _variation; 157 | _frequency = _frequency < 0f ? 0f : _frequency; 158 | UpdateMaterial(); 159 | _preview = GeneratePreview(_preview.width, _preview.height); 160 | } 161 | 162 | // Texture settings. They don't cause the preview to change. 163 | GUILayout.Space(32); 164 | GUILayout.Label("Target File Settings", EditorStyles.boldLabel); 165 | EditorGUI.BeginChangeCheck(); 166 | _resolution = EditorGUILayout.Vector2IntField( 167 | "Texture Resolution", _resolution); 168 | _path = EditorGUILayout.TextField( 169 | "File Path", _path); 170 | if (EditorGUI.EndChangeCheck()) { 171 | _resolution.x = _resolution.x < 1 ? 1 : _resolution.x; 172 | _resolution.y = _resolution.y < 1 ? 1 : _resolution.y; 173 | } 174 | 175 | // Draw preview texture. 176 | GUILayout.Space(10); 177 | EditorGUI.DrawPreviewTexture(new Rect(32, 464, 192, 192), _preview); 178 | 179 | // Save button. 180 | GUILayout.Space(254); 181 | if (GUILayout.Button("Save Texture")) { 182 | Texture2D tex = GenerateTexture(_resolution.x, _resolution.y); 183 | byte[] data = tex.EncodeToPNG(); 184 | Object.DestroyImmediate(tex); 185 | File.WriteAllBytes( 186 | string.Format("{0}/{1}", Application.dataPath, _path), data); 187 | AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); 188 | } 189 | } 190 | 191 | private void UpdateMaterial () { 192 | switch (_seamless) { 193 | case true: 194 | _material.EnableKeyword("_SEAMLESS"); 195 | break; 196 | case false: 197 | _material.DisableKeyword("_SEAMLESS"); 198 | break; 199 | } 200 | 201 | float normFactor = 0f; 202 | for (int i = 0; i < _octaves; i++) { 203 | normFactor += Mathf.Pow(_persistance, i); 204 | } 205 | switch (_combination) { 206 | case CombinationMode.First: 207 | _material.EnableKeyword("_COMBINATION_ONE"); 208 | _material.DisableKeyword("_COMBINATION_TWO"); 209 | normFactor *= 0.7f; 210 | break; 211 | case CombinationMode.SecondMinusFirst: 212 | _material.EnableKeyword("_COMBINATION_TWO"); 213 | _material.DisableKeyword("_COMBINATION_ONE"); 214 | normFactor *= 0.4f; 215 | break; 216 | } 217 | _material.SetFloat("_NormFactor", normFactor); 218 | 219 | switch (_squaredDistance) { 220 | case true: 221 | _material.EnableKeyword("_SQUARED_DISTANCE"); 222 | break; 223 | case false: 224 | _material.DisableKeyword("_SQUARED_DISTANCE"); 225 | break; 226 | } 227 | 228 | _material.SetFloat("_Variation", _variation); 229 | _material.SetFloat("_Frequency", _frequency); 230 | _material.SetFloat("_Jitter", _jitter); 231 | _material.SetFloat("_Octaves", (float)_octaves); 232 | _material.SetFloat("_Persistance", _persistance); 233 | _material.SetFloat("_Lacunarity", _lacunarity); 234 | 235 | _material.SetFloat("_RangeMin", _rangeMin); 236 | _material.SetFloat("_RangeMax", _rangeMax); 237 | _material.SetFloat("_Power", _power); 238 | switch (_inverted) { 239 | case true: 240 | _material.EnableKeyword("_INVERTED"); 241 | break; 242 | case false: 243 | _material.DisableKeyword("_INVERTED"); 244 | break; 245 | } 246 | } 247 | 248 | private Texture2D GeneratePreview (int width, int height) { 249 | Texture2D tex = new Texture2D( 250 | width, height, TextureFormat.ARGB32, false); 251 | RenderTexture temp = RenderTexture.GetTemporary( 252 | width, height, 0, RenderTextureFormat.ARGB32); 253 | Graphics.Blit(tex, temp, _material); 254 | Graphics.CopyTexture(temp, tex); 255 | RenderTexture.ReleaseTemporary(temp); 256 | return tex; 257 | } 258 | 259 | private Texture2D GenerateTexture (int width, int height) { 260 | Texture2D tex = new Texture2D( 261 | width, height, TextureFormat.ARGB32, false); 262 | RenderTexture temp = RenderTexture.GetTemporary( 263 | width, height, 0, RenderTextureFormat.ARGB32); 264 | Graphics.Blit(tex, temp, _material); 265 | 266 | // We can't just .CopyTexture() and .EncodeToPNG() because 267 | // .EncodeToPNG() grabs what's on the texture on the RAM, but 268 | // .CopyTexture() only changes the texture on the GPU. In order 269 | // to bring the GPU memory back into the CPU, we need a .ReadPixels() 270 | // call, whence why the existence of this whole function. 271 | RenderTexture.active = temp; 272 | tex.ReadPixels(new Rect(0, 0, width, height), 0, 0); 273 | RenderTexture.active = null; 274 | RenderTexture.ReleaseTemporary(temp); 275 | 276 | return tex; 277 | } 278 | 279 | } 280 | 281 | -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts/CellularGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: da6f541f242ad36b99d2b3138022751c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts/GradientGenerator.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using UnityEngine; 5 | using UnityEditor; 6 | 7 | public class GradientGenerator : EditorWindow { 8 | 9 | [MenuItem( 10 | "Tools/Support Textures Generators/Gradient Texture Generator", 11 | false, 103)] 12 | public static void OpenWindow () => GetWindow(); 13 | 14 | private Gradient _gradient; 15 | private AnimationCurve _curve; 16 | private Vector2Int _resolution; 17 | private string _path; 18 | 19 | private void OnEnable () { 20 | _gradient = new Gradient(); 21 | _curve = new AnimationCurve(); 22 | 23 | // EditorPrefs to load settings when you last used it. 24 | _resolution.x = EditorPrefs.GetInt( 25 | "TOOL_GRADIENTGENERATOR_resolution_x", 128); 26 | _resolution.y = EditorPrefs.GetInt( 27 | "TOOL_GRADIENTGENERATOR_resolution_y", 1); 28 | _path = EditorPrefs.GetString( 29 | "TOOL_GRADIENTGENERATOR_path", "Textures/new-gradient.png"); 30 | 31 | // Load gradient mode. 32 | _gradient.mode = (GradientMode)EditorPrefs.GetInt( 33 | "TOOL_GRADIENTGENERATOR_gradient_mode", 0); 34 | 35 | // Load gradient color keys data. 36 | int colorKeysLength = EditorPrefs.GetInt( 37 | "TOOL_GRADIENTGENERATOR_gradient_colorKeys_length", 2); 38 | GradientColorKey[] colorKeys = new GradientColorKey[colorKeysLength]; 39 | for (int i = 0; i < colorKeysLength; i++) { 40 | float initialValue = (float)i; 41 | Color color = new Color(0f, 0f, 0f, 1f); 42 | color.r = EditorPrefs.GetFloat( 43 | "TOOL_GRADIENTGENERATOR_gradient_color_R_" + i.ToString(), 44 | initialValue); 45 | color.g = EditorPrefs.GetFloat( 46 | "TOOL_GRADIENTGENERATOR_gradient_color_G_" + i.ToString(), 47 | initialValue); 48 | color.b = EditorPrefs.GetFloat( 49 | "TOOL_GRADIENTGENERATOR_gradient_color_B_" + i.ToString(), 50 | initialValue); 51 | float time = EditorPrefs.GetFloat( 52 | "TOOL_GRADIENTGENERATOR_gradient_color_time_" + i.ToString(), 53 | initialValue); 54 | colorKeys[i] = new GradientColorKey(color, time); 55 | } 56 | 57 | // Load gradient alpha keys data. 58 | int alphaKeysLength = EditorPrefs.GetInt( 59 | "TOOL_GRADIENTGENERATOR_gradient_alphaKeys_length", 2); 60 | GradientAlphaKey[] alphaKeys = new GradientAlphaKey[alphaKeysLength]; 61 | for (int i = 0; i < alphaKeysLength; i++) { 62 | float initialValue = (float)i; 63 | float alpha = EditorPrefs.GetFloat( 64 | "TOOL_GRADIENTGENERATOR_gradient_alpha_" + i.ToString(), 1f); 65 | float time = EditorPrefs.GetFloat( 66 | "TOOL_GRADIENTGENERATOR_gradient_alpha_time_" + i.ToString(), 67 | initialValue); 68 | alphaKeys[i] = new GradientAlphaKey(alpha, time); 69 | } 70 | 71 | // Load curve keyframes data. 72 | int keyframesLength = EditorPrefs.GetInt( 73 | "TOOL_GRADIENTGENERATOR_curve_keyframes_length", 2); 74 | Keyframe[] keyframes = new Keyframe[keyframesLength]; 75 | for (int i = 0; i < keyframesLength; i++) { 76 | float initialValue = (float)i; 77 | keyframes[i] = new Keyframe(0f, 0f); 78 | keyframes[i].inTangent = EditorPrefs.GetFloat( 79 | "TOOL_GRADIENTGENERATOR_curve_inTangent_" + i.ToString(), 0f); 80 | keyframes[i].inWeight = EditorPrefs.GetFloat( 81 | "TOOL_GRADIENTGENERATOR_curve_inWeight_" + i.ToString(), 1f); 82 | keyframes[i].outTangent = EditorPrefs.GetFloat( 83 | "TOOL_GRADIENTGENERATOR_curve_outTangent_" + i.ToString(), 0f); 84 | keyframes[i].outWeight = EditorPrefs.GetFloat( 85 | "TOOL_GRADIENTGENERATOR_curve_outWeight_" + i.ToString(), 1f); 86 | keyframes[i].value = EditorPrefs.GetFloat( 87 | "TOOL_GRADIENTGENERATOR_curve_value_" + i.ToString(), 88 | initialValue); 89 | keyframes[i].time = EditorPrefs.GetFloat( 90 | "TOOL_GRADIENTGENERATOR_curve_time_" + i.ToString(), 91 | initialValue); 92 | keyframes[i].weightedMode = (WeightedMode)EditorPrefs.GetInt( 93 | "TOOL_GRADIENTGENERATOR_curve_mode_" + i.ToString(), 0); 94 | } 95 | 96 | // All loaded, now set the gradient and curve with the data we loaded. 97 | _gradient.SetKeys(colorKeys, alphaKeys); 98 | _curve = new AnimationCurve(keyframes); 99 | 100 | this.minSize = new Vector2(300, 275); 101 | } 102 | 103 | private void OnDisable () { 104 | 105 | // EditorPrefs to save settings for when you next use it. 106 | EditorPrefs.SetInt( 107 | "TOOL_GRADIENTGENERATOR_resolution_x", _resolution.x); 108 | EditorPrefs.SetInt( 109 | "TOOL_GRADIENTGENERATOR_resolution_y", _resolution.y); 110 | EditorPrefs.SetString( 111 | "TOOL_GRADIENTGENERATOR_path", _path); 112 | 113 | // Saving gradient mode. 114 | EditorPrefs.SetInt( 115 | "TOOL_GRADIENTGENERATOR_gradient_mode", (int)_gradient.mode); 116 | 117 | // Saving gradient color keys. 118 | EditorPrefs.SetInt( 119 | "TOOL_GRADIENTGENERATOR_gradient_colorKeys_length", 120 | _gradient.colorKeys.Length); 121 | for (int i = 0; i < _gradient.colorKeys.Length; i++) { 122 | EditorPrefs.SetFloat( 123 | "TOOL_GRADIENTGENERATOR_gradient_color_R_" + i.ToString(), 124 | _gradient.colorKeys[i].color.r); 125 | EditorPrefs.SetFloat( 126 | "TOOL_GRADIENTGENERATOR_gradient_color_G_" + i.ToString(), 127 | _gradient.colorKeys[i].color.g); 128 | EditorPrefs.SetFloat( 129 | "TOOL_GRADIENTGENERATOR_gradient_color_B_" + i.ToString(), 130 | _gradient.colorKeys[i].color.b); 131 | EditorPrefs.SetFloat( 132 | "TOOL_GRADIENTGENERATOR_gradient_color_time_" + i.ToString(), 133 | _gradient.colorKeys[i].time); 134 | } 135 | 136 | // Saving gradient alpha keys. 137 | EditorPrefs.SetInt( 138 | "TOOL_GRADIENTGENERATOR_gradient_alphaKeys_length", 139 | _gradient.alphaKeys.Length); 140 | for (int i = 0; i < _gradient.alphaKeys.Length; i++) { 141 | EditorPrefs.SetFloat( 142 | "TOOL_GRADIENTGENERATOR_gradient_alpha_" + i.ToString(), 143 | _gradient.alphaKeys[i].alpha); 144 | EditorPrefs.SetFloat( 145 | "TOOL_GRADIENTGENERATOR_gradient_alpha_time_" + i.ToString(), 146 | _gradient.alphaKeys[i].time); 147 | } 148 | 149 | // Saving curve keyframes. 150 | EditorPrefs.SetInt( 151 | "TOOL_GRADIENTGENERATOR_curve_keyframes_length", 152 | _curve.keys.Length); 153 | for (int i = 0; i < _curve.keys.Length; i++) { 154 | EditorPrefs.SetFloat( 155 | "TOOL_GRADIENTGENERATOR_curve_inTangent_" + i.ToString(), 156 | _curve.keys[i].inTangent); 157 | EditorPrefs.SetFloat( 158 | "TOOL_GRADIENTGENERATOR_curve_inWeight_" + i.ToString(), 159 | _curve.keys[i].inWeight); 160 | EditorPrefs.SetFloat( 161 | "TOOL_GRADIENTGENERATOR_curve_outTangent_" + i.ToString(), 162 | _curve.keys[i].outTangent); 163 | EditorPrefs.SetFloat( 164 | "TOOL_GRADIENTGENERATOR_curve_outWeight_" + i.ToString(), 165 | _curve.keys[i].outWeight); 166 | EditorPrefs.SetFloat( 167 | "TOOL_GRADIENTGENERATOR_curve_value_" + i.ToString(), 168 | _curve.keys[i].value); 169 | EditorPrefs.SetFloat( 170 | "TOOL_GRADIENTGENERATOR_curve_time_" + i.ToString(), 171 | _curve.keys[i].time); 172 | EditorPrefs.SetInt( 173 | "TOOL_GRADIENTGENERATOR_curve_mode_" + i.ToString(), 174 | (int)_curve.keys[i].weightedMode); 175 | } 176 | } 177 | 178 | private void OnGUI () { 179 | GUILayout.Space(16); 180 | _gradient = EditorGUILayout.GradientField( 181 | "Gradient", _gradient); 182 | GUILayout.Space(8); 183 | _curve = EditorGUILayout.CurveField( 184 | "Curve", _curve); 185 | 186 | GUILayout.Space(32); 187 | GUILayout.Label("Target File Settings", EditorStyles.boldLabel); 188 | EditorGUI.BeginChangeCheck(); 189 | _resolution = EditorGUILayout.Vector2IntField( 190 | "Texture Resolution", _resolution); 191 | _path = EditorGUILayout.TextField( 192 | "File Path", _path); 193 | if (EditorGUI.EndChangeCheck()) { 194 | _resolution.x = _resolution.x < 1 ? 1 : _resolution.x; 195 | _resolution.y = _resolution.y < 1 ? 1 : _resolution.y; 196 | } 197 | 198 | GUILayout.Space(32); 199 | if (GUILayout.Button("Save from Gradient")) { 200 | Texture2D tex = new Texture2D( 201 | _resolution.x, _resolution.y, TextureFormat.ARGB32, false); 202 | for (int i = 0; i < _resolution.x; i++) { 203 | Color value = _gradient.Evaluate(i / (float)_resolution.x); 204 | for (int j = 0; j < _resolution.y; j++) { 205 | tex.SetPixel(i, j, value); 206 | } 207 | } 208 | byte[] data = tex.EncodeToPNG(); 209 | Object.DestroyImmediate(tex); 210 | File.WriteAllBytes( 211 | string.Format("{0}/{1}", Application.dataPath, _path), data); 212 | AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); 213 | } 214 | 215 | GUILayout.Space(8); 216 | if (GUILayout.Button("Save from Curve")) { 217 | Texture2D tex = new Texture2D( 218 | _resolution.x, _resolution.y, TextureFormat.ARGB32, false); 219 | for (int i = 0; i < _resolution.x; i++) { 220 | float value = _curve.Evaluate(i / (float)_resolution.x); 221 | value = Mathf.Clamp01(value); 222 | for (int j = 0; j < _resolution.y; j++) { 223 | tex.SetPixel(i, j, new Color(value, value, value, 1f)); 224 | } 225 | } 226 | byte[] data = tex.EncodeToPNG(); 227 | Object.DestroyImmediate(tex); 228 | File.WriteAllBytes( 229 | string.Format("{0}/{1}", Application.dataPath, _path), data); 230 | AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); 231 | } 232 | } 233 | } 234 | -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts/GradientGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a03013e621012abb0b1640281c2aa3d5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts/OpenSimplexGenerator.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using UnityEngine; 5 | using UnityEditor; 6 | 7 | public class OpenSimplexGenerator : EditorWindow { 8 | 9 | [MenuItem( 10 | "Tools/Support Textures Generators/Open Simplex Noise Generator", 11 | false, 101)] 12 | public static void OpenWindow () => GetWindow(); 13 | 14 | private bool _seamless; 15 | private int _seed; 16 | private float _frequency; 17 | private int _octaves; 18 | private float _persistance; 19 | private float _lacunarity; 20 | private float _rangeMin; 21 | private float _rangeMax; 22 | private float _power; 23 | private bool _inverted; 24 | private Vector2Int _resolution; 25 | private string _path; 26 | 27 | private long[] _seeds; 28 | private Texture2D _preview; 29 | 30 | private void OnEnable () { 31 | 32 | // EditorPrefs to load settings when you last used it. 33 | _seamless = EditorPrefs.GetBool( 34 | "TOOL_OPENSIMPLEXGENERATOR_seamless", true); 35 | _seed = EditorPrefs.GetInt( 36 | "TOOL_OPENSIMPLEXGENERATOR_seed", 0); 37 | _frequency = EditorPrefs.GetFloat( 38 | "TOOL_OPENSIMPLEXGENERATOR_frequency", 1f); 39 | _octaves = EditorPrefs.GetInt( 40 | "TOOL_OPENSIMPLEXGENERATOR_octaves", 1); 41 | _persistance = EditorPrefs.GetFloat( 42 | "TOOL_OPENSIMPLEXGENERATOR_persistance", 0.5f); 43 | _lacunarity = EditorPrefs.GetFloat( 44 | "TOOL_OPENSIMPLEXGENERATOR_lacunarity", 1f); 45 | _rangeMin = EditorPrefs.GetFloat( 46 | "TOOL_OPENSIMPLEXGENERATOR_rangeMin", 0f); 47 | _rangeMax = EditorPrefs.GetFloat( 48 | "TOOL_OPENSIMPLEXGENERATOR_rangeMax", 1f); 49 | _power = EditorPrefs.GetFloat( 50 | "TOOL_OPENSIMPLEXGENERATOR_power", 1f); 51 | _inverted = EditorPrefs.GetBool( 52 | "TOOL_OPENSIMPLEXGENERATOR_inverted", false); 53 | _resolution.x = EditorPrefs.GetInt( 54 | "TOOL_OPENSIMPLEXGENERATOR_resolution_x", 256); 55 | _resolution.y = EditorPrefs.GetInt( 56 | "TOOL_OPENSIMPLEXGENERATOR_resolution_y", 256); 57 | _path = EditorPrefs.GetString( 58 | "TOOL_OPENSIMPLEXGENERATOR_path", "Textures/new-noise.png"); 59 | 60 | SetSeeds(_seed); 61 | _preview = GenerateTexture(192, 192); 62 | 63 | this.minSize = new Vector2(300, 660); 64 | } 65 | 66 | private void OnDisable() { 67 | 68 | // EditorPrefs to save settings for when you next use it. 69 | EditorPrefs.SetBool( 70 | "TOOL_OPENSIMPLEXGENERATOR_seamless", _seamless); 71 | EditorPrefs.SetInt( 72 | "TOOL_OPENSIMPLEXGENERATOR_seed", _seed); 73 | EditorPrefs.SetFloat( 74 | "TOOL_OPENSIMPLEXGENERATOR_frequency", _frequency); 75 | EditorPrefs.SetInt( 76 | "TOOL_OPENSIMPLEXGENERATOR_octaves", _octaves); 77 | EditorPrefs.SetFloat( 78 | "TOOL_OPENSIMPLEXGENERATOR_persistance", _persistance); 79 | EditorPrefs.SetFloat( 80 | "TOOL_OPENSIMPLEXGENERATOR_lacunarity", _lacunarity); 81 | EditorPrefs.SetFloat( 82 | "TOOL_OPENSIMPLEXGENERATOR_rangeMin", _rangeMin); 83 | EditorPrefs.SetFloat( 84 | "TOOL_OPENSIMPLEXGENERATOR_rangeMax", _rangeMax); 85 | EditorPrefs.SetFloat( 86 | "TOOL_OPENSIMPLEXGENERATOR_power", _power); 87 | EditorPrefs.SetBool( 88 | "TOOL_OPENSIMPLEXGENERATOR_inverted", _inverted); 89 | EditorPrefs.SetInt( 90 | "TOOL_OPENSIMPLEXGENERATOR_resolution_x", _resolution.x); 91 | EditorPrefs.SetInt( 92 | "TOOL_OPENSIMPLEXGENERATOR_resolution_y", _resolution.y); 93 | EditorPrefs.SetString( 94 | "TOOL_OPENSIMPLEXGENERATOR_path", _path); 95 | } 96 | 97 | private void OnGUI () { 98 | 99 | // Seeds. We need a different seed for each octave, which is why we 100 | // use a seeds array. 101 | EditorGUI.BeginChangeCheck(); 102 | _seamless = EditorGUILayout.ToggleLeft( 103 | "Seamless", _seamless); 104 | _seed = EditorGUILayout.IntField( 105 | "Seed", _seed); 106 | if (EditorGUI.EndChangeCheck()) { 107 | SetSeeds(_seed); 108 | _preview = GenerateTexture(_preview.width, _preview.height); 109 | } 110 | 111 | // Noise settings. 112 | EditorGUI.BeginChangeCheck(); 113 | _frequency = EditorGUILayout.FloatField("Frequency", _frequency); 114 | 115 | GUILayout.Space(16); 116 | GUILayout.Label("Fractal Settings", EditorStyles.boldLabel); 117 | _octaves = EditorGUILayout.IntSlider( 118 | "Octaves", _octaves, 1, 9); 119 | _persistance = EditorGUILayout.Slider( 120 | "Persistance", _persistance, 0f, 1f); 121 | _lacunarity = EditorGUILayout.Slider( 122 | "Lacunarity", _lacunarity, 0.1f, 4.0f); 123 | 124 | GUILayout.Space(16); 125 | GUILayout.Label("Modifiers", EditorStyles.boldLabel); 126 | EditorGUILayout.LabelField( 127 | "Range:", _rangeMin.ToString() + " to " + _rangeMax.ToString()); 128 | EditorGUILayout.MinMaxSlider(ref _rangeMin, ref _rangeMax, 0f, 1f); 129 | 130 | _power = EditorGUILayout.Slider( 131 | "Interpolation Power", _power, 1f, 8f); 132 | _inverted = EditorGUILayout.ToggleLeft( 133 | "Inverted", _inverted); 134 | 135 | if (EditorGUI.EndChangeCheck()) { 136 | _frequency = _frequency < 0f ? 0f : _frequency; 137 | _preview = GenerateTexture(_preview.width, _preview.height); 138 | } 139 | 140 | // Texture settings. They don't cause the preview to change. 141 | GUILayout.Space(32); 142 | GUILayout.Label("Target File Settings", EditorStyles.boldLabel); 143 | EditorGUI.BeginChangeCheck(); 144 | _resolution = EditorGUILayout.Vector2IntField( 145 | "Texture Resolution", _resolution); 146 | _path = EditorGUILayout.TextField( 147 | "File Path", _path); 148 | if (EditorGUI.EndChangeCheck()) { 149 | _resolution.x = _resolution.x < 1 ? 1 : _resolution.x; 150 | _resolution.y = _resolution.y < 1 ? 1 : _resolution.y; 151 | } 152 | 153 | // Draw preview texture. 154 | GUILayout.Space(10); 155 | EditorGUI.DrawPreviewTexture(new Rect(32, 400, 192, 192), _preview); 156 | 157 | // Save button. 158 | GUILayout.Space(236); 159 | if (GUILayout.Button("Save Texture")) { 160 | Texture2D tex = GenerateTexture(_resolution.x, _resolution.y); 161 | byte[] data = tex.EncodeToPNG(); 162 | Object.DestroyImmediate(tex); 163 | File.WriteAllBytes( 164 | string.Format("{0}/{1}", Application.dataPath, _path), data); 165 | AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); 166 | } 167 | } 168 | 169 | private void SetSeeds (int newSeed) { 170 | System.Random rng = new System.Random(newSeed); 171 | _seeds = new long[9]; 172 | for (int i = 0; i < 9; i++) { 173 | _seeds[i] = rng.Next(-100000, 100000); 174 | } 175 | } 176 | 177 | private double[] TorusMapping (float x, float y) { 178 | double[] map = new double[4]; 179 | map[0] = Mathf.Sin(2f * Mathf.PI * x); 180 | map[1] = Mathf.Cos(2f * Mathf.PI * x); 181 | map[2] = Mathf.Sin(2f * Mathf.PI * y); 182 | map[3] = Mathf.Cos(2f * Mathf.PI * y); 183 | return map; 184 | } 185 | 186 | private Texture2D GenerateTexture (int width, int height) { 187 | float[,] values = new float[width, height]; 188 | Texture2D tex = new Texture2D(width, height); 189 | 190 | // This next block is for filling the array. We will later turn this 191 | // array into a texture. We're doing the torus mapping on 4D. 192 | float maxValue = Mathf.NegativeInfinity; // We set these so we can 193 | float minValue = Mathf.Infinity; // normalize values later. 194 | for (int i = 0; i < width; i++) { 195 | for (int j = 0; j < height; j++) { 196 | float sum = 0f; 197 | float amplitude = 1f; 198 | float frequency = _frequency; 199 | 200 | for (int k = 0; k < _octaves; k++) { 201 | float noise = 0f; 202 | if (_seamless) { 203 | double[] coords = TorusMapping( 204 | (float)i / (float)width, (float)j / (float)height); 205 | double nx = coords[0] * frequency; 206 | double ny = coords[1] * frequency; 207 | double nz = coords[2] * frequency; 208 | double nw = coords[3] * frequency; 209 | noise = OpenSimplex2S.Noise4_Fallback( 210 | _seeds[k], nx, ny, nz, nw); 211 | } 212 | else { 213 | double x = ((float)i / (float)width) * frequency * 5; 214 | double y = ((float)j / (float)height) * frequency * 5; 215 | noise = OpenSimplex2S.Noise2(_seeds[k], x, y); 216 | } 217 | 218 | sum += noise * amplitude; 219 | amplitude *= _persistance; 220 | frequency *= _lacunarity; 221 | } 222 | 223 | values[i,j] = sum; 224 | maxValue = sum > maxValue ? sum : maxValue; 225 | minValue = sum < minValue ? sum : minValue; 226 | } 227 | } 228 | 229 | // For the final touches, we normalize, apply power and inverse. 230 | for (int i = 0; i < width; i++) { 231 | for (int j = 0; j < height; j++) { 232 | float value = values[i, j]; 233 | value = Mathf.InverseLerp(minValue, maxValue, value); 234 | value = Mathf.InverseLerp(_rangeMin, _rangeMax, value); 235 | 236 | float k = Mathf.Pow(2f, _power - 1f); 237 | if (value < 0.5f) { 238 | value = k * Mathf.Pow(value, _power); 239 | } 240 | else { 241 | value = 1f - k * Mathf.Pow(1f - value, _power); 242 | } 243 | 244 | value = _inverted ? 1f - value : value; 245 | 246 | // Finally, we make the texture. 247 | tex.SetPixel(i, j, new Color(value, value, value, 1.0f)); 248 | } 249 | } 250 | tex.Apply(); 251 | return tex; 252 | } 253 | 254 | } 255 | -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts/OpenSimplexGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 451e01fdd44bf322aad3bcfc046ded0a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts/TextureCombiner.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using UnityEngine; 5 | using UnityEditor; 6 | 7 | public class TextureCombiner : EditorWindow { 8 | 9 | [MenuItem("Tools/Support Textures Generators/Texture Combiner", 10 | false, 120)] 11 | public static void OpenWindow () => GetWindow(); 12 | 13 | private Texture2D _textureR; 14 | private Texture2D _textureG; 15 | private Texture2D _textureB; 16 | private Texture2D _textureA; 17 | private bool _normalize; 18 | private Vector2Int _resolution; 19 | private string _path; 20 | 21 | private Material _material; 22 | private Texture2D _preview; 23 | 24 | private void OnEnable () { 25 | // EditorPrefs to load settings when you last used it. 26 | _resolution.x = EditorPrefs.GetInt( 27 | "TOOL_TEXTURECOMBINER_resolution_x", 256); 28 | _resolution.y = EditorPrefs.GetInt( 29 | "TOOL_TEXTURECOMBINER_resolution_y", 256); 30 | _path = EditorPrefs.GetString( 31 | "TOOL_TEXTURECOMBINER_path", "Textures/new-noise.png"); 32 | 33 | _material = new Material(Shader.Find("Editor/CombinedTexture")); 34 | _preview = GenerateTexture(192, 192); 35 | 36 | this.minSize = new Vector2(300, 686); 37 | } 38 | 39 | private void OnDisable () { 40 | 41 | // EditorPrefs to save settings for when you next use it. 42 | EditorPrefs.SetInt( 43 | "TOOL_TEXTURECOMBINER_resolution_x", _resolution.x); 44 | EditorPrefs.SetInt( 45 | "TOOL_TEXTURECOMBINER_resolution_y", _resolution.y); 46 | EditorPrefs.SetString( 47 | "TOOL_TEXTURECOMBINER_path", _path); 48 | } 49 | 50 | private void OnGUI () { 51 | 52 | // Textures to be combined. 53 | EditorGUI.BeginChangeCheck(); 54 | _textureR = (Texture2D)EditorGUILayout.ObjectField( 55 | "Texture R", _textureR, typeof(Texture), false); 56 | _textureG = (Texture2D)EditorGUILayout.ObjectField( 57 | "Texture G", _textureG, typeof(Texture), false); 58 | _textureB = (Texture2D)EditorGUILayout.ObjectField( 59 | "Texture B", _textureB, typeof(Texture), false); 60 | _textureA = (Texture2D)EditorGUILayout.ObjectField( 61 | "Texture A", _textureA, typeof(Texture), false); 62 | _normalize = EditorGUILayout.ToggleLeft( 63 | "Normalize", _normalize); 64 | if (EditorGUI.EndChangeCheck()) { 65 | UpdateMaterial(); 66 | _preview = GenerateTexture(_preview.width, _preview.height); 67 | } 68 | 69 | // Texture settings. They don't cause the preview to change. 70 | GUILayout.Space(32); 71 | GUILayout.Label("Target File Settings", EditorStyles.boldLabel); 72 | EditorGUI.BeginChangeCheck(); 73 | _resolution = EditorGUILayout.Vector2IntField( 74 | "Texture Resolution", _resolution); 75 | _path = EditorGUILayout.TextField( 76 | "File Path", _path); 77 | if (EditorGUI.EndChangeCheck()) { 78 | _resolution.x = _resolution.x < 1 ? 1 : _resolution.x; 79 | _resolution.y = _resolution.y < 1 ? 1 : _resolution.y; 80 | } 81 | 82 | // Draw preview texture. 83 | GUILayout.Space(10); 84 | EditorGUI.DrawPreviewTexture(new Rect(32, 428, 192, 192), _preview); 85 | 86 | // Save button. 87 | GUILayout.Space(244); 88 | if (GUILayout.Button("Save Texture")) { 89 | Texture2D tex = GenerateTexture(_resolution.x, _resolution.y); 90 | byte[] data = tex.EncodeToPNG(); 91 | Object.DestroyImmediate(tex); 92 | File.WriteAllBytes( 93 | string.Format("{0}/{1}", Application.dataPath, _path), data); 94 | AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); 95 | } 96 | 97 | } 98 | 99 | private void UpdateMaterial () { 100 | _material.SetTexture("_TexR", _textureR); 101 | _material.SetTexture("_TexG", _textureG); 102 | _material.SetTexture("_TexB", _textureB); 103 | _material.SetTexture("_TexA", _textureA); 104 | } 105 | 106 | private Texture2D GenerateTexture (int width, int height) { 107 | Texture2D tex = new Texture2D( 108 | width, height, TextureFormat.ARGB32, false); 109 | RenderTexture temp = RenderTexture.GetTemporary( 110 | width, height, 0, RenderTextureFormat.ARGB32); 111 | Graphics.Blit(tex, temp, _material); 112 | 113 | RenderTexture.active = temp; 114 | tex.ReadPixels(new Rect(0, 0, width, height), 0, 0); 115 | RenderTexture.active = null; 116 | RenderTexture.ReleaseTemporary(temp); 117 | tex.Apply(); 118 | 119 | if (_normalize) { 120 | tex = NormalizePixels(tex); 121 | } 122 | 123 | return tex; 124 | } 125 | 126 | private Texture2D NormalizePixels (Texture2D input) { 127 | Color max = new Color(0f, 0f, 0f, 0f); 128 | Color min = new Color(1f, 1f, 1f, 1f); 129 | for (int i = 0; i < input.width; i++) { 130 | for (int j = 0; j < input.height; j++) { 131 | Color col = input.GetPixel(i, j); 132 | max.r = col.r > max.r ? col.r : max.r; 133 | max.g = col.g > max.g ? col.g : max.g; 134 | max.b = col.b > max.b ? col.b : max.b; 135 | max.a = col.a > max.a ? col.a : max.a; 136 | min.r = col.r < min.r ? col.r : min.r; 137 | min.g = col.g < min.g ? col.g : min.g; 138 | min.b = col.b < min.b ? col.b : min.b; 139 | min.a = col.a < min.a ? col.a : min.a; 140 | } 141 | } 142 | 143 | Texture2D tex = new Texture2D( 144 | input.width, input.height, TextureFormat.ARGB32, false); 145 | for (int i = 0; i < tex.width; i++) { 146 | for (int j = 0; j < tex.height; j++) { 147 | Color inputCol = input.GetPixel(i, j); 148 | Color newCol = new Color(0f, 0f, 0f, 1f); 149 | 150 | newCol.r = Mathf.InverseLerp(min.r, max.r, inputCol.r); 151 | newCol.g = Mathf.InverseLerp(min.g, max.g, inputCol.g); 152 | newCol.b = Mathf.InverseLerp(min.b, max.b, inputCol.b); 153 | newCol.a = Mathf.InverseLerp(min.a, max.a, inputCol.a); 154 | 155 | if (min.r == max.r) { 156 | newCol.r = min.r; 157 | } 158 | if (min.g == max.g) { 159 | newCol.g = min.g; 160 | } 161 | if (min.b == max.b) { 162 | newCol.b = min.b; 163 | } 164 | if (min.a == max.a) { 165 | newCol.a = min.a; 166 | } 167 | 168 | tex.SetPixel(i, j, newCol); 169 | } 170 | } 171 | tex.Apply(); 172 | return tex; 173 | } 174 | 175 | } -------------------------------------------------------------------------------- /source/Assets/Editor/Scripts/TextureCombiner.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4bcb7a7415bcfb597b982bc632ec883c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /source/Assets/Editor/Shaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: da45e1a906de97a9e89a6d395891eeec 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /source/Assets/Editor/Shaders/CellularNoiseTex.shader: -------------------------------------------------------------------------------- 1 | // This shader is meant to generate a Voronoi noise texture so we can Blit it 2 | // into a render texture and save it on a png. Since it's on a shader, it uses 3 | // the GPU and therefore is much faster than the CPU. You can use it as a 4 | // reference on how to use it on a realtime shader for your game. 5 | 6 | Shader "Editor/CellularNoiseGenerator" { 7 | 8 | Properties { 9 | 10 | _Variation ("Variation", Float) = 0 11 | [Toggle(_SEAMLESS)] _Seamless ("Seamless", Float) = 1 12 | [KeywordEnum(One, Two)] _Combination ("Combination", Float) = 0 13 | [Toggle(_SQUARED_DISTANCE)] _SquaredDistance ("Squared Distance", Float) = 0 14 | 15 | [Header(Noise Properties)] 16 | _Frequency ("Frequency", Float) = 1 17 | _Octaves ("Octaves", Int) = 1 18 | _Persistance ("Persistance", Range(0, 1)) = 0.5 19 | _Lacunarity ("Lacunarity", Range(0.1, 4)) = 2 20 | _Jitter ("Jitter", Range(0, 1)) = 1 21 | 22 | [Header(Noise Modifiers)] 23 | [HideInInspector] _NormFactor ("Normalization Factor", Float) = 1 24 | _RangeMin ("Range Min", Float) = 0 25 | _RangeMax ("Range Max", Float) = 1 26 | _Power ("Power", Range(1, 8)) = 1 27 | [Toggle(_INVERTED)] _Inverted ("Inverted", Float) = 0 28 | } 29 | 30 | SubShader { 31 | 32 | Pass { 33 | 34 | CGPROGRAM 35 | 36 | #pragma multi_compile _ _SEAMLESS 37 | #pragma multi_compile _COMBINATION_ONE _COMBINATION_TWO 38 | #pragma multi_compile _ _SQUARED_DISTANCE 39 | #pragma multi_compile _ _INVERTED 40 | 41 | #pragma vertex vert 42 | #pragma fragment frag 43 | 44 | #include "UnityCG.cginc" 45 | 46 | struct appdata { 47 | float4 vertex : POSITION; 48 | float2 uv : TEXCOORD0; 49 | }; 50 | 51 | struct v2f { 52 | float4 pos : SV_POSITION; 53 | float2 uv : TEXCOORD0; 54 | }; 55 | 56 | float _Variation; 57 | float _Octaves, _Frequency, _Lacunarity, _Persistance, _Jitter; 58 | float _NormFactor, _RangeMin, _RangeMax, _Power; 59 | 60 | /////////////////////////////////////////////////////////////////////////////////////// 61 | // This is Justin Hawkin's repository cginc with some modifications // 62 | // in order to accomodate the needs of this project. I didn't do an #include // 63 | // line because these are dangerous due to their string reference nature // 64 | // but if you want Justin's original to use as an include to your project, // 65 | // feel free to erase this block. // 66 | /////////////////////////////////////////////////////////////////////////////////////// 67 | #define K 0.142857142857 68 | #define Ko 0.428571428571 69 | 70 | float4 mod(float4 x, float y) { return x - y * floor(x/y); } 71 | float3 mod(float3 x, float y) { return x - y * floor(x/y); } 72 | 73 | // Permutation polynomial: (34x^2 + x) mod 289 74 | float3 Permutation(float3 x) 75 | { 76 | return mod((34.0 * x + 1.0) * x, 289.0); 77 | } 78 | 79 | float2 inoise(float4 P, float jitter) 80 | { 81 | float4 Pi = mod(floor(P), 289.0); 82 | float4 Pf = frac(P); 83 | float3 oi = float3(-1.0, 0.0, 1.0); 84 | float3 of = float3(-0.5, 0.5, 1.5); 85 | float3 px = Permutation(Pi.x + oi); 86 | float3 py = Permutation(Pi.y + oi); 87 | float3 pz = Permutation(Pi.z + oi); 88 | 89 | float3 p, ox, oy, oz, ow, dx, dy, dz, dw, d; 90 | float2 F = 1e6; 91 | int i, j, k, n; 92 | 93 | for(i = 0; i < 3; i++) 94 | { 95 | for(j = 0; j < 3; j++) 96 | { 97 | for(k = 0; k < 3; k++) 98 | { 99 | p = Permutation(px[i] + py[j] + pz[k] + Pi.w + oi); 100 | 101 | ox = frac(p*K) - Ko; 102 | oy = mod(floor(p*K),7.0)*K - Ko; 103 | 104 | p = Permutation(p); 105 | 106 | oz = frac(p*K) - Ko; 107 | ow = mod(floor(p*K),7.0)*K - Ko; 108 | 109 | dx = Pf.x - of[i] + jitter*ox; 110 | dy = Pf.y - of[j] + jitter*oy; 111 | dz = Pf.z - of[k] + jitter*oz; 112 | dw = Pf.w - of + jitter*ow; 113 | 114 | d = dx * dx + dy * dy + dz * dz + dw * dw; 115 | 116 | //Find the lowest and second lowest distances 117 | for(n = 0; n < 3; n++) 118 | { 119 | if(d[n] < F[0]) 120 | { 121 | F[1] = F[0]; 122 | F[0] = d[n]; 123 | } 124 | else if(d[n] < F[1]) 125 | { 126 | F[1] = d[n]; 127 | } 128 | } 129 | } 130 | } 131 | } 132 | 133 | return F; 134 | } 135 | /////////////////////////////////////////////////////////////////////////////////////// 136 | /////////////////////////////////////////////////////////////////////////////////////// 137 | 138 | 139 | 140 | float4 TorusMapping (float2 i) { 141 | float4 o = 0; 142 | o.x = sin(i.x * UNITY_TWO_PI); 143 | o.y = cos(i.x * UNITY_TWO_PI); 144 | o.z = sin(i.y * UNITY_TWO_PI); 145 | o.w = cos(i.y * UNITY_TWO_PI); 146 | return o; 147 | } 148 | 149 | v2f vert (appdata v) { 150 | v2f o; 151 | o.pos = UnityObjectToClipPos(v.vertex); 152 | o.uv = v.uv; 153 | return o; 154 | } 155 | 156 | float4 frag (v2f i) : SV_TARGET { 157 | #ifdef _SEAMLESS 158 | float4 coords = TorusMapping(i.uv); 159 | #else 160 | float4 coords = float4(i.uv * 5, 0, 0); 161 | #endif 162 | 163 | float noise = 0; 164 | float freq = _Frequency; 165 | float amp = 0.5; 166 | for (int i = 0; i < _Octaves; i++) { 167 | float4 p = coords * freq; 168 | 169 | #ifdef _SEAMLESS 170 | p += _Variation + i + freq * 5; 171 | #else 172 | p += float4(0, 0, 0, _Variation + i); 173 | #endif 174 | 175 | float2 F = inoise(p, _Jitter); 176 | 177 | #ifdef _COMBINATION_ONE 178 | #ifdef _SQUARED_DISTANCE 179 | noise += F.x * amp; 180 | #else 181 | noise += sqrt(F.x) * amp; 182 | #endif 183 | #endif 184 | 185 | #ifdef _COMBINATION_TWO 186 | #ifdef _SQUARED_DISTANCE 187 | noise += (F.y - F.x) * amp; 188 | #else 189 | noise += (sqrt(F.y) - sqrt(F.x)) * amp; 190 | #endif 191 | #endif 192 | 193 | freq *= _Lacunarity; 194 | amp *= _Persistance; 195 | } 196 | 197 | noise = noise / _NormFactor; 198 | noise = (noise - _RangeMin) / (_RangeMax - _RangeMin); 199 | noise = saturate(noise); 200 | 201 | float k = pow(2, _Power - 1); 202 | noise = noise <= 0.5 ? k * pow(noise, _Power) : noise; 203 | noise = noise >= 0.5 ? 1 - k * pow(1 - noise, _Power) : noise; 204 | 205 | #ifdef _INVERTED 206 | noise = 1 - noise; 207 | #endif 208 | 209 | return float4(noise, noise, noise, 1); 210 | } 211 | 212 | ENDCG 213 | } 214 | } 215 | } 216 | -------------------------------------------------------------------------------- /source/Assets/Editor/Shaders/CellularNoiseTex.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f5d9eff9c19234d22b1f1a63f0834a1a 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | preprocessorOverride: 0 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /source/Assets/Editor/Shaders/CombinedTex.shader: -------------------------------------------------------------------------------- 1 | // This shader can combine up to four grayscale textures into a single texture 2 | // by sampling each texture on a channel of the resulting texture. Only used 3 | // on the editor tool. 4 | 5 | Shader "Editor/CombinedTexture" { 6 | 7 | Properties { 8 | 9 | _TexR ("Texture R", 2D) = "black" {} 10 | _TexG ("Texture G", 2D) = "black" {} 11 | _TexB ("Texture B", 2D) = "black" {} 12 | _TexA ("Texture A", 2D) = "white" {} 13 | } 14 | 15 | SubShader { 16 | 17 | Pass { 18 | 19 | CGPROGRAM 20 | 21 | #pragma vertex vert 22 | #pragma fragment frag 23 | 24 | #include "UnityCG.cginc" 25 | 26 | struct appdata { 27 | float4 vertex : POSITION; 28 | float2 uv : TEXCOORD0; 29 | }; 30 | 31 | struct v2f { 32 | float4 pos : SV_POSITION; 33 | float2 uv : TEXCOORD0; 34 | }; 35 | 36 | sampler2D _TexR, _TexG, _TexB, _TexA; 37 | 38 | v2f vert (appdata v) { 39 | v2f o; 40 | o.pos = UnityObjectToClipPos(v.vertex); 41 | o.uv = v.uv; 42 | return o; 43 | } 44 | 45 | float4 frag (v2f i) : SV_TARGET { 46 | float4 col = float4(0, 0, 0, 1); 47 | col.r = tex2D(_TexR, i.uv).x; 48 | col.g = tex2D(_TexG, i.uv).x; 49 | col.b = tex2D(_TexB, i.uv).x; 50 | col.a = tex2D(_TexA, i.uv).x; 51 | 52 | return col; 53 | } 54 | 55 | ENDCG 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /source/Assets/Editor/Shaders/CombinedTex.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6de401eccfb1be5d398de1320f8e586a 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | preprocessorOverride: 0 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /source/Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9d19e8a0cc2490a38859b558ebcb6915 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /source/Assets/Scripts/OpenSimplex2S.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * K.jpg's OpenSimplex 2, smooth variant ("SuperSimplex") 3 | * 4 | * Note: Not yet compatible with Unity Burst. 5 | */ 6 | 7 | using System.Runtime.CompilerServices; 8 | 9 | public static class OpenSimplex2S 10 | { 11 | private const long PRIME_X = 0x5205402B9270C86FL; 12 | private const long PRIME_Y = 0x598CD327003817B5L; 13 | private const long PRIME_Z = 0x5BCC226E9FA0BACBL; 14 | private const long PRIME_W = 0x56CC5227E58F554BL; 15 | private const long HASH_MULTIPLIER = 0x53A3F72DEEC546F5L; 16 | private const long SEED_FLIP_3D = -0x52D547B2E96ED629L; 17 | 18 | private const double ROOT2OVER2 = 0.7071067811865476; 19 | private const double SKEW_2D = 0.366025403784439; 20 | private const double UNSKEW_2D = -0.21132486540518713; 21 | 22 | private const double ROOT3OVER3 = 0.577350269189626; 23 | private const double FALLBACK_ROTATE3 = 2.0 / 3.0; 24 | private const double ROTATE3_ORTHOGONALIZER = UNSKEW_2D; 25 | 26 | private const float SKEW_4D = 0.309016994374947f; 27 | private const float UNSKEW_4D = -0.138196601125011f; 28 | 29 | private const int N_GRADS_2D_EXPONENT = 7; 30 | private const int N_GRADS_3D_EXPONENT = 8; 31 | private const int N_GRADS_4D_EXPONENT = 9; 32 | private const int N_GRADS_2D = 1 << N_GRADS_2D_EXPONENT; 33 | private const int N_GRADS_3D = 1 << N_GRADS_3D_EXPONENT; 34 | private const int N_GRADS_4D = 1 << N_GRADS_4D_EXPONENT; 35 | 36 | private const double NORMALIZER_2D = 0.05481866495625118; 37 | private const double NORMALIZER_3D = 0.2781926117527186; 38 | private const double NORMALIZER_4D = 0.11127401889945551; 39 | 40 | private const float RSQUARED_2D = 2.0f / 3.0f; 41 | private const float RSQUARED_3D = 3.0f / 4.0f; 42 | private const float RSQUARED_4D = 4.0f / 5.0f; 43 | 44 | /* 45 | * Noise Evaluators 46 | */ 47 | 48 | /** 49 | * 2D OpenSimplex2S/SuperSimplex noise, standard lattice orientation. 50 | */ 51 | public static float Noise2(long seed, double x, double y) 52 | { 53 | // Get points for A2* lattice 54 | double s = SKEW_2D * (x + y); 55 | double xs = x + s, ys = y + s; 56 | 57 | return Noise2_UnskewedBase(seed, xs, ys); 58 | } 59 | 60 | /** 61 | * 2D OpenSimplex2S/SuperSimplex noise, with Y pointing down the main diagonal. 62 | * Might be better for a 2D sandbox style game, where Y is vertical. 63 | * Probably slightly less optimal for heightmaps or continent maps, 64 | * unless your map is centered around an equator. It's a slight 65 | * difference, but the option is here to make it easy. 66 | */ 67 | public static float Noise2_ImproveX(long seed, double x, double y) 68 | { 69 | // Skew transform and rotation baked into one. 70 | double xx = x * ROOT2OVER2; 71 | double yy = y * (ROOT2OVER2 * (1 + 2 * SKEW_2D)); 72 | 73 | return Noise2_UnskewedBase(seed, yy + xx, yy - xx); 74 | } 75 | 76 | /** 77 | * 2D OpenSimplex2S/SuperSimplex noise base. 78 | */ 79 | private static float Noise2_UnskewedBase(long seed, double xs, double ys) 80 | { 81 | // Get base points and offsets. 82 | int xsb = FastFloor(xs), ysb = FastFloor(ys); 83 | float xi = (float)(xs - xsb), yi = (float)(ys - ysb); 84 | 85 | // Prime pre-multiplication for hash. 86 | long xsbp = xsb * PRIME_X, ysbp = ysb * PRIME_Y; 87 | 88 | // Unskew. 89 | float t = (xi + yi) * (float)UNSKEW_2D; 90 | float dx0 = xi + t, dy0 = yi + t; 91 | 92 | // First vertex. 93 | float a0 = RSQUARED_2D - dx0 * dx0 - dy0 * dy0; 94 | float value = (a0 * a0) * (a0 * a0) * Grad(seed, xsbp, ysbp, dx0, dy0); 95 | 96 | // Second vertex. 97 | float a1 = (float)(2 * (1 + 2 * UNSKEW_2D) * (1 / UNSKEW_2D + 2)) * t + ((float)(-2 * (1 + 2 * UNSKEW_2D) * (1 + 2 * UNSKEW_2D)) + a0); 98 | float dx1 = dx0 - (float)(1 + 2 * UNSKEW_2D); 99 | float dy1 = dy0 - (float)(1 + 2 * UNSKEW_2D); 100 | value += (a1 * a1) * (a1 * a1) * Grad(seed, xsbp + PRIME_X, ysbp + PRIME_Y, dx1, dy1); 101 | 102 | // Third and fourth vertices. 103 | // Nested conditionals were faster than compact bit logic/arithmetic. 104 | float xmyi = xi - yi; 105 | if (t < UNSKEW_2D) 106 | { 107 | if (xi + xmyi > 1) 108 | { 109 | float dx2 = dx0 - (float)(3 * UNSKEW_2D + 2); 110 | float dy2 = dy0 - (float)(3 * UNSKEW_2D + 1); 111 | float a2 = RSQUARED_2D - dx2 * dx2 - dy2 * dy2; 112 | if (a2 > 0) 113 | { 114 | value += (a2 * a2) * (a2 * a2) * Grad(seed, xsbp + (PRIME_X << 1), ysbp + PRIME_Y, dx2, dy2); 115 | } 116 | } 117 | else 118 | { 119 | float dx2 = dx0 - (float)UNSKEW_2D; 120 | float dy2 = dy0 - (float)(UNSKEW_2D + 1); 121 | float a2 = RSQUARED_2D - dx2 * dx2 - dy2 * dy2; 122 | if (a2 > 0) 123 | { 124 | value += (a2 * a2) * (a2 * a2) * Grad(seed, xsbp, ysbp + PRIME_Y, dx2, dy2); 125 | } 126 | } 127 | 128 | if (yi - xmyi > 1) 129 | { 130 | float dx3 = dx0 - (float)(3 * UNSKEW_2D + 1); 131 | float dy3 = dy0 - (float)(3 * UNSKEW_2D + 2); 132 | float a3 = RSQUARED_2D - dx3 * dx3 - dy3 * dy3; 133 | if (a3 > 0) 134 | { 135 | value += (a3 * a3) * (a3 * a3) * Grad(seed, xsbp + PRIME_X, ysbp + (PRIME_Y << 1), dx3, dy3); 136 | } 137 | } 138 | else 139 | { 140 | float dx3 = dx0 - (float)(UNSKEW_2D + 1); 141 | float dy3 = dy0 - (float)UNSKEW_2D; 142 | float a3 = RSQUARED_2D - dx3 * dx3 - dy3 * dy3; 143 | if (a3 > 0) 144 | { 145 | value += (a3 * a3) * (a3 * a3) * Grad(seed, xsbp + PRIME_X, ysbp, dx3, dy3); 146 | } 147 | } 148 | } 149 | else 150 | { 151 | if (xi + xmyi < 0) 152 | { 153 | float dx2 = dx0 + (float)(1 + UNSKEW_2D); 154 | float dy2 = dy0 + (float)UNSKEW_2D; 155 | float a2 = RSQUARED_2D - dx2 * dx2 - dy2 * dy2; 156 | if (a2 > 0) 157 | { 158 | value += (a2 * a2) * (a2 * a2) * Grad(seed, xsbp - PRIME_X, ysbp, dx2, dy2); 159 | } 160 | } 161 | else 162 | { 163 | float dx2 = dx0 - (float)(UNSKEW_2D + 1); 164 | float dy2 = dy0 - (float)UNSKEW_2D; 165 | float a2 = RSQUARED_2D - dx2 * dx2 - dy2 * dy2; 166 | if (a2 > 0) 167 | { 168 | value += (a2 * a2) * (a2 * a2) * Grad(seed, xsbp + PRIME_X, ysbp, dx2, dy2); 169 | } 170 | } 171 | 172 | if (yi < xmyi) 173 | { 174 | float dx2 = dx0 + (float)UNSKEW_2D; 175 | float dy2 = dy0 + (float)(UNSKEW_2D + 1); 176 | float a2 = RSQUARED_2D - dx2 * dx2 - dy2 * dy2; 177 | if (a2 > 0) 178 | { 179 | value += (a2 * a2) * (a2 * a2) * Grad(seed, xsbp, ysbp - PRIME_Y, dx2, dy2); 180 | } 181 | } 182 | else 183 | { 184 | float dx2 = dx0 - (float)UNSKEW_2D; 185 | float dy2 = dy0 - (float)(UNSKEW_2D + 1); 186 | float a2 = RSQUARED_2D - dx2 * dx2 - dy2 * dy2; 187 | if (a2 > 0) 188 | { 189 | value += (a2 * a2) * (a2 * a2) * Grad(seed, xsbp, ysbp + PRIME_Y, dx2, dy2); 190 | } 191 | } 192 | } 193 | 194 | return value; 195 | } 196 | 197 | /** 198 | * 3D OpenSimplex2S/SuperSimplex noise, with better visual isotropy in (X, Y). 199 | * Recommended for 3D terrain and time-varied animations. 200 | * The Z coordinate should always be the "different" coordinate in whatever your use case is. 201 | * If Y is vertical in world coordinates, call Noise3_ImproveXZ(x, z, Y) or use Noise3_XZBeforeY. 202 | * If Z is vertical in world coordinates, call Noise3_ImproveXZ(x, y, Z). 203 | * For a time varied animation, call Noise3_ImproveXY(x, y, T). 204 | */ 205 | public static float Noise3_ImproveXY(long seed, double x, double y, double z) 206 | { 207 | // Re-orient the cubic lattices without skewing, so Z points up the main lattice diagonal, 208 | // and the planes formed by XY are moved far out of alignment with the cube faces. 209 | // Orthonormal rotation. Not a skew transform. 210 | double xy = x + y; 211 | double s2 = xy * ROTATE3_ORTHOGONALIZER; 212 | double zz = z * ROOT3OVER3; 213 | double xr = x + s2 + zz; 214 | double yr = y + s2 + zz; 215 | double zr = xy * -ROOT3OVER3 + zz; 216 | 217 | // Evaluate both lattices to form a BCC lattice. 218 | return Noise3_UnrotatedBase(seed, xr, yr, zr); 219 | } 220 | 221 | /** 222 | * 3D OpenSimplex2S/SuperSimplex noise, with better visual isotropy in (X, Z). 223 | * Recommended for 3D terrain and time-varied animations. 224 | * The Y coordinate should always be the "different" coordinate in whatever your use case is. 225 | * If Y is vertical in world coordinates, call Noise3_ImproveXZ(x, Y, z). 226 | * If Z is vertical in world coordinates, call Noise3_ImproveXZ(x, Z, y) or use Noise3_ImproveXY. 227 | * For a time varied animation, call Noise3_ImproveXZ(x, T, y) or use Noise3_ImproveXY. 228 | */ 229 | public static float Noise3_ImproveXZ(long seed, double x, double y, double z) 230 | { 231 | // Re-orient the cubic lattices without skewing, so Y points up the main lattice diagonal, 232 | // and the planes formed by XZ are moved far out of alignment with the cube faces. 233 | // Orthonormal rotation. Not a skew transform. 234 | double xz = x + z; 235 | double s2 = xz * -0.211324865405187; 236 | double yy = y * ROOT3OVER3; 237 | double xr = x + s2 + yy; 238 | double zr = z + s2 + yy; 239 | double yr = xz * -ROOT3OVER3 + yy; 240 | 241 | // Evaluate both lattices to form a BCC lattice. 242 | return Noise3_UnrotatedBase(seed, xr, yr, zr); 243 | } 244 | 245 | /** 246 | * 3D OpenSimplex2S/SuperSimplex noise, fallback rotation option 247 | * Use Noise3_ImproveXY or Noise3_ImproveXZ instead, wherever appropriate. 248 | * They have less diagonal bias. This function's best use is as a fallback. 249 | */ 250 | public static float Noise3_Fallback(long seed, double x, double y, double z) 251 | { 252 | // Re-orient the cubic lattices via rotation, to produce a familiar look. 253 | // Orthonormal rotation. Not a skew transform. 254 | double r = FALLBACK_ROTATE3 * (x + y + z); 255 | double xr = r - x, yr = r - y, zr = r - z; 256 | 257 | // Evaluate both lattices to form a BCC lattice. 258 | return Noise3_UnrotatedBase(seed, xr, yr, zr); 259 | } 260 | 261 | /** 262 | * Generate overlapping cubic lattices for 3D Re-oriented BCC noise. 263 | * Lookup table implementation inspired by DigitalShadow. 264 | * It was actually faster to narrow down the points in the loop itself, 265 | * than to build up the index with enough info to isolate 8 points. 266 | */ 267 | private static float Noise3_UnrotatedBase(long seed, double xr, double yr, double zr) 268 | { 269 | // Get base points and offsets. 270 | int xrb = FastFloor(xr), yrb = FastFloor(yr), zrb = FastFloor(zr); 271 | float xi = (float)(xr - xrb), yi = (float)(yr - yrb), zi = (float)(zr - zrb); 272 | 273 | // Prime pre-multiplication for hash. Also flip seed for second lattice copy. 274 | long xrbp = xrb * PRIME_X, yrbp = yrb * PRIME_Y, zrbp = zrb * PRIME_Z; 275 | long seed2 = seed ^ -0x52D547B2E96ED629L; 276 | 277 | // -1 if positive, 0 if negative. 278 | int xNMask = (int)(-0.5f - xi), yNMask = (int)(-0.5f - yi), zNMask = (int)(-0.5f - zi); 279 | 280 | // First vertex. 281 | float x0 = xi + xNMask; 282 | float y0 = yi + yNMask; 283 | float z0 = zi + zNMask; 284 | float a0 = RSQUARED_3D - x0 * x0 - y0 * y0 - z0 * z0; 285 | float value = (a0 * a0) * (a0 * a0) * Grad(seed, 286 | xrbp + (xNMask & PRIME_X), yrbp + (yNMask & PRIME_Y), zrbp + (zNMask & PRIME_Z), x0, y0, z0); 287 | 288 | // Second vertex. 289 | float x1 = xi - 0.5f; 290 | float y1 = yi - 0.5f; 291 | float z1 = zi - 0.5f; 292 | float a1 = RSQUARED_3D - x1 * x1 - y1 * y1 - z1 * z1; 293 | value += (a1 * a1) * (a1 * a1) * Grad(seed2, 294 | xrbp + PRIME_X, yrbp + PRIME_Y, zrbp + PRIME_Z, x1, y1, z1); 295 | 296 | // Shortcuts for building the remaining falloffs. 297 | // Derived by subtracting the polynomials with the offsets plugged in. 298 | float xAFlipMask0 = ((xNMask | 1) << 1) * x1; 299 | float yAFlipMask0 = ((yNMask | 1) << 1) * y1; 300 | float zAFlipMask0 = ((zNMask | 1) << 1) * z1; 301 | float xAFlipMask1 = (-2 - (xNMask << 2)) * x1 - 1.0f; 302 | float yAFlipMask1 = (-2 - (yNMask << 2)) * y1 - 1.0f; 303 | float zAFlipMask1 = (-2 - (zNMask << 2)) * z1 - 1.0f; 304 | 305 | bool skip5 = false; 306 | float a2 = xAFlipMask0 + a0; 307 | if (a2 > 0) 308 | { 309 | float x2 = x0 - (xNMask | 1); 310 | float y2 = y0; 311 | float z2 = z0; 312 | value += (a2 * a2) * (a2 * a2) * Grad(seed, 313 | xrbp + (~xNMask & PRIME_X), yrbp + (yNMask & PRIME_Y), zrbp + (zNMask & PRIME_Z), x2, y2, z2); 314 | } 315 | else 316 | { 317 | float a3 = yAFlipMask0 + zAFlipMask0 + a0; 318 | if (a3 > 0) 319 | { 320 | float x3 = x0; 321 | float y3 = y0 - (yNMask | 1); 322 | float z3 = z0 - (zNMask | 1); 323 | value += (a3 * a3) * (a3 * a3) * Grad(seed, 324 | xrbp + (xNMask & PRIME_X), yrbp + (~yNMask & PRIME_Y), zrbp + (~zNMask & PRIME_Z), x3, y3, z3); 325 | } 326 | 327 | float a4 = xAFlipMask1 + a1; 328 | if (a4 > 0) 329 | { 330 | float x4 = (xNMask | 1) + x1; 331 | float y4 = y1; 332 | float z4 = z1; 333 | value += (a4 * a4) * (a4 * a4) * Grad(seed2, 334 | xrbp + (xNMask & unchecked(PRIME_X * 2)), yrbp + PRIME_Y, zrbp + PRIME_Z, x4, y4, z4); 335 | skip5 = true; 336 | } 337 | } 338 | 339 | bool skip9 = false; 340 | float a6 = yAFlipMask0 + a0; 341 | if (a6 > 0) 342 | { 343 | float x6 = x0; 344 | float y6 = y0 - (yNMask | 1); 345 | float z6 = z0; 346 | value += (a6 * a6) * (a6 * a6) * Grad(seed, 347 | xrbp + (xNMask & PRIME_X), yrbp + (~yNMask & PRIME_Y), zrbp + (zNMask & PRIME_Z), x6, y6, z6); 348 | } 349 | else 350 | { 351 | float a7 = xAFlipMask0 + zAFlipMask0 + a0; 352 | if (a7 > 0) 353 | { 354 | float x7 = x0 - (xNMask | 1); 355 | float y7 = y0; 356 | float z7 = z0 - (zNMask | 1); 357 | value += (a7 * a7) * (a7 * a7) * Grad(seed, 358 | xrbp + (~xNMask & PRIME_X), yrbp + (yNMask & PRIME_Y), zrbp + (~zNMask & PRIME_Z), x7, y7, z7); 359 | } 360 | 361 | float a8 = yAFlipMask1 + a1; 362 | if (a8 > 0) 363 | { 364 | float x8 = x1; 365 | float y8 = (yNMask | 1) + y1; 366 | float z8 = z1; 367 | value += (a8 * a8) * (a8 * a8) * Grad(seed2, 368 | xrbp + PRIME_X, yrbp + (yNMask & (PRIME_Y << 1)), zrbp + PRIME_Z, x8, y8, z8); 369 | skip9 = true; 370 | } 371 | } 372 | 373 | bool skipD = false; 374 | float aA = zAFlipMask0 + a0; 375 | if (aA > 0) 376 | { 377 | float xA = x0; 378 | float yA = y0; 379 | float zA = z0 - (zNMask | 1); 380 | value += (aA * aA) * (aA * aA) * Grad(seed, 381 | xrbp + (xNMask & PRIME_X), yrbp + (yNMask & PRIME_Y), zrbp + (~zNMask & PRIME_Z), xA, yA, zA); 382 | } 383 | else 384 | { 385 | float aB = xAFlipMask0 + yAFlipMask0 + a0; 386 | if (aB > 0) 387 | { 388 | float xB = x0 - (xNMask | 1); 389 | float yB = y0 - (yNMask | 1); 390 | float zB = z0; 391 | value += (aB * aB) * (aB * aB) * Grad(seed, 392 | xrbp + (~xNMask & PRIME_X), yrbp + (~yNMask & PRIME_Y), zrbp + (zNMask & PRIME_Z), xB, yB, zB); 393 | } 394 | 395 | float aC = zAFlipMask1 + a1; 396 | if (aC > 0) 397 | { 398 | float xC = x1; 399 | float yC = y1; 400 | float zC = (zNMask | 1) + z1; 401 | value += (aC * aC) * (aC * aC) * Grad(seed2, 402 | xrbp + PRIME_X, yrbp + PRIME_Y, zrbp + (zNMask & (PRIME_Z << 1)), xC, yC, zC); 403 | skipD = true; 404 | } 405 | } 406 | 407 | if (!skip5) 408 | { 409 | float a5 = yAFlipMask1 + zAFlipMask1 + a1; 410 | if (a5 > 0) 411 | { 412 | float x5 = x1; 413 | float y5 = (yNMask | 1) + y1; 414 | float z5 = (zNMask | 1) + z1; 415 | value += (a5 * a5) * (a5 * a5) * Grad(seed2, 416 | xrbp + PRIME_X, yrbp + (yNMask & (PRIME_Y << 1)), zrbp + (zNMask & (PRIME_Z << 1)), x5, y5, z5); 417 | } 418 | } 419 | 420 | if (!skip9) 421 | { 422 | float a9 = xAFlipMask1 + zAFlipMask1 + a1; 423 | if (a9 > 0) 424 | { 425 | float x9 = (xNMask | 1) + x1; 426 | float y9 = y1; 427 | float z9 = (zNMask | 1) + z1; 428 | value += (a9 * a9) * (a9 * a9) * Grad(seed2, 429 | xrbp + (xNMask & unchecked(PRIME_X * 2)), yrbp + PRIME_Y, zrbp + (zNMask & (PRIME_Z << 1)), x9, y9, z9); 430 | } 431 | } 432 | 433 | if (!skipD) 434 | { 435 | float aD = xAFlipMask1 + yAFlipMask1 + a1; 436 | if (aD > 0) 437 | { 438 | float xD = (xNMask | 1) + x1; 439 | float yD = (yNMask | 1) + y1; 440 | float zD = z1; 441 | value += (aD * aD) * (aD * aD) * Grad(seed2, 442 | xrbp + (xNMask & (PRIME_X << 1)), yrbp + (yNMask & (PRIME_Y << 1)), zrbp + PRIME_Z, xD, yD, zD); 443 | } 444 | } 445 | 446 | return value; 447 | } 448 | 449 | /** 450 | * 4D SuperSimplex noise, with XYZ oriented like Noise3_ImproveXY 451 | * and W for an extra degree of freedom. W repeats eventually. 452 | * Recommended for time-varied animations which texture a 3D object (W=time) 453 | * in a space where Z is vertical 454 | */ 455 | public static float Noise4_ImproveXYZ_ImproveXY(long seed, double x, double y, double z, double w) 456 | { 457 | double xy = x + y; 458 | double s2 = xy * -0.21132486540518699998; 459 | double zz = z * 0.28867513459481294226; 460 | double ww = w * 1.118033988749894; 461 | double xr = x + (zz + ww + s2), yr = y + (zz + ww + s2); 462 | double zr = xy * -0.57735026918962599998 + (zz + ww); 463 | double wr = z * -0.866025403784439 + ww; 464 | 465 | return Noise4_UnskewedBase(seed, xr, yr, zr, wr); 466 | } 467 | 468 | /** 469 | * 4D SuperSimplex noise, with XYZ oriented like Noise3_ImproveXZ 470 | * and W for an extra degree of freedom. W repeats eventually. 471 | * Recommended for time-varied animations which texture a 3D object (W=time) 472 | * in a space where Y is vertical 473 | */ 474 | public static float Noise4_ImproveXYZ_ImproveXZ(long seed, double x, double y, double z, double w) 475 | { 476 | double xz = x + z; 477 | double s2 = xz * -0.21132486540518699998; 478 | double yy = y * 0.28867513459481294226; 479 | double ww = w * 1.118033988749894; 480 | double xr = x + (yy + ww + s2), zr = z + (yy + ww + s2); 481 | double yr = xz * -0.57735026918962599998 + (yy + ww); 482 | double wr = y * -0.866025403784439 + ww; 483 | 484 | return Noise4_UnskewedBase(seed, xr, yr, zr, wr); 485 | } 486 | 487 | /** 488 | * 4D SuperSimplex noise, with XYZ oriented like Noise3_Fallback 489 | * and W for an extra degree of freedom. W repeats eventually. 490 | * Recommended for time-varied animations which texture a 3D object (W=time) 491 | * where there isn't a clear distinction between horizontal and vertical 492 | */ 493 | public static float Noise4_ImproveXYZ(long seed, double x, double y, double z, double w) 494 | { 495 | double xyz = x + y + z; 496 | double ww = w * 1.118033988749894; 497 | double s2 = xyz * -0.16666666666666666 + ww; 498 | double xs = x + s2, ys = y + s2, zs = z + s2, ws = -0.5 * xyz + ww; 499 | 500 | return Noise4_UnskewedBase(seed, xs, ys, zs, ws); 501 | } 502 | 503 | /** 504 | * 4D SuperSimplex noise, fallback lattice orientation. 505 | */ 506 | public static float Noise4_Fallback(long seed, double x, double y, double z, double w) 507 | { 508 | // Get points for A4 lattice 509 | double s = SKEW_4D * (x + y + z + w); 510 | double xs = x + s, ys = y + s, zs = z + s, ws = w + s; 511 | 512 | return Noise4_UnskewedBase(seed, xs, ys, zs, ws); 513 | } 514 | 515 | /** 516 | * 4D SuperSimplex noise base. 517 | * Using ultra-simple 4x4x4x4 lookup partitioning. 518 | * This isn't as elegant or SIMD/GPU/etc. portable as other approaches, 519 | * but it competes performance-wise with optimized 2014 OpenSimplex. 520 | */ 521 | private static float Noise4_UnskewedBase(long seed, double xs, double ys, double zs, double ws) 522 | { 523 | // Get base points and offsets 524 | int xsb = FastFloor(xs), ysb = FastFloor(ys), zsb = FastFloor(zs), wsb = FastFloor(ws); 525 | float xsi = (float)(xs - xsb), ysi = (float)(ys - ysb), zsi = (float)(zs - zsb), wsi = (float)(ws - wsb); 526 | 527 | // Unskewed offsets 528 | float ssi = (xsi + ysi + zsi + wsi) * UNSKEW_4D; 529 | float xi = xsi + ssi, yi = ysi + ssi, zi = zsi + ssi, wi = wsi + ssi; 530 | 531 | // Prime pre-multiplication for hash. 532 | long xsvp = xsb * PRIME_X, ysvp = ysb * PRIME_Y, zsvp = zsb * PRIME_Z, wsvp = wsb * PRIME_W; 533 | 534 | // Index into initial table. 535 | int index = ((FastFloor(xs * 4) & 3) << 0) 536 | | ((FastFloor(ys * 4) & 3) << 2) 537 | | ((FastFloor(zs * 4) & 3) << 4) 538 | | ((FastFloor(ws * 4) & 3) << 6); 539 | 540 | // Point contributions 541 | float value = 0; 542 | (int secondaryIndexStart, int secondaryIndexStop) = LOOKUP_4D_A[index]; 543 | for (int i = secondaryIndexStart; i < secondaryIndexStop; i++) 544 | { 545 | LatticeVertex4D c = LOOKUP_4D_B[i]; 546 | float dx = xi + c.dx, dy = yi + c.dy, dz = zi + c.dz, dw = wi + c.dw; 547 | float a = (dx * dx + dy * dy) + (dz * dz + dw * dw); 548 | if (a < RSQUARED_4D) 549 | { 550 | a -= RSQUARED_4D; 551 | a *= a; 552 | value += a * a * Grad(seed, xsvp + c.xsvp, ysvp + c.ysvp, zsvp + c.zsvp, wsvp + c.wsvp, dx, dy, dz, dw); 553 | } 554 | } 555 | return value; 556 | } 557 | 558 | /* 559 | * Utility 560 | */ 561 | 562 | [MethodImpl(MethodImplOptions.AggressiveInlining)] 563 | private static float Grad(long seed, long xsvp, long ysvp, float dx, float dy) 564 | { 565 | long hash = seed ^ xsvp ^ ysvp; 566 | hash *= HASH_MULTIPLIER; 567 | hash ^= hash >> (64 - N_GRADS_2D_EXPONENT + 1); 568 | int gi = (int)hash & ((N_GRADS_2D - 1) << 1); 569 | return GRADIENTS_2D[gi | 0] * dx + GRADIENTS_2D[gi | 1] * dy; 570 | } 571 | 572 | [MethodImpl(MethodImplOptions.AggressiveInlining)] 573 | private static float Grad(long seed, long xrvp, long yrvp, long zrvp, float dx, float dy, float dz) 574 | { 575 | long hash = (seed ^ xrvp) ^ (yrvp ^ zrvp); 576 | hash *= HASH_MULTIPLIER; 577 | hash ^= hash >> (64 - N_GRADS_3D_EXPONENT + 2); 578 | int gi = (int)hash & ((N_GRADS_3D - 1) << 2); 579 | return GRADIENTS_3D[gi | 0] * dx + GRADIENTS_3D[gi | 1] * dy + GRADIENTS_3D[gi | 2] * dz; 580 | } 581 | 582 | [MethodImpl(MethodImplOptions.AggressiveInlining)] 583 | private static float Grad(long seed, long xsvp, long ysvp, long zsvp, long wsvp, float dx, float dy, float dz, float dw) 584 | { 585 | long hash = seed ^ (xsvp ^ ysvp) ^ (zsvp ^ wsvp); 586 | hash *= HASH_MULTIPLIER; 587 | hash ^= hash >> (64 - N_GRADS_4D_EXPONENT + 2); 588 | int gi = (int)hash & ((N_GRADS_4D - 1) << 2); 589 | return (GRADIENTS_4D[gi | 0] * dx + GRADIENTS_4D[gi | 1] * dy) + (GRADIENTS_4D[gi | 2] * dz + GRADIENTS_4D[gi | 3] * dw); 590 | } 591 | 592 | [MethodImpl(MethodImplOptions.AggressiveInlining)] 593 | private static int FastFloor(double x) 594 | { 595 | int xi = (int)x; 596 | return x < xi ? xi - 1 : xi; 597 | } 598 | 599 | /* 600 | * Lookup Tables & Gradients 601 | */ 602 | 603 | private static readonly float[] GRADIENTS_2D; 604 | private static readonly float[] GRADIENTS_3D; 605 | private static readonly float[] GRADIENTS_4D; 606 | private static readonly (short SecondaryIndexStart, short SecondaryIndexStop)[] LOOKUP_4D_A; 607 | private static readonly LatticeVertex4D[] LOOKUP_4D_B; 608 | 609 | static OpenSimplex2S() 610 | { 611 | 612 | GRADIENTS_2D = new float[N_GRADS_2D * 2]; 613 | float[] grad2 = { 614 | 0.38268343236509f, 0.923879532511287f, 615 | 0.923879532511287f, 0.38268343236509f, 616 | 0.923879532511287f, -0.38268343236509f, 617 | 0.38268343236509f, -0.923879532511287f, 618 | -0.38268343236509f, -0.923879532511287f, 619 | -0.923879532511287f, -0.38268343236509f, 620 | -0.923879532511287f, 0.38268343236509f, 621 | -0.38268343236509f, 0.923879532511287f, 622 | //-------------------------------------// 623 | 0.130526192220052f, 0.99144486137381f, 624 | 0.608761429008721f, 0.793353340291235f, 625 | 0.793353340291235f, 0.608761429008721f, 626 | 0.99144486137381f, 0.130526192220051f, 627 | 0.99144486137381f, -0.130526192220051f, 628 | 0.793353340291235f, -0.60876142900872f, 629 | 0.608761429008721f, -0.793353340291235f, 630 | 0.130526192220052f, -0.99144486137381f, 631 | -0.130526192220052f, -0.99144486137381f, 632 | -0.608761429008721f, -0.793353340291235f, 633 | -0.793353340291235f, -0.608761429008721f, 634 | -0.99144486137381f, -0.130526192220052f, 635 | -0.99144486137381f, 0.130526192220051f, 636 | -0.793353340291235f, 0.608761429008721f, 637 | -0.608761429008721f, 0.793353340291235f, 638 | -0.130526192220052f, 0.99144486137381f, 639 | }; 640 | for (int i = 0; i < grad2.Length; i++) 641 | { 642 | grad2[i] = (float)(grad2[i] / NORMALIZER_2D); 643 | } 644 | for (int i = 0, j = 0; i < GRADIENTS_2D.Length; i++, j++) 645 | { 646 | if (j == grad2.Length) j = 0; 647 | GRADIENTS_2D[i] = grad2[j]; 648 | } 649 | 650 | GRADIENTS_3D = new float[N_GRADS_3D * 4]; 651 | float[] grad3 = { 652 | 2.22474487139f, 2.22474487139f, -1.0f, 0.0f, 653 | 2.22474487139f, 2.22474487139f, 1.0f, 0.0f, 654 | 3.0862664687972017f, 1.1721513422464978f, 0.0f, 0.0f, 655 | 1.1721513422464978f, 3.0862664687972017f, 0.0f, 0.0f, 656 | -2.22474487139f, 2.22474487139f, -1.0f, 0.0f, 657 | -2.22474487139f, 2.22474487139f, 1.0f, 0.0f, 658 | -1.1721513422464978f, 3.0862664687972017f, 0.0f, 0.0f, 659 | -3.0862664687972017f, 1.1721513422464978f, 0.0f, 0.0f, 660 | -1.0f, -2.22474487139f, -2.22474487139f, 0.0f, 661 | 1.0f, -2.22474487139f, -2.22474487139f, 0.0f, 662 | 0.0f, -3.0862664687972017f, -1.1721513422464978f, 0.0f, 663 | 0.0f, -1.1721513422464978f, -3.0862664687972017f, 0.0f, 664 | -1.0f, -2.22474487139f, 2.22474487139f, 0.0f, 665 | 1.0f, -2.22474487139f, 2.22474487139f, 0.0f, 666 | 0.0f, -1.1721513422464978f, 3.0862664687972017f, 0.0f, 667 | 0.0f, -3.0862664687972017f, 1.1721513422464978f, 0.0f, 668 | //--------------------------------------------------------------------// 669 | -2.22474487139f, -2.22474487139f, -1.0f, 0.0f, 670 | -2.22474487139f, -2.22474487139f, 1.0f, 0.0f, 671 | -3.0862664687972017f, -1.1721513422464978f, 0.0f, 0.0f, 672 | -1.1721513422464978f, -3.0862664687972017f, 0.0f, 0.0f, 673 | -2.22474487139f, -1.0f, -2.22474487139f, 0.0f, 674 | -2.22474487139f, 1.0f, -2.22474487139f, 0.0f, 675 | -1.1721513422464978f, 0.0f, -3.0862664687972017f, 0.0f, 676 | -3.0862664687972017f, 0.0f, -1.1721513422464978f, 0.0f, 677 | -2.22474487139f, -1.0f, 2.22474487139f, 0.0f, 678 | -2.22474487139f, 1.0f, 2.22474487139f, 0.0f, 679 | -3.0862664687972017f, 0.0f, 1.1721513422464978f, 0.0f, 680 | -1.1721513422464978f, 0.0f, 3.0862664687972017f, 0.0f, 681 | -1.0f, 2.22474487139f, -2.22474487139f, 0.0f, 682 | 1.0f, 2.22474487139f, -2.22474487139f, 0.0f, 683 | 0.0f, 1.1721513422464978f, -3.0862664687972017f, 0.0f, 684 | 0.0f, 3.0862664687972017f, -1.1721513422464978f, 0.0f, 685 | -1.0f, 2.22474487139f, 2.22474487139f, 0.0f, 686 | 1.0f, 2.22474487139f, 2.22474487139f, 0.0f, 687 | 0.0f, 3.0862664687972017f, 1.1721513422464978f, 0.0f, 688 | 0.0f, 1.1721513422464978f, 3.0862664687972017f, 0.0f, 689 | 2.22474487139f, -2.22474487139f, -1.0f, 0.0f, 690 | 2.22474487139f, -2.22474487139f, 1.0f, 0.0f, 691 | 1.1721513422464978f, -3.0862664687972017f, 0.0f, 0.0f, 692 | 3.0862664687972017f, -1.1721513422464978f, 0.0f, 0.0f, 693 | 2.22474487139f, -1.0f, -2.22474487139f, 0.0f, 694 | 2.22474487139f, 1.0f, -2.22474487139f, 0.0f, 695 | 3.0862664687972017f, 0.0f, -1.1721513422464978f, 0.0f, 696 | 1.1721513422464978f, 0.0f, -3.0862664687972017f, 0.0f, 697 | 2.22474487139f, -1.0f, 2.22474487139f, 0.0f, 698 | 2.22474487139f, 1.0f, 2.22474487139f, 0.0f, 699 | 1.1721513422464978f, 0.0f, 3.0862664687972017f, 0.0f, 700 | 3.0862664687972017f, 0.0f, 1.1721513422464978f, 0.0f, 701 | }; 702 | for (int i = 0; i < grad3.Length; i++) 703 | { 704 | grad3[i] = (float)(grad3[i] / NORMALIZER_3D); 705 | } 706 | for (int i = 0, j = 0; i < GRADIENTS_3D.Length; i++, j++) 707 | { 708 | if (j == grad3.Length) j = 0; 709 | GRADIENTS_3D[i] = grad3[j]; 710 | } 711 | 712 | GRADIENTS_4D = new float[N_GRADS_4D * 4]; 713 | float[] grad4 = { 714 | -0.6740059517812944f, -0.3239847771997537f, -0.3239847771997537f, 0.5794684678643381f, 715 | -0.7504883828755602f, -0.4004672082940195f, 0.15296486218853164f, 0.5029860367700724f, 716 | -0.7504883828755602f, 0.15296486218853164f, -0.4004672082940195f, 0.5029860367700724f, 717 | -0.8828161875373585f, 0.08164729285680945f, 0.08164729285680945f, 0.4553054119602712f, 718 | -0.4553054119602712f, -0.08164729285680945f, -0.08164729285680945f, 0.8828161875373585f, 719 | -0.5029860367700724f, -0.15296486218853164f, 0.4004672082940195f, 0.7504883828755602f, 720 | -0.5029860367700724f, 0.4004672082940195f, -0.15296486218853164f, 0.7504883828755602f, 721 | -0.5794684678643381f, 0.3239847771997537f, 0.3239847771997537f, 0.6740059517812944f, 722 | -0.6740059517812944f, -0.3239847771997537f, 0.5794684678643381f, -0.3239847771997537f, 723 | -0.7504883828755602f, -0.4004672082940195f, 0.5029860367700724f, 0.15296486218853164f, 724 | -0.7504883828755602f, 0.15296486218853164f, 0.5029860367700724f, -0.4004672082940195f, 725 | -0.8828161875373585f, 0.08164729285680945f, 0.4553054119602712f, 0.08164729285680945f, 726 | -0.4553054119602712f, -0.08164729285680945f, 0.8828161875373585f, -0.08164729285680945f, 727 | -0.5029860367700724f, -0.15296486218853164f, 0.7504883828755602f, 0.4004672082940195f, 728 | -0.5029860367700724f, 0.4004672082940195f, 0.7504883828755602f, -0.15296486218853164f, 729 | -0.5794684678643381f, 0.3239847771997537f, 0.6740059517812944f, 0.3239847771997537f, 730 | -0.6740059517812944f, 0.5794684678643381f, -0.3239847771997537f, -0.3239847771997537f, 731 | -0.7504883828755602f, 0.5029860367700724f, -0.4004672082940195f, 0.15296486218853164f, 732 | -0.7504883828755602f, 0.5029860367700724f, 0.15296486218853164f, -0.4004672082940195f, 733 | -0.8828161875373585f, 0.4553054119602712f, 0.08164729285680945f, 0.08164729285680945f, 734 | -0.4553054119602712f, 0.8828161875373585f, -0.08164729285680945f, -0.08164729285680945f, 735 | -0.5029860367700724f, 0.7504883828755602f, -0.15296486218853164f, 0.4004672082940195f, 736 | -0.5029860367700724f, 0.7504883828755602f, 0.4004672082940195f, -0.15296486218853164f, 737 | -0.5794684678643381f, 0.6740059517812944f, 0.3239847771997537f, 0.3239847771997537f, 738 | 0.5794684678643381f, -0.6740059517812944f, -0.3239847771997537f, -0.3239847771997537f, 739 | 0.5029860367700724f, -0.7504883828755602f, -0.4004672082940195f, 0.15296486218853164f, 740 | 0.5029860367700724f, -0.7504883828755602f, 0.15296486218853164f, -0.4004672082940195f, 741 | 0.4553054119602712f, -0.8828161875373585f, 0.08164729285680945f, 0.08164729285680945f, 742 | 0.8828161875373585f, -0.4553054119602712f, -0.08164729285680945f, -0.08164729285680945f, 743 | 0.7504883828755602f, -0.5029860367700724f, -0.15296486218853164f, 0.4004672082940195f, 744 | 0.7504883828755602f, -0.5029860367700724f, 0.4004672082940195f, -0.15296486218853164f, 745 | 0.6740059517812944f, -0.5794684678643381f, 0.3239847771997537f, 0.3239847771997537f, 746 | //------------------------------------------------------------------------------------------// 747 | -0.753341017856078f, -0.37968289875261624f, -0.37968289875261624f, -0.37968289875261624f, 748 | -0.7821684431180708f, -0.4321472685365301f, -0.4321472685365301f, 0.12128480194602098f, 749 | -0.7821684431180708f, -0.4321472685365301f, 0.12128480194602098f, -0.4321472685365301f, 750 | -0.7821684431180708f, 0.12128480194602098f, -0.4321472685365301f, -0.4321472685365301f, 751 | -0.8586508742123365f, -0.508629699630796f, 0.044802370851755174f, 0.044802370851755174f, 752 | -0.8586508742123365f, 0.044802370851755174f, -0.508629699630796f, 0.044802370851755174f, 753 | -0.8586508742123365f, 0.044802370851755174f, 0.044802370851755174f, -0.508629699630796f, 754 | -0.9982828964265062f, -0.03381941603233842f, -0.03381941603233842f, -0.03381941603233842f, 755 | -0.37968289875261624f, -0.753341017856078f, -0.37968289875261624f, -0.37968289875261624f, 756 | -0.4321472685365301f, -0.7821684431180708f, -0.4321472685365301f, 0.12128480194602098f, 757 | -0.4321472685365301f, -0.7821684431180708f, 0.12128480194602098f, -0.4321472685365301f, 758 | 0.12128480194602098f, -0.7821684431180708f, -0.4321472685365301f, -0.4321472685365301f, 759 | -0.508629699630796f, -0.8586508742123365f, 0.044802370851755174f, 0.044802370851755174f, 760 | 0.044802370851755174f, -0.8586508742123365f, -0.508629699630796f, 0.044802370851755174f, 761 | 0.044802370851755174f, -0.8586508742123365f, 0.044802370851755174f, -0.508629699630796f, 762 | -0.03381941603233842f, -0.9982828964265062f, -0.03381941603233842f, -0.03381941603233842f, 763 | -0.37968289875261624f, -0.37968289875261624f, -0.753341017856078f, -0.37968289875261624f, 764 | -0.4321472685365301f, -0.4321472685365301f, -0.7821684431180708f, 0.12128480194602098f, 765 | -0.4321472685365301f, 0.12128480194602098f, -0.7821684431180708f, -0.4321472685365301f, 766 | 0.12128480194602098f, -0.4321472685365301f, -0.7821684431180708f, -0.4321472685365301f, 767 | -0.508629699630796f, 0.044802370851755174f, -0.8586508742123365f, 0.044802370851755174f, 768 | 0.044802370851755174f, -0.508629699630796f, -0.8586508742123365f, 0.044802370851755174f, 769 | 0.044802370851755174f, 0.044802370851755174f, -0.8586508742123365f, -0.508629699630796f, 770 | -0.03381941603233842f, -0.03381941603233842f, -0.9982828964265062f, -0.03381941603233842f, 771 | -0.37968289875261624f, -0.37968289875261624f, -0.37968289875261624f, -0.753341017856078f, 772 | -0.4321472685365301f, -0.4321472685365301f, 0.12128480194602098f, -0.7821684431180708f, 773 | -0.4321472685365301f, 0.12128480194602098f, -0.4321472685365301f, -0.7821684431180708f, 774 | 0.12128480194602098f, -0.4321472685365301f, -0.4321472685365301f, -0.7821684431180708f, 775 | -0.508629699630796f, 0.044802370851755174f, 0.044802370851755174f, -0.8586508742123365f, 776 | 0.044802370851755174f, -0.508629699630796f, 0.044802370851755174f, -0.8586508742123365f, 777 | 0.044802370851755174f, 0.044802370851755174f, -0.508629699630796f, -0.8586508742123365f, 778 | -0.03381941603233842f, -0.03381941603233842f, -0.03381941603233842f, -0.9982828964265062f, 779 | -0.3239847771997537f, -0.6740059517812944f, -0.3239847771997537f, 0.5794684678643381f, 780 | -0.4004672082940195f, -0.7504883828755602f, 0.15296486218853164f, 0.5029860367700724f, 781 | 0.15296486218853164f, -0.7504883828755602f, -0.4004672082940195f, 0.5029860367700724f, 782 | 0.08164729285680945f, -0.8828161875373585f, 0.08164729285680945f, 0.4553054119602712f, 783 | -0.08164729285680945f, -0.4553054119602712f, -0.08164729285680945f, 0.8828161875373585f, 784 | -0.15296486218853164f, -0.5029860367700724f, 0.4004672082940195f, 0.7504883828755602f, 785 | 0.4004672082940195f, -0.5029860367700724f, -0.15296486218853164f, 0.7504883828755602f, 786 | 0.3239847771997537f, -0.5794684678643381f, 0.3239847771997537f, 0.6740059517812944f, 787 | -0.3239847771997537f, -0.3239847771997537f, -0.6740059517812944f, 0.5794684678643381f, 788 | -0.4004672082940195f, 0.15296486218853164f, -0.7504883828755602f, 0.5029860367700724f, 789 | 0.15296486218853164f, -0.4004672082940195f, -0.7504883828755602f, 0.5029860367700724f, 790 | 0.08164729285680945f, 0.08164729285680945f, -0.8828161875373585f, 0.4553054119602712f, 791 | -0.08164729285680945f, -0.08164729285680945f, -0.4553054119602712f, 0.8828161875373585f, 792 | -0.15296486218853164f, 0.4004672082940195f, -0.5029860367700724f, 0.7504883828755602f, 793 | 0.4004672082940195f, -0.15296486218853164f, -0.5029860367700724f, 0.7504883828755602f, 794 | 0.3239847771997537f, 0.3239847771997537f, -0.5794684678643381f, 0.6740059517812944f, 795 | -0.3239847771997537f, -0.6740059517812944f, 0.5794684678643381f, -0.3239847771997537f, 796 | -0.4004672082940195f, -0.7504883828755602f, 0.5029860367700724f, 0.15296486218853164f, 797 | 0.15296486218853164f, -0.7504883828755602f, 0.5029860367700724f, -0.4004672082940195f, 798 | 0.08164729285680945f, -0.8828161875373585f, 0.4553054119602712f, 0.08164729285680945f, 799 | -0.08164729285680945f, -0.4553054119602712f, 0.8828161875373585f, -0.08164729285680945f, 800 | -0.15296486218853164f, -0.5029860367700724f, 0.7504883828755602f, 0.4004672082940195f, 801 | 0.4004672082940195f, -0.5029860367700724f, 0.7504883828755602f, -0.15296486218853164f, 802 | 0.3239847771997537f, -0.5794684678643381f, 0.6740059517812944f, 0.3239847771997537f, 803 | -0.3239847771997537f, -0.3239847771997537f, 0.5794684678643381f, -0.6740059517812944f, 804 | -0.4004672082940195f, 0.15296486218853164f, 0.5029860367700724f, -0.7504883828755602f, 805 | 0.15296486218853164f, -0.4004672082940195f, 0.5029860367700724f, -0.7504883828755602f, 806 | 0.08164729285680945f, 0.08164729285680945f, 0.4553054119602712f, -0.8828161875373585f, 807 | -0.08164729285680945f, -0.08164729285680945f, 0.8828161875373585f, -0.4553054119602712f, 808 | -0.15296486218853164f, 0.4004672082940195f, 0.7504883828755602f, -0.5029860367700724f, 809 | 0.4004672082940195f, -0.15296486218853164f, 0.7504883828755602f, -0.5029860367700724f, 810 | 0.3239847771997537f, 0.3239847771997537f, 0.6740059517812944f, -0.5794684678643381f, 811 | -0.3239847771997537f, 0.5794684678643381f, -0.6740059517812944f, -0.3239847771997537f, 812 | -0.4004672082940195f, 0.5029860367700724f, -0.7504883828755602f, 0.15296486218853164f, 813 | 0.15296486218853164f, 0.5029860367700724f, -0.7504883828755602f, -0.4004672082940195f, 814 | 0.08164729285680945f, 0.4553054119602712f, -0.8828161875373585f, 0.08164729285680945f, 815 | -0.08164729285680945f, 0.8828161875373585f, -0.4553054119602712f, -0.08164729285680945f, 816 | -0.15296486218853164f, 0.7504883828755602f, -0.5029860367700724f, 0.4004672082940195f, 817 | 0.4004672082940195f, 0.7504883828755602f, -0.5029860367700724f, -0.15296486218853164f, 818 | 0.3239847771997537f, 0.6740059517812944f, -0.5794684678643381f, 0.3239847771997537f, 819 | -0.3239847771997537f, 0.5794684678643381f, -0.3239847771997537f, -0.6740059517812944f, 820 | -0.4004672082940195f, 0.5029860367700724f, 0.15296486218853164f, -0.7504883828755602f, 821 | 0.15296486218853164f, 0.5029860367700724f, -0.4004672082940195f, -0.7504883828755602f, 822 | 0.08164729285680945f, 0.4553054119602712f, 0.08164729285680945f, -0.8828161875373585f, 823 | -0.08164729285680945f, 0.8828161875373585f, -0.08164729285680945f, -0.4553054119602712f, 824 | -0.15296486218853164f, 0.7504883828755602f, 0.4004672082940195f, -0.5029860367700724f, 825 | 0.4004672082940195f, 0.7504883828755602f, -0.15296486218853164f, -0.5029860367700724f, 826 | 0.3239847771997537f, 0.6740059517812944f, 0.3239847771997537f, -0.5794684678643381f, 827 | 0.5794684678643381f, -0.3239847771997537f, -0.6740059517812944f, -0.3239847771997537f, 828 | 0.5029860367700724f, -0.4004672082940195f, -0.7504883828755602f, 0.15296486218853164f, 829 | 0.5029860367700724f, 0.15296486218853164f, -0.7504883828755602f, -0.4004672082940195f, 830 | 0.4553054119602712f, 0.08164729285680945f, -0.8828161875373585f, 0.08164729285680945f, 831 | 0.8828161875373585f, -0.08164729285680945f, -0.4553054119602712f, -0.08164729285680945f, 832 | 0.7504883828755602f, -0.15296486218853164f, -0.5029860367700724f, 0.4004672082940195f, 833 | 0.7504883828755602f, 0.4004672082940195f, -0.5029860367700724f, -0.15296486218853164f, 834 | 0.6740059517812944f, 0.3239847771997537f, -0.5794684678643381f, 0.3239847771997537f, 835 | 0.5794684678643381f, -0.3239847771997537f, -0.3239847771997537f, -0.6740059517812944f, 836 | 0.5029860367700724f, -0.4004672082940195f, 0.15296486218853164f, -0.7504883828755602f, 837 | 0.5029860367700724f, 0.15296486218853164f, -0.4004672082940195f, -0.7504883828755602f, 838 | 0.4553054119602712f, 0.08164729285680945f, 0.08164729285680945f, -0.8828161875373585f, 839 | 0.8828161875373585f, -0.08164729285680945f, -0.08164729285680945f, -0.4553054119602712f, 840 | 0.7504883828755602f, -0.15296486218853164f, 0.4004672082940195f, -0.5029860367700724f, 841 | 0.7504883828755602f, 0.4004672082940195f, -0.15296486218853164f, -0.5029860367700724f, 842 | 0.6740059517812944f, 0.3239847771997537f, 0.3239847771997537f, -0.5794684678643381f, 843 | 0.03381941603233842f, 0.03381941603233842f, 0.03381941603233842f, 0.9982828964265062f, 844 | -0.044802370851755174f, -0.044802370851755174f, 0.508629699630796f, 0.8586508742123365f, 845 | -0.044802370851755174f, 0.508629699630796f, -0.044802370851755174f, 0.8586508742123365f, 846 | -0.12128480194602098f, 0.4321472685365301f, 0.4321472685365301f, 0.7821684431180708f, 847 | 0.508629699630796f, -0.044802370851755174f, -0.044802370851755174f, 0.8586508742123365f, 848 | 0.4321472685365301f, -0.12128480194602098f, 0.4321472685365301f, 0.7821684431180708f, 849 | 0.4321472685365301f, 0.4321472685365301f, -0.12128480194602098f, 0.7821684431180708f, 850 | 0.37968289875261624f, 0.37968289875261624f, 0.37968289875261624f, 0.753341017856078f, 851 | 0.03381941603233842f, 0.03381941603233842f, 0.9982828964265062f, 0.03381941603233842f, 852 | -0.044802370851755174f, 0.044802370851755174f, 0.8586508742123365f, 0.508629699630796f, 853 | -0.044802370851755174f, 0.508629699630796f, 0.8586508742123365f, -0.044802370851755174f, 854 | -0.12128480194602098f, 0.4321472685365301f, 0.7821684431180708f, 0.4321472685365301f, 855 | 0.508629699630796f, -0.044802370851755174f, 0.8586508742123365f, -0.044802370851755174f, 856 | 0.4321472685365301f, -0.12128480194602098f, 0.7821684431180708f, 0.4321472685365301f, 857 | 0.4321472685365301f, 0.4321472685365301f, 0.7821684431180708f, -0.12128480194602098f, 858 | 0.37968289875261624f, 0.37968289875261624f, 0.753341017856078f, 0.37968289875261624f, 859 | 0.03381941603233842f, 0.9982828964265062f, 0.03381941603233842f, 0.03381941603233842f, 860 | -0.044802370851755174f, 0.8586508742123365f, -0.044802370851755174f, 0.508629699630796f, 861 | -0.044802370851755174f, 0.8586508742123365f, 0.508629699630796f, -0.044802370851755174f, 862 | -0.12128480194602098f, 0.7821684431180708f, 0.4321472685365301f, 0.4321472685365301f, 863 | 0.508629699630796f, 0.8586508742123365f, -0.044802370851755174f, -0.044802370851755174f, 864 | 0.4321472685365301f, 0.7821684431180708f, -0.12128480194602098f, 0.4321472685365301f, 865 | 0.4321472685365301f, 0.7821684431180708f, 0.4321472685365301f, -0.12128480194602098f, 866 | 0.37968289875261624f, 0.753341017856078f, 0.37968289875261624f, 0.37968289875261624f, 867 | 0.9982828964265062f, 0.03381941603233842f, 0.03381941603233842f, 0.03381941603233842f, 868 | 0.8586508742123365f, -0.044802370851755174f, -0.044802370851755174f, 0.508629699630796f, 869 | 0.8586508742123365f, -0.044802370851755174f, 0.508629699630796f, -0.044802370851755174f, 870 | 0.7821684431180708f, -0.12128480194602098f, 0.4321472685365301f, 0.4321472685365301f, 871 | 0.8586508742123365f, 0.508629699630796f, -0.044802370851755174f, -0.044802370851755174f, 872 | 0.7821684431180708f, 0.4321472685365301f, -0.12128480194602098f, 0.4321472685365301f, 873 | 0.7821684431180708f, 0.4321472685365301f, 0.4321472685365301f, -0.12128480194602098f, 874 | 0.753341017856078f, 0.37968289875261624f, 0.37968289875261624f, 0.37968289875261624f, 875 | }; 876 | for (int i = 0; i < grad4.Length; i++) 877 | { 878 | grad4[i] = (float)(grad4[i] / NORMALIZER_4D); 879 | } 880 | for (int i = 0, j = 0; i < GRADIENTS_4D.Length; i++, j++) 881 | { 882 | if (j == grad4.Length) j = 0; 883 | GRADIENTS_4D[i] = grad4[j]; 884 | } 885 | 886 | int[][] lookup4DVertexCodes = { 887 | new int[] { 0x15, 0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 888 | new int[] { 0x15, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA }, 889 | new int[] { 0x01, 0x05, 0x11, 0x15, 0x41, 0x45, 0x51, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA }, 890 | new int[] { 0x01, 0x15, 0x16, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 891 | new int[] { 0x15, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA }, 892 | new int[] { 0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xAA }, 893 | new int[] { 0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xAA }, 894 | new int[] { 0x05, 0x15, 0x16, 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xAA, 0xAB }, 895 | new int[] { 0x04, 0x05, 0x14, 0x15, 0x44, 0x45, 0x54, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA }, 896 | new int[] { 0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xAA }, 897 | new int[] { 0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0xAA }, 898 | new int[] { 0x05, 0x15, 0x16, 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x5B, 0x6A, 0x9A, 0xAA, 0xAB }, 899 | new int[] { 0x04, 0x15, 0x19, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 900 | new int[] { 0x05, 0x15, 0x19, 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xAA, 0xAE }, 901 | new int[] { 0x05, 0x15, 0x19, 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x5E, 0x6A, 0x9A, 0xAA, 0xAE }, 902 | new int[] { 0x05, 0x15, 0x1A, 0x45, 0x4A, 0x55, 0x56, 0x59, 0x5A, 0x5B, 0x5E, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF }, 903 | new int[] { 0x15, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA }, 904 | new int[] { 0x11, 0x15, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xAA }, 905 | new int[] { 0x11, 0x15, 0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xAA }, 906 | new int[] { 0x11, 0x15, 0x16, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xAA, 0xAB }, 907 | new int[] { 0x14, 0x15, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA9, 0xAA }, 908 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x9A, 0xA6, 0xA9, 0xAA }, 909 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 910 | new int[] { 0x15, 0x16, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x6B, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 911 | new int[] { 0x14, 0x15, 0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA }, 912 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 913 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xAA }, 914 | new int[] { 0x15, 0x16, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x6B, 0x9A, 0xAA, 0xAB }, 915 | new int[] { 0x14, 0x15, 0x19, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0xAE }, 916 | new int[] { 0x15, 0x19, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x6E, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 917 | new int[] { 0x15, 0x19, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x6E, 0x9A, 0xAA, 0xAE }, 918 | new int[] { 0x15, 0x1A, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x6B, 0x6E, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF }, 919 | new int[] { 0x10, 0x11, 0x14, 0x15, 0x50, 0x51, 0x54, 0x55, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA }, 920 | new int[] { 0x11, 0x15, 0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xAA }, 921 | new int[] { 0x11, 0x15, 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0xA6, 0xAA }, 922 | new int[] { 0x11, 0x15, 0x16, 0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x67, 0x6A, 0xA6, 0xAA, 0xAB }, 923 | new int[] { 0x14, 0x15, 0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA9, 0xAA }, 924 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 925 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA6, 0xAA }, 926 | new int[] { 0x15, 0x16, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x6B, 0xA6, 0xAA, 0xAB }, 927 | new int[] { 0x14, 0x15, 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0xA9, 0xAA }, 928 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA9, 0xAA }, 929 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xAA }, 930 | new int[] { 0x15, 0x16, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0xAA, 0xAB }, 931 | new int[] { 0x14, 0x15, 0x19, 0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x6A, 0x6D, 0xA9, 0xAA, 0xAE }, 932 | new int[] { 0x15, 0x19, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x6E, 0xA9, 0xAA, 0xAE }, 933 | new int[] { 0x15, 0x19, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6E, 0xAA, 0xAE }, 934 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x6B, 0x6E, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF }, 935 | new int[] { 0x10, 0x15, 0x25, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 936 | new int[] { 0x11, 0x15, 0x25, 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xAA, 0xBA }, 937 | new int[] { 0x11, 0x15, 0x25, 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x6A, 0x76, 0xA6, 0xAA, 0xBA }, 938 | new int[] { 0x11, 0x15, 0x26, 0x51, 0x55, 0x56, 0x62, 0x65, 0x66, 0x67, 0x6A, 0x76, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB }, 939 | new int[] { 0x14, 0x15, 0x25, 0x54, 0x55, 0x59, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0xBA }, 940 | new int[] { 0x15, 0x25, 0x55, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 941 | new int[] { 0x15, 0x25, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA6, 0xAA, 0xBA }, 942 | new int[] { 0x15, 0x26, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x6B, 0x7A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB }, 943 | new int[] { 0x14, 0x15, 0x25, 0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x6A, 0x79, 0xA9, 0xAA, 0xBA }, 944 | new int[] { 0x15, 0x25, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA9, 0xAA, 0xBA }, 945 | new int[] { 0x15, 0x25, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xAA, 0xBA }, 946 | new int[] { 0x15, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0x7A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB }, 947 | new int[] { 0x14, 0x15, 0x29, 0x54, 0x55, 0x59, 0x65, 0x68, 0x69, 0x6A, 0x6D, 0x79, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE }, 948 | new int[] { 0x15, 0x29, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x6E, 0x7A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE }, 949 | new int[] { 0x15, 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6E, 0x7A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE }, 950 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0x6E, 0x7A, 0xAA, 0xAB, 0xAE, 0xBA, 0xBF }, 951 | new int[] { 0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 952 | new int[] { 0x41, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA }, 953 | new int[] { 0x41, 0x45, 0x51, 0x55, 0x56, 0x5A, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xAA }, 954 | new int[] { 0x41, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 955 | new int[] { 0x44, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA }, 956 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA }, 957 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB }, 958 | new int[] { 0x45, 0x46, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB }, 959 | new int[] { 0x44, 0x45, 0x54, 0x55, 0x59, 0x5A, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA }, 960 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 961 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xAA }, 962 | new int[] { 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x9A, 0x9B, 0xAA, 0xAB }, 963 | new int[] { 0x44, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 964 | new int[] { 0x45, 0x49, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE }, 965 | new int[] { 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x99, 0x9A, 0x9E, 0xAA, 0xAE }, 966 | new int[] { 0x45, 0x4A, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xAF }, 967 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA }, 968 | new int[] { 0x51, 0x55, 0x56, 0x59, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 969 | new int[] { 0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB }, 970 | new int[] { 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB }, 971 | new int[] { 0x54, 0x55, 0x56, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 972 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 973 | new int[] { 0x15, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 974 | new int[] { 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 975 | new int[] { 0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE }, 976 | new int[] { 0x15, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 977 | new int[] { 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE }, 978 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 979 | new int[] { 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE }, 980 | new int[] { 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 981 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 982 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF }, 983 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x65, 0x66, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA }, 984 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 985 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xAA }, 986 | new int[] { 0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xA7, 0xAA, 0xAB }, 987 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 988 | new int[] { 0x15, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 989 | new int[] { 0x15, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA }, 990 | new int[] { 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 991 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA9, 0xAA }, 992 | new int[] { 0x15, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA }, 993 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xA6, 0xA9, 0xAA }, 994 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 995 | new int[] { 0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0xAD, 0xAE }, 996 | new int[] { 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 997 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 998 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF }, 999 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x66, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1000 | new int[] { 0x51, 0x55, 0x61, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA }, 1001 | new int[] { 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x6A, 0xA5, 0xA6, 0xAA, 0xB6, 0xBA }, 1002 | new int[] { 0x51, 0x55, 0x56, 0x62, 0x65, 0x66, 0x6A, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xBB }, 1003 | new int[] { 0x54, 0x55, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA }, 1004 | new int[] { 0x55, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1005 | new int[] { 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1006 | new int[] { 0x55, 0x56, 0x65, 0x66, 0x6A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB }, 1007 | new int[] { 0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0xB9, 0xBA }, 1008 | new int[] { 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1009 | new int[] { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1010 | new int[] { 0x15, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB }, 1011 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x68, 0x69, 0x6A, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xBE }, 1012 | new int[] { 0x55, 0x59, 0x65, 0x69, 0x6A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE }, 1013 | new int[] { 0x15, 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE }, 1014 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xAA, 0xAB, 0xAE, 0xBA, 0xBF }, 1015 | new int[] { 0x40, 0x41, 0x44, 0x45, 0x50, 0x51, 0x54, 0x55, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 1016 | new int[] { 0x41, 0x45, 0x51, 0x55, 0x56, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA }, 1017 | new int[] { 0x41, 0x45, 0x51, 0x55, 0x56, 0x95, 0x96, 0x9A, 0xA6, 0xAA }, 1018 | new int[] { 0x41, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x95, 0x96, 0x97, 0x9A, 0xA6, 0xAA, 0xAB }, 1019 | new int[] { 0x44, 0x45, 0x54, 0x55, 0x59, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA }, 1020 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1021 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA }, 1022 | new int[] { 0x45, 0x46, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB }, 1023 | new int[] { 0x44, 0x45, 0x54, 0x55, 0x59, 0x95, 0x99, 0x9A, 0xA9, 0xAA }, 1024 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA }, 1025 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xAA }, 1026 | new int[] { 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0xAA, 0xAB }, 1027 | new int[] { 0x44, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x95, 0x99, 0x9A, 0x9D, 0xA9, 0xAA, 0xAE }, 1028 | new int[] { 0x45, 0x49, 0x55, 0x59, 0x5A, 0x95, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE }, 1029 | new int[] { 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9E, 0xAA, 0xAE }, 1030 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x99, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xAF }, 1031 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA }, 1032 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1033 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA }, 1034 | new int[] { 0x51, 0x52, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB }, 1035 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1036 | new int[] { 0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1037 | new int[] { 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xEA }, 1038 | new int[] { 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB }, 1039 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA }, 1040 | new int[] { 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xEA }, 1041 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA }, 1042 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB }, 1043 | new int[] { 0x54, 0x55, 0x58, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE }, 1044 | new int[] { 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 1045 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE }, 1046 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x99, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF }, 1047 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA }, 1048 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA }, 1049 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA }, 1050 | new int[] { 0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB }, 1051 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA }, 1052 | new int[] { 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA }, 1053 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 1054 | new int[] { 0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB }, 1055 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA }, 1056 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 1057 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA }, 1058 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB }, 1059 | new int[] { 0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE }, 1060 | new int[] { 0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE }, 1061 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAE }, 1062 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xAF }, 1063 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB5, 0xBA }, 1064 | new int[] { 0x51, 0x55, 0x61, 0x65, 0x66, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA }, 1065 | new int[] { 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xB6, 0xBA }, 1066 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xBB }, 1067 | new int[] { 0x54, 0x55, 0x64, 0x65, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA }, 1068 | new int[] { 0x55, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1069 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1070 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA5, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB }, 1071 | new int[] { 0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xB9, 0xBA }, 1072 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1073 | new int[] { 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA }, 1074 | new int[] { 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0xBB }, 1075 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xBE }, 1076 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA5, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE }, 1077 | new int[] { 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE }, 1078 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xBA }, 1079 | new int[] { 0x40, 0x45, 0x51, 0x54, 0x55, 0x85, 0x91, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1080 | new int[] { 0x41, 0x45, 0x51, 0x55, 0x56, 0x85, 0x91, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA, 0xEA }, 1081 | new int[] { 0x41, 0x45, 0x51, 0x55, 0x56, 0x85, 0x91, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xD6, 0xEA }, 1082 | new int[] { 0x41, 0x45, 0x51, 0x55, 0x56, 0x86, 0x92, 0x95, 0x96, 0x97, 0x9A, 0xA6, 0xAA, 0xAB, 0xD6, 0xEA, 0xEB }, 1083 | new int[] { 0x44, 0x45, 0x54, 0x55, 0x59, 0x85, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xEA }, 1084 | new int[] { 0x45, 0x55, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xDA, 0xEA }, 1085 | new int[] { 0x45, 0x55, 0x56, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xDA, 0xEA }, 1086 | new int[] { 0x45, 0x55, 0x56, 0x86, 0x95, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0xDA, 0xEA, 0xEB }, 1087 | new int[] { 0x44, 0x45, 0x54, 0x55, 0x59, 0x85, 0x94, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xD9, 0xEA }, 1088 | new int[] { 0x45, 0x55, 0x59, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xDA, 0xEA }, 1089 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0xDA, 0xEA }, 1090 | new int[] { 0x45, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0xDA, 0xEA, 0xEB }, 1091 | new int[] { 0x44, 0x45, 0x54, 0x55, 0x59, 0x89, 0x95, 0x98, 0x99, 0x9A, 0x9D, 0xA9, 0xAA, 0xAE, 0xD9, 0xEA, 0xEE }, 1092 | new int[] { 0x45, 0x55, 0x59, 0x89, 0x95, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0xDA, 0xEA, 0xEE }, 1093 | new int[] { 0x45, 0x55, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0xDA, 0xEA, 0xEE }, 1094 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xDA, 0xEA, 0xEF }, 1095 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x65, 0x91, 0x94, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1096 | new int[] { 0x51, 0x55, 0x91, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xE6, 0xEA }, 1097 | new int[] { 0x51, 0x55, 0x56, 0x91, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xE6, 0xEA }, 1098 | new int[] { 0x51, 0x55, 0x56, 0x92, 0x95, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB, 0xE6, 0xEA, 0xEB }, 1099 | new int[] { 0x54, 0x55, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xE9, 0xEA }, 1100 | new int[] { 0x55, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1101 | new int[] { 0x55, 0x56, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1102 | new int[] { 0x55, 0x56, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB }, 1103 | new int[] { 0x54, 0x55, 0x59, 0x94, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xE9, 0xEA }, 1104 | new int[] { 0x55, 0x59, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1105 | new int[] { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1106 | new int[] { 0x45, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB }, 1107 | new int[] { 0x54, 0x55, 0x59, 0x95, 0x98, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE, 0xE9, 0xEA, 0xEE }, 1108 | new int[] { 0x55, 0x59, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE }, 1109 | new int[] { 0x45, 0x55, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE }, 1110 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0xAB, 0xAE, 0xEA, 0xEF }, 1111 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x65, 0x91, 0x94, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xE5, 0xEA }, 1112 | new int[] { 0x51, 0x55, 0x65, 0x91, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xE6, 0xEA }, 1113 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x91, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xE6, 0xEA }, 1114 | new int[] { 0x51, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xE6, 0xEA, 0xEB }, 1115 | new int[] { 0x54, 0x55, 0x65, 0x94, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xE9, 0xEA }, 1116 | new int[] { 0x55, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1117 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1118 | new int[] { 0x51, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB }, 1119 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x94, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xE9, 0xEA }, 1120 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1121 | new int[] { 0x55, 0x56, 0x59, 0x65, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA }, 1122 | new int[] { 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xEA, 0xEB }, 1123 | new int[] { 0x54, 0x55, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xE9, 0xEA, 0xEE }, 1124 | new int[] { 0x54, 0x55, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE }, 1125 | new int[] { 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE }, 1126 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xEA }, 1127 | new int[] { 0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0xA1, 0xA4, 0xA5, 0xA6, 0xA9, 0xAA, 0xB5, 0xBA, 0xE5, 0xEA, 0xFA }, 1128 | new int[] { 0x51, 0x55, 0x65, 0x95, 0xA1, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0xE6, 0xEA, 0xFA }, 1129 | new int[] { 0x51, 0x55, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0xE6, 0xEA, 0xFA }, 1130 | new int[] { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xE6, 0xEA, 0xFB }, 1131 | new int[] { 0x54, 0x55, 0x65, 0x95, 0xA4, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0xE9, 0xEA, 0xFA }, 1132 | new int[] { 0x55, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA }, 1133 | new int[] { 0x51, 0x55, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA }, 1134 | new int[] { 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xAB, 0xBA, 0xEA, 0xFB }, 1135 | new int[] { 0x54, 0x55, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0xE9, 0xEA, 0xFA }, 1136 | new int[] { 0x54, 0x55, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA }, 1137 | new int[] { 0x55, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA }, 1138 | new int[] { 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0xEA }, 1139 | new int[] { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xE9, 0xEA, 0xFE }, 1140 | new int[] { 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAE, 0xBA, 0xEA, 0xFE }, 1141 | new int[] { 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0xEA }, 1142 | new int[] { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xBA, 0xEA }, 1143 | }; 1144 | LatticeVertex4D[] latticeVerticesByCode = new LatticeVertex4D[256]; 1145 | for (int i = 0; i < 256; i++) 1146 | { 1147 | int cx = ((i >> 0) & 3) - 1; 1148 | int cy = ((i >> 2) & 3) - 1; 1149 | int cz = ((i >> 4) & 3) - 1; 1150 | int cw = ((i >> 6) & 3) - 1; 1151 | latticeVerticesByCode[i] = new LatticeVertex4D(cx, cy, cz, cw); 1152 | } 1153 | int nLatticeVerticesTotal = 0; 1154 | for (int i = 0; i < 256; i++) 1155 | { 1156 | nLatticeVerticesTotal += lookup4DVertexCodes[i].Length; 1157 | } 1158 | LOOKUP_4D_A = new (short SecondaryIndexStart, short SecondaryIndexStop)[256]; 1159 | LOOKUP_4D_B = new LatticeVertex4D[nLatticeVerticesTotal]; 1160 | for (int i = 0, j = 0; i < 256; i++) 1161 | { 1162 | LOOKUP_4D_A[i] = ((short)j, (short)(j + lookup4DVertexCodes[i].Length)); 1163 | for (int k = 0; k < lookup4DVertexCodes[i].Length; k++) 1164 | { 1165 | LOOKUP_4D_B[j++] = latticeVerticesByCode[lookup4DVertexCodes[i][k]]; 1166 | } 1167 | } 1168 | } 1169 | 1170 | private class LatticeVertex4D 1171 | { 1172 | public readonly float dx, dy, dz, dw; 1173 | public readonly long xsvp, ysvp, zsvp, wsvp; 1174 | public LatticeVertex4D(int xsv, int ysv, int zsv, int wsv) 1175 | { 1176 | this.xsvp = xsv * PRIME_X; this.ysvp = ysv * PRIME_Y; 1177 | this.zsvp = zsv * PRIME_Z; this.wsvp = wsv * PRIME_W; 1178 | float ssv = (xsv + ysv + zsv + wsv) * UNSKEW_4D; 1179 | this.dx = -xsv - ssv; 1180 | this.dy = -ysv - ssv; 1181 | this.dz = -zsv - ssv; 1182 | this.dw = -wsv - ssv; 1183 | } 1184 | } 1185 | } 1186 | -------------------------------------------------------------------------------- /source/Assets/Scripts/OpenSimplex2S.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a563bb8779b9dbd18b5ba4bc16b95dd8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /source/Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.collab-proxy": "1.15.15", 4 | "com.unity.ide.rider": "3.0.13", 5 | "com.unity.ide.visualstudio": "2.0.14", 6 | "com.unity.ide.vscode": "1.2.5", 7 | "com.unity.test-framework": "1.1.31", 8 | "com.unity.textmeshpro": "3.0.6", 9 | "com.unity.timeline": "1.6.4", 10 | "com.unity.toolchain.linux-x86_64": "1.0.0", 11 | "com.unity.ugui": "1.0.0", 12 | "com.unity.modules.ai": "1.0.0", 13 | "com.unity.modules.androidjni": "1.0.0", 14 | "com.unity.modules.animation": "1.0.0", 15 | "com.unity.modules.assetbundle": "1.0.0", 16 | "com.unity.modules.audio": "1.0.0", 17 | "com.unity.modules.cloth": "1.0.0", 18 | "com.unity.modules.director": "1.0.0", 19 | "com.unity.modules.imageconversion": "1.0.0", 20 | "com.unity.modules.imgui": "1.0.0", 21 | "com.unity.modules.jsonserialize": "1.0.0", 22 | "com.unity.modules.particlesystem": "1.0.0", 23 | "com.unity.modules.physics": "1.0.0", 24 | "com.unity.modules.physics2d": "1.0.0", 25 | "com.unity.modules.screencapture": "1.0.0", 26 | "com.unity.modules.terrain": "1.0.0", 27 | "com.unity.modules.terrainphysics": "1.0.0", 28 | "com.unity.modules.tilemap": "1.0.0", 29 | "com.unity.modules.ui": "1.0.0", 30 | "com.unity.modules.uielements": "1.0.0", 31 | "com.unity.modules.umbra": "1.0.0", 32 | "com.unity.modules.unityanalytics": "1.0.0", 33 | "com.unity.modules.unitywebrequest": "1.0.0", 34 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 35 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 36 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 37 | "com.unity.modules.unitywebrequestwww": "1.0.0", 38 | "com.unity.modules.vehicles": "1.0.0", 39 | "com.unity.modules.video": "1.0.0", 40 | "com.unity.modules.vr": "1.0.0", 41 | "com.unity.modules.wind": "1.0.0", 42 | "com.unity.modules.xr": "1.0.0" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /source/Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.collab-proxy": { 4 | "version": "1.15.15", 5 | "depth": 0, 6 | "source": "registry", 7 | "dependencies": { 8 | "com.unity.services.core": "1.0.1" 9 | }, 10 | "url": "https://packages.unity.com" 11 | }, 12 | "com.unity.ext.nunit": { 13 | "version": "1.0.6", 14 | "depth": 1, 15 | "source": "registry", 16 | "dependencies": {}, 17 | "url": "https://packages.unity.com" 18 | }, 19 | "com.unity.ide.rider": { 20 | "version": "3.0.13", 21 | "depth": 0, 22 | "source": "registry", 23 | "dependencies": { 24 | "com.unity.ext.nunit": "1.0.6" 25 | }, 26 | "url": "https://packages.unity.com" 27 | }, 28 | "com.unity.ide.visualstudio": { 29 | "version": "2.0.14", 30 | "depth": 0, 31 | "source": "registry", 32 | "dependencies": { 33 | "com.unity.test-framework": "1.1.9" 34 | }, 35 | "url": "https://packages.unity.com" 36 | }, 37 | "com.unity.ide.vscode": { 38 | "version": "1.2.5", 39 | "depth": 0, 40 | "source": "registry", 41 | "dependencies": {}, 42 | "url": "https://packages.unity.com" 43 | }, 44 | "com.unity.services.core": { 45 | "version": "1.0.1", 46 | "depth": 1, 47 | "source": "registry", 48 | "dependencies": { 49 | "com.unity.modules.unitywebrequest": "1.0.0" 50 | }, 51 | "url": "https://packages.unity.com" 52 | }, 53 | "com.unity.sysroot": { 54 | "version": "1.0.0", 55 | "depth": 1, 56 | "source": "registry", 57 | "dependencies": {}, 58 | "url": "https://packages.unity.com" 59 | }, 60 | "com.unity.sysroot.linux-x86_64": { 61 | "version": "1.0.0", 62 | "depth": 1, 63 | "source": "registry", 64 | "dependencies": { 65 | "com.unity.sysroot": "1.0.0" 66 | }, 67 | "url": "https://packages.unity.com" 68 | }, 69 | "com.unity.test-framework": { 70 | "version": "1.1.31", 71 | "depth": 0, 72 | "source": "registry", 73 | "dependencies": { 74 | "com.unity.ext.nunit": "1.0.6", 75 | "com.unity.modules.imgui": "1.0.0", 76 | "com.unity.modules.jsonserialize": "1.0.0" 77 | }, 78 | "url": "https://packages.unity.com" 79 | }, 80 | "com.unity.textmeshpro": { 81 | "version": "3.0.6", 82 | "depth": 0, 83 | "source": "registry", 84 | "dependencies": { 85 | "com.unity.ugui": "1.0.0" 86 | }, 87 | "url": "https://packages.unity.com" 88 | }, 89 | "com.unity.timeline": { 90 | "version": "1.6.4", 91 | "depth": 0, 92 | "source": "registry", 93 | "dependencies": { 94 | "com.unity.modules.director": "1.0.0", 95 | "com.unity.modules.animation": "1.0.0", 96 | "com.unity.modules.audio": "1.0.0", 97 | "com.unity.modules.particlesystem": "1.0.0" 98 | }, 99 | "url": "https://packages.unity.com" 100 | }, 101 | "com.unity.toolchain.linux-x86_64": { 102 | "version": "1.0.0", 103 | "depth": 0, 104 | "source": "registry", 105 | "dependencies": { 106 | "com.unity.sysroot": "1.0.0", 107 | "com.unity.sysroot.linux-x86_64": "1.0.0" 108 | }, 109 | "url": "https://packages.unity.com" 110 | }, 111 | "com.unity.ugui": { 112 | "version": "1.0.0", 113 | "depth": 0, 114 | "source": "builtin", 115 | "dependencies": { 116 | "com.unity.modules.ui": "1.0.0", 117 | "com.unity.modules.imgui": "1.0.0" 118 | } 119 | }, 120 | "com.unity.modules.ai": { 121 | "version": "1.0.0", 122 | "depth": 0, 123 | "source": "builtin", 124 | "dependencies": {} 125 | }, 126 | "com.unity.modules.androidjni": { 127 | "version": "1.0.0", 128 | "depth": 0, 129 | "source": "builtin", 130 | "dependencies": {} 131 | }, 132 | "com.unity.modules.animation": { 133 | "version": "1.0.0", 134 | "depth": 0, 135 | "source": "builtin", 136 | "dependencies": {} 137 | }, 138 | "com.unity.modules.assetbundle": { 139 | "version": "1.0.0", 140 | "depth": 0, 141 | "source": "builtin", 142 | "dependencies": {} 143 | }, 144 | "com.unity.modules.audio": { 145 | "version": "1.0.0", 146 | "depth": 0, 147 | "source": "builtin", 148 | "dependencies": {} 149 | }, 150 | "com.unity.modules.cloth": { 151 | "version": "1.0.0", 152 | "depth": 0, 153 | "source": "builtin", 154 | "dependencies": { 155 | "com.unity.modules.physics": "1.0.0" 156 | } 157 | }, 158 | "com.unity.modules.director": { 159 | "version": "1.0.0", 160 | "depth": 0, 161 | "source": "builtin", 162 | "dependencies": { 163 | "com.unity.modules.audio": "1.0.0", 164 | "com.unity.modules.animation": "1.0.0" 165 | } 166 | }, 167 | "com.unity.modules.imageconversion": { 168 | "version": "1.0.0", 169 | "depth": 0, 170 | "source": "builtin", 171 | "dependencies": {} 172 | }, 173 | "com.unity.modules.imgui": { 174 | "version": "1.0.0", 175 | "depth": 0, 176 | "source": "builtin", 177 | "dependencies": {} 178 | }, 179 | "com.unity.modules.jsonserialize": { 180 | "version": "1.0.0", 181 | "depth": 0, 182 | "source": "builtin", 183 | "dependencies": {} 184 | }, 185 | "com.unity.modules.particlesystem": { 186 | "version": "1.0.0", 187 | "depth": 0, 188 | "source": "builtin", 189 | "dependencies": {} 190 | }, 191 | "com.unity.modules.physics": { 192 | "version": "1.0.0", 193 | "depth": 0, 194 | "source": "builtin", 195 | "dependencies": {} 196 | }, 197 | "com.unity.modules.physics2d": { 198 | "version": "1.0.0", 199 | "depth": 0, 200 | "source": "builtin", 201 | "dependencies": {} 202 | }, 203 | "com.unity.modules.screencapture": { 204 | "version": "1.0.0", 205 | "depth": 0, 206 | "source": "builtin", 207 | "dependencies": { 208 | "com.unity.modules.imageconversion": "1.0.0" 209 | } 210 | }, 211 | "com.unity.modules.subsystems": { 212 | "version": "1.0.0", 213 | "depth": 1, 214 | "source": "builtin", 215 | "dependencies": { 216 | "com.unity.modules.jsonserialize": "1.0.0" 217 | } 218 | }, 219 | "com.unity.modules.terrain": { 220 | "version": "1.0.0", 221 | "depth": 0, 222 | "source": "builtin", 223 | "dependencies": {} 224 | }, 225 | "com.unity.modules.terrainphysics": { 226 | "version": "1.0.0", 227 | "depth": 0, 228 | "source": "builtin", 229 | "dependencies": { 230 | "com.unity.modules.physics": "1.0.0", 231 | "com.unity.modules.terrain": "1.0.0" 232 | } 233 | }, 234 | "com.unity.modules.tilemap": { 235 | "version": "1.0.0", 236 | "depth": 0, 237 | "source": "builtin", 238 | "dependencies": { 239 | "com.unity.modules.physics2d": "1.0.0" 240 | } 241 | }, 242 | "com.unity.modules.ui": { 243 | "version": "1.0.0", 244 | "depth": 0, 245 | "source": "builtin", 246 | "dependencies": {} 247 | }, 248 | "com.unity.modules.uielements": { 249 | "version": "1.0.0", 250 | "depth": 0, 251 | "source": "builtin", 252 | "dependencies": { 253 | "com.unity.modules.ui": "1.0.0", 254 | "com.unity.modules.imgui": "1.0.0", 255 | "com.unity.modules.jsonserialize": "1.0.0", 256 | "com.unity.modules.uielementsnative": "1.0.0" 257 | } 258 | }, 259 | "com.unity.modules.uielementsnative": { 260 | "version": "1.0.0", 261 | "depth": 1, 262 | "source": "builtin", 263 | "dependencies": { 264 | "com.unity.modules.ui": "1.0.0", 265 | "com.unity.modules.imgui": "1.0.0", 266 | "com.unity.modules.jsonserialize": "1.0.0" 267 | } 268 | }, 269 | "com.unity.modules.umbra": { 270 | "version": "1.0.0", 271 | "depth": 0, 272 | "source": "builtin", 273 | "dependencies": {} 274 | }, 275 | "com.unity.modules.unityanalytics": { 276 | "version": "1.0.0", 277 | "depth": 0, 278 | "source": "builtin", 279 | "dependencies": { 280 | "com.unity.modules.unitywebrequest": "1.0.0", 281 | "com.unity.modules.jsonserialize": "1.0.0" 282 | } 283 | }, 284 | "com.unity.modules.unitywebrequest": { 285 | "version": "1.0.0", 286 | "depth": 0, 287 | "source": "builtin", 288 | "dependencies": {} 289 | }, 290 | "com.unity.modules.unitywebrequestassetbundle": { 291 | "version": "1.0.0", 292 | "depth": 0, 293 | "source": "builtin", 294 | "dependencies": { 295 | "com.unity.modules.assetbundle": "1.0.0", 296 | "com.unity.modules.unitywebrequest": "1.0.0" 297 | } 298 | }, 299 | "com.unity.modules.unitywebrequestaudio": { 300 | "version": "1.0.0", 301 | "depth": 0, 302 | "source": "builtin", 303 | "dependencies": { 304 | "com.unity.modules.unitywebrequest": "1.0.0", 305 | "com.unity.modules.audio": "1.0.0" 306 | } 307 | }, 308 | "com.unity.modules.unitywebrequesttexture": { 309 | "version": "1.0.0", 310 | "depth": 0, 311 | "source": "builtin", 312 | "dependencies": { 313 | "com.unity.modules.unitywebrequest": "1.0.0", 314 | "com.unity.modules.imageconversion": "1.0.0" 315 | } 316 | }, 317 | "com.unity.modules.unitywebrequestwww": { 318 | "version": "1.0.0", 319 | "depth": 0, 320 | "source": "builtin", 321 | "dependencies": { 322 | "com.unity.modules.unitywebrequest": "1.0.0", 323 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 324 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 325 | "com.unity.modules.audio": "1.0.0", 326 | "com.unity.modules.assetbundle": "1.0.0", 327 | "com.unity.modules.imageconversion": "1.0.0" 328 | } 329 | }, 330 | "com.unity.modules.vehicles": { 331 | "version": "1.0.0", 332 | "depth": 0, 333 | "source": "builtin", 334 | "dependencies": { 335 | "com.unity.modules.physics": "1.0.0" 336 | } 337 | }, 338 | "com.unity.modules.video": { 339 | "version": "1.0.0", 340 | "depth": 0, 341 | "source": "builtin", 342 | "dependencies": { 343 | "com.unity.modules.audio": "1.0.0", 344 | "com.unity.modules.ui": "1.0.0", 345 | "com.unity.modules.unitywebrequest": "1.0.0" 346 | } 347 | }, 348 | "com.unity.modules.vr": { 349 | "version": "1.0.0", 350 | "depth": 0, 351 | "source": "builtin", 352 | "dependencies": { 353 | "com.unity.modules.jsonserialize": "1.0.0", 354 | "com.unity.modules.physics": "1.0.0", 355 | "com.unity.modules.xr": "1.0.0" 356 | } 357 | }, 358 | "com.unity.modules.wind": { 359 | "version": "1.0.0", 360 | "depth": 0, 361 | "source": "builtin", 362 | "dependencies": {} 363 | }, 364 | "com.unity.modules.xr": { 365 | "version": "1.0.0", 366 | "depth": 0, 367 | "source": "builtin", 368 | "dependencies": { 369 | "com.unity.modules.physics": "1.0.0", 370 | "com.unity.modules.jsonserialize": "1.0.0", 371 | "com.unity.modules.subsystems": "1.0.0" 372 | } 373 | } 374 | } 375 | } 376 | -------------------------------------------------------------------------------- /source/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /source/ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /source/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | m_FrictionType: 0 32 | m_EnableEnhancedDeterminism: 0 33 | m_EnableUnifiedHeightmaps: 1 34 | m_DefaultMaxAngluarSpeed: 7 35 | -------------------------------------------------------------------------------- /source/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | m_configObjects: {} 9 | -------------------------------------------------------------------------------- /source/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_SerializeInlineMappingsOnOneLine: 1 -------------------------------------------------------------------------------- /source/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | m_LogWhenShaderIsCompiled: 0 63 | m_AllowEnlightenSupportForUpgradedProject: 0 64 | -------------------------------------------------------------------------------- /source/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /source/ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /source/ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /source/ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreviewPackages: 0 16 | m_EnablePackageDependencies: 0 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | oneTimeWarningShown: 0 20 | m_Registries: 21 | - m_Id: main 22 | m_Name: 23 | m_Url: https://packages.unity.com 24 | m_Scopes: [] 25 | m_IsDefault: 1 26 | m_Capabilities: 7 27 | m_UserSelectedRegistryName: 28 | m_UserAddingNewScopedRegistry: 0 29 | m_RegistryInfoDraft: 30 | m_ErrorMessage: 31 | m_Original: 32 | m_Id: 33 | m_Name: 34 | m_Url: 35 | m_Scopes: [] 36 | m_IsDefault: 0 37 | m_Capabilities: 0 38 | m_Modified: 0 39 | m_Name: 40 | m_Url: 41 | m_Scopes: 42 | - 43 | m_SelectedScopeIndex: 0 44 | -------------------------------------------------------------------------------- /source/ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 1 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /source/ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /source/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 22 7 | productGUID: 35b3e840a272cbd7a990e7fc49bc3109 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: Unity Support Textures Generators 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | mipStripping: 0 53 | numberOfMipsStripped: 0 54 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 55 | iosShowActivityIndicatorOnLoading: -1 56 | androidShowActivityIndicatorOnLoading: -1 57 | iosUseCustomAppBackgroundBehavior: 0 58 | iosAllowHTTPDownload: 1 59 | allowedAutorotateToPortrait: 1 60 | allowedAutorotateToPortraitUpsideDown: 1 61 | allowedAutorotateToLandscapeRight: 1 62 | allowedAutorotateToLandscapeLeft: 1 63 | useOSAutorotation: 1 64 | use32BitDisplayBuffer: 1 65 | preserveFramebufferAlpha: 0 66 | disableDepthAndStencilBuffers: 0 67 | androidStartInFullscreen: 1 68 | androidRenderOutsideSafeArea: 1 69 | androidUseSwappy: 1 70 | androidBlitType: 0 71 | androidResizableWindow: 0 72 | androidDefaultWindowWidth: 1920 73 | androidDefaultWindowHeight: 1080 74 | androidMinimumWindowWidth: 400 75 | androidMinimumWindowHeight: 300 76 | androidFullscreenMode: 1 77 | defaultIsNativeResolution: 1 78 | macRetinaSupport: 1 79 | runInBackground: 1 80 | captureSingleScreen: 0 81 | muteOtherAudioSources: 0 82 | Prepare IOS For Recording: 0 83 | Force IOS Speakers When Recording: 0 84 | deferSystemGesturesMode: 0 85 | hideHomeButton: 0 86 | submitAnalytics: 1 87 | usePlayerLog: 1 88 | bakeCollisionMeshes: 0 89 | forceSingleInstance: 0 90 | useFlipModelSwapchain: 1 91 | resizableWindow: 0 92 | useMacAppStoreValidation: 0 93 | macAppStoreCategory: public.app-category.games 94 | gpuSkinning: 1 95 | xboxPIXTextureCapture: 0 96 | xboxEnableAvatar: 0 97 | xboxEnableKinect: 0 98 | xboxEnableKinectAutoTracking: 0 99 | xboxEnableFitness: 0 100 | visibleInBackground: 1 101 | allowFullscreenSwitch: 1 102 | fullscreenMode: 1 103 | xboxSpeechDB: 0 104 | xboxEnableHeadOrientation: 0 105 | xboxEnableGuest: 0 106 | xboxEnablePIXSampling: 0 107 | metalFramebufferOnly: 0 108 | xboxOneResolution: 0 109 | xboxOneSResolution: 0 110 | xboxOneXResolution: 3 111 | xboxOneMonoLoggingLevel: 0 112 | xboxOneLoggingLevel: 1 113 | xboxOneDisableEsram: 0 114 | xboxOneEnableTypeOptimization: 0 115 | xboxOnePresentImmediateThreshold: 0 116 | switchQueueCommandMemory: 0 117 | switchQueueControlMemory: 16384 118 | switchQueueComputeMemory: 262144 119 | switchNVNShaderPoolsGranularity: 33554432 120 | switchNVNDefaultPoolsGranularity: 16777216 121 | switchNVNOtherPoolsGranularity: 16777216 122 | switchNVNMaxPublicTextureIDCount: 0 123 | switchNVNMaxPublicSamplerIDCount: 0 124 | stadiaPresentMode: 0 125 | stadiaTargetFramerate: 0 126 | vulkanNumSwapchainBuffers: 3 127 | vulkanEnableSetSRGBWrite: 0 128 | vulkanEnablePreTransform: 0 129 | vulkanEnableLateAcquireNextImage: 0 130 | vulkanEnableCommandBufferRecycling: 1 131 | m_SupportedAspectRatios: 132 | 4:3: 1 133 | 5:4: 1 134 | 16:10: 1 135 | 16:9: 1 136 | Others: 1 137 | bundleVersion: 0.1 138 | preloadedAssets: [] 139 | metroInputSource: 0 140 | wsaTransparentSwapchain: 0 141 | m_HolographicPauseOnTrackingLoss: 1 142 | xboxOneDisableKinectGpuReservation: 1 143 | xboxOneEnable7thCore: 1 144 | vrSettings: 145 | enable360StereoCapture: 0 146 | isWsaHolographicRemotingEnabled: 0 147 | enableFrameTimingStats: 0 148 | useHDRDisplay: 0 149 | D3DHDRBitDepth: 0 150 | m_ColorGamuts: 00000000 151 | targetPixelDensity: 30 152 | resolutionScalingMode: 0 153 | androidSupportedAspectRatio: 1 154 | androidMaxAspectRatio: 2.1 155 | applicationIdentifier: {} 156 | buildNumber: 157 | Standalone: 0 158 | iPhone: 0 159 | tvOS: 0 160 | overrideDefaultApplicationIdentifier: 0 161 | AndroidBundleVersionCode: 1 162 | AndroidMinSdkVersion: 19 163 | AndroidTargetSdkVersion: 0 164 | AndroidPreferredInstallLocation: 1 165 | aotOptions: 166 | stripEngineCode: 1 167 | iPhoneStrippingLevel: 0 168 | iPhoneScriptCallOptimization: 0 169 | ForceInternetPermission: 0 170 | ForceSDCardPermission: 0 171 | CreateWallpaper: 0 172 | APKExpansionFiles: 0 173 | keepLoadedShadersAlive: 0 174 | StripUnusedMeshComponents: 1 175 | VertexChannelCompressionMask: 4054 176 | iPhoneSdkVersion: 988 177 | iOSTargetOSVersionString: 11.0 178 | tvOSSdkVersion: 0 179 | tvOSRequireExtendedGameController: 0 180 | tvOSTargetOSVersionString: 11.0 181 | uIPrerenderedIcon: 0 182 | uIRequiresPersistentWiFi: 0 183 | uIRequiresFullScreen: 1 184 | uIStatusBarHidden: 1 185 | uIExitOnSuspend: 0 186 | uIStatusBarStyle: 0 187 | appleTVSplashScreen: {fileID: 0} 188 | appleTVSplashScreen2x: {fileID: 0} 189 | tvOSSmallIconLayers: [] 190 | tvOSSmallIconLayers2x: [] 191 | tvOSLargeIconLayers: [] 192 | tvOSLargeIconLayers2x: [] 193 | tvOSTopShelfImageLayers: [] 194 | tvOSTopShelfImageLayers2x: [] 195 | tvOSTopShelfImageWideLayers: [] 196 | tvOSTopShelfImageWideLayers2x: [] 197 | iOSLaunchScreenType: 0 198 | iOSLaunchScreenPortrait: {fileID: 0} 199 | iOSLaunchScreenLandscape: {fileID: 0} 200 | iOSLaunchScreenBackgroundColor: 201 | serializedVersion: 2 202 | rgba: 0 203 | iOSLaunchScreenFillPct: 100 204 | iOSLaunchScreenSize: 100 205 | iOSLaunchScreenCustomXibPath: 206 | iOSLaunchScreeniPadType: 0 207 | iOSLaunchScreeniPadImage: {fileID: 0} 208 | iOSLaunchScreeniPadBackgroundColor: 209 | serializedVersion: 2 210 | rgba: 0 211 | iOSLaunchScreeniPadFillPct: 100 212 | iOSLaunchScreeniPadSize: 100 213 | iOSLaunchScreeniPadCustomXibPath: 214 | iOSLaunchScreenCustomStoryboardPath: 215 | iOSLaunchScreeniPadCustomStoryboardPath: 216 | iOSDeviceRequirements: [] 217 | iOSURLSchemes: [] 218 | iOSBackgroundModes: 0 219 | iOSMetalForceHardShadows: 0 220 | metalEditorSupport: 1 221 | metalAPIValidation: 1 222 | iOSRenderExtraFrameOnPause: 0 223 | iosCopyPluginsCodeInsteadOfSymlink: 0 224 | appleDeveloperTeamID: 225 | iOSManualSigningProvisioningProfileID: 226 | tvOSManualSigningProvisioningProfileID: 227 | iOSManualSigningProvisioningProfileType: 0 228 | tvOSManualSigningProvisioningProfileType: 0 229 | appleEnableAutomaticSigning: 0 230 | iOSRequireARKit: 0 231 | iOSAutomaticallyDetectAndAddCapabilities: 1 232 | appleEnableProMotion: 0 233 | shaderPrecisionModel: 0 234 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 235 | templatePackageId: com.unity.template.3d@5.0.4 236 | templateDefaultScene: Assets/Scenes/SampleScene.unity 237 | useCustomMainManifest: 0 238 | useCustomLauncherManifest: 0 239 | useCustomMainGradleTemplate: 0 240 | useCustomLauncherGradleManifest: 0 241 | useCustomBaseGradleTemplate: 0 242 | useCustomGradlePropertiesTemplate: 0 243 | useCustomProguardFile: 0 244 | AndroidTargetArchitectures: 1 245 | AndroidTargetDevices: 0 246 | AndroidSplashScreenScale: 0 247 | androidSplashScreen: {fileID: 0} 248 | AndroidKeystoreName: 249 | AndroidKeyaliasName: 250 | AndroidBuildApkPerCpuArchitecture: 0 251 | AndroidTVCompatibility: 0 252 | AndroidIsGame: 1 253 | AndroidEnableTango: 0 254 | androidEnableBanner: 1 255 | androidUseLowAccuracyLocation: 0 256 | androidUseCustomKeystore: 0 257 | m_AndroidBanners: 258 | - width: 320 259 | height: 180 260 | banner: {fileID: 0} 261 | androidGamepadSupportLevel: 0 262 | chromeosInputEmulation: 1 263 | AndroidMinifyWithR8: 0 264 | AndroidMinifyRelease: 0 265 | AndroidMinifyDebug: 0 266 | AndroidValidateAppBundleSize: 1 267 | AndroidAppBundleSizeToValidate: 150 268 | m_BuildTargetIcons: [] 269 | m_BuildTargetPlatformIcons: [] 270 | m_BuildTargetBatching: 271 | - m_BuildTarget: Standalone 272 | m_StaticBatching: 1 273 | m_DynamicBatching: 0 274 | - m_BuildTarget: tvOS 275 | m_StaticBatching: 1 276 | m_DynamicBatching: 0 277 | - m_BuildTarget: Android 278 | m_StaticBatching: 1 279 | m_DynamicBatching: 0 280 | - m_BuildTarget: iPhone 281 | m_StaticBatching: 1 282 | m_DynamicBatching: 0 283 | - m_BuildTarget: WebGL 284 | m_StaticBatching: 0 285 | m_DynamicBatching: 0 286 | m_BuildTargetGraphicsJobs: 287 | - m_BuildTarget: MacStandaloneSupport 288 | m_GraphicsJobs: 0 289 | - m_BuildTarget: Switch 290 | m_GraphicsJobs: 1 291 | - m_BuildTarget: MetroSupport 292 | m_GraphicsJobs: 1 293 | - m_BuildTarget: AppleTVSupport 294 | m_GraphicsJobs: 0 295 | - m_BuildTarget: BJMSupport 296 | m_GraphicsJobs: 1 297 | - m_BuildTarget: LinuxStandaloneSupport 298 | m_GraphicsJobs: 1 299 | - m_BuildTarget: PS4Player 300 | m_GraphicsJobs: 1 301 | - m_BuildTarget: iOSSupport 302 | m_GraphicsJobs: 0 303 | - m_BuildTarget: WindowsStandaloneSupport 304 | m_GraphicsJobs: 1 305 | - m_BuildTarget: XboxOnePlayer 306 | m_GraphicsJobs: 1 307 | - m_BuildTarget: LuminSupport 308 | m_GraphicsJobs: 0 309 | - m_BuildTarget: AndroidPlayer 310 | m_GraphicsJobs: 0 311 | - m_BuildTarget: WebGLSupport 312 | m_GraphicsJobs: 0 313 | m_BuildTargetGraphicsJobMode: 314 | - m_BuildTarget: PS4Player 315 | m_GraphicsJobMode: 0 316 | - m_BuildTarget: XboxOnePlayer 317 | m_GraphicsJobMode: 0 318 | m_BuildTargetGraphicsAPIs: 319 | - m_BuildTarget: AndroidPlayer 320 | m_APIs: 150000000b000000 321 | m_Automatic: 0 322 | - m_BuildTarget: iOSSupport 323 | m_APIs: 10000000 324 | m_Automatic: 1 325 | - m_BuildTarget: AppleTVSupport 326 | m_APIs: 10000000 327 | m_Automatic: 1 328 | - m_BuildTarget: WebGLSupport 329 | m_APIs: 0b000000 330 | m_Automatic: 1 331 | m_BuildTargetVRSettings: 332 | - m_BuildTarget: Standalone 333 | m_Enabled: 0 334 | m_Devices: 335 | - Oculus 336 | - OpenVR 337 | openGLRequireES31: 0 338 | openGLRequireES31AEP: 0 339 | openGLRequireES32: 0 340 | m_TemplateCustomTags: {} 341 | mobileMTRendering: 342 | Android: 1 343 | iPhone: 1 344 | tvOS: 1 345 | m_BuildTargetGroupLightmapEncodingQuality: [] 346 | m_BuildTargetGroupLightmapSettings: [] 347 | m_BuildTargetNormalMapEncoding: [] 348 | playModeTestRunnerEnabled: 0 349 | runPlayModeTestAsEditModeTest: 0 350 | actionOnDotNetUnhandledException: 1 351 | enableInternalProfiler: 0 352 | logObjCUncaughtExceptions: 1 353 | enableCrashReportAPI: 0 354 | cameraUsageDescription: 355 | locationUsageDescription: 356 | microphoneUsageDescription: 357 | bluetoothUsageDescription: 358 | switchNMETAOverride: 359 | switchNetLibKey: 360 | switchSocketMemoryPoolSize: 6144 361 | switchSocketAllocatorPoolSize: 128 362 | switchSocketConcurrencyLimit: 14 363 | switchScreenResolutionBehavior: 2 364 | switchUseCPUProfiler: 0 365 | switchUseGOLDLinker: 0 366 | switchApplicationID: 0x01004b9000490000 367 | switchNSODependencies: 368 | switchTitleNames_0: 369 | switchTitleNames_1: 370 | switchTitleNames_2: 371 | switchTitleNames_3: 372 | switchTitleNames_4: 373 | switchTitleNames_5: 374 | switchTitleNames_6: 375 | switchTitleNames_7: 376 | switchTitleNames_8: 377 | switchTitleNames_9: 378 | switchTitleNames_10: 379 | switchTitleNames_11: 380 | switchTitleNames_12: 381 | switchTitleNames_13: 382 | switchTitleNames_14: 383 | switchTitleNames_15: 384 | switchPublisherNames_0: 385 | switchPublisherNames_1: 386 | switchPublisherNames_2: 387 | switchPublisherNames_3: 388 | switchPublisherNames_4: 389 | switchPublisherNames_5: 390 | switchPublisherNames_6: 391 | switchPublisherNames_7: 392 | switchPublisherNames_8: 393 | switchPublisherNames_9: 394 | switchPublisherNames_10: 395 | switchPublisherNames_11: 396 | switchPublisherNames_12: 397 | switchPublisherNames_13: 398 | switchPublisherNames_14: 399 | switchPublisherNames_15: 400 | switchIcons_0: {fileID: 0} 401 | switchIcons_1: {fileID: 0} 402 | switchIcons_2: {fileID: 0} 403 | switchIcons_3: {fileID: 0} 404 | switchIcons_4: {fileID: 0} 405 | switchIcons_5: {fileID: 0} 406 | switchIcons_6: {fileID: 0} 407 | switchIcons_7: {fileID: 0} 408 | switchIcons_8: {fileID: 0} 409 | switchIcons_9: {fileID: 0} 410 | switchIcons_10: {fileID: 0} 411 | switchIcons_11: {fileID: 0} 412 | switchIcons_12: {fileID: 0} 413 | switchIcons_13: {fileID: 0} 414 | switchIcons_14: {fileID: 0} 415 | switchIcons_15: {fileID: 0} 416 | switchSmallIcons_0: {fileID: 0} 417 | switchSmallIcons_1: {fileID: 0} 418 | switchSmallIcons_2: {fileID: 0} 419 | switchSmallIcons_3: {fileID: 0} 420 | switchSmallIcons_4: {fileID: 0} 421 | switchSmallIcons_5: {fileID: 0} 422 | switchSmallIcons_6: {fileID: 0} 423 | switchSmallIcons_7: {fileID: 0} 424 | switchSmallIcons_8: {fileID: 0} 425 | switchSmallIcons_9: {fileID: 0} 426 | switchSmallIcons_10: {fileID: 0} 427 | switchSmallIcons_11: {fileID: 0} 428 | switchSmallIcons_12: {fileID: 0} 429 | switchSmallIcons_13: {fileID: 0} 430 | switchSmallIcons_14: {fileID: 0} 431 | switchSmallIcons_15: {fileID: 0} 432 | switchManualHTML: 433 | switchAccessibleURLs: 434 | switchLegalInformation: 435 | switchMainThreadStackSize: 1048576 436 | switchPresenceGroupId: 437 | switchLogoHandling: 0 438 | switchReleaseVersion: 0 439 | switchDisplayVersion: 1.0.0 440 | switchStartupUserAccount: 0 441 | switchTouchScreenUsage: 0 442 | switchSupportedLanguagesMask: 0 443 | switchLogoType: 0 444 | switchApplicationErrorCodeCategory: 445 | switchUserAccountSaveDataSize: 0 446 | switchUserAccountSaveDataJournalSize: 0 447 | switchApplicationAttribute: 0 448 | switchCardSpecSize: -1 449 | switchCardSpecClock: -1 450 | switchRatingsMask: 0 451 | switchRatingsInt_0: 0 452 | switchRatingsInt_1: 0 453 | switchRatingsInt_2: 0 454 | switchRatingsInt_3: 0 455 | switchRatingsInt_4: 0 456 | switchRatingsInt_5: 0 457 | switchRatingsInt_6: 0 458 | switchRatingsInt_7: 0 459 | switchRatingsInt_8: 0 460 | switchRatingsInt_9: 0 461 | switchRatingsInt_10: 0 462 | switchRatingsInt_11: 0 463 | switchRatingsInt_12: 0 464 | switchLocalCommunicationIds_0: 465 | switchLocalCommunicationIds_1: 466 | switchLocalCommunicationIds_2: 467 | switchLocalCommunicationIds_3: 468 | switchLocalCommunicationIds_4: 469 | switchLocalCommunicationIds_5: 470 | switchLocalCommunicationIds_6: 471 | switchLocalCommunicationIds_7: 472 | switchParentalControl: 0 473 | switchAllowsScreenshot: 1 474 | switchAllowsVideoCapturing: 1 475 | switchAllowsRuntimeAddOnContentInstall: 0 476 | switchDataLossConfirmation: 0 477 | switchUserAccountLockEnabled: 0 478 | switchSystemResourceMemory: 16777216 479 | switchSupportedNpadStyles: 22 480 | switchNativeFsCacheSize: 32 481 | switchIsHoldTypeHorizontal: 0 482 | switchSupportedNpadCount: 8 483 | switchSocketConfigEnabled: 0 484 | switchTcpInitialSendBufferSize: 32 485 | switchTcpInitialReceiveBufferSize: 64 486 | switchTcpAutoSendBufferSizeMax: 256 487 | switchTcpAutoReceiveBufferSizeMax: 256 488 | switchUdpSendBufferSize: 9 489 | switchUdpReceiveBufferSize: 42 490 | switchSocketBufferEfficiency: 4 491 | switchSocketInitializeEnabled: 1 492 | switchNetworkInterfaceManagerInitializeEnabled: 1 493 | switchPlayerConnectionEnabled: 1 494 | switchUseNewStyleFilepaths: 0 495 | switchUseMicroSleepForYield: 1 496 | switchEnableRamDiskSupport: 0 497 | switchMicroSleepForYieldTime: 25 498 | switchRamDiskSpaceSize: 12 499 | ps4NPAgeRating: 12 500 | ps4NPTitleSecret: 501 | ps4NPTrophyPackPath: 502 | ps4ParentalLevel: 11 503 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 504 | ps4Category: 0 505 | ps4MasterVersion: 01.00 506 | ps4AppVersion: 01.00 507 | ps4AppType: 0 508 | ps4ParamSfxPath: 509 | ps4VideoOutPixelFormat: 0 510 | ps4VideoOutInitialWidth: 1920 511 | ps4VideoOutBaseModeInitialWidth: 1920 512 | ps4VideoOutReprojectionRate: 60 513 | ps4PronunciationXMLPath: 514 | ps4PronunciationSIGPath: 515 | ps4BackgroundImagePath: 516 | ps4StartupImagePath: 517 | ps4StartupImagesFolder: 518 | ps4IconImagesFolder: 519 | ps4SaveDataImagePath: 520 | ps4SdkOverride: 521 | ps4BGMPath: 522 | ps4ShareFilePath: 523 | ps4ShareOverlayImagePath: 524 | ps4PrivacyGuardImagePath: 525 | ps4ExtraSceSysFile: 526 | ps4NPtitleDatPath: 527 | ps4RemotePlayKeyAssignment: -1 528 | ps4RemotePlayKeyMappingDir: 529 | ps4PlayTogetherPlayerCount: 0 530 | ps4EnterButtonAssignment: 1 531 | ps4ApplicationParam1: 0 532 | ps4ApplicationParam2: 0 533 | ps4ApplicationParam3: 0 534 | ps4ApplicationParam4: 0 535 | ps4DownloadDataSize: 0 536 | ps4GarlicHeapSize: 2048 537 | ps4ProGarlicHeapSize: 2560 538 | playerPrefsMaxSize: 32768 539 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 540 | ps4pnSessions: 1 541 | ps4pnPresence: 1 542 | ps4pnFriends: 1 543 | ps4pnGameCustomData: 1 544 | playerPrefsSupport: 0 545 | enableApplicationExit: 0 546 | resetTempFolder: 1 547 | restrictedAudioUsageRights: 0 548 | ps4UseResolutionFallback: 0 549 | ps4ReprojectionSupport: 0 550 | ps4UseAudio3dBackend: 0 551 | ps4UseLowGarlicFragmentationMode: 1 552 | ps4SocialScreenEnabled: 0 553 | ps4ScriptOptimizationLevel: 0 554 | ps4Audio3dVirtualSpeakerCount: 14 555 | ps4attribCpuUsage: 0 556 | ps4PatchPkgPath: 557 | ps4PatchLatestPkgPath: 558 | ps4PatchChangeinfoPath: 559 | ps4PatchDayOne: 0 560 | ps4attribUserManagement: 0 561 | ps4attribMoveSupport: 0 562 | ps4attrib3DSupport: 0 563 | ps4attribShareSupport: 0 564 | ps4attribExclusiveVR: 0 565 | ps4disableAutoHideSplash: 0 566 | ps4videoRecordingFeaturesUsed: 0 567 | ps4contentSearchFeaturesUsed: 0 568 | ps4CompatibilityPS5: 0 569 | ps4AllowPS5Detection: 0 570 | ps4GPU800MHz: 1 571 | ps4attribEyeToEyeDistanceSettingVR: 0 572 | ps4IncludedModules: [] 573 | ps4attribVROutputEnabled: 0 574 | monoEnv: 575 | splashScreenBackgroundSourceLandscape: {fileID: 0} 576 | splashScreenBackgroundSourcePortrait: {fileID: 0} 577 | blurSplashScreenBackground: 1 578 | spritePackerPolicy: 579 | webGLMemorySize: 16 580 | webGLExceptionSupport: 1 581 | webGLNameFilesAsHashes: 0 582 | webGLDataCaching: 1 583 | webGLDebugSymbols: 0 584 | webGLEmscriptenArgs: 585 | webGLModulesDirectory: 586 | webGLTemplate: APPLICATION:Default 587 | webGLAnalyzeBuildSize: 0 588 | webGLUseEmbeddedResources: 0 589 | webGLCompressionFormat: 1 590 | webGLWasmArithmeticExceptions: 0 591 | webGLLinkerTarget: 1 592 | webGLThreadsSupport: 0 593 | webGLDecompressionFallback: 0 594 | scriptingDefineSymbols: {} 595 | additionalCompilerArguments: {} 596 | platformArchitecture: {} 597 | scriptingBackend: {} 598 | il2cppCompilerConfiguration: {} 599 | managedStrippingLevel: {} 600 | incrementalIl2cppBuild: {} 601 | suppressCommonWarnings: 1 602 | allowUnsafeCode: 0 603 | useDeterministicCompilation: 1 604 | useReferenceAssemblies: 1 605 | enableRoslynAnalyzers: 1 606 | additionalIl2CppArgs: 607 | scriptingRuntimeVersion: 1 608 | gcIncremental: 1 609 | assemblyVersionValidation: 1 610 | gcWBarrierValidation: 0 611 | apiCompatibilityLevelPerPlatform: {} 612 | m_RenderingPath: 1 613 | m_MobileRenderingPath: 1 614 | metroPackageName: Template_3D 615 | metroPackageVersion: 616 | metroCertificatePath: 617 | metroCertificatePassword: 618 | metroCertificateSubject: 619 | metroCertificateIssuer: 620 | metroCertificateNotAfter: 0000000000000000 621 | metroApplicationDescription: Template_3D 622 | wsaImages: {} 623 | metroTileShortName: 624 | metroTileShowName: 0 625 | metroMediumTileShowName: 0 626 | metroLargeTileShowName: 0 627 | metroWideTileShowName: 0 628 | metroSupportStreamingInstall: 0 629 | metroLastRequiredScene: 0 630 | metroDefaultTileSize: 1 631 | metroTileForegroundText: 2 632 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 633 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} 634 | metroSplashScreenUseBackgroundColor: 0 635 | platformCapabilities: {} 636 | metroTargetDeviceFamilies: {} 637 | metroFTAName: 638 | metroFTAFileTypes: [] 639 | metroProtocolName: 640 | vcxProjDefaultLanguage: 641 | XboxOneProductId: 642 | XboxOneUpdateKey: 643 | XboxOneSandboxId: 644 | XboxOneContentId: 645 | XboxOneTitleId: 646 | XboxOneSCId: 647 | XboxOneGameOsOverridePath: 648 | XboxOnePackagingOverridePath: 649 | XboxOneAppManifestOverridePath: 650 | XboxOneVersion: 1.0.0.0 651 | XboxOnePackageEncryption: 0 652 | XboxOnePackageUpdateGranularity: 2 653 | XboxOneDescription: 654 | XboxOneLanguage: 655 | - enus 656 | XboxOneCapability: [] 657 | XboxOneGameRating: {} 658 | XboxOneIsContentPackage: 0 659 | XboxOneEnhancedXboxCompatibilityMode: 0 660 | XboxOneEnableGPUVariability: 1 661 | XboxOneSockets: {} 662 | XboxOneSplashScreen: {fileID: 0} 663 | XboxOneAllowedProductIds: [] 664 | XboxOnePersistentLocalStorageSize: 0 665 | XboxOneXTitleMemory: 8 666 | XboxOneOverrideIdentityName: 667 | XboxOneOverrideIdentityPublisher: 668 | vrEditorSettings: {} 669 | cloudServicesEnabled: 670 | UNet: 1 671 | luminIcon: 672 | m_Name: 673 | m_ModelFolderPath: 674 | m_PortalFolderPath: 675 | luminCert: 676 | m_CertPath: 677 | m_SignPackage: 1 678 | luminIsChannelApp: 0 679 | luminVersion: 680 | m_VersionCode: 1 681 | m_VersionName: 682 | apiCompatibilityLevel: 6 683 | activeInputHandler: 0 684 | cloudProjectId: 685 | framebufferDepthMemorylessMode: 0 686 | qualitySettingsNames: [] 687 | projectName: 688 | organizationId: 689 | cloudEnabled: 0 690 | legacyClampBlendShapeWeights: 0 691 | virtualTexturingSupportEnabled: 0 692 | -------------------------------------------------------------------------------- /source/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2021.3.1f1 2 | m_EditorVersionWithRevision: 2021.3.1f1 (3b70a0754835) 3 | -------------------------------------------------------------------------------- /source/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | excludedTargetPlatforms: [] 44 | - serializedVersion: 2 45 | name: Low 46 | pixelLightCount: 0 47 | shadows: 0 48 | shadowResolution: 0 49 | shadowProjection: 1 50 | shadowCascades: 1 51 | shadowDistance: 20 52 | shadowNearPlaneOffset: 3 53 | shadowCascade2Split: 0.33333334 54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 55 | shadowmaskMode: 0 56 | blendWeights: 2 57 | textureQuality: 0 58 | anisotropicTextures: 0 59 | antiAliasing: 0 60 | softParticles: 0 61 | softVegetation: 0 62 | realtimeReflectionProbes: 0 63 | billboardsFaceCameraPosition: 0 64 | vSyncCount: 0 65 | lodBias: 0.4 66 | maximumLODLevel: 0 67 | streamingMipmapsActive: 0 68 | streamingMipmapsAddAllCameras: 1 69 | streamingMipmapsMemoryBudget: 512 70 | streamingMipmapsRenderersPerFrame: 512 71 | streamingMipmapsMaxLevelReduction: 2 72 | streamingMipmapsMaxFileIORequests: 1024 73 | particleRaycastBudget: 16 74 | asyncUploadTimeSlice: 2 75 | asyncUploadBufferSize: 16 76 | asyncUploadPersistentBuffer: 1 77 | resolutionScalingFixedDPIFactor: 1 78 | excludedTargetPlatforms: [] 79 | - serializedVersion: 2 80 | name: Medium 81 | pixelLightCount: 1 82 | shadows: 1 83 | shadowResolution: 0 84 | shadowProjection: 1 85 | shadowCascades: 1 86 | shadowDistance: 20 87 | shadowNearPlaneOffset: 3 88 | shadowCascade2Split: 0.33333334 89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 90 | shadowmaskMode: 0 91 | blendWeights: 2 92 | textureQuality: 0 93 | anisotropicTextures: 1 94 | antiAliasing: 0 95 | softParticles: 0 96 | softVegetation: 0 97 | realtimeReflectionProbes: 0 98 | billboardsFaceCameraPosition: 0 99 | vSyncCount: 1 100 | lodBias: 0.7 101 | maximumLODLevel: 0 102 | streamingMipmapsActive: 0 103 | streamingMipmapsAddAllCameras: 1 104 | streamingMipmapsMemoryBudget: 512 105 | streamingMipmapsRenderersPerFrame: 512 106 | streamingMipmapsMaxLevelReduction: 2 107 | streamingMipmapsMaxFileIORequests: 1024 108 | particleRaycastBudget: 64 109 | asyncUploadTimeSlice: 2 110 | asyncUploadBufferSize: 16 111 | asyncUploadPersistentBuffer: 1 112 | resolutionScalingFixedDPIFactor: 1 113 | excludedTargetPlatforms: [] 114 | - serializedVersion: 2 115 | name: High 116 | pixelLightCount: 2 117 | shadows: 2 118 | shadowResolution: 1 119 | shadowProjection: 1 120 | shadowCascades: 2 121 | shadowDistance: 40 122 | shadowNearPlaneOffset: 3 123 | shadowCascade2Split: 0.33333334 124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 125 | shadowmaskMode: 1 126 | blendWeights: 2 127 | textureQuality: 0 128 | anisotropicTextures: 1 129 | antiAliasing: 0 130 | softParticles: 0 131 | softVegetation: 1 132 | realtimeReflectionProbes: 1 133 | billboardsFaceCameraPosition: 1 134 | vSyncCount: 1 135 | lodBias: 1 136 | maximumLODLevel: 0 137 | streamingMipmapsActive: 0 138 | streamingMipmapsAddAllCameras: 1 139 | streamingMipmapsMemoryBudget: 512 140 | streamingMipmapsRenderersPerFrame: 512 141 | streamingMipmapsMaxLevelReduction: 2 142 | streamingMipmapsMaxFileIORequests: 1024 143 | particleRaycastBudget: 256 144 | asyncUploadTimeSlice: 2 145 | asyncUploadBufferSize: 16 146 | asyncUploadPersistentBuffer: 1 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Very High 151 | pixelLightCount: 3 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 2 156 | shadowDistance: 70 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 1.5 171 | maximumLODLevel: 0 172 | streamingMipmapsActive: 0 173 | streamingMipmapsAddAllCameras: 1 174 | streamingMipmapsMemoryBudget: 512 175 | streamingMipmapsRenderersPerFrame: 512 176 | streamingMipmapsMaxLevelReduction: 2 177 | streamingMipmapsMaxFileIORequests: 1024 178 | particleRaycastBudget: 1024 179 | asyncUploadTimeSlice: 2 180 | asyncUploadBufferSize: 16 181 | asyncUploadPersistentBuffer: 1 182 | resolutionScalingFixedDPIFactor: 1 183 | excludedTargetPlatforms: [] 184 | - serializedVersion: 2 185 | name: Ultra 186 | pixelLightCount: 4 187 | shadows: 2 188 | shadowResolution: 2 189 | shadowProjection: 1 190 | shadowCascades: 4 191 | shadowDistance: 150 192 | shadowNearPlaneOffset: 3 193 | shadowCascade2Split: 0.33333334 194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 195 | shadowmaskMode: 1 196 | blendWeights: 4 197 | textureQuality: 0 198 | anisotropicTextures: 2 199 | antiAliasing: 2 200 | softParticles: 1 201 | softVegetation: 1 202 | realtimeReflectionProbes: 1 203 | billboardsFaceCameraPosition: 1 204 | vSyncCount: 1 205 | lodBias: 2 206 | maximumLODLevel: 0 207 | streamingMipmapsActive: 0 208 | streamingMipmapsAddAllCameras: 1 209 | streamingMipmapsMemoryBudget: 512 210 | streamingMipmapsRenderersPerFrame: 512 211 | streamingMipmapsMaxLevelReduction: 2 212 | streamingMipmapsMaxFileIORequests: 1024 213 | particleRaycastBudget: 4096 214 | asyncUploadTimeSlice: 2 215 | asyncUploadBufferSize: 16 216 | asyncUploadPersistentBuffer: 1 217 | resolutionScalingFixedDPIFactor: 1 218 | excludedTargetPlatforms: [] 219 | m_PerPlatformDefaultQuality: 220 | Android: 2 221 | Lumin: 5 222 | Nintendo 3DS: 5 223 | Nintendo Switch: 5 224 | PS4: 5 225 | PSP2: 2 226 | Stadia: 5 227 | Standalone: 5 228 | WebGL: 3 229 | Windows Store Apps: 5 230 | XboxOne: 5 231 | iPhone: 2 232 | tvOS: 2 233 | -------------------------------------------------------------------------------- /source/ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "ignore": false, 8 | "defaultInstantiationMode": 0, 9 | "supportsModification": true 10 | }, 11 | { 12 | "userAdded": false, 13 | "type": "UnityEditor.Animations.AnimatorController", 14 | "ignore": false, 15 | "defaultInstantiationMode": 0, 16 | "supportsModification": true 17 | }, 18 | { 19 | "userAdded": false, 20 | "type": "UnityEngine.AnimatorOverrideController", 21 | "ignore": false, 22 | "defaultInstantiationMode": 0, 23 | "supportsModification": true 24 | }, 25 | { 26 | "userAdded": false, 27 | "type": "UnityEditor.Audio.AudioMixerController", 28 | "ignore": false, 29 | "defaultInstantiationMode": 0, 30 | "supportsModification": true 31 | }, 32 | { 33 | "userAdded": false, 34 | "type": "UnityEngine.ComputeShader", 35 | "ignore": true, 36 | "defaultInstantiationMode": 1, 37 | "supportsModification": true 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEngine.Cubemap", 42 | "ignore": false, 43 | "defaultInstantiationMode": 0, 44 | "supportsModification": true 45 | }, 46 | { 47 | "userAdded": false, 48 | "type": "UnityEngine.GameObject", 49 | "ignore": false, 50 | "defaultInstantiationMode": 0, 51 | "supportsModification": true 52 | }, 53 | { 54 | "userAdded": false, 55 | "type": "UnityEditor.LightingDataAsset", 56 | "ignore": false, 57 | "defaultInstantiationMode": 0, 58 | "supportsModification": false 59 | }, 60 | { 61 | "userAdded": false, 62 | "type": "UnityEngine.LightingSettings", 63 | "ignore": false, 64 | "defaultInstantiationMode": 0, 65 | "supportsModification": true 66 | }, 67 | { 68 | "userAdded": false, 69 | "type": "UnityEngine.Material", 70 | "ignore": false, 71 | "defaultInstantiationMode": 0, 72 | "supportsModification": true 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEditor.MonoScript", 77 | "ignore": true, 78 | "defaultInstantiationMode": 1, 79 | "supportsModification": true 80 | }, 81 | { 82 | "userAdded": false, 83 | "type": "UnityEngine.PhysicMaterial", 84 | "ignore": false, 85 | "defaultInstantiationMode": 0, 86 | "supportsModification": true 87 | }, 88 | { 89 | "userAdded": false, 90 | "type": "UnityEngine.PhysicsMaterial2D", 91 | "ignore": false, 92 | "defaultInstantiationMode": 0, 93 | "supportsModification": true 94 | }, 95 | { 96 | "userAdded": false, 97 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 98 | "ignore": false, 99 | "defaultInstantiationMode": 0, 100 | "supportsModification": true 101 | }, 102 | { 103 | "userAdded": false, 104 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 105 | "ignore": false, 106 | "defaultInstantiationMode": 0, 107 | "supportsModification": true 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Rendering.VolumeProfile", 112 | "ignore": false, 113 | "defaultInstantiationMode": 0, 114 | "supportsModification": true 115 | }, 116 | { 117 | "userAdded": false, 118 | "type": "UnityEditor.SceneAsset", 119 | "ignore": false, 120 | "defaultInstantiationMode": 0, 121 | "supportsModification": false 122 | }, 123 | { 124 | "userAdded": false, 125 | "type": "UnityEngine.Shader", 126 | "ignore": true, 127 | "defaultInstantiationMode": 1, 128 | "supportsModification": true 129 | }, 130 | { 131 | "userAdded": false, 132 | "type": "UnityEngine.ShaderVariantCollection", 133 | "ignore": true, 134 | "defaultInstantiationMode": 1, 135 | "supportsModification": true 136 | }, 137 | { 138 | "userAdded": false, 139 | "type": "UnityEngine.Texture", 140 | "ignore": false, 141 | "defaultInstantiationMode": 0, 142 | "supportsModification": true 143 | }, 144 | { 145 | "userAdded": false, 146 | "type": "UnityEngine.Texture2D", 147 | "ignore": false, 148 | "defaultInstantiationMode": 0, 149 | "supportsModification": true 150 | }, 151 | { 152 | "userAdded": false, 153 | "type": "UnityEngine.Timeline.TimelineAsset", 154 | "ignore": false, 155 | "defaultInstantiationMode": 0, 156 | "supportsModification": true 157 | } 158 | ], 159 | "defaultDependencyTypeInfo": { 160 | "userAdded": false, 161 | "type": "", 162 | "ignore": false, 163 | "defaultInstantiationMode": 1, 164 | "supportsModification": true 165 | }, 166 | "newSceneOverride": 0 167 | } -------------------------------------------------------------------------------- /source/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /source/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /source/ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | UnityAdsSettings: 27 | m_Enabled: 0 28 | m_InitializeOnStartup: 1 29 | m_TestMode: 0 30 | m_IosGameId: 31 | m_AndroidGameId: 32 | m_GameIds: {} 33 | m_GameId: 34 | PerformanceReportingSettings: 35 | m_Enabled: 0 36 | -------------------------------------------------------------------------------- /source/ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /source/ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /source/ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /source/ProjectSettings/boot.config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eldskald/unity-support-textures-generators/d2c17c7254d174ba772bcbd2343ebdb89f871830/source/ProjectSettings/boot.config --------------------------------------------------------------------------------