diff --git a/Unity Project/.gitignore b/Unity Project/.gitignore new file mode 100644 index 0000000..72c27e4 --- /dev/null +++ b/Unity Project/.gitignore @@ -0,0 +1,71 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Asset meta data should only be ignored when the corresponding asset is also ignored +!/[Aa]ssets/**/*.meta + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.aab +*.unitypackage + +# Crashlytics generated file +crashlytics-build.properties + +# Packed Addressables +/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* + +# Temporary auto-generated Android Assets +/[Aa]ssets/[Ss]treamingAssets/aa.meta +/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/Unity Project/.vsconfig b/Unity Project/.vsconfig new file mode 100644 index 0000000..aade28f --- /dev/null +++ b/Unity Project/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Unity Project/Assets/.DS_Store b/Unity Project/Assets/.DS_Store new file mode 100644 index 0000000..9ecb7f4 Binary files /dev/null and b/Unity Project/Assets/.DS_Store differ diff --git a/Unity Project/Assets/Editor.meta b/Unity Project/Assets/Editor.meta new file mode 100644 index 0000000..316103a --- /dev/null +++ b/Unity Project/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 329ec9409c534054d896e1b927a1b71c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Editor/TurtleEditor.cs b/Unity Project/Assets/Editor/TurtleEditor.cs new file mode 100644 index 0000000..95a6014 --- /dev/null +++ b/Unity Project/Assets/Editor/TurtleEditor.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +[CustomEditor(typeof(TurtleLSystem),true)] +public class TurtleEditor : Editor +{ + TurtleLSystem turtleLSystem; + + + public override void OnInspectorGUI() { + DrawDefaultInspector(); + + if (GUILayout.Button("Load file")) { + turtleLSystem.loadFile(); + } + + if (GUILayout.Button("Evaluate")) { + turtleLSystem.evaluateAndPresent(); + } + + } + void OnEnable() { + turtleLSystem = (TurtleLSystem)target; + Tools.hidden = true; + } + + void OnDisable() { + Tools.hidden = false; + } +} diff --git a/Unity Project/Assets/Editor/TurtleEditor.cs.meta b/Unity Project/Assets/Editor/TurtleEditor.cs.meta new file mode 100644 index 0000000..9ffda18 --- /dev/null +++ b/Unity Project/Assets/Editor/TurtleEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5805e7212a5b20b4da42e342c1edaf04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem.meta b/Unity Project/Assets/LSystem.meta new file mode 100644 index 0000000..8dfcdb8 --- /dev/null +++ b/Unity Project/Assets/LSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53a6756541318784f8b822a4dd8564c2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/Anabaena.txt b/Unity Project/Assets/LSystem/Anabaena.txt new file mode 100644 index 0000000..e3441ed --- /dev/null +++ b/Unity Project/Assets/LSystem/Anabaena.txt @@ -0,0 +1,8 @@ +#axiom +L +#rules +L->lR +R->Lr +l->L +r->R +#end rules \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/Anabaena.txt.meta b/Unity Project/Assets/LSystem/Anabaena.txt.meta new file mode 100644 index 0000000..cf834be --- /dev/null +++ b/Unity Project/Assets/LSystem/Anabaena.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da39d102803271748a23bdcc7d8431f8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/ContextTest1.txt b/Unity Project/Assets/LSystem/ContextTest1.txt new file mode 100644 index 0000000..0bba8ce --- /dev/null +++ b/Unity Project/Assets/LSystem/ContextTest1.txt @@ -0,0 +1,6 @@ +#ignore + - +#axiom +F[A]B +#rules +F > [A]B -> FF +#F > B -> FF \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/ContextTest1.txt.meta b/Unity Project/Assets/LSystem/ContextTest1.txt.meta new file mode 100644 index 0000000..206a14f --- /dev/null +++ b/Unity Project/Assets/LSystem/ContextTest1.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7c961644c7f6d084f87b7483d0a4adab +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/ContextTest2.txt b/Unity Project/Assets/LSystem/ContextTest2.txt new file mode 100644 index 0000000..bcee688 --- /dev/null +++ b/Unity Project/Assets/LSystem/ContextTest2.txt @@ -0,0 +1,5 @@ +#ignore + - +#axiom +F[-A]B +#rules +F > [A]B -> FF \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/ContextTest2.txt.meta b/Unity Project/Assets/LSystem/ContextTest2.txt.meta new file mode 100644 index 0000000..08c365b --- /dev/null +++ b/Unity Project/Assets/LSystem/ContextTest2.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cefe06321a65fbf46b3640efc97745ff +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/ContextTest3.txt b/Unity Project/Assets/LSystem/ContextTest3.txt new file mode 100644 index 0000000..662f7ab --- /dev/null +++ b/Unity Project/Assets/LSystem/ContextTest3.txt @@ -0,0 +1,5 @@ +#ignore + - +#axiom +F[-[A]-C]B +#rules +F > [A][C]B -> FF \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/ContextTest3.txt.meta b/Unity Project/Assets/LSystem/ContextTest3.txt.meta new file mode 100644 index 0000000..275a904 --- /dev/null +++ b/Unity Project/Assets/LSystem/ContextTest3.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7980f93484f996b41a99e27179a1aab4 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/Koch.txt b/Unity Project/Assets/LSystem/Koch.txt new file mode 100644 index 0000000..4aa9fb2 --- /dev/null +++ b/Unity Project/Assets/LSystem/Koch.txt @@ -0,0 +1,5 @@ +#axiom + +#rules + +#end rules \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/Koch.txt.meta b/Unity Project/Assets/LSystem/Koch.txt.meta new file mode 100644 index 0000000..e6d30df --- /dev/null +++ b/Unity Project/Assets/LSystem/Koch.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 951913a6e45d3664092bc8a3c1760fdc +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/PipeModel.txt b/Unity Project/Assets/LSystem/PipeModel.txt new file mode 100644 index 0000000..c186207 --- /dev/null +++ b/Unity Project/Assets/LSystem/PipeModel.txt @@ -0,0 +1,20 @@ +#ignore + - \ / ^ & +#axiom +C(1,3)F(0)G +#rules +C(a,b) > F(x) : b<3 -> C(a,b+1) +C(a,b) > F(x) : b>=3 -> #stochastic +p=2 C(1,0) +p=1 C(2,0) +p=0.5 C(3,0) +#stochastic end +C(a,b) < F(x) : b>=3 -> F(a) +F(x) < F(y) : x>0 -> F(x) +F(x) : x>0 -> F(0) +F(x) < G : x==1 -> F(0)[+B]\(137.5)G +F(x) < B : x==2 -> #stochastic +p=3 B +p=1 G +#stochastic end +F(x) < G : x==3 -> F(x)W +#end rules \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/PipeModel.txt.meta b/Unity Project/Assets/LSystem/PipeModel.txt.meta new file mode 100644 index 0000000..60b9c79 --- /dev/null +++ b/Unity Project/Assets/LSystem/PipeModel.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5184744759401dd439e7501c149f48fa +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/Plant.txt b/Unity Project/Assets/LSystem/Plant.txt new file mode 100644 index 0000000..be708a9 --- /dev/null +++ b/Unity Project/Assets/LSystem/Plant.txt @@ -0,0 +1,6 @@ +#axiom +X +#rules +X->F[+X]F[-X]+X +F->FF +#end rules \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/Plant.txt.meta b/Unity Project/Assets/LSystem/Plant.txt.meta new file mode 100644 index 0000000..bf1a5b2 --- /dev/null +++ b/Unity Project/Assets/LSystem/Plant.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c4604d19f702cfe4cbe8779ea593c44e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/SampleLSystem.txt b/Unity Project/Assets/LSystem/SampleLSystem.txt new file mode 100644 index 0000000..d4d1cca --- /dev/null +++ b/Unity Project/Assets/LSystem/SampleLSystem.txt @@ -0,0 +1,32 @@ +#axiom +A +#rules +#komentarz +#podstawowe przekształcenie +X-> AX +# instrukcja z rozgałęzieniem +Y->A[A]A +#parametryczne symbola są rozpoznawane po literze i liczbie argumentów czyli B, B(0) i B(0,0) to różne symbole +#w regułach dla parametrycznych symboli w poprzedniku definiuje się nazwę parametru. ta instrukcja zamieni C(1) na C(1.1) a C(2) na C(2.1) +C(a) -> C(a+0.1) +# ta instrukcja wykona się, jeżeli a>1 i a<2 średnik oznacza iloczyn logiczny +B(a) : a>1;a<2 -> C(a)B(0) +# ta instrukcja wykona się, jeżeli poprzednia się nie wykonała i gdy a<=1 +B(a) : a<=1 -> B(2*a) +# ta instrukcja się wykona, jeżeli poprzednie 2 się nie wykonają +B(a) -> B(0) +# instrukcja się wykona, jeżeli następnikiem A jest B(a) i a>0 +A > B(a) : a>0 -> B(a)[A] + +# instrukcja się wykona, jeżeli poprzednikiem A jest B(a) i a>0 (i jeżeli poprzednia się nie wykonała) +B(a) < A a>0 -> B(a)[A] +# instrukcja się wykona, jeżeli poprzednikiem A jest B(a), następnikiem jest C(b) oraz a+b>0 (i jeżeli poprzednia się nie wykonała) +B(a) < A > C(b) a+b>0 -> CC + +# wykona się jedna z trzech opcji z wagami odpowiednio 0.2, 0.6 i 0.3 - wagi nie muszą się sumować do 1. można stochastyczność łączyć z powyższymi rozszerzeniami. +C(a) -> #stochastic +p=0.2 AB(1) +p=0.6 B(1)A +p=0.3 AA +#stochastic end +#rules end \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/SampleLSystem.txt.meta b/Unity Project/Assets/LSystem/SampleLSystem.txt.meta new file mode 100644 index 0000000..856d0a3 --- /dev/null +++ b/Unity Project/Assets/LSystem/SampleLSystem.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cc28e59818768ff4ab9acdef983dcc01 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/Sierpinski.txt b/Unity Project/Assets/LSystem/Sierpinski.txt new file mode 100644 index 0000000..b850e0f --- /dev/null +++ b/Unity Project/Assets/LSystem/Sierpinski.txt @@ -0,0 +1,6 @@ +#axiom +L +#rules +L->R+L+R +R->L-R-L +#end rules \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/Sierpinski.txt.meta b/Unity Project/Assets/LSystem/Sierpinski.txt.meta new file mode 100644 index 0000000..59cd799 --- /dev/null +++ b/Unity Project/Assets/LSystem/Sierpinski.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d9bea09810f87e84b8b3546d47d5dd31 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/VanIterson.txt b/Unity Project/Assets/LSystem/VanIterson.txt new file mode 100644 index 0000000..172a42a --- /dev/null +++ b/Unity Project/Assets/LSystem/VanIterson.txt @@ -0,0 +1,5 @@ +#axiom +XA +#rules +A -> [&(90)f(0.5)S]f(0.0353)/(137.5)A +#end rules \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/VanIterson.txt.meta b/Unity Project/Assets/LSystem/VanIterson.txt.meta new file mode 100644 index 0000000..50b027f --- /dev/null +++ b/Unity Project/Assets/LSystem/VanIterson.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fd09fbaf9088cfb4aaf82cf05584624b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/LSystem/stochastic.txt b/Unity Project/Assets/LSystem/stochastic.txt new file mode 100644 index 0000000..0931066 --- /dev/null +++ b/Unity Project/Assets/LSystem/stochastic.txt @@ -0,0 +1,10 @@ +#axiom +B +#rules +B -> #stochastic +p=3 FB +p=1 [+FB]FB +p=1 [-FB]FB +p=1 F +#stochastic end +#rules end \ No newline at end of file diff --git a/Unity Project/Assets/LSystem/stochastic.txt.meta b/Unity Project/Assets/LSystem/stochastic.txt.meta new file mode 100644 index 0000000..8f2df81 --- /dev/null +++ b/Unity Project/Assets/LSystem/stochastic.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 465f8d1d1ead7fb459bcd7aca3c3829d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Materials.meta b/Unity Project/Assets/Materials.meta new file mode 100644 index 0000000..3d59d03 --- /dev/null +++ b/Unity Project/Assets/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48ca6f9e4f5dc3f468cb5fa1a914f56a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Materials/Leaf.mat b/Unity Project/Assets/Materials/Leaf.mat new file mode 100644 index 0000000..aad368f --- /dev/null +++ b/Unity Project/Assets/Materials/Leaf.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Leaf + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.578 + - _Glossiness: 0.692 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 1 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.27530718, g: 0.6792453, b: 0.1901032, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Unity Project/Assets/Materials/Leaf.mat.meta b/Unity Project/Assets/Materials/Leaf.mat.meta new file mode 100644 index 0000000..fbdf8dc --- /dev/null +++ b/Unity Project/Assets/Materials/Leaf.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a5d8dec59e668645ae5387a1a42e0e2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Materials/leaf material.mat b/Unity Project/Assets/Materials/leaf material.mat new file mode 100644 index 0000000..f50a26e --- /dev/null +++ b/Unity Project/Assets/Materials/leaf material.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: leaf material + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHAPREMULTIPLY_ON + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 4cf885f6598282142af25712ee21ee4c, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _GlossMapScale: 1 + - _Glossiness: 0.426 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Unity Project/Assets/Materials/leaf material.mat.meta b/Unity Project/Assets/Materials/leaf material.mat.meta new file mode 100644 index 0000000..103de8a --- /dev/null +++ b/Unity Project/Assets/Materials/leaf material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 40be7c60f27d0cf48818ffb9777dd7fb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models.meta b/Unity Project/Assets/Models.meta new file mode 100644 index 0000000..6dd1a3b --- /dev/null +++ b/Unity Project/Assets/Models.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c3b87c72381e5d428800a1a82fa4fcc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/Flower.fbx b/Unity Project/Assets/Models/Flower.fbx new file mode 100644 index 0000000..f120df4 Binary files /dev/null and b/Unity Project/Assets/Models/Flower.fbx differ diff --git a/Unity Project/Assets/Models/Flower.fbx.meta b/Unity Project/Assets/Models/Flower.fbx.meta new file mode 100644 index 0000000..3642900 --- /dev/null +++ b/Unity Project/Assets/Models/Flower.fbx.meta @@ -0,0 +1,101 @@ +fileFormatVersion: 2 +guid: 06838bfd0bf73c647812994a50837eaf +ModelImporter: + serializedVersion: 19300 + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: lambert2 + second: {fileID: 2100000, guid: 40be7c60f27d0cf48818ffb9777dd7fb, type: 2} + materials: + materialImportMode: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 10 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 10 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/Leaf_Generator.fbx b/Unity Project/Assets/Models/Leaf_Generator.fbx new file mode 100644 index 0000000..311be07 Binary files /dev/null and b/Unity Project/Assets/Models/Leaf_Generator.fbx differ diff --git a/Unity Project/Assets/Models/Leaf_Generator.fbx.meta b/Unity Project/Assets/Models/Leaf_Generator.fbx.meta new file mode 100644 index 0000000..fb64fb6 --- /dev/null +++ b/Unity Project/Assets/Models/Leaf_Generator.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: 05c8aef2572f95344b4f4e9e609746a6 +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/Sphere.prefab b/Unity Project/Assets/Models/Sphere.prefab new file mode 100644 index 0000000..16283ee --- /dev/null +++ b/Unity Project/Assets/Models/Sphere.prefab @@ -0,0 +1,97 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1137365859699674365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 470298788318060321} + - component: {fileID: 6709748349633369705} + - component: {fileID: 3471709009777093184} + - component: {fileID: 6945590706105838025} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &470298788318060321 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137365859699674365} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6709748349633369705 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137365859699674365} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3471709009777093184 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137365859699674365} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: ca516c08d816f5f4d8454c64e6d9eeab, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!135 &6945590706105838025 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137365859699674365} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Unity Project/Assets/Models/Sphere.prefab.meta b/Unity Project/Assets/Models/Sphere.prefab.meta new file mode 100644 index 0000000..f848dd4 --- /dev/null +++ b/Unity Project/Assets/Models/Sphere.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5d2f08ecbb69120459626c90d120bbb7 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/bigL.fbx b/Unity Project/Assets/Models/bigL.fbx new file mode 100644 index 0000000..7e70f03 Binary files /dev/null and b/Unity Project/Assets/Models/bigL.fbx differ diff --git a/Unity Project/Assets/Models/bigL.fbx.meta b/Unity Project/Assets/Models/bigL.fbx.meta new file mode 100644 index 0000000..7b1cf0d --- /dev/null +++ b/Unity Project/Assets/Models/bigL.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: a3c2912313688e7409f0487619dfe166 +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/bigR.fbx b/Unity Project/Assets/Models/bigR.fbx new file mode 100644 index 0000000..51f1cd3 Binary files /dev/null and b/Unity Project/Assets/Models/bigR.fbx differ diff --git a/Unity Project/Assets/Models/bigR.fbx.meta b/Unity Project/Assets/Models/bigR.fbx.meta new file mode 100644 index 0000000..d2bc62d --- /dev/null +++ b/Unity Project/Assets/Models/bigR.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: ca516c08d816f5f4d8454c64e6d9eeab +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/cylinder.prefab b/Unity Project/Assets/Models/cylinder.prefab new file mode 100644 index 0000000..3bd83b3 --- /dev/null +++ b/Unity Project/Assets/Models/cylinder.prefab @@ -0,0 +1,81 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3132964252630352729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7594502901394162009} + - component: {fileID: 4391870333044285248} + - component: {fileID: 4416866696227822882} + m_Layer: 0 + m_Name: cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7594502901394162009 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3132964252630352729} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4391870333044285248 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3132964252630352729} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4416866696227822882 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3132964252630352729} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: aac0ac856409e5c40acd3911f70271ca, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Unity Project/Assets/Models/cylinder.prefab.meta b/Unity Project/Assets/Models/cylinder.prefab.meta new file mode 100644 index 0000000..36b35e8 --- /dev/null +++ b/Unity Project/Assets/Models/cylinder.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 537804071d025f14d907bbea26a5b603 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/l.fbx b/Unity Project/Assets/Models/l.fbx new file mode 100644 index 0000000..4a7cba5 Binary files /dev/null and b/Unity Project/Assets/Models/l.fbx differ diff --git a/Unity Project/Assets/Models/l.fbx.meta b/Unity Project/Assets/Models/l.fbx.meta new file mode 100644 index 0000000..159a2ac --- /dev/null +++ b/Unity Project/Assets/Models/l.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: cc42f516e5f34114f99b98c835b8c85f +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/leaf.fbx b/Unity Project/Assets/Models/leaf.fbx new file mode 100644 index 0000000..128022f Binary files /dev/null and b/Unity Project/Assets/Models/leaf.fbx differ diff --git a/Unity Project/Assets/Models/leaf.fbx.meta b/Unity Project/Assets/Models/leaf.fbx.meta new file mode 100644 index 0000000..586128a --- /dev/null +++ b/Unity Project/Assets/Models/leaf.fbx.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 8d0c2fec8c571c349b438fde39c3938e +ModelImporter: + serializedVersion: 19300 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 0.2 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 0.002 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/r.fbx b/Unity Project/Assets/Models/r.fbx new file mode 100644 index 0000000..64d772b Binary files /dev/null and b/Unity Project/Assets/Models/r.fbx differ diff --git a/Unity Project/Assets/Models/r.fbx.meta b/Unity Project/Assets/Models/r.fbx.meta new file mode 100644 index 0000000..86a9aeb --- /dev/null +++ b/Unity Project/Assets/Models/r.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: aac0ac856409e5c40acd3911f70271ca +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/rose_petal.fbx b/Unity Project/Assets/Models/rose_petal.fbx new file mode 100644 index 0000000..e44cdeb Binary files /dev/null and b/Unity Project/Assets/Models/rose_petal.fbx differ diff --git a/Unity Project/Assets/Models/rose_petal.fbx.meta b/Unity Project/Assets/Models/rose_petal.fbx.meta new file mode 100644 index 0000000..8060057 --- /dev/null +++ b/Unity Project/Assets/Models/rose_petal.fbx.meta @@ -0,0 +1,105 @@ +fileFormatVersion: 2 +guid: e26181f9304ac9044842d6648db420ce +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: + - first: + 74: -5187248419258813496 + second: Plane|PlaneAction + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/rose_petal1.fbx b/Unity Project/Assets/Models/rose_petal1.fbx new file mode 100644 index 0000000..fff10d2 Binary files /dev/null and b/Unity Project/Assets/Models/rose_petal1.fbx differ diff --git a/Unity Project/Assets/Models/rose_petal1.fbx.meta b/Unity Project/Assets/Models/rose_petal1.fbx.meta new file mode 100644 index 0000000..0783683 --- /dev/null +++ b/Unity Project/Assets/Models/rose_petal1.fbx.meta @@ -0,0 +1,105 @@ +fileFormatVersion: 2 +guid: 813ff6c1c544b3644b274822464a92a7 +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: + - first: + 74: -5187248419258813496 + second: Plane|PlaneAction + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/source.meta b/Unity Project/Assets/Models/source.meta new file mode 100644 index 0000000..4003936 --- /dev/null +++ b/Unity Project/Assets/Models/source.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ca0a699eef019647a81d0cedf67bf1f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/sunflower.meta b/Unity Project/Assets/Models/sunflower.meta new file mode 100644 index 0000000..d7a348b --- /dev/null +++ b/Unity Project/Assets/Models/sunflower.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 910391d0ba4ce6c449458137a48292ec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/sunflower/bud.fbx b/Unity Project/Assets/Models/sunflower/bud.fbx new file mode 100644 index 0000000..ad4a919 Binary files /dev/null and b/Unity Project/Assets/Models/sunflower/bud.fbx differ diff --git a/Unity Project/Assets/Models/sunflower/bud.fbx.meta b/Unity Project/Assets/Models/sunflower/bud.fbx.meta new file mode 100644 index 0000000..b17f4f7 --- /dev/null +++ b/Unity Project/Assets/Models/sunflower/bud.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: 0ce8fd4d46eb7c04fb6b357ad5d32398 +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/sunflower/flower_old.fbx b/Unity Project/Assets/Models/sunflower/flower_old.fbx new file mode 100644 index 0000000..b444d58 Binary files /dev/null and b/Unity Project/Assets/Models/sunflower/flower_old.fbx differ diff --git a/Unity Project/Assets/Models/sunflower/flower_old.fbx.meta b/Unity Project/Assets/Models/sunflower/flower_old.fbx.meta new file mode 100644 index 0000000..e803509 --- /dev/null +++ b/Unity Project/Assets/Models/sunflower/flower_old.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: 0d744d7a694a1b34aa665e6fa85c38a2 +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/sunflower/flower_young.fbx b/Unity Project/Assets/Models/sunflower/flower_young.fbx new file mode 100644 index 0000000..98fa014 Binary files /dev/null and b/Unity Project/Assets/Models/sunflower/flower_young.fbx differ diff --git a/Unity Project/Assets/Models/sunflower/flower_young.fbx.meta b/Unity Project/Assets/Models/sunflower/flower_young.fbx.meta new file mode 100644 index 0000000..98432ad --- /dev/null +++ b/Unity Project/Assets/Models/sunflower/flower_young.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: 183ebc02eb02ee14eaeeacc7bbffb22a +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/sunflower/petal.fbx b/Unity Project/Assets/Models/sunflower/petal.fbx new file mode 100644 index 0000000..00fb8fd Binary files /dev/null and b/Unity Project/Assets/Models/sunflower/petal.fbx differ diff --git a/Unity Project/Assets/Models/sunflower/petal.fbx.meta b/Unity Project/Assets/Models/sunflower/petal.fbx.meta new file mode 100644 index 0000000..babe40d --- /dev/null +++ b/Unity Project/Assets/Models/sunflower/petal.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: d1875180159e234448d5f19b60ecf63f +ModelImporter: + serializedVersion: 20200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/sunflower/textures.meta b/Unity Project/Assets/Models/sunflower/textures.meta new file mode 100644 index 0000000..f1aff51 --- /dev/null +++ b/Unity Project/Assets/Models/sunflower/textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc30390a6e981f747bb5d9b8c5739d3d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/sunflower/textures/Material.001 Base Color.jpg b/Unity Project/Assets/Models/sunflower/textures/Material.001 Base Color.jpg new file mode 100644 index 0000000..4cdc2e8 Binary files /dev/null and b/Unity Project/Assets/Models/sunflower/textures/Material.001 Base Color.jpg differ diff --git a/Unity Project/Assets/Models/sunflower/textures/Material.001 Base Color.jpg.meta b/Unity Project/Assets/Models/sunflower/textures/Material.001 Base Color.jpg.meta new file mode 100644 index 0000000..1263027 --- /dev/null +++ b/Unity Project/Assets/Models/sunflower/textures/Material.001 Base Color.jpg.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: ed1b71ffb41fa3a409b86d963a94d755 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/sunflower/textures/old.png b/Unity Project/Assets/Models/sunflower/textures/old.png new file mode 100644 index 0000000..7226fa1 Binary files /dev/null and b/Unity Project/Assets/Models/sunflower/textures/old.png differ diff --git a/Unity Project/Assets/Models/sunflower/textures/old.png.meta b/Unity Project/Assets/Models/sunflower/textures/old.png.meta new file mode 100644 index 0000000..8ef5a21 --- /dev/null +++ b/Unity Project/Assets/Models/sunflower/textures/old.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: eacb8bdb1d23f964d9106065c5f5fb75 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/textures.meta b/Unity Project/Assets/Models/textures.meta new file mode 100644 index 0000000..0207089 --- /dev/null +++ b/Unity Project/Assets/Models/textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b146ace23aa4ca4b98c431ce3cf7fe7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Models/textures/Petal.tga.png b/Unity Project/Assets/Models/textures/Petal.tga.png new file mode 100644 index 0000000..a7c13c5 Binary files /dev/null and b/Unity Project/Assets/Models/textures/Petal.tga.png differ diff --git a/Unity Project/Assets/Models/textures/Petal.tga.png.meta b/Unity Project/Assets/Models/textures/Petal.tga.png.meta new file mode 100644 index 0000000..23cb15a --- /dev/null +++ b/Unity Project/Assets/Models/textures/Petal.tga.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 4cf885f6598282142af25712ee21ee4c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes.meta b/Unity Project/Assets/Scenes.meta new file mode 100644 index 0000000..6cff8a6 --- /dev/null +++ b/Unity Project/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 329798f44b3a08b40973ac00050b7dd6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes/LSystem2D.unity b/Unity Project/Assets/Scenes/LSystem2D.unity new file mode 100644 index 0000000..83a475f --- /dev/null +++ b/Unity Project/Assets/Scenes/LSystem2D.unity @@ -0,0 +1,348 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 15df3041f931a4b3189530813766d6c2, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.0061698696, g: 0.0061698696, b: 0.0061698696, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &755131157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 755131159} + - component: {fileID: 755131158} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &755131158 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &755131159 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1466590775 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1466590777} + - component: {fileID: 1466590776} + m_Layer: 0 + m_Name: LSystemController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1466590776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 077aaeb6378653940b8ed1da8871fed4, type: 3} + m_Name: + m_EditorClassIdentifier: + LSystemPath: Assets/LSystem/Koch.txt + steps: 1 + obj: {fileID: 3132964252630352729, guid: 537804071d025f14d907bbea26a5b603, type: 3} + angle: 60 +--- !u!4 &1466590777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2076165847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2076165850} + - component: {fileID: 2076165849} + - component: {fileID: 2076165848} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2076165848 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 +--- !u!20 &2076165849 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2076165850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.01, z: -1.525} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity Project/Assets/Scenes/LSystem2D.unity.meta b/Unity Project/Assets/Scenes/LSystem2D.unity.meta new file mode 100644 index 0000000..b45eb96 --- /dev/null +++ b/Unity Project/Assets/Scenes/LSystem2D.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 24701bad68f1faf44913a871fbd8a989 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes/LSystem3D.unity b/Unity Project/Assets/Scenes/LSystem3D.unity new file mode 100644 index 0000000..c7688ed --- /dev/null +++ b/Unity Project/Assets/Scenes/LSystem3D.unity @@ -0,0 +1,349 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &755131157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 755131159} + - component: {fileID: 755131158} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &755131158 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &755131159 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1466590775 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1466590777} + - component: {fileID: 1466590776} + m_Layer: 0 + m_Name: LSystemController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1466590776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fdbab7936197e9c4e9c5225e40810916, type: 3} + m_Name: + m_EditorClassIdentifier: + LSystemPath: Assets\LSystem\Sierpinski.txt + steps: 1 + obj: {fileID: 3132964252630352729, guid: 537804071d025f14d907bbea26a5b603, type: 3} + sphere: {fileID: 1137365859699674365, guid: 5d2f08ecbb69120459626c90d120bbb7, type: 3} + angle: 60 +--- !u!4 &1466590777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2076165847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2076165850} + - component: {fileID: 2076165849} + - component: {fileID: 2076165848} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2076165848 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 +--- !u!20 &2076165849 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2076165850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.01, z: -1.525} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity Project/Assets/Scenes/LSystem3D.unity.meta b/Unity Project/Assets/Scenes/LSystem3D.unity.meta new file mode 100644 index 0000000..37fa7ec --- /dev/null +++ b/Unity Project/Assets/Scenes/LSystem3D.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 12af647ed3c081041a127bb7756c2996 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes/LSystemContextExample.unity b/Unity Project/Assets/Scenes/LSystemContextExample.unity new file mode 100644 index 0000000..961d932 --- /dev/null +++ b/Unity Project/Assets/Scenes/LSystemContextExample.unity @@ -0,0 +1,349 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &755131157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 755131159} + - component: {fileID: 755131158} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &755131158 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &755131159 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1466590775 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1466590777} + - component: {fileID: 1466590776} + m_Layer: 0 + m_Name: LSystemController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1466590776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fdbab7936197e9c4e9c5225e40810916, type: 3} + m_Name: + m_EditorClassIdentifier: + LSystemPath: Assets\LSystem\ContextTest1.txt + steps: 1 + obj: {fileID: 3132964252630352729, guid: 537804071d025f14d907bbea26a5b603, type: 3} + sphere: {fileID: 1137365859699674365, guid: 5d2f08ecbb69120459626c90d120bbb7, type: 3} + angle: 60 +--- !u!4 &1466590777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2076165847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2076165850} + - component: {fileID: 2076165849} + - component: {fileID: 2076165848} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2076165848 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 +--- !u!20 &2076165849 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2076165850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.01, z: -1.525} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity Project/Assets/Scenes/LSystemContextExample.unity.meta b/Unity Project/Assets/Scenes/LSystemContextExample.unity.meta new file mode 100644 index 0000000..aa4d3a3 --- /dev/null +++ b/Unity Project/Assets/Scenes/LSystemContextExample.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d2a49651ac67ad4489dc53c98373f593 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes/LSystemFromFile.unity b/Unity Project/Assets/Scenes/LSystemFromFile.unity new file mode 100644 index 0000000..0dd321c --- /dev/null +++ b/Unity Project/Assets/Scenes/LSystemFromFile.unity @@ -0,0 +1,343 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &755131157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 755131159} + - component: {fileID: 755131158} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &755131158 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &755131159 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1466590775 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1466590777} + - component: {fileID: 1466590776} + m_Layer: 0 + m_Name: LSystemController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1466590776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7bc6128c88800ea48ba9b9e7070ec728, type: 3} + m_Name: + m_EditorClassIdentifier: + LSystemPath: Assets\LSystem\Anabaena.txt + steps: 1 +--- !u!4 &1466590777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2076165847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2076165850} + - component: {fileID: 2076165849} + - component: {fileID: 2076165848} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2076165848 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 +--- !u!20 &2076165849 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2076165850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.01, z: -1.525} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity Project/Assets/Scenes/LSystemFromFile.unity.meta b/Unity Project/Assets/Scenes/LSystemFromFile.unity.meta new file mode 100644 index 0000000..a3e7672 --- /dev/null +++ b/Unity Project/Assets/Scenes/LSystemFromFile.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3cb948870e265c74e8d96211e8d7ec25 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes/PipeModel.unity b/Unity Project/Assets/Scenes/PipeModel.unity new file mode 100644 index 0000000..47019d3 --- /dev/null +++ b/Unity Project/Assets/Scenes/PipeModel.unity @@ -0,0 +1,369 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &755131157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 755131159} + - component: {fileID: 755131158} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &755131158 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &755131159 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 755131157} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: -1.305, y: 3, z: -0.753} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1466590775 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1466590777} + - component: {fileID: 1466590776} + m_Layer: 0 + m_Name: LSystemController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1466590776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 881ec2dd8ae9af549b6c916c2cf8e5de, type: 3} + m_Name: + m_EditorClassIdentifier: + LSystemPath: + steps: 0 + obj: {fileID: 3132964252630352729, guid: 537804071d025f14d907bbea26a5b603, type: 3} + flower: {fileID: -927199367670048503, guid: 06838bfd0bf73c647812994a50837eaf, type: 3} + leaf: {fileID: -927199367670048503, guid: 8d0c2fec8c571c349b438fde39c3938e, type: 3} + angle: 0 +--- !u!4 &1466590777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1466590775} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2076165847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2076165850} + - component: {fileID: 2076165849} + - component: {fileID: 2076165848} + - component: {fileID: 2076165851} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2076165848 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 +--- !u!20 &2076165849 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2076165850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.01, z: -1.525} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2076165851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2076165847} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f25c65de82c4864ab326f84e1ced219, type: 3} + m_Name: + m_EditorClassIdentifier: + minX: -360 + maxX: 360 + minY: -45 + maxY: 45 + sensX: 100 + sensY: 100 diff --git a/Unity Project/Assets/Scenes/PipeModel.unity.meta b/Unity Project/Assets/Scenes/PipeModel.unity.meta new file mode 100644 index 0000000..84b5eac --- /dev/null +++ b/Unity Project/Assets/Scenes/PipeModel.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bf68733670e512e4f8fcab737da0f141 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes/SampleScene.unity b/Unity Project/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..a669fa1 --- /dev/null +++ b/Unity Project/Assets/Scenes/SampleScene.unity @@ -0,0 +1,682 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 705507994} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + - component: {fileID: 963194229} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &963194229 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: be76e5f14cfee674cb30b491fb72b09b, type: 3} + m_Name: + m_EditorClassIdentifier: + boost: 3.5 + positionLerpTime: 0.2 + mouseSensitivityCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 5 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 2.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationLerpTime: 0.01 + invertY: 0 +--- !u!43 &1031237511 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 1440 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 183 + localAABB: + m_Center: {x: 1.4258333, y: 0, z: 0.07906409} + m_Extent: {x: 1.4258333, y: 0.203, z: 0.083564095} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b500b600b200b600b300b200b400b500b200b100b400b200590058005500560059005500580057005500570054005500b200b300af00b300b000af00b100b200af00ae00b100af00560055005200530056005200550054005200540051005200af00b000ac00b000ad00ac00ae00af00ac00ab00ae00ac00530052004f00500053004f00520051004f0051004e004f00ac00ad00a900ad00aa00a900ab00ac00a900a800ab00a90050004f004c004d0050004c004f004e004c004e004b004c00a900aa00a600aa00a700a600a800a900a600a500a800a6004d004c0049004a004d0049004c004b0049004b0048004900a600a700a300a700a400a300a500a600a300a200a500a3004a004900460047004a004600490048004600480045004600a300a400a000a400a100a000a200a300a0009f00a200a000470046004300440047004300460045004300450042004300a000a1009d00a1009e009d009f00a0009d009c009f009d0044004300400041004400400043004200400042003f0040009d009e009a009e009b009a009c009d009a0099009c009a00410040003d003e0041003d0040003f003d003f003c003d009a009b0097009b009800970099009a0097009600990097003e003d003a003b003e003a003d003c003a003c0039003a009700980094009800950094009600970094009300960094003b003a00370038003b0037003a0039003700390036003700940095009100950092009100930094009100900093009100380037003400350038003400370036003400360033003400910092008e0092008f008e00900091008e008d0090008e003500340031003200350031003400330031003300300031008e008f008b008f008c008b008d008e008b008a008d008b00320031002e002f0032002e00310030002e0030002d002e008b008c0088008c00890088008a008b00880087008a0088002f002e002b002c002f002b002e002d002b002d002a002b008800890085008900860085008700880085008400870085002c002b00280029002c0028002b002a0028002a0027002800850086008200860083008200840085008200810084008200290028002500260029002500280027002500270024002500820083007f00830080007f00810082007f007e0081007f002600250022002300260022002500240022002400210022007f0080007c0080007d007c007e007f007c007b007e007c00230022001f00200023001f00220021001f0021001e001f007c007d0079007d007a0079007b007c00790078007b00790020001f001c001d0020001c001f001e001c001e001b001c0079007a0076007a00770076007800790076007500780076001d001c0019001a001d0019001c001b0019001b00180019007600770073007700740073007500760073007200750073001a001900160017001a0016001900180016001800150016007300740070007400710070007200730070006f0072007000170016001300140017001300160015001300150012001300700071006d0071006e006d006f0070006d006c006f006d0014001300100011001400100013001200100012000f0010006d006e006a006e006b006a006c006d006a0069006c006a00110010000d000e0011000d0010000f000d000f000c000d006a006b0067006b006800670069006a0067006600690067000e000d000a000b000e000a000d000c000a000c0009000a006700680064006800650064006600670064006300660064000b000a00070008000b0007000a0009000700090006000700640065006100650062006100630064006100600063006100080007000400050008000400070006000400060003000400610062005e0062005f005e00600061005e005d0060005e00050004000100020005000100040003000100030000000100 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 186 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 40 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 8928 + _typelessdata: 0000000000000000bd7493bbd9d83ebdd2b87f3f0000000000000000b81e853e000000000000803f000000000000000000000000000000000ad7233c54d57bbe5b5106343823783f00000000b81e853e000000000000803f00000000000000000000000000000000bd7493bbd9d83ebdd2b87fbf0000000000000000b81e853e000000000000803f0000000000000000fd62c93dd84b963ba44cb83b6b19a1bdc5de793f0bab4f3e00000000b81e853e000000000000803ffd62c93dd84b963bfd62c93d00000000aa85a73cdae73abe0000000013b37b3f00000000b81e853e000000000000803ffd62c93d00000000fd62c93dd84b96bba44cb83b6b19a1bdc5de79bf0bab4f3e00000000b81e853e000000000000803ffd62c93dd84b96bbfd62493e9ac38c3c0a10853ccf4d1cbe8c85413fb4f7223f00000000b81e853e000000000000803ffd62493e9ac38c3cfd62493e00000000dfe6023d657f24be00000000deac7c3f00000000b81e853e000000000000803ffd62493e00000000fd62493e9ac38cbc0a10853ccf4d1cbe8c8541bfb3f7223f00000000b81e853e000000000000803ffd62493e9ac38cbc3e0a973ec8a2133d6315df3c61ef2dbe9ecdf53e9b515c3f00000000b81e853e000000000000803f3e0a973ec8a2133d3e0a973e000000000458353d716b1dbe2fd198b1f7f47c3f00000000b81e853e000000000000803f3e0a973e000000003e0a973ec8a213bd6315df3c61ef2dbe9ecdf5be9b515c3f00000000b81e853e000000000000803f3e0a973ec8a213bdfd62c93e4166733d59911d3dded92abe873ea73e4c286e3f00000000b81e853e000000000000803ffd62c93e4166733dfd62c93e000000006a0c6a3d67da19be0000000010187d3f00000000b81e853e000000000000803ffd62c93e00000000fd62c93e416673bd59911d3ddfd92abe873ea7be4c286e3f00000000b81e853e000000000000803ffd62c93e416673bdbcbbfb3e0243af3d171c4c3d14d424be29037d3eb79d743f00000000b81e853e000000000000803fbcbbfb3e0243af3dbcbbfb3e000000001afd8f3d726816beedb88db130397d3f00000000b81e853e000000000000803fbcbbfb3e00000000bcbbfb3e0243afbd171c4c3d14d424be2a037dbeb79d743f00000000b81e853e000000000000803fbcbbfb3e0243afbd3e0a173ff2ede63d05aa7a3dbfe41dbe75494f3eaa92773f00000000b81e853e000000000000803f3e0a173ff2ede63d3e0a173f00000000c20bab3d1cc811beadc75cb177647d3f00000000b81e853e000000000000803f3e0a173f000000003e0a173ff2ede6bd05aa7a3dbfe41dbe75494fbeaa92773f00000000b81e853e000000000000803f3e0a173ff2ede6bd9d36303f6f900e3ef15b943d8ab915be589e333e5c3c793f00000000b81e853e000000000000803f9d36303f6f900e3e9d36303f0000000043adc53d755a0bbea97c36b1509e7d3f00000000b81e853e000000000000803f9d36303f000000009d36303f6f900ebef15b943d8ab915be589e33be5c3c793f00000000b81e853e000000000000803f9d36303f6f900ebefd62493f5624273e57dfaa3d1bd60bbe3103223eb2587a3f00000000b81e853e000000000000803ffd62493f5624273efd62493f00000000ad5cdf3d65c402be7d611e316fe77d3f00000000b81e853e000000000000803ffd62493f00000000fd62493f562427be57dfaa3d1dd60bbe330322beb4587a3f00000000b81e853e000000000000803ffd62493f562427be5c8f623f21693b3e3999c03d92a2ffbdd597163e35317b3f00000000b81e853e000000000000803f5c8f623f21693b3e5c8f623f000000001195f73de58cefbd078a0f31253e7e3f00000000b81e853e000000000000803f5c8f623f000000005c8f623f21693bbe3999c03d92a2ffbdd49716be34317b3f00000000b81e853e000000000000803f5c8f623f21693bbebcbb7b3f4695493e8740d53d9d9ce2bd75680f3eade37b3f00000000b81e853e000000000000803fbcbb7b3f4695493ebcbb7b3f00000000c1e8063e6f53d4bd00000000d89e7e3f00000000b81e853e000000000000803fbcbb7b3f00000000bcbb7b3f469549be8740d53d9d9ce2bd75680fbeade37b3f00000000b81e853e000000000000803fbcbb7b3f469549be0e748a3f3bdf4f3e8788e83daad9bfbdcd8b0b3eb5797c3f00000000b81e853e000000000000803f0e748a3f3bdf4f3e0e748a3f000000008bc6103ec863b3bd30cd05b11b047f3f00000000b81e853e000000000000803f0e748a3f000000000e748a3f3bdf4fbe8788e83daad9bfbdcd8b0bbeb5797c3f00000000b81e853e000000000000803f0e748a3f3bdf4fbe3e0a973f727d4c3e4e20fa3dffa697bd5cd30a3e55ed7c3f00000000b81e853e000000000000803f3e0a973f727d4c3e3e0a973f000000006c21193e5c5e8dbdb9370ab1ad637f3f00000000b81e853e000000000000803f3e0a973f000000003e0a973f727d4cbe4e20fa3dffa697bd5cd30abe55ed7c3f00000000b81e853e000000000000803f3e0a973f727d4cbe6da0a33f0551403e82ac043eafc55abd1d380d3e592f7d3f00000000b81e853e000000000000803f6da0a33f0551403e6da0a33f00000000efb61f3e71214abda3ae133126b07f3f00000000b81e853e000000000000803f6da0a33f000000006da0a33f055140be82ac043eafc55abd1d380dbe592f7d3f00000000b81e853e000000000000803f6da0a33f055140be9d36b03f4cc9323e9d550a3ec71302bdef60113ec7467d3f00000000b81e853e000000000000803f9d36b03f4cc9323e9d36b03f000000009f44243e0242debcbc781f31e0e77f3f00000000b81e853e000000000000803f9d36b03f000000009d36b03f4cc932be9d550a3ec71302bdee6011bec7467d3f00000000b81e853e000000000000803f9d36b03f4cc932becdccbc3f57a3243e4bbb0d3ed174f7bbce93163eb2357d3f00000000b81e853e000000000000803fcdccbc3f57a3243ecdccbc3f000000000188263edbfc0ebb00000000d9ff7f3f00000000b81e853e000000000000803fcdccbc3f00000000cdccbc3f57a324be4bbb0d3ecf74f7bbce9316beb2357d3f00000000b81e853e000000000000803fcdccbc3f57a324befd62c93f9d0c163eef930e3e31609b3c44fa1c3e6ded7c3f00000000b81e853e000000000000803ffd62c93f9d0c163efd62c93f00000000833b263ed832ca3c0000000008ec7f3f00000000b81e853e000000000000803ffd62c93f00000000fd62c93f9d0c16beef930e3e32609b3c44fa1cbe6ded7c3f00000000b81e853e000000000000803ffd62c93f9d0c16be2df9d53f9632073eaeb60c3ebfe53a3d4aea243e5a637c3f00000000b81e853e000000000000803f2df9d53f9632073e2df9d53f00000000233a233e415f4e3d72fb5431c4ac7f3f00000000b81e853e000000000000803f2df9d53f000000002df9d53f963207beaeb60c3ec0e53a3d49ea24be59637c3f00000000b81e853e000000000000803f2df9d53f963207be5c8fe23f5f85f03d8a61083ebb8a8e3d6ee72e3ea39b7b3f00000000b81e853e000000000000803f5c8fe23f5f85f03d5c8fe23f0000000089c51d3eb00a963d00000000e14f7f3f00000000b81e853e000000000000803f5c8fe23f000000005c8fe23f5f85f0bd8a61083eba8a8e3d6de72ebea39b7b3f00000000b81e853e000000000000803f5c8fe23f5f85f0bd8c25ef3fcbd4d23dcadd013e9984b93da7ab3b3ede977a3f00000000b81e853e000000000000803f8c25ef3fcbd4d23d8c25ef3f00000000642a163ee3dbbe3d257a09b1cbe27e3f00000000b81e853e000000000000803f8c25ef3f000000008c25ef3fcbd4d2bdcadd013e9984b93da7ab3bbede977a3f00000000b81e853e000000000000803f8c25ef3fcbd4d2bdbcbbfb3f4caeb53dece9f23dc961de3deb404c3e8a4f793f00000000b81e853e000000000000803fbcbbfb3f4caeb53dbcbbfb3f0000000065b50c3e47bce13d00000000b0707e3f00000000b81e853e000000000000803fbcbbfb3f00000000bcbbfb3f4caeb5bdece9f23dc961de3deb404cbe8a4f793f00000000b81e853e000000000000803fbcbbfb3f4caeb5bdf6280440d86c993dbfe1de3da11ffd3d382f623ef7a9773f00000000b81e853e000000000000803ff6280440d86c993df6280440000000003eb3013ec7d1fe3dd0c8be31bb027e3f00000000b81e853e000000000000803ff628044000000000f6280440d86c99bdbfe1de3da11ffd3d362f62bef7a9773f00000000b81e853e000000000000803ff6280440d86c99bd0e740a409dd67c3d3937c83d7cd30a3eb6c97f3e6471753f00000000b81e853e000000000000803f0e740a409dd67c3d0e740a40000000003be1ea3db3270b3e000000000da07d3f00000000b81e853e000000000000803f0e740a40000000000e740a409dd67cbd3937c83d7cd30a3eb6c97fbe6471753f00000000b81e853e000000000000803f0e740a409dd67cbd26bf104040094a3d2b7faf3d5ed5133efb57943e5037723f00000000b81e853e000000000000803f26bf104040094a3d26bf1040000000006d74d03dfb3d143ed36693319e4d7d3f00000000b81e853e000000000000803f26bf10400000000026bf104040094abd2b7faf3d5ed5133efb5794be5037723f00000000b81e853e000000000000803f26bf104040094abd3e0a174061271b3dfa4e953deb2e193e694eb13e29166d3f00000000b81e853e000000000000803f3e0a174061271b3d3e0a1740000000006db9b43d8de01a3e00000000110e7d3f00000000b81e853e000000000000803f3e0a1740000000003e0a174061271bbdfa4e953deb2e193e694eb1be29166d3f00000000b81e853e000000000000803f3e0a174061271bbd56551d40bacde13c7479743de9df193e3636db3ef520643f00000000b81e853e000000000000803f56551d40bacde13c56551d4000000000a449983d266a1f3eef5608b2f8e07c3f00000000b81e853e000000000000803f56551d400000000056551d40bacde1bc7479743de9df193e3636dbbef520643f00000000b81e853e000000000000803f56551d40bacde1bc6da02340f2fa973c20be3d3d3e80133eb5f80b3f5326533f00000000b81e853e000000000000803f6da02340f2fa973c6da0234000000000d47c773d6b92223e2fa55032cfc07c3f00000000b81e853e000000000000803f6da02340000000006da02340f2fa97bc20be3d3d3e80133eb5f80bbf5326533f00000000b81e853e000000000000803f6da02340f2fa97bc85eb29405c84343cac9a073dc1fc003e9834353f44ef313f00000000b81e853e000000000000803f85eb29405c84343c85eb29400000000050623f3d2934263e37aab8b2ff9a7c3f00000000b81e853e000000000000803f85eb29400000000085eb29405c8434bcac9a073dc1fc003e983435bf44ef313f00000000b81e853e000000000000803f85eb29405c8434bc9d363040f13ba83bc57da63c0242b83d8a30613fec1fef3e00000000b81e853e000000000000803f9d363040f13ba83b9d363040000000006e76093d74e6353ef29bf333baed7b3f00000000b81e853e000000000000803f9d363040000000009d363040f13ba8bbc57da63c0242b83d8a3061bfea1fef3e00000000b81e853e000000000000803f9d363040f13ba8bbb5813640b9ed0c360dd9373c389da63da31a6e3fe265b73e00000000b81e853e000000000000803fb5813640b9ed0c36b5813640000000007b7c393cf4e1613e00000000a5b1793f00000000b81e853e000000000000803fb581364000000000b5813640b9ed0cb60dd9373c3b9da63da41a6ebfe465b73e00000000b81e853e000000000000803fb5813640b9ed0cb6cdcc3c40b9ed0c360000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c40b9ed0c36cdcc3c400000000017b7d13800000000000000000000000000000000b81e853e000000000000803fcdcc3c4000000000cdcc3c40b9ed0cb60000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c40b9ed0cb60000000000000000bd7493bbdad83e3dd3b87fbf0000000000000000b81e853e000000000000803f0000000000000000000000000000000000000000a9e8193ee5ff88b386177dbf00000000b81e853e000000000000803f00000000000000000000000000000000bd7493bbdad83e3dd3b87f3f0000000000000000b81e853e000000000000803f0000000000000000fd62c93dd84b963ba44cb83be0a4da3d0b9555bf3d760abf00000000b81e853e000000000000803ffd62c93dd84b963bfd62c93d000000004b342b3cd5070b3ebd223f3226a17dbf00000000b81e853e000000000000803ffd62c93d00000000fd62c93dd84b96bba44cb83be0a4da3d0b95553f3d760abf00000000b81e853e000000000000803ffd62c93dd84b96bbfd62493e9ac38c3c0a10853c286e133e3a22c3be7eca69bf00000000b81e853e000000000000803ffd62493e9ac38c3cfd62493e0000000039e2b33ca882093e0000000066ae7dbf00000000b81e853e000000000000803ffd62493e00000000fd62493e9ac38cbc0a10853c286e133e3822c33e7fca69bf00000000b81e853e000000000000803ffd62493e9ac38cbc3e0a973ec8a2133d6315df3c51a5133e05665bbed35077bf00000000b81e853e000000000000803f3e0a973ec8a2133d3e0a973e0000000042620c3df37c0b3ec43619b11f9d7dbf00000000b81e853e000000000000803f3e0a973e000000003e0a973ec8a213bd6315df3c51a5133e04665b3ed35077bf00000000b81e853e000000000000803f3e0a973ec8a213bdfd62c93e4166733d59911d3d63fb123ed79a1dbe38447abf00000000b81e853e000000000000803ffd62c93e4166733dfd62c93e00000000a816413d4ef10c3e0000000042907dbf00000000b81e853e000000000000803ffd62c93e00000000fd62c93e416673bd59911d3d63fb123ed89a1d3e3a447abf00000000b81e853e000000000000803ffd62c93e416673bdbcbbfb3e0243af3d171c4c3d3db4113e0a2801be5f547bbf00000000b81e853e000000000000803fbcbbfb3e0243af3dbcbbfb3e000000007204773d2fbd0c3e0000000011927dbf00000000b81e853e000000000000803fbcbbfb3e00000000bcbbfb3e0243afbd171c4c3d3db4113e0a28013e5f547bbf00000000b81e853e000000000000803fbcbbfb3e0243afbd3e0a173ff2ede63d05aa7a3da5fa0e3ec17ae3bd72e47bbf00000000b81e853e000000000000803f3e0a173ff2ede63d3e0a173f00000000e190963d79710a3e07015d314aa67dbf00000000b81e853e000000000000803f3e0a173f000000003e0a173ff2ede6bd05aa7a3da5fa0e3ec17ae33d72e47bbf00000000b81e853e000000000000803f3e0a173ff2ede6bd9d36303f6f900e3ef15b943d52540a3e0de0d0bd5c4e7cbf00000000b81e853e000000000000803f9d36303f6f900e3e9d36303f000000006232b13d3fd8053e00000000c2cd7dbf00000000b81e853e000000000000803f9d36303f000000009d36303f6f900ebef15b943d53540a3e0de0d03d5c4e7cbf00000000b81e853e000000000000803f9d36303f6f900ebefd62493f5624273e57dfaa3df179033ea6d2c4bdaaaf7cbf00000000b81e853e000000000000803ffd62493f5624273efd62493f00000000cce1ca3d44a2fd3d7a759eb07a077ebf00000000b81e853e000000000000803ffd62493f00000000fd62493f562427be57dfaa3df079033ea3d2c43daaaf7cbf00000000b81e853e000000000000803ffd62493f562427be5c8f623f21693b3e3999c03d0a77f43da6aebcbdae127dbf00000000b81e853e000000000000803f5c8f623f21693b3e5c8f623f00000000301ae33d3388ea3d98940f31dc507ebf00000000b81e853e000000000000803f5c8f623f000000005c8f623f21693bbe3999c03d0a77f43da5aebc3daf127dbf00000000b81e853e000000000000803f5c8f623f21693bbebcbb7b3f4695493e8740d53dbfe4dc3d4024b7bd92797dbf00000000b81e853e000000000000803fbcbb7b3f4695493ebcbb7b3f00000000a156f93d6937d23d7a9e87b0d7a57ebf00000000b81e853e000000000000803fbcbb7b3f00000000bcbb7b3f469549be8740d53dbfe4dc3d4024b73d92797dbf00000000b81e853e000000000000803fbcbb7b3f469549be0e748a3f3bdf4f3e8788e83d6ef2bf3d8893b3bdfce17dbf00000000b81e853e000000000000803f0e748a3f3bdf4f3e0e748a3f000000001a89063e2383b43d86cb85b0ef007fbf00000000b81e853e000000000000803f0e748a3f000000000e748a3f3bdf4fbe8788e83d6ef2bf3d8893b33dfce17dbf00000000b81e853e000000000000803f0e748a3f3bdf4fbe3e0a973f727d4c3e4e20fa3da7ac9d3d6ed2b1bd3d457ebf00000000b81e853e000000000000803f3e0a973f727d4c3e3e0a973f00000000fbe30e3edc8d913da2328ab0465a7fbf00000000b81e853e000000000000803f3e0a973f000000003e0a973f727d4cbe4e20fa3da7ac9d3d6dd2b13d3d457ebf00000000b81e853e000000000000803f3e0a973f727d4cbe6da0a33f0551403e82ac043e87116e3d7cceb1bd54997ebf00000000b81e853e000000000000803f6da0a33f0551403e6da0a33f000000007e79153e6418543d0000000014a87fbf00000000b81e853e000000000000803f6da0a33f000000006da0a33f055140be82ac043e87116e3d7cceb13d54997ebf00000000b81e853e000000000000803f6da0a33f055140be9d36b03f4cc9323e9d550a3e99c1173da6a9b2bdfbd87ebf00000000b81e853e000000000000803f9d36b03f4cc9323e9d36b03f000000002e071a3e15cdf43c88759fb0bae27fbf00000000b81e853e000000000000803f9d36b03f000000009d36b03f4cc932be9d550a3e99c1173da6a9b23df9d87ebf00000000b81e853e000000000000803f9d36b03f4cc932becdccbc3f57a3243e4bbb0d3e47775a3c21edb3bdbffc7ebf00000000b81e853e000000000000803fcdccbc3f57a3243ecdccbc3f00000000904a1c3e3eeaac3b19cdad3017ff7fbf00000000b81e853e000000000000803fcdccbc3f00000000cdccbc3f57a324be4bbb0d3e45775a3c22edb33dbffc7ebf00000000b81e853e000000000000803fcdccbc3f57a324befd62c93f9d0c163eef930e3ede2250bc95a8b5bd60f87ebf00000000b81e853e000000000000803ffd62c93f9d0c163efd62c93f0000000012fe1b3e24ccadbc2057bf3041f17fbf00000000b81e853e000000000000803ffd62c93f00000000fd62c93f9d0c16beef930e3ede2250bc95a8b53d60f87ebf00000000b81e853e000000000000803ffd62c93f9d0c16be2df9d53f9632073eaeb60c3e6e4a1fbd1906b8bd1ec57ebf00000000b81e853e000000000000803f2df9d53f9632073e2df9d53f00000000b2fc183e51803ebd0000000015b97fbf00000000b81e853e000000000000803f2df9d53f000000002df9d53f963207beaeb60c3e6e4a1fbd1906b83d1ec57ebf00000000b81e853e000000000000803f2df9d53f963207be5c8fe23f5f85f03d8a61083e62767fbdf74dbbbd366d7ebf00000000b81e853e000000000000803f5c8fe23f5f85f03d5c8fe23f000000001888133e0d2c8dbd4d3ff0301c647fbf00000000b81e853e000000000000803f5c8fe23f000000005c8fe23f5f85f0bd8a61083e62767fbdf74dbb3d366d7ebf00000000b81e853e000000000000803f5c8fe23f5f85f0bd8c25ef3fcbd4d23dcadd013ed7aba9bd1de6bfbd60fd7dbf00000000b81e853e000000000000803f8c25ef3fcbd4d23d8c25ef3f00000000f3ec0b3ea3ebb4bdc78989b0c7ff7ebf00000000b81e853e000000000000803f8c25ef3f000000008c25ef3fcbd4d2bdcadd013ed7aba9bd1de6bf3d60fd7dbf00000000b81e853e000000000000803f8c25ef3fcbd4d2bdbcbbfb3f4caeb53dece9f23d917fcdbd835ec6bd887f7dbf00000000b81e853e000000000000803fbcbbfb3f4caeb53dbcbbfb3f00000000f477023e7c8bd6bd0000000067977ebf00000000b81e853e000000000000803fbcbbfb3f00000000bcbbfb3f4caeb5bdece9f23d917fcdbd835ec63d887f7dbf00000000b81e853e000000000000803fbcbbfb3f4caeb5bdf6280440d86c993dbfe1de3d1e46ebbdbd8ccfbd73fa7cbf00000000b81e853e000000000000803ff6280440d86c993df6280440000000009bebee3d941ff2bd1deebe3064347ebf00000000b81e853e000000000000803ff628044000000000f6280440d86c99bdbfe1de3d1e46ebbdbe8ccf3d73fa7cbf00000000b81e853e000000000000803ff6280440d86c99bd0e740a409dd67c3d3937c83d888901be70bedcbd9c707cbf00000000b81e853e000000000000803f0e740a409dd67c3d0e740a40000000005a66d63d1be003be0000000040de7dbf00000000b81e853e000000000000803f0e740a40000000000e740a409dd67cbd3937c83d888901be72bedc3d9c707cbf00000000b81e853e000000000000803f0e740a409dd67cbd26bf104040094a3d2b7faf3def7c0abe971bf0bdb6dd7bbf00000000b81e853e000000000000803f26bf104040094a3d26bf1040000000008cf9bb3d0fc50bbe00000000a49a7dbf00000000b81e853e000000000000803f26bf10400000000026bf104040094abd2b7faf3def7c0abe971bf03db6dd7bbf00000000b81e853e000000000000803f26bf104040094abd3e0a174061271b3dfa4e953dd68410bef8b906be85307bbf00000000b81e853e000000000000803f3e0a174061271b3d3e0a1740000000008c3ea03d17d010bef0dec2315a6d7dbf00000000b81e853e000000000000803f3e0a1740000000003e0a174061271bbdfa4e953dd68410bef8b9063e85307bbf00000000b81e853e000000000000803f3e0a174061271bbd56551d40bacde13c7479743daaa013be060b1ebeb6397abf00000000b81e853e000000000000803f56551d40bacde13c56551d4000000000c3ce833d971a13be000000003e587dbf00000000b81e853e000000000000803f56551d400000000056551d40bacde1bc7479743daaa013be060b1e3eb6397abf00000000b81e853e000000000000803f56551d40bacde1bc6da02340f2fa973c20be3d3d35b313beb5c345be937378bf00000000b81e853e000000000000803f6da02340f2fa973c6da023400000000011874e3dbed212be56245131d75a7dbf00000000b81e853e000000000000803f6da02340000000006da02340f2fa97bc20be3d3d35b313beb5c3453e937378bf00000000b81e853e000000000000803f6da02340f2fa97bc85eb29405c84343cac9a073de42110bef75588beb71c74bf00000000b81e853e000000000000803f85eb29405c84343c85eb2940000000008e6c163d7f6d10be904639b2de707dbf00000000b81e853e000000000000803f85eb29400000000085eb29405c8434bcac9a073de42110bef655883eb71c74bf00000000b81e853e000000000000803f85eb29405c8434bc9d363040f13ba83bc57da63c4a8600be2e98d9be0d7e65bf00000000b81e853e000000000000803f9d363040f13ba83b9d363040000000005601c13c35ae03be00000000e1df7dbf00000000b81e853e000000000000803f9d363040000000009d363040f13ba8bbc57da63c4a8600be2c98d93e0e7e65bf00000000b81e853e000000000000803f9d363040f13ba8bbb5813640b9ed0c360dd9373c792ed8bdd2b707bffe5f57bf00000000b81e853e000000000000803fb5813640b9ed0c36b5813640000000000dd9373c95fcfebd000000000f027ebf00000000b81e853e000000000000803fb581364000000000b5813640b9ed0cb60dd9373c782ed8bdd2b7073fff5f57bf00000000b81e853e000000000000803fb5813640b9ed0cb6cdcc3c40b9ed0c360000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c40b9ed0c36cdcc3c40000000000000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c4000000000cdcc3c40b9ed0cb60000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c40b9ed0cb6 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 1.475, y: 0, z: 0.07906409} + m_Extent: {x: 1.475, y: 0.203, z: 0.083564095} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!1 &1311014921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1311014925} + - component: {fileID: 1311014924} + - component: {fileID: 1311014923} + - component: {fileID: 1311014922} + m_Layer: 0 + m_Name: Leaf Generator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1311014922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311014921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ea4550bcec5ad4f4aba095cca2b42cb4, type: 3} + m_Name: + m_EditorClassIdentifier: + length: 3 + width: 0.21 + thickness: 0.01 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4106925 + value: 0.75787115 + inSlope: -1.422605 + outSlope: -1.422605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.16974394 + - serializedVersion: 3 + time: 0.98 + value: 0 + inSlope: -0.26367244 + outSlope: -0.26367244 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.15804166 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + foldCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.1017436 + outSlope: 0.1017436 + tangentMode: 34 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.51787984 + value: 0.05269096 + inSlope: -0.0037732497 + outSlope: -0.0037732497 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.1092901 + outSlope: -0.1092901 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + infold: 0.03 + framesBetweenSteps: 30 + numberOfAnimationSteps: 30 + constantResolution: 1 + commentSpace: 1 + simplification: 0 + roughEdges: 0 + roughEdgesSize: 10 + numberOfBranchesPairs: 3 + showBranches: 0 + colision: 0 + colisionJoint: {fileID: 0} + maxNumberOfSteps: 30 +--- !u!23 &1311014923 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311014921} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9a5d8dec59e668645ae5387a1a42e0e2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1311014924 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311014921} + m_Mesh: {fileID: 1031237511} +--- !u!4 &1311014925 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311014921} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity Project/Assets/Scenes/SampleScene.unity.meta b/Unity Project/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..952bd1e --- /dev/null +++ b/Unity Project/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9fc0d4010bbf28b4594072e72b8655ab +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes/SweepSurface.unity b/Unity Project/Assets/Scenes/SweepSurface.unity new file mode 100644 index 0000000..237ade5 --- /dev/null +++ b/Unity Project/Assets/Scenes/SweepSurface.unity @@ -0,0 +1,682 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 705507994} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!43 &706333106 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 1440 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 183 + localAABB: + m_Center: {x: 1.4258333, y: 0, z: 0.07906409} + m_Extent: {x: 1.4258333, y: 0.203, z: 0.083564095} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b500b600b200b600b300b200b400b500b200b100b400b200590058005500560059005500580057005500570054005500b200b300af00b300b000af00b100b200af00ae00b100af00560055005200530056005200550054005200540051005200af00b000ac00b000ad00ac00ae00af00ac00ab00ae00ac00530052004f00500053004f00520051004f0051004e004f00ac00ad00a900ad00aa00a900ab00ac00a900a800ab00a90050004f004c004d0050004c004f004e004c004e004b004c00a900aa00a600aa00a700a600a800a900a600a500a800a6004d004c0049004a004d0049004c004b0049004b0048004900a600a700a300a700a400a300a500a600a300a200a500a3004a004900460047004a004600490048004600480045004600a300a400a000a400a100a000a200a300a0009f00a200a000470046004300440047004300460045004300450042004300a000a1009d00a1009e009d009f00a0009d009c009f009d0044004300400041004400400043004200400042003f0040009d009e009a009e009b009a009c009d009a0099009c009a00410040003d003e0041003d0040003f003d003f003c003d009a009b0097009b009800970099009a0097009600990097003e003d003a003b003e003a003d003c003a003c0039003a009700980094009800950094009600970094009300960094003b003a00370038003b0037003a0039003700390036003700940095009100950092009100930094009100900093009100380037003400350038003400370036003400360033003400910092008e0092008f008e00900091008e008d0090008e003500340031003200350031003400330031003300300031008e008f008b008f008c008b008d008e008b008a008d008b00320031002e002f0032002e00310030002e0030002d002e008b008c0088008c00890088008a008b00880087008a0088002f002e002b002c002f002b002e002d002b002d002a002b008800890085008900860085008700880085008400870085002c002b00280029002c0028002b002a0028002a0027002800850086008200860083008200840085008200810084008200290028002500260029002500280027002500270024002500820083007f00830080007f00810082007f007e0081007f002600250022002300260022002500240022002400210022007f0080007c0080007d007c007e007f007c007b007e007c00230022001f00200023001f00220021001f0021001e001f007c007d0079007d007a0079007b007c00790078007b00790020001f001c001d0020001c001f001e001c001e001b001c0079007a0076007a00770076007800790076007500780076001d001c0019001a001d0019001c001b0019001b00180019007600770073007700740073007500760073007200750073001a001900160017001a0016001900180016001800150016007300740070007400710070007200730070006f0072007000170016001300140017001300160015001300150012001300700071006d0071006e006d006f0070006d006c006f006d0014001300100011001400100013001200100012000f0010006d006e006a006e006b006a006c006d006a0069006c006a00110010000d000e0011000d0010000f000d000f000c000d006a006b0067006b006800670069006a0067006600690067000e000d000a000b000e000a000d000c000a000c0009000a006700680064006800650064006600670064006300660064000b000a00070008000b0007000a0009000700090006000700640065006100650062006100630064006100600063006100080007000400050008000400070006000400060003000400610062005e0062005f005e00600061005e005d0060005e00050004000100020005000100040003000100030000000100 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 186 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 40 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 8928 + _typelessdata: 0000000000000000bd7493bbd9d83ebdd2b87f3f0000000000000000b81e853e000000000000803f000000000000000000000000000000000ad7233c54d57bbe5b5106343823783f00000000b81e853e000000000000803f00000000000000000000000000000000bd7493bbd9d83ebdd2b87fbf0000000000000000b81e853e000000000000803f0000000000000000fd62c93dd84b963ba44cb83b6b19a1bdc5de793f0bab4f3e00000000b81e853e000000000000803ffd62c93dd84b963bfd62c93d00000000aa85a73cdae73abe0000000013b37b3f00000000b81e853e000000000000803ffd62c93d00000000fd62c93dd84b96bba44cb83b6b19a1bdc5de79bf0bab4f3e00000000b81e853e000000000000803ffd62c93dd84b96bbfd62493e9ac38c3c0a10853ccf4d1cbe8c85413fb4f7223f00000000b81e853e000000000000803ffd62493e9ac38c3cfd62493e00000000dfe6023d657f24be00000000deac7c3f00000000b81e853e000000000000803ffd62493e00000000fd62493e9ac38cbc0a10853ccf4d1cbe8c8541bfb3f7223f00000000b81e853e000000000000803ffd62493e9ac38cbc3e0a973ec8a2133d6315df3c61ef2dbe9ecdf53e9b515c3f00000000b81e853e000000000000803f3e0a973ec8a2133d3e0a973e000000000458353d716b1dbe2fd198b1f7f47c3f00000000b81e853e000000000000803f3e0a973e000000003e0a973ec8a213bd6315df3c61ef2dbe9ecdf5be9b515c3f00000000b81e853e000000000000803f3e0a973ec8a213bdfd62c93e4166733d59911d3dded92abe873ea73e4c286e3f00000000b81e853e000000000000803ffd62c93e4166733dfd62c93e000000006a0c6a3d67da19be0000000010187d3f00000000b81e853e000000000000803ffd62c93e00000000fd62c93e416673bd59911d3ddfd92abe873ea7be4c286e3f00000000b81e853e000000000000803ffd62c93e416673bdbcbbfb3e0243af3d171c4c3d14d424be29037d3eb79d743f00000000b81e853e000000000000803fbcbbfb3e0243af3dbcbbfb3e000000001afd8f3d726816beedb88db130397d3f00000000b81e853e000000000000803fbcbbfb3e00000000bcbbfb3e0243afbd171c4c3d14d424be2a037dbeb79d743f00000000b81e853e000000000000803fbcbbfb3e0243afbd3e0a173ff2ede63d05aa7a3dbfe41dbe75494f3eaa92773f00000000b81e853e000000000000803f3e0a173ff2ede63d3e0a173f00000000c20bab3d1cc811beadc75cb177647d3f00000000b81e853e000000000000803f3e0a173f000000003e0a173ff2ede6bd05aa7a3dbfe41dbe75494fbeaa92773f00000000b81e853e000000000000803f3e0a173ff2ede6bd9d36303f6f900e3ef15b943d8ab915be589e333e5c3c793f00000000b81e853e000000000000803f9d36303f6f900e3e9d36303f0000000043adc53d755a0bbea97c36b1509e7d3f00000000b81e853e000000000000803f9d36303f000000009d36303f6f900ebef15b943d8ab915be589e33be5c3c793f00000000b81e853e000000000000803f9d36303f6f900ebefd62493f5624273e57dfaa3d1bd60bbe3103223eb2587a3f00000000b81e853e000000000000803ffd62493f5624273efd62493f00000000ad5cdf3d65c402be7d611e316fe77d3f00000000b81e853e000000000000803ffd62493f00000000fd62493f562427be57dfaa3d1dd60bbe330322beb4587a3f00000000b81e853e000000000000803ffd62493f562427be5c8f623f21693b3e3999c03d92a2ffbdd597163e35317b3f00000000b81e853e000000000000803f5c8f623f21693b3e5c8f623f000000001195f73de58cefbd078a0f31253e7e3f00000000b81e853e000000000000803f5c8f623f000000005c8f623f21693bbe3999c03d92a2ffbdd49716be34317b3f00000000b81e853e000000000000803f5c8f623f21693bbebcbb7b3f4695493e8740d53d9d9ce2bd75680f3eade37b3f00000000b81e853e000000000000803fbcbb7b3f4695493ebcbb7b3f00000000c1e8063e6f53d4bd00000000d89e7e3f00000000b81e853e000000000000803fbcbb7b3f00000000bcbb7b3f469549be8740d53d9d9ce2bd75680fbeade37b3f00000000b81e853e000000000000803fbcbb7b3f469549be0e748a3f3bdf4f3e8788e83daad9bfbdcd8b0b3eb5797c3f00000000b81e853e000000000000803f0e748a3f3bdf4f3e0e748a3f000000008bc6103ec863b3bd30cd05b11b047f3f00000000b81e853e000000000000803f0e748a3f000000000e748a3f3bdf4fbe8788e83daad9bfbdcd8b0bbeb5797c3f00000000b81e853e000000000000803f0e748a3f3bdf4fbe3e0a973f727d4c3e4e20fa3dffa697bd5cd30a3e55ed7c3f00000000b81e853e000000000000803f3e0a973f727d4c3e3e0a973f000000006c21193e5c5e8dbdb9370ab1ad637f3f00000000b81e853e000000000000803f3e0a973f000000003e0a973f727d4cbe4e20fa3dffa697bd5cd30abe55ed7c3f00000000b81e853e000000000000803f3e0a973f727d4cbe6da0a33f0551403e82ac043eafc55abd1d380d3e592f7d3f00000000b81e853e000000000000803f6da0a33f0551403e6da0a33f00000000efb61f3e71214abda3ae133126b07f3f00000000b81e853e000000000000803f6da0a33f000000006da0a33f055140be82ac043eafc55abd1d380dbe592f7d3f00000000b81e853e000000000000803f6da0a33f055140be9d36b03f4cc9323e9d550a3ec71302bdef60113ec7467d3f00000000b81e853e000000000000803f9d36b03f4cc9323e9d36b03f000000009f44243e0242debcbc781f31e0e77f3f00000000b81e853e000000000000803f9d36b03f000000009d36b03f4cc932be9d550a3ec71302bdee6011bec7467d3f00000000b81e853e000000000000803f9d36b03f4cc932becdccbc3f57a3243e4bbb0d3ed174f7bbce93163eb2357d3f00000000b81e853e000000000000803fcdccbc3f57a3243ecdccbc3f000000000188263edbfc0ebb00000000d9ff7f3f00000000b81e853e000000000000803fcdccbc3f00000000cdccbc3f57a324be4bbb0d3ecf74f7bbce9316beb2357d3f00000000b81e853e000000000000803fcdccbc3f57a324befd62c93f9d0c163eef930e3e31609b3c44fa1c3e6ded7c3f00000000b81e853e000000000000803ffd62c93f9d0c163efd62c93f00000000833b263ed832ca3c0000000008ec7f3f00000000b81e853e000000000000803ffd62c93f00000000fd62c93f9d0c16beef930e3e32609b3c44fa1cbe6ded7c3f00000000b81e853e000000000000803ffd62c93f9d0c16be2df9d53f9632073eaeb60c3ebfe53a3d4aea243e5a637c3f00000000b81e853e000000000000803f2df9d53f9632073e2df9d53f00000000233a233e415f4e3d72fb5431c4ac7f3f00000000b81e853e000000000000803f2df9d53f000000002df9d53f963207beaeb60c3ec0e53a3d49ea24be59637c3f00000000b81e853e000000000000803f2df9d53f963207be5c8fe23f5f85f03d8a61083ebb8a8e3d6ee72e3ea39b7b3f00000000b81e853e000000000000803f5c8fe23f5f85f03d5c8fe23f0000000089c51d3eb00a963d00000000e14f7f3f00000000b81e853e000000000000803f5c8fe23f000000005c8fe23f5f85f0bd8a61083eba8a8e3d6de72ebea39b7b3f00000000b81e853e000000000000803f5c8fe23f5f85f0bd8c25ef3fcbd4d23dcadd013e9984b93da7ab3b3ede977a3f00000000b81e853e000000000000803f8c25ef3fcbd4d23d8c25ef3f00000000642a163ee3dbbe3d257a09b1cbe27e3f00000000b81e853e000000000000803f8c25ef3f000000008c25ef3fcbd4d2bdcadd013e9984b93da7ab3bbede977a3f00000000b81e853e000000000000803f8c25ef3fcbd4d2bdbcbbfb3f4caeb53dece9f23dc961de3deb404c3e8a4f793f00000000b81e853e000000000000803fbcbbfb3f4caeb53dbcbbfb3f0000000065b50c3e47bce13d00000000b0707e3f00000000b81e853e000000000000803fbcbbfb3f00000000bcbbfb3f4caeb5bdece9f23dc961de3deb404cbe8a4f793f00000000b81e853e000000000000803fbcbbfb3f4caeb5bdf6280440d86c993dbfe1de3da11ffd3d382f623ef7a9773f00000000b81e853e000000000000803ff6280440d86c993df6280440000000003eb3013ec7d1fe3dd0c8be31bb027e3f00000000b81e853e000000000000803ff628044000000000f6280440d86c99bdbfe1de3da11ffd3d362f62bef7a9773f00000000b81e853e000000000000803ff6280440d86c99bd0e740a409dd67c3d3937c83d7cd30a3eb6c97f3e6471753f00000000b81e853e000000000000803f0e740a409dd67c3d0e740a40000000003be1ea3db3270b3e000000000da07d3f00000000b81e853e000000000000803f0e740a40000000000e740a409dd67cbd3937c83d7cd30a3eb6c97fbe6471753f00000000b81e853e000000000000803f0e740a409dd67cbd26bf104040094a3d2b7faf3d5ed5133efb57943e5037723f00000000b81e853e000000000000803f26bf104040094a3d26bf1040000000006d74d03dfb3d143ed36693319e4d7d3f00000000b81e853e000000000000803f26bf10400000000026bf104040094abd2b7faf3d5ed5133efb5794be5037723f00000000b81e853e000000000000803f26bf104040094abd3e0a174061271b3dfa4e953deb2e193e694eb13e29166d3f00000000b81e853e000000000000803f3e0a174061271b3d3e0a1740000000006db9b43d8de01a3e00000000110e7d3f00000000b81e853e000000000000803f3e0a1740000000003e0a174061271bbdfa4e953deb2e193e694eb1be29166d3f00000000b81e853e000000000000803f3e0a174061271bbd56551d40bacde13c7479743de9df193e3636db3ef520643f00000000b81e853e000000000000803f56551d40bacde13c56551d4000000000a449983d266a1f3eef5608b2f8e07c3f00000000b81e853e000000000000803f56551d400000000056551d40bacde1bc7479743de9df193e3636dbbef520643f00000000b81e853e000000000000803f56551d40bacde1bc6da02340f2fa973c20be3d3d3e80133eb5f80b3f5326533f00000000b81e853e000000000000803f6da02340f2fa973c6da0234000000000d47c773d6b92223e2fa55032cfc07c3f00000000b81e853e000000000000803f6da02340000000006da02340f2fa97bc20be3d3d3e80133eb5f80bbf5326533f00000000b81e853e000000000000803f6da02340f2fa97bc85eb29405c84343cac9a073dc1fc003e9834353f44ef313f00000000b81e853e000000000000803f85eb29405c84343c85eb29400000000050623f3d2934263e37aab8b2ff9a7c3f00000000b81e853e000000000000803f85eb29400000000085eb29405c8434bcac9a073dc1fc003e983435bf44ef313f00000000b81e853e000000000000803f85eb29405c8434bc9d363040f13ba83bc57da63c0242b83d8a30613fec1fef3e00000000b81e853e000000000000803f9d363040f13ba83b9d363040000000006e76093d74e6353ef29bf333baed7b3f00000000b81e853e000000000000803f9d363040000000009d363040f13ba8bbc57da63c0242b83d8a3061bfea1fef3e00000000b81e853e000000000000803f9d363040f13ba8bbb5813640b9ed0c360dd9373c389da63da31a6e3fe265b73e00000000b81e853e000000000000803fb5813640b9ed0c36b5813640000000007b7c393cf4e1613e00000000a5b1793f00000000b81e853e000000000000803fb581364000000000b5813640b9ed0cb60dd9373c3b9da63da41a6ebfe465b73e00000000b81e853e000000000000803fb5813640b9ed0cb6cdcc3c40b9ed0c360000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c40b9ed0c36cdcc3c400000000017b7d13800000000000000000000000000000000b81e853e000000000000803fcdcc3c4000000000cdcc3c40b9ed0cb60000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c40b9ed0cb60000000000000000bd7493bbdad83e3dd3b87fbf0000000000000000b81e853e000000000000803f0000000000000000000000000000000000000000a9e8193ee5ff88b386177dbf00000000b81e853e000000000000803f00000000000000000000000000000000bd7493bbdad83e3dd3b87f3f0000000000000000b81e853e000000000000803f0000000000000000fd62c93dd84b963ba44cb83be0a4da3d0b9555bf3d760abf00000000b81e853e000000000000803ffd62c93dd84b963bfd62c93d000000004b342b3cd5070b3ebd223f3226a17dbf00000000b81e853e000000000000803ffd62c93d00000000fd62c93dd84b96bba44cb83be0a4da3d0b95553f3d760abf00000000b81e853e000000000000803ffd62c93dd84b96bbfd62493e9ac38c3c0a10853c286e133e3a22c3be7eca69bf00000000b81e853e000000000000803ffd62493e9ac38c3cfd62493e0000000039e2b33ca882093e0000000066ae7dbf00000000b81e853e000000000000803ffd62493e00000000fd62493e9ac38cbc0a10853c286e133e3822c33e7fca69bf00000000b81e853e000000000000803ffd62493e9ac38cbc3e0a973ec8a2133d6315df3c51a5133e05665bbed35077bf00000000b81e853e000000000000803f3e0a973ec8a2133d3e0a973e0000000042620c3df37c0b3ec43619b11f9d7dbf00000000b81e853e000000000000803f3e0a973e000000003e0a973ec8a213bd6315df3c51a5133e04665b3ed35077bf00000000b81e853e000000000000803f3e0a973ec8a213bdfd62c93e4166733d59911d3d63fb123ed79a1dbe38447abf00000000b81e853e000000000000803ffd62c93e4166733dfd62c93e00000000a816413d4ef10c3e0000000042907dbf00000000b81e853e000000000000803ffd62c93e00000000fd62c93e416673bd59911d3d63fb123ed89a1d3e3a447abf00000000b81e853e000000000000803ffd62c93e416673bdbcbbfb3e0243af3d171c4c3d3db4113e0a2801be5f547bbf00000000b81e853e000000000000803fbcbbfb3e0243af3dbcbbfb3e000000007204773d2fbd0c3e0000000011927dbf00000000b81e853e000000000000803fbcbbfb3e00000000bcbbfb3e0243afbd171c4c3d3db4113e0a28013e5f547bbf00000000b81e853e000000000000803fbcbbfb3e0243afbd3e0a173ff2ede63d05aa7a3da5fa0e3ec17ae3bd72e47bbf00000000b81e853e000000000000803f3e0a173ff2ede63d3e0a173f00000000e190963d79710a3e07015d314aa67dbf00000000b81e853e000000000000803f3e0a173f000000003e0a173ff2ede6bd05aa7a3da5fa0e3ec17ae33d72e47bbf00000000b81e853e000000000000803f3e0a173ff2ede6bd9d36303f6f900e3ef15b943d52540a3e0de0d0bd5c4e7cbf00000000b81e853e000000000000803f9d36303f6f900e3e9d36303f000000006232b13d3fd8053e00000000c2cd7dbf00000000b81e853e000000000000803f9d36303f000000009d36303f6f900ebef15b943d53540a3e0de0d03d5c4e7cbf00000000b81e853e000000000000803f9d36303f6f900ebefd62493f5624273e57dfaa3df179033ea6d2c4bdaaaf7cbf00000000b81e853e000000000000803ffd62493f5624273efd62493f00000000cce1ca3d44a2fd3d7a759eb07a077ebf00000000b81e853e000000000000803ffd62493f00000000fd62493f562427be57dfaa3df079033ea3d2c43daaaf7cbf00000000b81e853e000000000000803ffd62493f562427be5c8f623f21693b3e3999c03d0a77f43da6aebcbdae127dbf00000000b81e853e000000000000803f5c8f623f21693b3e5c8f623f00000000301ae33d3388ea3d98940f31dc507ebf00000000b81e853e000000000000803f5c8f623f000000005c8f623f21693bbe3999c03d0a77f43da5aebc3daf127dbf00000000b81e853e000000000000803f5c8f623f21693bbebcbb7b3f4695493e8740d53dbfe4dc3d4024b7bd92797dbf00000000b81e853e000000000000803fbcbb7b3f4695493ebcbb7b3f00000000a156f93d6937d23d7a9e87b0d7a57ebf00000000b81e853e000000000000803fbcbb7b3f00000000bcbb7b3f469549be8740d53dbfe4dc3d4024b73d92797dbf00000000b81e853e000000000000803fbcbb7b3f469549be0e748a3f3bdf4f3e8788e83d6ef2bf3d8893b3bdfce17dbf00000000b81e853e000000000000803f0e748a3f3bdf4f3e0e748a3f000000001a89063e2383b43d86cb85b0ef007fbf00000000b81e853e000000000000803f0e748a3f000000000e748a3f3bdf4fbe8788e83d6ef2bf3d8893b33dfce17dbf00000000b81e853e000000000000803f0e748a3f3bdf4fbe3e0a973f727d4c3e4e20fa3da7ac9d3d6ed2b1bd3d457ebf00000000b81e853e000000000000803f3e0a973f727d4c3e3e0a973f00000000fbe30e3edc8d913da2328ab0465a7fbf00000000b81e853e000000000000803f3e0a973f000000003e0a973f727d4cbe4e20fa3da7ac9d3d6dd2b13d3d457ebf00000000b81e853e000000000000803f3e0a973f727d4cbe6da0a33f0551403e82ac043e87116e3d7cceb1bd54997ebf00000000b81e853e000000000000803f6da0a33f0551403e6da0a33f000000007e79153e6418543d0000000014a87fbf00000000b81e853e000000000000803f6da0a33f000000006da0a33f055140be82ac043e87116e3d7cceb13d54997ebf00000000b81e853e000000000000803f6da0a33f055140be9d36b03f4cc9323e9d550a3e99c1173da6a9b2bdfbd87ebf00000000b81e853e000000000000803f9d36b03f4cc9323e9d36b03f000000002e071a3e15cdf43c88759fb0bae27fbf00000000b81e853e000000000000803f9d36b03f000000009d36b03f4cc932be9d550a3e99c1173da6a9b23df9d87ebf00000000b81e853e000000000000803f9d36b03f4cc932becdccbc3f57a3243e4bbb0d3e47775a3c21edb3bdbffc7ebf00000000b81e853e000000000000803fcdccbc3f57a3243ecdccbc3f00000000904a1c3e3eeaac3b19cdad3017ff7fbf00000000b81e853e000000000000803fcdccbc3f00000000cdccbc3f57a324be4bbb0d3e45775a3c22edb33dbffc7ebf00000000b81e853e000000000000803fcdccbc3f57a324befd62c93f9d0c163eef930e3ede2250bc95a8b5bd60f87ebf00000000b81e853e000000000000803ffd62c93f9d0c163efd62c93f0000000012fe1b3e24ccadbc2057bf3041f17fbf00000000b81e853e000000000000803ffd62c93f00000000fd62c93f9d0c16beef930e3ede2250bc95a8b53d60f87ebf00000000b81e853e000000000000803ffd62c93f9d0c16be2df9d53f9632073eaeb60c3e6e4a1fbd1906b8bd1ec57ebf00000000b81e853e000000000000803f2df9d53f9632073e2df9d53f00000000b2fc183e51803ebd0000000015b97fbf00000000b81e853e000000000000803f2df9d53f000000002df9d53f963207beaeb60c3e6e4a1fbd1906b83d1ec57ebf00000000b81e853e000000000000803f2df9d53f963207be5c8fe23f5f85f03d8a61083e62767fbdf74dbbbd366d7ebf00000000b81e853e000000000000803f5c8fe23f5f85f03d5c8fe23f000000001888133e0d2c8dbd4d3ff0301c647fbf00000000b81e853e000000000000803f5c8fe23f000000005c8fe23f5f85f0bd8a61083e62767fbdf74dbb3d366d7ebf00000000b81e853e000000000000803f5c8fe23f5f85f0bd8c25ef3fcbd4d23dcadd013ed7aba9bd1de6bfbd60fd7dbf00000000b81e853e000000000000803f8c25ef3fcbd4d23d8c25ef3f00000000f3ec0b3ea3ebb4bdc78989b0c7ff7ebf00000000b81e853e000000000000803f8c25ef3f000000008c25ef3fcbd4d2bdcadd013ed7aba9bd1de6bf3d60fd7dbf00000000b81e853e000000000000803f8c25ef3fcbd4d2bdbcbbfb3f4caeb53dece9f23d917fcdbd835ec6bd887f7dbf00000000b81e853e000000000000803fbcbbfb3f4caeb53dbcbbfb3f00000000f477023e7c8bd6bd0000000067977ebf00000000b81e853e000000000000803fbcbbfb3f00000000bcbbfb3f4caeb5bdece9f23d917fcdbd835ec63d887f7dbf00000000b81e853e000000000000803fbcbbfb3f4caeb5bdf6280440d86c993dbfe1de3d1e46ebbdbd8ccfbd73fa7cbf00000000b81e853e000000000000803ff6280440d86c993df6280440000000009bebee3d941ff2bd1deebe3064347ebf00000000b81e853e000000000000803ff628044000000000f6280440d86c99bdbfe1de3d1e46ebbdbe8ccf3d73fa7cbf00000000b81e853e000000000000803ff6280440d86c99bd0e740a409dd67c3d3937c83d888901be70bedcbd9c707cbf00000000b81e853e000000000000803f0e740a409dd67c3d0e740a40000000005a66d63d1be003be0000000040de7dbf00000000b81e853e000000000000803f0e740a40000000000e740a409dd67cbd3937c83d888901be72bedc3d9c707cbf00000000b81e853e000000000000803f0e740a409dd67cbd26bf104040094a3d2b7faf3def7c0abe971bf0bdb6dd7bbf00000000b81e853e000000000000803f26bf104040094a3d26bf1040000000008cf9bb3d0fc50bbe00000000a49a7dbf00000000b81e853e000000000000803f26bf10400000000026bf104040094abd2b7faf3def7c0abe971bf03db6dd7bbf00000000b81e853e000000000000803f26bf104040094abd3e0a174061271b3dfa4e953dd68410bef8b906be85307bbf00000000b81e853e000000000000803f3e0a174061271b3d3e0a1740000000008c3ea03d17d010bef0dec2315a6d7dbf00000000b81e853e000000000000803f3e0a1740000000003e0a174061271bbdfa4e953dd68410bef8b9063e85307bbf00000000b81e853e000000000000803f3e0a174061271bbd56551d40bacde13c7479743daaa013be060b1ebeb6397abf00000000b81e853e000000000000803f56551d40bacde13c56551d4000000000c3ce833d971a13be000000003e587dbf00000000b81e853e000000000000803f56551d400000000056551d40bacde1bc7479743daaa013be060b1e3eb6397abf00000000b81e853e000000000000803f56551d40bacde1bc6da02340f2fa973c20be3d3d35b313beb5c345be937378bf00000000b81e853e000000000000803f6da02340f2fa973c6da023400000000011874e3dbed212be56245131d75a7dbf00000000b81e853e000000000000803f6da02340000000006da02340f2fa97bc20be3d3d35b313beb5c3453e937378bf00000000b81e853e000000000000803f6da02340f2fa97bc85eb29405c84343cac9a073de42110bef75588beb71c74bf00000000b81e853e000000000000803f85eb29405c84343c85eb2940000000008e6c163d7f6d10be904639b2de707dbf00000000b81e853e000000000000803f85eb29400000000085eb29405c8434bcac9a073de42110bef655883eb71c74bf00000000b81e853e000000000000803f85eb29405c8434bc9d363040f13ba83bc57da63c4a8600be2e98d9be0d7e65bf00000000b81e853e000000000000803f9d363040f13ba83b9d363040000000005601c13c35ae03be00000000e1df7dbf00000000b81e853e000000000000803f9d363040000000009d363040f13ba8bbc57da63c4a8600be2c98d93e0e7e65bf00000000b81e853e000000000000803f9d363040f13ba8bbb5813640b9ed0c360dd9373c792ed8bdd2b707bffe5f57bf00000000b81e853e000000000000803fb5813640b9ed0c36b5813640000000000dd9373c95fcfebd000000000f027ebf00000000b81e853e000000000000803fb581364000000000b5813640b9ed0cb60dd9373c782ed8bdd2b7073fff5f57bf00000000b81e853e000000000000803fb5813640b9ed0cb6cdcc3c40b9ed0c360000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c40b9ed0c36cdcc3c40000000000000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c4000000000cdcc3c40b9ed0cb60000000000000000000000000000000000000000b81e853e000000000000803fcdcc3c40b9ed0cb6 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 1.475, y: 0, z: 0.07906409} + m_Extent: {x: 1.475, y: 0.203, z: 0.083564095} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + - component: {fileID: 963194229} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &963194229 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: be76e5f14cfee674cb30b491fb72b09b, type: 3} + m_Name: + m_EditorClassIdentifier: + boost: 3.5 + positionLerpTime: 0.2 + mouseSensitivityCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 5 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 2.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationLerpTime: 0.01 + invertY: 0 +--- !u!1 &1311014921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1311014925} + - component: {fileID: 1311014924} + - component: {fileID: 1311014923} + - component: {fileID: 1311014922} + m_Layer: 0 + m_Name: Leaf Generator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1311014922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311014921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ea4550bcec5ad4f4aba095cca2b42cb4, type: 3} + m_Name: + m_EditorClassIdentifier: + length: 3 + width: 0.21 + thickness: 0.01 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4106925 + value: 0.75787115 + inSlope: -1.422605 + outSlope: -1.422605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.16974394 + - serializedVersion: 3 + time: 0.98 + value: 0 + inSlope: -0.26367244 + outSlope: -0.26367244 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.15804166 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + foldCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.1017436 + outSlope: 0.1017436 + tangentMode: 34 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.51787984 + value: 0.05269096 + inSlope: -0.0037732497 + outSlope: -0.0037732497 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.1092901 + outSlope: -0.1092901 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + infold: 0.03 + framesBetweenSteps: 30 + numberOfAnimationSteps: 30 + constantResolution: 1 + commentSpace: 1 + simplification: 0 + roughEdges: 0 + roughEdgesSize: 10 + numberOfBranchesPairs: 3 + showBranches: 0 + colision: 0 + colisionJoint: {fileID: 0} + maxNumberOfSteps: 30 +--- !u!23 &1311014923 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311014921} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1311014924 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311014921} + m_Mesh: {fileID: 706333106} +--- !u!4 &1311014925 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311014921} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity Project/Assets/Scenes/SweepSurface.unity.meta b/Unity Project/Assets/Scenes/SweepSurface.unity.meta new file mode 100644 index 0000000..5d74cdb --- /dev/null +++ b/Unity Project/Assets/Scenes/SweepSurface.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f16af509e28e6a41823fe485cf5bb62 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts.meta b/Unity Project/Assets/Scripts.meta new file mode 100644 index 0000000..ede9b96 --- /dev/null +++ b/Unity Project/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e7357bb137be2e468b4924e72b9e943 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/AnabaenaTurtle.cs b/Unity Project/Assets/Scripts/AnabaenaTurtle.cs new file mode 100644 index 0000000..db8bc7a --- /dev/null +++ b/Unity Project/Assets/Scripts/AnabaenaTurtle.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; +using ConsoleLSystem; +using System; + +public class AnabaenaTurtle : TurtleLSystem { + + protected override void initLiteralInterpretation() { + + turtleInterpretation = new Dictionary>>(); + //turtleInterpretation + //loading required objects + var path = "Assets/Models/{0}.fbx"; + var bigL = (GameObject)AssetDatabase.LoadAssetAtPath(String.Format(path, "bigL"), typeof(GameObject)); + var bigR = (GameObject)AssetDatabase.LoadAssetAtPath(String.Format(path, "bigR"), typeof(GameObject)); + var l = (GameObject)AssetDatabase.LoadAssetAtPath(String.Format(path, "l"), typeof(GameObject)); + var r = (GameObject)AssetDatabase.LoadAssetAtPath(String.Format(path, "r"), typeof(GameObject)); + + //creating functions that are used for interpretation + turtleInterpretation.Add("l", (float[] args) => new Tuple(l, Matrix4x4.Translate(new Vector3(0.1f, 0, 0)) * Matrix4x4.Scale(new Vector3(0.1f, 0.1f, 0.1f)))); + turtleInterpretation.Add("r", (float[] args) => new Tuple(r, Matrix4x4.Translate(new Vector3(0.1f, 0, 0)) * Matrix4x4.Scale(new Vector3(0.1f, 0.1f, 0.1f)))); + turtleInterpretation.Add("L", (float[] args) => new Tuple(bigL, Matrix4x4.Translate(new Vector3(0.1f, 0, 0)) * Matrix4x4.Scale(new Vector3(0.1f, 0.1f, 0.1f)))); + turtleInterpretation.Add("R", (float[] args) => new Tuple(bigR, Matrix4x4.Translate(new Vector3(0.1f, 0, 0)) * Matrix4x4.Scale(new Vector3(0.1f, 0.1f, 0.1f)))); + } +} + \ No newline at end of file diff --git a/Unity Project/Assets/Scripts/AnabaenaTurtle.cs.meta b/Unity Project/Assets/Scripts/AnabaenaTurtle.cs.meta new file mode 100644 index 0000000..536f60d --- /dev/null +++ b/Unity Project/Assets/Scripts/AnabaenaTurtle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7bc6128c88800ea48ba9b9e7070ec728 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/ContextTurtle.cs b/Unity Project/Assets/Scripts/ContextTurtle.cs new file mode 100644 index 0000000..09908b9 --- /dev/null +++ b/Unity Project/Assets/Scripts/ContextTurtle.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; +using ConsoleLSystem; +using System; + +public class ContextTurtle : TurtleLSystem { + + protected override void initLiteralInterpretation() { + + turtleInterpretation = new Dictionary>>(); + //turtleInterpretation + //loading required objects + var path = "Assets/Models/{0}.fbx"; + var bigL = (GameObject)AssetDatabase.LoadAssetAtPath(String.Format(path, "bigL"), typeof(GameObject)); + var bigR = (GameObject)AssetDatabase.LoadAssetAtPath(String.Format(path, "bigR"), typeof(GameObject)); + var l = (GameObject)AssetDatabase.LoadAssetAtPath(String.Format(path, "l"), typeof(GameObject)); + var r = (GameObject)AssetDatabase.LoadAssetAtPath(String.Format(path, "r"), typeof(GameObject)); + + //creating functions that are used for interpretation + turtleInterpretation.Add("A", (float[] args) => new Tuple(l, Matrix4x4.Translate(new Vector3(0.1f, 0, 0)) * Matrix4x4.Scale(new Vector3(0.1f, 0.1f, 0.1f)))); + turtleInterpretation.Add("B", (float[] args) => new Tuple(r, Matrix4x4.Translate(new Vector3(0.1f, 0, 0)) * Matrix4x4.Scale(new Vector3(0.1f, 0.1f, 0.1f)))); + turtleInterpretation.Add("D", (float[] args) => new Tuple(bigR, Matrix4x4.Translate(new Vector3(0.1f, 0, 0)) * Matrix4x4.Scale(new Vector3(0.1f, 0.1f * (args[0] * 0.2f + 0.01f), 0.1f)))); + turtleInterpretation.Add("C", (float[] args) => new Tuple(bigR, Matrix4x4.Translate(new Vector3(0.1f, 0, 0)) * Matrix4x4.Scale(new Vector3(0.1f, 0.1f * (args[0] * 0.2f + 0.01f), 0.1f)))); + } +} + \ No newline at end of file diff --git a/Unity Project/Assets/Scripts/ContextTurtle.cs.meta b/Unity Project/Assets/Scripts/ContextTurtle.cs.meta new file mode 100644 index 0000000..244549e --- /dev/null +++ b/Unity Project/Assets/Scripts/ContextTurtle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3646e56500f82b478deb4552fc2bc85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/Editor.meta b/Unity Project/Assets/Scripts/Editor.meta new file mode 100644 index 0000000..33c49fa --- /dev/null +++ b/Unity Project/Assets/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04299f831eadf214b9aca4e61444f91a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/Editor/LeafGrowEditor.cs b/Unity Project/Assets/Scripts/Editor/LeafGrowEditor.cs new file mode 100644 index 0000000..f271ebb --- /dev/null +++ b/Unity Project/Assets/Scripts/Editor/LeafGrowEditor.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(LeafGrow))] +public class LeafGrowEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + LeafGrow myScript = (LeafGrow)target; + if(GUILayout.Button("Grow Leaf")) + { + myScript.DrawLeaf(); + } + } +} diff --git a/Unity Project/Assets/Scripts/Editor/LeafGrowEditor.cs.meta b/Unity Project/Assets/Scripts/Editor/LeafGrowEditor.cs.meta new file mode 100644 index 0000000..20854c4 --- /dev/null +++ b/Unity Project/Assets/Scripts/Editor/LeafGrowEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba43da83833304f908bbcd812e5f889e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/Editor/LeafGrowScriptEditor.cs b/Unity Project/Assets/Scripts/Editor/LeafGrowScriptEditor.cs new file mode 100644 index 0000000..92be20b --- /dev/null +++ b/Unity Project/Assets/Scripts/Editor/LeafGrowScriptEditor.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(LeafGrowScript))] +public class LeafGrowScriptEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + LeafGrowScript myScript = (LeafGrowScript)target; + if(GUILayout.Button("Grow Flower")) + { + myScript.DrawLeaf(); + } + } +} diff --git a/Unity Project/Assets/Scripts/Editor/LeafGrowScriptEditor.cs.meta b/Unity Project/Assets/Scripts/Editor/LeafGrowScriptEditor.cs.meta new file mode 100644 index 0000000..904ffd4 --- /dev/null +++ b/Unity Project/Assets/Scripts/Editor/LeafGrowScriptEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 443f273c306dd450cb8cf81ec6f38969 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/LSystem.meta b/Unity Project/Assets/Scripts/LSystem.meta new file mode 100644 index 0000000..c247381 --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b31ef5c8270a72344914c1bade61a626 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/LSystem/LSystemParser.cs b/Unity Project/Assets/Scripts/LSystem/LSystemParser.cs new file mode 100644 index 0000000..ffb0633 --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem/LSystemParser.cs @@ -0,0 +1,348 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + + +//TODO add parsing for more than single letter + +namespace ConsoleLSystem { + abstract public class LSystemGeneralWordBuilder { + abstract public LSystemNode createLSystemNode(string name, int values_number); + abstract public void fillArguments(LSystemNode node, string[] arguments_strings); + } + public class LSystemWordBuilder : LSystemGeneralWordBuilder { + public override LSystemNode createLSystemNode(string name, int values_number) { + return new LSystemNode(new LSystemNodeLiteral(name, values_number)); + } + + + public override void fillArguments(LSystemNode node, string[] arguments_strings) { + for (int i = 0; i < arguments_strings.Length; i++) { + node.literal.values[i] = float.Parse(arguments_strings[i], NumberStyles.Any, CultureInfo.InvariantCulture); + } + } + } + + public class LSystemWordGeneratorBuilder : LSystemGeneralWordBuilder { + public Dictionary variableIndex { get;} + public LSystemWordGeneratorBuilder(Dictionary variable_index) { + this.variableIndex = variable_index; + } + public override LSystemNode createLSystemNode(string name, int values_number) { + return new LSystemNodeGenerator(name, values_number); + } + + public override void fillArguments(LSystemNode node, string[] arguments_strings) { + MathExpression[] expressions = arguments_strings.Select(argument => new MathExpression(variableIndex, argument)).ToArray(); + LSystemNodeGenerator ng = (LSystemNodeGenerator)node; + ng.fillArguments(expressions); + } + + } + public class LSystemFileParser { + //LSystemWordParser wordParser; + //LSystemRulesParser ruleParser; + + //public LSystemFileParser(LSystemWordParser wordParser, LSystemRulesParser ruleParser) { + // this.wordParser = wordParser; + // this.ruleParser = ruleParser; + //} + public static int countParenthesisEnd(string line,char opening_char, char closing_char) { + var parenthesises_number = 1; + var length = -1; + while (parenthesises_number > 0) { + length++; + var c = line[1 + length]; + if (c == opening_char) { + parenthesises_number++; + } + if (c == closing_char) { + parenthesises_number--; + } + } + return length; + } + public static bool parenthesisCheck(string line) { + var parenthesises_number = 0; + var brackets_number = 0; + foreach (var s in line) { + if (s == '(') { + parenthesises_number++; + } + if (s == ')') { + parenthesises_number--; + } + if (s == '[') { + brackets_number++; + } + if (s == ']') { + brackets_number--; + } + if (brackets_number<0 || parenthesises_number < 0) { + return false; + } + + } + return (brackets_number == 0 && parenthesises_number == 0); + } + + public static LSystemNode parseWord(string line, LSystemGeneralWordBuilder builder) { + var read_characters = 0; + LSystemNode node; + if (line[0] == '[') { + node = builder.createLSystemNode("", 0); + } + else { + var literal_name = line.Substring(0, 1); + if (line.Length>1 && line[1] == '(') { + var length = countParenthesisEnd(line.Substring(1), '(', ')'); + var values_string = line.Substring(2, length).Split(','); + node = builder.createLSystemNode(literal_name, values_string.Length); + + builder.fillArguments(node, values_string); + //Leter and: (, ) + read_characters += length + 3; + + } + else { + read_characters += 1; + node = builder.createLSystemNode(line.Substring(0,1),0); + } + } + while (line.Length > read_characters && line[read_characters] == '[') { + + var brackets_number = 1; + var length = countParenthesisEnd(line.Substring(read_characters), '[', ']'); + var child_node = parseWord(line.Substring(read_characters + 1, length),builder); + read_characters += length + 2; + child_node.parent = node; + node.children.Add(child_node); + } + if (read_characters < line.Length) { + var child_node = parseWord(line.Substring(read_characters),builder); + child_node.parent = node; + node.mainChild = (child_node); + } + return node; + } + + public static LSystemNodeLiteralVariable parseContextLiteral(string line) { + var name = line.Substring(0, 1); + var varable_index = new Dictionary(); + if (line.Length > 1) { + foreach (var i in line.Substring(2, line.Length - 3).Split(',').Select((name, Index) => new { name, Index })) { + varable_index.Add(i.name, i.Index); + }; + } + return new LSystemNodeLiteralVariable(name, varable_index.Count, varable_index); + } + + public static LSystemNodeLiteralVariable[] parseSuccessorsContext(string line) { + List result = new List(); + bool bracketStarted = false; + int bracketStartedIndex = 0; + for (int i = 0; i < line.Length; i++) { + if (line[i] == ']') { + if (!bracketStarted) { + throw new Exception("invalid syntax"); + } + else { + result.Add(parseContextLiteral(line.Substring(bracketStartedIndex, i - bracketStartedIndex))); + bracketStarted = false; + } + } + else if (line[i] == '[') { + if (bracketStarted) { + throw new Exception("invalid syntax"); + } + else { + bracketStarted = true; + bracketStartedIndex = i + 1; + } + } + else if (!bracketStarted) { + result.Add(parseContextLiteral(line.Substring(i))); + break; + } + } + return result.ToArray(); + } + //private static String[] parseIgnore(string line) { + // var items = line.Trim().Split(' '); + // var resut = List + + //} + + public static LSystemEvaluator parseLSystem(StreamReader sr) { + string line; + int line_number = 0; + var ignored = new String[0]; + LSystemNode axiom = null; + List rules = null; + while ((line = sr.ReadLine()) != null) { + line_number++; + if (line.Trim() == "#axiom") { + line = sr.ReadLine(); + if (!parenthesisCheck(line)) { + throw new Exception(String.Format("In line {0} invalid syntax", line_number)); + } + axiom = parseWord(line,new LSystemWordBuilder()); + } + if (line.Trim().Split(' ')[0].Trim() == "#ignore") { + ignored = line.Trim().Split(' ').Where(x=> x!= "#ignore" && x.Length>0).Select(x => x.Trim()).ToArray(); + } + if (line.Trim() == "#rules") { + rules = parseLSystemRules(sr); + } + + } + return new LSystemEvaluator(axiom, rules, ignored); + } + + private static List parseLSystemRules(StreamReader sr) { + List rules = new List(); + Regex separator = new Regex(@"-(\d*\.?\d*){1}>"); + Regex weight_regex = new Regex(@"p=(\d+\.?\d*){1}"); + string line; + while ((line = sr.ReadLine()) != null && line.Trim() != "#rules end") { + try { + if (line.Length == 0 || line[0] == '#') { + continue; + } + MathExpressionComparison[] conditions = new MathExpressionComparison[0]; + var split = separator.Match(line); + var line_parts = line.Split(new string[] { split.Value }, StringSplitOptions.None); + // check conditions; + //parse predecesor + var _t = line_parts[0].Split(':'); + var predecesor_string = _t[0]; + LSystemNodeLiteralVariable predecesor; + LSystemContext context; + //check if contains < or > + + // check context + getPredecesorContext(predecesor_string, out predecesor, out context); + + if (_t.Length > 1) { + conditions = _t[1].Trim().Split(';').Select(text => MathExpressionComparasionParser.parse(predecesor.variableIndex, text.Trim())).ToArray(); + } + // tochastic rule parsing + var sucsessor_string = line_parts[1]; + var probabilities_list = new List(); + var consequents_list = new List(); + if (sucsessor_string.Trim() == "#stochastic") { + while ((line = sr.ReadLine()) != null && line.Trim() != "#stochastic end") { + if (line[0] == '#') { + continue; + } + var weight_string = weight_regex.Match(line); + var weight = float.Parse(weight_string.Value.Substring(2), NumberStyles.Any, CultureInfo.InvariantCulture); + probabilities_list.Add(weight); + + var prob_len = weight_string.Value.Length; + consequents_list.Add((LSystemNodeGenerator)parseWord(line.Substring(prob_len).Trim(), new LSystemWordGeneratorBuilder(predecesor.variableIndex))); + } + } + else { + consequents_list.Add((LSystemNodeGenerator)parseWord(sucsessor_string.Trim(), new LSystemWordGeneratorBuilder(predecesor.variableIndex))); + } + //context + if (context != null) { + if (consequents_list.Count > 1) { + rules.Add(new LSystemRuleParametricStochasticContext(predecesor, conditions, consequents_list.ToArray(), probabilities_list.ToArray(), context)); + } + else { + rules.Add(new LSystemRuleParametricStochasticContext(predecesor, conditions, consequents_list[0], context)); + } + } + else { + if (consequents_list.Count > 1) { + rules.Add(new LSystemRuleParametricStochastic(predecesor, conditions, consequents_list.ToArray(), probabilities_list.ToArray())); + } + else { + rules.Add(new LSystemRuleParametric(predecesor, conditions, consequents_list[0])); + } + } + //var conditions = parts[0]; + //var result + } + catch (Exception e) { + sr.Close(); + throw new Exception(String.Format("error in {0} with a message \n {1}", line,e.Message)); + } + } + return rules; + } + + private static void getPredecesorContext(string predecesor_string, out LSystemNodeLiteralVariable predecesor, out LSystemContext context) { + string partent_context_str = null; + string child_context_str = null; + string mid_context_str = null; + int mid_start = 0; + + for (int i = 0; i < predecesor_string.Length; i++) { + if (predecesor_string[i] == '<' && partent_context_str == null) { + partent_context_str = predecesor_string.Substring(0, i).Trim(); + mid_start = i+1; + //Console.WriteLine(i); + } + if (predecesor_string[i] == '>' && child_context_str == null) { + child_context_str = predecesor_string.Substring(i + 1).Trim(); + mid_context_str = predecesor_string.Substring(mid_start, i - mid_start).Trim(); + //Console.WriteLine(i); + } + + } + if (mid_context_str == null) { + mid_context_str = predecesor_string.Substring(mid_start).Trim(); + } + LSystemNodeLiteralVariable parent = null; + LSystemNodeLiteralVariable[] children = null; + predecesor = LSystemFileParser.parseContextLiteral(mid_context_str); + if (partent_context_str != null) { + parent = LSystemFileParser.parseContextLiteral(partent_context_str); + foreach (KeyValuePair kvp in new Dictionary(predecesor.variableIndex)) { + //textBox3.Text += ("Key = {0}, Value = {1}", kvp.Key, kvp.Value); + predecesor.variableIndex[kvp.Key] = kvp.Value + parent.variableIndex.Count; + } + foreach (KeyValuePair kvp in parent.variableIndex) { + //textBox3.Text += ("Key = {0}, Value = {1}", kvp.Key, kvp.Value); + predecesor.variableIndex.Add(kvp.Key, kvp.Value); + } + } + if (child_context_str != null) { + int size = predecesor.variableIndex.Count; + children = LSystemFileParser.parseSuccessorsContext(child_context_str); + int offset = 0; + foreach (var child in children) { + + foreach (KeyValuePair kvp in child.variableIndex) { + //textBox3.Text += ("Key = {0}, Value = {1}", kvp.Key, kvp.Value); + predecesor.variableIndex.Add(kvp.Key, kvp.Value + size + offset); + } + offset += child.variableIndex.Count; + } + } + if (child_context_str != null) { + if (partent_context_str != null) { + context = new LSystemContext(parent, children); + } + else { + context = new LSystemContext(); + context.setOnlySucceeding(children); + } + } + else if (partent_context_str != null) { + context = new LSystemContext(); + context.setOnlyPreceding(parent); + } + else { + context = null; + } + } + } +} diff --git a/Unity Project/Assets/Scripts/LSystem/LSystemParser.cs.meta b/Unity Project/Assets/Scripts/LSystem/LSystemParser.cs.meta new file mode 100644 index 0000000..5c1a704 --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem/LSystemParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d9ea0d39208315468053b0ae8bb3e95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/LSystem/LSystemRule.cs b/Unity Project/Assets/Scripts/LSystem/LSystemRule.cs new file mode 100644 index 0000000..6454a88 --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem/LSystemRule.cs @@ -0,0 +1,345 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ConsoleLSystem { + public class LSystemNodeLiteralVariable : LSystemNodeLiteral { + public Dictionary variableIndex { get; } + + public LSystemNodeLiteralVariable(string name, int values_number, Dictionary variableIndex) : base(name, values_number) { + this.variableIndex = variableIndex; + } + + } + public class LSystemNodeGenerator : LSystemNode { + MathExpression[] math_expressions; + + public LSystemNodeGenerator(string name, int arguments) : base(new LSystemNodeLiteral(name, arguments)) { + } + public void fillArguments(MathExpression[] math_expressions) { + this.math_expressions = math_expressions; + } + public LSystemNode eval(float[] values) { + var literal = new LSystemNodeLiteral(this.literal.name, this.literal.values_number); + for (int i = 0; i < literal.values_number; i++) { + literal.values[i] = math_expressions[i].eval(values); + } + var result = new LSystemNode(literal); + foreach (LSystemNodeGenerator child in children) { + var _child = child.eval(values); + _child.parent = result; + result.children.Add(_child); + + } + if (mainChild != null) { + var _mainChild = ((LSystemNodeGenerator)mainChild).eval(values); + _mainChild.parent = result; + result.mainChild = _mainChild; + } + else { + result.mainChild = null; + } + return result; + } + + } + abstract public class LSystemRule { + abstract public bool is_aplicable(LSystemNode processed_node, String[] ignored); + abstract public LSystemNode rewrite(LSystemNode processed_node, String[] ignored); + } + + public class LSystemRuleBasic : LSystemRule { + LSystemNodeLiteral input;// { get; } + LSystemNode output; + + public LSystemRuleBasic(LSystemNodeLiteral input, LSystemNode output) { + this.input = input; + this.output = output; + } + + override public bool is_aplicable(LSystemNode processed_node, String[] ignored) { + if (processed_node.literal == input) { + return true; + } + else { + return false; + } + } + override public LSystemNode rewrite(LSystemNode processed_node, String[] ignored) { + if (is_aplicable(processed_node, ignored)) { + return output.deep_copy(); + } + else { + return new LSystemNode(processed_node.literal); + } + } + } + + public class LSystemRuleParametric : LSystemRule { + LSystemNodeLiteralVariable predecesor;// { get; } + LSystemNodeGenerator consequent; + MathExpressionComparison[] conditions; + + public LSystemRuleParametric(LSystemNodeLiteralVariable predecesor, MathExpressionComparison[] conditions, LSystemNodeGenerator consequent) { + this.predecesor = predecesor; + this.consequent = consequent; + this.conditions = conditions; + } + + public override bool is_aplicable(LSystemNode processed_node, String[] ignored) { + if (processed_node.literal.name != predecesor.name || processed_node.literal.values_number != predecesor.values_number) { + return false; + } + foreach (var condition in conditions) { + if (!condition.eval(processed_node.literal.values)) { + return false; + } + } + return true; + } + + public override LSystemNode rewrite(LSystemNode processed_node, String[] ignored) { + if (is_aplicable(processed_node, ignored)) { + return consequent.eval(processed_node.literal.values); + } + else { + return new LSystemNode(processed_node.literal); + } + } + } + + public class LSystemRuleParametricStochastic : LSystemRule { + protected LSystemNodeLiteralVariable predecesor;// { get; } + protected LSystemNodeGenerator[] consequents; + protected float[] probabilities; + protected MathExpressionComparison[] conditions; + protected Random random; + + public LSystemRuleParametricStochastic(LSystemNodeLiteralVariable predecesor, MathExpressionComparison[] conditions, LSystemNodeGenerator[] consequents, float[] probabilities) { + this.predecesor = predecesor; + this.consequents = consequents; + this.conditions = conditions; + float probabilities_sum = 0; + foreach (var probability in probabilities) { probabilities_sum += probability; } + float acumulator = 0; + this.probabilities = new float[consequents.Length]; + for (int i = 0; i < consequents.Length; i++) { + var probability = probabilities[i] / probabilities_sum; + this.probabilities[i] = probability + acumulator; + acumulator += probability; + } + random = new Random(); + + } + public LSystemRuleParametricStochastic(LSystemNodeLiteralVariable predecesor, MathExpressionComparison[] conditions, LSystemNodeGenerator consequent) { + this.predecesor = predecesor; + this.consequents = new LSystemNodeGenerator[] { consequent }; + this.conditions = conditions; + float probabilities_sum = 0; + probabilities = new float[1] { 1 }; + random = new Random(); + + } + public override bool is_aplicable(LSystemNode processed_node, String[] ignored) { + if (processed_node.literal.name != predecesor.name || processed_node.literal.values_number != predecesor.values_number) { + return false; + } + foreach (var condition in conditions) { + if (!condition.eval(processed_node.literal.values)) { + return false; + } + } + return true; + } + + public override LSystemNode rewrite(LSystemNode processed_node, String[] ignored) { + var result = random.NextDouble(); + int consequent_index = 0; + for (int i = 0; i < probabilities.Length; i++) { + if (result < probabilities[i]) { + consequent_index = i; + break; + } + } + if (is_aplicable(processed_node, ignored)) { + return consequents[consequent_index].eval(processed_node.literal.values); + } + else { + return new LSystemNode(processed_node.literal); + } + } + } + public class LSystemContext { + public LSystemNodeLiteral parent { get; set; } + public LSystemNodeLiteral[] children { get; set; } + public LSystemNodeLiteral mid { get; set; } + bool isPreceding = false; + bool isSucceeding = false; + + public LSystemContext(LSystemNodeLiteral parent, LSystemNodeLiteral[] children) { + this.parent = parent; + this.children = children; + this.isPreceding = true; + this.isSucceeding = true; + } + public LSystemContext() { + + } + public void setOnlyPreceding(LSystemNodeLiteral parent) { + this.parent = parent; + this.mid = mid; + this.isPreceding = true; + this.isSucceeding = false; + } + public void setOnlySucceeding(LSystemNodeLiteral[] children) { + this.children = children; + this.isPreceding = false; + this.isSucceeding = true; + } + void _purgeIgnoredRecursive(LSystemNode node, HashSet ignored, ref List results) { + if (ignored.Contains(node.literal.name)) { + foreach (var child in node.getAllChildren()) { + _purgeIgnoredRecursive(child, ignored, ref results); + } + } + else { + results.Add(node); + } + } + List _purgeIgnored(LSystemNode node, HashSet ignored) { + List results = new List(); + foreach (var child in node.getAllChildren()) { + _purgeIgnoredRecursive(child, ignored, ref results); + } + return results; + } + public bool isAplicable(LSystemNode node, String[] ignored, out float[] variables) { + var variables_list = new List(); + var currentParent = node.parent; + while (ignored.Contains(currentParent.literal.name)) { + currentParent = currentParent.parent; + } + if (isPreceding && parent != currentParent.literal) { + variables = new float[0]; + return false; + } + if (isPreceding) { + variables_list.AddRange(currentParent.literal.values); + } + variables_list.AddRange(node.literal.values); + if (isSucceeding) { + LSystemNodeLiteral childLiteral; + Queue ignoredChildren = new Queue(); + + var nodeChildren = _purgeIgnored(node,new HashSet(ignored)).ToArray(); + var result = children.Length == nodeChildren.Length; + + if (result) { + for (int i = 0; i < children.Length; i++) { + if(nodeChildren[i].literal == children[i]) { + variables_list.AddRange(nodeChildren[i].literal.values); + } + else { + result = false; + break; + } + } + + } + //foreach(var child in node.getAllChildren()) { + // if (ignored.Contains(child.literal.name)) { + // ignoredChildren.Enqueue(child); + // } + // if (child.literal == this.child) { + // childLiteral = child.literal; + // result = true; + // variables_list.AddRange(child.literal.values); + // break; + // } + //} + //while (!result && ignoredChildren.Count>0) { + // var ignoredChild = ignoredChildren.Dequeue(); + // foreach (var child in ignoredChild.getAllChildren()) { + // if (ignored.Contains(child.literal.name)) { + // ignoredChildren.Enqueue(child); + // } + // if (child.literal == this.child) { + // childLiteral = child.literal; + // result = true; + // variables_list.AddRange(child.literal.values); + // break; + // } + // } + //} + if (!result) { + variables = new float[0]; + return false; + } + } + variables = variables_list.ToArray(); + return true; + + } + + } + + public class LSystemRuleParametricStochasticContext : LSystemRuleParametricStochastic { + LSystemContext context; + public LSystemRuleParametricStochasticContext(LSystemNodeLiteralVariable predecesor, MathExpressionComparison[] conditions, LSystemNodeGenerator[] consequents, float[] probabilities, LSystemContext context) : base(predecesor, conditions, consequents, probabilities) { + this.context = context; + } + public LSystemRuleParametricStochasticContext(LSystemNodeLiteralVariable predecesor, MathExpressionComparison[] conditions, LSystemNodeGenerator consequent, LSystemContext context) : base(predecesor, conditions, consequent) { + this.context = context; + } + public override bool is_aplicable(LSystemNode processed_node,String[] ignored) { + if (processed_node.literal.name != predecesor.name || processed_node.literal.values_number != predecesor.values_number) { + return false; + } + var variables = new float[0]; + if (!context.isAplicable(processed_node, ignored, out variables)) { + return false; + } + foreach (var condition in conditions) { + if (!condition.eval(variables)) { + return false; + } + } + return true; + } + bool is_aplicable(LSystemNode processed_node, String[] ignored, out float[] variables) { + variables = new float[0]; + if (processed_node.literal.name != predecesor.name || processed_node.literal.values_number != predecesor.values_number) { + return false; + } + if (!context.isAplicable(processed_node, ignored, out variables)) { + return false; + } + foreach (var condition in conditions) { + if (!condition.eval(variables)) { + return false; + } + } + return true; + } + + public override LSystemNode rewrite(LSystemNode processed_node, String[] ignored) { + var result = random.NextDouble(); + int consequent_index = 0; + for (int i = 0; i < probabilities.Length; i++) { + if (result < probabilities[i]) { + consequent_index = i; + break; + } + } + float[] variables; + if (is_aplicable(processed_node, ignored, out variables)) { + return consequents[consequent_index].eval(variables); + } + else { + return new LSystemNode(processed_node.literal); + } + } + + } +} diff --git a/Unity Project/Assets/Scripts/LSystem/LSystemRule.cs.meta b/Unity Project/Assets/Scripts/LSystem/LSystemRule.cs.meta new file mode 100644 index 0000000..d1a0dc8 --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem/LSystemRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbf81cc8f22e1b040aa2f1b218391989 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/LSystem/MathExpression.cs b/Unity Project/Assets/Scripts/LSystem/MathExpression.cs new file mode 100644 index 0000000..5f7b5fe --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem/MathExpression.cs @@ -0,0 +1,210 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; + +namespace ConsoleLSystem { + public class MathExpressionComparison{ + MathExpression leftSide; + MathExpression rightSide; + Func comparisonFunction; + + public MathExpressionComparison(MathExpression leftSide, MathExpression rightSide, Func comparisonFunction) { + this.leftSide = leftSide; + this.rightSide = rightSide; + this.comparisonFunction = comparisonFunction; + } + public bool eval(float[] variables) { + return comparisonFunction(leftSide.eval(variables), rightSide.eval(variables)); + } + + + } + public class MathExpressionNode { + Func function; + MathExpressionNode[] childNodes; + + public MathExpressionNode(Func function, MathExpressionNode[] childNodes) { + this.function = function; + this.childNodes = childNodes; + } + + public float eval(float[] variables) { + var x = childNodes.Select(node => node.eval(variables)).ToArray(); + return function(x, variables); + } + } + public class MathExpression { + private static Random random = new Random(); + + private static Dictionary expression_hierarchy = new Dictionary{ + {'^', 4}, + {'*', 3}, + {'/', 3}, + {'+', 1}, + {'-', 1}, + }; + MathExpressionNode rootNode; + public float eval(float [] variables) { + return rootNode.eval(variables); + } + private static float negate(float[] children, float[] variables) { + return -children[0]; + } + private static float mulitply(float[] children, float[] variables) { + return children[0] * children[1]; + } + private static float power(float[] children, float[] variables) { + return (float)Math.Pow(children[0],children[1]); + } + private static float divide(float[] children, float[] variables) { + return children[0] / children[1]; + } + private static float add(float[] children, float[] variables) { + return children[0] + children[1]; + } + private static float subtract(float[] children, float[] variables) { + return children[0] - children[1]; + } + + //private MathExpressionNode parse(Dictionary variableNames, string expression_string) { + + + // var read_characters = 0; + // var node = new MathExpressionNode(); + // if (expression_string[0] == '(') { + // var length = LSystemFileParser.countParenthesisEnd(expression_string, '(', ')'); + // if (length == expression_string.Length - 2) { + // return parse(variableNames, expression_string.Substring(1, length)); + // } + + // var left_child_node = parse(variableNames, expression_string.Substring(1, length)); + // read_characters += length + 2; + + // node.function = getFunction(expression_string[read_characters]); + // read_characters += 1; + + // if (expression_string[read_characters] == '(') + // } + + + + //} + + private static MathExpressionNode parse(Dictionary variableNames, string expression_string) { + expression_string = expression_string.Trim(); + var expression_pos = -1; + var current_level = 1000; + for (int i = 0; i < expression_string.Length; i++) { + if (expression_string[i] == '(') { + var length = LSystemFileParser.countParenthesisEnd(expression_string.Substring(i), '(', ')'); + if (length == expression_string.Length - 2) { + return parse(variableNames, expression_string.Substring(1, length)); + } + //skip parenthesis + // if expression is covered in ( ) + if (i == 0 && length == expression_string.Length - 2) { + return parse(variableNames, expression_string.Substring(1, length)); + } + else { + i += length + 1; + continue; + } + } + int new_level; + if (expression_hierarchy.TryGetValue(expression_string[i],out new_level)) { + if (i>0 && !(i - 1 == expression_pos && expression_string[i] == '-')) { + if (new_level <= current_level) { + current_level = new_level; + expression_pos = i; + } + } + } + } + if (expression_pos > 0) { + var left_node = parse(variableNames, expression_string.Substring(0, expression_pos)); + var right_node = parse(variableNames, expression_string.Substring(expression_pos + 1)); + MathExpressionNode[] child_nodes = { left_node, right_node }; + switch (expression_string[expression_pos]) { + case '*': + return new MathExpressionNode(mulitply, child_nodes); + break; + case '/': + return new MathExpressionNode(divide, child_nodes); + break; + case '+': + return new MathExpressionNode(add, child_nodes); + break; + case '-': + return new MathExpressionNode(subtract, child_nodes); + break; + case '^': + return new MathExpressionNode(power, child_nodes); + break; + default: + throw new Exception(String.Format("unknown operation {0} in {1}", expression_string[expression_pos], expression_string)); + break; + } + } + else if (expression_string[0] == '-') { + MathExpressionNode[] a = { parse(variableNames, expression_string.Substring(1)) }; + return new MathExpressionNode(negate, a); + } + else { + int index; + if (expression_string == "RANDOM") { + return new MathExpressionNode((float[] children, float[] arguments) => (float)random.NextDouble(), new MathExpressionNode[0]); + } + if (variableNames.TryGetValue(expression_string.Trim(),out index)){ + return new MathExpressionNode((float[] children, float[] arguments) => arguments[index], new MathExpressionNode[0]); + } + else { + try { + float value = float.Parse(expression_string, NumberStyles.Any, CultureInfo.InvariantCulture); + return new MathExpressionNode((float[] children, float[] arguments) => value, new MathExpressionNode[0]); + } + catch (Exception) { + + throw new Exception(String.Format("can't parse ``{0}``. It's not a number nor a known variable", expression_string)); + } + } + } + } + public MathExpression(Dictionary variableNames, string expression_string) { + rootNode = parse(variableNames, expression_string); + } + } + public class MathExpressionComparasionParser { + private static bool le(float a, float b) { return a < b; } + private static bool leq(float a, float b) { return a <= b; } + private static bool eq(float a, float b) { return a == b; } + + public static MathExpressionComparison parse(Dictionary variableNames, string expression_string) { + //var operations = new string[]{ "<=", ">=", "<", ">"}; + if (expression_string.Contains("<=")) { + + var parts = expression_string.Split(new string[] { "<=" }, StringSplitOptions.None).Select(s => s.Trim()).ToArray(); + return new MathExpressionComparison(new MathExpression(variableNames, parts[0]), new MathExpression(variableNames, parts[1]), leq); + } + if (expression_string.Contains(">=")) { + var parts = expression_string.Split(new string[] { ">=" }, StringSplitOptions.None).Select(s => s.Trim()).ToArray(); + return new MathExpressionComparison(new MathExpression(variableNames, parts[1]), new MathExpression(variableNames, parts[0]), leq); + } + if (expression_string.Contains("==")) { + var parts = expression_string.Split(new string[] { "==" }, StringSplitOptions.None).Select(s => s.Trim()).ToArray(); + return new MathExpressionComparison(new MathExpression(variableNames, parts[1]), new MathExpression(variableNames, parts[0]), eq); + } + if (expression_string.Contains("<")) { + var parts = expression_string.Split('<').Select(s => s.Trim()).ToArray(); + return new MathExpressionComparison(new MathExpression(variableNames, parts[0]), new MathExpression(variableNames, parts[1]), le); + } + if (expression_string.Contains(">")) { + var parts = expression_string.Split('>').Select(s => s.Trim()).ToArray(); + return new MathExpressionComparison(new MathExpression(variableNames, parts[1]), new MathExpression(variableNames, parts[0]), le); + } + + throw new Exception(String.Format("comparison operation not recognized in {}", expression_string)); + } + } +} diff --git a/Unity Project/Assets/Scripts/LSystem/MathExpression.cs.meta b/Unity Project/Assets/Scripts/LSystem/MathExpression.cs.meta new file mode 100644 index 0000000..c75b2bc --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem/MathExpression.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f4cd6c897dbc5741b23eee6d073826c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/LSystem/Program.cs b/Unity Project/Assets/Scripts/LSystem/Program.cs new file mode 100644 index 0000000..dffe13a --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem/Program.cs @@ -0,0 +1,353 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace ConsoleLSystem { + public class LSystemNodeLiteral { + public string name { get; } + public int values_number { get; } + + public float[] values { get; set; } + + public LSystemNodeLiteral(string name, int values_number) { + this.name = name; + this.values_number = values_number; + //in case it would be 0 + values = new float[values_number]; + } + public LSystemNodeLiteral(LSystemNodeLiteral other) { + this.name = other.name; + this.values_number = other.values_number; + //in case it would be 0 + values = new float[this.values_number]; + other.values.CopyTo(values, 0); + } + + public static bool operator ==(LSystemNodeLiteral thisLiteral, LSystemNodeLiteral other) { + return thisLiteral.name == other.name && thisLiteral.values_number == other.values_number; + } + public static bool operator !=(LSystemNodeLiteral thisLiteral, LSystemNodeLiteral other) { + return !(thisLiteral.name == other.name && thisLiteral.values_number == other.values_number); + } + + public override string ToString() { + if (values_number == 0) { + return name; + } + else { + StringBuilder sb = new StringBuilder(name, name.Length + values_number * 7 + 4); + sb.Append("("); + for (int i = 0; i < values_number; i++) { + var v = values[i]; + sb.AppendFormat("{0:0.##}", v); + if (i < values_number - 1) { + sb.Append(","); + } + } + sb.Append(")"); + return sb.ToString(); + } + } + } + + public class LSystemNode { + public LSystemNodeLiteral literal { get; set; } + public List children { get; set; } + public LSystemNode mainChild { get; set; } + + private LSystemNode _parent; + public LSystemNode parent { + get { if (_parent is null) { return new LSystemNode(new LSystemNodeLiteral(" _ ", 0)); } + else { return _parent; } } + set { _parent = value; } } + + public LSystemNode(LSystemNodeLiteral nodeLiteral) { + literal = nodeLiteral; + children = new List(); + mainChild = null; + } + + public LSystemNode(LSystemNodeLiteral nodeLiteral, List children, LSystemNode mainChild) { + literal = nodeLiteral; + this.children = children; + this.mainChild = mainChild; + } + public LSystemNode(LSystemNodeLiteral nodeLiteral, List children) { + literal = nodeLiteral; + this.children = children; + this.mainChild = null; + } + public List getAllChildren() { + var result = new List(children); + if (mainChild != null){ + result.Add(mainChild); + } + return result; + } + + public LSystemNode deep_copy() { + if (children.Count() == 0 && mainChild == null) { + return new LSystemNode(new LSystemNodeLiteral(literal)); + } + else if (mainChild != null) { + var result = new LSystemNode(new LSystemNodeLiteral(literal)); + result.mainChild = mainChild.deep_copy(); + return result; + } + else { + var new_children = new List(); + foreach (var x in children) { + new_children.Add(x.deep_copy()); + } + return new LSystemNode(literal, new_children, this.mainChild.deep_copy()); + } + } + + private static LSystemNode deepestNode(LSystemNode node) { + while (node.mainChild != null) { + node = node.mainChild; + } + return node; + } + + public LSystemNode newParent() { + return deepestNode(this); + } + + public override string ToString() { + StringBuilder sb = new StringBuilder(literal.ToString()); + var node = this; + while (true) { + foreach (var child in node.children) { + sb.Append("["); + sb.Append(child.ToString()); + sb.Append("]"); + } + if (node.mainChild != null) { + sb.Append(node.mainChild.literal.ToString()); + node = node.mainChild; + } + else { + return sb.ToString(); + } + } + } + } + + + public class LSystemEvaluator { + public LSystemNode lSystemString { get; set; } + public List lSystemRules { get; set; } + public String[] ignored { get; set; } + + public LSystemEvaluator(LSystemNode startingString, List rules) { + lSystemString = startingString; + lSystemRules = rules; + ignored = new String[0]; + } + public LSystemEvaluator(LSystemNode startingString, List rules, String[] ignored) { + lSystemString = startingString; + lSystemRules = rules; + this.ignored = ignored; + } + private LSystemNode _rewrite(LSystemNode node) { + foreach (var rule in lSystemRules) { + if (rule.is_aplicable(node, ignored)) { + return rule.rewrite(node, ignored); + } + } + return new LSystemNode(node.literal); + } + //private void _rewrite_recursive(LSystemNode node, LSystemNode parent) { + // var new_node = _rewrite(node); + // parent.children.Add(new_node); + // new_node.parent = parent; + // var new_parent = new_node.newParent(); + + // foreach (var child in node.children) { + // _rewrite_recursive(child, new_parent); + // } + //} + + + private void _rewrite_recursive(LSystemNode node, LSystemNode parent) { + var new_node = _rewrite(node); + parent.children.Add(new_node); + new_node.parent = parent; + var new_parent = new_node.newParent(); + + foreach (var child in node.children) { + _rewrite_recursive(child, new_parent); + } + while (node.mainChild != null) { + new_node = _rewrite(node.mainChild); + new_node.parent = new_parent; + + new_parent.mainChild = new_node; + new_parent = new_node.newParent(); + foreach (var child in node.mainChild.children) { + _rewrite_recursive(child, new_parent); + } + node = node.mainChild; + } + } + public void rewrite() { + var new_root = _rewrite(lSystemString); + var new_parent = new_root.newParent(); + foreach (var child in lSystemString.children) { + _rewrite_recursive(child, new_parent); + } + var node = lSystemString; + + while (node.mainChild != null) { + var new_node = _rewrite(node.mainChild); + new_node.parent = new_parent; + + new_parent.mainChild = new_node; + new_parent = new_node.newParent(); + foreach (var child in node.mainChild.children) { + _rewrite_recursive(child, new_parent); + } + node = node.mainChild; + } + lSystemString = new_root; + } + //private void rewrite(ref LSystemNode currentNode) + } + //abstract class LSystemWordParser { } + //abstract class LSystemRulesParser { } + + class A { + public int B { get; set; } + public A[] AA { get; set; } + } + class Program { + static void runParametric() { + + Dictionary variableIndex = new Dictionary { + {"a", 0}, + {"b", 1}, + + }; + var predecesor1 = LSystemFileParser.parseContextLiteral("B(a,b)"); + var predecesor2 = LSystemFileParser.parseContextLiteral("A(a)"); + var condition1 = MathExpressionComparasionParser.parse(variableIndex, "a>b"); + var condition2 = MathExpressionComparasionParser.parse(variableIndex, "a>5"); + + var builder = new LSystemWordGeneratorBuilder(variableIndex); + + var consequent1 = (LSystemNodeGenerator)LSystemFileParser.parseWord("B(0,b)[A(a/2)]A(a/2)", builder); + var consequent2 = (LSystemNodeGenerator)LSystemFileParser.parseWord("B(a+3.5,b+1)", builder); + var consequent3 = (LSystemNodeGenerator)LSystemFileParser.parseWord("B(0,a)", builder); + var consequent4 = (LSystemNodeGenerator)LSystemFileParser.parseWord("A(a+1)", builder); + + var rule1 = new LSystemRuleParametric(predecesor1, new MathExpressionComparison[] { condition1 }, consequent1 ); + var rule2 = new LSystemRuleParametric(predecesor1, new MathExpressionComparison[] { }, consequent2 ); + var rule3 = new LSystemRuleParametric(predecesor2, new MathExpressionComparison[] { condition2 }, consequent3 ); + var rule4 = new LSystemRuleParametric(predecesor2, new MathExpressionComparison[] { }, consequent4); + + var axiom = LSystemFileParser.parseWord("A(6)", new LSystemWordBuilder()); + + var rules = new List { rule1, rule2, rule3, rule4 }; + var evaluator = new LSystemEvaluator(axiom, rules); + Console.WriteLine(evaluator.lSystemString.ToString()); + for (int i = 0; i < 20; i++) { + evaluator.rewrite(); + Console.WriteLine(evaluator.lSystemString.ToString()); + } + } + static void runContext() { + var axiom = LSystemFileParser.parseWord("A(1)A(1)A(1)A(1)A(1)A(1)B(2)", new LSystemWordBuilder()); + var predecesor = LSystemFileParser.parseContextLiteral("A(a)"); + var predecesor1 = LSystemFileParser.parseContextLiteral("B(b)"); + + var contex = new LSystemContext(); + contex.setOnlySucceeding(new LSystemNodeLiteral[] { new LSystemNodeLiteral("B", 1) }); + + var contex1 = new LSystemContext(); + contex1.setOnlyPreceding(new LSystemNodeLiteral("A", 1)); + + + Dictionary variableIndex = new Dictionary { + { "a", 0 }, + { "b", 1 }, + }; + var builder = new LSystemWordGeneratorBuilder(variableIndex); + var consequent = (LSystemNodeGenerator)LSystemFileParser.parseWord("B(a)", builder); + var consequent1 = (LSystemNodeGenerator)LSystemFileParser.parseWord("A(1)", builder); + var consequent2 = (LSystemNodeGenerator)LSystemFileParser.parseWord("A(a+1)", builder); + + MathExpressionComparison comparison = MathExpressionComparasionParser.parse(variableIndex, "a>b"); + MathExpressionComparison comparison1 = MathExpressionComparasionParser.parse(variableIndex, "a<=b"); + + var rule = new LSystemRuleParametricStochasticContext(predecesor, new MathExpressionComparison[] { comparison }, consequent, contex); + var rule1 = new LSystemRuleParametricStochasticContext(predecesor, new MathExpressionComparison[] { }, consequent2, contex); + var rule2 = new LSystemRuleParametricStochasticContext(predecesor1, new MathExpressionComparison[] { comparison }, consequent1, contex1); + + + var rules = new List { rule, rule1, rule2 }; + var evaluator = new LSystemEvaluator(axiom, rules); + Console.WriteLine(evaluator.lSystemString.ToString()); + for (int i = 0; i < 20; i++) { + evaluator.rewrite(); + Console.WriteLine(evaluator.lSystemString.ToString()); + } + + } + static void runFile() { + Console.WriteLine("Enter filepath:"); + string filepath = Console.ReadLine(); + var evaluator = LSystemFileParser.parseLSystem(new StreamReader(filepath)); + Console.WriteLine(evaluator.lSystemString.ToString()); + while (true) { + Console.ReadLine(); + evaluator.rewrite(); + Console.WriteLine(evaluator.lSystemString.ToString()); + } + + } + static void Main(string[] args) { + runFile(); + //runContext(); + //var Al = new LSystemNodeLiteral("Al", 0); + //var Ar = new LSystemNodeLiteral("Ar", 0); + //var Bl = new LSystemNodeLiteral("Bl", 0); + //var Br = new LSystemNodeLiteral("Br", 0); + + //var root = new LSystemNode(Ar); + //var rule_list = new List(); + + //var result = new LSystemNode(Al); + //result.children.Add(new LSystemNode(Br)); + + //rule_list.Add(new LSystemRuleBasic(Ar, result)); + + //result = new LSystemNode(Bl); + //result.children.Add(new LSystemNode(Ar)); + //rule_list.Add(new LSystemRuleBasic(Al, result)); + + //result = new LSystemNode(Ar); + //rule_list.Add(new LSystemRuleBasic(Br, result)); + + //result = new LSystemNode(Al); + //rule_list.Add(new LSystemRuleBasic(Bl, result)); + + + //var evaluator = new LSystemEvaluator(root, rule_list); + //for (int i=0; i < 5; i++) { + // Console.WriteLine(evaluator.lSystemString.ToString()); + // evaluator.rewrite(); + //} + //Console.WriteLine(evaluator.lSystemString.ToString()); + + + + + //var node = LSystemFileParser.parseWord("A[AA][A]AB(1,2)[A(1)]C", new LSystemWordBuilder()); + //Console.WriteLine(node.ToString()); + } + } +} diff --git a/Unity Project/Assets/Scripts/LSystem/Program.cs.meta b/Unity Project/Assets/Scripts/LSystem/Program.cs.meta new file mode 100644 index 0000000..9741b74 --- /dev/null +++ b/Unity Project/Assets/Scripts/LSystem/Program.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5526e59b834cf36449875f1fb1ee497f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/LeafGrow.cs b/Unity Project/Assets/Scripts/LeafGrow.cs new file mode 100644 index 0000000..00da8bd --- /dev/null +++ b/Unity Project/Assets/Scripts/LeafGrow.cs @@ -0,0 +1,860 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Globalization; +#if UNITY_EDITOR +using UnityEditor; +using System.Linq; + +public class CommentAttribute : PropertyAttribute { + public readonly string tooltip; + public readonly string comment; + + public CommentAttribute( string comment, string tooltip ) { + this.tooltip = tooltip; + this.comment = comment; + } +} + +[CustomPropertyDrawer(typeof(CommentAttribute))] +public class CommentDrawer : PropertyDrawer { + const int textHeight = 20; + + CommentAttribute commentAttribute { get { return (CommentAttribute)attribute; } } + + public override float GetPropertyHeight(SerializedProperty prop, GUIContent label) { + return textHeight; + } + + public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) { + EditorGUI.LabelField(position,new GUIContent(commentAttribute.comment,commentAttribute.tooltip)); + } +} + + +#endif + +public class LeafGrow : MonoBehaviour +{ + Vector3[] newVertices; + Vector2[] newUV; + int[] newTriangles; + float[] _widthCurve_; //widthCurve + float[] _foldCurve_; //foldCurve + int frame = 0; + + [Header("Leaf shape")] + public float length = 0.06f; + public float width = 1.0f; + public float thickness = 0.01f; + public AnimationCurve widthCurve = AnimationCurve.Linear(0, 0, 1, 1); + public AnimationCurve foldCurve = AnimationCurve.Linear(0, 0, 1, 1); + public float infold = 0.03f; + float startInfold = 0.03f; + + + [Header("Animation and resolution")] + public float framesBetweenSteps = 30.0f; + public int numberOfAnimationSteps = 30; + public bool constantResolution = true; + [Comment("The number of animation steps also affects the resolution of the model", "8 * numberOfAnimationSteps = number of vertices")] + public bool commentSpace = true; + + [HideInInspector] + [Range(0.000f,0.01f)] + public float simplification = 0.000f; + // EditorGUILayout.HelpBox("Number of animation steps also affects resolution of the model" , MessageType.Info); + + //[Header("Special features")] + [HideInInspector] + public bool roughEdges = false; + [HideInInspector] + public int roughEdgesSize = 10; + [HideInInspector] + public int numberOfBranchesPairs = 10; + [HideInInspector] + public bool showBranches = false; + [HideInInspector] + public bool colision = false; + [HideInInspector] + public Rigidbody colisionJoint; + float infoldch; + [HideInInspector] + public int maxNumberOfSteps = 0; + int maxNumberOfStepsB = 0; + + + // Start is called before the first frame update + void Start() { + startInfold = infold; + if (numberOfBranchesPairs * 5 > numberOfAnimationSteps) { + numberOfBranchesPairs = numberOfAnimationSteps / 10; + } + // _widthCurve_ = new float[] {0.0f, 0.25f, 0.5f, 0.55f, 0.54f, 0.53f, 0.52f, 0.50f, 0.48f, 0.45f, 0.41f, 0.36f, 0.31f, 0.26f, 0.21f, 0.16f, 0.11f, 0.06f, 0.03f, 0.0f}; + // _foldCurve_ = new float[] {0.0f, 0.02f, 0.03f, 0.035f, 0.04f, 0.04f, 0.037f, 0.035f, 0.031f, 0.027f, 0.024f, 0.021f, 0.019f, 0.016f, 0.013f, 0.010f, 0.007f, 0.004f, 0.001f, 0.0f}; + float numberOfAnimationStepsf = (float)numberOfAnimationSteps; + _widthCurve_ = new float[numberOfAnimationSteps + 1]; + _foldCurve_ = new float[numberOfAnimationSteps + 1]; + float i = 0; + for (i = 0; i < numberOfAnimationStepsf; i += 1.0f) { + _widthCurve_[(int)i] = (float)widthCurve.Evaluate(i / (numberOfAnimationStepsf)); + _foldCurve_[(int)i] = (float)foldCurve.Evaluate(i / (numberOfAnimationStepsf)); + } + float foldMin = _foldCurve_.Min(); + float widthMin = _widthCurve_.Min(); + float widthMax = _widthCurve_.Max(); + for (i = 0; i < numberOfAnimationStepsf; i += 1.0f) { + _widthCurve_[(int)i] = (_widthCurve_[(int)i] - widthMin) / (widthMax - widthMin); + _foldCurve_[(int)i] = (_foldCurve_[(int)i]- _foldCurve_[0])*length; + } + if (maxNumberOfSteps == 0.0) { + maxNumberOfStepsB = _widthCurve_.Length - 1; + } + else { + maxNumberOfStepsB = maxNumberOfSteps; + } + maxNumberOfSteps = _widthCurve_.Length - 1; + // } + + } + + // Update is called once per frame + void Update() { + frame += 1; + if (frame <= framesBetweenSteps * maxNumberOfSteps) { + UpdateLeafMesh(); + } + + if (frame == framesBetweenSteps * maxNumberOfSteps + 3 && colision) { + gameObject.GetComponent().sharedMesh = null; + } + } + public void DrawLeaf() { + Start(); + frame = (int)(framesBetweenSteps * maxNumberOfSteps); + UpdateLeafMesh(); + infold = startInfold; + } + void UpdateLeafMesh() { + float frameScaled = (float)frame / framesBetweenSteps; + float[] _widthCurve = new float[(int)frameScaled + 1]; + float[] _foldCurve = new float[(int)frameScaled + 1]; + if (constantResolution) { + _widthCurve = new float[_widthCurve_.Length]; + _foldCurve = new float[_foldCurve_.Length]; + } + + float scale = frameScaled / (float)maxNumberOfSteps; + float scaleB = frameScaled / (float)maxNumberOfStepsB; + int j = 0; + for (j = 0; j < frameScaled; j++) { + _widthCurve[j] = _widthCurve_[(int)((float)j / scale)] * scaleB; + _foldCurve[j] = _foldCurve_[(int)((float)j / scale)] * scaleB; + + } + if (frame == framesBetweenSteps * maxNumberOfSteps || constantResolution) { + if (frame == framesBetweenSteps * maxNumberOfSteps) { + scaleB = (frameScaled - 1.0f) / (float)maxNumberOfStepsB; + } + for (j = 0; j < _widthCurve_.Length; j++) { + _widthCurve[j] = _widthCurve_[j] * scaleB; + } + for (j = 0; j < _foldCurve_.Length; j++) { + _foldCurve[j] = _foldCurve_[j] * scaleB; + } + // _widthCurve = _widthCurve_; + // _foldCurve = _foldCurve_; + // scaleB = 1.0f; + infold = startInfold; + } + else { + infold = (_widthCurve_[(int)frameScaled] / 10.0f) + startInfold; + } + infoldch = 2.0f * infold / _widthCurve.Length; + float infoldFrame = infold; + if (constantResolution) { + float scaleLboost = 1.0f; + if (frameScaled * 3.0f < numberOfAnimationSteps) { + scaleLboost = frameScaled * 3.0f / numberOfAnimationSteps; + } + scaleL = (scaleLboost + scaleB) / 2.0f; + } + + if (showBranches) { + + branchesMargin = (int)((float)numberOfAnimationSteps * 0.15f); + branchesDistance = 0; + if (numberOfBranchesPairs > 0) { + branchesDistance = (numberOfAnimationSteps - (branchesMargin * 2)) / numberOfBranchesPairs; + } + } + // // float version (constant distance between vertices groups) + // Mesh mesh = createSweepSufraceMesh(lengthScale, infold, _widthCurve, _foldCurve); + // GetComponent().mesh = mesh; + // + + + // Vector2 version (distance between vertices groups can be defined (last parameter is Vector2 x=fold, y=distance from start (lenght of leaf from the begining to this point))) + CurvesContainer newSimpleCurves = simplifyCurves(_widthCurve, _foldCurve, simplification); + Mesh mesh = createSweepSufraceMeshVector(length, width, newSimpleCurves._widthCurve, newSimpleCurves._foldCurve); + GetComponent().mesh = mesh; + + + if (frame == framesBetweenSteps * maxNumberOfSteps && colision) { + gameObject.AddComponent(); + gameObject.GetComponent().useGravity = false; + gameObject.AddComponent(); + gameObject.GetComponent().connectedBody = colisionJoint; + // gameObject.GetComponent().isKinematic = true; + gameObject.AddComponent(); + gameObject.GetComponent().convex = true; + gameObject.GetComponent().sharedMesh = mesh; + } + } + int branchesMargin = 0; + int branchesDistance = 0; + float scaleL = 1.0f; + Mesh createSweepSufraceMesh(float length, float width, float[] _widthCurve, float[] _foldCurve)//Vector2[] foldCurve) + { + Mesh mesh = new Mesh(); + int j = 0; + Vector3[] newVertices = new Vector3[_widthCurve.Length * 6]; + Vector3[] newnormals = new Vector3[_widthCurve.Length * 6]; + float i = 0.0f; + float re = 0.0f; + int al = _widthCurve.Length * 3; + for (i = 0.0f; i < _widthCurve.Length; i++) { + float thicknessThisRow = thickness; + infold = (float)gauss(((double)i) / ((_widthCurve.Length)), 0.5, 0.0, 1.0) * startInfold; + if (i == _widthCurve.Length - 1) { + infold = 0; + thicknessThisRow = 0.0001f; + _widthCurve[(int)i] = 0.00001f; + Debug.Log("last Frame"); + } + + Debug.Log("#infold = " + infold); + if (roughEdges && i > roughEdgesSize * 4.0f) { + re = 0.005f * (float)(i % roughEdgesSize); + if (re > _widthCurve[(int)i] / 4.0f) { + re = _widthCurve[(int)i] / 4.0f; + } + } + else { + re = 0.0f; + } + // ------- downside of the leaf -------- + Vector3 newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, _widthCurve[(int)i] * width + re, _foldCurve[(int)i] - infold * (0.3f + _widthCurve[(int)i])); + newVertices[(int)i * 3 + 0] = newVer; + newnormals[(int)i * 3 + 0] = new Vector3(0, 0, 1); + + newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, 0.0f, _foldCurve[(int)i] + thicknessThisRow); + newVertices[(int)i * 3 + 1] = newVer; + newnormals[(int)i * 3 + 1] = new Vector3(0, 0, 1); + + newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, -1.0f * _widthCurve[(int)i] * width + re, _foldCurve[(int)i] - infold * (0.3f + _widthCurve[(int)i])); + newVertices[(int)i * 3 + 2] = newVer; + newnormals[(int)i * 3 + 2] = new Vector3(0, 0, 1); + + // ------- upside of the leaf -------- + newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, _widthCurve[(int)i] * width + re, _foldCurve[(int)i] - infold * (0.3f + _widthCurve[(int)i])); + newVertices[(int)i * 3 + 0 + al] = newVer; + newnormals[(int)i * 3 + 0 + al] = new Vector3(0, 0, -1); + + newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, 0.0f, _foldCurve[(int)i]); + newVertices[(int)i * 3 + 1 + al] = newVer; + newnormals[(int)i * 3 + 1 + al] = new Vector3(0, 0, -1); + + newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, -1.0f * _widthCurve[(int)i] * width + re, _foldCurve[(int)i] - infold * (0.3f + _widthCurve[(int)i])); + newVertices[(int)i * 3 + 2 + al] = newVer; + newnormals[(int)i * 3 + 2 + al] = new Vector3(0, 0, -1); + + // newVer = new Vector3((length/numberOfAnimationSteps)*i*scaleL, 0.0f, _foldCurve[(int)i]); + // newVertices[(int)i + al] = newVer; + // newnormals[(int)i + al] = new Vector3(0, 0, -1); + } + + if (branchesDistance == 0 || !showBranches) { + newTriangles = new int[(_widthCurve.Length - 1) * (24 * 2)]; + } + else { + newTriangles = new int[(_widthCurve.Length - 1) * (24 * 2) + 24 * ((_widthCurve.Length / branchesDistance))]; + } + + int ti = 0; + for (j = 1; j < _widthCurve.Length; j++) { + int k = j - 1; + if (showBranches || j != _widthCurve.Length - 1) { + + // ------- downside of the leaf -------- + newTriangles[ti++] = k * 3 + 1; + newTriangles[ti++] = k * 3; + newTriangles[ti++] = j * 3; + + newTriangles[ti++] = k * 3 + 1; + newTriangles[ti++] = j * 3; + newTriangles[ti++] = j * 3 + 1; + + newTriangles[ti++] = k * 3 + 1; + newTriangles[ti++] = j * 3 + 2; + newTriangles[ti++] = k * 3 + 2; + + newTriangles[ti++] = k * 3 + 1; + newTriangles[ti++] = j * 3 + 1; + newTriangles[ti++] = j * 3 + 2; + + // ------- upside of the leaf -------- + + newTriangles[ti++] = k * 3 + 1 + al; + newTriangles[ti++] = j * 3 + 0 + al; + newTriangles[ti++] = k * 3 + 0 + al; + + newTriangles[ti++] = k * 3 + 1 + al; + newTriangles[ti++] = j * 3 + 1 + al; + newTriangles[ti++] = j * 3 + 0 + al; + + newTriangles[ti++] = k * 3 + 1 + al; + newTriangles[ti++] = k * 3 + 2 + al; + newTriangles[ti++] = j * 3 + 2 + al; + + newTriangles[ti++] = k * 3 + 1 + al; + newTriangles[ti++] = j * 3 + 2 + al; + newTriangles[ti++] = j * 3 + 1 + al; + + + // newTriangles[ti++] = k * 3; + // newTriangles[ti++] = k + al; + // newTriangles[ti++] = j * 3; + // + // newTriangles[ti++] = j * 3; + // newTriangles[ti++] = k + al; + // newTriangles[ti++] = j + al; + // + // + // newTriangles[ti++] = k * 3 + 2; + // newTriangles[ti++] = j * 3 + 2; + // newTriangles[ti++] = k + al; + // + // + // newTriangles[ti++] = j + al; + // newTriangles[ti++] = k + al; + // newTriangles[ti++] = j * 3 + 2; + } + } + + + int abr = _widthCurve.Length * 4; + float mz = 0.0f; + + Vector2[] newUV = new Vector2[newVertices.Length]; + + for (j = 0; j < newUV.Length; j++) { + if (j < abr) { + newUV[j] = new Vector2(newVertices[j].x, newVertices[j].z); + if (mz < newVertices[j].z) { + mz = newVertices[j].z; + } + } + else { + newUV[j] = new Vector2(newVertices[j].x, newVertices[j].z + mz); + } + } + + mesh.vertices = newVertices; + // mesh.uv = newUV; + mesh.triangles = newTriangles; + mesh.RecalculateBounds(); + mesh.triangles = mesh.triangles.Reverse().ToArray(); + mesh.normals = newnormals; + mesh.RecalculateNormals(); + + if (showBranches) { + // newTriangles = newTriangles.Reverse().ToArray(); + for (i = 0.0f; i < _widthCurve.Length; i++) { + float branchThickness = 1.2f * thickness; + if (_widthCurve[(int)i] / 10.0f < branchThickness) { + branchThickness = _widthCurve[(int)i] / 10.0f; + } + Vector3 newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, 0.0f, _foldCurve[(int)i] + (branchThickness)); + newVertices[(int)i * 4 + 0 + abr] = newVer; + newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, 0.0f, _foldCurve[(int)i] - (branchThickness)); + newVertices[(int)i * 4 + 1 + abr] = newVer; + newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, branchThickness, _foldCurve[(int)i]); + newVertices[(int)i * 4 + 2 + abr] = newVer; + newVer = new Vector3((length / numberOfAnimationSteps) * i * scaleL, -branchThickness, _foldCurve[(int)i]); + newVertices[(int)i * 4 + 3 + abr] = newVer; + Debug.Log("#_foldCurve[(int)i]=" + _foldCurve[(int)i]); + } + for (j = 1; j < _widthCurve.Length; j++) { + int k = j - 1; + + // prawa i lewa patrząc od góry ODWRÓCONE + + newTriangles[ti++] = k * 4 + 0 + abr;//góra prawa i 2 na dole + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 4 + 2 + abr; + + newTriangles[ti++] = j * 4 + 2 + abr;//góra prawa i 2 u góry + newTriangles[ti++] = j * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 0 + abr; + // + newTriangles[ti++] = k * 4 + 3 + abr;//góra lewa i 2 na dole + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = j * 4 + 0 + abr; + + newTriangles[ti++] = j * 4 + 3 + abr;//góra lewa i 2 u góry + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 4 + 0 + abr; + // + + + + newTriangles[ti++] = j * 4 + 3 + abr;//dół lewa i 2 na dole + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + // + newTriangles[ti++] = j * 4 + 3 + abr;//dół lewa i 2 u góry + newTriangles[ti++] = j * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 1 + abr; + // + newTriangles[ti++] = j * 4 + 1 + abr;//dół prawa i 2 na dole + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = k * 4 + 1 + abr; + // + newTriangles[ti++] = j * 4 + 2 + abr;//dół prawa i 2 u góry + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 4 + 1 + abr; + + //// prawa i lewa patrząc od góry + // + // newTriangles[ti++] = k * 4 + 0 + abr;//góra prawa i 2 na dole + // newTriangles[ti++] = j * 4 + 0 + abr; + // newTriangles[ti++] = k * 4 + 3 + abr; + // + // newTriangles[ti++] = j * 4 + 3 + abr;//góra lewa i 2 u góry + // newTriangles[ti++] = j * 4 + 0 + abr; + // newTriangles[ti++] = k * 4 + 0 + abr; + //// + // newTriangles[ti++] = k * 4 + 3 + abr;//góra lewa i 2 na dole + // newTriangles[ti++] = j * 4 + 0 + abr; + // newTriangles[ti++] = k * 4 + 0 + abr; + // + // newTriangles[ti++] = j * 4 + 3 + abr;//góra prawa i 2 u góry + // newTriangles[ti++] = j * 4 + 0 + abr; + // newTriangles[ti++] = k * 4 + 3 + abr; + //// + //// + // newTriangles[ti++] = j * 4 + 3 + abr;//dół lewa i 2 na dole + // newTriangles[ti++] = k * 4 + 3 + abr; + // newTriangles[ti++] = k * 4 + 1 + abr; + //// + //// + // newTriangles[ti++] = j * 4 + 3 + abr;//dół lewa i 2 u góry + // newTriangles[ti++] = k * 4 + 1 + abr; + // newTriangles[ti++] = j * 4 + 1 + abr; + //// + // newTriangles[ti++] = j * 4 + 1 + abr;//dół prawa i 2 na dole + // newTriangles[ti++] = k * 4 + 1 + abr; + // newTriangles[ti++] = k * 4 + 2 + abr; + //// + // newTriangles[ti++] = j * 4 + 2 + abr;//dół prawa i 2 u góry + // newTriangles[ti++] = j * 4 + 1 + abr; + // newTriangles[ti++] = k * 4 + 2 + abr; + if (branchesDistance > 2) { + if (j % branchesDistance == 0 && j + branchesMargin < _widthCurve.Length && _widthCurve.Length > 2 * branchesMargin) { + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 3 + 2 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 3 + 0 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 3 + 2 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 0 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 2 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 0 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 2 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 0 + branchesMargin * 3; + } + } + } + + mesh.vertices = newVertices; + // mesh.uv = newUV; + mesh.triangles = newTriangles; + + mesh.triangles = mesh.triangles.Reverse().ToArray(); + } + newUV = new Vector2[newVertices.Length]; + + mz = 0.0f; + + for (j = 0; j < newUV.Length; j++) { + // if(j _widthCurve.Length - 3) { + infold = 0; + thicknessThisRow = 0.0001f; + _widthCurve[(int)i] = 0.00001f; + Debug.Log("last Frame"); + } + Debug.Log("#infold = " + infold); + if (roughEdges && i > roughEdgesSize * 4.0f) { + re = 0.005f * (float)(i % roughEdgesSize); + if (re > _widthCurve[(int)i] / 4.0f) { + re = _widthCurve[(int)i] / 4.0f; + } + } + else { + re = 0.0f; + } + // ------- downside of the leaf -------- + Vector3 newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, _widthCurve[(int)i] * width + re, _foldCurve[(int)i].x - infold * (0.3f + _widthCurve[(int)i])); + newVertices[(int)i * 3 + 0] = newVer; + newnormals[(int)i * 3 + 0] = new Vector3(0, 0, 1); + + newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, 0.0f, _foldCurve[(int)i].x + thicknessThisRow); + newVertices[(int)i * 3 + 1] = newVer; + newnormals[(int)i * 3 + 1] = new Vector3(0, 0, 1); + + newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, -1.0f * _widthCurve[(int)i] * width + re, _foldCurve[(int)i].x - infold * (0.3f + _widthCurve[(int)i])); + newVertices[(int)i * 3 + 2] = newVer; + newnormals[(int)i * 3 + 2] = new Vector3(0, 0, 1); + + // ------- upside of the leaf -------- + newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, _widthCurve[(int)i] * width + re, _foldCurve[(int)i].x - infold * (0.3f + _widthCurve[(int)i])); + newVertices[(int)i * 3 + 0 + al] = newVer; + newnormals[(int)i * 3 + 0 + al] = new Vector3(0, 0, -1); + + newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, 0.0f, _foldCurve[(int)i].x); + newVertices[(int)i * 3 + 1 + al] = newVer; + newnormals[(int)i * 3 + 1 + al] = new Vector3(0, 0, -1); + + newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, -1.0f * _widthCurve[(int)i] * width + re, _foldCurve[(int)i].x - infold * (0.3f + _widthCurve[(int)i])); + newVertices[(int)i * 3 + 2 + al] = newVer; + newnormals[(int)i * 3 + 2 + al] = new Vector3(0, 0, -1); + + } + + if (branchesDistance == 0 || !showBranches) { + newTriangles = new int[(_widthCurve.Length - 1) * (24 * 2)]; + } + else { + newTriangles = new int[(_widthCurve.Length - 1) * (24 * 2) + 24 * ((_widthCurve.Length / branchesDistance))]; + } + + int ti = 0; + for (j = 1; j < _widthCurve.Length; j++) { + int k = j - 1; + if (showBranches || j != _widthCurve.Length - 1) { + + // ------- downside of the leaf -------- + newTriangles[ti++] = k * 3 + 1; + newTriangles[ti++] = k * 3; + newTriangles[ti++] = j * 3; + + newTriangles[ti++] = k * 3 + 1; + newTriangles[ti++] = j * 3; + newTriangles[ti++] = j * 3 + 1; + + newTriangles[ti++] = k * 3 + 1; + newTriangles[ti++] = j * 3 + 2; + newTriangles[ti++] = k * 3 + 2; + + newTriangles[ti++] = k * 3 + 1; + newTriangles[ti++] = j * 3 + 1; + newTriangles[ti++] = j * 3 + 2; + + // ------- upside of the leaf -------- + + newTriangles[ti++] = k * 3 + 1 + al; + newTriangles[ti++] = j * 3 + 0 + al; + newTriangles[ti++] = k * 3 + 0 + al; + + newTriangles[ti++] = k * 3 + 1 + al; + newTriangles[ti++] = j * 3 + 1 + al; + newTriangles[ti++] = j * 3 + 0 + al; + + newTriangles[ti++] = k * 3 + 1 + al; + newTriangles[ti++] = k * 3 + 2 + al; + newTriangles[ti++] = j * 3 + 2 + al; + + newTriangles[ti++] = k * 3 + 1 + al; + newTriangles[ti++] = j * 3 + 2 + al; + newTriangles[ti++] = j * 3 + 1 + al; + + + } + } + + + int abr = _widthCurve.Length * 4; + float mz = 0.0f; + + Vector2[] newUV = new Vector2[newVertices.Length]; + + for (j = 0; j < newUV.Length; j++) { + if (j < abr) { + newUV[j] = new Vector2(newVertices[j].x, newVertices[j].z); + if (mz < newVertices[j].z) { + mz = newVertices[j].z; + } + } + else { + newUV[j] = new Vector2(newVertices[j].x, newVertices[j].z + mz); + } + } + + mesh.vertices = newVertices; + // mesh.uv = newUV; + mesh.triangles = newTriangles; + mesh.RecalculateBounds(); + mesh.triangles = mesh.triangles.Reverse().ToArray(); + mesh.normals = newnormals; + mesh.RecalculateNormals(); + + if (showBranches) { + // newTriangles = newTriangles.Reverse().ToArray(); + for (i = 0.0f; i < _widthCurve.Length; i++) { + float branchThickness = 1.2f * thickness; + if (_widthCurve[(int)i] / 10.0f < branchThickness) { + branchThickness = _widthCurve[(int)i] / 10.0f; + } + Vector3 newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, 0.0f, _foldCurve[(int)i].x + (branchThickness)); + newVertices[(int)i * 4 + 0 + abr] = newVer; + newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, 0.0f, _foldCurve[(int)i].x - (branchThickness)); + newVertices[(int)i * 4 + 1 + abr] = newVer; + newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, branchThickness, _foldCurve[(int)i].x); + newVertices[(int)i * 4 + 2 + abr] = newVer; + newVer = new Vector3((length / numberOfAnimationSteps) * scaleL * _foldCurve[(int)i].y, -branchThickness, _foldCurve[(int)i].x); + newVertices[(int)i * 4 + 3 + abr] = newVer; + Debug.Log("#_foldCurve[(int)i]=" + _foldCurve[(int)i]); + } + for (j = 1; j < _widthCurve.Length; j++) { + int k = j - 1; + + // prawa i lewa patrząc od góry ODWRÓCONE + + newTriangles[ti++] = k * 4 + 0 + abr;//góra prawa i 2 na dole + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 4 + 2 + abr; + + newTriangles[ti++] = j * 4 + 2 + abr;//góra prawa i 2 u góry + newTriangles[ti++] = j * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 0 + abr; + // + newTriangles[ti++] = k * 4 + 3 + abr;//góra lewa i 2 na dole + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = j * 4 + 0 + abr; + + newTriangles[ti++] = j * 4 + 3 + abr;//góra lewa i 2 u góry + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 4 + 0 + abr; + // + + + + newTriangles[ti++] = j * 4 + 3 + abr;//dół lewa i 2 na dole + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + // + newTriangles[ti++] = j * 4 + 3 + abr;//dół lewa i 2 u góry + newTriangles[ti++] = j * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 1 + abr; + // + newTriangles[ti++] = j * 4 + 1 + abr;//dół prawa i 2 na dole + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = k * 4 + 1 + abr; + // + newTriangles[ti++] = j * 4 + 2 + abr;//dół prawa i 2 u góry + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 4 + 1 + abr; + + //// prawa i lewa patrząc od góry + // + // newTriangles[ti++] = k * 4 + 0 + abr;//góra prawa i 2 na dole + // newTriangles[ti++] = j * 4 + 0 + abr; + // newTriangles[ti++] = k * 4 + 3 + abr; + // + // newTriangles[ti++] = j * 4 + 3 + abr;//góra lewa i 2 u góry + // newTriangles[ti++] = j * 4 + 0 + abr; + // newTriangles[ti++] = k * 4 + 0 + abr; + //// + // newTriangles[ti++] = k * 4 + 3 + abr;//góra lewa i 2 na dole + // newTriangles[ti++] = j * 4 + 0 + abr; + // newTriangles[ti++] = k * 4 + 0 + abr; + // + // newTriangles[ti++] = j * 4 + 3 + abr;//góra prawa i 2 u góry + // newTriangles[ti++] = j * 4 + 0 + abr; + // newTriangles[ti++] = k * 4 + 3 + abr; + //// + //// + // newTriangles[ti++] = j * 4 + 3 + abr;//dół lewa i 2 na dole + // newTriangles[ti++] = k * 4 + 3 + abr; + // newTriangles[ti++] = k * 4 + 1 + abr; + //// + //// + // newTriangles[ti++] = j * 4 + 3 + abr;//dół lewa i 2 u góry + // newTriangles[ti++] = k * 4 + 1 + abr; + // newTriangles[ti++] = j * 4 + 1 + abr; + //// + // newTriangles[ti++] = j * 4 + 1 + abr;//dół prawa i 2 na dole + // newTriangles[ti++] = k * 4 + 1 + abr; + // newTriangles[ti++] = k * 4 + 2 + abr; + //// + // newTriangles[ti++] = j * 4 + 2 + abr;//dół prawa i 2 u góry + // newTriangles[ti++] = j * 4 + 1 + abr; + // newTriangles[ti++] = k * 4 + 2 + abr; + if (branchesDistance > 2) { + if (j % branchesDistance == 0 && j + branchesMargin < _widthCurve.Length && _widthCurve.Length > 2 * branchesMargin) { + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 3 + 2 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 3 + 0 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 2 + abr; + newTriangles[ti++] = j * 3 + 2 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 0 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 2 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 1 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 0 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 2 + branchesMargin * 3; + + newTriangles[ti++] = k * 4 + 0 + abr; + newTriangles[ti++] = k * 4 + 3 + abr; + newTriangles[ti++] = j * 3 + 0 + branchesMargin * 3; + } + } + } + + mesh.vertices = newVertices; + // mesh.uv = newUV; + mesh.triangles = newTriangles; + + mesh.triangles = mesh.triangles.Reverse().ToArray(); + } + newUV = new Vector2[newVertices.Length]; + + mz = 0.0f; + + for (j = 0; j < newUV.Length; j++) { + // if(j 1 && i < _foldCurve.Length - 2) { + if (Mathf.Abs((_widthCurve[i + 1] - _widthCurve[i]) - (_widthCurve[i] - _widthCurve[i - 1])) < simplification) { + continue; + } + } + _foldCurveVectorFull[j] = new Vector2(_foldCurve[i], i); + _widthCurveNewFull[j++] = _widthCurve[i]; + } + Vector2[] _foldCurveVector = new Vector2[j]; + float[] _widthCurveNew = new float[j]; + for (int i = 0; i < j; i++) { + _foldCurveVector[i] = _foldCurveVectorFull[i]; + _widthCurveNew[i] = _widthCurveNewFull[i]; + } + return new CurvesContainer(_widthCurveNew, _foldCurveVector); + } +} diff --git a/Unity Project/Assets/Scripts/LeafGrow.cs.meta b/Unity Project/Assets/Scripts/LeafGrow.cs.meta new file mode 100644 index 0000000..d85d4f5 --- /dev/null +++ b/Unity Project/Assets/Scripts/LeafGrow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea4550bcec5ad4f4aba095cca2b42cb4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/LeafGrowScript.cs b/Unity Project/Assets/Scripts/LeafGrowScript.cs new file mode 100644 index 0000000..5db6589 --- /dev/null +++ b/Unity Project/Assets/Scripts/LeafGrowScript.cs @@ -0,0 +1,337 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class LeafGrowScript : MonoBehaviour +{ + public GameObject parent; + public GameObject materialSettings; + [Header("Leaf shape")] + public Vector2[] widthCurveKeyPoints = {new Vector2(0.0f, 0.0f), new Vector2(0.5f, 1.0f), new Vector2(1.0f, 0.0f)}; + public Vector2[] foldCurveKeyPoints = {new Vector2(0.0f, 0.0f), new Vector2(0.5f, 1.0f), new Vector2(1.0f, 0.0f)}; + public float lengthScale = 0.06f; + public float thickness = 0.01f; + public float infold = 0.03f; + + [Header("Animation and resolution")] + public float framesBetweenSteps = 2.0f; + public int numberOfAnimationSteps = 30; + [Comment("The number of animation steps also affects the resolution of the model", "8 * numberOfAnimationSteps = number of vertices")] + public bool commentSpace = true; + // EditorGUILayout.HelpBox("Number of animation steps also affects resolution of the model" , MessageType.Info); + + [Header("Special features")] + public bool roughEdges = false; + public int roughEdgesSize = 10; + public int numberOfBranchesPairs = 10; + public bool showBranches = false; + public bool colision = false; + public Rigidbody colisionJoint; + + [Header("Position")] + public float positionX = 0.0f; + public float positionY = 0.0f; + public float positionZ = 0.0f; + + [Header("Rotation")] + public float rotationX = 0.0f; + public float rotationY = 0.0f; + public float rotationZ = 0.0f; + + [Header("Copies of leaf")] + public int numberOfCopies = 0; + + public float positionXMove = 0.0f; + public float positionYMove = 0.0f; + public float positionZMove = 0.0f; + public float rotationXChange = 0.0f; + public float rotationYChange = 0.0f; + public float rotationZChange = 0.0f; + public int animationStepsChange = -1; + [Comment("Decrease the number of animation steps with each copy", "AnimationStepsLimit")] + public bool commentSpaceB = true; + public int animationFrameDelay = 2; + [Comment("Delay between creation of each copy", "animationFrameDelay")] + public bool commentSpaceC = true; + + int maxNumberOfSteps = 0; + int frame = 0; + // Start is called before the first frame update + public void addNewLeaf(GameObject newParent, Vector3 newPosition, Vector3 newRotation, Vector2[] newWidthCurveKeyPoints, Vector2[] newFoldCurveKeyPoints, float newLengthScale, float newThickness, float newInfold) + { + GameObject leafObject = new GameObject("newLeaf"); + int i = 0; + MeshFilter leafMeshFilter = leafObject.AddComponent(); + leafMeshFilter = materialSettings.GetComponent(); + MeshRenderer leafMeshRenderer = leafObject.AddComponent(); + leafMeshRenderer = materialSettings.GetComponent(); + leafObject.GetComponent().material = materialSettings.GetComponent().material; + + + LeafGrow newLeaf = leafObject.AddComponent(); + leafObject.GetComponent().parent = newParent.GetComponent(); + leafObject.GetComponent().localPosition = newPosition; + leafObject.GetComponent().localRotation = Quaternion.Euler(newRotation.x, newRotation.y, newRotation.z); + + + Keyframe[] widthCurveKeys = new Keyframe[newWidthCurveKeyPoints.Length]; + float directionIn = 0.0f; + float directionOut= 0.0f; + for(i=0;i newWidthCurveKeyPoints[i-1].y) + { + directionIn = (newWidthCurveKeyPoints[i+1].x - newWidthCurveKeyPoints[i-1].x); + } + if(newWidthCurveKeyPoints[i+1].y < newWidthCurveKeyPoints[i-1].y) + { + directionIn = (newWidthCurveKeyPoints[i-1].x - newWidthCurveKeyPoints[i+1].x); + } + if(newWidthCurveKeyPoints[i-1].y > newWidthCurveKeyPoints[i+1].y) + { + directionOut = (newWidthCurveKeyPoints[i-1].x - newWidthCurveKeyPoints[i+1].x); + } + if(newWidthCurveKeyPoints[i-1].y < newWidthCurveKeyPoints[i+1].y) + { + directionOut = (newWidthCurveKeyPoints[i+1].x - newWidthCurveKeyPoints[i-1].x); + } + widthCurveKeys[i] = new Keyframe(newWidthCurveKeyPoints[i].x, newWidthCurveKeyPoints[i].y, directionIn, directionOut, 0.4f ,0.4f); + } + else + { + widthCurveKeys[i] = new Keyframe(newWidthCurveKeyPoints[i].x, newWidthCurveKeyPoints[i].y, 0,0,0,0); + } + } + AnimationCurve widthCurve = new AnimationCurve(widthCurveKeys); +// widthCurve.preWrapMode = WrapMode.PingPong; +// widthCurve.postWrapMode = WrapMode.PingPong; + + Keyframe[] foldCurveKeys = new Keyframe[newFoldCurveKeyPoints.Length]; + + for(i=0;i newFoldCurveKeyPoints[i-1].y) + { + directionIn = (newFoldCurveKeyPoints[i+1].x - newFoldCurveKeyPoints[i-1].x); + } + if(newFoldCurveKeyPoints[i+1].y < newFoldCurveKeyPoints[i-1].y) + { + directionIn = (newFoldCurveKeyPoints[i-1].x - newFoldCurveKeyPoints[i+1].x); + } + if(newFoldCurveKeyPoints[i-1].y > newFoldCurveKeyPoints[i+1].y) + { + directionOut = (newFoldCurveKeyPoints[i-1].x - newFoldCurveKeyPoints[i+1].x); + } + if(newFoldCurveKeyPoints[i-1].y < newFoldCurveKeyPoints[i+1].y) + { + directionOut = (newFoldCurveKeyPoints[i+1].x - newFoldCurveKeyPoints[i-1].x); + } + foldCurveKeys[i] = new Keyframe(newFoldCurveKeyPoints[i].x, newFoldCurveKeyPoints[i].y, directionIn, directionOut, 0.4f ,0.4f); + } + else + { + foldCurveKeys[i] = new Keyframe(newFoldCurveKeyPoints[i].x, newFoldCurveKeyPoints[i].y, 0,0,0,0); + } + } + AnimationCurve foldCurve = new AnimationCurve(foldCurveKeys); +// foldCurve.preWrapMode = WrapMode.PingPong; +// foldCurve.postWrapMode = WrapMode.PingPong; + + + newLeaf.widthCurve = widthCurve; + newLeaf.foldCurve = foldCurve; + newLeaf.length = newLengthScale; + newLeaf.thickness = newThickness; + newLeaf.infold = newInfold; + newLeaf.framesBetweenSteps = framesBetweenSteps; + newLeaf.numberOfAnimationSteps = numberOfAnimationSteps; + newLeaf.roughEdges = roughEdges; + newLeaf.roughEdgesSize = roughEdgesSize; + newLeaf.numberOfBranchesPairs = numberOfBranchesPairs; + newLeaf.showBranches = showBranches; + newLeaf.colision = colision; + newLeaf.colisionJoint = colisionJoint; + newLeaf.maxNumberOfSteps = maxNumberOfSteps; + } + public void Grow(bool inEditor = false) + { + GameObject leafObject = new GameObject("leafScriptStart"); + int i = 0; + MeshFilter leafMeshFilter = leafObject.AddComponent(); + leafMeshFilter = materialSettings.GetComponent(); + MeshRenderer leafMeshRenderer = leafObject.AddComponent(); + leafMeshRenderer = materialSettings.GetComponent(); + leafObject.GetComponent().material = materialSettings.GetComponent().material; + + + LeafGrow newLeaf = leafObject.AddComponent(); + leafObject.GetComponent().parent = parent.GetComponent(); + leafObject.GetComponent().localPosition = new Vector3(positionX, positionY, positionZ); + leafObject.GetComponent().localRotation = Quaternion.Euler(rotationX, rotationY, rotationZ); + + Keyframe[] widthCurveKeys = new Keyframe[widthCurveKeyPoints.Length]; + float directionIn = 0.0f; + float directionOut= 0.0f; + for(i=0;i widthCurveKeyPoints[i-1].y) + { + directionIn = (widthCurveKeyPoints[i+1].x - widthCurveKeyPoints[i-1].x); + } + if(widthCurveKeyPoints[i+1].y < widthCurveKeyPoints[i-1].y) + { + directionIn = (widthCurveKeyPoints[i-1].x - widthCurveKeyPoints[i+1].x); + } + if(widthCurveKeyPoints[i-1].y > widthCurveKeyPoints[i+1].y) + { + directionOut = (widthCurveKeyPoints[i-1].x - widthCurveKeyPoints[i+1].x); + } + if(widthCurveKeyPoints[i-1].y < widthCurveKeyPoints[i+1].y) + { + directionOut = (widthCurveKeyPoints[i+1].x - widthCurveKeyPoints[i-1].x); + } + widthCurveKeys[i] = new Keyframe(widthCurveKeyPoints[i].x, widthCurveKeyPoints[i].y, directionIn, directionOut, 0.4f ,0.4f); + } + else + { + widthCurveKeys[i] = new Keyframe(widthCurveKeyPoints[i].x, widthCurveKeyPoints[i].y, 0,0,0,0); + } + } + AnimationCurve widthCurve = new AnimationCurve(widthCurveKeys); +// widthCurve.preWrapMode = WrapMode.PingPong; +// widthCurve.postWrapMode = WrapMode.PingPong; + + Keyframe[] foldCurveKeys = new Keyframe[foldCurveKeyPoints.Length]; + + for(i=0;i foldCurveKeyPoints[i-1].y) + { + directionIn = (foldCurveKeyPoints[i+1].x - foldCurveKeyPoints[i-1].x); + } + if(foldCurveKeyPoints[i+1].y < foldCurveKeyPoints[i-1].y) + { + directionIn = (foldCurveKeyPoints[i-1].x - foldCurveKeyPoints[i+1].x); + } + if(foldCurveKeyPoints[i-1].y > foldCurveKeyPoints[i+1].y) + { + directionOut = (foldCurveKeyPoints[i-1].x - foldCurveKeyPoints[i+1].x); + } + if(foldCurveKeyPoints[i-1].y < foldCurveKeyPoints[i+1].y) + { + directionOut = (foldCurveKeyPoints[i+1].x - foldCurveKeyPoints[i-1].x); + } + foldCurveKeys[i] = new Keyframe(foldCurveKeyPoints[i].x, foldCurveKeyPoints[i].y, directionIn, directionOut, 0.4f ,0.4f); + } + else + { + foldCurveKeys[i] = new Keyframe(foldCurveKeyPoints[i].x, foldCurveKeyPoints[i].y, 0,0,0,0); + } + } + AnimationCurve foldCurve = new AnimationCurve(foldCurveKeys); +// foldCurve.preWrapMode = WrapMode.PingPong; +// foldCurve.postWrapMode = WrapMode.PingPong; + + + newLeaf.widthCurve = widthCurve; + newLeaf.foldCurve = foldCurve; + newLeaf.length = lengthScale; + newLeaf.thickness = thickness; + newLeaf.infold = infold; + newLeaf.framesBetweenSteps = framesBetweenSteps; + newLeaf.numberOfAnimationSteps = numberOfAnimationSteps; + newLeaf.roughEdges = roughEdges; + newLeaf.roughEdgesSize = roughEdgesSize; + newLeaf.numberOfBranchesPairs = numberOfBranchesPairs; + newLeaf.showBranches = showBranches; + newLeaf.colision = colision; + newLeaf.colisionJoint = colisionJoint; + newLeaf.maxNumberOfSteps = maxNumberOfSteps; + + if(inEditor) + { + newLeaf.DrawLeaf(); + } + nextCopy(); + } + void nextCopy() + { + positionX += positionXMove; + positionY += positionYMove; + positionZ += positionZMove; + + rotationX += rotationXChange; + rotationY += rotationYChange; + rotationZ += rotationZChange; + + if(numberOfAnimationSteps > 4) + { + numberOfAnimationSteps += animationStepsChange; + } + } + private Vector3 spos; + private Vector3 srot; + private int numberOfAnimationStepsStart; + void Start() + { + maxNumberOfSteps = numberOfAnimationSteps; + spos = new Vector3(positionX, positionY, positionZ); + srot = new Vector3(rotationX, rotationY, rotationZ); + numberOfAnimationStepsStart = numberOfAnimationSteps; + } + public void DrawLeaf() + { + Start(); + for(int i=0; i/delta"); + movementAction = map.AddAction("move", binding: "/leftStick"); + verticalMovementAction = map.AddAction("Vertical Movement"); + boostFactorAction = map.AddAction("Boost Factor", binding: "/scroll"); + + lookAction.AddBinding("/rightStick").WithProcessor("scaleVector2(x=15, y=15)"); + movementAction.AddCompositeBinding("Dpad") + .With("Up", "/w") + .With("Up", "/upArrow") + .With("Down", "/s") + .With("Down", "/downArrow") + .With("Left", "/a") + .With("Left", "/leftArrow") + .With("Right", "/d") + .With("Right", "/rightArrow"); + verticalMovementAction.AddCompositeBinding("Dpad") + .With("Up", "/pageUp") + .With("Down", "/pageDown") + .With("Up", "/e") + .With("Down", "/q") + .With("Up", "/rightshoulder") + .With("Down", "/leftshoulder"); + boostFactorAction.AddBinding("/Dpad").WithProcessor("scaleVector2(x=1, y=4)"); + + movementAction.Enable(); + lookAction.Enable(); + verticalMovementAction.Enable(); + boostFactorAction.Enable(); + } +#endif + + void OnEnable() + { + m_TargetCameraState.SetFromTransform(transform); + m_InterpolatingCameraState.SetFromTransform(transform); + } + + Vector3 GetInputTranslationDirection() + { + Vector3 direction = Vector3.zero; +#if ENABLE_INPUT_SYSTEM + var moveDelta = movementAction.ReadValue(); + direction.x = moveDelta.x; + direction.z = moveDelta.y; + direction.y = verticalMovementAction.ReadValue().y; +#else + if (Input.GetKey(KeyCode.W)) + { + direction += Vector3.forward; + } + if (Input.GetKey(KeyCode.S)) + { + direction += Vector3.back; + } + if (Input.GetKey(KeyCode.A)) + { + direction += Vector3.left; + } + if (Input.GetKey(KeyCode.D)) + { + direction += Vector3.right; + } + if (Input.GetKey(KeyCode.Q)) + { + direction += Vector3.down; + } + if (Input.GetKey(KeyCode.E)) + { + direction += Vector3.up; + } +#endif + return direction; + } + + void Update() + { + // Exit Sample + + if (IsEscapePressed()) + { + Application.Quit(); + #if UNITY_EDITOR + UnityEditor.EditorApplication.isPlaying = false; + #endif + } + + // Hide and lock cursor when right mouse button pressed + if (IsRightMouseButtonDown()) + { + Cursor.lockState = CursorLockMode.Locked; + } + + // Unlock and show cursor when right mouse button released + if (IsRightMouseButtonUp()) + { + Cursor.visible = true; + Cursor.lockState = CursorLockMode.None; + } + + // Rotation + if (IsCameraRotationAllowed()) + { + var mouseMovement = GetInputLookRotation() * Time.deltaTime * 5; + if (invertY) + mouseMovement.y = -mouseMovement.y; + + var mouseSensitivityFactor = mouseSensitivityCurve.Evaluate(mouseMovement.magnitude); + + m_TargetCameraState.yaw += mouseMovement.x * mouseSensitivityFactor; + m_TargetCameraState.pitch += mouseMovement.y * mouseSensitivityFactor; + } + + // Translation + var translation = GetInputTranslationDirection() * Time.deltaTime; + + // Speed up movement when shift key held + if (IsBoostPressed()) + { + translation *= 10.0f; + } + + // Modify movement by a boost factor (defined in Inspector and modified in play mode through the mouse scroll wheel) + boost += GetBoostFactor(); + translation *= Mathf.Pow(2.0f, boost); + + m_TargetCameraState.Translate(translation); + + // Framerate-independent interpolation + // Calculate the lerp amount, such that we get 99% of the way to our target in the specified time + var positionLerpPct = 1f - Mathf.Exp((Mathf.Log(1f - 0.99f) / positionLerpTime) * Time.deltaTime); + var rotationLerpPct = 1f - Mathf.Exp((Mathf.Log(1f - 0.99f) / rotationLerpTime) * Time.deltaTime); + m_InterpolatingCameraState.LerpTowards(m_TargetCameraState, positionLerpPct, rotationLerpPct); + + m_InterpolatingCameraState.UpdateTransform(transform); + } + + float GetBoostFactor() + { +#if ENABLE_INPUT_SYSTEM + return boostFactorAction.ReadValue().y * 0.01f; +#else + return Input.mouseScrollDelta.y * 0.2f; +#endif + } + + Vector2 GetInputLookRotation() + { +#if ENABLE_INPUT_SYSTEM + return lookAction.ReadValue(); +#else + return new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * 10; +#endif + } + + bool IsBoostPressed() + { +#if ENABLE_INPUT_SYSTEM + bool boost = Keyboard.current != null ? Keyboard.current.leftShiftKey.isPressed : false; + boost |= Gamepad.current != null ? Gamepad.current.xButton.isPressed : false; + return boost; +#else + return Input.GetKey(KeyCode.LeftShift); +#endif + + } + + bool IsEscapePressed() + { +#if ENABLE_INPUT_SYSTEM + return Keyboard.current != null ? Keyboard.current.escapeKey.isPressed : false; +#else + return Input.GetKey(KeyCode.Escape); +#endif + } + + bool IsCameraRotationAllowed() + { +#if ENABLE_INPUT_SYSTEM + bool canRotate = Mouse.current != null ? Mouse.current.rightButton.isPressed : false; + canRotate |= Gamepad.current != null ? Gamepad.current.rightStick.ReadValue().magnitude > 0 : false; + return canRotate; +#else + return Input.GetMouseButton(1); +#endif + } + + bool IsRightMouseButtonDown() + { +#if ENABLE_INPUT_SYSTEM + return Mouse.current != null ? Mouse.current.rightButton.isPressed : false; +#else + return Input.GetMouseButtonDown(1); +#endif + } + + bool IsRightMouseButtonUp() + { +#if ENABLE_INPUT_SYSTEM + return Mouse.current != null ? !Mouse.current.rightButton.isPressed : false; +#else + return Input.GetMouseButtonUp(1); +#endif + } + + } + +} \ No newline at end of file diff --git a/Unity Project/Assets/Scripts/SimpleCameraController.cs.meta b/Unity Project/Assets/Scripts/SimpleCameraController.cs.meta new file mode 100644 index 0000000..5bb6da8 --- /dev/null +++ b/Unity Project/Assets/Scripts/SimpleCameraController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be76e5f14cfee674cb30b491fb72b09b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/Turtle2D.cs b/Unity Project/Assets/Scripts/Turtle2D.cs new file mode 100644 index 0000000..ca4b09a --- /dev/null +++ b/Unity Project/Assets/Scripts/Turtle2D.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; +using ConsoleLSystem; +using System; + +public class Turtle2D : TurtleLSystem { + public GameObject obj; + public float angle; + + protected override void initLiteralInterpretation() { + turtleInterpretation = new Dictionary>>(); + //turtleInterpretation + var transformation = Matrix4x4.Translate(new Vector3(0.0f, 0.1f, 0)) * Matrix4x4.Scale(new Vector3 (0.05f, 0.1f, 0.05f)); + + turtleInterpretation.Add("+", (float[] args) => new Tuple(null, Matrix4x4.Rotate(Quaternion.Euler(0, 0, -angle)))); + turtleInterpretation.Add("-", (float[] args) => new Tuple(null, Matrix4x4.Rotate(Quaternion.Euler(0, 0, angle)))); + + //Wildcard how to represent any other symbol + turtleInterpretation.Add("*.*", (float[] args) => new Tuple(obj, transformation)); + } +} + \ No newline at end of file diff --git a/Unity Project/Assets/Scripts/Turtle2D.cs.meta b/Unity Project/Assets/Scripts/Turtle2D.cs.meta new file mode 100644 index 0000000..8d4419d --- /dev/null +++ b/Unity Project/Assets/Scripts/Turtle2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 077aaeb6378653940b8ed1da8871fed4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/Turtle3D.cs b/Unity Project/Assets/Scripts/Turtle3D.cs new file mode 100644 index 0000000..6cf6f87 --- /dev/null +++ b/Unity Project/Assets/Scripts/Turtle3D.cs @@ -0,0 +1,59 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; +using ConsoleLSystem; +using System; + +public class Turtle3D : TurtleLSystem { + public GameObject obj; + public GameObject sphere; + public float angle; + + private Func _roation(Vector3 axis) { + Matrix4x4 f(float[] args) { + if (args.Length == 0) { + return Matrix4x4.Rotate(Quaternion.AngleAxis(angle, axis)); + } + else { + return Matrix4x4.Rotate(Quaternion.AngleAxis(args[0], axis)); + } + } + return f; + } + + protected override void initLiteralInterpretation() { + turtleInterpretation = new Dictionary>>(); + //turtleInterpretation + var transformation = Matrix4x4.Translate(new Vector3(0.0f, 0.1f, 0)) * Matrix4x4.Scale(new Vector3 (0.05f, 0.1f, 0.05f)); + + //turtleInterpretation.Add("+", (float[] args) => new Tuple(null, Matrix4x4.Rotate(Quaternion.Euler(0, 0, -angle)))); + //turtleInterpretation.Add("-", (float[] args) => new Tuple(null, Matrix4x4.Rotate(Quaternion.Euler(0, 0, angle)))); + + //turtleInterpretation.Add("\\", (float[] args) => new Tuple(null, Matrix4x4.Rotate(Quaternion.Euler(0, -angle, 0)))); + //turtleInterpretation.Add("/", (float[] args) => new Tuple(null, Matrix4x4.Rotate(Quaternion.Euler(0, angle, 0)))); + + //turtleInterpretation.Add("^", (float[] args) => new Tuple(null, Matrix4x4.Rotate(Quaternion.Euler(-angle, 0, 0)))); + //turtleInterpretation.Add("&", (float[] args) => new Tuple(null, Matrix4x4.Rotate(Quaternion.Euler(angle, 0, 0)))); + + turtleInterpretation.Add("+", (float[] args) => new Tuple(null, _roation(Vector3.back)(args) )); + turtleInterpretation.Add("-", (float[] args) => new Tuple(null, _roation(Vector3.forward)(args))); + + turtleInterpretation.Add("\\", (float[] args) => new Tuple(null, _roation(Vector3.down)(args))); + turtleInterpretation.Add("/", (float[] args) => new Tuple(null, _roation(Vector3.up)(args))); + + turtleInterpretation.Add("^", (float[] args) => new Tuple(null, _roation(Vector3.left)(args))); + turtleInterpretation.Add("&", (float[] args) => new Tuple(null, _roation(Vector3.right)(args))); + + + turtleInterpretation.Add("f", (float[] args) => new Tuple(null, Matrix4x4.Translate(Vector3.up * args[0]))); + + turtleInterpretation.Add("S", (float[] args) => new Tuple(sphere,Matrix4x4.identity)); + + + //Wildcard how to represent any other symbol + turtleInterpretation.Add("*.*", (float[] args) => new Tuple(obj, transformation)); + } +} + \ No newline at end of file diff --git a/Unity Project/Assets/Scripts/Turtle3D.cs.meta b/Unity Project/Assets/Scripts/Turtle3D.cs.meta new file mode 100644 index 0000000..6f5d753 --- /dev/null +++ b/Unity Project/Assets/Scripts/Turtle3D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdbab7936197e9c4e9c5225e40810916 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/TurtleContextTask.cs b/Unity Project/Assets/Scripts/TurtleContextTask.cs new file mode 100644 index 0000000..caeb859 --- /dev/null +++ b/Unity Project/Assets/Scripts/TurtleContextTask.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class TurtleContextTask : TurtleLSystem { + public GameObject obj; + public GameObject flower; + public GameObject leaf; + public float angle; + + private Func _roation(Vector3 axis) { + Matrix4x4 f(float[] args) { + if (args.Length == 0) { + return Matrix4x4.Rotate(Quaternion.AngleAxis(angle, axis)); + } + else { + return Matrix4x4.Rotate(Quaternion.AngleAxis(args[0], axis)); + } + } + return f; + } + + GameObject setColor(GameObject prefab, int index) { + var result = Instantiate(prefab); + switch (index) { + case 1: + result.GetComponent().material.SetColor("_Color", Color.red); + break; + case 2: + result.GetComponent().material.SetColor("_Color", Color.blue); + break; + case 3: + result.GetComponent().material.SetColor("_Color", Color.white); + break; + } + return result; + } + + protected override void initLiteralInterpretation() { + turtleInterpretation = new Dictionary>>(); + //turtleInterpretation + var transformation = Matrix4x4.Translate(new Vector3(0.0f, 0.1f, 0)) * Matrix4x4.Scale(new Vector3(0.05f, 0.1f, 0.05f)); + turtleInterpretation.Add("+", (float[] args) => new Tuple(null, _roation(Vector3.back)(args))); + turtleInterpretation.Add("-", (float[] args) => new Tuple(null, _roation(Vector3.forward)(args))); + + turtleInterpretation.Add("\\", (float[] args) => new Tuple(null, _roation(Vector3.down)(args))); + turtleInterpretation.Add("/", (float[] args) => new Tuple(null, _roation(Vector3.up)(args))); + + turtleInterpretation.Add("^", (float[] args) => new Tuple(null, _roation(Vector3.left)(args))); + turtleInterpretation.Add("&", (float[] args) => new Tuple(null, _roation(Vector3.right)(args))); + + + turtleInterpretation.Add("f", (float[] args) => new Tuple(null, Matrix4x4.Translate(Vector3.up * args[0]))); + + turtleInterpretation.Add("W", (float[] args) => new Tuple(flower, Matrix4x4.Scale(Vector3.one*0.1f))); + + turtleInterpretation.Add("B", (float[] args) => new Tuple(leaf, Matrix4x4.Scale(Vector3.one))); + + turtleInterpretation.Add("F", (float[] args) => new Tuple(setColor(obj,Mathf.FloorToInt(args[0])), transformation)); + + //Wildcard how to represent any other symbol + turtleInterpretation.Add("*.*", (float[] args) => new Tuple(obj, transformation)); + } +} diff --git a/Unity Project/Assets/Scripts/TurtleContextTask.cs.meta b/Unity Project/Assets/Scripts/TurtleContextTask.cs.meta new file mode 100644 index 0000000..ccb4bd9 --- /dev/null +++ b/Unity Project/Assets/Scripts/TurtleContextTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 881ec2dd8ae9af549b6c916c2cf8e5de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scripts/TurtleLSystem.cs b/Unity Project/Assets/Scripts/TurtleLSystem.cs new file mode 100644 index 0000000..e3211bf --- /dev/null +++ b/Unity Project/Assets/Scripts/TurtleLSystem.cs @@ -0,0 +1,162 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; +using ConsoleLSystem; +using System; + + + +abstract public class TurtleLSystem : MonoBehaviour +{ + public string LSystemPath; + + public uint steps; + + public Dictionary>> turtleInterpretation = new Dictionary>>(); + + private List gameObjects = new List(); + + private Mesh getCylinder(int quality,float width,float length) { + Mesh mesh = new Mesh(); + //mesh.triangles + var points = new List(); + var normals = new List(); + var indices = new List(); + for (float i = 0; i < quality; i++) { + points.Add(new Vector3(Mathf.Cos((i / quality) * 2 * Mathf.PI) * width, 0, Mathf.Sin((i / quality) * 2 * Mathf.PI) * width)); + } + for (float i = 0; i < quality; i++) { + points.Add(new Vector3(Mathf.Cos((i / quality) * 2 * Mathf.PI) * width, length, Mathf.Sin((i / quality) * 2 * Mathf.PI) * width)); + } + //points.Add(new Vector3(0,0,0)); + //points.Add(new Vector3(0, length, 0)); + + for (float i = 0; i < quality; i++) { + normals.Add(new Vector3(Mathf.Cos((i / quality) * 2 * Mathf.PI) * width, 0, Mathf.Sin((i / quality) * 2 * Mathf.PI) * width)); + } + for (float i = 0; i < quality; i++) { + normals.Add(new Vector3(Mathf.Cos((i / quality) * 2 * Mathf.PI) * width, 0, Mathf.Sin((i / quality) * 2 * Mathf.PI) * width)); + } + + //for (int i = 0; i < quality; i++) { + // indices.Add(i); + // indices.Add((i + 1) % quality); + // indices.Add(quality * 2); + //} + //for (int i = 0; i < quality; i++) { + // indices.Add((i + 1) % quality + quality); + // indices.Add(i + quality); + // indices.Add(quality * 2 + 1); + //} + for (int i = 0; i < quality; i++) { + indices.Add((i + 1) % quality); + indices.Add(i); + indices.Add(i + quality); + + indices.Add(i + quality); + indices.Add((i + 1) % quality + quality); + indices.Add((i + 1) % quality); + } + mesh.vertices = points.ToArray(); + mesh.triangles = indices.ToArray(); + mesh.normals = normals.ToArray(); + return mesh; + } + + private LSystemEvaluator evaluator = null; + + private void parseRules(StreamReader sr) { + + } + public void evaluate() { + for (int i=0; i < steps; i++) { + evaluator.rewrite(); + } + Debug.Log(evaluator.lSystemString.ToString()); + } + private GameObject prepeareGameObject(string name, GameObject gameObject,Matrix4x4 transformation) { + GameObject instance; + if (PrefabUtility.GetPrefabAssetType(gameObject) != PrefabAssetType.NotAPrefab) { + instance = Instantiate(gameObject); + } + else { + instance = gameObject; + } + + instance.name = String.Format("LSystem Literal {0}", name); + instance.tag = "LSystemLiteral"; + instance.transform.parent = this.gameObject.transform; + instance.transform.position = transformation.ExtractPosition() + transformation.MultiplyPoint(instance.transform.position); + instance.transform.rotation *= transformation.ExtractRotation(); + instance.transform.localScale = Vector3.Scale(transformation.ExtractScale(), instance.transform.localScale); + return instance; + + } + void createModelsRecursive(LSystemNode node, Matrix4x4 transformation) { + while (node != null) { + Matrix4x4 new_transformation=transformation; + Func> interpretation; + var name = node.literal.name; + if (turtleInterpretation.TryGetValue(name, out interpretation) || turtleInterpretation.TryGetValue("*.*", out interpretation)) { + var result = interpretation(node.literal.values); + new_transformation = new_transformation * result.Item2; + if (result.Item1 != null) { + var instance = prepeareGameObject(name, result.Item1, new_transformation); + } + //gameObjects.Add(gameObject); + //remove scale, rather unnecesary + new_transformation = new_transformation * Matrix4x4.Scale(result.Item2.ExtractScale()).inverse; + } + foreach (var child in node.children) { + createModelsRecursive(child, new_transformation); + } + node = node.mainChild; + transformation = new_transformation; + } + } + private void clearObjects() { + //var objects = Resources.FindObjectsOfTypeAll().Where(obj => obj.name == "Name"); + foreach (GameObject gameObject in GameObject.FindGameObjectsWithTag("LSystemLiteral")) { + DestroyImmediate(gameObject); + + } + gameObjects = new List(); + } + + public void present() { + clearObjects(); + createModelsRecursive(evaluator.lSystemString, Matrix4x4.identity); + } + abstract protected void initLiteralInterpretation(); + public void loadFile() { + clearObjects(); + var sr = new StreamReader(LSystemPath); + evaluator = LSystemFileParser.parseLSystem(sr); + sr.Close(); + turtleInterpretation = new Dictionary>>(); + initLiteralInterpretation(); + } + public void evaluateAndPresent() { + evaluate(); + present(); + Debug.Log(evaluator.lSystemString.ToString().Length); + //x.name = "aaa"; + + //Instantiate(x,Matrix4x4.identity); + } + + + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Unity Project/Assets/Scripts/TurtleLSystem.cs.meta b/Unity Project/Assets/Scripts/TurtleLSystem.cs.meta new file mode 100644 index 0000000..25ffd82 --- /dev/null +++ b/Unity Project/Assets/Scripts/TurtleLSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9f830130a88dbd40a2663c6a1dc301a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Textures.meta b/Unity Project/Assets/Textures.meta new file mode 100644 index 0000000..7371560 --- /dev/null +++ b/Unity Project/Assets/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6800d2a92df32cc45a0ade94882000b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Textures/leaf texutre.jpg b/Unity Project/Assets/Textures/leaf texutre.jpg new file mode 100644 index 0000000..2f46e85 Binary files /dev/null and b/Unity Project/Assets/Textures/leaf texutre.jpg differ diff --git a/Unity Project/Assets/Textures/leaf texutre.jpg.meta b/Unity Project/Assets/Textures/leaf texutre.jpg.meta new file mode 100644 index 0000000..3149773 --- /dev/null +++ b/Unity Project/Assets/Textures/leaf texutre.jpg.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 93d1c1756525276498b7fe77cd4876eb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Packages/manifest.json b/Unity Project/Packages/manifest.json new file mode 100644 index 0000000..1e892bd --- /dev/null +++ b/Unity Project/Packages/manifest.json @@ -0,0 +1,44 @@ +{ + "dependencies": { + "com.unity.collab-proxy": "1.3.9", + "com.unity.formats.fbx": "4.0.1", + "com.unity.ide.rider": "2.0.7", + "com.unity.ide.visualstudio": "2.0.5", + "com.unity.ide.vscode": "1.2.3", + "com.unity.test-framework": "1.1.20", + "com.unity.textmeshpro": "3.0.1", + "com.unity.timeline": "1.4.5", + "com.unity.ugui": "1.0.0", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/Unity Project/Packages/packages-lock.json b/Unity Project/Packages/packages-lock.json new file mode 100644 index 0000000..43585a6 --- /dev/null +++ b/Unity Project/Packages/packages-lock.json @@ -0,0 +1,353 @@ +{ + "dependencies": { + "com.autodesk.fbx": { + "version": "4.0.1", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.collab-proxy": { + "version": "1.3.9", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.formats.fbx": { + "version": "4.0.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.timeline": "1.0.0", + "com.autodesk.fbx": "4.0.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.rider": { + "version": "2.0.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.5", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ide.vscode": { + "version": "1.2.3", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.20", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.textmeshpro": { + "version": "3.0.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.4.5", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.uielementsnative": "1.0.0" + } + }, + "com.unity.modules.uielementsnative": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/Unity Project/ProjectSettings/AudioManager.asset b/Unity Project/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..07ebfb0 --- /dev/null +++ b/Unity Project/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 1024 diff --git a/Unity Project/ProjectSettings/ClusterInputManager.asset b/Unity Project/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/Unity Project/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/Unity Project/ProjectSettings/DynamicsManager.asset b/Unity Project/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..cdc1f3e --- /dev/null +++ b/Unity Project/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_DefaultMaxAngluarSpeed: 7 diff --git a/Unity Project/ProjectSettings/EditorBuildSettings.asset b/Unity Project/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..0147887 --- /dev/null +++ b/Unity Project/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] + m_configObjects: {} diff --git a/Unity Project/ProjectSettings/EditorSettings.asset b/Unity Project/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..de5d0b2 --- /dev/null +++ b/Unity Project/ProjectSettings/EditorSettings.asset @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 0 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref + m_ProjectGenerationRootNamespace: + m_CollabEditorSettings: + inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 0 + m_SerializeInlineMappingsOnOneLine: 1 \ No newline at end of file diff --git a/Unity Project/ProjectSettings/GraphicsSettings.asset b/Unity Project/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..43369e3 --- /dev/null +++ b/Unity Project/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_LogWhenShaderIsCompiled: 0 + m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/Unity Project/ProjectSettings/InputManager.asset b/Unity Project/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/Unity Project/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/Unity Project/ProjectSettings/NavMeshAreas.asset b/Unity Project/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/Unity Project/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/Unity Project/ProjectSettings/PackageManagerSettings.asset b/Unity Project/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..be4a797 --- /dev/null +++ b/Unity Project/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreviewPackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_ErrorMessage: + m_Original: + m_Id: + m_Name: + m_Url: + m_Scopes: [] + m_IsDefault: 0 + m_Capabilities: 0 + m_Modified: 0 + m_Name: + m_Url: + m_Scopes: + - + m_SelectedScopeIndex: 0 diff --git a/Unity Project/ProjectSettings/Physics2DSettings.asset b/Unity Project/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..47880b1 --- /dev/null +++ b/Unity Project/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 1 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/Unity Project/ProjectSettings/PresetManager.asset b/Unity Project/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..67a94da --- /dev/null +++ b/Unity Project/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/Unity Project/ProjectSettings/ProjectSettings.asset b/Unity Project/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..323c407 --- /dev/null +++ b/Unity Project/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,671 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 22 + productGUID: 14e2314ded1236643a94f39dfee3bfd1 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: New Unity Project + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 1 + androidBlitType: 0 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 0 + vulkanEnableLateAcquireNextImage: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleVersion: 0.1 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + useHDRDisplay: 0 + D3DHDRBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: + Standalone: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 19 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 1 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: 11.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 11.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.3d@5.0.4 + templateDefaultScene: Assets/Scenes/SampleScene.unity + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 1 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + AndroidMinifyWithR8: 0 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: [] + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetGraphicsJobs: + - m_BuildTarget: MacStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: Switch + m_GraphicsJobs: 1 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 + - m_BuildTarget: AppleTVSupport + m_GraphicsJobs: 0 + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 1 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 1 + - m_BuildTarget: iOSSupport + m_GraphicsJobs: 0 + - m_BuildTarget: WindowsStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 1 + - m_BuildTarget: LuminSupport + m_GraphicsJobs: 0 + - m_BuildTarget: AndroidPlayer + m_GraphicsJobs: 0 + - m_BuildTarget: WebGLSupport + m_GraphicsJobs: 0 + m_BuildTargetGraphicsJobMode: + - m_BuildTarget: PS4Player + m_GraphicsJobMode: 0 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobMode: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: AndroidPlayer + m_APIs: 150000000b000000 + m_Automatic: 0 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: [] + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetNormalMapEncoding: [] + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchUseGOLDLinker: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchTouchScreenUsage: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchPlayerConnectionEnabled: 1 + switchUseNewStyleFilepaths: 0 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 16 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + scriptingDefineSymbols: {} + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + useReferenceAssemblies: 1 + enableRoslynAnalyzers: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 1 + assemblyVersionValidation: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: Template_3D + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: Template_3D + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: + UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + apiCompatibilityLevel: 6 + activeInputHandler: 0 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 0 + virtualTexturingSupportEnabled: 0 diff --git a/Unity Project/ProjectSettings/ProjectVersion.txt b/Unity Project/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..78a3249 --- /dev/null +++ b/Unity Project/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2020.2.3f1 +m_EditorVersionWithRevision: 2020.2.3f1 (8ff31bc5bf5b) diff --git a/Unity Project/ProjectSettings/QualitySettings.asset b/Unity Project/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..7b7658d --- /dev/null +++ b/Unity Project/ProjectSettings/QualitySettings.asset @@ -0,0 +1,232 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Lumin: 5 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PSP2: 2 + Stadia: 5 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/Unity Project/ProjectSettings/TagManager.asset b/Unity Project/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..a0fee04 --- /dev/null +++ b/Unity Project/ProjectSettings/TagManager.asset @@ -0,0 +1,44 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: + - LSystemLiteral + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/Unity Project/ProjectSettings/TimeManager.asset b/Unity Project/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/Unity Project/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/Unity Project/ProjectSettings/UnityConnectSettings.asset b/Unity Project/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..fa0b146 --- /dev/null +++ b/Unity Project/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/Unity Project/ProjectSettings/VFXManager.asset b/Unity Project/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..3a95c98 --- /dev/null +++ b/Unity Project/ProjectSettings/VFXManager.asset @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/Unity Project/ProjectSettings/VersionControlSettings.asset b/Unity Project/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/Unity Project/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/Unity Project/ProjectSettings/XRSettings.asset b/Unity Project/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..482590c --- /dev/null +++ b/Unity Project/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file diff --git a/teść zadań/.vscode/settings.json b/teść zadań/.vscode/settings.json new file mode 100644 index 0000000..1f3aa38 --- /dev/null +++ b/teść zadań/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "cSpell.language": ",pl", + "cSpell.words": [ + "nast", + "następnicy", + "pnicy" + ] +} \ No newline at end of file diff --git a/teść zadań/Rose/1.jpg b/teść zadań/Rose/1.jpg new file mode 100644 index 0000000..24f263d Binary files /dev/null and b/teść zadań/Rose/1.jpg differ diff --git a/teść zadań/Rose/2.jpg b/teść zadań/Rose/2.jpg new file mode 100644 index 0000000..ec91435 Binary files /dev/null and b/teść zadań/Rose/2.jpg differ diff --git a/teść zadań/Rose/3.jpg b/teść zadań/Rose/3.jpg new file mode 100644 index 0000000..d1f0aa0 Binary files /dev/null and b/teść zadań/Rose/3.jpg differ diff --git a/teść zadań/Rose/rose_diagram.png b/teść zadań/Rose/rose_diagram.png new file mode 100644 index 0000000..060f2f0 Binary files /dev/null and b/teść zadań/Rose/rose_diagram.png differ diff --git a/teść zadań/curve.jpg b/teść zadań/curve.jpg new file mode 100644 index 0000000..8e92f3b Binary files /dev/null and b/teść zadań/curve.jpg differ diff --git a/teść zadań/cw3.html b/teść zadań/cw3.html new file mode 100644 index 0000000..e0a56c3 --- /dev/null +++ b/teść zadań/cw3.html @@ -0,0 +1,173 @@ + + + + + + + cw3 + + + + + + +

