├── .gitignore ├── Assets ├── Scenes.meta ├── Scenes │ ├── SampleScene.unity │ └── SampleScene.unity.meta ├── Shell.shader ├── Shell.shader.meta ├── SimpleCameraController.cs ├── SimpleCameraController.cs.meta ├── SimpleShell.cs └── SimpleShell.cs.meta ├── LICENSE ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── PackageManagerSettings.asset ├── Packages │ └── com.unity.testtools.codecoverage │ │ └── Settings.json ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── SceneTemplateSettings.json ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset ├── XRSettings.asset └── boot.config ├── README.md ├── UserSettings ├── EditorUserSettings.asset ├── Layouts │ └── default-2021.dwlt └── Search.settings └── example.png /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Ll]ogs/ 3 | /[Pp]ackages/ 4 | /[Tt]emp/ 5 | /[Oo]bj/ 6 | /[Bb]uild/ 7 | /[Bb]uilds/ 8 | /Assets/AssetStoreTools* 9 | /Assets/Ignored* 10 | /Assets/AllSkyFree* 11 | 12 | # Autogenerated VS/MD solution and project files 13 | ExportedObj/ 14 | *.csproj 15 | *.unityproj 16 | *.sln 17 | *.suo 18 | *.tmp 19 | *.user 20 | *.userprefs 21 | *.pidb 22 | *.booproj 23 | *.svd 24 | *.vscode 25 | 26 | 27 | # Unity3D generated meta files 28 | *.pidb.meta 29 | 30 | # Unity3D Generated File On Crash Reports 31 | sysinfo.txt 32 | 33 | # Builds 34 | *.apk 35 | *.unitypackage 36 | 37 | # ========================= 38 | # Operating System Files 39 | # ========================= 40 | 41 | # OSX 42 | # ========================= 43 | 44 | .DS_Store 45 | .AppleDouble 46 | .LSOverride 47 | 48 | # Thumbnails 49 | ._* 50 | 51 | # Files that might appear in the root of a volume 52 | .DocumentRevisions-V100 53 | .fseventsd 54 | .Spotlight-V100 55 | .TemporaryItems 56 | .Trashes 57 | .VolumeIcon.icns 58 | 59 | # Directories potentially created on remote AFP share 60 | .AppleDB 61 | .AppleDesktop 62 | Network Trash Folder 63 | Temporary Items 64 | .apdisk 65 | 66 | # Windows 67 | # ========================= 68 | 69 | # Windows image file caches 70 | Thumbs.db 71 | ehthumbs.db 72 | 73 | # Folder config file 74 | Desktop.ini 75 | 76 | # Recycle Bin used on file shares 77 | $RECYCLE.BIN/ 78 | 79 | # Windows Installer files 80 | *.cab 81 | *.msi 82 | *.msm 83 | *.msp 84 | 85 | # Windows shortcuts 86 | *.lnk 87 | 88 | Recordings 89 | Build.zip -------------------------------------------------------------------------------- /Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6ea315d0fd7389c41b19996891e99ae3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 705507994} 41 | m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 12 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_LightingSettings: {fileID: 0} 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | maxJobWorkers: 0 122 | preserveTilesOutsideBounds: 0 123 | debug: 124 | m_Flags: 0 125 | m_NavMeshData: {fileID: 0} 126 | --- !u!1 &567543847 127 | GameObject: 128 | m_ObjectHideFlags: 0 129 | m_CorrespondingSourceObject: {fileID: 0} 130 | m_PrefabInstance: {fileID: 0} 131 | m_PrefabAsset: {fileID: 0} 132 | serializedVersion: 6 133 | m_Component: 134 | - component: {fileID: 567543848} 135 | - component: {fileID: 567543849} 136 | m_Layer: 0 137 | m_Name: Shells 138 | m_TagString: Untagged 139 | m_Icon: {fileID: 0} 140 | m_NavMeshLayer: 0 141 | m_StaticEditorFlags: 0 142 | m_IsActive: 1 143 | --- !u!4 &567543848 144 | Transform: 145 | m_ObjectHideFlags: 0 146 | m_CorrespondingSourceObject: {fileID: 0} 147 | m_PrefabInstance: {fileID: 0} 148 | m_PrefabAsset: {fileID: 0} 149 | m_GameObject: {fileID: 567543847} 150 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 151 | m_LocalPosition: {x: 0, y: 0, z: 0} 152 | m_LocalScale: {x: 1, y: 1, z: 1} 153 | m_ConstrainProportionsScale: 0 154 | m_Children: [] 155 | m_Father: {fileID: 0} 156 | m_RootOrder: 2 157 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 158 | --- !u!114 &567543849 159 | MonoBehaviour: 160 | m_ObjectHideFlags: 0 161 | m_CorrespondingSourceObject: {fileID: 0} 162 | m_PrefabInstance: {fileID: 0} 163 | m_PrefabAsset: {fileID: 0} 164 | m_GameObject: {fileID: 567543847} 165 | m_Enabled: 1 166 | m_EditorHideFlags: 0 167 | m_Script: {fileID: 11500000, guid: f7e1f48ed03b04c4dba2b9d3d63eee53, type: 3} 168 | m_Name: 169 | m_EditorClassIdentifier: 170 | shellMesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} 171 | shellShader: {fileID: 4800000, guid: ebce530a4f00d2f45a0afa93a5c575e0, type: 3} 172 | updateStatics: 1 173 | shellCount: 256 174 | shellLength: 0.15 175 | distanceAttenuation: 1 176 | density: 366 177 | noiseMin: 0 178 | noiseMax: 1 179 | thickness: 3.53 180 | curvature: 1 181 | displacementStrength: 0.1 182 | shellColor: {r: 0.7529412, g: 0.5424671, b: 0.4392157, a: 0} 183 | occlusionAttenuation: 2.04 184 | occlusionBias: 0 185 | --- !u!1 &705507993 186 | GameObject: 187 | m_ObjectHideFlags: 0 188 | m_CorrespondingSourceObject: {fileID: 0} 189 | m_PrefabInstance: {fileID: 0} 190 | m_PrefabAsset: {fileID: 0} 191 | serializedVersion: 6 192 | m_Component: 193 | - component: {fileID: 705507995} 194 | - component: {fileID: 705507994} 195 | m_Layer: 0 196 | m_Name: Directional Light 197 | m_TagString: Untagged 198 | m_Icon: {fileID: 0} 199 | m_NavMeshLayer: 0 200 | m_StaticEditorFlags: 0 201 | m_IsActive: 1 202 | --- !u!108 &705507994 203 | Light: 204 | m_ObjectHideFlags: 0 205 | m_CorrespondingSourceObject: {fileID: 0} 206 | m_PrefabInstance: {fileID: 0} 207 | m_PrefabAsset: {fileID: 0} 208 | m_GameObject: {fileID: 705507993} 209 | m_Enabled: 1 210 | serializedVersion: 10 211 | m_Type: 1 212 | m_Shape: 0 213 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 214 | m_Intensity: 1 215 | m_Range: 10 216 | m_SpotAngle: 30 217 | m_InnerSpotAngle: 21.80208 218 | m_CookieSize: 10 219 | m_Shadows: 220 | m_Type: 2 221 | m_Resolution: -1 222 | m_CustomResolution: -1 223 | m_Strength: 1 224 | m_Bias: 0.05 225 | m_NormalBias: 0.4 226 | m_NearPlane: 0.2 227 | m_CullingMatrixOverride: 228 | e00: 1 229 | e01: 0 230 | e02: 0 231 | e03: 0 232 | e10: 0 233 | e11: 1 234 | e12: 0 235 | e13: 0 236 | e20: 0 237 | e21: 0 238 | e22: 1 239 | e23: 0 240 | e30: 0 241 | e31: 0 242 | e32: 0 243 | e33: 1 244 | m_UseCullingMatrixOverride: 0 245 | m_Cookie: {fileID: 0} 246 | m_DrawHalo: 0 247 | m_Flare: {fileID: 0} 248 | m_RenderMode: 0 249 | m_CullingMask: 250 | serializedVersion: 2 251 | m_Bits: 4294967295 252 | m_RenderingLayerMask: 1 253 | m_Lightmapping: 1 254 | m_LightShadowCasterMode: 0 255 | m_AreaSize: {x: 1, y: 1} 256 | m_BounceIntensity: 1 257 | m_ColorTemperature: 6570 258 | m_UseColorTemperature: 0 259 | m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} 260 | m_UseBoundingSphereOverride: 0 261 | m_UseViewFrustumForShadowCasterCull: 1 262 | m_ShadowRadius: 0 263 | m_ShadowAngle: 0 264 | --- !u!4 &705507995 265 | Transform: 266 | m_ObjectHideFlags: 0 267 | m_CorrespondingSourceObject: {fileID: 0} 268 | m_PrefabInstance: {fileID: 0} 269 | m_PrefabAsset: {fileID: 0} 270 | m_GameObject: {fileID: 705507993} 271 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 272 | m_LocalPosition: {x: 0, y: 3, z: 0} 273 | m_LocalScale: {x: 1, y: 1, z: 1} 274 | m_ConstrainProportionsScale: 0 275 | m_Children: [] 276 | m_Father: {fileID: 0} 277 | m_RootOrder: 1 278 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 279 | --- !u!1 &866696267 280 | GameObject: 281 | m_ObjectHideFlags: 0 282 | m_CorrespondingSourceObject: {fileID: 0} 283 | m_PrefabInstance: {fileID: 0} 284 | m_PrefabAsset: {fileID: 0} 285 | serializedVersion: 6 286 | m_Component: 287 | - component: {fileID: 866696271} 288 | - component: {fileID: 866696270} 289 | - component: {fileID: 866696269} 290 | - component: {fileID: 866696268} 291 | m_Layer: 0 292 | m_Name: Cube 293 | m_TagString: Untagged 294 | m_Icon: {fileID: 0} 295 | m_NavMeshLayer: 0 296 | m_StaticEditorFlags: 0 297 | m_IsActive: 0 298 | --- !u!65 &866696268 299 | BoxCollider: 300 | m_ObjectHideFlags: 0 301 | m_CorrespondingSourceObject: {fileID: 0} 302 | m_PrefabInstance: {fileID: 0} 303 | m_PrefabAsset: {fileID: 0} 304 | m_GameObject: {fileID: 866696267} 305 | m_Material: {fileID: 0} 306 | m_IsTrigger: 0 307 | m_Enabled: 1 308 | serializedVersion: 2 309 | m_Size: {x: 1, y: 1, z: 1} 310 | m_Center: {x: 0, y: 0, z: 0} 311 | --- !u!23 &866696269 312 | MeshRenderer: 313 | m_ObjectHideFlags: 0 314 | m_CorrespondingSourceObject: {fileID: 0} 315 | m_PrefabInstance: {fileID: 0} 316 | m_PrefabAsset: {fileID: 0} 317 | m_GameObject: {fileID: 866696267} 318 | m_Enabled: 1 319 | m_CastShadows: 1 320 | m_ReceiveShadows: 1 321 | m_DynamicOccludee: 1 322 | m_StaticShadowCaster: 0 323 | m_MotionVectors: 1 324 | m_LightProbeUsage: 1 325 | m_ReflectionProbeUsage: 1 326 | m_RayTracingMode: 2 327 | m_RayTraceProcedural: 0 328 | m_RenderingLayerMask: 1 329 | m_RendererPriority: 0 330 | m_Materials: 331 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 332 | m_StaticBatchInfo: 333 | firstSubMesh: 0 334 | subMeshCount: 0 335 | m_StaticBatchRoot: {fileID: 0} 336 | m_ProbeAnchor: {fileID: 0} 337 | m_LightProbeVolumeOverride: {fileID: 0} 338 | m_ScaleInLightmap: 1 339 | m_ReceiveGI: 1 340 | m_PreserveUVs: 0 341 | m_IgnoreNormalsForChartDetection: 0 342 | m_ImportantGI: 0 343 | m_StitchLightmapSeams: 1 344 | m_SelectedEditorRenderState: 3 345 | m_MinimumChartSize: 4 346 | m_AutoUVMaxDistance: 0.5 347 | m_AutoUVMaxAngle: 89 348 | m_LightmapParameters: {fileID: 0} 349 | m_SortingLayerID: 0 350 | m_SortingLayer: 0 351 | m_SortingOrder: 0 352 | m_AdditionalVertexStreams: {fileID: 0} 353 | --- !u!33 &866696270 354 | MeshFilter: 355 | m_ObjectHideFlags: 0 356 | m_CorrespondingSourceObject: {fileID: 0} 357 | m_PrefabInstance: {fileID: 0} 358 | m_PrefabAsset: {fileID: 0} 359 | m_GameObject: {fileID: 866696267} 360 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 361 | --- !u!4 &866696271 362 | Transform: 363 | m_ObjectHideFlags: 0 364 | m_CorrespondingSourceObject: {fileID: 0} 365 | m_PrefabInstance: {fileID: 0} 366 | m_PrefabAsset: {fileID: 0} 367 | m_GameObject: {fileID: 866696267} 368 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 369 | m_LocalPosition: {x: 0, y: 0.25, z: 0} 370 | m_LocalScale: {x: 0.25, y: 0.5, z: 0.25} 371 | m_ConstrainProportionsScale: 0 372 | m_Children: [] 373 | m_Father: {fileID: 0} 374 | m_RootOrder: 3 375 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 376 | --- !u!1 &963194225 377 | GameObject: 378 | m_ObjectHideFlags: 0 379 | m_CorrespondingSourceObject: {fileID: 0} 380 | m_PrefabInstance: {fileID: 0} 381 | m_PrefabAsset: {fileID: 0} 382 | serializedVersion: 6 383 | m_Component: 384 | - component: {fileID: 963194228} 385 | - component: {fileID: 963194227} 386 | - component: {fileID: 963194226} 387 | m_Layer: 0 388 | m_Name: Main Camera 389 | m_TagString: MainCamera 390 | m_Icon: {fileID: 0} 391 | m_NavMeshLayer: 0 392 | m_StaticEditorFlags: 0 393 | m_IsActive: 1 394 | --- !u!81 &963194226 395 | AudioListener: 396 | m_ObjectHideFlags: 0 397 | m_CorrespondingSourceObject: {fileID: 0} 398 | m_PrefabInstance: {fileID: 0} 399 | m_PrefabAsset: {fileID: 0} 400 | m_GameObject: {fileID: 963194225} 401 | m_Enabled: 1 402 | --- !u!20 &963194227 403 | Camera: 404 | m_ObjectHideFlags: 0 405 | m_CorrespondingSourceObject: {fileID: 0} 406 | m_PrefabInstance: {fileID: 0} 407 | m_PrefabAsset: {fileID: 0} 408 | m_GameObject: {fileID: 963194225} 409 | m_Enabled: 1 410 | serializedVersion: 2 411 | m_ClearFlags: 2 412 | m_BackGroundColor: {r: 0.023529414, g: 0.5568628, b: 0.9490197, a: 0} 413 | m_projectionMatrixMode: 1 414 | m_GateFitMode: 2 415 | m_FOVAxisMode: 0 416 | m_SensorSize: {x: 36, y: 24} 417 | m_LensShift: {x: 0, y: 0} 418 | m_FocalLength: 50 419 | m_NormalizedViewPortRect: 420 | serializedVersion: 2 421 | x: 0 422 | y: 0 423 | width: 1 424 | height: 1 425 | near clip plane: 0.01 426 | far clip plane: 1000 427 | field of view: 60 428 | orthographic: 0 429 | orthographic size: 5 430 | m_Depth: -1 431 | m_CullingMask: 432 | serializedVersion: 2 433 | m_Bits: 4294967295 434 | m_RenderingPath: -1 435 | m_TargetTexture: {fileID: 0} 436 | m_TargetDisplay: 0 437 | m_TargetEye: 3 438 | m_HDR: 1 439 | m_AllowMSAA: 0 440 | m_AllowDynamicResolution: 0 441 | m_ForceIntoRT: 0 442 | m_OcclusionCulling: 1 443 | m_StereoConvergence: 10 444 | m_StereoSeparation: 0.022 445 | --- !u!4 &963194228 446 | Transform: 447 | m_ObjectHideFlags: 0 448 | m_CorrespondingSourceObject: {fileID: 0} 449 | m_PrefabInstance: {fileID: 0} 450 | m_PrefabAsset: {fileID: 0} 451 | m_GameObject: {fileID: 963194225} 452 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 453 | m_LocalPosition: {x: 0, y: 0, z: -3} 454 | m_LocalScale: {x: 1, y: 1, z: 1} 455 | m_ConstrainProportionsScale: 0 456 | m_Children: [] 457 | m_Father: {fileID: 0} 458 | m_RootOrder: 0 459 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 460 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Shell.shader: -------------------------------------------------------------------------------- 1 | Shader "Custom/Water" { 2 | SubShader { 3 | Tags { 4 | "LightMode" = "ForwardBase" 5 | } 6 | 7 | Pass { 8 | // Since we can see through the shells technically, we don't want backface culling because then there will be occasional 9 | // mysterious random holes in the mesh and it'll look really weird 10 | // also backface culling is when we do not render triangles that are on the backside of a mesh, because that would be a waste 11 | // of resources since generally you can't see those triangles but in this case we can, so we disable the backface culling 12 | Cull Off 13 | 14 | CGPROGRAM 15 | 16 | // These inform the shader what functions to use for the rendering pipeline, since below my vertex shader is named 'vp' then we tell the shader 17 | // to use 'vp' for the vertex shader and 'fp' for the fragment shader 18 | #pragma vertex vp 19 | #pragma fragment fp 20 | 21 | // Unity has a lot of built in useful graphics functions, all this stuff is on github which you can look at and read there aren't really any 22 | // docs on it lmao 23 | #include "UnityPBSLighting.cginc" 24 | #include "AutoLight.cginc" 25 | 26 | // This is the struct that holds all the data that vertices contain when being passed into the gpu, such as the initial vertex position, 27 | // the normal, and the uv coordinates 28 | struct VertexData { 29 | float4 vertex : POSITION; 30 | float3 normal : NORMAL; 31 | float2 uv : TEXCOORD0; 32 | }; 33 | 34 | // this is called 'v2f' which I call it that cause it stands for like 'vertex to fragment' idk i think it's a cool simple name you can name it anything!!! 35 | // This holds all the interpolated information that is passed into the fragment shader such as the screenspace position, the uv coordinates, the interpolated normals, 36 | // and the world position which even though that was not initially passed in with the vertex data we can still calculate it and pass it over to the fragment shader 37 | // because we can send over anything to be interpolated, it doesn't have to be only what came in with the vertices 38 | struct v2f { 39 | float4 pos : SV_POSITION; 40 | float2 uv : TEXCOORD0; 41 | float3 normal : TEXCOORD1; 42 | float3 worldPos : TEXCOORD2; 43 | }; 44 | 45 | int _ShellIndex; // This is the current shell layer being operated on, it ranges from 0 -> _ShellCount 46 | int _ShellCount; // This is the total number of shells, useful for normalizing the shell index 47 | float _ShellLength; // This is the amount of distance that the shells cover, if this is 1 then the shells will span across 1 world space unit 48 | float _Density; // This is the density of the strands, used for initializing the noise 49 | float _NoiseMin, _NoiseMax; // This is the range of possible hair lengths, which the hash then interpolates between 50 | float _Thickness; // This is the thickness of the hair strand 51 | float _Attenuation; // This is the exponent on the shell height for lighting calculations to fake ambient occlusion (the lack of ambient light) 52 | float _OcclusionBias; // This is an additive constant on the ambient occlusion in order to make the lighting less harsh and maybe kind of fake in-scattering 53 | float _ShellDistanceAttenuation; // This is the exponent on determining how far to push the shell outwards, which biases shells downwards or upwards towards the minimum/maximum distance covered 54 | float _Curvature; // This is the exponent on the physics displacement attenuation, a higher value controls how stiff the hair is 55 | float _DisplacementStrength; // The strength of the displacement (very complicated) 56 | float3 _ShellColor; // The color of the shells (very complicated) 57 | float3 _ShellDirection; // The direction the shells are going to point towards, this is updated by the CPU each frame based on user input/movement 58 | 59 | 60 | // This is a hashing function that takes in an unsigned integer seed and shuffles it around to make it seem random 61 | // The output is in the range 0 to 1, so you do not have to worry about that and can easily convert it to any other 62 | // range you desire by multiplying the output with any number. 63 | float hash(uint n) { 64 | // integer hash copied from Hugo Elias 65 | n = (n << 13U) ^ n; 66 | n = n * (n * n * 15731U + 0x789221U) + 0x1376312589U; 67 | return float(n & uint(0x7fffffffU)) / float(0x7fffffff); 68 | } 69 | 70 | 71 | // This is the vertex shader which controls the output to the fragment shader, values outputted here are interpolated across triangles 72 | // It also handles finalizing the positions of vertices, which is why we are able to extrude our shells here in the vertex shader instead 73 | // of doing that on the cpu (cringe processing unit) which would be really cringe and also slow 74 | v2f vp(VertexData v) { 75 | v2f i; 76 | 77 | // This is the normalized height of the shell, so instead of like 0, 1, 2, 3, etc. it ranges from 0 -> 1 78 | float shellHeight = (float)_ShellIndex / (float)_ShellCount; 79 | 80 | // Since the height is now normalized, this exponent will behave a bit differently when applied to a number between 0 and 1, instead of 81 | // sending it off to infinity it instead biases the number closer to 0 or 1 depending on if the exponent is <1 or >1 82 | // I recommend looking at this kind of math in desmos so you can properly visualize how the exponent is affecting these numbers 83 | shellHeight = pow(shellHeight, _ShellDistanceAttenuation); 84 | 85 | // This is the line of code that extrudes the shells along the base vertex normal 86 | // Since the normal is a normalized vector (yes i know the terminology is confusing) then multiplying this changes 87 | // The displacement direction to align with the normal, this is then multiplied with the shell length to control how far the 88 | // shell extrudes and then it is lastly multiplied with the normalized height so that the shell falls into its proper place 89 | // in the layer cake of meshes 90 | v.vertex.xyz += v.normal.xyz * _ShellLength * shellHeight; 91 | 92 | // Since we are preparing to send data over to the fragment shader, we finalize the normal by converting it to world space 93 | // and it will be interpolated across triangles in the fragment shader, you kinda don't really need to worry about this since it just works (tm) 94 | i.normal = normalize(UnityObjectToWorldNormal(v.normal)); 95 | 96 | // This is for the "physics" this is what controls the curvature/stiffness of the hair, the higher the exponent the more the displacement 97 | // will only affect the top of the hair, this is something you can visualize in desmos pretty easily just like the shell height distance 98 | // attenuation calculation above. This is actually kind of a really common operation in graphics and why we keep most values normalized to 0-1 99 | float k = pow(shellHeight, _Curvature); 100 | 101 | // This displaces the shells after they have extruded according to the direction the cpu has told the shader we are moving, at rest this is going 102 | // to displace the hair downwards and since it's anchored at the root due to the variable 'k' above, only the tips of the hair will fall downwards 103 | v.vertex.xyz += _ShellDirection * k * _DisplacementStrength; 104 | 105 | // These are unused parameters but they are useful to have for playing around, such as maybe using the position of the object to generate 106 | // noise instead of the uv coordinates if you want to have a wacky effect where the ball changes its hair as it moves idk man 107 | i.worldPos = mul(unity_ObjectToWorld, v.vertex); 108 | i.pos = UnityObjectToClipPos(v.vertex); 109 | 110 | // This passes the vertex uvs into the fragment shader to be interpolated 111 | i.uv = v.uv; 112 | 113 | return i; 114 | } 115 | 116 | float4 fp(v2f i) : SV_TARGET { 117 | // As explained in the video, this multiplies the uv coordinates to create more strands because it generates more seeds 118 | float2 newUV = i.uv * _Density; 119 | 120 | // In order to operate in the local space uv coordinates after expanding them to a wider range, we take the fractional component 121 | // since uv coordinates by default range from 0 to 1 so then the fractional part is in 0 to 1 so it just works (tm) also we multiply 122 | // by 2 and subtract 1 to convert from 0 to 1 to -1 to 1 in order to shift the origin of these local uvs to the center for a calculation below 123 | float2 localUV = frac(newUV) * 2 - 1; 124 | 125 | // This is the local distance from the local center, the pythagorean distance technically 126 | float localDistanceFromCenter = length(localUV); 127 | 128 | // This casts the above uvs to uint so it can be more easily passed into the hashing function without doing a ton of annoying casts because 129 | // type casting can be really annoying and really ruin your day and you will generally not notice for potentially hours sometimes 130 | uint2 tid = newUV; 131 | uint seed = tid.x + 100 * tid.y + 100 * 10; 132 | 133 | // This also just casts the integer uniforms to floats for easier fractional computation below, this is technically unnecessary we could just say (float)_ShellIndex 134 | // but it's annoying to do that a lot so instead we use a temporary float variable 135 | float shellIndex = _ShellIndex; 136 | float shellCount = _ShellCount; 137 | 138 | // This is kind of complicated, we generate a random number from our seed which returns a number from 0 -> 1, which is then used 139 | // as an interpolator argument between the minimum noise value and the maximum noise value, which controls how short the hair can be 140 | // and how long the hair can be. We could just use the hash output itself, but this gives a little bit more control over the appearance 141 | // and length of the hair instead of giving all the power to the rng 142 | float rand = lerp(_NoiseMin, _NoiseMax, hash(seed)); 143 | 144 | // This is the normalized shell height as described above in the vertex shader 145 | float h = shellIndex / shellCount; 146 | 147 | // This is the condition for discarding pixels, if the distance from the local center exceeds the thickness parameter we discard it, 148 | // and we also modify the thickness and make it thinner as height increases based on the height of the blade occupying this space that way 149 | // there aren't like weird hard cutoff tapers, you can try deleting the rand or replacing it with like 1 or something to see how this changes 150 | // the appearance of the grass or hair 151 | int outsideThickness = (localDistanceFromCenter) > (_Thickness * (rand - h)); 152 | 153 | // This culls the pixel if it is outside the thickness of the strand, it also ensures that the base shell is fully opaque that way there aren't 154 | // any real holes in the mesh, although there's certainly better ways to do that 155 | if (outsideThickness && _ShellIndex > 0) discard; 156 | 157 | // This is the lighting output since at this point we have determined we are not discarding the pixel, so we have to color it 158 | // This lighting model is a modification of the Valve's half lambert as described in the video. It is not physically based, but it looks cool I think. 159 | // What's going on here is we take the dot product between the normal and the direction of the main Unity light source (the sun) which returns a value 160 | // between -1 to 1, which is then clamped to 0 to 1 by the DotClamped function provided by Unity, we then convert the 0 to 1 to 0.5 to 1 with the following 161 | // multiplication and addition. 162 | float ndotl = DotClamped(i.normal, _WorldSpaceLightPos0) * 0.5f + 0.5f; 163 | 164 | // Valve's half lambert squares the ndotl output, which is going to bring values down, once again you can see how this looks on desmos by graphing x^2 165 | ndotl = ndotl * ndotl; 166 | 167 | // In order to fake ambient occlusion, we take the normalized shell height and take it to an attenuation exponent, which will do the same exact thing 168 | // I have explained that exponents will do to numbers between 0 and 1. A higher attenuation value means the occlusion of ambient light will become much stronger, 169 | // as the number is brought down closer to 0, and if we multiply a color with 0 then it'll be black aka in shadow. 170 | float ambientOcclusion = pow(h, _Attenuation); 171 | 172 | // This is a additive bias on the ambient occlusion, if you don't want the gradient to go towards black then you can add a bit to this in order to prevent 173 | // such a harsh gradient transition 174 | ambientOcclusion += _OcclusionBias; 175 | 176 | // Since the bias can push the ambient occlusion term above 1, we want to clamp it to 0 to 1 in order to prevent breaking the laws of physics by producing 177 | // more light than was received since if you multiply a color with a number greater than 1, it'll become brighter, and that just physically does not make 178 | // sense in this context 179 | ambientOcclusion = saturate(ambientOcclusion); 180 | 181 | // We put it all together down here by multiplying the color with Valve's half lambert and our fake ambient occlusion. You can remove some of these terms 182 | // to see how it changes the lighting and shadowing. 183 | return float4(_ShellColor * ndotl * ambientOcclusion, 1.0); 184 | } 185 | 186 | // This indicates the end of the CG code block 187 | ENDCG 188 | } 189 | } 190 | } -------------------------------------------------------------------------------- /Assets/Shell.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ebce530a4f00d2f45a0afa93a5c575e0 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | preprocessorOverride: 0 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Assets/SimpleCameraController.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace UnityTemplateProjects 4 | { 5 | public class SimpleCameraController : MonoBehaviour 6 | { 7 | class CameraState 8 | { 9 | public float yaw; 10 | public float pitch; 11 | public float roll; 12 | public float x; 13 | public float y; 14 | public float z; 15 | 16 | public void SetFromTransform(Transform t) 17 | { 18 | pitch = t.eulerAngles.x; 19 | yaw = t.eulerAngles.y; 20 | roll = t.eulerAngles.z; 21 | x = t.position.x; 22 | y = t.position.y; 23 | z = t.position.z; 24 | } 25 | 26 | public void Translate(Vector3 translation) 27 | { 28 | Vector3 rotatedTranslation = Quaternion.Euler(pitch, yaw, roll) * translation; 29 | 30 | x += rotatedTranslation.x; 31 | y += rotatedTranslation.y; 32 | z += rotatedTranslation.z; 33 | } 34 | 35 | public void LerpTowards(CameraState target, float positionLerpPct, float rotationLerpPct) 36 | { 37 | yaw = Mathf.Lerp(yaw, target.yaw, rotationLerpPct); 38 | pitch = Mathf.Lerp(pitch, target.pitch, rotationLerpPct); 39 | roll = Mathf.Lerp(roll, target.roll, rotationLerpPct); 40 | 41 | x = Mathf.Lerp(x, target.x, positionLerpPct); 42 | y = Mathf.Lerp(y, target.y, positionLerpPct); 43 | z = Mathf.Lerp(z, target.z, positionLerpPct); 44 | } 45 | 46 | public void UpdateTransform(Transform t) 47 | { 48 | t.eulerAngles = new Vector3(pitch, yaw, roll); 49 | t.position = new Vector3(x, y, z); 50 | } 51 | } 52 | 53 | CameraState m_TargetCameraState = new CameraState(); 54 | CameraState m_InterpolatingCameraState = new CameraState(); 55 | 56 | [Header("Movement Settings")] 57 | [Tooltip("Exponential boost factor on translation, controllable by mouse wheel.")] 58 | public float boost = 3.5f; 59 | 60 | [Tooltip("Time it takes to interpolate camera position 99% of the way to the target."), Range(0.001f, 1f)] 61 | public float positionLerpTime = 0.2f; 62 | 63 | [Header("Rotation Settings")] 64 | [Tooltip("X = Change in mouse position.\nY = Multiplicative factor for camera rotation.")] 65 | public AnimationCurve mouseSensitivityCurve = new AnimationCurve(new Keyframe(0f, 0.5f, 0f, 5f), new Keyframe(1f, 2.5f, 0f, 0f)); 66 | 67 | [Tooltip("Time it takes to interpolate camera rotation 99% of the way to the target."), Range(0.001f, 1f)] 68 | public float rotationLerpTime = 0.01f; 69 | 70 | [Tooltip("Whether or not to invert our Y axis for mouse input to rotation.")] 71 | public bool invertY = false; 72 | 73 | void OnEnable() 74 | { 75 | m_TargetCameraState.SetFromTransform(transform); 76 | m_InterpolatingCameraState.SetFromTransform(transform); 77 | } 78 | 79 | Vector3 GetInputTranslationDirection() 80 | { 81 | Vector3 direction = new Vector3(); 82 | if (Input.GetKey(KeyCode.W)) 83 | { 84 | direction += Vector3.forward; 85 | } 86 | if (Input.GetKey(KeyCode.S)) 87 | { 88 | direction += Vector3.back; 89 | } 90 | if (Input.GetKey(KeyCode.A)) 91 | { 92 | direction += Vector3.left; 93 | } 94 | if (Input.GetKey(KeyCode.D)) 95 | { 96 | direction += Vector3.right; 97 | } 98 | if (Input.GetKey(KeyCode.Q)) 99 | { 100 | direction += Vector3.down; 101 | } 102 | if (Input.GetKey(KeyCode.E)) 103 | { 104 | direction += Vector3.up; 105 | } 106 | return direction; 107 | } 108 | 109 | void Update() 110 | { 111 | // Exit Sample 112 | if (Input.GetKey(KeyCode.Escape)) 113 | { 114 | Application.Quit(); 115 | #if UNITY_EDITOR 116 | UnityEditor.EditorApplication.isPlaying = false; 117 | #endif 118 | } 119 | 120 | // Hide and lock cursor when right mouse button pressed 121 | if (Input.GetMouseButtonDown(1)) 122 | { 123 | Cursor.lockState = CursorLockMode.Locked; 124 | } 125 | 126 | // Unlock and show cursor when right mouse button released 127 | if (Input.GetMouseButtonUp(1)) 128 | { 129 | Cursor.visible = true; 130 | Cursor.lockState = CursorLockMode.None; 131 | } 132 | 133 | // Rotation 134 | if (Input.GetMouseButton(1)) 135 | { 136 | var mouseMovement = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y") * (invertY ? 1 : -1)); 137 | 138 | var mouseSensitivityFactor = mouseSensitivityCurve.Evaluate(mouseMovement.magnitude); 139 | 140 | m_TargetCameraState.yaw += mouseMovement.x * mouseSensitivityFactor; 141 | m_TargetCameraState.pitch += mouseMovement.y * mouseSensitivityFactor; 142 | } 143 | 144 | // Translation 145 | var translation = GetInputTranslationDirection() * Time.deltaTime; 146 | 147 | // Speed up movement when shift key held 148 | if (Input.GetKey(KeyCode.LeftShift)) 149 | { 150 | translation *= 10.0f; 151 | } 152 | 153 | // Modify movement by a boost factor (defined in Inspector and modified in play mode through the mouse scroll wheel) 154 | boost += Input.mouseScrollDelta.y * 0.2f; 155 | translation *= Mathf.Pow(2.0f, boost); 156 | 157 | m_TargetCameraState.Translate(translation); 158 | 159 | // Framerate-independent interpolation 160 | // Calculate the lerp amount, such that we get 99% of the way to our target in the specified time 161 | var positionLerpPct = 1f - Mathf.Exp((Mathf.Log(1f - 0.99f) / positionLerpTime) * Time.deltaTime); 162 | var rotationLerpPct = 1f - Mathf.Exp((Mathf.Log(1f - 0.99f) / rotationLerpTime) * Time.deltaTime); 163 | m_InterpolatingCameraState.LerpTowards(m_TargetCameraState, positionLerpPct, rotationLerpPct); 164 | 165 | m_InterpolatingCameraState.UpdateTransform(transform); 166 | } 167 | } 168 | 169 | } -------------------------------------------------------------------------------- /Assets/SimpleCameraController.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d13497d8eee075b43a474ca52848c318 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/SimpleShell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | 6 | public class SimpleShell : MonoBehaviour { 7 | public Mesh shellMesh; 8 | public Shader shellShader; 9 | 10 | public bool updateStatics = true; 11 | 12 | // These variables and what they do are explained on the shader code side of things 13 | // You can see below (line 70) which shader uniforms match up with these variables 14 | [Range(1, 256)] 15 | public int shellCount = 16; 16 | 17 | [Range(0.0f, 1.0f)] 18 | public float shellLength = 0.15f; 19 | 20 | [Range(0.01f, 3.0f)] 21 | public float distanceAttenuation = 1.0f; 22 | 23 | [Range(1.0f, 1000.0f)] 24 | public float density = 100.0f; 25 | 26 | [Range(0.0f, 1.0f)] 27 | public float noiseMin = 0.0f; 28 | 29 | [Range(0.0f, 1.0f)] 30 | public float noiseMax = 1.0f; 31 | 32 | [Range(0.0f, 10.0f)] 33 | public float thickness = 1.0f; 34 | 35 | [Range(0.0f, 10.0f)] 36 | public float curvature = 1.0f; 37 | 38 | [Range(0.0f, 1.0f)] 39 | public float displacementStrength = 0.1f; 40 | 41 | public Color shellColor; 42 | 43 | [Range(0.0f, 5.0f)] 44 | public float occlusionAttenuation = 1.0f; 45 | 46 | [Range(0.0f, 1.0f)] 47 | public float occlusionBias = 0.0f; 48 | 49 | private Material shellMaterial; 50 | private GameObject[] shells; 51 | 52 | private Vector3 displacementDirection = new Vector3(0, 0, 0); 53 | 54 | void OnEnable() { 55 | shellMaterial = new Material(shellShader); 56 | 57 | shells = new GameObject[shellCount]; 58 | 59 | for (int i = 0; i < shellCount; ++i) { 60 | shells[i] = new GameObject("Shell " + i.ToString()); 61 | shells[i].AddComponent(); 62 | shells[i].AddComponent(); 63 | 64 | shells[i].GetComponent().mesh = shellMesh; 65 | shells[i].GetComponent().material = shellMaterial; 66 | shells[i].transform.SetParent(this.transform, false); 67 | 68 | // In order to tell the GPU what its uniform variable values should be, we use these "Set" functions which will set the 69 | // values over on the GPU. 70 | shells[i].GetComponent().material.SetInt("_ShellCount", shellCount); 71 | shells[i].GetComponent().material.SetInt("_ShellIndex", i); 72 | shells[i].GetComponent().material.SetFloat("_ShellLength", shellLength); 73 | shells[i].GetComponent().material.SetFloat("_Density", density); 74 | shells[i].GetComponent().material.SetFloat("_Thickness", thickness); 75 | shells[i].GetComponent().material.SetFloat("_Attenuation", occlusionAttenuation); 76 | shells[i].GetComponent().material.SetFloat("_ShellDistanceAttenuation", distanceAttenuation); 77 | shells[i].GetComponent().material.SetFloat("_Curvature", curvature); 78 | shells[i].GetComponent().material.SetFloat("_DisplacementStrength", displacementStrength); 79 | shells[i].GetComponent().material.SetFloat("_OcclusionBias", occlusionBias); 80 | shells[i].GetComponent().material.SetFloat("_NoiseMin", noiseMin); 81 | shells[i].GetComponent().material.SetFloat("_NoiseMax", noiseMax); 82 | shells[i].GetComponent().material.SetVector("_ShellColor", shellColor); 83 | } 84 | } 85 | 86 | void Update() { 87 | float velocity = 1.0f; 88 | 89 | Vector3 direction = new Vector3(0, 0, 0); 90 | Vector3 oppositeDirection = new Vector3(0, 0, 0); 91 | 92 | // This determines the direction we are moving from wasd input. It's probably a better idea to use Unity's input system, since it handles 93 | // all possible input devices at once, but I did it the old fashioned way for simplicity. 94 | direction.x = Convert.ToInt32(Input.GetKey(KeyCode.D)) - Convert.ToInt32(Input.GetKey(KeyCode.A)); 95 | direction.y = Convert.ToInt32(Input.GetKey(KeyCode.W)) - Convert.ToInt32(Input.GetKey(KeyCode.S)); 96 | direction.z = Convert.ToInt32(Input.GetKey(KeyCode.Q)) - Convert.ToInt32(Input.GetKey(KeyCode.E)); 97 | 98 | // This moves the ball according the input direction 99 | Vector3 currentPosition = this.transform.position; 100 | direction.Normalize(); 101 | currentPosition += direction * velocity * Time.deltaTime; 102 | this.transform.position = currentPosition; 103 | 104 | // This changes the direction that the hair is going to point in, when we are not inputting any movements then we subtract the gravity vector 105 | // The gravity vector just being (0, -1, 0) 106 | displacementDirection -= direction * Time.deltaTime * 10.0f; 107 | if (direction == Vector3.zero) 108 | displacementDirection.y -= 10.0f * Time.deltaTime; 109 | 110 | if (displacementDirection.magnitude > 1) displacementDirection.Normalize(); 111 | 112 | // In order to avoid setting this variable on every single shell's material instance, we instead set this is as a global shader variable 113 | // That every shader will have access to, which sounds bad, because it kind of is, but just be aware of your global variable names and it's not a big deal. 114 | // Regardless, setting the variable one time instead of 256 times is just better. 115 | Shader.SetGlobalVector("_ShellDirection", displacementDirection); 116 | 117 | // Generally it is bad practice to update statics that do not need to be updated every frame 118 | // You can see the performance difference between updating 256 shells of statics by disabling the updateStatics parameter in the script 119 | // So it obviously matters at the extreme ends, but something above like setting the directional vector each frame is not going to make an insane diff 120 | // You will see in my other shaders and scripts that I do not always do this, because I'm lazy, but it's best practice to not update what doesn't need to be 121 | // updated. 122 | if (updateStatics) { 123 | for (int i = 0; i < shellCount; ++i) { 124 | shells[i].GetComponent().material.SetInt("_ShellCount", shellCount); 125 | shells[i].GetComponent().material.SetInt("_ShellIndex", i); 126 | shells[i].GetComponent().material.SetFloat("_ShellLength", shellLength); 127 | shells[i].GetComponent().material.SetFloat("_Density", density); 128 | shells[i].GetComponent().material.SetFloat("_Thickness", thickness); 129 | shells[i].GetComponent().material.SetFloat("_Attenuation", occlusionAttenuation); 130 | shells[i].GetComponent().material.SetFloat("_ShellDistanceAttenuation", distanceAttenuation); 131 | shells[i].GetComponent().material.SetFloat("_Curvature", curvature); 132 | shells[i].GetComponent().material.SetFloat("_DisplacementStrength", displacementStrength); 133 | shells[i].GetComponent().material.SetFloat("_OcclusionBias", occlusionBias); 134 | shells[i].GetComponent().material.SetFloat("_NoiseMin", noiseMin); 135 | shells[i].GetComponent().material.SetFloat("_NoiseMax", noiseMax); 136 | shells[i].GetComponent().material.SetVector("_ShellColor", shellColor); 137 | } 138 | } 139 | } 140 | 141 | void OnDisable() { 142 | for (int i = 0; i < shells.Length; ++i) { 143 | Destroy(shells[i]); 144 | } 145 | 146 | shells = null; 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /Assets/SimpleShell.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f7e1f48ed03b04c4dba2b9d3d63eee53 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Acerola 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | m_FrictionType: 0 32 | m_EnableEnhancedDeterminism: 0 33 | m_EnableUnifiedHeightmaps: 1 34 | m_DefaultMaxAngluarSpeed: 7 35 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | m_configObjects: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_SerializeInlineMappingsOnOneLine: 1 31 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | m_LogWhenShaderIsCompiled: 0 63 | m_AllowEnlightenSupportForUpgradedProject: 0 64 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreReleasePackages: 0 16 | m_EnablePackageDependencies: 0 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | m_SeeAllPackageVersions: 0 20 | oneTimeWarningShown: 0 21 | m_Registries: 22 | - m_Id: main 23 | m_Name: 24 | m_Url: https://packages.unity.com 25 | m_Scopes: [] 26 | m_IsDefault: 1 27 | m_Capabilities: 7 28 | m_ConfigSource: 0 29 | m_UserSelectedRegistryName: 30 | m_UserAddingNewScopedRegistry: 0 31 | m_RegistryInfoDraft: 32 | m_Modified: 0 33 | m_ErrorMessage: 34 | m_UserModificationsInstanceId: -826 35 | m_OriginalInstanceId: -828 36 | m_LoadAssets: 0 37 | -------------------------------------------------------------------------------- /ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "m_Name": "Settings", 3 | "m_Path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json", 4 | "m_Dictionary": { 5 | "m_DictionaryValues": [] 6 | } 7 | } -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 1 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 23 7 | productGUID: 0937d7facdb0bf046852bcd6fbbf1268 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: Shell Texturing 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1920 46 | defaultScreenHeight: 1080 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 1 51 | m_MTRendering: 1 52 | mipStripping: 0 53 | numberOfMipsStripped: 0 54 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 55 | iosShowActivityIndicatorOnLoading: -1 56 | androidShowActivityIndicatorOnLoading: -1 57 | iosUseCustomAppBackgroundBehavior: 0 58 | iosAllowHTTPDownload: 1 59 | allowedAutorotateToPortrait: 1 60 | allowedAutorotateToPortraitUpsideDown: 1 61 | allowedAutorotateToLandscapeRight: 1 62 | allowedAutorotateToLandscapeLeft: 1 63 | useOSAutorotation: 1 64 | use32BitDisplayBuffer: 1 65 | preserveFramebufferAlpha: 0 66 | disableDepthAndStencilBuffers: 0 67 | androidStartInFullscreen: 1 68 | androidRenderOutsideSafeArea: 1 69 | androidUseSwappy: 1 70 | androidBlitType: 0 71 | androidResizableWindow: 0 72 | androidDefaultWindowWidth: 1920 73 | androidDefaultWindowHeight: 1080 74 | androidMinimumWindowWidth: 400 75 | androidMinimumWindowHeight: 300 76 | androidFullscreenMode: 1 77 | defaultIsNativeResolution: 1 78 | macRetinaSupport: 1 79 | runInBackground: 1 80 | captureSingleScreen: 0 81 | muteOtherAudioSources: 0 82 | Prepare IOS For Recording: 0 83 | Force IOS Speakers When Recording: 0 84 | deferSystemGesturesMode: 0 85 | hideHomeButton: 0 86 | submitAnalytics: 1 87 | usePlayerLog: 1 88 | bakeCollisionMeshes: 0 89 | forceSingleInstance: 0 90 | useFlipModelSwapchain: 1 91 | resizableWindow: 0 92 | useMacAppStoreValidation: 0 93 | macAppStoreCategory: public.app-category.games 94 | gpuSkinning: 1 95 | xboxPIXTextureCapture: 0 96 | xboxEnableAvatar: 0 97 | xboxEnableKinect: 0 98 | xboxEnableKinectAutoTracking: 0 99 | xboxEnableFitness: 0 100 | visibleInBackground: 1 101 | allowFullscreenSwitch: 1 102 | fullscreenMode: 1 103 | xboxSpeechDB: 0 104 | xboxEnableHeadOrientation: 0 105 | xboxEnableGuest: 0 106 | xboxEnablePIXSampling: 0 107 | metalFramebufferOnly: 0 108 | xboxOneResolution: 0 109 | xboxOneSResolution: 0 110 | xboxOneXResolution: 3 111 | xboxOneMonoLoggingLevel: 0 112 | xboxOneLoggingLevel: 1 113 | xboxOneDisableEsram: 0 114 | xboxOneEnableTypeOptimization: 0 115 | xboxOnePresentImmediateThreshold: 0 116 | switchQueueCommandMemory: 0 117 | switchQueueControlMemory: 16384 118 | switchQueueComputeMemory: 262144 119 | switchNVNShaderPoolsGranularity: 33554432 120 | switchNVNDefaultPoolsGranularity: 16777216 121 | switchNVNOtherPoolsGranularity: 16777216 122 | switchNVNMaxPublicTextureIDCount: 0 123 | switchNVNMaxPublicSamplerIDCount: 0 124 | stadiaPresentMode: 0 125 | stadiaTargetFramerate: 0 126 | vulkanNumSwapchainBuffers: 3 127 | vulkanEnableSetSRGBWrite: 0 128 | vulkanEnablePreTransform: 1 129 | vulkanEnableLateAcquireNextImage: 0 130 | vulkanEnableCommandBufferRecycling: 1 131 | m_SupportedAspectRatios: 132 | 4:3: 1 133 | 5:4: 1 134 | 16:10: 1 135 | 16:9: 1 136 | Others: 1 137 | bundleVersion: 0.1 138 | preloadedAssets: [] 139 | metroInputSource: 0 140 | wsaTransparentSwapchain: 0 141 | m_HolographicPauseOnTrackingLoss: 1 142 | xboxOneDisableKinectGpuReservation: 1 143 | xboxOneEnable7thCore: 1 144 | vrSettings: 145 | enable360StereoCapture: 0 146 | isWsaHolographicRemotingEnabled: 0 147 | enableFrameTimingStats: 0 148 | enableOpenGLProfilerGPURecorders: 1 149 | useHDRDisplay: 0 150 | D3DHDRBitDepth: 0 151 | m_ColorGamuts: 00000000 152 | targetPixelDensity: 30 153 | resolutionScalingMode: 0 154 | resetResolutionOnWindowResize: 0 155 | androidSupportedAspectRatio: 1 156 | androidMaxAspectRatio: 2.1 157 | applicationIdentifier: {} 158 | buildNumber: 159 | Standalone: 0 160 | iPhone: 0 161 | tvOS: 0 162 | overrideDefaultApplicationIdentifier: 0 163 | AndroidBundleVersionCode: 1 164 | AndroidMinSdkVersion: 22 165 | AndroidTargetSdkVersion: 0 166 | AndroidPreferredInstallLocation: 1 167 | aotOptions: 168 | stripEngineCode: 1 169 | iPhoneStrippingLevel: 0 170 | iPhoneScriptCallOptimization: 0 171 | ForceInternetPermission: 0 172 | ForceSDCardPermission: 0 173 | CreateWallpaper: 0 174 | APKExpansionFiles: 0 175 | keepLoadedShadersAlive: 0 176 | StripUnusedMeshComponents: 1 177 | VertexChannelCompressionMask: 4054 178 | iPhoneSdkVersion: 988 179 | iOSTargetOSVersionString: 11.0 180 | tvOSSdkVersion: 0 181 | tvOSRequireExtendedGameController: 0 182 | tvOSTargetOSVersionString: 11.0 183 | uIPrerenderedIcon: 0 184 | uIRequiresPersistentWiFi: 0 185 | uIRequiresFullScreen: 1 186 | uIStatusBarHidden: 1 187 | uIExitOnSuspend: 0 188 | uIStatusBarStyle: 0 189 | appleTVSplashScreen: {fileID: 0} 190 | appleTVSplashScreen2x: {fileID: 0} 191 | tvOSSmallIconLayers: [] 192 | tvOSSmallIconLayers2x: [] 193 | tvOSLargeIconLayers: [] 194 | tvOSLargeIconLayers2x: [] 195 | tvOSTopShelfImageLayers: [] 196 | tvOSTopShelfImageLayers2x: [] 197 | tvOSTopShelfImageWideLayers: [] 198 | tvOSTopShelfImageWideLayers2x: [] 199 | iOSLaunchScreenType: 0 200 | iOSLaunchScreenPortrait: {fileID: 0} 201 | iOSLaunchScreenLandscape: {fileID: 0} 202 | iOSLaunchScreenBackgroundColor: 203 | serializedVersion: 2 204 | rgba: 0 205 | iOSLaunchScreenFillPct: 100 206 | iOSLaunchScreenSize: 100 207 | iOSLaunchScreenCustomXibPath: 208 | iOSLaunchScreeniPadType: 0 209 | iOSLaunchScreeniPadImage: {fileID: 0} 210 | iOSLaunchScreeniPadBackgroundColor: 211 | serializedVersion: 2 212 | rgba: 0 213 | iOSLaunchScreeniPadFillPct: 100 214 | iOSLaunchScreeniPadSize: 100 215 | iOSLaunchScreeniPadCustomXibPath: 216 | iOSLaunchScreenCustomStoryboardPath: 217 | iOSLaunchScreeniPadCustomStoryboardPath: 218 | iOSDeviceRequirements: [] 219 | iOSURLSchemes: [] 220 | macOSURLSchemes: [] 221 | iOSBackgroundModes: 0 222 | iOSMetalForceHardShadows: 0 223 | metalEditorSupport: 1 224 | metalAPIValidation: 1 225 | iOSRenderExtraFrameOnPause: 0 226 | iosCopyPluginsCodeInsteadOfSymlink: 0 227 | appleDeveloperTeamID: 228 | iOSManualSigningProvisioningProfileID: 229 | tvOSManualSigningProvisioningProfileID: 230 | iOSManualSigningProvisioningProfileType: 0 231 | tvOSManualSigningProvisioningProfileType: 0 232 | appleEnableAutomaticSigning: 0 233 | iOSRequireARKit: 0 234 | iOSAutomaticallyDetectAndAddCapabilities: 1 235 | appleEnableProMotion: 0 236 | shaderPrecisionModel: 0 237 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 238 | templatePackageId: com.unity.template.3d@8.1.3 239 | templateDefaultScene: Assets/Scenes/SampleScene.unity 240 | useCustomMainManifest: 0 241 | useCustomLauncherManifest: 0 242 | useCustomMainGradleTemplate: 0 243 | useCustomLauncherGradleManifest: 0 244 | useCustomBaseGradleTemplate: 0 245 | useCustomGradlePropertiesTemplate: 0 246 | useCustomProguardFile: 0 247 | AndroidTargetArchitectures: 1 248 | AndroidTargetDevices: 0 249 | AndroidSplashScreenScale: 0 250 | androidSplashScreen: {fileID: 0} 251 | AndroidKeystoreName: 252 | AndroidKeyaliasName: 253 | AndroidBuildApkPerCpuArchitecture: 0 254 | AndroidTVCompatibility: 0 255 | AndroidIsGame: 1 256 | AndroidEnableTango: 0 257 | androidEnableBanner: 1 258 | androidUseLowAccuracyLocation: 0 259 | androidUseCustomKeystore: 0 260 | m_AndroidBanners: 261 | - width: 320 262 | height: 180 263 | banner: {fileID: 0} 264 | androidGamepadSupportLevel: 0 265 | chromeosInputEmulation: 1 266 | AndroidMinifyWithR8: 0 267 | AndroidMinifyRelease: 0 268 | AndroidMinifyDebug: 0 269 | AndroidValidateAppBundleSize: 1 270 | AndroidAppBundleSizeToValidate: 150 271 | m_BuildTargetIcons: [] 272 | m_BuildTargetPlatformIcons: [] 273 | m_BuildTargetBatching: 274 | - m_BuildTarget: Standalone 275 | m_StaticBatching: 1 276 | m_DynamicBatching: 0 277 | - m_BuildTarget: tvOS 278 | m_StaticBatching: 1 279 | m_DynamicBatching: 0 280 | - m_BuildTarget: Android 281 | m_StaticBatching: 1 282 | m_DynamicBatching: 0 283 | - m_BuildTarget: iPhone 284 | m_StaticBatching: 1 285 | m_DynamicBatching: 0 286 | - m_BuildTarget: WebGL 287 | m_StaticBatching: 0 288 | m_DynamicBatching: 0 289 | m_BuildTargetShaderSettings: [] 290 | m_BuildTargetGraphicsJobs: 291 | - m_BuildTarget: MacStandaloneSupport 292 | m_GraphicsJobs: 0 293 | - m_BuildTarget: Switch 294 | m_GraphicsJobs: 1 295 | - m_BuildTarget: MetroSupport 296 | m_GraphicsJobs: 1 297 | - m_BuildTarget: AppleTVSupport 298 | m_GraphicsJobs: 0 299 | - m_BuildTarget: BJMSupport 300 | m_GraphicsJobs: 1 301 | - m_BuildTarget: LinuxStandaloneSupport 302 | m_GraphicsJobs: 1 303 | - m_BuildTarget: PS4Player 304 | m_GraphicsJobs: 1 305 | - m_BuildTarget: iOSSupport 306 | m_GraphicsJobs: 0 307 | - m_BuildTarget: WindowsStandaloneSupport 308 | m_GraphicsJobs: 1 309 | - m_BuildTarget: XboxOnePlayer 310 | m_GraphicsJobs: 1 311 | - m_BuildTarget: LuminSupport 312 | m_GraphicsJobs: 0 313 | - m_BuildTarget: AndroidPlayer 314 | m_GraphicsJobs: 0 315 | - m_BuildTarget: WebGLSupport 316 | m_GraphicsJobs: 0 317 | m_BuildTargetGraphicsJobMode: 318 | - m_BuildTarget: PS4Player 319 | m_GraphicsJobMode: 0 320 | - m_BuildTarget: XboxOnePlayer 321 | m_GraphicsJobMode: 0 322 | m_BuildTargetGraphicsAPIs: 323 | - m_BuildTarget: AndroidPlayer 324 | m_APIs: 150000000b000000 325 | m_Automatic: 1 326 | - m_BuildTarget: iOSSupport 327 | m_APIs: 10000000 328 | m_Automatic: 1 329 | - m_BuildTarget: AppleTVSupport 330 | m_APIs: 10000000 331 | m_Automatic: 1 332 | - m_BuildTarget: WebGLSupport 333 | m_APIs: 0b000000 334 | m_Automatic: 1 335 | m_BuildTargetVRSettings: 336 | - m_BuildTarget: Standalone 337 | m_Enabled: 0 338 | m_Devices: 339 | - Oculus 340 | - OpenVR 341 | m_DefaultShaderChunkSizeInMB: 16 342 | m_DefaultShaderChunkCount: 0 343 | openGLRequireES31: 0 344 | openGLRequireES31AEP: 0 345 | openGLRequireES32: 0 346 | m_TemplateCustomTags: {} 347 | mobileMTRendering: 348 | Android: 1 349 | iPhone: 1 350 | tvOS: 1 351 | m_BuildTargetGroupLightmapEncodingQuality: 352 | - m_BuildTarget: Android 353 | m_EncodingQuality: 1 354 | - m_BuildTarget: iPhone 355 | m_EncodingQuality: 1 356 | - m_BuildTarget: tvOS 357 | m_EncodingQuality: 1 358 | m_BuildTargetGroupLightmapSettings: [] 359 | m_BuildTargetNormalMapEncoding: 360 | - m_BuildTarget: Android 361 | m_Encoding: 1 362 | - m_BuildTarget: iPhone 363 | m_Encoding: 1 364 | - m_BuildTarget: tvOS 365 | m_Encoding: 1 366 | m_BuildTargetDefaultTextureCompressionFormat: 367 | - m_BuildTarget: Android 368 | m_Format: 3 369 | playModeTestRunnerEnabled: 0 370 | runPlayModeTestAsEditModeTest: 0 371 | actionOnDotNetUnhandledException: 1 372 | enableInternalProfiler: 0 373 | logObjCUncaughtExceptions: 1 374 | enableCrashReportAPI: 0 375 | cameraUsageDescription: 376 | locationUsageDescription: 377 | microphoneUsageDescription: 378 | bluetoothUsageDescription: 379 | switchNMETAOverride: 380 | switchNetLibKey: 381 | switchSocketMemoryPoolSize: 6144 382 | switchSocketAllocatorPoolSize: 128 383 | switchSocketConcurrencyLimit: 14 384 | switchScreenResolutionBehavior: 2 385 | switchUseCPUProfiler: 0 386 | switchUseGOLDLinker: 0 387 | switchLTOSetting: 0 388 | switchApplicationID: 0x01004b9000490000 389 | switchNSODependencies: 390 | switchTitleNames_0: 391 | switchTitleNames_1: 392 | switchTitleNames_2: 393 | switchTitleNames_3: 394 | switchTitleNames_4: 395 | switchTitleNames_5: 396 | switchTitleNames_6: 397 | switchTitleNames_7: 398 | switchTitleNames_8: 399 | switchTitleNames_9: 400 | switchTitleNames_10: 401 | switchTitleNames_11: 402 | switchTitleNames_12: 403 | switchTitleNames_13: 404 | switchTitleNames_14: 405 | switchTitleNames_15: 406 | switchPublisherNames_0: 407 | switchPublisherNames_1: 408 | switchPublisherNames_2: 409 | switchPublisherNames_3: 410 | switchPublisherNames_4: 411 | switchPublisherNames_5: 412 | switchPublisherNames_6: 413 | switchPublisherNames_7: 414 | switchPublisherNames_8: 415 | switchPublisherNames_9: 416 | switchPublisherNames_10: 417 | switchPublisherNames_11: 418 | switchPublisherNames_12: 419 | switchPublisherNames_13: 420 | switchPublisherNames_14: 421 | switchPublisherNames_15: 422 | switchIcons_0: {fileID: 0} 423 | switchIcons_1: {fileID: 0} 424 | switchIcons_2: {fileID: 0} 425 | switchIcons_3: {fileID: 0} 426 | switchIcons_4: {fileID: 0} 427 | switchIcons_5: {fileID: 0} 428 | switchIcons_6: {fileID: 0} 429 | switchIcons_7: {fileID: 0} 430 | switchIcons_8: {fileID: 0} 431 | switchIcons_9: {fileID: 0} 432 | switchIcons_10: {fileID: 0} 433 | switchIcons_11: {fileID: 0} 434 | switchIcons_12: {fileID: 0} 435 | switchIcons_13: {fileID: 0} 436 | switchIcons_14: {fileID: 0} 437 | switchIcons_15: {fileID: 0} 438 | switchSmallIcons_0: {fileID: 0} 439 | switchSmallIcons_1: {fileID: 0} 440 | switchSmallIcons_2: {fileID: 0} 441 | switchSmallIcons_3: {fileID: 0} 442 | switchSmallIcons_4: {fileID: 0} 443 | switchSmallIcons_5: {fileID: 0} 444 | switchSmallIcons_6: {fileID: 0} 445 | switchSmallIcons_7: {fileID: 0} 446 | switchSmallIcons_8: {fileID: 0} 447 | switchSmallIcons_9: {fileID: 0} 448 | switchSmallIcons_10: {fileID: 0} 449 | switchSmallIcons_11: {fileID: 0} 450 | switchSmallIcons_12: {fileID: 0} 451 | switchSmallIcons_13: {fileID: 0} 452 | switchSmallIcons_14: {fileID: 0} 453 | switchSmallIcons_15: {fileID: 0} 454 | switchManualHTML: 455 | switchAccessibleURLs: 456 | switchLegalInformation: 457 | switchMainThreadStackSize: 1048576 458 | switchPresenceGroupId: 459 | switchLogoHandling: 0 460 | switchReleaseVersion: 0 461 | switchDisplayVersion: 1.0.0 462 | switchStartupUserAccount: 0 463 | switchTouchScreenUsage: 0 464 | switchSupportedLanguagesMask: 0 465 | switchLogoType: 0 466 | switchApplicationErrorCodeCategory: 467 | switchUserAccountSaveDataSize: 0 468 | switchUserAccountSaveDataJournalSize: 0 469 | switchApplicationAttribute: 0 470 | switchCardSpecSize: -1 471 | switchCardSpecClock: -1 472 | switchRatingsMask: 0 473 | switchRatingsInt_0: 0 474 | switchRatingsInt_1: 0 475 | switchRatingsInt_2: 0 476 | switchRatingsInt_3: 0 477 | switchRatingsInt_4: 0 478 | switchRatingsInt_5: 0 479 | switchRatingsInt_6: 0 480 | switchRatingsInt_7: 0 481 | switchRatingsInt_8: 0 482 | switchRatingsInt_9: 0 483 | switchRatingsInt_10: 0 484 | switchRatingsInt_11: 0 485 | switchRatingsInt_12: 0 486 | switchLocalCommunicationIds_0: 487 | switchLocalCommunicationIds_1: 488 | switchLocalCommunicationIds_2: 489 | switchLocalCommunicationIds_3: 490 | switchLocalCommunicationIds_4: 491 | switchLocalCommunicationIds_5: 492 | switchLocalCommunicationIds_6: 493 | switchLocalCommunicationIds_7: 494 | switchParentalControl: 0 495 | switchAllowsScreenshot: 1 496 | switchAllowsVideoCapturing: 1 497 | switchAllowsRuntimeAddOnContentInstall: 0 498 | switchDataLossConfirmation: 0 499 | switchUserAccountLockEnabled: 0 500 | switchSystemResourceMemory: 16777216 501 | switchSupportedNpadStyles: 22 502 | switchNativeFsCacheSize: 32 503 | switchIsHoldTypeHorizontal: 0 504 | switchSupportedNpadCount: 8 505 | switchSocketConfigEnabled: 0 506 | switchTcpInitialSendBufferSize: 32 507 | switchTcpInitialReceiveBufferSize: 64 508 | switchTcpAutoSendBufferSizeMax: 256 509 | switchTcpAutoReceiveBufferSizeMax: 256 510 | switchUdpSendBufferSize: 9 511 | switchUdpReceiveBufferSize: 42 512 | switchSocketBufferEfficiency: 4 513 | switchSocketInitializeEnabled: 1 514 | switchNetworkInterfaceManagerInitializeEnabled: 1 515 | switchPlayerConnectionEnabled: 1 516 | switchUseNewStyleFilepaths: 0 517 | switchUseLegacyFmodPriorities: 1 518 | switchUseMicroSleepForYield: 1 519 | switchEnableRamDiskSupport: 0 520 | switchMicroSleepForYieldTime: 25 521 | switchRamDiskSpaceSize: 12 522 | ps4NPAgeRating: 12 523 | ps4NPTitleSecret: 524 | ps4NPTrophyPackPath: 525 | ps4ParentalLevel: 11 526 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 527 | ps4Category: 0 528 | ps4MasterVersion: 01.00 529 | ps4AppVersion: 01.00 530 | ps4AppType: 0 531 | ps4ParamSfxPath: 532 | ps4VideoOutPixelFormat: 0 533 | ps4VideoOutInitialWidth: 1920 534 | ps4VideoOutBaseModeInitialWidth: 1920 535 | ps4VideoOutReprojectionRate: 60 536 | ps4PronunciationXMLPath: 537 | ps4PronunciationSIGPath: 538 | ps4BackgroundImagePath: 539 | ps4StartupImagePath: 540 | ps4StartupImagesFolder: 541 | ps4IconImagesFolder: 542 | ps4SaveDataImagePath: 543 | ps4SdkOverride: 544 | ps4BGMPath: 545 | ps4ShareFilePath: 546 | ps4ShareOverlayImagePath: 547 | ps4PrivacyGuardImagePath: 548 | ps4ExtraSceSysFile: 549 | ps4NPtitleDatPath: 550 | ps4RemotePlayKeyAssignment: -1 551 | ps4RemotePlayKeyMappingDir: 552 | ps4PlayTogetherPlayerCount: 0 553 | ps4EnterButtonAssignment: 1 554 | ps4ApplicationParam1: 0 555 | ps4ApplicationParam2: 0 556 | ps4ApplicationParam3: 0 557 | ps4ApplicationParam4: 0 558 | ps4DownloadDataSize: 0 559 | ps4GarlicHeapSize: 2048 560 | ps4ProGarlicHeapSize: 2560 561 | playerPrefsMaxSize: 32768 562 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 563 | ps4pnSessions: 1 564 | ps4pnPresence: 1 565 | ps4pnFriends: 1 566 | ps4pnGameCustomData: 1 567 | playerPrefsSupport: 0 568 | enableApplicationExit: 0 569 | resetTempFolder: 1 570 | restrictedAudioUsageRights: 0 571 | ps4UseResolutionFallback: 0 572 | ps4ReprojectionSupport: 0 573 | ps4UseAudio3dBackend: 0 574 | ps4UseLowGarlicFragmentationMode: 1 575 | ps4SocialScreenEnabled: 0 576 | ps4ScriptOptimizationLevel: 0 577 | ps4Audio3dVirtualSpeakerCount: 14 578 | ps4attribCpuUsage: 0 579 | ps4PatchPkgPath: 580 | ps4PatchLatestPkgPath: 581 | ps4PatchChangeinfoPath: 582 | ps4PatchDayOne: 0 583 | ps4attribUserManagement: 0 584 | ps4attribMoveSupport: 0 585 | ps4attrib3DSupport: 0 586 | ps4attribShareSupport: 0 587 | ps4attribExclusiveVR: 0 588 | ps4disableAutoHideSplash: 0 589 | ps4videoRecordingFeaturesUsed: 0 590 | ps4contentSearchFeaturesUsed: 0 591 | ps4CompatibilityPS5: 0 592 | ps4AllowPS5Detection: 0 593 | ps4GPU800MHz: 1 594 | ps4attribEyeToEyeDistanceSettingVR: 0 595 | ps4IncludedModules: [] 596 | ps4attribVROutputEnabled: 0 597 | monoEnv: 598 | splashScreenBackgroundSourceLandscape: {fileID: 0} 599 | splashScreenBackgroundSourcePortrait: {fileID: 0} 600 | blurSplashScreenBackground: 1 601 | spritePackerPolicy: 602 | webGLMemorySize: 16 603 | webGLExceptionSupport: 1 604 | webGLNameFilesAsHashes: 0 605 | webGLDataCaching: 1 606 | webGLDebugSymbols: 0 607 | webGLEmscriptenArgs: 608 | webGLModulesDirectory: 609 | webGLTemplate: APPLICATION:Default 610 | webGLAnalyzeBuildSize: 0 611 | webGLUseEmbeddedResources: 0 612 | webGLCompressionFormat: 1 613 | webGLWasmArithmeticExceptions: 0 614 | webGLLinkerTarget: 1 615 | webGLThreadsSupport: 0 616 | webGLDecompressionFallback: 0 617 | webGLPowerPreference: 2 618 | scriptingDefineSymbols: {} 619 | additionalCompilerArguments: {} 620 | platformArchitecture: {} 621 | scriptingBackend: {} 622 | il2cppCompilerConfiguration: {} 623 | managedStrippingLevel: {} 624 | incrementalIl2cppBuild: {} 625 | suppressCommonWarnings: 1 626 | allowUnsafeCode: 0 627 | useDeterministicCompilation: 1 628 | enableRoslynAnalyzers: 1 629 | selectedPlatform: 0 630 | additionalIl2CppArgs: 631 | scriptingRuntimeVersion: 1 632 | gcIncremental: 1 633 | assemblyVersionValidation: 1 634 | gcWBarrierValidation: 0 635 | apiCompatibilityLevelPerPlatform: {} 636 | m_RenderingPath: 1 637 | m_MobileRenderingPath: 1 638 | metroPackageName: Template_3D 639 | metroPackageVersion: 640 | metroCertificatePath: 641 | metroCertificatePassword: 642 | metroCertificateSubject: 643 | metroCertificateIssuer: 644 | metroCertificateNotAfter: 0000000000000000 645 | metroApplicationDescription: Template_3D 646 | wsaImages: {} 647 | metroTileShortName: 648 | metroTileShowName: 0 649 | metroMediumTileShowName: 0 650 | metroLargeTileShowName: 0 651 | metroWideTileShowName: 0 652 | metroSupportStreamingInstall: 0 653 | metroLastRequiredScene: 0 654 | metroDefaultTileSize: 1 655 | metroTileForegroundText: 2 656 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 657 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} 658 | metroSplashScreenUseBackgroundColor: 0 659 | platformCapabilities: {} 660 | metroTargetDeviceFamilies: {} 661 | metroFTAName: 662 | metroFTAFileTypes: [] 663 | metroProtocolName: 664 | vcxProjDefaultLanguage: 665 | XboxOneProductId: 666 | XboxOneUpdateKey: 667 | XboxOneSandboxId: 668 | XboxOneContentId: 669 | XboxOneTitleId: 670 | XboxOneSCId: 671 | XboxOneGameOsOverridePath: 672 | XboxOnePackagingOverridePath: 673 | XboxOneAppManifestOverridePath: 674 | XboxOneVersion: 1.0.0.0 675 | XboxOnePackageEncryption: 0 676 | XboxOnePackageUpdateGranularity: 2 677 | XboxOneDescription: 678 | XboxOneLanguage: 679 | - enus 680 | XboxOneCapability: [] 681 | XboxOneGameRating: {} 682 | XboxOneIsContentPackage: 0 683 | XboxOneEnhancedXboxCompatibilityMode: 0 684 | XboxOneEnableGPUVariability: 1 685 | XboxOneSockets: {} 686 | XboxOneSplashScreen: {fileID: 0} 687 | XboxOneAllowedProductIds: [] 688 | XboxOnePersistentLocalStorageSize: 0 689 | XboxOneXTitleMemory: 8 690 | XboxOneOverrideIdentityName: 691 | XboxOneOverrideIdentityPublisher: 692 | vrEditorSettings: {} 693 | cloudServicesEnabled: 694 | UNet: 1 695 | luminIcon: 696 | m_Name: 697 | m_ModelFolderPath: 698 | m_PortalFolderPath: 699 | luminCert: 700 | m_CertPath: 701 | m_SignPackage: 1 702 | luminIsChannelApp: 0 703 | luminVersion: 704 | m_VersionCode: 1 705 | m_VersionName: 706 | apiCompatibilityLevel: 6 707 | activeInputHandler: 0 708 | windowsGamepadBackendHint: 0 709 | cloudProjectId: 710 | framebufferDepthMemorylessMode: 0 711 | qualitySettingsNames: [] 712 | projectName: 713 | organizationId: 714 | cloudEnabled: 0 715 | legacyClampBlendShapeWeights: 0 716 | playerDataPath: 717 | forceSRGBBlit: 1 718 | virtualTexturingSupportEnabled: 0 719 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2021.3.15f1 2 | m_EditorVersionWithRevision: 2021.3.15f1 (e8e88683f834) 3 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | skinWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | customRenderPipeline: {fileID: 0} 44 | excludedTargetPlatforms: [] 45 | - serializedVersion: 2 46 | name: Low 47 | pixelLightCount: 0 48 | shadows: 0 49 | shadowResolution: 0 50 | shadowProjection: 1 51 | shadowCascades: 1 52 | shadowDistance: 20 53 | shadowNearPlaneOffset: 3 54 | shadowCascade2Split: 0.33333334 55 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 56 | shadowmaskMode: 0 57 | skinWeights: 2 58 | textureQuality: 0 59 | anisotropicTextures: 0 60 | antiAliasing: 0 61 | softParticles: 0 62 | softVegetation: 0 63 | realtimeReflectionProbes: 0 64 | billboardsFaceCameraPosition: 0 65 | vSyncCount: 0 66 | lodBias: 0.4 67 | maximumLODLevel: 0 68 | streamingMipmapsActive: 0 69 | streamingMipmapsAddAllCameras: 1 70 | streamingMipmapsMemoryBudget: 512 71 | streamingMipmapsRenderersPerFrame: 512 72 | streamingMipmapsMaxLevelReduction: 2 73 | streamingMipmapsMaxFileIORequests: 1024 74 | particleRaycastBudget: 16 75 | asyncUploadTimeSlice: 2 76 | asyncUploadBufferSize: 16 77 | asyncUploadPersistentBuffer: 1 78 | resolutionScalingFixedDPIFactor: 1 79 | customRenderPipeline: {fileID: 0} 80 | excludedTargetPlatforms: [] 81 | - serializedVersion: 2 82 | name: Medium 83 | pixelLightCount: 1 84 | shadows: 1 85 | shadowResolution: 0 86 | shadowProjection: 1 87 | shadowCascades: 1 88 | shadowDistance: 20 89 | shadowNearPlaneOffset: 3 90 | shadowCascade2Split: 0.33333334 91 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 92 | shadowmaskMode: 0 93 | skinWeights: 2 94 | textureQuality: 0 95 | anisotropicTextures: 1 96 | antiAliasing: 0 97 | softParticles: 0 98 | softVegetation: 0 99 | realtimeReflectionProbes: 0 100 | billboardsFaceCameraPosition: 0 101 | vSyncCount: 1 102 | lodBias: 0.7 103 | maximumLODLevel: 0 104 | streamingMipmapsActive: 0 105 | streamingMipmapsAddAllCameras: 1 106 | streamingMipmapsMemoryBudget: 512 107 | streamingMipmapsRenderersPerFrame: 512 108 | streamingMipmapsMaxLevelReduction: 2 109 | streamingMipmapsMaxFileIORequests: 1024 110 | particleRaycastBudget: 64 111 | asyncUploadTimeSlice: 2 112 | asyncUploadBufferSize: 16 113 | asyncUploadPersistentBuffer: 1 114 | resolutionScalingFixedDPIFactor: 1 115 | customRenderPipeline: {fileID: 0} 116 | excludedTargetPlatforms: [] 117 | - serializedVersion: 2 118 | name: High 119 | pixelLightCount: 2 120 | shadows: 2 121 | shadowResolution: 1 122 | shadowProjection: 1 123 | shadowCascades: 2 124 | shadowDistance: 40 125 | shadowNearPlaneOffset: 3 126 | shadowCascade2Split: 0.33333334 127 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 128 | shadowmaskMode: 1 129 | skinWeights: 2 130 | textureQuality: 0 131 | anisotropicTextures: 1 132 | antiAliasing: 0 133 | softParticles: 0 134 | softVegetation: 1 135 | realtimeReflectionProbes: 1 136 | billboardsFaceCameraPosition: 1 137 | vSyncCount: 1 138 | lodBias: 1 139 | maximumLODLevel: 0 140 | streamingMipmapsActive: 0 141 | streamingMipmapsAddAllCameras: 1 142 | streamingMipmapsMemoryBudget: 512 143 | streamingMipmapsRenderersPerFrame: 512 144 | streamingMipmapsMaxLevelReduction: 2 145 | streamingMipmapsMaxFileIORequests: 1024 146 | particleRaycastBudget: 256 147 | asyncUploadTimeSlice: 2 148 | asyncUploadBufferSize: 16 149 | asyncUploadPersistentBuffer: 1 150 | resolutionScalingFixedDPIFactor: 1 151 | customRenderPipeline: {fileID: 0} 152 | excludedTargetPlatforms: [] 153 | - serializedVersion: 2 154 | name: Very High 155 | pixelLightCount: 3 156 | shadows: 2 157 | shadowResolution: 2 158 | shadowProjection: 1 159 | shadowCascades: 2 160 | shadowDistance: 70 161 | shadowNearPlaneOffset: 3 162 | shadowCascade2Split: 0.33333334 163 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 164 | shadowmaskMode: 1 165 | skinWeights: 4 166 | textureQuality: 0 167 | anisotropicTextures: 2 168 | antiAliasing: 2 169 | softParticles: 1 170 | softVegetation: 1 171 | realtimeReflectionProbes: 1 172 | billboardsFaceCameraPosition: 1 173 | vSyncCount: 1 174 | lodBias: 1.5 175 | maximumLODLevel: 0 176 | streamingMipmapsActive: 0 177 | streamingMipmapsAddAllCameras: 1 178 | streamingMipmapsMemoryBudget: 512 179 | streamingMipmapsRenderersPerFrame: 512 180 | streamingMipmapsMaxLevelReduction: 2 181 | streamingMipmapsMaxFileIORequests: 1024 182 | particleRaycastBudget: 1024 183 | asyncUploadTimeSlice: 2 184 | asyncUploadBufferSize: 16 185 | asyncUploadPersistentBuffer: 1 186 | resolutionScalingFixedDPIFactor: 1 187 | customRenderPipeline: {fileID: 0} 188 | excludedTargetPlatforms: [] 189 | - serializedVersion: 2 190 | name: Ultra 191 | pixelLightCount: 4 192 | shadows: 2 193 | shadowResolution: 2 194 | shadowProjection: 1 195 | shadowCascades: 4 196 | shadowDistance: 150 197 | shadowNearPlaneOffset: 3 198 | shadowCascade2Split: 0.33333334 199 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 200 | shadowmaskMode: 1 201 | skinWeights: 4 202 | textureQuality: 0 203 | anisotropicTextures: 2 204 | antiAliasing: 0 205 | softParticles: 1 206 | softVegetation: 1 207 | realtimeReflectionProbes: 1 208 | billboardsFaceCameraPosition: 1 209 | vSyncCount: 1 210 | lodBias: 2 211 | maximumLODLevel: 0 212 | streamingMipmapsActive: 0 213 | streamingMipmapsAddAllCameras: 1 214 | streamingMipmapsMemoryBudget: 512 215 | streamingMipmapsRenderersPerFrame: 512 216 | streamingMipmapsMaxLevelReduction: 2 217 | streamingMipmapsMaxFileIORequests: 1024 218 | particleRaycastBudget: 4096 219 | asyncUploadTimeSlice: 2 220 | asyncUploadBufferSize: 16 221 | asyncUploadPersistentBuffer: 1 222 | resolutionScalingFixedDPIFactor: 1 223 | customRenderPipeline: {fileID: 0} 224 | excludedTargetPlatforms: [] 225 | m_PerPlatformDefaultQuality: 226 | Android: 2 227 | GameCoreScarlett: 5 228 | GameCoreXboxOne: 5 229 | Lumin: 5 230 | Nintendo 3DS: 5 231 | Nintendo Switch: 5 232 | PS4: 5 233 | PS5: 5 234 | Server: 0 235 | Stadia: 5 236 | Standalone: 5 237 | WebGL: 3 238 | Windows Store Apps: 5 239 | XboxOne: 5 240 | iPhone: 2 241 | tvOS: 2 242 | -------------------------------------------------------------------------------- /ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "ignore": false, 8 | "defaultInstantiationMode": 0, 9 | "supportsModification": true 10 | }, 11 | { 12 | "userAdded": false, 13 | "type": "UnityEditor.Animations.AnimatorController", 14 | "ignore": false, 15 | "defaultInstantiationMode": 0, 16 | "supportsModification": true 17 | }, 18 | { 19 | "userAdded": false, 20 | "type": "UnityEngine.AnimatorOverrideController", 21 | "ignore": false, 22 | "defaultInstantiationMode": 0, 23 | "supportsModification": true 24 | }, 25 | { 26 | "userAdded": false, 27 | "type": "UnityEditor.Audio.AudioMixerController", 28 | "ignore": false, 29 | "defaultInstantiationMode": 0, 30 | "supportsModification": true 31 | }, 32 | { 33 | "userAdded": false, 34 | "type": "UnityEngine.ComputeShader", 35 | "ignore": true, 36 | "defaultInstantiationMode": 1, 37 | "supportsModification": true 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEngine.Cubemap", 42 | "ignore": false, 43 | "defaultInstantiationMode": 0, 44 | "supportsModification": true 45 | }, 46 | { 47 | "userAdded": false, 48 | "type": "UnityEngine.GameObject", 49 | "ignore": false, 50 | "defaultInstantiationMode": 0, 51 | "supportsModification": true 52 | }, 53 | { 54 | "userAdded": false, 55 | "type": "UnityEditor.LightingDataAsset", 56 | "ignore": false, 57 | "defaultInstantiationMode": 0, 58 | "supportsModification": false 59 | }, 60 | { 61 | "userAdded": false, 62 | "type": "UnityEngine.LightingSettings", 63 | "ignore": false, 64 | "defaultInstantiationMode": 0, 65 | "supportsModification": true 66 | }, 67 | { 68 | "userAdded": false, 69 | "type": "UnityEngine.Material", 70 | "ignore": false, 71 | "defaultInstantiationMode": 0, 72 | "supportsModification": true 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEditor.MonoScript", 77 | "ignore": true, 78 | "defaultInstantiationMode": 1, 79 | "supportsModification": true 80 | }, 81 | { 82 | "userAdded": false, 83 | "type": "UnityEngine.PhysicMaterial", 84 | "ignore": false, 85 | "defaultInstantiationMode": 0, 86 | "supportsModification": true 87 | }, 88 | { 89 | "userAdded": false, 90 | "type": "UnityEngine.PhysicsMaterial2D", 91 | "ignore": false, 92 | "defaultInstantiationMode": 0, 93 | "supportsModification": true 94 | }, 95 | { 96 | "userAdded": false, 97 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 98 | "ignore": false, 99 | "defaultInstantiationMode": 0, 100 | "supportsModification": true 101 | }, 102 | { 103 | "userAdded": false, 104 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 105 | "ignore": false, 106 | "defaultInstantiationMode": 0, 107 | "supportsModification": true 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Rendering.VolumeProfile", 112 | "ignore": false, 113 | "defaultInstantiationMode": 0, 114 | "supportsModification": true 115 | }, 116 | { 117 | "userAdded": false, 118 | "type": "UnityEditor.SceneAsset", 119 | "ignore": false, 120 | "defaultInstantiationMode": 0, 121 | "supportsModification": false 122 | }, 123 | { 124 | "userAdded": false, 125 | "type": "UnityEngine.Shader", 126 | "ignore": true, 127 | "defaultInstantiationMode": 1, 128 | "supportsModification": true 129 | }, 130 | { 131 | "userAdded": false, 132 | "type": "UnityEngine.ShaderVariantCollection", 133 | "ignore": true, 134 | "defaultInstantiationMode": 1, 135 | "supportsModification": true 136 | }, 137 | { 138 | "userAdded": false, 139 | "type": "UnityEngine.Texture", 140 | "ignore": false, 141 | "defaultInstantiationMode": 0, 142 | "supportsModification": true 143 | }, 144 | { 145 | "userAdded": false, 146 | "type": "UnityEngine.Texture2D", 147 | "ignore": false, 148 | "defaultInstantiationMode": 0, 149 | "supportsModification": true 150 | }, 151 | { 152 | "userAdded": false, 153 | "type": "UnityEngine.Timeline.TimelineAsset", 154 | "ignore": false, 155 | "defaultInstantiationMode": 0, 156 | "supportsModification": true 157 | } 158 | ], 159 | "defaultDependencyTypeInfo": { 160 | "userAdded": false, 161 | "type": "", 162 | "ignore": false, 163 | "defaultInstantiationMode": 1, 164 | "supportsModification": true 165 | }, 166 | "newSceneOverride": 0 167 | } -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | m_PackageRequiringCoreStatsPresent: 0 27 | UnityAdsSettings: 28 | m_Enabled: 0 29 | m_InitializeOnStartup: 1 30 | m_TestMode: 0 31 | m_IosGameId: 32 | m_AndroidGameId: 33 | m_GameIds: {} 34 | m_GameId: 35 | PerformanceReportingSettings: 36 | m_Enabled: 0 37 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /ProjectSettings/boot.config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GarrettGunnell/Shell-Texturing/e60583627f00f0267439ee77b2c2bcee0a034a0b/ProjectSettings/boot.config -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shell Texturing 2 | 3 | by Acerola 4 | 5 | A fully annotated beginner graphics programming project for Unity (built-in rendering pipeline) intended to help those with little shader knowledge to grasp the basics. 6 | 7 | ## Example 8 | 9 | ![example](./example.png) -------------------------------------------------------------------------------- /UserSettings/EditorUserSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!162 &1 4 | EditorUserSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_ConfigSettings: 8 | RecentlyUsedSceneGuid-0: 9 | value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a 10 | flags: 0 11 | vcSharedLogLevel: 12 | value: 0d5e400f0650 13 | flags: 0 14 | m_VCAutomaticAdd: 1 15 | m_VCDebugCom: 0 16 | m_VCDebugCmd: 0 17 | m_VCDebugOut: 0 18 | m_SemanticMergeMode: 2 19 | m_DesiredImportWorkerCount: 4 20 | m_StandbyImportWorkerCount: 2 21 | m_IdleImportWorkerShutdownDelay: 60000 22 | m_VCShowFailedCheckout: 1 23 | m_VCOverwriteFailedCheckoutAssets: 1 24 | m_VCProjectOverlayIcons: 1 25 | m_VCHierarchyOverlayIcons: 1 26 | m_VCOtherOverlayIcons: 1 27 | m_VCAllowAsyncUpdate: 1 28 | m_ArtifactGarbageCollection: 1 29 | -------------------------------------------------------------------------------- /UserSettings/Layouts/default-2021.dwlt: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 52 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: 1 12 | m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_PixelRect: 16 | serializedVersion: 2 17 | x: 0 18 | y: 43 19 | width: 1920 20 | height: 997 21 | m_ShowMode: 4 22 | m_Title: Game 23 | m_RootView: {fileID: 4} 24 | m_MinSize: {x: 875, y: 300} 25 | m_MaxSize: {x: 10000, y: 10000} 26 | m_Maximized: 1 27 | --- !u!114 &2 28 | MonoBehaviour: 29 | m_ObjectHideFlags: 52 30 | m_CorrespondingSourceObject: {fileID: 0} 31 | m_PrefabInstance: {fileID: 0} 32 | m_PrefabAsset: {fileID: 0} 33 | m_GameObject: {fileID: 0} 34 | m_Enabled: 1 35 | m_EditorHideFlags: 1 36 | m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} 37 | m_Name: 38 | m_EditorClassIdentifier: 39 | m_Children: 40 | - {fileID: 7} 41 | - {fileID: 3} 42 | m_Position: 43 | serializedVersion: 2 44 | x: 0 45 | y: 30 46 | width: 1920 47 | height: 947 48 | m_MinSize: {x: 200, y: 100} 49 | m_MaxSize: {x: 16192, y: 8096} 50 | vertical: 0 51 | controlID: 21 52 | --- !u!114 &3 53 | MonoBehaviour: 54 | m_ObjectHideFlags: 52 55 | m_CorrespondingSourceObject: {fileID: 0} 56 | m_PrefabInstance: {fileID: 0} 57 | m_PrefabAsset: {fileID: 0} 58 | m_GameObject: {fileID: 0} 59 | m_Enabled: 1 60 | m_EditorHideFlags: 1 61 | m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} 62 | m_Name: InspectorWindow 63 | m_EditorClassIdentifier: 64 | m_Children: [] 65 | m_Position: 66 | serializedVersion: 2 67 | x: 1531 68 | y: 0 69 | width: 389 70 | height: 947 71 | m_MinSize: {x: 276, y: 71} 72 | m_MaxSize: {x: 4001, y: 4021} 73 | m_ActualView: {fileID: 9} 74 | m_Panes: 75 | - {fileID: 9} 76 | - {fileID: 10} 77 | m_Selected: 0 78 | m_LastSelected: 1 79 | --- !u!114 &4 80 | MonoBehaviour: 81 | m_ObjectHideFlags: 52 82 | m_CorrespondingSourceObject: {fileID: 0} 83 | m_PrefabInstance: {fileID: 0} 84 | m_PrefabAsset: {fileID: 0} 85 | m_GameObject: {fileID: 0} 86 | m_Enabled: 1 87 | m_EditorHideFlags: 1 88 | m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0} 89 | m_Name: 90 | m_EditorClassIdentifier: 91 | m_Children: 92 | - {fileID: 5} 93 | - {fileID: 2} 94 | - {fileID: 6} 95 | m_Position: 96 | serializedVersion: 2 97 | x: 0 98 | y: 0 99 | width: 1920 100 | height: 997 101 | m_MinSize: {x: 875, y: 300} 102 | m_MaxSize: {x: 10000, y: 10000} 103 | m_UseTopView: 1 104 | m_TopViewHeight: 30 105 | m_UseBottomView: 1 106 | m_BottomViewHeight: 20 107 | --- !u!114 &5 108 | MonoBehaviour: 109 | m_ObjectHideFlags: 52 110 | m_CorrespondingSourceObject: {fileID: 0} 111 | m_PrefabInstance: {fileID: 0} 112 | m_PrefabAsset: {fileID: 0} 113 | m_GameObject: {fileID: 0} 114 | m_Enabled: 1 115 | m_EditorHideFlags: 1 116 | m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0} 117 | m_Name: 118 | m_EditorClassIdentifier: 119 | m_Children: [] 120 | m_Position: 121 | serializedVersion: 2 122 | x: 0 123 | y: 0 124 | width: 1920 125 | height: 30 126 | m_MinSize: {x: 0, y: 0} 127 | m_MaxSize: {x: 0, y: 0} 128 | m_LastLoadedLayoutName: 129 | --- !u!114 &6 130 | MonoBehaviour: 131 | m_ObjectHideFlags: 52 132 | m_CorrespondingSourceObject: {fileID: 0} 133 | m_PrefabInstance: {fileID: 0} 134 | m_PrefabAsset: {fileID: 0} 135 | m_GameObject: {fileID: 0} 136 | m_Enabled: 1 137 | m_EditorHideFlags: 1 138 | m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0} 139 | m_Name: 140 | m_EditorClassIdentifier: 141 | m_Children: [] 142 | m_Position: 143 | serializedVersion: 2 144 | x: 0 145 | y: 977 146 | width: 1920 147 | height: 20 148 | m_MinSize: {x: 0, y: 0} 149 | m_MaxSize: {x: 0, y: 0} 150 | --- !u!114 &7 151 | MonoBehaviour: 152 | m_ObjectHideFlags: 52 153 | m_CorrespondingSourceObject: {fileID: 0} 154 | m_PrefabInstance: {fileID: 0} 155 | m_PrefabAsset: {fileID: 0} 156 | m_GameObject: {fileID: 0} 157 | m_Enabled: 1 158 | m_EditorHideFlags: 1 159 | m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} 160 | m_Name: GameView 161 | m_EditorClassIdentifier: 162 | m_Children: [] 163 | m_Position: 164 | serializedVersion: 2 165 | x: 0 166 | y: 0 167 | width: 1531 168 | height: 947 169 | m_MinSize: {x: 200, y: 200} 170 | m_MaxSize: {x: 4000, y: 4000} 171 | m_ActualView: {fileID: 12} 172 | m_Panes: 173 | - {fileID: 11} 174 | - {fileID: 12} 175 | - {fileID: 8} 176 | m_Selected: 1 177 | m_LastSelected: 0 178 | --- !u!114 &8 179 | MonoBehaviour: 180 | m_ObjectHideFlags: 52 181 | m_CorrespondingSourceObject: {fileID: 0} 182 | m_PrefabInstance: {fileID: 0} 183 | m_PrefabAsset: {fileID: 0} 184 | m_GameObject: {fileID: 0} 185 | m_Enabled: 1 186 | m_EditorHideFlags: 1 187 | m_Script: {fileID: 12111, guid: 0000000000000000e000000000000000, type: 0} 188 | m_Name: 189 | m_EditorClassIdentifier: 190 | m_MinSize: {x: 400, y: 100} 191 | m_MaxSize: {x: 2048, y: 2048} 192 | m_TitleContent: 193 | m_Text: Asset Store 194 | m_Image: {fileID: 357073275683767465, guid: 0000000000000000d000000000000000, type: 0} 195 | m_Tooltip: 196 | m_Pos: 197 | serializedVersion: 2 198 | x: 468 199 | y: 181 200 | width: 973 201 | height: 501 202 | m_ViewDataDictionary: {fileID: 0} 203 | m_OverlayCanvas: 204 | m_LastAppliedPresetName: Default 205 | m_SaveData: [] 206 | --- !u!114 &9 207 | MonoBehaviour: 208 | m_ObjectHideFlags: 52 209 | m_CorrespondingSourceObject: {fileID: 0} 210 | m_PrefabInstance: {fileID: 0} 211 | m_PrefabAsset: {fileID: 0} 212 | m_GameObject: {fileID: 0} 213 | m_Enabled: 1 214 | m_EditorHideFlags: 1 215 | m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0} 216 | m_Name: 217 | m_EditorClassIdentifier: 218 | m_MinSize: {x: 275, y: 50} 219 | m_MaxSize: {x: 4000, y: 4000} 220 | m_TitleContent: 221 | m_Text: Inspector 222 | m_Image: {fileID: -6905738622615590433, guid: 0000000000000000d000000000000000, type: 0} 223 | m_Tooltip: 224 | m_Pos: 225 | serializedVersion: 2 226 | x: 1531 227 | y: 73 228 | width: 388 229 | height: 926 230 | m_ViewDataDictionary: {fileID: 0} 231 | m_OverlayCanvas: 232 | m_LastAppliedPresetName: Default 233 | m_SaveData: [] 234 | m_ObjectsLockedBeforeSerialization: [] 235 | m_InstanceIDsLockedBeforeSerialization: 236 | m_PreviewResizer: 237 | m_CachedPref: 160 238 | m_ControlHash: -371814159 239 | m_PrefName: Preview_InspectorPreview 240 | m_LastInspectedObjectInstanceID: -1 241 | m_LastVerticalScrollValue: 0 242 | m_GlobalObjectId: 243 | m_InspectorMode: 0 244 | m_LockTracker: 245 | m_IsLocked: 0 246 | m_PreviewWindow: {fileID: 0} 247 | --- !u!114 &10 248 | MonoBehaviour: 249 | m_ObjectHideFlags: 52 250 | m_CorrespondingSourceObject: {fileID: 0} 251 | m_PrefabInstance: {fileID: 0} 252 | m_PrefabAsset: {fileID: 0} 253 | m_GameObject: {fileID: 0} 254 | m_Enabled: 1 255 | m_EditorHideFlags: 1 256 | m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0} 257 | m_Name: 258 | m_EditorClassIdentifier: 259 | m_MinSize: {x: 200, y: 200} 260 | m_MaxSize: {x: 4000, y: 4000} 261 | m_TitleContent: 262 | m_Text: Hierarchy 263 | m_Image: {fileID: -590624980919486359, guid: 0000000000000000d000000000000000, type: 0} 264 | m_Tooltip: 265 | m_Pos: 266 | serializedVersion: 2 267 | x: 1531 268 | y: 73 269 | width: 388 270 | height: 926 271 | m_ViewDataDictionary: {fileID: 0} 272 | m_OverlayCanvas: 273 | m_LastAppliedPresetName: Default 274 | m_SaveData: [] 275 | m_SceneHierarchy: 276 | m_TreeViewState: 277 | scrollPos: {x: 0, y: 0} 278 | m_SelectedIDs: ca590000 279 | m_LastClickedID: 22986 280 | m_ExpandedIDs: 38fbffff 281 | m_RenameOverlay: 282 | m_UserAcceptedRename: 0 283 | m_Name: 284 | m_OriginalName: 285 | m_EditFieldRect: 286 | serializedVersion: 2 287 | x: 0 288 | y: 0 289 | width: 0 290 | height: 0 291 | m_UserData: 0 292 | m_IsWaitingForDelay: 0 293 | m_IsRenaming: 0 294 | m_OriginalEventType: 11 295 | m_IsRenamingFilename: 0 296 | m_ClientGUIView: {fileID: 0} 297 | m_SearchString: 298 | m_ExpandedScenes: [] 299 | m_CurrenRootInstanceID: 0 300 | m_LockTracker: 301 | m_IsLocked: 0 302 | m_CurrentSortingName: TransformSorting 303 | m_WindowGUID: 69c405c2be20f3e47a74ffee3dcc046e 304 | --- !u!114 &11 305 | MonoBehaviour: 306 | m_ObjectHideFlags: 52 307 | m_CorrespondingSourceObject: {fileID: 0} 308 | m_PrefabInstance: {fileID: 0} 309 | m_PrefabAsset: {fileID: 0} 310 | m_GameObject: {fileID: 0} 311 | m_Enabled: 1 312 | m_EditorHideFlags: 1 313 | m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0} 314 | m_Name: 315 | m_EditorClassIdentifier: 316 | m_MinSize: {x: 200, y: 200} 317 | m_MaxSize: {x: 4000, y: 4000} 318 | m_TitleContent: 319 | m_Text: Scene 320 | m_Image: {fileID: 2318424515335265636, guid: 0000000000000000d000000000000000, type: 0} 321 | m_Tooltip: 322 | m_Pos: 323 | serializedVersion: 2 324 | x: 249 325 | y: 73 326 | width: 1280 327 | height: 655 328 | m_ViewDataDictionary: {fileID: 0} 329 | m_OverlayCanvas: 330 | m_LastAppliedPresetName: Default 331 | m_SaveData: 332 | - dockPosition: 0 333 | containerId: overlay-toolbar__top 334 | floating: 0 335 | collapsed: 0 336 | displayed: 1 337 | snapOffset: {x: 0, y: 0} 338 | snapOffsetDelta: {x: -101, y: -26} 339 | snapCorner: 3 340 | id: Tool Settings 341 | index: 0 342 | layout: 1 343 | - dockPosition: 0 344 | containerId: overlay-toolbar__top 345 | floating: 0 346 | collapsed: 0 347 | displayed: 1 348 | snapOffset: {x: -141, y: 149} 349 | snapOffsetDelta: {x: 0, y: 0} 350 | snapCorner: 1 351 | id: unity-grid-and-snap-toolbar 352 | index: 1 353 | layout: 1 354 | - dockPosition: 1 355 | containerId: overlay-toolbar__top 356 | floating: 0 357 | collapsed: 0 358 | displayed: 1 359 | snapOffset: {x: 0, y: 0} 360 | snapOffsetDelta: {x: 0, y: 0} 361 | snapCorner: 0 362 | id: unity-scene-view-toolbar 363 | index: 0 364 | layout: 1 365 | - dockPosition: 1 366 | containerId: overlay-toolbar__top 367 | floating: 0 368 | collapsed: 0 369 | displayed: 0 370 | snapOffset: {x: 0, y: 0} 371 | snapOffsetDelta: {x: 0, y: 0} 372 | snapCorner: 1 373 | id: unity-search-toolbar 374 | index: 1 375 | layout: 1 376 | - dockPosition: 0 377 | containerId: overlay-container--left 378 | floating: 0 379 | collapsed: 0 380 | displayed: 1 381 | snapOffset: {x: 0, y: 0} 382 | snapOffsetDelta: {x: 0, y: 0} 383 | snapCorner: 0 384 | id: unity-transform-toolbar 385 | index: 0 386 | layout: 2 387 | - dockPosition: 0 388 | containerId: overlay-container--left 389 | floating: 0 390 | collapsed: 0 391 | displayed: 1 392 | snapOffset: {x: 0, y: 197} 393 | snapOffsetDelta: {x: 0, y: 0} 394 | snapCorner: 0 395 | id: unity-component-tools 396 | index: 1 397 | layout: 2 398 | - dockPosition: 0 399 | containerId: overlay-container--right 400 | floating: 0 401 | collapsed: 0 402 | displayed: 1 403 | snapOffset: {x: 67.5, y: 86} 404 | snapOffsetDelta: {x: 0, y: 0} 405 | snapCorner: 0 406 | id: Orientation 407 | index: 0 408 | layout: 4 409 | - dockPosition: 1 410 | containerId: overlay-container--right 411 | floating: 0 412 | collapsed: 0 413 | displayed: 0 414 | snapOffset: {x: 0, y: 0} 415 | snapOffsetDelta: {x: 0, y: 0} 416 | snapCorner: 0 417 | id: Scene View/Light Settings 418 | index: 0 419 | layout: 4 420 | - dockPosition: 1 421 | containerId: overlay-container--right 422 | floating: 0 423 | collapsed: 0 424 | displayed: 1 425 | snapOffset: {x: 0, y: 0} 426 | snapOffsetDelta: {x: 0, y: 0} 427 | snapCorner: 0 428 | id: Scene View/Camera 429 | index: 1 430 | layout: 4 431 | - dockPosition: 1 432 | containerId: overlay-container--right 433 | floating: 0 434 | collapsed: 0 435 | displayed: 0 436 | snapOffset: {x: 0, y: 0} 437 | snapOffsetDelta: {x: 0, y: 0} 438 | snapCorner: 0 439 | id: Scene View/Cloth Constraints 440 | index: 2 441 | layout: 4 442 | - dockPosition: 1 443 | containerId: overlay-container--right 444 | floating: 0 445 | collapsed: 0 446 | displayed: 0 447 | snapOffset: {x: 0, y: 0} 448 | snapOffsetDelta: {x: 0, y: 0} 449 | snapCorner: 0 450 | id: Scene View/Cloth Collisions 451 | index: 3 452 | layout: 4 453 | - dockPosition: 1 454 | containerId: overlay-container--right 455 | floating: 0 456 | collapsed: 0 457 | displayed: 0 458 | snapOffset: {x: 0, y: 0} 459 | snapOffsetDelta: {x: 0, y: 0} 460 | snapCorner: 0 461 | id: Scene View/Navmesh Display 462 | index: 4 463 | layout: 4 464 | - dockPosition: 1 465 | containerId: overlay-container--right 466 | floating: 0 467 | collapsed: 0 468 | displayed: 0 469 | snapOffset: {x: 0, y: 0} 470 | snapOffsetDelta: {x: 0, y: 0} 471 | snapCorner: 0 472 | id: Scene View/Agent Display 473 | index: 5 474 | layout: 4 475 | - dockPosition: 1 476 | containerId: overlay-container--right 477 | floating: 0 478 | collapsed: 0 479 | displayed: 0 480 | snapOffset: {x: 0, y: 0} 481 | snapOffsetDelta: {x: 0, y: 0} 482 | snapCorner: 0 483 | id: Scene View/Obstacle Display 484 | index: 6 485 | layout: 4 486 | - dockPosition: 1 487 | containerId: overlay-container--right 488 | floating: 0 489 | collapsed: 0 490 | displayed: 0 491 | snapOffset: {x: 0, y: 0} 492 | snapOffsetDelta: {x: 0, y: 0} 493 | snapCorner: 0 494 | id: Scene View/Occlusion Culling 495 | index: 7 496 | layout: 4 497 | - dockPosition: 1 498 | containerId: overlay-container--right 499 | floating: 0 500 | collapsed: 0 501 | displayed: 0 502 | snapOffset: {x: 0, y: 0} 503 | snapOffsetDelta: {x: 0, y: 0} 504 | snapCorner: 0 505 | id: Scene View/Physics Debugger 506 | index: 8 507 | layout: 4 508 | - dockPosition: 1 509 | containerId: overlay-container--right 510 | floating: 0 511 | collapsed: 0 512 | displayed: 0 513 | snapOffset: {x: 0, y: 0} 514 | snapOffsetDelta: {x: 0, y: 0} 515 | snapCorner: 0 516 | id: Scene View/Scene Visibility 517 | index: 9 518 | layout: 4 519 | - dockPosition: 1 520 | containerId: overlay-container--right 521 | floating: 0 522 | collapsed: 0 523 | displayed: 0 524 | snapOffset: {x: 0, y: 0} 525 | snapOffsetDelta: {x: 0, y: 0} 526 | snapCorner: 0 527 | id: Scene View/Particles 528 | index: 10 529 | layout: 4 530 | - dockPosition: 1 531 | containerId: overlay-container--right 532 | floating: 0 533 | collapsed: 0 534 | displayed: 0 535 | snapOffset: {x: 0, y: 0} 536 | snapOffsetDelta: {x: 0, y: 0} 537 | snapCorner: 0 538 | id: Scene View/Tilemap 539 | index: 11 540 | layout: 4 541 | - dockPosition: 1 542 | containerId: overlay-container--right 543 | floating: 0 544 | collapsed: 0 545 | displayed: 0 546 | snapOffset: {x: 0, y: 0} 547 | snapOffsetDelta: {x: 0, y: 0} 548 | snapCorner: 0 549 | id: Scene View/Tilemap Palette Helper 550 | index: 12 551 | layout: 4 552 | m_WindowGUID: 61670ec65adcf7c46807b58bebd5ce4e 553 | m_Gizmos: 1 554 | m_OverrideSceneCullingMask: 6917529027641081856 555 | m_SceneIsLit: 1 556 | m_SceneLighting: 1 557 | m_2DMode: 0 558 | m_isRotationLocked: 0 559 | m_PlayAudio: 0 560 | m_AudioPlay: 0 561 | m_Position: 562 | m_Target: {x: 13.410113, y: -8.646917, z: 7.708948} 563 | speed: 2 564 | m_Value: {x: 13.410113, y: -8.646917, z: 7.708948} 565 | m_RenderMode: 0 566 | m_CameraMode: 567 | drawMode: 2 568 | name: Shaded Wireframe 569 | section: Shading Mode 570 | m_ValidateTrueMetals: 0 571 | m_DoValidateTrueMetals: 0 572 | m_ExposureSliderValue: 0 573 | m_SceneViewState: 574 | m_AlwaysRefresh: 0 575 | showFog: 1 576 | showSkybox: 1 577 | showFlares: 1 578 | showImageEffects: 1 579 | showParticleSystems: 1 580 | showVisualEffectGraphs: 1 581 | m_FxEnabled: 1 582 | m_Grid: 583 | xGrid: 584 | m_Fade: 585 | m_Target: 0 586 | speed: 2 587 | m_Value: 0 588 | m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} 589 | m_Pivot: {x: 0, y: 0, z: 0} 590 | m_Size: {x: 0, y: 0} 591 | yGrid: 592 | m_Fade: 593 | m_Target: 1 594 | speed: 2 595 | m_Value: 1 596 | m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} 597 | m_Pivot: {x: 0, y: 0, z: 0} 598 | m_Size: {x: 1, y: 1} 599 | zGrid: 600 | m_Fade: 601 | m_Target: 0 602 | speed: 2 603 | m_Value: 0 604 | m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} 605 | m_Pivot: {x: 0, y: 0, z: 0} 606 | m_Size: {x: 0, y: 0} 607 | m_ShowGrid: 1 608 | m_GridAxis: 1 609 | m_gridOpacity: 0.5 610 | m_Rotation: 611 | m_Target: {x: -0.21189648, y: -0.4618122, z: 0.11463467, w: -0.85363513} 612 | speed: 2 613 | m_Value: {x: -0.211896, y: -0.46181116, z: 0.11463441, w: -0.8536332} 614 | m_Size: 615 | m_Target: 10 616 | speed: 2 617 | m_Value: 10 618 | m_Ortho: 619 | m_Target: 0 620 | speed: 2 621 | m_Value: 0 622 | m_CameraSettings: 623 | m_Speed: 1 624 | m_SpeedNormalized: 0.5 625 | m_SpeedMin: 0.01 626 | m_SpeedMax: 2 627 | m_EasingEnabled: 1 628 | m_EasingDuration: 0.4 629 | m_AccelerationEnabled: 1 630 | m_FieldOfViewHorizontalOrVertical: 60 631 | m_NearClip: 0.03 632 | m_FarClip: 10000 633 | m_DynamicClip: 1 634 | m_OcclusionCulling: 0 635 | m_LastSceneViewRotation: {x: 0, y: 0, z: 0, w: 0} 636 | m_LastSceneViewOrtho: 0 637 | m_ReplacementShader: {fileID: 0} 638 | m_ReplacementString: 639 | m_SceneVisActive: 1 640 | m_LastLockedObject: {fileID: 0} 641 | m_ViewIsLockedToObject: 0 642 | --- !u!114 &12 643 | MonoBehaviour: 644 | m_ObjectHideFlags: 52 645 | m_CorrespondingSourceObject: {fileID: 0} 646 | m_PrefabInstance: {fileID: 0} 647 | m_PrefabAsset: {fileID: 0} 648 | m_GameObject: {fileID: 0} 649 | m_Enabled: 1 650 | m_EditorHideFlags: 1 651 | m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0} 652 | m_Name: 653 | m_EditorClassIdentifier: 654 | m_MinSize: {x: 200, y: 200} 655 | m_MaxSize: {x: 4000, y: 4000} 656 | m_TitleContent: 657 | m_Text: Game 658 | m_Image: {fileID: -2087823869225018852, guid: 0000000000000000d000000000000000, type: 0} 659 | m_Tooltip: 660 | m_Pos: 661 | serializedVersion: 2 662 | x: 0 663 | y: 73 664 | width: 1530 665 | height: 926 666 | m_ViewDataDictionary: {fileID: 0} 667 | m_OverlayCanvas: 668 | m_LastAppliedPresetName: Default 669 | m_SaveData: [] 670 | m_SerializedViewNames: [] 671 | m_SerializedViewValues: [] 672 | m_PlayModeViewName: GameView 673 | m_ShowGizmos: 0 674 | m_TargetDisplay: 0 675 | m_ClearColor: {r: 0, g: 0, b: 0, a: 0} 676 | m_TargetSize: {x: 1530, y: 905} 677 | m_TextureFilterMode: 0 678 | m_TextureHideFlags: 61 679 | m_RenderIMGUI: 1 680 | m_EnterPlayModeBehavior: 0 681 | m_UseMipMap: 0 682 | m_VSyncEnabled: 0 683 | m_Gizmos: 0 684 | m_Stats: 1 685 | m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000 686 | m_ZoomArea: 687 | m_HRangeLocked: 0 688 | m_VRangeLocked: 0 689 | hZoomLockedByDefault: 0 690 | vZoomLockedByDefault: 0 691 | m_HBaseRangeMin: -765 692 | m_HBaseRangeMax: 765 693 | m_VBaseRangeMin: -452.5 694 | m_VBaseRangeMax: 452.5 695 | m_HAllowExceedBaseRangeMin: 1 696 | m_HAllowExceedBaseRangeMax: 1 697 | m_VAllowExceedBaseRangeMin: 1 698 | m_VAllowExceedBaseRangeMax: 1 699 | m_ScaleWithWindow: 0 700 | m_HSlider: 0 701 | m_VSlider: 0 702 | m_IgnoreScrollWheelUntilClicked: 0 703 | m_EnableMouseInput: 1 704 | m_EnableSliderZoomHorizontal: 0 705 | m_EnableSliderZoomVertical: 0 706 | m_UniformScale: 1 707 | m_UpDirection: 1 708 | m_DrawArea: 709 | serializedVersion: 2 710 | x: 0 711 | y: 21 712 | width: 1530 713 | height: 905 714 | m_Scale: {x: 1, y: 1} 715 | m_Translation: {x: 765, y: 452.5} 716 | m_MarginLeft: 0 717 | m_MarginRight: 0 718 | m_MarginTop: 0 719 | m_MarginBottom: 0 720 | m_LastShownAreaInsideMargins: 721 | serializedVersion: 2 722 | x: -765 723 | y: -452.5 724 | width: 1530 725 | height: 905 726 | m_MinimalGUI: 1 727 | m_defaultScale: 1 728 | m_LastWindowPixelSize: {x: 1530, y: 926} 729 | m_ClearInEditMode: 1 730 | m_NoCameraWarning: 1 731 | m_LowResolutionForAspectRatios: 01000000000000000000 732 | m_XRRenderMode: 0 733 | m_RenderTexture: {fileID: 0} 734 | -------------------------------------------------------------------------------- /UserSettings/Search.settings: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GarrettGunnell/Shell-Texturing/e60583627f00f0267439ee77b2c2bcee0a034a0b/example.png --------------------------------------------------------------------------------