├── .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 |
4 |
5 |
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 | 
14 |
15 | Just click any of them and a new editor window should pop up for you to use it.
16 |
17 |
18 | 
19 | 
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
--------------------------------------------------------------------------------