Sweep Surface

+

Sweep (swept) Surface to metoda generowania powierzchni za pomocą dwóch krzywych gdzie jedna jest przesuwana wzdłuż drugiej (stąd sweep oznaczające zamiatać)

+

Vogel | Vogel

+

Istnieją różne warianty tej metody, w które pozwalają kierować różnymi parametrami powierzchni. My będziemy wykorzystywać je do tworzenia takich organów jak płatki czy liście. Dlatego w naszym przypadku będziemy kontrolować szerokość i wygięcie powierzchni.

+

Otwórz scenę SweepSurface, znajdziesz w niej obiekt Leaf Generator, wybierz go. Zawiera on skrypt LeafGrow, który będzie służyć do tworzenia liści metodą sweep surface.

+

Skrypt posiada szereg parametrów interesują nas następujące:

+
    +
  • Length - długość powierzchni;
  • +
  • Width - szerokość powierzchni;
  • +
  • Width Curve - krzywa definiująca szerokość powierzchni. By ją modyfikować kliknij na miniaturkę na prawo od napisu. Jest ona opisywana za pomocą krzywych Beziera;
  • +
  • Fold Curve - krzywa definiująca wygięcie wzdłuż powierzchni. Podobnie jak powyżej;
  • +
  • Infold - współczynnik wygięcia w poprzek powierzchni;
  • +
  • Number Of Animation steps - rozdzielczość powierzchni;
  • +
