├── Materials.meta ├── Materials ├── Leaves.mat ├── Leaves.mat.meta ├── LeavesFlat.mat ├── LeavesFlat.mat.meta ├── Shadergraphs.meta ├── Shadergraphs │ ├── Leaves.shadergraph │ ├── Leaves.shadergraph.meta │ ├── Subgraphs.meta │ ├── Subgraphs │ │ ├── FlatShading.shadersubgraph │ │ ├── FlatShading.shadersubgraph.meta │ │ ├── Simplex noise 3D.shadersubgraph │ │ ├── Simplex noise 3D.shadersubgraph.meta │ │ ├── SimplexNoise3D.hlsl │ │ └── SimplexNoise3D.hlsl.meta │ ├── Trunk.shadergraph │ └── Trunk.shadergraph.meta ├── Trunk.mat └── Trunk.mat.meta ├── Meshes.meta ├── Meshes ├── Generated.meta ├── Generated │ ├── Default.asset │ ├── Default.asset.meta │ ├── Detailed.asset │ ├── Detailed.asset.meta │ ├── LowPoly.asset │ ├── LowPoly.asset.meta │ ├── LowPoly2.asset │ ├── LowPoly2.asset.meta │ ├── VeryDetailed.asset │ └── VeryDetailed.asset.meta ├── icosphere.fbx └── icosphere.fbx.meta ├── ProceduralTree.unity ├── ProceduralTree.unity.meta ├── README.txt ├── Scripts.meta └── Scripts ├── MeshExtension.cs ├── MeshExtension.cs.meta ├── MeshSmoothener.cs ├── MeshSmoothener.cs.meta ├── TreeGenerator.cs └── TreeGenerator.cs.meta /Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f73f6f8bd7deb8845a78524505b5f9c1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Materials/Leaves.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &-393404536293531890 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 11 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | version: 2 16 | --- !u!21 &2100000 17 | Material: 18 | serializedVersion: 6 19 | m_ObjectHideFlags: 0 20 | m_CorrespondingSourceObject: {fileID: 0} 21 | m_PrefabInstance: {fileID: 0} 22 | m_PrefabAsset: {fileID: 0} 23 | m_Name: Leaves 24 | m_Shader: {fileID: -6465566751694194690, guid: 97822ea98b41ed24d9614db6f2934d84, 25 | type: 3} 26 | m_ShaderKeywords: 27 | m_LightmapFlags: 4 28 | m_EnableInstancingVariants: 0 29 | m_DoubleSidedGI: 0 30 | m_CustomRenderQueue: -1 31 | stringTagMap: {} 32 | disabledShaderPasses: [] 33 | m_SavedProperties: 34 | serializedVersion: 3 35 | m_TexEnvs: 36 | - _BaseMap: 37 | m_Texture: {fileID: 0} 38 | m_Scale: {x: 1, y: 1} 39 | m_Offset: {x: 0, y: 0} 40 | - _BumpMap: 41 | m_Texture: {fileID: 0} 42 | m_Scale: {x: 1, y: 1} 43 | m_Offset: {x: 0, y: 0} 44 | - _EmissionMap: 45 | m_Texture: {fileID: 0} 46 | m_Scale: {x: 1, y: 1} 47 | m_Offset: {x: 0, y: 0} 48 | - _MainTex: 49 | m_Texture: {fileID: 0} 50 | m_Scale: {x: 1, y: 1} 51 | m_Offset: {x: 0, y: 0} 52 | - _MetallicGlossMap: 53 | m_Texture: {fileID: 0} 54 | m_Scale: {x: 1, y: 1} 55 | m_Offset: {x: 0, y: 0} 56 | - _OcclusionMap: 57 | m_Texture: {fileID: 0} 58 | m_Scale: {x: 1, y: 1} 59 | m_Offset: {x: 0, y: 0} 60 | - _SpecGlossMap: 61 | m_Texture: {fileID: 0} 62 | m_Scale: {x: 1, y: 1} 63 | m_Offset: {x: 0, y: 0} 64 | m_Floats: 65 | - Vector1_5A07E183: 0.296 66 | - Vector1_6D1037F8: 0.8 67 | - Vector1_6ECDDCE4: 0.25 68 | - Vector1_821CA16: 27.02 69 | - Vector1_83C700BB: 4 70 | - _AlphaClip: 0 71 | - _Blend: 0 72 | - _BumpScale: 1 73 | - _Cull: 2 74 | - _Cutoff: 0.5 75 | - _DstBlend: 0 76 | - _EnvironmentReflections: 1 77 | - _GlossMapScale: 0 78 | - _Glossiness: 0 79 | - _GlossyReflections: 0 80 | - _Metallic: 0 81 | - _OcclusionStrength: 1 82 | - _QueueOffset: 0 83 | - _ReceiveShadows: 1 84 | - _Smoothness: 0.5 85 | - _SmoothnessTextureChannel: 0 86 | - _SpecularHighlights: 1 87 | - _SrcBlend: 1 88 | - _Surface: 0 89 | - _WorkflowMode: 1 90 | - _ZWrite: 1 91 | m_Colors: 92 | - Color_378B3A79: {r: 0.37504262, g: 0.77254903, b: 0.18039213, a: 0} 93 | - Color_398B7EC9: {r: 0.38787523, g: 0.8679245, b: 0.16785331, a: 0} 94 | - _BaseColor: {r: 0.5298324, g: 0.745283, b: 0.2214756, a: 1} 95 | - _Color: {r: 1, g: 1, b: 1, a: 1} 96 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 97 | - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} 98 | -------------------------------------------------------------------------------- /Materials/Leaves.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 763fe78d48b194a4eb4adeb7bd2410ed 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Materials/LeavesFlat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &-393404536293531890 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 11 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | version: 2 16 | --- !u!21 &2100000 17 | Material: 18 | serializedVersion: 6 19 | m_ObjectHideFlags: 0 20 | m_CorrespondingSourceObject: {fileID: 0} 21 | m_PrefabInstance: {fileID: 0} 22 | m_PrefabAsset: {fileID: 0} 23 | m_Name: LeavesFlat 24 | m_Shader: {fileID: -6465566751694194690, guid: 97822ea98b41ed24d9614db6f2934d84, 25 | type: 3} 26 | m_ShaderKeywords: 27 | m_LightmapFlags: 4 28 | m_EnableInstancingVariants: 0 29 | m_DoubleSidedGI: 0 30 | m_CustomRenderQueue: -1 31 | stringTagMap: {} 32 | disabledShaderPasses: [] 33 | m_SavedProperties: 34 | serializedVersion: 3 35 | m_TexEnvs: 36 | - _BaseMap: 37 | m_Texture: {fileID: 0} 38 | m_Scale: {x: 1, y: 1} 39 | m_Offset: {x: 0, y: 0} 40 | - _BumpMap: 41 | m_Texture: {fileID: 0} 42 | m_Scale: {x: 1, y: 1} 43 | m_Offset: {x: 0, y: 0} 44 | - _EmissionMap: 45 | m_Texture: {fileID: 0} 46 | m_Scale: {x: 1, y: 1} 47 | m_Offset: {x: 0, y: 0} 48 | - _MainTex: 49 | m_Texture: {fileID: 0} 50 | m_Scale: {x: 1, y: 1} 51 | m_Offset: {x: 0, y: 0} 52 | - _MetallicGlossMap: 53 | m_Texture: {fileID: 0} 54 | m_Scale: {x: 1, y: 1} 55 | m_Offset: {x: 0, y: 0} 56 | - _OcclusionMap: 57 | m_Texture: {fileID: 0} 58 | m_Scale: {x: 1, y: 1} 59 | m_Offset: {x: 0, y: 0} 60 | - _SpecGlossMap: 61 | m_Texture: {fileID: 0} 62 | m_Scale: {x: 1, y: 1} 63 | m_Offset: {x: 0, y: 0} 64 | m_Floats: 65 | - Vector1_5A07E183: 1 66 | - Vector1_6D1037F8: 0.926 67 | - Vector1_6ECDDCE4: 0 68 | - Vector1_821CA16: 4.1 69 | - Vector1_83C700BB: 1.91 70 | - _AlphaClip: 0 71 | - _Blend: 0 72 | - _BumpScale: 1 73 | - _Cull: 2 74 | - _Cutoff: 0.5 75 | - _DstBlend: 0 76 | - _EnvironmentReflections: 1 77 | - _GlossMapScale: 0 78 | - _Glossiness: 0 79 | - _GlossyReflections: 0 80 | - _Metallic: 0 81 | - _OcclusionStrength: 1 82 | - _QueueOffset: 0 83 | - _ReceiveShadows: 1 84 | - _Smoothness: 0.5 85 | - _SmoothnessTextureChannel: 0 86 | - _SpecularHighlights: 1 87 | - _SrcBlend: 1 88 | - _Surface: 0 89 | - _WorkflowMode: 1 90 | - _ZWrite: 1 91 | m_Colors: 92 | - Color_378B3A79: {r: 0.37504262, g: 0.77254903, b: 0.18039213, a: 0} 93 | - Color_398B7EC9: {r: 0.38787523, g: 0.8679245, b: 0.16785331, a: 0} 94 | - _BaseColor: {r: 0.5298324, g: 0.745283, b: 0.2214756, a: 1} 95 | - _Color: {r: 1, g: 1, b: 1, a: 1} 96 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 97 | - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} 98 | -------------------------------------------------------------------------------- /Materials/LeavesFlat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 59292a30d8387184799e642bfb2c9aac 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Materials/Shadergraphs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be1f312e19e438846b033163f4a197a5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Materials/Shadergraphs/Leaves.shadergraph.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 97822ea98b41ed24d9614db6f2934d84 3 | ScriptedImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 2 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} 11 | -------------------------------------------------------------------------------- /Materials/Shadergraphs/Subgraphs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8c26af2c0d894c648a9a5fa66ae6e51c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Materials/Shadergraphs/Subgraphs/FlatShading.shadersubgraph: -------------------------------------------------------------------------------- 1 | { 2 | "m_SerializedProperties": [], 3 | "m_SerializedKeywords": [], 4 | "m_SerializableNodes": [ 5 | { 6 | "typeInfo": { 7 | "fullName": "UnityEditor.ShaderGraph.CrossProductNode" 8 | }, 9 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"24bddb88-ac15-48e7-a7c4-b147bb2fa9fc\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Cross Product\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -466.0,\n \"y\": 168.0,\n \"width\": 142.0,\n \"height\": 118.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector3MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"A\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"A\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector3MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"B\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"B\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 1.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector3MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" 10 | }, 11 | { 12 | "typeInfo": { 13 | "fullName": "UnityEditor.ShaderGraph.TransformNode" 14 | }, 15 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"427a5176-92fd-46e0-9b2a-cb3fcb1cf7fc\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Transform\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -317.0,\n \"y\": 168.0,\n \"width\": 212.0,\n \"height\": 155.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector3MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"In\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"In\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector3MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_Conversion\": {\n \"from\": 2,\n \"to\": 3\n },\n \"m_ConversionType\": 0\n}" 16 | }, 17 | { 18 | "typeInfo": { 19 | "fullName": "UnityEditor.ShaderGraph.PositionNode" 20 | }, 21 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"79e0df4a-7697-4ad0-9f70-7bb81ea2573f\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Position\",\n \"m_NodeVersion\": 1,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -859.0,\n \"y\": 170.0,\n \"width\": 206.0,\n \"height\": 130.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector3MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 1,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_Space\": 2\n}" 22 | }, 23 | { 24 | "typeInfo": { 25 | "fullName": "UnityEditor.ShaderGraph.DDXNode" 26 | }, 27 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"b2be2fb3-f16d-426a-803e-2175fd25af3a\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"DDX\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -630.0,\n \"y\": 236.0,\n \"width\": 139.0,\n \"height\": 94.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicVectorMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"In\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"In\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicVectorMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" 28 | }, 29 | { 30 | "typeInfo": { 31 | "fullName": "UnityEditor.ShaderGraph.DDYNode" 32 | }, 33 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"d4d4efb0-0db4-4279-b658-cfac37874b19\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"DDY\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -628.0,\n \"y\": 125.0,\n \"width\": 139.0,\n \"height\": 94.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicVectorMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"In\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"In\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicVectorMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" 34 | }, 35 | { 36 | "typeInfo": { 37 | "fullName": "UnityEditor.ShaderGraph.NormalizeNode" 38 | }, 39 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"d880d81f-a271-4fb7-9ac5-7de1fda34831\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Normalize\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -99.0,\n \"y\": 168.0,\n \"width\": 139.0,\n \"height\": 94.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicVectorMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"In\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"In\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicVectorMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" 40 | }, 41 | { 42 | "typeInfo": { 43 | "fullName": "UnityEditor.ShaderGraph.SubGraphOutputNode" 44 | }, 45 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"fa03802e-2b14-40a2-bf3e-8d04fd2cae00\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Out_Vector4\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 45.0,\n \"y\": 168.0,\n \"width\": 138.0,\n \"height\": 77.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Out_Vector4\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"OutVector4\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" 46 | } 47 | ], 48 | "m_Groups": [], 49 | "m_StickyNotes": [], 50 | "m_SerializableEdges": [ 51 | { 52 | "typeInfo": { 53 | "fullName": "UnityEditor.Graphing.Edge" 54 | }, 55 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 2,\n \"m_NodeGUIDSerialized\": \"24bddb88-ac15-48e7-a7c4-b147bb2fa9fc\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"427a5176-92fd-46e0-9b2a-cb3fcb1cf7fc\"\n }\n}" 56 | }, 57 | { 58 | "typeInfo": { 59 | "fullName": "UnityEditor.Graphing.Edge" 60 | }, 61 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"427a5176-92fd-46e0-9b2a-cb3fcb1cf7fc\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"d880d81f-a271-4fb7-9ac5-7de1fda34831\"\n }\n}" 62 | }, 63 | { 64 | "typeInfo": { 65 | "fullName": "UnityEditor.Graphing.Edge" 66 | }, 67 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"79e0df4a-7697-4ad0-9f70-7bb81ea2573f\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"b2be2fb3-f16d-426a-803e-2175fd25af3a\"\n }\n}" 68 | }, 69 | { 70 | "typeInfo": { 71 | "fullName": "UnityEditor.Graphing.Edge" 72 | }, 73 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"79e0df4a-7697-4ad0-9f70-7bb81ea2573f\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"d4d4efb0-0db4-4279-b658-cfac37874b19\"\n }\n}" 74 | }, 75 | { 76 | "typeInfo": { 77 | "fullName": "UnityEditor.Graphing.Edge" 78 | }, 79 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"b2be2fb3-f16d-426a-803e-2175fd25af3a\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"24bddb88-ac15-48e7-a7c4-b147bb2fa9fc\"\n }\n}" 80 | }, 81 | { 82 | "typeInfo": { 83 | "fullName": "UnityEditor.Graphing.Edge" 84 | }, 85 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"d4d4efb0-0db4-4279-b658-cfac37874b19\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"24bddb88-ac15-48e7-a7c4-b147bb2fa9fc\"\n }\n}" 86 | }, 87 | { 88 | "typeInfo": { 89 | "fullName": "UnityEditor.Graphing.Edge" 90 | }, 91 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"d880d81f-a271-4fb7-9ac5-7de1fda34831\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"fa03802e-2b14-40a2-bf3e-8d04fd2cae00\"\n }\n}" 92 | } 93 | ], 94 | "m_PreviewData": { 95 | "serializedMesh": { 96 | "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", 97 | "m_Guid": "" 98 | } 99 | }, 100 | "m_Path": "Sub Graphs", 101 | "m_ConcretePrecision": 0, 102 | "m_ActiveOutputNodeGuidSerialized": "" 103 | } -------------------------------------------------------------------------------- /Materials/Shadergraphs/Subgraphs/FlatShading.shadersubgraph.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6c9dc20b9d2f8654180902e344720886 3 | ScriptedImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 2 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | script: {fileID: 11500000, guid: 60072b568d64c40a485e0fc55012dc9f, type: 3} 11 | -------------------------------------------------------------------------------- /Materials/Shadergraphs/Subgraphs/Simplex noise 3D.shadersubgraph: -------------------------------------------------------------------------------- 1 | { 2 | "m_SerializedProperties": [ 3 | { 4 | "typeInfo": { 5 | "fullName": "UnityEditor.ShaderGraph.Internal.Vector3ShaderProperty" 6 | }, 7 | "JSONnodeData": "{\n \"m_Guid\": {\n \"m_GuidSerialized\": \"517f2d51-7fc1-47de-bebf-dab2a09b2cfe\"\n },\n \"m_Name\": \"Sampling Coordinates\",\n \"m_DefaultReferenceName\": \"Vector3_7940555B\",\n \"m_OverrideReferenceName\": \"\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Precision\": 0,\n \"m_GPUInstanced\": false,\n \"m_Hidden\": false,\n \"m_Value\": {\n \"x\": 0.0,\n \"y\": 0.0,\n \"z\": 0.0,\n \"w\": 0.0\n }\n}" 8 | }, 9 | { 10 | "typeInfo": { 11 | "fullName": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty" 12 | }, 13 | "JSONnodeData": "{\n \"m_Guid\": {\n \"m_GuidSerialized\": \"26390072-8e32-4271-a55d-f21815efed23\"\n },\n \"m_Name\": \"Noise Scale\",\n \"m_DefaultReferenceName\": \"Vector1_D4A5C52D\",\n \"m_OverrideReferenceName\": \"\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Precision\": 0,\n \"m_GPUInstanced\": false,\n \"m_Hidden\": false,\n \"m_Value\": 10.0,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n }\n}" 14 | } 15 | ], 16 | "m_SerializedKeywords": [], 17 | "m_SerializableNodes": [ 18 | { 19 | "typeInfo": { 20 | "fullName": "UnityEditor.ShaderGraph.SubGraphOutputNode" 21 | }, 22 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"77fdce4c-a213-42ea-8cc0-c32e7e3cea10\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Output\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 487.0,\n \"y\": -143.0,\n \"width\": 104.0,\n \"height\": 77.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Value\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Value\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" 23 | }, 24 | { 25 | "typeInfo": { 26 | "fullName": "UnityEditor.ShaderGraph.MultiplyNode" 27 | }, 28 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"801b9281-a095-4dac-90ea-dd2e4aca0bb5\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Multiply\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -237.0,\n \"y\": -144.99996948242188,\n \"width\": 208.0,\n \"height\": 301.9999694824219\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"A\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"A\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"B\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"B\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 10.0,\\n \\\"e01\\\": 10.0,\\n \\\"e02\\\": 10.0,\\n \\\"e03\\\": 2.0,\\n \\\"e10\\\": 2.0,\\n \\\"e11\\\": 2.0,\\n \\\"e12\\\": 2.0,\\n \\\"e13\\\": 2.0,\\n \\\"e20\\\": 2.0,\\n \\\"e21\\\": 2.0,\\n \\\"e22\\\": 2.0,\\n \\\"e23\\\": 2.0,\\n \\\"e30\\\": 2.0,\\n \\\"e31\\\": 2.0,\\n \\\"e32\\\": 2.0,\\n \\\"e33\\\": 2.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicValueMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"e00\\\": 0.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 0.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 0.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"e00\\\": 1.0,\\n \\\"e01\\\": 0.0,\\n \\\"e02\\\": 0.0,\\n \\\"e03\\\": 0.0,\\n \\\"e10\\\": 0.0,\\n \\\"e11\\\": 1.0,\\n \\\"e12\\\": 0.0,\\n \\\"e13\\\": 0.0,\\n \\\"e20\\\": 0.0,\\n \\\"e21\\\": 0.0,\\n \\\"e22\\\": 1.0,\\n \\\"e23\\\": 0.0,\\n \\\"e30\\\": 0.0,\\n \\\"e31\\\": 0.0,\\n \\\"e32\\\": 0.0,\\n \\\"e33\\\": 1.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" 29 | }, 30 | { 31 | "typeInfo": { 32 | "fullName": "UnityEditor.ShaderGraph.CustomFunctionNode" 33 | }, 34 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"58862e76-dc41-43f0-9ea3-966531fa9b30\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Custom Function\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -60.0,\n \"y\": -144.0,\n \"width\": 176.0,\n \"height\": 94.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector3MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Input\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Input\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_SourceType\": 0,\n \"m_FunctionName\": \"SimplexNoise3D\",\n \"m_FunctionSource\": \"b3489a427d0109e4683d917ceb3b5e5f\",\n \"m_FunctionBody\": \"Enter function body here...\"\n}" 35 | }, 36 | { 37 | "typeInfo": { 38 | "fullName": "UnityEditor.ShaderGraph.PropertyNode" 39 | }, 40 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"ebf81d2c-b4e0-44ca-919e-5afb1d4a8517\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Property\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -543.0,\n \"y\": -134.0,\n \"width\": 201.0,\n \"height\": 34.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector3MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Sampling Coordinates\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_PropertyGuidSerialized\": \"517f2d51-7fc1-47de-bebf-dab2a09b2cfe\"\n}" 41 | }, 42 | { 43 | "typeInfo": { 44 | "fullName": "UnityEditor.ShaderGraph.PropertyNode" 45 | }, 46 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"0902d7a1-872a-4d4e-a1ed-9500a10c879f\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Property\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -485.0,\n \"y\": -67.0,\n \"width\": 142.0,\n \"height\": 34.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Noise Scale\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_PropertyGuidSerialized\": \"26390072-8e32-4271-a55d-f21815efed23\"\n}" 47 | }, 48 | { 49 | "typeInfo": { 50 | "fullName": "UnityEditor.ShaderGraph.RemapNode" 51 | }, 52 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"e43a5967-858e-4285-97dc-cb6224b1331e\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Remap\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 250.0,\n \"y\": -143.0,\n \"width\": 198.0,\n \"height\": 142.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicVectorMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"In\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"In\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": -1.0,\\n \\\"y\\\": -1.0,\\n \\\"z\\\": -1.0,\\n \\\"w\\\": -1.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector2MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"In Min Max\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"InMinMax\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": -1.0,\\n \\\"y\\\": 1.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector2MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Out Min Max\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"OutMinMax\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 1.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.DynamicVectorMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 3,\\n \\\"m_DisplayName\\\": \\\"Out\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n }\n}" 53 | } 54 | ], 55 | "m_Groups": [], 56 | "m_StickyNotes": [], 57 | "m_SerializableEdges": [ 58 | { 59 | "typeInfo": { 60 | "fullName": "UnityEditor.Graphing.Edge" 61 | }, 62 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 2,\n \"m_NodeGUIDSerialized\": \"801b9281-a095-4dac-90ea-dd2e4aca0bb5\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"58862e76-dc41-43f0-9ea3-966531fa9b30\"\n }\n}" 63 | }, 64 | { 65 | "typeInfo": { 66 | "fullName": "UnityEditor.Graphing.Edge" 67 | }, 68 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"ebf81d2c-b4e0-44ca-919e-5afb1d4a8517\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"801b9281-a095-4dac-90ea-dd2e4aca0bb5\"\n }\n}" 69 | }, 70 | { 71 | "typeInfo": { 72 | "fullName": "UnityEditor.Graphing.Edge" 73 | }, 74 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"0902d7a1-872a-4d4e-a1ed-9500a10c879f\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"801b9281-a095-4dac-90ea-dd2e4aca0bb5\"\n }\n}" 75 | }, 76 | { 77 | "typeInfo": { 78 | "fullName": "UnityEditor.Graphing.Edge" 79 | }, 80 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"58862e76-dc41-43f0-9ea3-966531fa9b30\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"e43a5967-858e-4285-97dc-cb6224b1331e\"\n }\n}" 81 | }, 82 | { 83 | "typeInfo": { 84 | "fullName": "UnityEditor.Graphing.Edge" 85 | }, 86 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 3,\n \"m_NodeGUIDSerialized\": \"e43a5967-858e-4285-97dc-cb6224b1331e\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"77fdce4c-a213-42ea-8cc0-c32e7e3cea10\"\n }\n}" 87 | } 88 | ], 89 | "m_PreviewData": { 90 | "serializedMesh": { 91 | "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", 92 | "m_Guid": "" 93 | } 94 | }, 95 | "m_Path": "Sub Graphs", 96 | "m_ConcretePrecision": 0, 97 | "m_ActiveOutputNodeGuidSerialized": "" 98 | } -------------------------------------------------------------------------------- /Materials/Shadergraphs/Subgraphs/Simplex noise 3D.shadersubgraph.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 21c69e3d334eabd4fb1535b52933f8aa 3 | ScriptedImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 2 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | script: {fileID: 11500000, guid: 60072b568d64c40a485e0fc55012dc9f, type: 3} 11 | -------------------------------------------------------------------------------- /Materials/Shadergraphs/Subgraphs/SimplexNoise3D.hlsl: -------------------------------------------------------------------------------- 1 | 2 | float3 mod289(float3 x) 3 | { 4 | return x - floor(x / 289.0) * 289.0; 5 | } 6 | 7 | float4 mod289(float4 x) 8 | { 9 | return x - floor(x / 289.0) * 289.0; 10 | } 11 | 12 | float4 permute(float4 x) 13 | { 14 | return mod289((x * 34.0 + 1.0) * x); 15 | } 16 | 17 | float4 taylorInvSqrt(float4 r) 18 | { 19 | return 1.79284291400159 - r * 0.85373472095314; 20 | } 21 | 22 | float snoise(float3 v) 23 | { 24 | const float2 C = float2(1.0 / 6.0, 1.0 / 3.0); 25 | 26 | // First corner 27 | float3 i = floor(v + dot(v, C.yyy)); 28 | float3 x0 = v - i + dot(i, C.xxx); 29 | 30 | // Other corners 31 | float3 g = step(x0.yzx, x0.xyz); 32 | float3 l = 1.0 - g; 33 | float3 i1 = min(g.xyz, l.zxy); 34 | float3 i2 = max(g.xyz, l.zxy); 35 | 36 | // x1 = x0 - i1 + 1.0 * C.xxx; 37 | // x2 = x0 - i2 + 2.0 * C.xxx; 38 | // x3 = x0 - 1.0 + 3.0 * C.xxx; 39 | float3 x1 = x0 - i1 + C.xxx; 40 | float3 x2 = x0 - i2 + C.yyy; 41 | float3 x3 = x0 - 0.5; 42 | 43 | // Permutations 44 | i = mod289(i); // Avoid truncation effects in permutation 45 | float4 p = 46 | permute(permute(permute(i.z + float4(0.0, i1.z, i2.z, 1.0)) 47 | + i.y + float4(0.0, i1.y, i2.y, 1.0)) 48 | + i.x + float4(0.0, i1.x, i2.x, 1.0)); 49 | 50 | // Gradients: 7x7 points over a square, mapped onto an octahedron. 51 | // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) 52 | float4 j = p - 49.0 * floor(p / 49.0); // mod(p,7*7) 53 | 54 | float4 x_ = floor(j / 7.0); 55 | float4 y_ = floor(j - 7.0 * x_); // mod(j,N) 56 | 57 | float4 x = (x_ * 2.0 + 0.5) / 7.0 - 1.0; 58 | float4 y = (y_ * 2.0 + 0.5) / 7.0 - 1.0; 59 | 60 | float4 h = 1.0 - abs(x) - abs(y); 61 | 62 | float4 b0 = float4(x.xy, y.xy); 63 | float4 b1 = float4(x.zw, y.zw); 64 | 65 | //float4 s0 = float4(lessThan(b0, 0.0)) * 2.0 - 1.0; 66 | //float4 s1 = float4(lessThan(b1, 0.0)) * 2.0 - 1.0; 67 | float4 s0 = floor(b0) * 2.0 + 1.0; 68 | float4 s1 = floor(b1) * 2.0 + 1.0; 69 | float4 sh = -step(h, 0.0); 70 | 71 | float4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; 72 | float4 a1 = b1.xzyw + s1.xzyw * sh.zzww; 73 | 74 | float3 g0 = float3(a0.xy, h.x); 75 | float3 g1 = float3(a0.zw, h.y); 76 | float3 g2 = float3(a1.xy, h.z); 77 | float3 g3 = float3(a1.zw, h.w); 78 | 79 | // Normalise gradients 80 | float4 norm = taylorInvSqrt(float4(dot(g0, g0), dot(g1, g1), dot(g2, g2), dot(g3, g3))); 81 | g0 *= norm.x; 82 | g1 *= norm.y; 83 | g2 *= norm.z; 84 | g3 *= norm.w; 85 | 86 | // Mix final noise value 87 | float4 m = max(0.6 - float4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); 88 | m = m * m; 89 | m = m * m; 90 | 91 | float4 px = float4(dot(x0, g0), dot(x1, g1), dot(x2, g2), dot(x3, g3)); 92 | return 42.0 * dot(m, px); 93 | } 94 | 95 | void SimplexNoise3D_float(float3 input, out float Out) 96 | { 97 | Out = snoise(input); 98 | } 99 | -------------------------------------------------------------------------------- /Materials/Shadergraphs/Subgraphs/SimplexNoise3D.hlsl.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b3489a427d0109e4683d917ceb3b5e5f 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Materials/Shadergraphs/Trunk.shadergraph: -------------------------------------------------------------------------------- 1 | { 2 | "m_SerializedProperties": [ 3 | { 4 | "typeInfo": { 5 | "fullName": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty" 6 | }, 7 | "JSONnodeData": "{\n \"m_Guid\": {\n \"m_GuidSerialized\": \"505e2cbf-281d-4fc6-858e-fbf08832c6fd\"\n },\n \"m_Name\": \"Color\",\n \"m_DefaultReferenceName\": \"Color_398B7EC9\",\n \"m_OverrideReferenceName\": \"\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Precision\": 0,\n \"m_GPUInstanced\": false,\n \"m_Hidden\": false,\n \"m_Value\": {\n \"r\": 0.5283018946647644,\n \"g\": 0.4242022931575775,\n \"b\": 0.2516910135746002,\n \"a\": 0.0\n },\n \"m_ColorMode\": 0\n}" 8 | } 9 | ], 10 | "m_SerializedKeywords": [], 11 | "m_SerializableNodes": [ 12 | { 13 | "typeInfo": { 14 | "fullName": "UnityEditor.ShaderGraph.PBRMasterNode" 15 | }, 16 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"06a82ad5-985b-4638-b805-1d171b8d4b61\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"PBR Master\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": 64.0,\n \"y\": 3.0,\n \"width\": 200.0,\n \"height\": 317.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.PositionMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 9,\\n \\\"m_DisplayName\\\": \\\"Vertex Position\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Position\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.NormalMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 10,\\n \\\"m_DisplayName\\\": \\\"Vertex Normal\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Normal\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.TangentMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 11,\\n \\\"m_DisplayName\\\": \\\"Vertex Tangent\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Vertex Tangent\\\",\\n \\\"m_StageCapability\\\": 1,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.ColorRGBMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Albedo\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Albedo\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.7353569269180298,\\n \\\"y\\\": 0.7353569269180298,\\n \\\"z\\\": 0.7353569269180298\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_ColorMode\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.NormalMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Normal\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Normal\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_Space\\\": 3\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.ColorRGBMaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 4,\\n \\\"m_DisplayName\\\": \\\"Emission\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Emission\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0\\n },\\n \\\"m_Labels\\\": [\\n \\\"X\\\",\\n \\\"Y\\\",\\n \\\"Z\\\"\\n ],\\n \\\"m_ColorMode\\\": 0\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 2,\\n \\\"m_DisplayName\\\": \\\"Metallic\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Metallic\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 5,\\n \\\"m_DisplayName\\\": \\\"Smoothness\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Smoothness\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.5,\\n \\\"m_DefaultValue\\\": 0.5,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 6,\\n \\\"m_DisplayName\\\": \\\"Occlusion\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Occlusion\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 1.0,\\n \\\"m_DefaultValue\\\": 1.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 7,\\n \\\"m_DisplayName\\\": \\\"Alpha\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Alpha\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 1.0,\\n \\\"m_DefaultValue\\\": 1.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n },\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector1MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 8,\\n \\\"m_DisplayName\\\": \\\"AlphaClipThreshold\\\",\\n \\\"m_SlotType\\\": 0,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"AlphaClipThreshold\\\",\\n \\\"m_StageCapability\\\": 2,\\n \\\"m_Value\\\": 0.0,\\n \\\"m_DefaultValue\\\": 0.0,\\n \\\"m_Labels\\\": [\\n \\\"X\\\"\\n ]\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_DOTSInstancing\": false,\n \"m_SerializableSubShaders\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.Rendering.Universal.UniversalPBRSubShader\"\n },\n \"JSONnodeData\": \"{}\"\n }\n ],\n \"m_ShaderGUIOverride\": \"\",\n \"m_OverrideEnabled\": false,\n \"m_Model\": 1,\n \"m_SurfaceType\": 0,\n \"m_AlphaMode\": 0,\n \"m_TwoSided\": false,\n \"m_NormalDropOffSpace\": 0\n}" 17 | }, 18 | { 19 | "typeInfo": { 20 | "fullName": "UnityEditor.ShaderGraph.SubGraphNode" 21 | }, 22 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"c9b6b495-a909-4fe9-9800-24c3c79754aa\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"FlatShading\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -177.0,\n \"y\": 99.0,\n \"width\": 128.0,\n \"height\": 94.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 1,\\n \\\"m_DisplayName\\\": \\\"Out_Vector4\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"OutVector4\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": false,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_SerializedSubGraph\": \"{\\n \\\"subGraph\\\": {\\n \\\"fileID\\\": -5475051401550479605,\\n \\\"guid\\\": \\\"6c9dc20b9d2f8654180902e344720886\\\",\\n \\\"type\\\": 3\\n }\\n}\",\n \"m_PropertyGuids\": [],\n \"m_PropertyIds\": []\n}" 23 | }, 24 | { 25 | "typeInfo": { 26 | "fullName": "UnityEditor.ShaderGraph.PropertyNode" 27 | }, 28 | "JSONnodeData": "{\n \"m_GuidSerialized\": \"af4c9aa7-d43b-483f-9ea3-4aaaad3ff084\",\n \"m_GroupGuidSerialized\": \"00000000-0000-0000-0000-000000000000\",\n \"m_Name\": \"Property\",\n \"m_NodeVersion\": 0,\n \"m_DrawState\": {\n \"m_Expanded\": true,\n \"m_Position\": {\n \"serializedVersion\": \"2\",\n \"x\": -180.0,\n \"y\": 43.0,\n \"width\": 0.0,\n \"height\": 0.0\n }\n },\n \"m_SerializableSlots\": [\n {\n \"typeInfo\": {\n \"fullName\": \"UnityEditor.ShaderGraph.Vector4MaterialSlot\"\n },\n \"JSONnodeData\": \"{\\n \\\"m_Id\\\": 0,\\n \\\"m_DisplayName\\\": \\\"Color\\\",\\n \\\"m_SlotType\\\": 1,\\n \\\"m_Priority\\\": 2147483647,\\n \\\"m_Hidden\\\": false,\\n \\\"m_ShaderOutputName\\\": \\\"Out\\\",\\n \\\"m_StageCapability\\\": 3,\\n \\\"m_Value\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n },\\n \\\"m_DefaultValue\\\": {\\n \\\"x\\\": 0.0,\\n \\\"y\\\": 0.0,\\n \\\"z\\\": 0.0,\\n \\\"w\\\": 0.0\\n }\\n}\"\n }\n ],\n \"m_Precision\": 0,\n \"m_PreviewExpanded\": true,\n \"m_CustomColors\": {\n \"m_SerializableColors\": []\n },\n \"m_PropertyGuidSerialized\": \"505e2cbf-281d-4fc6-858e-fbf08832c6fd\"\n}" 29 | } 30 | ], 31 | "m_Groups": [], 32 | "m_StickyNotes": [], 33 | "m_SerializableEdges": [ 34 | { 35 | "typeInfo": { 36 | "fullName": "UnityEditor.Graphing.Edge" 37 | }, 38 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"c9b6b495-a909-4fe9-9800-24c3c79754aa\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 1,\n \"m_NodeGUIDSerialized\": \"06a82ad5-985b-4638-b805-1d171b8d4b61\"\n }\n}" 39 | }, 40 | { 41 | "typeInfo": { 42 | "fullName": "UnityEditor.Graphing.Edge" 43 | }, 44 | "JSONnodeData": "{\n \"m_OutputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"af4c9aa7-d43b-483f-9ea3-4aaaad3ff084\"\n },\n \"m_InputSlot\": {\n \"m_SlotId\": 0,\n \"m_NodeGUIDSerialized\": \"06a82ad5-985b-4638-b805-1d171b8d4b61\"\n }\n}" 45 | } 46 | ], 47 | "m_PreviewData": { 48 | "serializedMesh": { 49 | "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", 50 | "m_Guid": "" 51 | } 52 | }, 53 | "m_Path": "Shader Graphs", 54 | "m_ConcretePrecision": 0, 55 | "m_ActiveOutputNodeGuidSerialized": "06a82ad5-985b-4638-b805-1d171b8d4b61" 56 | } -------------------------------------------------------------------------------- /Materials/Shadergraphs/Trunk.shadergraph.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1b2cb0cdaa1ee1d4bb03db4568e9aca3 3 | ScriptedImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 2 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} 11 | -------------------------------------------------------------------------------- /Materials/Trunk.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &-393404536293531890 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 11 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | version: 2 16 | --- !u!21 &2100000 17 | Material: 18 | serializedVersion: 6 19 | m_ObjectHideFlags: 0 20 | m_CorrespondingSourceObject: {fileID: 0} 21 | m_PrefabInstance: {fileID: 0} 22 | m_PrefabAsset: {fileID: 0} 23 | m_Name: Trunk 24 | m_Shader: {fileID: -6465566751694194690, guid: 1b2cb0cdaa1ee1d4bb03db4568e9aca3, 25 | type: 3} 26 | m_ShaderKeywords: 27 | m_LightmapFlags: 4 28 | m_EnableInstancingVariants: 0 29 | m_DoubleSidedGI: 0 30 | m_CustomRenderQueue: -1 31 | stringTagMap: {} 32 | disabledShaderPasses: [] 33 | m_SavedProperties: 34 | serializedVersion: 3 35 | m_TexEnvs: 36 | - _BaseMap: 37 | m_Texture: {fileID: 0} 38 | m_Scale: {x: 1, y: 1} 39 | m_Offset: {x: 0, y: 0} 40 | - _BumpMap: 41 | m_Texture: {fileID: 0} 42 | m_Scale: {x: 1, y: 1} 43 | m_Offset: {x: 0, y: 0} 44 | - _EmissionMap: 45 | m_Texture: {fileID: 0} 46 | m_Scale: {x: 1, y: 1} 47 | m_Offset: {x: 0, y: 0} 48 | - _MainTex: 49 | m_Texture: {fileID: 0} 50 | m_Scale: {x: 1, y: 1} 51 | m_Offset: {x: 0, y: 0} 52 | - _MetallicGlossMap: 53 | m_Texture: {fileID: 0} 54 | m_Scale: {x: 1, y: 1} 55 | m_Offset: {x: 0, y: 0} 56 | - _OcclusionMap: 57 | m_Texture: {fileID: 0} 58 | m_Scale: {x: 1, y: 1} 59 | m_Offset: {x: 0, y: 0} 60 | - _SpecGlossMap: 61 | m_Texture: {fileID: 0} 62 | m_Scale: {x: 1, y: 1} 63 | m_Offset: {x: 0, y: 0} 64 | m_Floats: 65 | - _AlphaClip: 0 66 | - _Blend: 0 67 | - _BumpScale: 1 68 | - _Cull: 2 69 | - _Cutoff: 0.5 70 | - _DstBlend: 0 71 | - _EnvironmentReflections: 1 72 | - _GlossMapScale: 0 73 | - _Glossiness: 0 74 | - _GlossyReflections: 0 75 | - _Metallic: 0.055 76 | - _OcclusionStrength: 1 77 | - _QueueOffset: 0 78 | - _ReceiveShadows: 1 79 | - _Smoothness: 0.229 80 | - _SmoothnessTextureChannel: 0 81 | - _SpecularHighlights: 1 82 | - _SrcBlend: 1 83 | - _Surface: 0 84 | - _WorkflowMode: 1 85 | - _ZWrite: 1 86 | m_Colors: 87 | - Color_398B7EC9: {r: 0.5283019, g: 0.42420226, b: 0.25169098, a: 0} 88 | - _BaseColor: {r: 0.6037736, g: 0.41811568, b: 0.2249911, a: 1} 89 | - _Color: {r: 1, g: 1, b: 1, a: 1} 90 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 91 | - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} 92 | -------------------------------------------------------------------------------- /Materials/Trunk.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 528815aff60551747b6272dae30c2839 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Meshes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4a5877b6895769b41b47796b1fb984a5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Meshes/Generated.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4bbf578529ed31d4099b9e8078b9c852 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Meshes/Generated/Default.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: af3c821609c4e60489f257d5a08e79e2 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Meshes/Generated/Detailed.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8e894138d9469744eb9091cb033fd101 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Meshes/Generated/LowPoly.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!43 &4300000 4 | Mesh: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: LowPoly 10 | serializedVersion: 10 11 | m_SubMeshes: 12 | - serializedVersion: 2 13 | firstByte: 0 14 | indexCount: 804 15 | topology: 0 16 | baseVertex: 0 17 | firstVertex: 0 18 | vertexCount: 163 19 | localAABB: 20 | m_Center: {x: 0.15588886, y: 1.7570764, z: -0.20580035} 21 | m_Extent: {x: 0.83002484, y: 1.7746993, z: 0.74820876} 22 | - serializedVersion: 2 23 | firstByte: 1608 24 | indexCount: 144 25 | topology: 0 26 | baseVertex: 0 27 | firstVertex: 163 28 | vertexCount: 96 29 | localAABB: 30 | m_Center: {x: 0.21986115, y: 3.3243487, z: -0.14254344} 31 | m_Extent: {x: 1.4558698, y: 0.8585918, z: 1.3667227} 32 | m_Shapes: 33 | vertices: [] 34 | shapes: [] 35 | channels: [] 36 | fullWeights: [] 37 | m_BindPose: [] 38 | m_BoneNameHashes: 39 | m_RootBoneNameHash: 0 40 | m_BonesAABB: [] 41 | m_VariableBoneCountWeights: 42 | m_Data: 43 | m_MeshCompression: 0 44 | m_IsReadable: 1 45 | m_KeepVertices: 1 46 | m_KeepIndices: 1 47 | m_IndexFormat: 0 48 | m_IndexBuffer: 000001000200000003000100040003000000020001000500020005000600040007000300080007000400060005000900060009000a0008000b0007000c000b0008000a000d000c000a0009000d000c000d000b0001000e00050003000f00010001000f000e00070010000300030010000f0005001100090005000e001100090012000d000900110012000d0013000b000d00120013000b00140007000700140010000b0013001400100015000f000f0016000e000f00150016000e00170011000e001600170011001800120011001700180012001900130012001800190013001a001400130019001a0014001b00100010001b00150014001a001b0015001c00160016001d00170016001c001d0017001e00180017001d001e0018001f00190018001e001f00190020001a0019001f0020001a0021001b001a00200021001b0022001500150022001c001b00210022001c0023001d001d0024001e001d00230024001e0025001f001e00240025001f00260020001f0025002600200027002100200026002700210028002200210027002800220029001c001c002900230022002800290023002a00240023002b002a0029002b00230024002a002c0024002c00250029002d002b0028002d00290025002c002e0025002e00260028002f002d0027002f00280026002e003000260030002700270030002f0031003200330031003400320035003400310033003200360033003600370037003800350035003800340037003600380032003900360034003a00320032003a00390036003b003800360039003b0038003c00340034003c003a0038003b003c0039003d003b003a003e00390039003e003d003b003f003c003b003d003f003c0040003a003a0040003e003c003f0040003d0041003f003d00420041003e0042003d003f00410043003f00430040003e0044004200400043004400400044003e0045004600470045004800460049004800450047004a004900470046004a0049004a00480046004b004a004a004c0048004a004b004c0048004d00460046004d004b0048004c004d004b004e004c004c004f004d004c004e004f004d0050004b004b0050004e004d004f0050004e0051004f004e0052005100500052004e004f00510053004f005300500050005300520054005500560054005700550058005700540056005900580056005500590058005900570055005a00590059005b00570059005a005b0057005c00550055005c005a0057005b005c005a005d005b005b005e005c005b005d005e005c005f005a005a005f005d005c005e005f005d0060005e005d00610060005f0061005d005e00600062005e0062005f005f006200610063006400650063006600640067006600630065006400680065006800690067006a0066006b006a00670069006c006b00690068006c006b006c006a0064006d00680064006e006d0066006e00640068006d006f0068006f006c00660070006e006a00700066006c006f0071006c0071006a006a007100700072007300740072007500730076007500720074007700760074007300770076007700750073007800770077007900750077007800790075007a00730073007a007800750079007a0078007b00790079007c007a0079007b007c007a007d00780078007d007b007a007c007d007b007e007c007c007f007d007c007e007f007d0080007b007b0080007e007d007f0080007e0081007f007f00820080007f0081008200800083007e007e008300810080008200830081008400820081008500840083008500810082008400860082008600830083008600850087008800890087008a0088008b008a008700890088008c0089008c008d008d008e008b008b008e008a008d008c008e0088008f008c008a0090008800880090008f008c0091008e008c008f0091008e0092008a008a00920090008e00910092008f0093009100900094008f008f009400930091009500920091009300950092009600900090009600940092009500960093009700950094009800930093009800970095009900960095009700990096009a00940094009a009800960099009a0097009b00990098009c00970097009c009b0099009d009a0099009b009d009a009e00980098009e009c009a009d009e009b009f009d009b00a0009f009c00a0009b009d009f00a1009d00a1009e009c00a200a0009e00a100a2009e00a2009c00a300a400a500a300a500a600a700a800a900a700a900aa00ab00ac00ad00ab00ad00ae00af00b000b100af00b100b200b300b400b500b300b500b600b700b800b900b700b900ba00bb00bc00bd00bb00bd00be00bf00c000c100bf00c100c200c300c400c500c300c500c600c700c800c900c700c900ca00cb00cc00cd00cb00cd00ce00cf00d000d100cf00d100d200d300d400d500d300d500d600d700d800d900d700d900da00db00dc00dd00db00dd00de00df00e000e100df00e100e200e300e400e500e300e500e600e700e800e900e700e900ea00eb00ec00ed00eb00ed00ee00ef00f000f100ef00f100f200f300f400f500f300f500f600f700f800f900f700f900fa00fb00fc00fd00fb00fd00fe00ff0000010101ff0001010201 49 | m_VertexData: 50 | serializedVersion: 3 51 | m_VertexCount: 259 52 | m_Channels: 53 | - stream: 0 54 | offset: 0 55 | format: 0 56 | dimension: 3 57 | - stream: 0 58 | offset: 12 59 | format: 0 60 | dimension: 3 61 | - stream: 0 62 | offset: 24 63 | format: 0 64 | dimension: 4 65 | - stream: 0 66 | offset: 0 67 | format: 0 68 | dimension: 0 69 | - stream: 0 70 | offset: 40 71 | format: 0 72 | dimension: 2 73 | - stream: 0 74 | offset: 0 75 | format: 0 76 | dimension: 0 77 | - stream: 0 78 | offset: 0 79 | format: 0 80 | dimension: 0 81 | - stream: 0 82 | offset: 0 83 | format: 0 84 | dimension: 0 85 | - stream: 0 86 | offset: 0 87 | format: 0 88 | dimension: 0 89 | - stream: 0 90 | offset: 0 91 | format: 0 92 | dimension: 0 93 | - stream: 0 94 | offset: 0 95 | format: 0 96 | dimension: 0 97 | - stream: 0 98 | offset: 0 99 | format: 0 100 | dimension: 0 101 | - stream: 0 102 | offset: 0 103 | format: 0 104 | dimension: 0 105 | - stream: 0 106 | offset: 0 107 | format: 0 108 | dimension: 0 109 | m_DataSize: 12432 110 | _typelessdata: 1e6ca43ef65d90bcd2571b3ca4c87a3ffff8b63df03038be0000803f00000000000000000000803f00000000f65d90bc87ce9b3ea853833ea71c9a3cd6f37f3fd4f383bc3d1d2d3c0000803f00000000000000000000803f00000000a853833ec2f3333ea8fc30bcf5a85d3ef0a7333f3bbd0bbb265f363f0000803f00000000000000000000803ffac8653fa8fc30bcef2b2a3e5a6a7b3e7c9b53be93251e3f98d2b3bb084e49bf0000803f00000000000000000000803fbc56ac405a6a7b3eb8012e3eb20a233c37d186be090f0f3fc440363eb5594fbf0000803f00000000000000000000803fbc56ac40b20a233c66d12c3e6b0b653e66386a3e8a98203fe37c3ebd6f01473f0000803f00000000000000000000803ffac8653f6b0b653edc4c61bd39cc453b9e9b953e44d607bd8d58c8bd70a17e3f0000803f00000000000000000000803ffac8e53f39cc453b4b03bfbdc5d27f3e9ae598bea78456bef772e73c0d377abf0000803f00000000000000000000803f9c9d8f40c5d27f3e0ecd3dbd268e753c36a8a4be2be4e4be465db9bcadeb64bf0000803f00000000000000000000803f9c9d8f40268e753ced6199bd52398e3e7bd6a43e15c548be42ce86bb73077b3f0000803f00000000000000000000803ffac8e53f52398e3e50e394be0072b03c0db7f63d263154bf625e1e3d65df0e3f0000803f00000000000000000000803fbc562c400072b03c189b88be97d9693ea6c60bbe04516dbf9534abbd9d2dbbbe0000803f00000000000000000000803ffac8654097d9693eb8a682be48d3e53cdf26e6bd874374bf17b0b339593f99be0000803f00000000000000000000803ffac8654048d3e53cee727ebe27256a3e669d043e49fa6bbf03f7bcbce725c63e0000803f00000000000000000000803fbc562c4027256a3e97729d3e8be6043fd6688c3c81797f3f851a833d0fc4c9ba0000803f00000000000000000000803f000000008be6043faa13383ef024f53e389187be4491223fc522103c81be45bf0000803f00000000000000000000803fbc56ac40f024f53e2ca5cdbd04d5033f209aa1beea6a7bbef420efbc270d78bf0000803f00000000000000000000803f9c9d8f4004d5033f9110413e5d48073fcaaa733ec905203ff7c298ba56d2473f0000803f00000000000000000000803ffac8653f5d48073f5182cabd3202f23e8aca933e006f70be842d8cbdc239783f0000803f00000000000000000000803ffac8e53f3202f23e210a98be0782003f1dc9103eacde6cbf9b5b5bbde641c03e0000803f00000000000000000000803fbc562c400782003fc17689be753e013fd53d17be252669bfff86883be46fd3be0000803f00000000000000000000803ffac86540753e013f1d81a5bd394d4b3ff97f9abec87669be8601023e312177bf0000803f00000000000000000000803f9c9d8f40394d4b3f57b3163e6157453fe0bf5bbef231293f0d82b13de2d43ebf0000803f00000000000000000000803fbc56ac406157453f1c9d8b3edffd3b3f5c93843b5cb47f3fca7b9d3b0bbf43bd0000803f00000000000000000000803f00000000dffd3b3feea4483e6a603f3f82ef853e671c263ff5f4dabc7bab423f0000803f00000000000000000000803ffac8653f6a603f3f04fbaabd2ddc393f9feca83e114975be66d6d2bbad8a783f0000803f00000000000000000000803ffac8e53f2ddc393f4e1f91bedd0e393f37f7fe3d576f6cbfb99e0e3cb642c43e0000803f00000000000000000000803fbc562c40dd0e393fcd2f8abe0dc93e3fe6b0edbd4ed066bfa92cac3c9232ddbe0000803f00000000000000000000803ffac865400dc93e3f5e957abdcb117d3fd1b187bebfa683be27c78e3c245a77bf0000803f00000000000000000000803f9c9d8f40cb117d3f883a433e3aa3803fee0b5cbe6d8d1e3f1aeabfbdb88d47bf0000803f00000000000000000000803fbc56ac403aa3803ff6138c3e538e813fa78bc53cb14f7f3fed7746bd734a613d0000803f00000000000000000000803f00000000538e813f559f163e54f4823f9672853ece45183f42dfe0bb04c84d3f0000803f00000000000000000000803ffac8653f54f4823f8faecabd0db6803faaee9e3e99769ebe3edeef3c9f50733f0000803f00000000000000000000803ffac8e53f0db6803f956698be61b9783fe9cd063eb14165bf0e2eeabcc15de33e0000803f00000000000000000000803fbc562c4061b9783fd49092beecf5823fee58afbd2cfa5fbff4bc553d7882f6be0000803f00000000000000000000803ffac86540ecf5823f6667cbbdb9429b3f30c891bea2279abe86532fbe622770bf0000803f00000000000000000000803f9c9d8f40b9429b3f1f6c503ec8649a3f66de7dbe1cb8193faa9c16becd3749bf0000803f00000000000000000000803fbc56ac40c8649a3f1e0ca43ee0ca9d3fd2c8313c77df7f3f437419bc4e70f63c0000803f00000000000000000000803f00000000e0ca9d3fcc0e473eee2da03f6335853e399c153ff70d073e62f84c3f0000803f00000000000000000000803ffac8653fee2da03f3caa8ebd2fe8a23fe19d973efdb160bea72e143e8cff763f0000803f00000000000000000000803ffac8e53f2fe8a23fa4ff9cbecb199f3f73711a3ef5c861bf5ba9df3dfabcea3e0000803f00000000000000000000803fbc562c40cb199f3f4df283be65f1a03f8c67c8bd424e66bfd021babcff42dfbe0000803f00000000000000000000803ffac8654065f1a03f4f6e8dbd5358b83f7762abbe9a61ccbdb0ea13be06067cbf0000803f00000000000000000000803f9c9d8f405358b83fdc9a86be9467b83f0c191bbe4a045bbfabd5d6bd49cb01bf0000803f00000000000000000000803ffac865409467b83f1d713b3e44d9ba3f03d78cbee7d54a3f9a5f2c3d1ed01bbf0000803f00000000000000000000803fbc56ac4044d9ba3fb8c28bbea6aac03f8677b23da0eb75bfefd10a3e6958783e0000803f00000000000000000000803fbc562c40a6aac03f01ee873e5ce4c23fc59988bcb027753f82f8633ef80d3b3e0000803f00000000000000000000803f000000005ce4c23f25d582bd0ecfc83f60a86e3e444aa5be75856d3e5ce76a3f0000803f00000000000000000000803ffac8e53f0ecfc83fdf0d1e3e9891c23f5ee92f3eebbfdc3ea173933ecce65a3f0000803f00000000000000000000803ffac8653f9891c23fb8c28bbea6aac03f8677b23dc56c8f3e006ba93e8cb0663f0000803f00000000000000000000803fbc562c40a6aac03f713478be158adc3f8c0fa0bd92f00fbf78a69a3ef612453f0000803f00000000000000000000803f00000000158adc3fdc9a86be9467b83f0c191bbe224277bf0abe3bbe20763bbe0000803f00000000000000000000803ffac865409467b83f00fd55bc8043e03f46002abeb9764d3f88b9c03e2ff0ec3e0000803f00000000000000000000803fe4cb96408043e03f1d713b3e44d9ba3f03d78cbedf606d3fedcfa63e22ee3c3e0000803f00000000000000000000803fbc56ac4044d9ba3fb03894be874ed13f2bdea3be2bb360bfc23498be0b66c0be0000803f00000000000000000000803fdb0fc93f874ed13f4f6e8dbd5358b83f7762abbee90942be36e9a7be41ed6cbf0000803f00000000000000000000803f9c9d8f405358b83f52b58ebdc2fed63fdc99bcbe50cb963ee27673ba24a574bf0000803f00000000000000000000803fdb0f4940c2fed63f98769cbe6409fb3f9ac414beb11302bf78c0d73db4d55a3f0000803f00000000000000000000803f000000006409fb3f16ba86bddb75fd3ffe8d71be3765573f88cc8b3eacc9ee3e0000803f00000000000000000000803fe4cb9640db75fd3f7c12b4be4f3bf13fa7a6bebeaf3158bfa3d98bbe3cdaebbe0000803f00000000000000000000803fdb0fc93f4f3bf13f1ee4e5bd4c89f43fd8b4e1be7b91e43e23a239be075360bf0000803f00000000000000000000803fdb0f49404c89f43f8958a5bef5bf0d40a3cf5ebe7d820abfc4550a3e417f543f0000803f00000000000000000000803f00000000f5bf0d40347bc2bd69420e40c9878dbe822b5f3ff1af7a3e7949d93e0000803f00000000000000000000803fe4cb964069420e40f0dacbbe5ff208406a19e6be088757bf778291befdddeabe0000803f00000000000000000000803fdb0fc93f5ff20840b95d23bedcd608401e4404bf5a24fe3ea363f1bdab2d5cbf0000803f00000000000000000000803fdb0f4940dcd60840f4fcc1bed5c11a408e3f8abe79ed3fbfeab1603cac5f293f0000803f00000000000000000000803f00000000d5c11a40889719bed32b1d40c95eabbec6ab243fd37ba93e5abe303f0000803f00000000000000000000803fe4cb9640d32b1d4023dddbbe3cfd1740a4bdf8be5dc51fbfbc1c63bea1cb3fbf0000803f00000000000000000000803fdb0fc93f3cfd17406ed04dbe6b961a40487112bf03cc3a3fa455dc3af60c2fbf0000803f00000000000000000000803fdb0f49406b961a40889719bed32b1d40c95eabbed522463fad723d3e34081bbf0000803f00000000000000000000803fe4cb9640d32b1d40e43a83be9cdd2b40c45ec3be3a02733f95ff9b3e23c79f3d0000803f00000000000000000000803f000000009cdd2b40f4fcc1bed5c11a408e3f8abe71f6c4bdd9f5ad3d42e27d3f0000803f00000000000000000000803f00000000d5c11a40847adfbe5bf82840e7a5fdbe00e5b9be453d06be6b286cbf0000803f00000000000000000000803f920a86405bf8284023dddbbe3cfd1740a4bdf8bec1e038bf04c849be41bd29bf0000803f00000000000000000000803fdb0fc93f3cfd17409108e7bee6b72940b4c08abeb975f2becc8810bd724b613f0000803f00000000000000000000803f920a0640e6b72940bd25a5bed1f33b404553c7be9518763f6fa48a3ea5f64e3d0000803f00000000000000000000803f00000000d1f33b4059ca04bfa3893840e2e18fbeb60705bf6dd521be5ef2563f0000803f00000000000000000000803f920a0640a3893840b8c600bf422b3940e7b902bf8230e6be911823bef50061bf0000803f00000000000000000000803f920a8640422b3940dc54c4be0e734b40334bc3be5e6f743f5c43943eaeb5883d0000803f00000000000000000000803f000000000e734b40386f17bf2ff44740b13b8cbe6a6ffcbe7e3250be098e583f0000803f00000000000000000000803f920a06402ff44740e73b12bf6b2e48400a8702bfde57d9befe7305be456065bf0000803f00000000000000000000803f920a86406b2e4840d6d4ecbe1b905b40df21b7beaae94b3fa9a0723e1e650e3f0000803f00000000000000000000803f000000001b905b4081df26bf49f65640b59dfdbefcc2a33d7c0cc33d4b037ebf0000803f00000000000000000000803f920a864049f656402d942cbf89875640a2b187be41e557bf94eda0be422adf3e0000803f00000000000000000000803f920a06408987564023dddbbe3cfd1740a4bdf8be2d8c54bf0411683e085c023f0000803f00000000000000000000803fdb0fc93f3cfd174066dbcbbe95fb2840090b10bfc7b17fbf7a890ebde4630cbd0000803f00000000000000000000803f0000000095fb28406ed04dbe6b961a40487112bfb9df923df2caa4be5fae71bf0000803f00000000000000000000803fdb0f49406b961a40707a5ebe6ada2c402553ebbe7904ae3e0d7ee23eae76543f0000803f00000000000000000000803f920a86406ada2c40889719bed32b1d40c95eabbeee2c2e3ffeacc33e4f15203f0000803f00000000000000000000803fe4cb9640d32b1d40c2ea54bea14d274080852abffc930e3fa8aa94be1c3447bf0000803f00000000000000000000803f920a0640a14d27403830dabec4123740941f30bf8d0e7fbf79d8abbd393691bc0000803f00000000000000000000803f00000000c4123740d6856cbee28e354036fd45bf4d0e113fb3e18fbe7e4a46bf0000803f00000000000000000000803f920a0640e28e35405aab73becb943b40fae210bfca57dd3e810fb83e05b4533f0000803f00000000000000000000803f920a8640cb943b403ed8dabeda074640445443bf18127ebf1f62333d1f63eabd0000803f00000000000000000000803f00000000da0746409a195bbe7e5a444022825fbf8f19ff3edce8b4beb9b14abf0000803f00000000000000000000803f920a06407e5a4440882374bec1db4840f10e27bf8d46d43e27308d3ee0015e3f0000803f00000000000000000000803f920a8640c1db484018b5c3bebbe45540eb1562bf02ab56bf24b69cbd0c180abf0000803f00000000000000000000803f00000000bbe45540c9f656bec51558407f8a40bf2971bbbd7247de3e596c653f0000803f00000000000000000000803f920a8640c5155840caad3ebef2d85140f13974bfa9a06e3f379f63bed65992be0000803f00000000000000000000803f920a0640f2d851401d713b3e44d9ba3f03d78cbe602582be6018ab3d7eaa76bf0000803f00000000000000000000803fbc56ac4044d9ba3f30c33a3e68cce13f73213bbee1d0b23ed9c41c3e00a86cbf0000803f00000000000000000000803f0000000068cce13f01ee873e5ce4c23fc59988bcd3c6783f13c7d4bd70d758be0000803f00000000000000000000803f000000005ce4c23fe44b63bd19ece63f08ccd5bd55fa3ebf7883673ebe5a20bf0000803f00000000000000000000803f7cd9a04019ece63fb8c28bbea6aac03f8677b23db13764bfd78c5a3e179fccbe0000803f00000000000000000000803fbc562c40a6aac03fec01aa3e3e5cde3f463d1b3d4940793f4c9169be6d70023b0000803f00000000000000000000803f7cd9a03f3e5cde3fdf0d1e3e9891c23f5ee92f3eb86c1f3f1711a1be6b65373f0000803f00000000000000000000803ffac8653f9891c23f80a2acbdee5fe63f10b31f3e43fe35bf206d913e1db4243f0000803f00000000000000000000803f3a467140ee5fe63f25d582bd0ecfc83f60a86e3e6de596bee740a13d33cc733f0000803f00000000000000000000803ffac8e53f0ecfc83f5ae9173e1c61de3f8446803e6ba7ba3e94a208be10ec6b3f0000803f00000000000000000000803f7cd920401c61de3fb9a3703ee68cff3f28af1cbee7cffe3e518d153b280b5ebf0000803f00000000000000000000803f00000000e68cff3f40ba9ebcb8190440c68f16bd8dd020bf632a7a3e971c3dbf0000803f00000000000000000000803f7cd9a040b8190440d278c13eff60fa3f0ffb833ddbea6d3f54037ebe15fb8b3e0000803f00000000000000000000803f7cd9a03fff60fa3f74ed0ebdfc0701405722533e86f96ebffbeebd3d1c5ab13e0000803f00000000000000000000803f3a467140fc070140864f663e084cfa3fc2e1833e5cbf3c3dcd250ebe323f7d3f0000803f00000000000000000000803f7cd92040084cfa3f74ed0ebdfc0701405722533e6dc4003f194678bd83b65c3f0000803f00000000000000000000803f3a467140fc0701403e40863c99d41140bbe2033ec585a9be6a67043e30486f3f0000803f00000000000000000000803f0000000099d4114040ba9ebcb8190440c68f16bd54686fbfa21fc93c83e4b4be0000803f00000000000000000000803f7cd9a040b81904400f57493eb5e610406e183abb7fb07e3fe368bd3ddbd8263d0000803f00000000000000000000803f920a8640b5e61040b9a3703ee68cff3f28af1cbe4e796e3ff63563bd9201b8be0000803f00000000000000000000803f00000000e68cff3f40d690bb720e11405c9fbbbd1a982cbf57e8de3d4a013bbf0000803f00000000000000000000803f920a0640720e1140306590bbb56c21403ceb113ecc8be0be2e7fab381e11663f0000803f00000000000000000000803f00000000b56c2140ac9328bcc98f2240e432a4bd374615bf10428dbd1e394fbf0000803f00000000000000000000803f920a0640c98f2240350c313e36912240a00e403b627a7f3fb5623b3d354b36bd0000803f00000000000000000000803f920a8640369122405c612bbd1e5132409818ec3dd4fbb8be69bdab3d7dbd6d3f0000803f00000000000000000000803f000000001e513240b46057bd0dad30403670c5bdd5a012bf26db2dbe254c4dbf0000803f00000000000000000000803f920a06400dad30405ff6273ee5da3140e9272ebcdac77e3f7000c63d7fc84cbc0000803f00000000000000000000803f920a8640e5da3140b6d371bdd0924140669ea73d59bddabe895cee3d0e89653f0000803f00000000000000000000803f00000000d0924140a7ce9cbddb283f40807218bee8a317bf3bc65abe17df46bf0000803f00000000000000000000803f920a0640db283f402ae0da3d950142406e8557bd2f0a7d3fda75fa3d569ab7bd0000803f00000000000000000000803f920a864095014240ecf7d0bd552d52404ca7f23c656fd0be2834c63d8c82683f0000803f00000000000000000000803f00000000552d5240dc13ecbd6a854f40531e3ebecc8f14bf017a28be482f4cbf0000803f00000000000000000000803f920a06406a854f40236ab13d634e5140fcf9dabd5e0a7e3f6827973de8c4cabd0000803f00000000000000000000803f920a8640634e5140263bd3bd9d086240d0e780bcafbf4fbf80fea73d371b143f0000803f00000000000000000000803f000000009d086240a7f2a13d45446140a6fc17be59a3663fa3b9c53d1a9fd83e0000803f00000000000000000000803f920a864045446140cabefebd49d35f404fc164be5b1e0bbe400224be4d4a7abf0000803f00000000000000000000803f920a064049d35f40b9a3703ee68cff3f28af1cbe5146c6be3aa3d73e94f551bf0000803f00000000000000000000803f00000000e68cff3ff134a53eb3300f40189bd6bc23c6143e455c803e770475bf0000803f00000000000000000000803f00000000b3300f40d278c13eff60fa3f0ffb833db011673fe90082beedf6b1be0000803f00000000000000000000803f7cd9a03fff60fa3fe2f91a3e1d24134098d90f3e72bc58bf95e2063f1f5b99bd0000803f00000000000000000000803fe4cb96401d24134074ed0ebdfc0701405722533e95555ebf2b12e23e6fb3663e0000803f00000000000000000000803f3a467140fc070140362ef23ee5c407407748113e2fe1683fbba1d4be1bdae3b90000803f00000000000000000000803fdb0fc93fe5c40740864f663e084cfa3fc2e1833efb73a93e7ad5b9be0dfd5e3f0000803f00000000000000000000803f7cd92040084cfa3ff2228f3e78b00b4020879a3e5d35063b2dd8afbdd70d7f3f0000803f00000000000000000000803fdb0f494078b00b4033d2e33e95761d40f0857a3c817a373e03362f3ecc0478bf0000803f00000000000000000000803f0000000095761d405a96893e0d8520400da42c3ec55b62bf37f2eb3e82fd9bbd0000803f00000000000000000000803fe4cb96400d8520409cbb103f4fef15401da84f3ed6916a3fd3e9c8be503fa43d0000803f00000000000000000000803fdb0fc93f4fef1540d6f5d23e048f1a40ba02b43e790b08beb37eddbd2d377c3f0000803f00000000000000000000803fdb0f4940048f1a40429b053f0eec2b4022f39d3d92b0103e553c0d3eb8f57abf0000803f00000000000000000000803f000000000eec2b40091ec43e1cba2e40935d6b3eaa516bbf0d7fc93e941352bc0000803f00000000000000000000803fe4cb96401cba2e409184273f3c2d2440930b713e0f826b3fadb7c8bea2328c3a0000803f00000000000000000000803fdb0fc93f3c2d2440c7a4fa3e8b5027403809cd3e2bf9c7bd02e310be51307c3f0000803f00000000000000000000803fdb0f49408b50274062ca1d3f2d5d3940dc88e13d2819433d9a79eb3d7d027ebf0000803f00000000000000000000803f000000002d5d3940fc06e83e7ecb3b40e2bd8c3eeaaa6dbf2a5abd3e86d314bd0000803f00000000000000000000803fe4cb96407ecb3b4098b4403f4a773340b6db883e8a6c683f9739d5bef139433d0000803f00000000000000000000803fdb0fc93f4a773340c63e163f496738405817e43eac9c87bdbd274ebe4b2f7a3f0000803f00000000000000000000803fdb0f494049673840b6303b3f5e0e4940697d173e92220d3ebde31c3e3b817abf0000803f00000000000000000000803f000000005e0e4940f2db0b3f96324b40ac3c983ef16669bf87bad13e54dffdbc0000803f00000000000000000000803fe4cb964096324b40342a5f3f43844240fa33ae3e6589643f198fe6befd56863c0000803f00000000000000000000803fdb0fc93f438442402b182e3fadf54440e26af73ed7551dbe6ec70ebeda6d7a3f0000803f00000000000000000000803fdb0f4940adf544403375543f33b15640ff09473eb263bf3e2aa17fbc74686dbf0000803f00000000000000000000803f0000000033b15640e2b0273fe0f95940965fbe3ef92557bfa77ce93ea7e895be0000803f00000000000000000000803fe4cb9640e0f95940d7647c3f9a1550400e8bbe3e041e493fc81a08bf8a07a23e0000803f00000000000000000000803fdb0fc93f9a1550402ed64e3f934f524047db0a3fbffad3be568d84bd4170683f0000803f00000000000000000000803fdb0f4940934f5240107f543d081c2f40fac88a3e00000000000000000000803f000080bf0000000000000000000080bf0000000000000000107f543d64c48040fac88a3e00000000000000000000803f000080bf0000000000000000000080bf000000000000803f88359ebf64c48040fac88a3e00000000000000000000803f000080bf0000000000000000000080bf0000803f0000803f88359ebf081c2f40fac88a3e00000000000000000000803f000080bf0000000000000000000080bf0000803f00000000107f543d64c48040fac88a3e000000000000803f00000000000080bf0000000000000000000080bf0000000000000000107f543d64c48040422782bf000000000000803f00000000000080bf0000000000000000000080bf000000000000803f88359ebf64c48040422782bf000000000000803f00000000000080bf0000000000000000000080bf0000803f0000803f88359ebf64c48040fac88a3e000000000000803f00000000000080bf0000000000000000000080bf0000803f00000000107f543d64c48040422782bf0000000000000000000080bf000080bf0000000000000000000080bf0000000000000000107f543d081c2f40422782bf0000000000000000000080bf000080bf0000000000000000000080bf000000000000803f88359ebf081c2f40422782bf0000000000000000000080bf000080bf0000000000000000000080bf0000803f0000803f88359ebf64c48040422782bf0000000000000000000080bf000080bf0000000000000000000080bf0000803f00000000107f543d081c2f40422782bf00000000000080bf00000000000080bf0000000000000000000080bf0000000000000000107f543d081c2f40fac88a3e00000000000080bf00000000000080bf0000000000000000000080bf000000000000803f88359ebf081c2f40fac88a3e00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000803f88359ebf081c2f40422782bf00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000000088359ebf081c2f40fac88a3e000080bf00000000000000000000000000000000000080bf000080bf000000000000000088359ebf64c48040fac88a3e000080bf00000000000000000000000000000000000080bf000080bf000000000000803f88359ebf64c48040422782bf000080bf00000000000000000000000000000000000080bf000080bf0000803f0000803f88359ebf081c2f40422782bf000080bf00000000000000000000000000000000000080bf000080bf0000803f00000000107f543d081c2f40422782bf0000803f000000000000000000000000000000000000803f000080bf0000000000000000107f543d64c48040422782bf0000803f000000000000000000000000000000000000803f000080bf000000000000803f107f543d64c48040fac88a3e0000803f000000000000000000000000000000000000803f000080bf0000803f0000803f107f543d081c2f40fac88a3e0000803f000000000000000000000000000000000000803f000080bf0000803f00000000cf22c23eb4032c4010b162be00000000000000000000803f000080bf0000000000000000000080bf0000000000000000cf22c23e74707e4010b162be00000000000000000000803f000080bf0000000000000000000080bf000000000000803f98a168bf74707e4010b162be00000000000000000000803f000080bf0000000000000000000080bf0000803f0000803f98a168bfb4032c4010b162be00000000000000000000803f000080bf0000000000000000000080bf0000803f00000000cf22c23e74707e4010b162be000000000000803f00000000000080bf0000000000000000000080bf0000000000000000cf22c23e74707e40a22fc1bf000000000000803f00000000000080bf0000000000000000000080bf000000000000803f98a168bf74707e40a22fc1bf000000000000803f00000000000080bf0000000000000000000080bf0000803f0000803f98a168bf74707e4010b162be000000000000803f00000000000080bf0000000000000000000080bf0000803f00000000cf22c23e74707e40a22fc1bf0000000000000000000080bf000080bf0000000000000000000080bf0000000000000000cf22c23eb4032c40a22fc1bf0000000000000000000080bf000080bf0000000000000000000080bf000000000000803f98a168bfb4032c40a22fc1bf0000000000000000000080bf000080bf0000000000000000000080bf0000803f0000803f98a168bf74707e40a22fc1bf0000000000000000000080bf000080bf0000000000000000000080bf0000803f00000000cf22c23eb4032c40a22fc1bf00000000000080bf00000000000080bf0000000000000000000080bf0000000000000000cf22c23eb4032c4010b162be00000000000080bf00000000000080bf0000000000000000000080bf000000000000803f98a168bfb4032c4010b162be00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000803f98a168bfb4032c40a22fc1bf00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000000098a168bfb4032c4010b162be000080bf00000000000000000000000000000000000080bf000080bf000000000000000098a168bf74707e4010b162be000080bf00000000000000000000000000000000000080bf000080bf000000000000803f98a168bf74707e40a22fc1bf000080bf00000000000000000000000000000000000080bf000080bf0000803f0000803f98a168bfb4032c40a22fc1bf000080bf00000000000000000000000000000000000080bf000080bf0000803f00000000cf22c23eb4032c40a22fc1bf0000803f000000000000000000000000000000000000803f000080bf0000000000000000cf22c23e74707e40a22fc1bf0000803f000000000000000000000000000000000000803f000080bf000000000000803fcf22c23e74707e4010b162be0000803f000000000000000000000000000000000000803f000080bf0000803f0000803fcf22c23eb4032c4010b162be0000803f000000000000000000000000000000000000803f000080bf0000803f00000000f7df193fa08e37408c07053f00000000000000000000803f000080bf0000000000000000000080bf0000000000000000f7df193fb0fd84408c07053f00000000000000000000803f000080bf0000000000000000000080bf000000000000803f09d32fbfb0fd84408c07053f00000000000000000000803f000080bf0000000000000000000080bf0000803f0000803f09d32fbfa08e37408c07053f00000000000000000000803f000080bf0000000000000000000080bf0000803f00000000f7df193fb0fd84408c07053f000000000000803f00000000000080bf0000000000000000000080bf0000000000000000f7df193fb0fd844074ab44bf000000000000803f00000000000080bf0000000000000000000080bf000000000000803f09d32fbfb0fd844074ab44bf000000000000803f00000000000080bf0000000000000000000080bf0000803f0000803f09d32fbfb0fd84408c07053f000000000000803f00000000000080bf0000000000000000000080bf0000803f00000000f7df193fb0fd844074ab44bf0000000000000000000080bf000080bf0000000000000000000080bf0000000000000000f7df193fa08e374074ab44bf0000000000000000000080bf000080bf0000000000000000000080bf000000000000803f09d32fbfa08e374074ab44bf0000000000000000000080bf000080bf0000000000000000000080bf0000803f0000803f09d32fbfb0fd844074ab44bf0000000000000000000080bf000080bf0000000000000000000080bf0000803f00000000f7df193fa08e374074ab44bf00000000000080bf00000000000080bf0000000000000000000080bf0000000000000000f7df193fa08e37408c07053f00000000000080bf00000000000080bf0000000000000000000080bf000000000000803f09d32fbfa08e37408c07053f00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000803f09d32fbfa08e374074ab44bf00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000000009d32fbfa08e37408c07053f000080bf00000000000000000000000000000000000080bf000080bf000000000000000009d32fbfb0fd84408c07053f000080bf00000000000000000000000000000000000080bf000080bf000000000000803f09d32fbfb0fd844074ab44bf000080bf00000000000000000000000000000000000080bf000080bf0000803f0000803f09d32fbfa08e374074ab44bf000080bf00000000000000000000000000000000000080bf000080bf0000803f00000000f7df193fa08e374074ab44bf0000803f000000000000000000000000000000000000803f000080bf0000000000000000f7df193fb0fd844074ab44bf0000803f000000000000000000000000000000000000803f000080bf000000000000803ff7df193fb0fd84408c07053f0000803f000000000000000000000000000000000000803f000080bf0000803f0000803ff7df193fa08e37408c07053f0000803f000000000000000000000000000000000000803f000080bf0000803f000000005a7ed63ff6ce1d40e8b19c3f00000000000000000000803f000080bf0000000000000000000080bf00000000000000005a7ed63fa6da8540e8b19c3f00000000000000000000803f000080bf0000000000000000000080bf000000000000803f10ca29bda6da8540e8b19c3f00000000000000000000803f000080bf0000000000000000000080bf0000803f0000803f10ca29bdf6ce1d40e8b19c3f00000000000000000000803f000080bf0000000000000000000080bf0000803f000000005a7ed63fa6da8540e8b19c3f000000000000803f00000000000080bf0000000000000000000080bf00000000000000005a7ed63fa6da85400b6bfcbe000000000000803f00000000000080bf0000000000000000000080bf000000000000803f10ca29bda6da85400b6bfcbe000000000000803f00000000000080bf0000000000000000000080bf0000803f0000803f10ca29bda6da8540e8b19c3f000000000000803f00000000000080bf0000000000000000000080bf0000803f000000005a7ed63fa6da85400b6bfcbe0000000000000000000080bf000080bf0000000000000000000080bf00000000000000005a7ed63ff6ce1d400b6bfcbe0000000000000000000080bf000080bf0000000000000000000080bf000000000000803f10ca29bdf6ce1d400b6bfcbe0000000000000000000080bf000080bf0000000000000000000080bf0000803f0000803f10ca29bda6da85400b6bfcbe0000000000000000000080bf000080bf0000000000000000000080bf0000803f000000005a7ed63ff6ce1d400b6bfcbe00000000000080bf00000000000080bf0000000000000000000080bf00000000000000005a7ed63ff6ce1d40e8b19c3f00000000000080bf00000000000080bf0000000000000000000080bf000000000000803f10ca29bdf6ce1d40e8b19c3f00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000803f10ca29bdf6ce1d400b6bfcbe00000000000080bf00000000000080bf0000000000000000000080bf0000803f0000000010ca29bdf6ce1d40e8b19c3f000080bf00000000000000000000000000000000000080bf000080bf000000000000000010ca29bda6da8540e8b19c3f000080bf00000000000000000000000000000000000080bf000080bf000000000000803f10ca29bda6da85400b6bfcbe000080bf00000000000000000000000000000000000080bf000080bf0000803f0000803f10ca29bdf6ce1d400b6bfcbe000080bf00000000000000000000000000000000000080bf000080bf0000803f000000005a7ed63ff6ce1d400b6bfcbe0000803f000000000000000000000000000000000000803f000080bf00000000000000005a7ed63fa6da85400b6bfcbe0000803f000000000000000000000000000000000000803f000080bf000000000000803f5a7ed63fa6da8540e8b19c3f0000803f000000000000000000000000000000000000803f000080bf0000803f0000803f5a7ed63ff6ce1d40e8b19c3f0000803f000000000000000000000000000000000000803f000080bf0000803f00000000 111 | m_CompressedMesh: 112 | m_Vertices: 113 | m_NumItems: 0 114 | m_Range: 0 115 | m_Start: 0 116 | m_Data: 117 | m_BitSize: 0 118 | m_UV: 119 | m_NumItems: 0 120 | m_Range: 0 121 | m_Start: 0 122 | m_Data: 123 | m_BitSize: 0 124 | m_Normals: 125 | m_NumItems: 0 126 | m_Range: 0 127 | m_Start: 0 128 | m_Data: 129 | m_BitSize: 0 130 | m_Tangents: 131 | m_NumItems: 0 132 | m_Range: 0 133 | m_Start: 0 134 | m_Data: 135 | m_BitSize: 0 136 | m_Weights: 137 | m_NumItems: 0 138 | m_Data: 139 | m_BitSize: 0 140 | m_NormalSigns: 141 | m_NumItems: 0 142 | m_Data: 143 | m_BitSize: 0 144 | m_TangentSigns: 145 | m_NumItems: 0 146 | m_Data: 147 | m_BitSize: 0 148 | m_FloatColors: 149 | m_NumItems: 0 150 | m_Range: 0 151 | m_Start: 0 152 | m_Data: 153 | m_BitSize: 0 154 | m_BoneIndices: 155 | m_NumItems: 0 156 | m_Data: 157 | m_BitSize: 0 158 | m_Triangles: 159 | m_NumItems: 0 160 | m_Data: 161 | m_BitSize: 0 162 | m_UVInfo: 0 163 | m_LocalAABB: 164 | m_Center: {x: 0.21986115, y: 2.0826588, z: -0.14254344} 165 | m_Extent: {x: 1.4558698, y: 2.1002817, z: 1.3667227} 166 | m_MeshUsageFlags: 0 167 | m_BakedConvexCollisionMesh: 168 | m_BakedTriangleCollisionMesh: 169 | m_MeshMetrics[0]: 1 170 | m_MeshMetrics[1]: 1 171 | m_MeshOptimizationFlags: 1 172 | m_StreamData: 173 | offset: 0 174 | size: 0 175 | path: 176 | -------------------------------------------------------------------------------- /Meshes/Generated/LowPoly.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8f11fd21329fd7549a0ba503582091e2 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Meshes/Generated/LowPoly2.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!43 &4300000 4 | Mesh: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: LowPoly2 10 | serializedVersion: 10 11 | m_SubMeshes: 12 | - serializedVersion: 2 13 | firstByte: 0 14 | indexCount: 912 15 | topology: 0 16 | baseVertex: 0 17 | firstVertex: 0 18 | vertexCount: 187 19 | localAABB: 20 | m_Center: {x: -0.083590776, y: 1.7430182, z: 0.7828345} 21 | m_Extent: {x: 0.695611, y: 1.6181936, z: 1.0349164} 22 | - serializedVersion: 2 23 | firstByte: 1824 24 | indexCount: 960 25 | topology: 0 26 | baseVertex: 0 27 | firstVertex: 187 28 | vertexCount: 252 29 | localAABB: 30 | m_Center: {x: -0.092639506, y: 2.8878286, z: 1.1651043} 31 | m_Extent: {x: 1.7398014, y: 1.5719836, z: 1.8024765} 32 | m_Shapes: 33 | vertices: [] 34 | shapes: [] 35 | channels: [] 36 | fullWeights: [] 37 | m_BindPose: [] 38 | m_BoneNameHashes: 39 | m_RootBoneNameHash: 0 40 | m_BonesAABB: [] 41 | m_VariableBoneCountWeights: 42 | m_Data: 43 | m_MeshCompression: 0 44 | m_IsReadable: 1 45 | m_KeepVertices: 1 46 | m_KeepIndices: 1 47 | m_IndexFormat: 0 48 | m_IndexBuffer: 000001000200000003000100040003000000020001000500020005000600040007000300080007000400060005000900060009000a0008000b0007000c000b0008000a0009000d000a000d000e000c000f000b0010000f000c000e00110010000e000d001100100011000f000700120003000b00130007000700130012000f0014000b000b0014001300110015000f000f00150014000d0016001100110016001500090017000d000d001700160003001200180003001800010009001900170005001900090001001a000500010018001a0005001a00190014001b00130015001c00140014001c001b0016001d00150015001d001c0013001e00120013001b001e0017001f00160016001f001d0012002000180012001e002000180021001a001800200021001a00220019001a0021002200190023001700170023001f001900220023001d0024001c001c0025001b001c00240025001b0026001e001b00250026001e00270020001e00260027002000280021002000270028001f0029001d001d002900240021002a002200210028002a0022002b00230022002a002b0023002c001f001f002c00290023002b002c0024002d00250025002e00260025002d002e0026002f00270026002e002f0027003000280027002f003000280031002a00280030003100290032002400240032002d002a0033002b002a00310033002b0034002c002b00330034002c00350029002900350032002c00340035002d0036002e002d0037003600320037002d002e00360038003200390037003500390032002e0038002f0035003a00390034003a0035002f0038003b0034003c003a0033003c0034002f003b00300033003d003c0030003b003e0031003d00330030003e00310031003e003d003f00400041003f0042004000430042003f0041004000440041004400450043004600420047004600430045004400480045004800490049004a00470047004a004600490048004a0040004b00440042004c00400040004c004b0046004d00420042004d004c0044004e00480044004b004e0048004f004a0048004e004f004a0050004600460050004d004a004f0050004d0051004c004c0052004b004c00510052004b0053004e004b00520053004e0054004f004e00530054004f00550050004f0054005500500056004d004d005600510050005500560051005700520052005800530052005700580053005900540053005800590054005a005500540059005a0055005b00560055005a005b0056005c00510051005c00570056005b005c0057005d00580058005e00590058005d005e0059005f005a0059005e005f005a0060005b005a005f0060005b0061005c005b00600061005c0062005700570062005d005c00610062005d0063005e005d0064006300620064005d005e00630065005e0065005f006200660064006100660062005f00650067005f006700600061006800660060006700680060006800610069006a006b0069006c006a006d006c0069006b006a006e006b006e006f006f0070006d006d0070006c006f006e0070006a0071006e006a00720071006c0072006a006e00710073006e00730070006c0074007200700073007400700074006c00750076007700750078007600790078007500770076007a0077007a007b007b007c00790079007c0078007b007a007c0076007d007a0076007e007d0078007e0076007a007d007f007a007f007c00780080007e007c007f0080007c008000780081008200830081008400820085008400810083008200860083008600870085008800840089008800850087008a008900870086008a0089008a00880082008b00860084008c00820082008c008b0086008d008a0086008b008d008a008e0088008a008d008e0088008f00840084008f008c0088008e008f008b0090008d008c0091008b008b00910090008d0092008e008d00900092008e0093008f008e00920093008f0094008c008c00940091008f009300940090009500920091009600900090009600950092009700930092009500970093009800940093009700980094009900910091009900960094009800990095009a00970095009b009a0096009b00950097009a009c0097009c00980096009d009b0099009d00960098009c009e0098009e00990099009e009d009f00a000a1009f00a200a000a300a2009f00a100a400a300a100a000a400a300a400a200a000a500a400a400a600a200a400a500a600a200a700a000a000a700a500a200a600a700a500a800a600a500a900a800a700a900a500a600a800aa00a600aa00a700a700aa00a900ab00ac00ad00ab00ae00ac00af00ae00ab00ad00ac00b000ad00b000b100b100b200af00af00b200ae00b100b000b200ac00b300b000ae00b400ac00ac00b400b300b000b500b200b000b300b500b200b600ae00ae00b600b400b200b500b600b300b700b500b300b800b700b400b800b300b500b700b900b500b900b600b400ba00b800b600b900ba00b600ba00b400bb00bc00bd00bc00be00bd00bc00bf00be00bd00be00c000bf00c100be00bf00c200c100be00c300c000c100c300be00c200c400c100c200c500c400c500c600c400c600c700c400c600c800c700c400c700c900c100c400c900c100c900c300c300c900ca00c900cb00ca00c000c300cc00c300ca00cc00cb00cd00ca00cb00ce00cd00ca00cd00cf00cc00ca00cf00c000cc00d000c000d000d100cc00cf00d200cc00d200d000d000d300d100d100d300d400d000d500d300d000d200d500d200cf00d600cf00d700d600d500d200d800d200d600d800d700d900d600d700da00d900d600d900db00d800d600db00d500d800dc00dd00d500dc00d800db00de00d800de00dc00dd00dc00df00e000dd00df00df00dc00e100dc00de00e100de00db00e200db00e300e200e100de00e400de00e200e400e300e500e200e300e600e500e200e500e700e400e200e700e100e400e800e900e100e800e400e700ea00e400ea00e800e900e800eb00ec00e900eb00eb00e800ed00e800ea00ed00ea00e700ee00e700ef00ee00ed00ea00f000ea00ee00f000ef00f100ee00ef00f200f100ee00f100f300f000ee00f300f000f300f400ed00f000f500f000f400f500f500f400f600f700ed00f500f800f500f600f700f500f800f900f700f800fa00fb00fc00fb00fd00fc00fb00fe00fd00fc00fd00ff00fe000001fd00fe0001010001fd000201ff0000010201fd0001010301000101010401030104010501030105010601030105010701060103010601080100010301080100010801020102010801090108010a010901ff0002010b01020109010b010a010c0109010a010d010c0109010c010e010b0109010e01ff000b010f01ff000f0110010b010e0111010b0111010f010f01120110011001120113010f01140112010f011101140111010e0115010e0116011501140111011701110115011701160118011501160119011801150118011a01170115011a01140117011b011c0114011b0117011a011d0117011d011b011c011b011e011f011c011e011e011b0120011b011d0120011d011a0121011a012201210120011d0123011d0121012301220124012101220125012401210124012601230121012601200123012701280120012701230126012901230129012701280127012a012b0128012a012a0127012c01270129012c01290126012d0126012e012d012c0129012f0129012d012f012e0130012d012e01310130012d01300132012f012d0132012f01320133012c012f0134012f013301340134013301350136012c01340137013401350136013401370138013601370139013a013b013a013c013b013a013d013c013b013c013e013d013f013c013d0140013f013c0141013e013f0141013c01400142013f014001430142014301440142014401450142014401460145014201450147013f01420147013f01470141014101470148014701490148013e0141014a01410148014a0149014b01480149014c014b0148014b014d014a0148014d013e014a014e013e014e014f014a014d0150014a0150014e014e0151014f014f01510152014e01530151014e015001530150014d0154014d0155015401530150015601500154015601550157015401550158015701540157015901560154015901530156015a015b0153015a01560159015c0156015c015a015b015a015d015e015b015d015d015a015f015a015c015f015c01590160015901610160015f015c0162015c01600162016101630160016101640163016001630165016201600165015f016201660167015f0166016201650168016201680166016701660169016a0167016901690166016b01660168016b01680165016c0165016d016c016b0168016e0168016c016e016d016f016c016d0170016f016c016f0171016e016c0171016e01710172016b016e0173016e017201730173017201740175016b017301760173017401750173017601770175017601780179017a0179017b017a0179017c017b017a017b017d017c017e017b017c017f017e017b0180017d017e0180017b017f0181017e017f01820181018201830181018301840181018301850184018101840186017e01810186017e01860180018001860187018601880187017d018001890180018701890188018a01870188018b018a0187018a018c01890187018c017d0189018d017d018d018e0189018c018f0189018f018d018d0190018e018e01900191018d01920190018d018f0192018f018c0193018c019401930192018f0195018f01930195019401960193019401970196019301960198019501930198019201950199019a0192019901950198019b0195019b0199019a0199019c019d019a019c019c0199019e0199019b019e019b0198019f019801a0019f019e019b01a1019b019f01a101a001a2019f01a001a301a2019f01a201a401a1019f01a4019e01a101a501a6019e01a501a101a401a701a101a701a501a601a501a801a901a601a801a801a501aa01a501a701aa01a701a401ab01a401ac01ab01aa01a701ad01a701ab01ad01ac01ae01ab01ac01af01ae01ab01ae01b001ad01ab01b001ad01b001b101aa01ad01b201ad01b101b201b201b101b301b401aa01b201b501b201b301b401b201b501b601b401b501 49 | m_VertexData: 50 | serializedVersion: 3 51 | m_VertexCount: 439 52 | m_Channels: 53 | - stream: 0 54 | offset: 0 55 | format: 0 56 | dimension: 3 57 | - stream: 0 58 | offset: 12 59 | format: 0 60 | dimension: 3 61 | - stream: 0 62 | offset: 24 63 | format: 0 64 | dimension: 4 65 | - stream: 0 66 | offset: 0 67 | format: 0 68 | dimension: 0 69 | - stream: 0 70 | offset: 40 71 | format: 0 72 | dimension: 2 73 | - stream: 0 74 | offset: 0 75 | format: 0 76 | dimension: 0 77 | - stream: 0 78 | offset: 0 79 | format: 0 80 | dimension: 0 81 | - stream: 0 82 | offset: 0 83 | format: 0 84 | dimension: 0 85 | - stream: 0 86 | offset: 0 87 | format: 0 88 | dimension: 0 89 | - stream: 0 90 | offset: 0 91 | format: 0 92 | dimension: 0 93 | - stream: 0 94 | offset: 0 95 | format: 0 96 | dimension: 0 97 | - stream: 0 98 | offset: 0 99 | format: 0 100 | dimension: 0 101 | - stream: 0 102 | offset: 0 103 | format: 0 104 | dimension: 0 105 | - stream: 0 106 | offset: 0 107 | format: 0 108 | dimension: 0 109 | m_DataSize: 21072 110 | _typelessdata: 18677d3e06a4ff3d5d9e45bd1902783fd53d48bc3b8e7dbe0000803f00000000000000000000803f0000000000000000a1f6803e5c27823e56601c3cb86e7f3fc193573c929a85bd0000803f00000000000000000000803f0000000006a47f3edcdf613e06a4ff3d6b13fa3d337a663fde7785bd0658dc3e0000803f00000000000000000000803fc3b8323f000000001d2d453e009c843e3cb21cbef8d1383fa7f5953d712430bf0000803f00000000000000000000803fc3b8b24006a47f3e705c223e06a4ff3df2ba48be6ad6153f9729d13c34774fbf0000803f00000000000000000000803fc3b8b240000000004c50453e35f57c3e6c1e303ec55a4e3f81de4bbde4f7163f0000803f00000000000000000000803fc3b8323f06a47f3e6450b93d06a4ff3d52f9703e9083d23e0498dfbd2eae673f0000803f00000000000000000000803fc3b8b23f0000000070f32d3d62b2843eb96575beb21be53d736fd23d8a077dbf0000803f00000000000000000000803fab619c4006a47f3e20d694bb06a4ff3de41081be0d798ebd835d013d74407fbf0000803f00000000000000000000803fab619c400000000010cb2e3ddc9b763ea140843e9706723e5d3fb0bdeec4773f0000803f00000000000000000000803fc3b8b23f06a47f3ed0d4a7bd06a4ff3dcf27743e37cd89beb3c5fbbd6789743f0000803f00000000000000000000803f920a064000000000e13903be0860823e5fd356bef8a30cbfa10eb53ddab454bf0000803f00000000000000000000803f920a864006a47f3eac7c29be06a4ff3d38c042be247231bf2bba3b3bac8538bf0000803f00000000000000000000803f920a8640000000007a0a03be2f3b743e2b93693e3496e3bedd95a0bd4070643f0000803f00000000000000000000803f920a064006a47f3e26395dbe06a4ff3d1118053e0d1b53bfa189cabdd5940e3f0000803f00000000000000000000803fc3b8324000000000f93675be1b767d3e67929ebdf12775bfcf66143d504492be0000803f00000000000000000000803ff4665f4006a47f3e9e047fbe06a4ff3d80f920bd103e7ebf423747bd17e2d9bd0000803f00000000000000000000803ff4665f4000000000402475befdef763e3f9ac33d81e06abfa350f5bca013cb3e0000803f00000000000000000000803fc3b8324006a47f3ef3cd383d105e063fc04558be97072f3e1885163eec6879bf0000803f00000000000000000000803fab619c407815083f6bae00bef0ca043fc0033abe6a28febef8f8013eead75bbf0000803f00000000000000000000803f920a8640aa2f063f80fd72beef89003faf474ebdd1d56fbf5497493d9745b1be0000803f00000000000000000000803ff4665f406b1e013f393d73be3b31f73e854ef83d321b71bf14dc5abdf0e6a93e0000803f00000000000000000000803fc3b832407381f63ec54f01be108ef03e5c77813ee95400bf20ce08bebbda5a3f0000803f00000000000000000000803f920a06407eaaee3e09f0353d6d45f03ef4d9903e5eac333ea6381abed90f793f0000803f00000000000000000000803fc3b8b23f0963ee3ee4d3473eb086043f7c2f00beadff423f5951cd3d48de23bf0000803f00000000000000000000803fc3b8b24084ec053f215c473e5379f63efd104a3e3eb8443fbf87c2bda501223f0000803f00000000000000000000803fc3b8323f85ccf53e4c28823e5e21003f1d1e143d3cfe7f3f199ca73bf742acbb0000803f00000000000000000000803f000000008bb7003ff51a74be302c403f0b17b5badd3c70bfc7df933ddaf9acbe0000803f00000000000000000000803ff4665f40396d463f5bf573be01a7373f545f2c3ef3bc70bf182ca2bdbe5aa93e0000803f00000000000000000000803fc3b83240fc8b3b3fcce301be8fe5313fe505993e2e8fffbe5e234abe30ff573f0000803f00000000000000000000803f920a064006c2313ffe4202be8078473f99ff05beb31affbef651403ec2b058bf0000803f00000000000000000000803f920a86407e4e4d3ffce7323d4999313f8887a83e6c9a343e4e4665be9c61753f0000803f00000000000000000000803fc3b8b23fe8a32d3ff536313dbf214a3f5c5723beab39303edec95e3ef5f375bf0000803f00000000000000000000803fab619c40aef74c3fe3e8453e28e9463f456d97bdf46e433f6286163eb60321bf0000803f00000000000000000000803fc3b8b2406791453f5b57813e91503f3f1dc4af3dedfe7f3fa83c9c3b6a384ebb0000803f00000000000000000000803f0000000004923a3f8b2f463ee1e5363f48e67a3ef0a7443fdeb812be84bd1f3f0000803f00000000000000000000803fc3b8323fde1e313fa83401be0f976d3f3be5b73e16da00bf74a375be7e83543f0000803f00000000000000000000803f920a064026f8673f912873beadcf753f48e46b3ec41871bfde01c5bd93f2a43e0000803f00000000000000000000803fc3b832407d63713f981f73bedf51803ff0e07f3dda0c70bfdc30b93d85c4abbe0000803f00000000000000000000803ff4665f40107d7f3fec1d01be1681843fe40f87bd5ce6febe40636f3e0dcd55bf0000803f00000000000000000000803f920a8640f4d5853f8310363d3f80853fd528c2bd8f852f3e36b2893ee1a172bf0000803f00000000000000000000803fab619c40581e883f19a9353da8d26b3f98f9c63ea6ed313e791f8bbeb151723f0000803f00000000000000000000803fc3b8b23f55a3673f1b10473ef7d7823f239b2dbc411d433f8079373e8d411fbf0000803f00000000000000000000803fc3b8b2404186853fb0d6813e198d7b3f3acf163e60fe7f3f8b3e843b9b63bdbb0000803f00000000000000000000803f00000000d9887e3f3cff463e2856713ff1209c3e1fcb443f952c33be737c1d3f0000803f00000000000000000000803fc3b8323fba8c703f886902be873a933fc314dc3e873b00bfb7e1abbece384c3f0000803f00000000000000000000803f920a06401e8a933f28a874be283b983fd1259b3ebadd71bf414035be37308d3e0000803f00000000000000000000803fc3b83240b72d993f75bc74be2c109f3fdb5e0d3e6c5b6cbf984cd93dda08bdbe0000803f00000000000000000000803ff4665f40f657a03feb9c02be2f87a43f1dde463cd8f4cbbe82a8df3ed6784ebf0000803f00000000000000000000803f920a864097aea53fb040313d9511a63f149081bcc9e4733d326fc73e8e496bbf0000803f00000000000000000000803fab619c4024b2a63f712a323d8065923f301aeb3e9e80953ecccb43be87e66f3f0000803f00000000000000000000803fc3b8b23fa410923f3f31463ed3f6a23ff2c7893d6b61453f0b3c013e6cca1fbf0000803f00000000000000000000803fc3b8b2402be9a23fec82813ec8aa9c3fccdf633e67997f3f39f450bd8ae6bb3c0000803f00000000000000000000803f0000000011199c3f6457463ec01f963fc92ec13eb2462b3fdc3c8fbd816b3d3f0000803f00000000000000000000803fc3b8323fea71953ffbf532be4156ad3f5323033f51c720bf6179c5be18062d3f0000803f00000000000000000000803f920a06405ac8ae3f85a45ebc4439ae3f6c250c3f88c5903ec08996be83bb693f0000803f00000000000000000000803fc3b8b23fa4aaac3f4e998abe9fa6b33ff844c23ef1857dbf0defe6bddda3a53d0000803f00000000000000000000803fc3b832403f48b63fdc14b73d39b7bf3f95b5cb3ea0e81c3f8dc6903d0d77493f0000803f00000000000000000000803fc3b8323f96ecb03fa34a863e0d1fba3f8861973e4e7d623f2a31573c488eee3e0000803f00000000000000000000803f000000003290b93f619f70be8701bd3f9c7f6c3e5b8b30bfd11dd63e705917bf0000803f00000000000000000000803ff4665f40fda7bf3f8b11733edb38bf3f05db0a3e8e73603f0bf0003d47b4f5be0000803f00000000000000000000803fc3b8b240a08ac23fb946cb3d8456c33f59fe613d18468e3dff8d933e197e74bf0000803f00000000000000000000803fab619c406ba8c73febf0d6bcc842c73f7a74583e871bc2be8deb123f47d339bf0000803f00000000000000000000803f920a8640b584c63fdc14b73d39b7bf3f95b5cb3e8e58673f6603da3e9a41383d0000803f00000000000000000000803fc3b8323f96ecb03f0d08603c2cdace3f06d6163f8eb5703fd23b573eef1b893e0000803f00000000000000000000803f000000007581cf3f85a45ebc4439ae3f6c250c3fa3820e3fe2c6abbefc8c423f0000803f00000000000000000000803fc3b8b23fa4aaac3f6f1d8dbd48ddd73f60e9e03ef184083f80c63a3f2736dbbe0000803f00000000000000000000803f368da74068cadd3febf0d6bcc842c73f7a74583ea04f4f3e2d8d4a3fb1b913bf0000803f00000000000000000000803f920a8640b584c63fddf6b0bd9747c73f7238283f10f87b3e5a9ae8be4a2f5b3f0000803f00000000000000000000803f920a863f7186c03ffbf532be4156ad3f5323033f5d07d8be29d507bf9e323c3f0000803f00000000000000000000803f920a06405ac8ae3fdbba75bebbced73fe748c63ead9cddbe83ef203fde6625bf0000803f00000000000000000000803f920a86405718dd3f619f70be8701bd3f9c7f6c3eac1c43bf0489af3ec5950cbf0000803f00000000000000000000803ff4665f40fda7bf3fe05d69bebd5ec63f52f91e3fc61115bf9a8b0fbff8b1163f0000803f00000000000000000000803f920a064060d4bf3f4e998abe9fa6b33ff844c23eaf0172bf92b68abe92d6393e0000803f00000000000000000000803fc3b832403f48b63f090799bec5e2cd3fa946003fa7b67dbf8b06fabd40ca5bbd0000803f00000000000000000000803fdb0f4940531dce3f9757a4bd5bd9e63fc5853c3f618f6e3f72f24b3d29fcb73e0000803f00000000000000000000803f00000000d78fe73f010ceebdc3e5f03f0159223f6fa0263f1669213f4c80d8be0000803f00000000000000000000803f368da74023a5f53f1d4378be5b9cf03f65d3163fcef780be21062a3f853134bf0000803f00000000000000000000803f920a8640767ff53fb58e2ebe8883dc3fef2c4b3f22e9903e170416bfdd5f423f0000803f00000000000000000000803f920a863fde54d93fe9e597be1f3adc3f51a73f3f9a0027bfad7f1abfd9beea3e0000803f00000000000000000000803f920a0640312fd93f0353aabe8846e63f8d7a253fc4ac78bfdd2cd73cbcb671be0000803f00000000000000000000803fdb0f49407d44e73f843b95beb8bf03408d8e443fe2ae8ebed6b82c3f92f72ebf0000803f00000000000000000000803f920a8640d1e706405fc928be25b503404b33503f2c072a3fb657253f66c0c0be0000803f00000000000000000000803f368da740e59b06401a1f04be6072fc3fabd6683f1e61733f9516d9bc11329e3e0000803f00000000000000000000803f000000006fdefc3f812261be9f8ff13f4dd5753fb4e0903e77e72bbf43522f3f0000803f00000000000000000000803f920a863fea1ced3f1568b1bec5a4f13f90306a3faa062cbf0f8e23bf31c2bf3e0000803f00000000000000000000803f920a0640c1b4ed3f38bdc3beb09cfc3f308d513f96d172bf751b273da9d2a0be0000803f00000000000000000000803fdb0f49401d0efe3f1971b1be05d10d401044773ff30c97bee6bc3b3ff1cc1cbf0000803f00000000000000000000803f920a864074be1140407762be02b80d406468813ff1d9243f3068343f9c7d98be0000803f00000000000000000000803f368da740e68e1040839b3bbeadd70740a9b48c3fe7c0723f03a8b0bc2f30a23e0000803f00000000000000000000803f00000000862b07405d958abe5c100240933a923f38919a3ed9cc39bfc23e1e3f0000803f00000000000000000000803f920a863f67effd3fd7cacabe5f29024036748c3fd43627bf656e31bf6e1f9c3e0000803f00000000000000000000803f920a064042270040b438debeb4090840f127813fb1b872bfa994323d8737a1be0000803f00000000000000000000803fdb0f4940a28a0940f3dfd2bef83b1640a09a963fbf1785be5762573f22a1f2be0000803f00000000000000000000803f920a8640534d1a40540794be5f3b164009859c3f5e10043f895e503f49c888be0000803f00000000000000000000803f368da740a10d1a40248f7ebebf241040dfd8a63f5180753f6da290bdb68b8c3e0000803f00000000000000000000803f00000000287c10406e60a9beb80e0a404942ab3f13e5493ec17a45bf4ce31a3f0000803f00000000000000000000803f920a863f612a07400d39e8be510f0a40e157a53f0e0e0cbf1aaf47bf29869b3e0000803f00000000000000000000803f920a0640136a0740d0f8fcbef12510400b049b3fe8cf6bbf074da638fe48c7be0000803f00000000000000000000803fdb0f49408cfb1040f5a2f5bee6e11b400596bd3f1e6163beec1a673f95a0bcbe0000803f00000000000000000000803f920a8640d3322140297317bf89ce1540b17db33f51ac46bfbe1be33e6986e5be0000803f00000000000000000000803fdb0f494072de1640719da1be00ca1d40744bb93fd9e6233f1fe4373fc35f8bbe0000803f00000000000000000000803f368da7407bad214075a00ebfed1a10402ccdbc3f7ff612bfb4f64fbffafdd13d0000803f00000000000000000000803f920a0640b9040d4053db93be4efc164005a1c13f25a6393f6101dfbe0485083f0000803f00000000000000000000803f00000000c2d31740872fe9be14bc15403e64c63f6753cb3d36ce43bf45f1223f0000803f00000000000000000000803f920a863f617f0d40872fe9be14bc15403e64c63f4f9f243f3cad193cf808443f0000803f00000000000000000000803f920a863f617f0d4010ac20bf213e1540dd5cd93f088c113ff04003bf02b2243f0000803f00000000000000000000803f000000008c8c144075a00ebfed1a10402ccdbc3f101ce0bd3f2a7abfe7463a3e0000803f00000000000000000000803f920a0640b9040d40118327bf21861940ab13d33fbc5dba3e3ddc583fc73cc63e0000803f00000000000000000000803fe4cb964033401f40f5a2f5bee6e11b400596bd3f08efecbd24437e3f12ae453c0000803f00000000000000000000803f920a8640d3322140b4522fbf831e144085e9d43f171010bf83cb4ebf67ad33be0000803f00000000000000000000803fdb0fc93f93510f40297317bf89ce1540b17db33f659f5bbf4545bc3d106a01bf0000803f00000000000000000000803fdb0f494072de1640b52936bf8366184053a0ce3f871830bf9bd30e3f72b6edbe0000803f00000000000000000000803fdb0f49403a051a406a073bbfe63b15405101e33f219f1c3ece5465bfaea2d53e0000803f00000000000000000000803f00000000c8c715405afb34bf8e371940b694e33ff20d2f3fb352083fbf67ff3e0000803f00000000000000000000803fe4cb964021972040c47947bf129a164013d6dd3ff21547bf82c8f5befbd4cfbe0000803f00000000000000000000803fdb0fc93f577a1040b46d41bfb9951a407969de3fbb448dbe56056f3ff3c769be0000803f00000000000000000000803fdb0f4940b0491b40f5a2f5bee6e11b400596bd3f57e961bff210ec3e81b1bebd0000803f00000000000000000000803f920a8640d3322140d415dabe3a062540d701d43ffbb30dbf2d793f3f078ebbbe0000803f00000000000000000000803f0000000090a12840719da1be00ca1d40744bb93f02d9ad3e8d5c543f4f01e3be0000803f00000000000000000000803f368da7407bad2140848ecfbedeca1f409c85d93fc0de53bf21b8aabe7f2de73e0000803f00000000000000000000803fe4cb9640daa31e40872fe9be14bc15403e64c63f73ec92bea0712bbfaf582f3f0000803f00000000000000000000803f920a863f617f0d40b0b7b1be930f2540644bd63fc892553fd712053f9f343cbe0000803f00000000000000000000803fdb0fc93f128a264053db93be4efc164005a1c13f2960663fa73988be64e7b03e0000803f00000000000000000000803f00000000c2d317406130a7be37d41f4029cfdb3f15790a3fd8b41dbf2c98123f0000803f00000000000000000000803fdb0f49405c8c1c400207bdbed41c29409a4be23f6694f83d51426a3f7be8c4be0000803f00000000000000000000803f00000000df3e30409e5dd9be47232740b0f7e43fb5ab7ebfd234073d7e2ac53d0000803f00000000000000000000803fe4cb964043d825403cf7a9be87172640f8ffe53f07377d3f5201a13d9ea3fe3d0000803f00000000000000000000803fdb0fc93f6d6f2f40d64dc6bef91d244010ace83f7f753cbebc9741bf04be203f0000803f00000000000000000000803fdb0f4940d1082540ebf0d6bcc842c73f7a74583e32e16ebf4dbda43e0254243e0000803f00000000000000000000803f920a8640b584c63fbdda313d68e9e13fa79f233ef3986dbfd9f3883eca9484be0000803f00000000000000000000803f00000000edf7e13fb946cb3d8456c33f59fe613d2e6684be07a53e3efea772bf0000803f00000000000000000000803fab619c406ba8c73f2320e63dcd8ddd3ff14c963eea8c0bbf4c517d3e46104d3f0000803f00000000000000000000803f7cd9a040a2e0df3fdc14b73d39b7bf3f95b5cb3ebbe905be197e873ec397743f0000803f00000000000000000000803fc3b8323f96ecb03f83f0183e471ae13f03fde93dc244133e4b63143e9d9b7abf0000803f00000000000000000000803f7cd9a03f8964df3f8b11733edb38bf3f05db0a3e9d1a433f0c29703d9f0f25bf0000803f00000000000000000000803fc3b8b240a08ac23f8a3b823e97e5da3f69a2a03ee424243fe3edb93d1712433f0000803f00000000000000000000803f3a4671406a02dc3fa34a863e0d1fba3f8861973ee2316f3fb55ef4bcc2ceb53e0000803f00000000000000000000803f000000003290b93f4a4f833e2018de3f03e03b3e53d9663fdedb5cbc6034ddbe0000803f00000000000000000000803f7cd92040b8b5db3f647ee63d570c00403592353ef9525bbfdfa94f3e2cccf2be0000803f00000000000000000000803f00000000b38dff3f3061023ee476ff3f4369903ecb8c2ebf41f0cb3daa85393f0000803f00000000000000000000803f7cd9a0407978fe3f2c60533ebf5cfe3fe587053e83c5193e7f990f3d1bf07cbf0000803f00000000000000000000803f7cd9a03f482fff3facf58e3e98a8fc3f6f17533e3cba793f55f068bdd6a159be0000803f00000000000000000000803f7cd92040b3dffd3f6ddc6b3ef856fd3f9188993ee697d03e4c3e31bc49c6693f0000803f00000000000000000000803f3a467140b76efd3f6c48173e1fd50f40240d3e3e72a65ebf54972f3e3df2ecbe0000803f00000000000000000000803f000000005d5c10405360253e67090f40585a943eb2d835bfe47aa73dd9f7323f0000803f00000000000000000000803f7cd9a0408f6b104000f4773eb0630f4008230e3e7dcd323eb465d23c3cfb7bbf0000803f00000000000000000000803f7cd9a03f0b760e405fe5a03ede510e40b32d5b3e5a127a3f36731ebe775017be0000803f00000000000000000000803f7cd92040ac580d40d960873e121a0e408b5a9d3ee427de3e67f7f6bd2c92643f0000803f00000000000000000000803f3a467140a18e0e40919b493e2d741f40b5094e3e566b64bf06e74f3e887ccebe0000803f00000000000000000000803f00000000921921401be5573e5dd61e40d51c9c3ee81241bfcc7c1c3ea57c233f0000803f00000000000000000000803f7cd9a0400ea51f401dea943e0bcb1e4025381e3e66ed9a3e4250453dd9af73bf0000803f00000000000000000000803f7cd9a03f08001f40c9cab93eb4c41d4067da6a3e45ca743f54ff0fbeb36b83be0000803f00000000000000000000803f7cd920404d3f1c402079a03eb4cb1d405b04a53ea0ddcb3e7f0344be53a9653f0000803f00000000000000000000803f3a4671404ba51c40cb16723ed56f2f403537473e27d416bfa4344a3ec99348bf0000803f00000000000000000000803f00000000729a30400de5923eb55e3240177b8e3ea64a51bf920f633ee00d083f0000803f00000000000000000000803f7cd9a0401ca72e40b74aa63ee5e83140fc0a5e3ed89eff3e187eaf3d7cb95cbf0000803f00000000000000000000803f7cd9a03f3b002f405007be3eb0992c40f90ab73e257cc1bd69f28cbc20d17e3f0000803f00000000000000000000803f3a4671404ad82b407828da3e6f7c2c40813e8b3e70fa773fad7572be169899bd0000803f00000000000000000000803f7cd920405e0f2c400de5923eb55e3240177b8e3eccb2c1bd8549883ec092753f0000803f00000000000000000000803f7cd9a0401ca72e40ef28863ef9233f40570d6a3e071c6abffccc9c3db36acb3e0000803f00000000000000000000803f000000009bfa3f40cb16723ed56f2f403537473eb1f660bfb775623dbbb5f2be0000803f00000000000000000000803f00000000729a3040a7a6863e78183f40959e533e99cf693f65712a3ecb4abe3e0000803f00000000000000000000803f920a8640560d3f40b74aa63ee5e83140fc0a5e3ebd50513f5bd1473ee8a90abf0000803f00000000000000000000803f7cd9a03f3b002f40cba9883ed59f3f40b5454f3e5ecd87be3034963d9d1d76bf0000803f00000000000000000000803f920a064070e33e405d88933e15104f401fe44a3ed6527fbf8296853d49fe023d0000803f00000000000000000000803f000000003a5a4f40de9e933e87114f4024e64a3e5e0beb3e746d3bbe108d5ebf0000803f00000000000000000000803f920a064024c24f407a9a933e40384f4077e44a3e1c53673f878c18be21a0cd3e0000803f00000000000000000000803f920a8640474b4e402a4b933e641257406237363e990d38bf1cc9e7bd218f2fbf0000803f00000000000000000000803f000000005b8d5f406a62993e181e57400fb0603e082585bec21610bec18d743f0000803f00000000000000000000803f920a8640aee75d40b0b3a83e9ee05640d60a413ea9d3683ffa35a9be252581be0000803f00000000000000000000803f920a064085455f40b74aa63ee5e83140fc0a5e3e2b5725be9ec2c53ea27c68bf0000803f00000000000000000000803f7cd9a03f3b002f40d8b7e33e2f0f3d407086893eb9ab553c6b0e833ee57277bf0000803f00000000000000000000803f00000000289c3d407828da3e6f7c2c40813e8b3e6adb573f63cf45bef96f00bf0000803f00000000000000000000803f7cd920405e0f2c40c51ccc3ee1f33c407d11ac3e2abd61bf00fbe73ef51d063e0000803f00000000000000000000803fe4cb9640d8123f400de5923eb55e3240177b8e3e819c43bfc7f9963e54e1123f0000803f00000000000000000000803f7cd9a0401ca72e4029a7fc3ef59e3b40c154a23e18a8743fb05e95be850b21bd0000803f00000000000000000000803fdb0fc93f509139405007be3eb0992c40f90ab73e129f8f3e1cd04fbeb42a703f0000803f00000000000000000000803f3a4671404ad82b40180ce53ea9833b40cddfc43ec069e2bb9c7007bea4be7d3f0000803f00000000000000000000803fdb0f494000083b409d37093fd0934b40b05ca93eac9e5b3e0fd2073e06ba77bf0000803f00000000000000000000803f0000000034c44c40d39dfc3e29b84b4050d8c03e22986abfd9acc33ef6e0f3bd0000803f00000000000000000000803fe4cb964022e34d4067cf133ff0ff4940a991bd3e5b246a3f9866c5be7062f93d0000803f00000000000000000000803fdb0fc93fbc694840b3e6083f48244a40490dd53e04665abe24d5debdcb8d783f0000803f00000000000000000000803fdb0f4940aa884940606f1c3f4cd951402ff8b93ee0dc2a3fbcbf96bdb3b33dbf0000803f00000000000000000000803f000000005b6f5b40b34e0c3fa6375340ae8bbc3e508b28bf269cd73e7db51fbf0000803f00000000000000000000803fe4cb9640308d5c405bad1c3f6a0a51403582db3eeb812a3fbd24c2be7470243f0000803f00000000000000000000803fdb0fc93f12aa5540ae8c0c3fc4685240b415de3e08b425bf0366e73d38fb403f0000803f00000000000000000000803fdb0f4940e7c756401a3351bfbc881840ceba493f0eadd1bd7353a1bec18a71bf5878733f15389ebe000000000000803f4f74513f00000000c1cd24bfb4bfec3ffb8a723f2a0dbdbd1f4010bf432a52bf9f87753f83e7fabdf2a6823e0000803f37175d3f753da13d48b7a2bf256c0340ff8a723fcc5783be319702bf422a52bf5312593f22e5edbea6a682be0000803f67d1453f753da13daa848cbf5a86c23f09aba53fbb9686be9b1b4fbf6b9606bf5878733f10389ebe000000000000803f4f74513f753d213e12ab05bfe0d5bc3f9465b03f06bde33d54396abf9aa4c6bee47f753f77c55a3e14c63e3e0000803f1fba683f753d213e3c79cbbfac3be93f9665b03f5b3e39bf2b9606bf51f9e4beec78163fdd1b4fbf000000000000803f7f2e3a3f753d213e1a3351bf9c6da83f4481ed3f00000000000080bfe732283250b87f3f0000000004873f3d0000803f37175d3f0edc713e204742be2d86c23f4481ed3f5327c63e486769bfcf000d3eb1e14e3f074f163f3f873fbd0000803f105d743f0edc713e36eab8bf2d86c23f4481ed3f317916bfac1b4fbf763fd234b1e14e3f074f16bfb2863fbd0000803f67d1453f0edc713edf5c09bf5a86c23fc0ab1a40bd96863e9b1b4fbf6c96063f5878733f11389e3e000000000000803f28ba683f533da13ec03b37bdac3be93f794e1540ea43033f599b31bf1577013fc6ba2b3f5b2d303f95838dbe0000803f0000803f533da13e49efb9be256c034084de3040cc57833e2e9702bf442a523f5312593f22e5ed3ea2a682be0000803f105d743fb08cc93e73987dbfb4bfec3f85de30401d0dbd3d1d4010bf442a523f9f87753f85e7fa3df4a6823e0000803f37175d3fb08cc93e1a3351bfbc88184090123b400cadd13d7053a1bec38a713f5878733f15389e3e000000000000803f1fba683f0edcf13e915d8ebfe0d5bc3f7a4e154034838dbe2ec459bf95f9e43e8378733ffe369ebe000000000000803f4f74513f533da13e52a2c6bfa5bfec3fb9ab1a40342d30bf0a0000bf6296063f4b79163f981b4fbf000000000000803f802e3a3f533da13e73987dbfb4bfec3f85de3040e5cfcfbe8c9fcdbe3b2a523f9334343fa3b029bf48a682be0000803f67d1453fb08cc93e6d8deabf206c03404481ed3f697873bfa9379ebee9e373b4470b9e3e3e3473bfab873f3d0000803f988b2e3f0edc713e826fb0bfbc88184079de30406ce301bfa71986be392a523f0b67d33e13d25fbf4ba7823e0000803f988b2e3fb08cc93e1a3351bfbc88184090123b40c03b89beff6847beb88a713f8979163f6a1b4fbf000000000000803f7f2e3a3f0edcf13e75d0e2bfbc881840674e154021f964bf68ec2ab161f9e43e00000000000080bf000000000000803fb0e8223f533da13e19d5dcbfbc88184018aba53f33c459bfcf8f8631679606bf00000000000080bf000000000000803fb0e8223f753d213e48b7a2bf256c0340ff8a723f2f7e10bf0cd0b0bd3d2a52bfc92e383e523473bfaaa6823e0000803f988b2e3f753da13d6d8deabf58a52d404481ed3f687873bfa7379e3e277584b4460b9ebe3e3473bfab873fbd0000803fc845173f0edc713e48b7a2bf53a52d40ff8a723f2f7e10bf0cd0b03d3d2a52bfc92e38be523473bfaaa682be0000803fc845173f753da13d1a3351bfbc881840ceba493fbea0a9be00000000c88a71bf00000000000080bf000000000000803fb0e8223f000000003c79cbbfa2733c409665b03f5d3e39bf2a96063f53f9e4beec7816bfdc1b4fbf000000000000803fe0a20b3f753d213e52a2c6bfa6b13a40b9ab1a40342d30bf0b00003f6296063f4a7916bf991b4fbf000000000000803fe0a20b3f533da13e826fb0bfbc88184079de30406de301bfa719863e3a2a523f0e67d3be13d25fbf4ca782be0000803fc845173fb08cc93e36eab8bf62ce4f404481ed3f307916bfab1b4f3f1c39bd34b1e14ebf074f16bfb2863f3d0000803ff0ffff3e0edc713e73987dbf9eb13a4085de3040e1cfcfbe899fcd3e3a2a523f933434bfa4b029bf48a6823e0000803ff0ffff3eb08cc93e1a3351bfbc88184090123b40c03b89beff68473eb88a713f897916bf6a1b4fbf000000000000803fe0a20b3f0edcf13e915d8ebf88a652407a4e154031838dbe2fc4593f96f9e43e857873bffd369ebe000000000000803f1fbae83e533da13eaa848cbf4bce4f4009aba53fbb9686be9b1b4f3f6b9606bf587873bf11389ebe000000000000803f20bae83e753d213e48b7a2bf53a52d40ff8a723fcb5783be3097023f412a52bf531259bf22e5edbea6a6823e0000803ff0ffff3e753da13d1a3351bfaada5c404481ed3f1f8f06b20000803f1f8f86b150b87fbf0000000004873fbd0000803f4f74d13e0edc713ec1cd24bf9eb13a40fb8a723f2a0dbdbd1f40103f432a52bf9f8775bf83e7fabdf2a682be0000803f4f74d13e753da13d1a3351bfbc881840ceba493f0eadd1bd7353a13ec18a71bf587873bf15389ebe000000000000803f1fbae83e0000000012ab05bf88a652409465b03f2f838d3e2fc4593f96f9e4be837873bfff369e3e000000000000803f7f2eba3e753d213edf5c09bf4bce4f40c0ab1a40bb96863e9a1b4f3f6d96063f587873bf11389e3e000000000000803f802eba3e533da13e73987dbf9eb13a4085de30401d0dbd3d1d40103f442a523f9f8775bf85e7fa3df4a682be0000803f4f74d13eb08cc93e204742be62ce4f404481ed3f3179163fab1b4f3fe01ebbb4b1e14ebf074f163fb1863f3d0000803fb0e8a23e0edc713e49efb9be53a52d4084de3040cc57833e2e97023f442a523f531259bf22e5ed3ea2a6823e0000803fb0e8a23eb08cc93e1a3351bfbc88184090123b400badd13d7053a13ec28a713f587873bf15389e3e000000000000803f7f2eba3e0edcf13ec03b37bda2733c40794e15405b3e393f2a96063f53f9e43eec7816bfdd1b4f3f000000000000803fe0a28b3e533da13e780ca9bda6b13a4016aba53f342d303f0a00003f619606bf4a7916bf991b4f3f000000000000803fdfa28b3e753d213ec1cd24bf9eb13a40fb8a723fe5cfcf3e8a9fcd3e3a2a52bf943434bfa3b0293f4aa6823e0000803fb0e8a23e753da13d98d24a3e58a52d404481ed3f6978733fa8379e3e53619734460b9ebe3e34733fac873fbd0000803f20ba683e0edc713e620e83bebc8818402c8b723f6de3013fa419863e382a52bf0c67d3be13d25f3f4da782be0000803f20ba683e753da13d1a3351bfbc881840ceba493fc63b893e0069473eb68a71bf897916bf6a1b4f3f000000000000803fe0a28b3e00000000d8ea0c3ebc881840ba65b03f21f9643f68ecaab161f9e4be000000000000803f000000000000803f7f2e3a3e753d213ef01fba3dbc881840b8ab1a4032c4593f000000006996063f000000000000803f000000000000803f802e3a3e533da13e49efb9be53a52d4084de30402d7e103f0bd0b03d3d2a523fcc2e38be5234733faba682be0000803f20ba683eb08cc93e98d24a3e206c03404481ed3f6a78733fa9379ebe5df88e34460b9e3e3e34733fac873f3d0000803fdfa20b3e0edc713e49efb9be256c034084de30402d7e103f0bd0b0bd3d2a523fcc2e383e5234733faba6823e0000803fdfa20b3eb08cc93e1a3351bfbc88184090123b40bba0a93e00000000c88a713f000000000000803f000000000000803f7f2e3a3e0edcf13ec03b37bdac3be93f794e15409ff6553f44e8c6be58a4c63e74c2ff3e3a95583f74c53e3e0000803f7f2eba3d533da13e204742be2d86c23f4481ed3f265d3f3f525a26bfd0000dbeb1e14e3f084f163f25863fbd0000803f7f2e3a3d0edc713e780ca9bda5bfec3f16aba53f342d303f0b0000bf619606bf4a79163f991b4f3f000000000000803f7f2eba3d753d213e12ab05bfe0d5bc3f9465b03f035a003f42b933bf1f7701bf3d9f5c3f06c4d93e2b838dbe0000803f00000000753d213e620e83bebc8818402c8b723f6ee3013fa51986be382a52bf0d67d33e13d25f3f4da7823e0000803fdfa20b3e753da13dc1cd24bfb4bfec3ffb8a723fe7cfcf3e8a9fcdbe3a2a52bf9434343fa3b0293f4aa682be0000803f7f2e3a3d753da13d1a3351bfbc881840ceba493fc63b893e006947beb68a71bf8979163f6a1b4f3f000000000000803f7f2eba3d00000000e066c7bed8a32a40ec23553f0eadd1bd7353a1bec18a71bf5878733f15389ebe000000000000803f4f74513f000000005d385dbef67a084019f47d3f2e0dbdbd1e4010bf432a52bf9f87753f83e7fabdf2a6823e0000803f37175d3f753da13de6ee57bf418715401df47d3fce5783be319702bf422a52bf5312593f22e5edbea6a682be0000803f67d1453f753da13dab892bbf92bce63f985fab3fbd9686be9b1b4fbf6a9606bf5878733f10389ebe000000000000803f4f74513f753d213e445bc1bd180ce13f221ab63f02bde33d55396abf9ba4c6bee47f753f77c55a3e14c63e3e0000803f1fba683f753d213e67b994bff2b80640261ab63f5b3e39bf299606bf51f9e4beec78163fdd1b4fbf000000000000803f7f2e3a3f753d213ee066c7bed4a3cc3fd335f33f1e8f8631000080bfe632283250b87f3f0000000004873f3d0000803f37175d3f0edc713e88b7733e65bce63fd335f33f5127c63e476769bfcf000d3eb1e14e3f074f163f3f873fbd0000803f105d743f0edc713e612a82bf65bce63fd335f33f317916bfab1b4fbf7881ae34b1e14e3f074f16bfb2863fbd0000803f67d1453f0edc713ea8e9debd92bce63f07861d40bc96863e991b4fbf6a96063f5878733f11389e3e000000000000803f28ba683f533da13edc17c43ef2b80640c0281840eb43033f5a9b31bf1577013fc6ba2b3f5b2d303f95838dbe0000803f0000803f533da13e2c40843d41871540ccb83340c857833e329702bf422a523f5312593f22e5ed3ea2a682be0000803f105d743fb08cc93ec91810bff67a0840ccb83340110dbd3d1e4010bf432a523f9f87753f85e7fa3df4a6823e0000803f37175d3fb08cc93ee066c7bed8a32a40d8ec3d40eaacd13d7b53a1bec28a713f5878733f15389e3e000000000000803f1fba683f0edcf13e783b2fbf180ce13fc22818402f838dbe31c459bf95f9e43e8378733ffe369ebe000000000000803f4f74513f533da13e7ee28fbfee7a084001861d40332d30bf080000bf6296063f4b79163f981b4fbf000000000000803f802e3a3f533da13ec91810bff67a0840ccb83340decfcfbe869fcdbe3c2a523f9334343fa3b029bf48a682be0000803f67d1453fb08cc93e98cdb3bf3c871540d335f33f697873bfa8379ebe49ca9fb4470b9e3e3e3473bfab873f3d0000803f988b2e3f0edc713e595f73bfd8a32a40c0b833406ae301bfa11986be3a2a523f0b67d33e13d25fbf4ba7823e0000803f988b2e3fb08cc93ee066c7bed8a32a40d8ec3d40cd3b89be106947beb58a713f8979163f6a1b4fbf000000000000803f7f2e3a3f0edcf13ea010acbfd8a32a40af28184022f964bf68ec2a3162f9e43e00000000000080bf000000000000803fb0e8223f533da13e4415a6bfd8a32a40a85fab3f33c459bfcf8f8631679606bf00000000000080bf000000000000803fb0e8223f753d213ee6ee57bf418715401df47d3f307e10bf0dd0b0bd3b2a52bfc92e383e523473bfaaa6823e0000803f988b2e3f753da13d98cdb3bf74c03f40d335f33f6a7873bfa7379e3ec3fea3b4460b9ebe3e3473bfab873fbd0000803fc845173f0edc713ee6ee57bf6fc03f401df47d3f317e10bf0dd0b03d3b2a52bfc92e38be523473bfaaa682be0000803fc845173f753da13de066c7bed8a32a40ec23553fbea0a9be00000000c88a71bf00000000000080bf000000000000803fb0e8223f0000000067b994bfbe8e4e40261ab63f5b3e39bf2996063f53f9e4beec7816bfdc1b4fbf000000000000803fe0a20b3f753d213e7ee28fbfc2cc4c4001861d40342d30bf0a00003f6296063f4a7916bf991b4fbf000000000000803fe0a20b3f533da13e595f73bfd8a32a40c0b833406ae301bfa219863e3c2a523f0e67d3be13d25fbf4ca782be0000803fc845173fb08cc93e612a82bf7ee96140d335f33f317916bfab1b4f3fb49bb034b1e14ebf074f16bfb2863f3d0000803ff0ffff3e0edc713ec91810bfbacc4c40ccb83340dfcfcfbe899fcd3e3d2a523f933434bfa4b029bf48a6823e0000803ff0ffff3eb08cc93ee066c7bed8a32a40d8ec3d40cd3b89be1069473eb58a713f897916bf6a1b4fbf000000000000803fe0a20b3f0edcf13e783b2fbfa4c16440c22818402d838dbe30c4593f96f9e43e857873bffd369ebe000000000000803f1fbae83e533da13eab892bbf67e96140985fab3fbd9686be991b4f3f6b9606bf587873bf11389ebe000000000000803f20bae83e753d213ee6ee57bf6fc03f401df47d3fcd5783be3097023f412a52bf531259bf22e5edbea6a6823e0000803ff0ffff3e753da13de066c7bec6f56e40d335f33f1e8f06320000803f0000000050b87fbf0000000004873fbd0000803f4f74d13e0edc713e5d385dbebacc4c4019f47d3f2e0dbdbd1e40103f432a52bf9f8775bf83e7fabdf2a682be0000803f4f74d13e753da13de066c7bed8a32a40ec23553f0eadd1bd7353a13ec18a71bf587873bf15389ebe000000000000803f1fbae83e00000000445bc1bda4c16440221ab63f2e838d3e30c4593f95f9e4be837873bfff369e3e000000000000803f7f2eba3e753d213ea8e9debd67e9614007861d40bc96863e9a1b4f3f6c96063f587873bf11389e3e000000000000803f802eba3e533da13ec91810bfbacc4c40ccb83340110dbd3d1e40103f432a523f9f8775bf85e7fa3df4a682be0000803f4f74d13eb08cc93e88b7733e7ee96140d335f33f3079163fac1b4f3f5853bfb4b1e14ebf074f163fb1863f3d0000803fb0e8a23e0edc713e2c40843d6fc03f40ccb83340c857833e3397023f422a523f531259bf22e5ed3ea2a6823e0000803fb0e8a23eb08cc93ee066c7bed8a32a40d8ec3d40eaacd13d7b53a13ec28a713f587873bf15389e3e000000000000803f7f2eba3e0edcf13edc17c43ebe8e4e40c02818405d3e393f2996063f52f9e43eec7816bfdd1b4f3f000000000000803fe0a28b3e533da13e36bcb03ec2cc4c40a45fab3f342d303f0a00003f619606bf4a7916bf991b4f3f000000000000803fdfa28b3e753d213e5d385dbebacc4c4019f47d3fe3cfcf3e8a9fcd3e3c2a52bf943434bfa3b0293f4aa6823e0000803fb0e8a23e753da13d5034203f74c03f40d335f33f6a78733fa8379e3e52619734460b9ebe3e34733fac873fbd0000803f20ba683e0edc713ee4e12f3ed8a32a404af47d3f6ce3013fa319863e3a2a52bf0c67d3be13d25f3f4da782be0000803f20ba683e753da13de066c7bed8a32a40ec23553fc63b893e0169473eb68a71bf897916bf6a1b4f3f000000000000803fe0a28b3e0000000060ba103fd8a32a40481ab63f22f9643f68ecaab162f9e4be000000000000803f000000000000803f7f2e3a3e753d213ea8c3043fd8a32a40ff851d4032c4593f000000006796063f000000000000803f000000000000803f802e3a3e533da13e2c40843d6fc03f40ccb83340317e103f0fd0b03d3b2a523fcc2e38be5234733faba682be0000803f20ba683eb08cc93e5034203f3c871540d335f33f6878733fa7379ebe52619734460b9e3e3e34733fac873f3d0000803fdfa20b3e0edc713e2c40843d41871540ccb83340317e103f0fd0b0bd3b2a523fcc2e383e5234733faba6823e0000803fdfa20b3eb08cc93ee066c7bed8a32a40d8ec3d40bba0a93e00000000c88a713f000000000000803f000000000000803f7f2e3a3e0edcf13edc17c43ef2b80640c02818409ff6553f44e8c6be58a4c63e74c2ff3e3a95583f74c53e3e0000803f7f2eba3d533da13e88b7733e65bce63fd335f33f255d3f3f535a26bfcb000dbeb1e14e3f084f163f25863fbd0000803f7f2e3a3d0edc713e36bcb03eee7a0840a45fab3f342d303f0a0000bf619606bf4a79163f991b4f3f000000000000803f7f2eba3d753d213e445bc1bd180ce13f221ab63f015a003f44b933bf1f7701bf3d9f5c3f06c4d93e2b838dbe0000803f00000000753d213ee4e12f3ed8a32a404af47d3f6ce3013fa31986be3a2a52bf0d67d33e13d25f3f4da7823e0000803fdfa20b3e753da13d5d385dbef67a084019f47d3fe3cfcf3e8a9fcdbe3c2a52bf9434343fa3b0293f4aa682be0000803f7f2e3a3d753da13de066c7bed8a32a40ec23553fc63b893e016947beb68a71bf8979163f6a1b4f3f000000000000803f7f2eba3d00000000a0a9a53edae85e40031c1dbf1dadd1bd7253a1bec18a71bf5878733f15389ebe000000000000803f4f74513f00000000a541e83e304a4540c2fffcbe420dbdbd1f4010bf422a52bf9f87753f83e7fabdf2a6823e0000803f37175d3f753da13d00f98abc69134f40bcfffcbece5783be2f9702bf422a52bf5312593f22e5edbea6a682be0000803f67d1453f753da13d1ea1e73daf743540429e6fbebb9686be9b1b4fbf699606bf5878733f10389ebe000000000000803f4f74513f753d213ed67a0b3f81523340023f2fbef1bce33d56396abf96a4c6bee47f753f77c55a3e14c63e3e0000803f1fba683f753d213e6cf582beadf84340f03e2fbe5c3e39bf2a9606bf53f9e4beec78163fdd1b4fbf000000000000803f7f2e3a3f753d213ea0a9a53e68ab2b4020673f3e56376fb1000080bf5637ef3150b87f3f0000000004873f3d0000803f37175d3f0edc713ecd4d4b3f9e74354020673f3e4d27c63e4a6769bfd2000d3eb1e14e3f074f163f3f873fbd0000803f105d743f0edc713eb49016be9e74354020673f3e2f7916bfac1b4fbf487aeb34b1e14e3f074f16bfb2863fbd0000803f67d1453f0edc713e7cb5083faf743540209b1b3fbc96863e9b1b4fbf6a96063f5878733f11389e3e000000000000803f28ba683f533da13e5624673fadf843404c830b3fe643033f5d9b31bf1677013fc6ba2b3f5b2d303f95838dbe0000803f0000803f533da13e68012a3f69134f406e335e3fcd57833e309702bf412a523f5312593f22e5ed3ea2a682be0000803f105d743fb08cc93e3623463e304a454071335e3f420dbd3d1f4010bf412a523f9f87753f85e7fa3df4a6823e0000803f37175d3fb08cc93ea0a9a53edae85e4093cf7c3f1fadd13d7353a1bec18a713f5878733f15389e3e000000000000803f1fba683f0edcf13e5276d13d8152334050830b3f31838dbe31c459bf8ff9e43e8378733ffe369ebe000000000000803f4f74513f533da13e60e168be2b4a45400d9b1b3f342d30bf0a0000bf6196063f4b79163f981b4fbf000000000000803f802e3a3f533da13e3623463e304a454071335e3fe8cfcfbe8a9fcdbe3a2a523f9334343fa3b029bf48a682be0000803f67d1453fb08cc93efe31e0be65134f4020673f3e6a7873bfa8379ebe05c691b4470b9e3e3e3473bfab873f3d0000803f988b2e3f0edc713ef460c7bddae85e404d335e3f6be301bfa61986be392a523f0b67d33e13d25fbf4ba7823e0000803f988b2e3fb08cc93ea0a9a53edae85e4093cf7c3fc63b89be026947beb88a713f8979163f6a1b4fbf000000000000803f7f2e3a3f0edcf13e18fbc8bedae85e4018830b3f22f964bf0000000061f9e43e00000000000080bf000000000000803fb0e8223f533da13e0209b7bedae85e40e49d6fbe32c459bf00000000679606bf00000000000080bf000000000000803fb0e8223f753d213e00f98abc69134f40bcfffcbe307e10bf0bd0b0bd3b2a52bfc92e383e523473bfaaa6823e0000803f988b2e3f753da13dfe31e0be4fbe6e4020673f3e687873bfa7379e3e94e78fb4460b9ebe3e3473bfab873fbd0000803fc845173f0edc713e00f98abc4bbe6e40bcfffcbe307e10bf0bd0b03d3b2a52bfc92e38be523473bfaaa682be0000803fc845173f753da13da0a9a53edae85e40031c1dbfc0a0a9be00000000c78a71bf00000000000080bf000000000000803fb0e8223f000000006cf582be07d97940f03e2fbe5b3e39bf2c96063f55f9e4beec7816bfdc1b4fbf000000000000803fe0a20b3f753d213e60e168be898778400d9b1b3f352d30bf0a00003f6296063f4a7916bf991b4fbf000000000000803fe0a20b3f533da13ef460c7bddae85e404d335e3f6ce301bfa519863e392a523f0e67d3be13d25fbf4ca782be0000803fc845173fb08cc93eb49016be8b2e844020673f3e307916bfac1b4f3ff19f3e34b1e14ebf074f16bfb2863f3d0000803ff0ffff3e0edc713e3623463e8487784071335e3fe9cfcfbe879fcd3e3a2a523f933434bfa4b029bf48a6823e0000803ff0ffff3eb08cc93ea0a9a53edae85e4093cf7c3fc53b89be0269473eb88a713f897916bf6a1b4fbf000000000000803fe0a20b3f0edcf13e5276d13d9a3f854050830b3f2a838dbe31c4593f91f9e43e857873bffd369ebe000000000000803f1fbae83e533da13e1ea1e73d822e8440429e6fbec09686be9b1b4f3f6a9606bf587873bf11389ebe000000000000803f20bae83e753d213e00f98abc4bbe6e40bcfffcbecc5783be3297023f412a52bf531259bf22e5edbea6a6823e0000803ff0ffff3e753da13da0a9a53e2613894020673f3e000000000000803f5637ef3150b87fbf0000000004873fbd0000803f4f74d13e0edc713ea541e83e84877840c2fffcbe650dbdbd2040103f422a52bf9f8775bf83e7fabdf2a682be0000803f4f74d13e753da13da0a9a53edae85e40031c1dbf1dadd1bd7253a13ec18a71bf587873bf15389ebe000000000000803f1fbae83e00000000d67a0b3f9a3f8540023f2fbe2b838d3e31c4593f92f9e4be837873bfff369e3e000000000000803f7f2eba3e753d213e7cb5083f822e8440209b1b3fc196863e9b1b4f3f6a96063f587873bf11389e3e000000000000803f802eba3e533da13e3623463e8487784071335e3f650dbd3d2040103f422a523f9f8775bf85e7fa3df4a682be0000803f4f74d13eb08cc93ecd4d4b3f8b2e844020673f3e3079163fac1b4f3f382637b4b1e14ebf074f163fb1863f3d0000803fb0e8a23e0edc713e68012a3f4bbe6e406e335e3fcb57833e3397023f402a523f531259bf22e5ed3ea2a6823e0000803fb0e8a23eb08cc93ea0a9a53edae85e4093cf7c3f1fadd13d7353a13ec18a713f587873bf15389e3e000000000000803f7f2eba3e0edcf13e5624673f07d979404c830b3f5b3e393f2c96063f56f9e43eec7816bfdd1b4f3f000000000000803fe0a28b3e533da13ef8e15f3f89877840f49d6fbe352d303f0800003f629606bf4a7916bf991b4f3f000000000000803fdfa28b3e753d213ea541e83e84877840c2fffcbee9cfcf3e859fcd3e3a2a52bf943434bfa3b0293f4aa6823e0000803fb0e8a23e753da13d50e18a3f4fbe6e4020673f3e6878733fa8379e3e6076a434460b9ebe3e34733fac873fbd0000803f20ba683e0edc713ebe953e3fdae85e407afffcbe6ce3013fa419863e382a52bf0c67d3be13d25f3f4da782be0000803f20ba683e753da13da0a9a53edae85e40031c1dbfc63b893e0069473eb88a71bf897916bf6a1b4f3f000000000000803fe0a28b3e000000009613853fdae85e401e3e2fbe20f9643f96ee17b263f9e4be000000000000803f000000000000803f7f2e3a3e753d213e1097803fdae85e40099b1b3f32c4593f000000006996063f000000000000803f000000000000803f802e3a3e533da13e68012a3f4bbe6e406e335e3f317e103f07d0b03d3c2a523fcc2e38be5234733faba682be0000803f20ba683eb08cc93e50e18a3f65134f4020673f3e6878733fa7379ebe5f76a434460b9e3e3e34733fac873f3d0000803fdfa20b3e0edc713e68012a3f69134f406e335e3f307e103f05d0b0bd3b2a523fcc2e383e5234733faba6823e0000803fdfa20b3eb08cc93ea0a9a53edae85e4093cf7c3fc0a0a93e00000000c78a713f000000000000803f000000000000803f7f2e3a3e0edcf13e5624673fadf843404c830b3fa0f6553f41e8c6be59a4c63e74c2ff3e3a95583f74c53e3e0000803f7f2eba3d533da13ecd4d4b3f9e74354020673f3e255d3f3f525a26bfd5000dbeb1e14e3f084f163f25863fbd0000803f7f2e3a3d0edc713ef8e15f3f2b4a4540f49d6fbe342d303f0a0000bf629606bf4a79163f991b4f3f000000000000803f7f2eba3d753d213ed67a0b3f81523340023f2fbe055a003f42b933bf1f7701bf3d9f5c3f06c4d93e2b838dbe0000803f00000000753d213ebe953e3fdae85e407afffcbe6ce3013fa41986be382a52bf0d67d33e13d25f3f4da7823e0000803fdfa20b3e753da13da541e83e304a4540c2fffcbee8cfcf3e889fcdbe3a2a52bf9434343fa3b0293f4aa682be0000803f7f2e3a3d753da13da0a9a53edae85e40031c1dbfc63b893e006947beb88a71bf8979163f6a1b4f3f000000000000803f7f2eba3d00000000a8c4213fa11b5940d52a23bf0eadd1bd7353a1bec18a71bf5878733f15389ebe000000000000803f4f74513f00000000012a4e3fbff2364050b5f4be2c0dbdbd1f4010bf432a52bf9f87753f83e7fabdf2a6823e0000803f37175d3f753da13dca24363e0aff434048b5f4bece5783be319702bf422a52bf5312593f22e5edbea6a682be0000803f67d1453f753da13ddadcb33e12d62140443e06bebe9686be9b1b4fbf6a9606bf5878733f10389ebe000000000000803f4f74513f753d213eb04c6d3fd5fd1e40c0a741bd0bbde33d54396abf9aa4c6bee47f753f77c55a3e14c63e3e0000803f1fba683f753d213ed8ea0fbebb30354060a741bd5b3e39bf2a9606bf4ff9e4beec78163fdd1b4fbf000000000000803f7f2e3a3f753d213ea8c4213fb3c91440ca39dc3e00000000000080bfaed6c9b150b87f3f0000000004873f3d0000803f37175d3f0edc713efd32a13ffcd52140ca39dc3e5527c63e476769bfcb000d3eb1e14e3f074f163f3f873fbd0000803f105d743f0edc713e00ab913bfcd52140ca39dc3e317916bfab1b4fbf8194ed34b1e14e3f074f16bfb2863fbd0000803f67d1453f0edc713ee39a693f12d621405bc97d3fbe96863e9b1b4fbf6b96063f5878733f11389e3e000000000000803f28ba683f533da13e03c2b33fbb3035404054683fea43033f5a9b31bf1377013fc6ba2b3f5b2d303f95838dbe0000803f0000803f533da13e0f008b3f0aff4340374aab3fc957833e319702bf412a523f5312593f22e5ed3ea2a682be0000803f105d743fb08cc93e9ebeea3ebff23640384aab3f1e0dbd3d1e4010bf432a523f9f87753f85e7fa3df4a6823e0000803f37175d3fb08cc93ea8c4213fa11b594050b2bf3f02add13d7c53a1bec08a713f5878733f15389e3e000000000000803f1fba683f0edcf13e4179ac3ed5fd1e404654683f35838dbe30c459bf92f9e43e8378733ffe369ebe000000000000803f4f74513f533da13e1867d2bdb8f2364042c97d3f332d30bf0a0000bf6296063f4b79163f981b4fbf000000000000803f802e3a3f533da13e9ebeea3ebff23640384aab3fe6cfcfbe889fcdbe3a2a523f9334343fa3b029bf48a682be0000803f67d1453fb08cc93e3046c4be05ff4340ca39dc3e6a7873bfaa379ebeebe373b4470b9e3e3e3473bfab873f3d0000803f988b2e3f0edc713ef8c5903da11b5940204aab3f6ce301bfa71986be392a523f0b67d33e13d25fbf4ba7823e0000803f988b2e3fb08cc93ea8c4213fa11b594050b2bf3fcd3b89be106947beb58a713f8979163f6a1b4fbf000000000000803f7f2e3a3f0edcf13e5052a5bea11b5940fa53683f21f964bf503100b262f9e43e00000000000080bf000000000000803fb0e8223f533da13ee0648dbea11b5940c83d06be31c459bfce8f0632679606bf00000000000080bf000000000000803fb0e8223f753d213eca24363e0aff434048b5f4be2f7e10bf0cd0b0bd3b2a52bfc92e383e523473bfaaa6823e0000803f988b2e3f753da13d3046c4be3d386e40ca39dc3e697873bfa9379e3eae4080b4460b9ebe3e3473bfab873fbd0000803fc845173f0edc713eca24363e38386e4048b5f4be2f7e10bf0dd0b03d3b2a52bfc92e38be523473bfaaa682be0000803fc845173f753da13da8c4213fa11b5940d52a23bfbfa0a9be00000000c88a71bf00000000000080bf000000000000803fb0e8223f00000000d8ea0fbe87067d4060a741bd5b3e39bf2a96063f4ff9e4beec7816bfdc1b4fbf000000000000803fe0a20b3f753d213e1867d2bd8a447b4042c97d3f332d30bf0c00003f6296063f4a7916bf991b4fbf000000000000803fe0a20b3f533da13ef8c5903da11b5940204aab3f6ce301bfa719863e392a523f0e67d3be13d25fbf4ca782be0000803fc845173fb08cc93e00ab913ba3308840ca39dc3e327916bfab1b4f3ff3f70e35b1e14ebf074f16bfb2863f3d0000803ff0ffff3e0edc713e9ebeea3e83447b40384aab3fe5cfcfbe8c9fcd3e3a2a523f933434bfa4b029bf48a6823e0000803ff0ffff3eb08cc93ea8c4213fa11b594050b2bf3fcd3b89be1069473eb58a713f897916bf6a1b4fbf000000000000803fe0a20b3f0edcf13e4179ac3eb69c89404654683f38838dbe2ec4593f96f9e43e857873bffd369ebe000000000000803f1fbae83e533da13edadcb33e98308840443e06bebc9686be9b1b4f3f6b9606bf587873bf11389ebe000000000000803f20bae83e753d213eca24363e38386e4048b5f4becc5783be3097023f412a52bf531259bf22e5edbea6a6823e0000803ff0ffff3e753da13da8c4213fc8b68e40ca39dc3e000000000000803f1e8f06b250b87fbf0000000004873fbd0000803f4f74d13e0edc713e012a4e3f83447b4050b5f4be210dbdbd2040103f422a52bf9f8775bf83e7fabdf2a682be0000803f4f74d13e753da13da8c4213fa11b5940d52a23bf0eadd1bd7353a13ec18a71bf587873bf15389ebe000000000000803f1fbae83e00000000b04c6d3fb69c8940c0a741bd36838d3e2ec4593f96f9e4be837873bfff369e3e000000000000803f7f2eba3e753d213ee39a693f983088405bc97d3fbb96863e9b1b4f3f6d96063f587873bf11389e3e000000000000803f802eba3e533da13e9ebeea3e83447b40384aab3f130dbd3d1f40103f422a523f9f8775bf85e7fa3df4a682be0000803f4f74d13eb08cc93efd32a13fa3308840ca39dc3e3279163fab1b4f3f99d00bb5b1e14ebf074f163fb1863f3d0000803fb0e8a23e0edc713e0f008b3f38386e40374aab3fca57833e3297023f422a523f531259bf22e5ed3ea2a6823e0000803fb0e8a23eb08cc93ea8c4213fa11b594050b2bf3f02add13d7c53a13ec08a713f587873bf15389e3e000000000000803f7f2eba3e0edcf13e03c2b33f87067d404054683f5b3e393f2a96063f4ff9e43eec7816bfdd1b4f3f000000000000803fe0a28b3e533da13e1aebae3f8a447b40e03d06be332d303f0a00003f619606bf4a7916bf991b4f3f000000000000803fdfa28b3e753d213e012a4e3f83447b4050b5f4bee5cfcf3e8a9fcd3e3a2a52bf943434bfa3b0293f4aa6823e0000803fb0e8a23e753da13d34d6d23f3d386e40ca39dc3e6978733fa9379e3e5df88e34460b9ebe3e34733fac873fbd0000803f20ba683e0edc713e48b8983fa11b5940eeb4f4be6ce3013fa219863e392a52bf0c67d3be13d25f3f4da782be0000803f20ba683e753da13da8c4213fa11b5940d52a23bfc73b893efe68473eb68a71bf897916bf6a1b4f3f000000000000803fe0a28b3e000000003c19cb3fa11b594000a341bd21f9643f6aecaa3161f9e4be000000000000803f000000000000803f7f2e3a3e753d213ee01dc53fa11b59403cc97d3f33c4593fcf8f06b26796063f000000000000803f000000000000803f802e3a3e533da13e0f008b3f38386e40374aab3f307e103f0cd0b03d3b2a523fcc2e38be5234733faba682be0000803f20ba683eb08cc93e34d6d23f05ff4340ca39dc3e6a78733fa9379ebed92c9334460b9e3e3e34733fac873f3d0000803fdfa20b3e0edc713e0f008b3f0aff4340374aab3f307e103f0dd0b0bd3b2a523fcc2e383e5234733faba6823e0000803fdfa20b3eb08cc93ea8c4213fa11b594050b2bf3fc3a0a93e00000000c88a713f000000000000803f000000000000803f7f2e3a3e0edcf13e03c2b33fbb3035404054683f9ef6553f44e8c6be55a4c63e74c2ff3e3a95583f74c53e3e0000803f7f2eba3d533da13efd32a13ffcd52140ca39dc3e255d3f3f525a26bfd0000dbeb1e14e3f084f163f25863fbd0000803f7f2e3a3d0edc713e1aebae3fb8f23640e03d06be342d303f0b0000bf619606bf4a79163f991b4f3f000000000000803f7f2eba3d753d213eb04c6d3fd5fd1e40c0a741bd055a003f42b933bf1f7701bf3d9f5c3f06c4d93e2b838dbe0000803f00000000753d213e48b8983fa11b5940eeb4f4be6de3013fa21986be392a52bf0d67d33e13d25f3f4da7823e0000803fdfa20b3e753da13d012a4e3fbff2364050b5f4bee7cfcf3e889fcdbe3a2a52bf9434343fa3b0293f4aa682be0000803f7f2e3a3d753da13da8c4213fa11b5940d52a23bfc73b893efe6847beb68a71bf8979163f6a1b4f3f000000000000803f7f2eba3d00000000 111 | m_CompressedMesh: 112 | m_Vertices: 113 | m_NumItems: 0 114 | m_Range: 0 115 | m_Start: 0 116 | m_Data: 117 | m_BitSize: 0 118 | m_UV: 119 | m_NumItems: 0 120 | m_Range: 0 121 | m_Start: 0 122 | m_Data: 123 | m_BitSize: 0 124 | m_Normals: 125 | m_NumItems: 0 126 | m_Range: 0 127 | m_Start: 0 128 | m_Data: 129 | m_BitSize: 0 130 | m_Tangents: 131 | m_NumItems: 0 132 | m_Range: 0 133 | m_Start: 0 134 | m_Data: 135 | m_BitSize: 0 136 | m_Weights: 137 | m_NumItems: 0 138 | m_Data: 139 | m_BitSize: 0 140 | m_NormalSigns: 141 | m_NumItems: 0 142 | m_Data: 143 | m_BitSize: 0 144 | m_TangentSigns: 145 | m_NumItems: 0 146 | m_Data: 147 | m_BitSize: 0 148 | m_FloatColors: 149 | m_NumItems: 0 150 | m_Range: 0 151 | m_Start: 0 152 | m_Data: 153 | m_BitSize: 0 154 | m_BoneIndices: 155 | m_NumItems: 0 156 | m_Data: 157 | m_BitSize: 0 158 | m_Triangles: 159 | m_NumItems: 0 160 | m_Data: 161 | m_BitSize: 0 162 | m_UVInfo: 0 163 | m_LocalAABB: 164 | m_Center: {x: -0.092639506, y: 2.2923183, z: 1.1651043} 165 | m_Extent: {x: 1.7398014, y: 2.1674938, z: 1.8024765} 166 | m_MeshUsageFlags: 0 167 | m_BakedConvexCollisionMesh: 168 | m_BakedTriangleCollisionMesh: 169 | m_MeshMetrics[0]: 1 170 | m_MeshMetrics[1]: 1 171 | m_MeshOptimizationFlags: 1 172 | m_StreamData: 173 | offset: 0 174 | size: 0 175 | path: 176 | -------------------------------------------------------------------------------- /Meshes/Generated/LowPoly2.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2db61fa93f216394d8d59022cc5b109a 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Meshes/Generated/VeryDetailed.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d51868b680bcfd949a806f076a101e9c 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Meshes/icosphere.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lchaumartin/TreeProceduralGeneration/57b6234a4bb4109c9e0c545a38f045da970d0b2b/Meshes/icosphere.fbx -------------------------------------------------------------------------------- /Meshes/icosphere.fbx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 860d33767a315734aa5d3a095cceba2c 3 | ModelImporter: 4 | serializedVersion: 19301 5 | internalIDToNameTable: [] 6 | externalObjects: {} 7 | materials: 8 | materialImportMode: 0 9 | materialName: 0 10 | materialSearch: 1 11 | materialLocation: 1 12 | animations: 13 | legacyGenerateAnimations: 4 14 | bakeSimulation: 0 15 | resampleCurves: 1 16 | optimizeGameObjects: 0 17 | motionNodeName: 18 | rigImportErrors: 19 | rigImportWarnings: 20 | animationImportErrors: 21 | animationImportWarnings: 22 | animationRetargetingWarnings: 23 | animationDoRetargetingWarnings: 0 24 | importAnimatedCustomProperties: 0 25 | importConstraints: 0 26 | animationCompression: 1 27 | animationRotationError: 0.5 28 | animationPositionError: 0.5 29 | animationScaleError: 0.5 30 | animationWrapMode: 0 31 | extraExposedTransformPaths: [] 32 | extraUserProperties: [] 33 | clipAnimations: [] 34 | isReadable: 0 35 | meshes: 36 | lODScreenPercentages: [] 37 | globalScale: 100 38 | meshCompression: 0 39 | addColliders: 0 40 | useSRGBMaterialColor: 1 41 | sortHierarchyByName: 1 42 | importVisibility: 1 43 | importBlendShapes: 1 44 | importCameras: 1 45 | importLights: 1 46 | fileIdsGeneration: 2 47 | swapUVChannels: 0 48 | generateSecondaryUV: 0 49 | useFileUnits: 1 50 | keepQuads: 0 51 | weldVertices: 1 52 | preserveHierarchy: 0 53 | skinWeightsMode: 0 54 | maxBonesPerVertex: 4 55 | minBoneWeight: 0.001 56 | meshOptimizationFlags: -1 57 | indexFormat: 0 58 | secondaryUVAngleDistortion: 8 59 | secondaryUVAreaDistortion: 15.000001 60 | secondaryUVHardAngle: 88 61 | secondaryUVPackMargin: 4 62 | useFileScale: 1 63 | tangentSpace: 64 | normalSmoothAngle: 60 65 | normalImportMode: 1 66 | tangentImportMode: 3 67 | normalCalculationMode: 4 68 | legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 69 | blendShapeNormalImportMode: 1 70 | normalSmoothingSource: 0 71 | referencedClips: [] 72 | importAnimation: 0 73 | humanDescription: 74 | serializedVersion: 3 75 | human: [] 76 | skeleton: [] 77 | armTwist: 0.5 78 | foreArmTwist: 0.5 79 | upperLegTwist: 0.5 80 | legTwist: 0.5 81 | armStretch: 0.05 82 | legStretch: 0.05 83 | feetSpacing: 0 84 | globalScale: 100 85 | rootMotionBoneName: 86 | hasTranslationDoF: 0 87 | hasExtraRoot: 0 88 | skeletonHasParents: 1 89 | lastHumanDescriptionAvatarSource: {instanceID: 0} 90 | autoGenerateAvatarMappingIfUnspecified: 1 91 | animationType: 2 92 | humanoidOversampling: 1 93 | avatarSetup: 0 94 | additionalBone: 0 95 | userData: 96 | assetBundleName: 97 | assetBundleVariant: 98 | -------------------------------------------------------------------------------- /ProceduralTree.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fd703c67c05c2e84cbb058e67c92ddc6 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | # Tree Procedural Generation 2 | 3 | Created with unity 2019.4.14f1 - URP 4 | 5 | You will find the generator in Window -> TreeGenerator 6 | Do not forget to put a leaves mesh (the default sphere for example) 7 | The trunk / leaves materials should be found automatically but you can change them manually, if you use another RP for example. 8 | 9 | Have fun! 10 | -------------------------------------------------------------------------------- /Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0112fe8b402e2254cb1abc78d0991b45 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Scripts/MeshExtension.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections.Generic; 3 | 4 | public static class MeshExtension 5 | { 6 | private class Vertices 7 | { 8 | List verts = null; 9 | List uv1 = null; 10 | List uv2 = null; 11 | List uv3 = null; 12 | List uv4 = null; 13 | List normals = null; 14 | List tangents = null; 15 | List colors = null; 16 | List boneWeights = null; 17 | 18 | public Vertices() 19 | { 20 | verts = new List(); 21 | } 22 | public Vertices(Mesh aMesh) 23 | { 24 | verts = CreateList(aMesh.vertices); 25 | uv1 = CreateList(aMesh.uv); 26 | uv2 = CreateList(aMesh.uv2); 27 | uv3 = CreateList(aMesh.uv3); 28 | uv4 = CreateList(aMesh.uv4); 29 | normals = CreateList(aMesh.normals); 30 | tangents = CreateList(aMesh.tangents); 31 | colors = CreateList(aMesh.colors32); 32 | boneWeights = CreateList(aMesh.boneWeights); 33 | } 34 | 35 | private List CreateList(T[] aSource) 36 | { 37 | if (aSource == null || aSource.Length == 0) 38 | return null; 39 | return new List(aSource); 40 | } 41 | private void Copy(ref List aDest, List aSource, int aIndex) 42 | { 43 | if (aSource == null) 44 | return; 45 | if (aDest == null) 46 | aDest = new List(); 47 | aDest.Add(aSource[aIndex]); 48 | } 49 | public int Add(Vertices aOther, int aIndex) 50 | { 51 | int i = verts.Count; 52 | Copy(ref verts, aOther.verts, aIndex); 53 | Copy(ref uv1, aOther.uv1, aIndex); 54 | Copy(ref uv2, aOther.uv2, aIndex); 55 | Copy(ref uv3, aOther.uv3, aIndex); 56 | Copy(ref uv4, aOther.uv4, aIndex); 57 | Copy(ref normals, aOther.normals, aIndex); 58 | Copy(ref tangents, aOther.tangents, aIndex); 59 | Copy(ref colors, aOther.colors, aIndex); 60 | Copy(ref boneWeights, aOther.boneWeights, aIndex); 61 | return i; 62 | } 63 | public void AssignTo(Mesh aTarget) 64 | { 65 | if (verts.Count > 65535) 66 | aTarget.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; 67 | aTarget.SetVertices(verts); 68 | if (uv1 != null) aTarget.SetUVs(0, uv1); 69 | if (uv2 != null) aTarget.SetUVs(1, uv2); 70 | if (uv3 != null) aTarget.SetUVs(2, uv3); 71 | if (uv4 != null) aTarget.SetUVs(3, uv4); 72 | if (normals != null) aTarget.SetNormals(normals); 73 | if (tangents != null) aTarget.SetTangents(tangents); 74 | if (colors != null) aTarget.SetColors(colors); 75 | if (boneWeights != null) aTarget.boneWeights = boneWeights.ToArray(); 76 | } 77 | } 78 | 79 | public static Mesh GetSubmesh(this Mesh aMesh, int aSubMeshIndex) 80 | { 81 | if (aSubMeshIndex < 0 || aSubMeshIndex >= aMesh.subMeshCount) 82 | return null; 83 | int[] indices = aMesh.GetTriangles(aSubMeshIndex); 84 | Vertices source = new Vertices(aMesh); 85 | Vertices dest = new Vertices(); 86 | Dictionary map = new Dictionary(); 87 | int[] newIndices = new int[indices.Length]; 88 | for (int i = 0; i < indices.Length; i++) 89 | { 90 | int o = indices[i]; 91 | int n; 92 | if (!map.TryGetValue(o, out n)) 93 | { 94 | n = dest.Add(source, o); 95 | map.Add(o, n); 96 | } 97 | newIndices[i] = n; 98 | } 99 | Mesh m = new Mesh(); 100 | dest.AssignTo(m); 101 | m.triangles = newIndices; 102 | return m; 103 | } 104 | } -------------------------------------------------------------------------------- /Scripts/MeshExtension.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1c9cd7958e3bd7d42b96aac65cc10f22 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/MeshSmoothener.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class MeshUtils 6 | { 7 | // Finds a set of adjacent vertices for a given vertex 8 | // Note the success of this routine expects only the set of neighboring faces to eacn contain one vertex corresponding 9 | // to the vertex in question 10 | public static List findAdjacentNeighbors(Vector3[] v, int[] t, Vector3 vertex) 11 | { 12 | List adjacentV = new List(); 13 | List facemarker = new List(); 14 | int facecount = 0; 15 | 16 | // Find matching vertices 17 | for (int i = 0; i < v.Length; i++) 18 | if (Mathf.Approximately(vertex.x, v[i].x) && 19 | Mathf.Approximately(vertex.y, v[i].y) && 20 | Mathf.Approximately(vertex.z, v[i].z)) 21 | { 22 | int v1 = 0; 23 | int v2 = 0; 24 | bool marker = false; 25 | 26 | // Find vertex indices from the triangle array 27 | for (int k = 0; k < t.Length; k = k + 3) 28 | if (facemarker.Contains(k) == false) 29 | { 30 | v1 = 0; 31 | v2 = 0; 32 | marker = false; 33 | 34 | if (i == t[k]) 35 | { 36 | v1 = t[k + 1]; 37 | v2 = t[k + 2]; 38 | marker = true; 39 | } 40 | 41 | if (i == t[k + 1]) 42 | { 43 | v1 = t[k]; 44 | v2 = t[k + 2]; 45 | marker = true; 46 | } 47 | 48 | if (i == t[k + 2]) 49 | { 50 | v1 = t[k]; 51 | v2 = t[k + 1]; 52 | marker = true; 53 | } 54 | 55 | facecount++; 56 | if (marker) 57 | { 58 | // Once face has been used mark it so it does not get used again 59 | facemarker.Add(k); 60 | 61 | // Add non duplicate vertices to the list 62 | if (isVertexExist(adjacentV, v[v1]) == false) 63 | { 64 | adjacentV.Add(v[v1]); 65 | //Debug.Log("Adjacent vertex index = " + v1); 66 | } 67 | 68 | if (isVertexExist(adjacentV, v[v2]) == false) 69 | { 70 | adjacentV.Add(v[v2]); 71 | //Debug.Log("Adjacent vertex index = " + v2); 72 | } 73 | marker = false; 74 | } 75 | } 76 | } 77 | 78 | //Debug.Log("Faces Found = " + facecount); 79 | 80 | return adjacentV; 81 | } 82 | 83 | 84 | // Finds a set of adjacent vertices indexes for a given vertex 85 | // Note the success of this routine expects only the set of neighboring faces to eacn contain one vertex corresponding 86 | // to the vertex in question 87 | public static List findAdjacentNeighborIndexes(Vector3[] v, int[] t, Vector3 vertex) 88 | { 89 | List adjacentIndexes = new List(); 90 | List adjacentV = new List(); 91 | List facemarker = new List(); 92 | int facecount = 0; 93 | 94 | // Find matching vertices 95 | for (int i = 0; i < v.Length; i++) 96 | if (Mathf.Approximately(vertex.x, v[i].x) && 97 | Mathf.Approximately(vertex.y, v[i].y) && 98 | Mathf.Approximately(vertex.z, v[i].z)) 99 | { 100 | int v1 = 0; 101 | int v2 = 0; 102 | bool marker = false; 103 | 104 | // Find vertex indices from the triangle array 105 | for (int k = 0; k < t.Length; k = k + 3) 106 | if (facemarker.Contains(k) == false) 107 | { 108 | v1 = 0; 109 | v2 = 0; 110 | marker = false; 111 | 112 | if (i == t[k]) 113 | { 114 | v1 = t[k + 1]; 115 | v2 = t[k + 2]; 116 | marker = true; 117 | } 118 | 119 | if (i == t[k + 1]) 120 | { 121 | v1 = t[k]; 122 | v2 = t[k + 2]; 123 | marker = true; 124 | } 125 | 126 | if (i == t[k + 2]) 127 | { 128 | v1 = t[k]; 129 | v2 = t[k + 1]; 130 | marker = true; 131 | } 132 | 133 | facecount++; 134 | if (marker) 135 | { 136 | // Once face has been used mark it so it does not get used again 137 | facemarker.Add(k); 138 | 139 | // Add non duplicate vertices to the list 140 | if (isVertexExist(adjacentV, v[v1]) == false) 141 | { 142 | adjacentV.Add(v[v1]); 143 | adjacentIndexes.Add(v1); 144 | //Debug.Log("Adjacent vertex index = " + v1); 145 | } 146 | 147 | if (isVertexExist(adjacentV, v[v2]) == false) 148 | { 149 | adjacentV.Add(v[v2]); 150 | adjacentIndexes.Add(v2); 151 | //Debug.Log("Adjacent vertex index = " + v2); 152 | } 153 | marker = false; 154 | } 155 | } 156 | } 157 | 158 | //Debug.Log("Faces Found = " + facecount); 159 | 160 | return adjacentIndexes; 161 | } 162 | 163 | // Does the vertex v exist in the list of vertices 164 | static bool isVertexExist(List adjacentV, Vector3 v) 165 | { 166 | bool marker = false; 167 | foreach (Vector3 vec in adjacentV) 168 | if (Mathf.Approximately(vec.x, v.x) && Mathf.Approximately(vec.y, v.y) && Mathf.Approximately(vec.z, v.z)) 169 | { 170 | marker = true; 171 | break; 172 | } 173 | 174 | return marker; 175 | } 176 | } 177 | 178 | public class SmoothFilter 179 | { 180 | /* 181 | Standard Laplacian Smooth Filter 182 | */ 183 | public static Vector3[] laplacianFilter(Vector3[] sv, int[] t) 184 | { 185 | Vector3[] wv = new Vector3[sv.Length]; 186 | List adjacentVertices = new List(); 187 | 188 | float dx = 0.0f; 189 | float dy = 0.0f; 190 | float dz = 0.0f; 191 | 192 | for (int vi = 0; vi < sv.Length; vi++) 193 | { 194 | // Find the sv neighboring vertices 195 | adjacentVertices = MeshUtils.findAdjacentNeighbors(sv, t, sv[vi]); 196 | 197 | if (adjacentVertices.Count != 0) 198 | { 199 | dx = 0.0f; 200 | dy = 0.0f; 201 | dz = 0.0f; 202 | 203 | //Debug.Log("Vertex Index Length = "+vertexIndexes.Length); 204 | // Add the vertices and divide by the number of vertices 205 | for (int j = 0; j < adjacentVertices.Count; j++) 206 | { 207 | dx += adjacentVertices[j].x; 208 | dy += adjacentVertices[j].y; 209 | dz += adjacentVertices[j].z; 210 | } 211 | 212 | wv[vi].x = dx / adjacentVertices.Count; 213 | wv[vi].y = dy / adjacentVertices.Count; 214 | wv[vi].z = dz / adjacentVertices.Count; 215 | } 216 | } 217 | 218 | return wv; 219 | } 220 | 221 | /* 222 | HC (Humphrey’s Classes) Smooth Algorithm - Reduces Shrinkage of Laplacian Smoother 223 | 224 | Where sv - original points 225 | pv - previous points, 226 | alpha [0..1] influences previous points pv, e.g. 0 227 | beta [0..1] e.g. > 0.5 228 | */ 229 | public static Vector3[] hcFilter(Vector3[] sv, Vector3[] pv, int[] t, float alpha, float beta) 230 | { 231 | Vector3[] wv = new Vector3[sv.Length]; 232 | Vector3[] bv = new Vector3[sv.Length]; 233 | 234 | 235 | 236 | // Perform Laplacian Smooth 237 | wv = laplacianFilter(sv, t); 238 | 239 | // Compute Differences 240 | for (int i = 0; i < wv.Length; i++) 241 | { 242 | bv[i].x = wv[i].x - (alpha * sv[i].x + (1 - alpha) * sv[i].x); 243 | bv[i].y = wv[i].y - (alpha * sv[i].y + (1 - alpha) * sv[i].y); 244 | bv[i].z = wv[i].z - (alpha * sv[i].z + (1 - alpha) * sv[i].z); 245 | } 246 | 247 | List adjacentIndexes = new List(); 248 | 249 | float dx = 0.0f; 250 | float dy = 0.0f; 251 | float dz = 0.0f; 252 | 253 | for (int j = 0; j < bv.Length; j++) 254 | { 255 | adjacentIndexes.Clear(); 256 | 257 | // Find the bv neighboring vertices 258 | adjacentIndexes = MeshUtils.findAdjacentNeighborIndexes(sv, t, sv[j]); 259 | 260 | dx = 0.0f; 261 | dy = 0.0f; 262 | dz = 0.0f; 263 | 264 | for (int k = 0; k < adjacentIndexes.Count; k++) 265 | { 266 | dx += bv[adjacentIndexes[k]].x; 267 | dy += bv[adjacentIndexes[k]].y; 268 | dz += bv[adjacentIndexes[k]].z; 269 | 270 | } 271 | 272 | wv[j].x -= beta * bv[j].x + ((1 - beta) / adjacentIndexes.Count) * dx; 273 | wv[j].y -= beta * bv[j].y + ((1 - beta) / adjacentIndexes.Count) * dy; 274 | wv[j].z -= beta * bv[j].z + ((1 - beta) / adjacentIndexes.Count) * dz; 275 | } 276 | 277 | return wv; 278 | } 279 | } 280 | 281 | public class MeshSmoothener 282 | { 283 | public enum Filter { Laplacian = 1, HC = 2 }; 284 | 285 | public static Mesh SmoothMesh(Mesh mesh, int power, Filter filterType) 286 | { 287 | for(int i = 0; i < power; ++i) 288 | { 289 | if (filterType == Filter.HC) 290 | mesh.vertices = SmoothFilter.hcFilter(mesh.vertices, mesh.vertices, mesh.triangles, 0.0f, 0.5f); 291 | if (filterType == Filter.Laplacian) 292 | mesh.vertices = SmoothFilter.laplacianFilter(mesh.vertices, mesh.triangles); 293 | } 294 | return mesh; 295 | } 296 | } -------------------------------------------------------------------------------- /Scripts/MeshSmoothener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a3b54b9d8b88de44c913d80e33023e3d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/TreeGenerator.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | 6 | 7 | 8 | public class TreeGenerator : EditorWindow 9 | { 10 | public GameObject tree; 11 | public Material trunkMaterial; 12 | public Material leavesMaterial; 13 | public int _recursionLevel = 3; 14 | public float _roughness = 1f; 15 | public int _basePolygon = 20; 16 | public int _floorNumber = 40; 17 | public float _trunkThickness = 0.35f; 18 | public float _floorHeight = 0.1f; 19 | public float _firstBranchHeight = 0.2f; 20 | public float _distorsionCone = 20f; 21 | public float _twistiness = 8f; 22 | public float _reductionRate = 0.1f; 23 | public float _branchDensity = 0.2f; 24 | public Mesh _leavesMesh; 25 | public float _leavesSize = 30f; 26 | [Range(0, 2)] 27 | public int smoothingPower = 1; 28 | 29 | private float _randomRatio = 0.005f; 30 | private Vector2 scrollPosition = new Vector2(); 31 | 32 | [MenuItem("Window/TreeGenerator")] 33 | public static void ShowWindow() 34 | { 35 | 36 | EditorWindow win = EditorWindow.GetWindow(typeof(TreeGenerator)); 37 | win.titleContent = new GUIContent("TreeGenerator"); 38 | win.minSize = new Vector2(275, 360); 39 | } 40 | 41 | private void OnGUI() 42 | { 43 | if(!trunkMaterial) trunkMaterial = AssetDatabase.LoadAssetAtPath("Assets/TreeProceduralGeneration/Materials/Trunk.mat"); 44 | if(!leavesMaterial) leavesMaterial = AssetDatabase.LoadAssetAtPath("Assets/TreeProceduralGeneration/Materials/Leaves.mat"); 45 | if(!tree) tree = GameObject.Find("tree"); 46 | //if(!_leavesMesh) _leavesMesh = Resources.GetBuiltinResource("Sphere.fbx"); 47 | 48 | Editor e = Editor.CreateEditor(this); 49 | scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, GUIStyle.none, GUI.skin.verticalScrollbar); 50 | e.DrawDefaultInspector(); 51 | EditorGUILayout.EndScrollView(); 52 | GUILayout.FlexibleSpace(); 53 | if (GUILayout.Button("Generate Tree", GUILayout.Height(64))) 54 | gen(); 55 | if (GUILayout.Button("Save mesh to Assets", GUILayout.Height(64))) 56 | saveMesh(); 57 | } 58 | 59 | private void saveMesh() 60 | { 61 | AssetDatabase.CreateAsset(tree.GetComponent().sharedMesh, "Assets/tree.asset"); 62 | AssetDatabase.SaveAssets(); 63 | } 64 | 65 | static T[] SubArray(T[] data, int index, int length) 66 | { 67 | T[] result = new T[length]; 68 | for (int i = index; i < index + length; ++i) 69 | { 70 | result[i] = data[i]; 71 | } 72 | return result; 73 | } 74 | 75 | int getCloseValue(int val) 76 | { 77 | return Random.Range(val - (int)(val * _randomRatio), val + (int)(val * _randomRatio)); 78 | } 79 | 80 | float getCloseValue(float val) 81 | { 82 | return Random.Range(val - val * _randomRatio, val + val * _randomRatio); 83 | } 84 | 85 | // Start is called before the first frame update 86 | void gen() 87 | { 88 | if (!_leavesMesh) 89 | _leavesMesh = new Mesh(); 90 | if (!leavesMaterial) 91 | leavesMaterial = trunkMaterial; 92 | if (tree) 93 | DestroyImmediate(tree); 94 | tree = new GameObject("tree"); 95 | 96 | 97 | int basePolygon = Mathf.Max(3, getCloseValue(_basePolygon)); 98 | Vector3[] startVertices = new Vector3[basePolygon]; 99 | Vector2[] startUv = new Vector2[basePolygon]; 100 | 101 | float angularStep = 2f * Mathf.PI / (float)(basePolygon); 102 | for (int j = 0; j < basePolygon; ++j) 103 | { 104 | Vector3 randomness = new Vector3 105 | ( 106 | Random.Range(-_roughness, _roughness), 107 | Random.Range(-_roughness, _roughness), 108 | Random.Range(-_roughness, _roughness) 109 | ) / 10f; 110 | Vector3 pos = new Vector3(Mathf.Cos(j * angularStep), 0f, Mathf.Sin(j * angularStep)) + randomness; 111 | startVertices[j] = _trunkThickness * (pos); 112 | startUv[j] = new Vector2(j * angularStep, startVertices[j].y); 113 | } 114 | 115 | Mesh mesh = GenBranch(tree, basePolygon, startVertices, startUv, getCloseValue(_trunkThickness), getCloseValue(_floorHeight), getCloseValue(_floorNumber), new Vector3(), Vector3.up, 0f, getCloseValue(_distorsionCone), getCloseValue(_roughness), getCloseValue(_branchDensity), getCloseValue(_recursionLevel)); 116 | 117 | CombineInstance[] combine = new CombineInstance[2]; 118 | combine[0].mesh = MeshSmoothener.SmoothMesh(mesh.GetSubmesh(0), smoothingPower, MeshSmoothener.Filter.Laplacian); 119 | combine[0].transform = tree.transform.localToWorldMatrix; 120 | combine[1].mesh = mesh.GetSubmesh(1); 121 | combine[1].transform = tree.transform.localToWorldMatrix; 122 | mesh.CombineMeshes(combine, false, false); 123 | //mesh = MeshSmoothener.SmoothMesh(mesh, smoothingPower, MeshSmoothener.Filter.Laplacian); 124 | 125 | mesh.RecalculateNormals(); 126 | 127 | tree.AddComponent().mesh = mesh; 128 | tree.AddComponent().materials = new Material[2] { trunkMaterial, leavesMaterial }; 129 | 130 | } 131 | 132 | Vector3 ChangeCoordinates(Vector3 input, Vector3 inputNormal, Vector3 newNormal) 133 | { 134 | float angle = Vector3.Angle(inputNormal, newNormal); 135 | Vector3 axis = Vector3.Cross(inputNormal, newNormal); 136 | Quaternion rot = Quaternion.AngleAxis(angle, axis); 137 | return rot * input; 138 | } 139 | 140 | Vector3 getRandomVectorInCone(float coneAngularAmplitude, Vector3 direction) 141 | { 142 | return (new Vector3(Random.Range(-coneAngularAmplitude, coneAngularAmplitude), Random.Range(-coneAngularAmplitude, coneAngularAmplitude), Random.Range(-coneAngularAmplitude, coneAngularAmplitude)) / 100f + direction).normalized; 143 | } 144 | 145 | static bool Happens(float proba) 146 | { 147 | return Random.Range(0f, 1f) < proba; 148 | } 149 | 150 | Mesh GenBranch(GameObject tree, int basePolygon, Vector3[] startVertices, Vector2[] startUv, float thickness, float floorHeight, int floorNumber, Vector3 startingPos, Vector3 startingDirection, float angularOffset, float distorsionCone, float roughness, float branchDensity, int recursionLevel) 151 | { 152 | float currentThickness = thickness; 153 | Mesh mesh = new Mesh(); 154 | mesh.subMeshCount = 2; 155 | 156 | Vector3[] vertices = new Vector3[basePolygon * floorNumber]; 157 | Vector2[] uv = new Vector2[vertices.Length]; 158 | int[] triangles; 159 | 160 | Vector3 leavesPosition = new Vector3(); 161 | 162 | float angularStep = 2f * Mathf.PI / (float)(basePolygon); 163 | Vector3 first = new Vector3(Mathf.Cos(angularOffset), 0f, Mathf.Sin(angularOffset)) * thickness; 164 | first = ChangeCoordinates(first, Vector3.up, startingDirection); 165 | first += startingPos; 166 | 167 | for (int i = 0; i < startVertices.Length; ++i) 168 | { 169 | vertices[i] = startVertices[i]; 170 | uv[i] = startUv[i]; 171 | } 172 | 173 | 174 | triangles = new int[6 * (vertices.Length - basePolygon)]; 175 | 176 | 177 | Vector3 growDirection = startingDirection; 178 | 179 | Vector3 lastPivot = startingPos; 180 | 181 | for (int i = 1; i < vertices.Length/basePolygon; ++i) 182 | { 183 | 184 | Vector3 pivot = lastPivot + floorHeight * growDirection; 185 | lastPivot = pivot; 186 | 187 | for (int j = 0; j < basePolygon; ++j) 188 | { 189 | Vector3 randomness = new Vector3 190 | ( 191 | Random.Range(-roughness / 10f, roughness / 10f), 192 | Random.Range(-roughness / 10f, roughness / 10f), 193 | Random.Range(-roughness / 10f, roughness / 10f) 194 | ); 195 | Vector3 pos = new Vector3(Mathf.Cos(j * angularStep + angularOffset), 0f, Mathf.Sin(j * angularStep + angularOffset)) + randomness; 196 | pos *= currentThickness; 197 | pos = ChangeCoordinates(pos, new Vector3(0f, 1f, 0f), growDirection); 198 | vertices[i * basePolygon + j] = pos + pivot; 199 | uv[i * basePolygon + j] = new Vector2( j*angularStep, vertices[i * basePolygon + j].y ); 200 | 201 | triangles[6 * ((i - 1) * basePolygon + j)] = (i - 1) * basePolygon + j; 202 | triangles[6 * ((i - 1) * basePolygon + j) + 1] = (i) * basePolygon + j; 203 | triangles[6 * ((i - 1) * basePolygon + j) + 2] = (i - 1) * basePolygon + (j + 1) % basePolygon; 204 | triangles[6 * ((i - 1) * basePolygon + j) + 3] = (i - 1) * basePolygon + (j + 1) % basePolygon; 205 | triangles[6 * ((i - 1) * basePolygon + j) + 4] = (i) * basePolygon + j; 206 | triangles[6 * ((i - 1) * basePolygon + j) + 5] = (i) * basePolygon + (j + 1) % basePolygon; 207 | } 208 | if (Happens(branchDensity) && recursionLevel > 0 && i >= floorNumber * _firstBranchHeight && basePolygon >= 4 && i < vertices.Length / basePolygon - 1) // split! 209 | { 210 | int subBasePolygon = Random.Range(Mathf.Max(2, basePolygon/3), Mathf.Min(2*basePolygon/3, basePolygon - 1)) + 1; 211 | int subBasePolygon2 = basePolygon - subBasePolygon + 2; 212 | int newOffset = Random.Range(0, basePolygon); 213 | Vector3[] subStartVertices = new Vector3[subBasePolygon]; 214 | Vector2[] subStartUv = new Vector2[subBasePolygon]; 215 | Vector3[] subStartVertices2 = new Vector3[subBasePolygon2]; 216 | Vector2[] subStartUv2 = new Vector2[subBasePolygon2]; 217 | 218 | Vector3 subStartingPos = pivot; 219 | Vector3 mid = new Vector3(); 220 | for (int k = 0; k < subBasePolygon; ++k) 221 | { 222 | int shift = ((k + newOffset) % basePolygon + basePolygon) % basePolygon; 223 | subStartVertices[k] = vertices[i * basePolygon + shift]; 224 | subStartUv[k] = uv[i * basePolygon + shift]; 225 | mid += subStartVertices[k]; 226 | } 227 | 228 | mid /= subBasePolygon; 229 | subStartingPos = mid; 230 | 231 | float newAngularOffset = angularOffset + Vector3.SignedAngle(subStartVertices[0] - mid, vertices[i * basePolygon] - pivot, growDirection) * Mathf.Deg2Rad; 232 | 233 | 234 | Vector3 subStartingPos2 = pivot; 235 | Vector3 mid2 = new Vector3(); 236 | for (int k = 0; k < subBasePolygon2; ++k) 237 | { 238 | int shift = ((k + newOffset + subBasePolygon - 1) % basePolygon + basePolygon) % basePolygon; 239 | subStartVertices2[k] = vertices[i * basePolygon + shift]; 240 | subStartUv2[k] = uv[i * basePolygon + shift]; 241 | mid2 += subStartVertices2[k]; 242 | } 243 | mid2 /= subBasePolygon2; 244 | subStartingPos2 = mid2; 245 | 246 | float newAngularOffset2 = angularOffset + Vector3.SignedAngle(subStartVertices2[0] - mid2, vertices[i * basePolygon] - pivot, growDirection) * Mathf.Deg2Rad; 247 | 248 | mesh.vertices = SubArray(vertices, 0, basePolygon * (i + 1)); 249 | mesh.uv = SubArray(uv, 0, basePolygon * (i + 1)); 250 | mesh.SetTriangles(SubArray(triangles, 0, 6 * (i * basePolygon)), 0); 251 | mesh.RecalculateNormals(); 252 | 253 | Mesh res1 = new Mesh(); 254 | res1.subMeshCount = 2; 255 | Mesh res2 = new Mesh(); 256 | res2.subMeshCount = 2; 257 | Mesh res = new Mesh(); 258 | res.subMeshCount = 2; 259 | 260 | Mesh branch1 = GenBranch(tree, subBasePolygon, subStartVertices, subStartUv, 261 | currentThickness * subBasePolygon / ((float)basePolygon), floorHeight, 262 | floorNumber - i, subStartingPos, getRandomVectorInCone(distorsionCone, (growDirection + distorsionCone / 45f * (mid - pivot).normalized).normalized), 263 | newAngularOffset, distorsionCone, roughness, branchDensity * 1.1f, recursionLevel - 1); 264 | 265 | Mesh branch2 = GenBranch(tree, subBasePolygon2, subStartVertices2, subStartUv2, 266 | currentThickness * subBasePolygon2 / ((float)basePolygon), floorHeight, 267 | floorNumber - i, subStartingPos2, getRandomVectorInCone(distorsionCone, (growDirection + distorsionCone / 45f * (mid2 - pivot).normalized).normalized), 268 | newAngularOffset2, distorsionCone, roughness, branchDensity * 1.1f, recursionLevel - 1); 269 | 270 | CombineInstance[] combine = new CombineInstance[3]; 271 | combine[1].transform = tree.transform.localToWorldMatrix; 272 | combine[2].transform = tree.transform.localToWorldMatrix; 273 | 274 | Mesh subMesh1 = mesh.GetSubmesh(0); 275 | Mesh subMesh11 = branch1.GetSubmesh(0); 276 | Mesh subMesh12 = branch2.GetSubmesh(0); 277 | 278 | Mesh subMesh2 = mesh.GetSubmesh(1); 279 | if (subMesh2 == null) 280 | { 281 | subMesh2 = new Mesh(); 282 | } 283 | 284 | Mesh subMesh21 = branch1.GetSubmesh(1); 285 | if(subMesh21 == null) 286 | { 287 | subMesh21 = new Mesh(); 288 | } 289 | 290 | Mesh subMesh22 = branch2.GetSubmesh(1); 291 | if (subMesh22 == null) 292 | { 293 | subMesh22 = new Mesh(); 294 | } 295 | 296 | combine[0].mesh = subMesh1; 297 | combine[0].transform = tree.transform.localToWorldMatrix; 298 | combine[1].mesh = subMesh11; 299 | combine[1].transform = tree.transform.localToWorldMatrix; 300 | combine[2].mesh = subMesh12; 301 | combine[2].transform = tree.transform.localToWorldMatrix; 302 | 303 | res1.CombineMeshes(combine, true, false); 304 | res1.RecalculateNormals(); 305 | 306 | combine[0].mesh = subMesh2; 307 | combine[1].mesh = subMesh21; 308 | combine[2].mesh = subMesh22; 309 | 310 | res2.CombineMeshes(combine, true, false); 311 | res2.RecalculateNormals(); 312 | 313 | combine = new CombineInstance[2]; 314 | combine[0].mesh = res1; 315 | combine[0].transform = tree.transform.localToWorldMatrix; 316 | combine[1].mesh = res2; 317 | combine[1].transform = tree.transform.localToWorldMatrix; 318 | 319 | res.CombineMeshes(combine, false, false); 320 | res.RecalculateNormals(); 321 | res.Optimize(); 322 | return res; 323 | } 324 | currentThickness = Mathf.Pow(Mathf.Asin((floorNumber - i) / (float)(floorNumber) * 2f - 1f) / Mathf.PI + 0.5f, _reductionRate) * thickness; 325 | growDirection = getRandomVectorInCone(_twistiness, growDirection); 326 | 327 | leavesPosition = pivot; 328 | 329 | } 330 | 331 | mesh.vertices = vertices; 332 | mesh.uv = uv; 333 | mesh.SetTriangles(triangles, 0); 334 | mesh.RecalculateNormals(); 335 | { 336 | 337 | Mesh trLeavesMesh = new Mesh(); 338 | trLeavesMesh.subMeshCount = 2; 339 | 340 | Vector3[] trVertices = (Vector3[])(_leavesMesh.vertices.Clone()); 341 | int[] leavesTriangles = (int[])(_leavesMesh.triangles.Clone()); 342 | 343 | for (int i = 0; i < _leavesMesh.vertices.Length; ++i) 344 | { 345 | trVertices[i] *= currentThickness * _leavesSize; 346 | trVertices[i] += leavesPosition; 347 | } 348 | trLeavesMesh.SetVertices(trVertices); 349 | trLeavesMesh.SetTriangles(leavesTriangles, 0); 350 | trLeavesMesh.SetNormals((Vector3[])(_leavesMesh.normals.Clone())); 351 | trLeavesMesh.SetTangents((Vector4[])(_leavesMesh.tangents.Clone())); 352 | trLeavesMesh.uv = (Vector2[])(_leavesMesh.uv.Clone()); 353 | 354 | Mesh res = new Mesh(); 355 | res.subMeshCount = 2; 356 | 357 | CombineInstance[] combine = new CombineInstance[2]; 358 | combine[0].mesh = mesh; 359 | combine[0].transform = tree.transform.localToWorldMatrix; 360 | combine[1].mesh = trLeavesMesh; 361 | combine[1].transform = tree.transform.localToWorldMatrix; 362 | res.CombineMeshes(combine, false, false); 363 | res.RecalculateNormals(); 364 | res.Optimize(); 365 | res.OptimizeIndexBuffers(); 366 | res.OptimizeReorderVertexBuffer(); 367 | return res; 368 | } 369 | } 370 | } 371 | -------------------------------------------------------------------------------- /Scripts/TreeGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 86184a6a6ae7c644690822e007c90b5f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | --------------------------------------------------------------------------------