+

Przycisk Grow Leaf generuje powierzchnię.

+

Obsługa krzywych

+

po otwarciu krzywej wyświetli się jej okno widoczne poniżej. Nowe punkty dodaje się poprzez kliknięcie 2 razy lewym przyciskiem na krzywej. Kliknięcie prawym przyciskiem na punkcie otwiera menu, które, pozwala na usuwanie i precyzyjne przesuwanie punktu (można go też zwyczajnie przeciągnąć). Z opcji polecam spróbować Flat i Broken (pozwala modyfikować styczne niezależnie).

+

Vogel
+Przetestuj jak działają powyższe parametry, wygeneruj kilka testowych powierzchni.

+

Zadanie (domowe)

+

W podfolderze leaf_shapes znajdują się ponumerowane ilustracje przedstawiające różne kształty liści. Utwórz liść za pomocą Leaf Grow liść o numerze, który będzie jak najwierniej oddawać liść o numerze, który przystaje do Twojego indeksu modulo 5.

+

Dodawanie tekstury

+

Wygenerowany liść ma dość nieciekawy, jednokolorowy materiał. by to poprawić podmienimy kolor na teksturę liścia. Pierwszym etapem jest znalezienie tekstury, która będzie się nadawać. Pominiemy go i skorzystamy z leaf texutre w podfolderze Texture folderu Models. Odnajdź materiał leaf, kilknij na nią. inspektorze kliknij na kółko obok Albedo, by wybrać teksturę. inspector

+

Pozostaje dopasować teksturę do geometrii liścia. Wykorzystaj do tego parametry Tiling i Offset. Pierwszy służy do skalowania tekstury, drugi do przesuwania jej.

+

Eksportowanie liścia

+

W projekcie powinien być zainstalowany FBX exporter, jeżeli nie jest znajdź go w Window -> Package Manager.

+

By taki liść wykorzystać w innym projekcie należy go wyeksportować, by to zrobić skorzystamy z FBX exporter. Kliknij prawym przyciskiem na Leaf Generator w hierarchii sceny. Następnie wybierz opcję export to FBX…. Ustaw ścieżkę na Assets/Models Export Format na Binary i kliknij export.

+

Poszukaj utworzonego modelu i dodaj go do sceny, żeby się upewnić czy faktycznie jest taki sam.

+

Zadanie domowe

+

Zastąp płatki róży z poprzedniego zadania domoweg wygenerowanymi przez siebie płatkami za pomocą sweep surface

+

Pipe Model

+

Pipe model pozwala zasymulować pogrubianie się gałęzi wraz z rozwojem rośliny. Polega na wprowadzeniu do symboli odpowiadających za segmenty gałęzi parametru, który odpowiada za jej grubość. Nazwijmy go L(width,...), gdzie ... oznacza pozostałe parametry.

+

W największej ogólności metoda polega na modyfikowaniu szerokości na podstawie szerokości jego następników (młodszych gałęzi) za pomocą wzoru

+

\[ width = (\sum_{L_c} width_{L_c}^n)^\frac{1}{n}\]

+

gdzie suma przechodzi po następnikach gałęzi, \(width_{L_c}\) jest grubością danej gałęzi a \(n\) jest parametrem pomiędzy 2 a 3.

+

Sposób działania jest przedstawiony na poniższym obrazku:

+
+pipe model +
+

Jak widać informacja o grubości jest propagowana z czubków gałęzi do pnia, stąd nazwa Pipe model.

+

L-Systemy kontekstowe i komunikacja wstecz

+

Do implementacji pipe model potrzebujemy komunikacji w kierunku od następnika do poprzednika. Na poprzednich zajęciach pojawiła się komunikacja L-Systemu od poprzednika do następnika. Jest ona prostsza w obsłudze, bo symbol może posiadać zawsze co najwyżej jednego poprzednika. Natomiast w przypadku Bracketed L-Systemów i rozgałęzień następników może być dowolna liczba i każdy przypadek będzie obsługiwany osobno.

+

Następniki wypisujemy w nawiasach kwadratowych, przykładowo:

+
A > [B]C -> AA
+

Reguły mogą się tyczyć tylko bezpośrednich sąsiadów, więc przykładowo reguła A>[CD]B jest nieprawidłowa.

+

Reguła będzie zastosowana, gdy symbol ma takie same następniki i w tej samej kolejności co warunku reguły. To znaczy jeśli weźmiemy regułę

+
A > C -> AA
+

to zamieni ona napis AC na AAC, ale A[B]C pozostawi bez zmian.

+

podobnie

+
A > [B][C]D -> AA
+

zamieni A[B][C]D na AA[B][C]D natomiast A[C][B]D nie obsłuży.

+

Te reguły można łączyć z warunkami logicznymi i z instrukcjami stochastycznymi (Przypominam, że symbole są identyfikowane po znaku i liczbie zmiennych.)

+

Pozostaje jeszcze kwestia jak traktowane są ignorowane znaki. Tak jak poprzednio nie mają one wpływu na kontekst, ponadto, jeżeli zdarzy się, że taki symbol ma kilku następników, wszyscy są brani pod uwagę. Przykładowo, gdy + jest ignorowany, to

+
A[+[B]C]D
+A[+B]+[C]D
+

są traktowane jak A[B][C]D.

+

Implementacja w L-Systemach

+

Zakładamy że wszystkie segmenty gałęzi są opisywane przez jeden symbol G(width,...), gdzie parametr width będzie szerokością gałęzi a zamiast ... powinny być pozostałe parametry. n to parametr, który trzeba zamienić na jakąś wartość liczbową w L-Systemie

+

Pierwszym krokiem jest ustawienie we wszystkich regułach, które tworzą nowe segmenty gałęzi, jednej początkowej wartości. Następnie musimy rozpatrzeć wszystkie przypadki, gdy segment gałęzi jest połączony z innymi gałęziami i dodać odpowiednie reguły. Najprościej jest założyć, że rozgałęzienie są maksymalnie podwójne, wtedy wystarczy rozpatrzyć dwa przypadki:

+

Gdy jest rozgałęzienie, wtedy należy dodać regułę, która poszerza gałąź:

+
G(width,...) > [G(width_1,...)]G(width_2,...) -> G((width_1^n+width_2^n)^(1/n),...)
+

Gdy nie ma rozgałęzienia należy przekazać grubość

+
G(width,...) > G(width_1,...) -> G((width_1),...)
+

uwaga, jeżeli zakładasz, że z boku gałęzi mogą wyrosnąć jakieś inne elementy, to trzeba też to uwzględnić i dodać do tego reguły, przykładowo z boku gałęzi może wyrosnąć liść opisywany symbolem L, wtedy trzeba dodać także regułę:

+
G(width,...) > [L]G(width_1,...) -> G((width_1),...)
+

Zadanie

+

W Scenie PipeModel załadowany jest L-System rozwoju rośliny z poprzednich zadań, rozbuduj go o pipe model. Tak zmodyfikuj interpretację żółwia, żeby uzależnić grubość łodygi od parametru odpowiadającego za grubość.

+

Zadanie domowe

+

Wykorzystaj Pozyskaną wiedzę na temat filotaksji i propagacji informacji w L-Systemach do stworzenia modelu rozwoju róży. Użyj propagacji do sterowania wzrostem rośliny zgodnie ze schematem, jako kwiaty użyj wyników modelu z poprzedniego zadania (nie musisz wizualizować ich rozwijania się, wystarczy, że będą się pojawiać i znikać). Zaimplemenuj pipe model.

+

Schemat rozwoju róży

+

Róża składa się z łodyg, kwiatów i liści. Częścią, która rośnie jest jest czubek łodygi, który będziemy nazywać wierzchołkiem.

+

Liście wyrastają bezpośrednio z łodygi, w filotaksji spiralnej. Każdy liść składa się z nieparzystej liczby liści rosnących na przeciwlegle.

+

rose rose

+

Cykl rozwoju róży podzielimy na 4 etapy wzorowane na porach roku.

+

Wiosna

+

W miejscu starych liści pojawiają się zalążki nowych liści, w tym etapie każdy z nich ma szansę stać się wierzchołkiem nowej łodygi. Istniejące wierzchołki rosną i wytwarzają nowe zalążki liści.

+

Lato

+

Obecne wierzchołki kontynuują swój wzrost. Na tym etapie nowe łodygi mogą wyrosnąć tylko z nowych zalążków, które pojawiają się w wyniku rozwoju łodyg, ale szansa na ich pojawienie jest większa. W trakcie tego etapu wierzchołek może zmienić się w kwiat.

+

Jesień

+

Wzrost rośliny się zatrzymuje, kwiaty zamieniają się w owoce, nie powstają nowe liście ani zalążki.

+

Zima

+

Roślina czeka na nową wiosnę, powstałe owoce są obrywane przez okoliczne zwierzęta szukające pożywienia. Pojedyńcze elementy łodygi mogą zostać uśpione lub uszkodzone i w niektórych miejscach nie wyrosną nowe liście lub wierzchołek przestanie funkcjonować.

+
+

Poniżej znajduje się symboliczna reprezentacja zasad

+
+rose +
+ + diff --git a/teść zadań/cw3.md b/teść zadań/cw3.md new file mode 100644 index 0000000..b8c6e67 --- /dev/null +++ b/teść zadań/cw3.md @@ -0,0 +1,168 @@ +# Sweep Surface + +Sweep (swept) Surface to metoda generowania powierzchni za pomocą dwóch krzywych gdzie jedna jest przesuwana wzdłuż drugiej (stąd sweep oznaczające zamiatać) + +![Vogel](swept-tube-c.jpg) | ![Vogel](swept-tube-s.jpg) + +Istnieją różne warianty tej metody, w które pozwalają kierować różnymi parametrami powierzchni. My będziemy wykorzystywać je do tworzenia takich organów jak płatki czy liście. Dlatego w naszym przypadku będziemy kontrolować szerokość i wygięcie powierzchni. + +Otwórz scenę `SweepSurface`, znajdziesz w niej obiekt `Leaf Generator`, wybierz go. Zawiera on skrypt `LeafGrow`, który będzie służyć do tworzenia liści metodą *sweep surface*. + +Skrypt posiada szereg parametrów interesują nas następujące: + + * `Length` - długość powierzchni; + * `Width` - szerokość powierzchni; + * `Width Curve` - krzywa definiująca szerokość powierzchni. By ją modyfikować kliknij na miniaturkę na prawo od napisu. Jest ona opisywana za pomocą krzywych Beziera; + * `Fold Curve` - krzywa definiująca wygięcie wzdłuż powierzchni. Podobnie jak powyżej; + * `Infold` - współczynnik wygięcia w poprzek powierzchni; + * `Number Of Animation steps` - rozdzielczość powierzchni; + +Przycisk `Grow Leaf` generuje powierzchnię. + +### Obsługa krzywych +po otwarciu krzywej wyświetli się jej okno widoczne poniżej. Nowe punkty dodaje się poprzez kliknięcie 2 razy lewym przyciskiem na krzywej. Kliknięcie prawym przyciskiem na punkcie otwiera menu, które, pozwala na usuwanie i precyzyjne przesuwanie punktu (można go też zwyczajnie przeciągnąć). Z opcji polecam spróbować Flat i Broken (pozwala modyfikować styczne niezależnie). + +![Vogel](curve.jpg) +Przetestuj jak działają powyższe parametry, wygeneruj kilka testowych powierzchni. + + + +## Zadanie (domowe) + +W podfolderze `leaf_shapes` znajdują się ponumerowane ilustracje przedstawiające różne kształty liści. Utwórz liść za pomocą `Leaf Grow` liść o numerze, który będzie jak najwierniej oddawać liść o numerze, który przystaje do Twojego indeksu modulo 5. + + +## Dodawanie tekstury + +Wygenerowany liść ma dość nieciekawy, jednokolorowy materiał. by to poprawić podmienimy kolor na teksturę liścia. Pierwszym etapem jest znalezienie tekstury, która będzie się nadawać. Pominiemy go i skorzystamy z `leaf texutre` w podfolderze `Texture` folderu `Models`. Odnajdź materiał `leaf`, kilknij na nią. inspektorze kliknij na kółko obok Albedo, by wybrać teksturę. +![inspector](material.jpg) + +Pozostaje dopasować teksturę do geometrii liścia. Wykorzystaj do tego parametry Tiling i Offset. Pierwszy służy do skalowania tekstury, drugi do przesuwania jej. + +## Eksportowanie liścia + +W projekcie powinien być zainstalowany **FBX exporter**, jeżeli nie jest znajdź go w `Window -> Package Manager`. + +By taki liść wykorzystać w innym projekcie należy go wyeksportować, by to zrobić skorzystamy z **FBX exporter**. Kliknij prawym przyciskiem na `Leaf Generator` w hierarchii sceny. Następnie wybierz opcję **export to FBX...**. Ustaw ścieżkę na `Assets/Models` `Export Format` na **Binary** i kliknij export. + +Poszukaj utworzonego modelu i dodaj go do sceny, żeby się upewnić czy faktycznie jest taki sam. + +## Zadanie domowe + +Zastąp płatki róży z poprzedniego zadania domoweg wygenerowanymi przez siebie płatkami za pomocą sweep surface + + + +# Pipe Model + +Pipe model pozwala zasymulować pogrubianie się gałęzi wraz z rozwojem rośliny. Polega na wprowadzeniu do symboli odpowiadających za segmenty gałęzi parametru, który odpowiada za jej grubość. Nazwijmy go `L(width,...)`, gdzie `...` oznacza pozostałe parametry. + +W największej ogólności metoda polega na modyfikowaniu szerokości na podstawie szerokości jego następników (młodszych gałęzi) za pomocą wzoru + +$$ width = (\sum_{L_c} width_{L_c}^n)^\frac{1}{n}$$ + +gdzie suma przechodzi po następnikach gałęzi, $width_{L_c}$ jest grubością danej gałęzi a $n$ jest parametrem pomiędzy 2 a 3. + +Sposób działania jest przedstawiony na poniższym obrazku: + +![pipe model](pipe_model.png) + + +Jak widać informacja o grubości jest propagowana z czubków gałęzi do pnia, stąd nazwa *Pipe model*. + +## L-Systemy kontekstowe i komunikacja wstecz + +Do implementacji pipe model potrzebujemy komunikacji w kierunku od następnika do poprzednika. Na poprzednich zajęciach pojawiła się komunikacja L-Systemu od poprzednika do następnika. Jest ona prostsza w obsłudze, bo symbol może posiadać zawsze co najwyżej jednego poprzednika. Natomiast w przypadku Bracketed L-Systemów i rozgałęzień następników może być dowolna liczba i każdy przypadek będzie obsługiwany osobno. + + Następniki wypisujemy w nawiasach kwadratowych, przykładowo: +``` +A > [B]C -> AA +``` +Reguły mogą się tyczyć tylko bezpośrednich sąsiadów, więc przykładowo reguła `A>[CD]B` jest nieprawidłowa. + +Reguła będzie zastosowana, gdy symbol ma takie same następniki i w tej samej kolejności co warunku reguły. To znaczy jeśli weźmiemy regułę +``` +A > C -> AA +``` +to zamieni ona napis `AC` na `AAC`, ale `A[B]C` pozostawi bez zmian. + +podobnie +``` +A > [B][C]D -> AA +``` +zamieni `A[B][C]D` na `AA[B][C]D` natomiast `A[C][B]D` nie obsłuży. + +Te reguły można łączyć z warunkami logicznymi i z instrukcjami stochastycznymi (Przypominam, że symbole są identyfikowane po znaku i liczbie zmiennych.) + +Pozostaje jeszcze kwestia jak traktowane są ignorowane znaki. Tak jak poprzednio nie mają one wpływu na kontekst, ponadto, jeżeli zdarzy się, że taki symbol ma kilku następników, wszyscy są brani pod uwagę. Przykładowo, gdy `+` jest ignorowany, to +``` +A[+[B]C]D +A[+B]+[C]D +``` +są traktowane jak `A[B][C]D`. + + +## Implementacja w L-Systemach + +Zakładamy że wszystkie segmenty gałęzi są opisywane przez jeden symbol `G(width,...)`, gdzie parametr `width` będzie szerokością gałęzi a zamiast `...` powinny być pozostałe parametry. `n` to parametr, który trzeba zamienić na jakąś wartość liczbową w L-Systemie + +Pierwszym krokiem jest ustawienie we wszystkich regułach, które tworzą nowe segmenty gałęzi, jednej początkowej wartości. Następnie musimy rozpatrzeć wszystkie przypadki, gdy segment gałęzi jest połączony z innymi gałęziami i dodać odpowiednie reguły. Najprościej jest założyć, że rozgałęzienie są maksymalnie podwójne, wtedy wystarczy rozpatrzyć dwa przypadki: + +Gdy jest rozgałęzienie, wtedy należy dodać regułę, która poszerza gałąź: +```C +G(width,...) > [G(width_1,...)]G(width_2,...) -> G((width_1^n+width_2^n)^(1/n),...) +``` +Gdy nie ma rozgałęzienia należy przekazać grubość +``` +G(width,...) > G(width_1,...) -> G((width_1),...) +``` + +uwaga, jeżeli zakładasz, że z boku gałęzi mogą wyrosnąć jakieś inne elementy, to trzeba też to uwzględnić i dodać do tego reguły, przykładowo z boku gałęzi może wyrosnąć liść opisywany symbolem `L`, wtedy trzeba dodać także regułę: +``` +G(width,...) > [L]G(width_1,...) -> G((width_1),...) +``` + +## Zadanie + +W Scenie `PipeModel` załadowany jest L-System rozwoju rośliny z poprzednich zadań, rozbuduj go o pipe model. Tak zmodyfikuj interpretację żółwia, żeby uzależnić grubość łodygi od parametru odpowiadającego za grubość. + +## Zadanie domowe + +Wykorzystaj Pozyskaną wiedzę na temat filotaksji i propagacji informacji w L-Systemach do stworzenia modelu rozwoju róży. Użyj propagacji do sterowania wzrostem rośliny zgodnie ze schematem, jako kwiaty użyj wyników modelu z poprzedniego zadania (nie musisz wizualizować ich rozwijania się, wystarczy, że będą się pojawiać i znikać). **Zaimplemenuj pipe model**. + + +### Schemat rozwoju róży + +Róża składa się z **łodyg**, **kwiatów** i **liści**. Częścią, która rośnie jest jest czubek łodygi, który będziemy nazywać **wierzchołkiem**. + +Liście wyrastają bezpośrednio z łodygi, w filotaksji spiralnej. Każdy liść składa się z nieparzystej liczby liści rosnących na przeciwlegle. + + +![rose](Rose\3.jpg) +![rose](Rose\2.jpg) + +Cykl rozwoju róży podzielimy na 4 etapy wzorowane na porach roku. + +#### Wiosna + +W miejscu starych liści pojawiają się **zalążki** nowych liści, w tym etapie każdy z nich ma szansę stać się **wierzchołkiem** nowej łodygi. Istniejące **wierzchołki** rosną i wytwarzają nowe zalążki liści. + +#### Lato + +Obecne **wierzchołki** kontynuują swój wzrost. Na tym etapie nowe łodygi mogą wyrosnąć tylko z nowych **zalążków**, które pojawiają się w wyniku rozwoju łodyg, ale szansa na ich pojawienie jest większa. W trakcie tego etapu **wierzchołek** może zmienić się w **kwiat**. + +### Jesień + +Wzrost rośliny się zatrzymuje, kwiaty zamieniają się w owoce, nie powstają nowe liście ani zalążki. + +### Zima + +Roślina czeka na nową wiosnę, powstałe owoce są obrywane przez okoliczne zwierzęta szukające pożywienia. Pojedyńcze elementy łodygi mogą zostać uśpione lub uszkodzone i w niektórych miejscach nie wyrosną nowe liście lub wierzchołek przestanie funkcjonować. + +--- + +Poniżej znajduje się symboliczna reprezentacja zasad + + +![rose](Rose\rose_diagram.png) + diff --git a/teść zadań/leaf texutre.jpg b/teść zadań/leaf texutre.jpg new file mode 100644 index 0000000..2f46e85 Binary files /dev/null and b/teść zadań/leaf texutre.jpg differ diff --git a/teść zadań/leaf_shapes/0 96px-Palmatilobé.svg.png b/teść zadań/leaf_shapes/0 96px-Palmatilobé.svg.png new file mode 100644 index 0000000..ad1873b Binary files /dev/null and b/teść zadań/leaf_shapes/0 96px-Palmatilobé.svg.png differ diff --git a/teść zadań/leaf_shapes/1 96px-Leaf_morphology_pandurate.png b/teść zadań/leaf_shapes/1 96px-Leaf_morphology_pandurate.png new file mode 100644 index 0000000..af0d509 Binary files /dev/null and b/teść zadań/leaf_shapes/1 96px-Leaf_morphology_pandurate.png differ diff --git a/teść zadań/leaf_shapes/2 96px-Leaf_morphology_deltoid.png b/teść zadań/leaf_shapes/2 96px-Leaf_morphology_deltoid.png new file mode 100644 index 0000000..c658dd6 Binary files /dev/null and b/teść zadań/leaf_shapes/2 96px-Leaf_morphology_deltoid.png differ diff --git a/teść zadań/leaf_shapes/3 96px-Leaf_morphology_flabelate.png b/teść zadań/leaf_shapes/3 96px-Leaf_morphology_flabelate.png new file mode 100644 index 0000000..ab4ccf0 Binary files /dev/null and b/teść zadań/leaf_shapes/3 96px-Leaf_morphology_flabelate.png differ diff --git a/teść zadań/leaf_shapes/4 96px-Leaf_morphology_hastate.png b/teść zadań/leaf_shapes/4 96px-Leaf_morphology_hastate.png new file mode 100644 index 0000000..c5bda05 Binary files /dev/null and b/teść zadań/leaf_shapes/4 96px-Leaf_morphology_hastate.png differ diff --git a/teść zadań/leaf_shapes/X 96px-Leaf_morphology_acuminate.png b/teść zadań/leaf_shapes/X 96px-Leaf_morphology_acuminate.png new file mode 100644 index 0000000..00cdf79 Binary files /dev/null and b/teść zadań/leaf_shapes/X 96px-Leaf_morphology_acuminate.png differ diff --git a/teść zadań/material.JPG b/teść zadań/material.JPG new file mode 100644 index 0000000..86ab109 Binary files /dev/null and b/teść zadań/material.JPG differ diff --git a/teść zadań/pipe_model.png b/teść zadań/pipe_model.png new file mode 100644 index 0000000..1dc62f5 Binary files /dev/null and b/teść zadań/pipe_model.png differ diff --git a/teść zadań/style.css b/teść zadań/style.css new file mode 100644 index 0000000..cf42427 --- /dev/null +++ b/teść zadań/style.css @@ -0,0 +1,107 @@ +html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } + +body{ +color:#444; +font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; +font-size:12px; +line-height:1.5em; +padding:1em; +margin:auto; +max-width:42em; +background:#fefefe; +} + +a{ color: #0645ad; text-decoration:none;} +a:visited{ color: #0b0080; } +a:hover{ color: #06e; } +a:active{ color:#faa700; } +a:focus{ outline: thin dotted; } +a:hover, a:active{ outline: 0; } + +::-moz-selection{background:rgba(255,255,0,0.3);color:#000} +::selection{background:rgba(255,255,0,0.3);color:#000} + +a::-moz-selection{background:rgba(255,255,0,0.3);color:#0645ad} +a::selection{background:rgba(255,255,0,0.3);color:#0645ad} + +p{ +margin:1em 0; +} + +img{ +max-width:100%; +} + +h1,h2,h3,h4,h5,h6{ +font-weight:normal; +color:#111; +line-height:1em; +} +h4,h5,h6{ font-weight: bold; } +h1{ font-size:2.5em; } +h2{ font-size:2em; } +h3{ font-size:1.5em; } +h4{ font-size:1.2em; } +h5{ font-size:1em; } +h6{ font-size:0.9em; } + +blockquote{ +color:#666666; +margin:0; +padding-left: 3em; +border-left: 0.5em #EEE solid; +} +hr { display: block; height: 2px; border: 0; border-top: 1px solid #aaa;border-bottom: 1px solid #eee; margin: 1em 0; padding: 0; } +pre, code, kbd, samp { color: #000; font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 0.98em; } +pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; } + +b, strong { font-weight: bold; } + +dfn { font-style: italic; } + +ins { background: #ff9; color: #000; text-decoration: none; } + +mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; } + +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } +sup { top: -0.5em; } +sub { bottom: -0.25em; } + +ul, ol { margin: 1em 0; padding: 0 0 0 2em; } +li p:last-child { margin:0 } +dd { margin: 0 0 0 2em; } + +img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; } + +table { +border-collapse: collapse; +border-spacing: 0; +width: 100%; +} +th { border-bottom: 1px solid black; } +td { vertical-align: top; } + +@media only screen and (min-width: 480px) { +body{font-size:14px;} +} + +@media only screen and (min-width: 768px) { +body{font-size:16px;} +} + +@media print { + * { background: transparent !important; color: black !important; filter:none !important; -ms-filter: none !important; } + body{font-size:12pt; max-width:100%;} + a, a:visited { text-decoration: underline; } + hr { height: 1px; border:0; border-bottom:1px solid black; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } + pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; } + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + @page :left { margin: 15mm 20mm 15mm 10mm; } + @page :right { margin: 15mm 10mm 15mm 20mm; } + p, h2, h3 { orphans: 3; widows: 3; } + h2, h3 { page-break-after: avoid; } +} \ No newline at end of file diff --git a/teść zadań/swept-tube-c.jpg b/teść zadań/swept-tube-c.jpg new file mode 100644 index 0000000..a4cca0f Binary files /dev/null and b/teść zadań/swept-tube-c.jpg differ diff --git a/teść zadań/swept-tube-s.jpg b/teść zadań/swept-tube-s.jpg new file mode 100644 index 0000000..5c27849 Binary files /dev/null and b/teść zadań/swept-tube-s.jpg differ