├── .circleci ├── ProjectSettings │ └── ProjectSettings.asset ├── config.yml └── scripts │ ├── prepare_unity.sh │ └── run_unity_tests.sh ├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── commit_message_check.yml │ └── release.yml ├── .releaserc.json ├── CHANGELOG.md ├── CHANGELOG.md.meta ├── CONTRIBUTING.md ├── CONTRIBUTING.md.meta ├── CONTRIBUTORS.md ├── CONTRIBUTORS.md.meta ├── Editor.meta ├── Editor ├── LODGeneratorHelperEditor.cs ├── LODGeneratorHelperEditor.cs.meta ├── SerializedPropertyExtensions.cs ├── SerializedPropertyExtensions.cs.meta ├── Whinarn.UnityMeshSimplifier.Editor.asmdef └── Whinarn.UnityMeshSimplifier.Editor.asmdef.meta ├── LICENSE.md ├── LICENSE.md.meta ├── README.md ├── README.md.meta ├── Runtime.meta ├── Runtime ├── AssemblyAttributes.cs ├── AssemblyAttributes.cs.meta ├── BlendShape.cs ├── BlendShape.cs.meta ├── Components.meta ├── Components │ ├── LODBackupComponent.cs │ ├── LODBackupComponent.cs.meta │ ├── LODGeneratorHelper.cs │ └── LODGeneratorHelper.cs.meta ├── Exceptions.meta ├── Exceptions │ ├── ValidateSimplificationOptionsException.cs │ └── ValidateSimplificationOptionsException.cs.meta ├── Internal.meta ├── Internal │ ├── BlendShapeContainer.cs │ ├── BlendShapeContainer.cs.meta │ ├── BlendShapeFrameContainer.cs │ ├── BlendShapeFrameContainer.cs.meta │ ├── BorderVertex.cs │ ├── BorderVertex.cs.meta │ ├── Ref.cs │ ├── Ref.cs.meta │ ├── Triangle.cs │ ├── Triangle.cs.meta │ ├── UVChannels.cs │ ├── UVChannels.cs.meta │ ├── Vertex.cs │ └── Vertex.cs.meta ├── LODGenerator.cs ├── LODGenerator.cs.meta ├── LODLevel.cs ├── LODLevel.cs.meta ├── Math.meta ├── Math │ ├── MathHelper.cs │ ├── MathHelper.cs.meta │ ├── SymmetricMatrix.cs │ ├── SymmetricMatrix.cs.meta │ ├── Vector3d.cs │ └── Vector3d.cs.meta ├── MeshCombiner.cs ├── MeshCombiner.cs.meta ├── MeshSimplifier.cs ├── MeshSimplifier.cs.meta ├── SimplificationOptions.cs ├── SimplificationOptions.cs.meta ├── Utility.meta ├── Utility │ ├── IOUtils.cs │ ├── IOUtils.cs.meta │ ├── MeshUtils.cs │ ├── MeshUtils.cs.meta │ ├── ResizableArray.cs │ └── ResizableArray.cs.meta ├── Whinarn.UnityMeshSimplifier.Runtime.asmdef └── Whinarn.UnityMeshSimplifier.Runtime.asmdef.meta ├── Tests.meta ├── Tests ├── Editor.meta └── Editor │ ├── MeshUtilsTest.cs │ ├── MeshUtilsTest.cs.meta │ ├── Whinarn.UnityMeshSimplifier.Editor.Tests.asmdef │ └── Whinarn.UnityMeshSimplifier.Editor.Tests.asmdef.meta ├── Third Party Notices.md ├── Third Party Notices.md.meta ├── package.json └── package.json.meta /.circleci/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: 18 7 | productGUID: 57ccb20c54a965a44a7abac222c2c8fa 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: Whinarn 16 | productName: UnityMeshSimplifier 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | displayResolutionDialog: 1 56 | iosUseCustomAppBackgroundBehavior: 0 57 | iosAllowHTTPDownload: 1 58 | allowedAutorotateToPortrait: 1 59 | allowedAutorotateToPortraitUpsideDown: 1 60 | allowedAutorotateToLandscapeRight: 1 61 | allowedAutorotateToLandscapeLeft: 1 62 | useOSAutorotation: 1 63 | use32BitDisplayBuffer: 1 64 | preserveFramebufferAlpha: 0 65 | disableDepthAndStencilBuffers: 0 66 | androidStartInFullscreen: 1 67 | androidRenderOutsideSafeArea: 0 68 | androidBlitType: 0 69 | defaultIsNativeResolution: 1 70 | macRetinaSupport: 1 71 | runInBackground: 1 72 | captureSingleScreen: 0 73 | muteOtherAudioSources: 0 74 | Prepare IOS For Recording: 0 75 | Force IOS Speakers When Recording: 0 76 | deferSystemGesturesMode: 0 77 | hideHomeButton: 0 78 | submitAnalytics: 1 79 | usePlayerLog: 1 80 | bakeCollisionMeshes: 0 81 | forceSingleInstance: 0 82 | resizableWindow: 0 83 | useMacAppStoreValidation: 0 84 | macAppStoreCategory: public.app-category.games 85 | gpuSkinning: 1 86 | graphicsJobs: 0 87 | xboxPIXTextureCapture: 0 88 | xboxEnableAvatar: 0 89 | xboxEnableKinect: 0 90 | xboxEnableKinectAutoTracking: 0 91 | xboxEnableFitness: 0 92 | visibleInBackground: 1 93 | allowFullscreenSwitch: 1 94 | graphicsJobMode: 0 95 | fullscreenMode: 1 96 | xboxSpeechDB: 0 97 | xboxEnableHeadOrientation: 0 98 | xboxEnableGuest: 0 99 | xboxEnablePIXSampling: 0 100 | metalFramebufferOnly: 0 101 | xboxOneResolution: 0 102 | xboxOneSResolution: 0 103 | xboxOneXResolution: 3 104 | xboxOneMonoLoggingLevel: 0 105 | xboxOneLoggingLevel: 1 106 | xboxOneDisableEsram: 0 107 | xboxOneEnableTypeOptimization: 0 108 | xboxOnePresentImmediateThreshold: 0 109 | switchQueueCommandMemory: 0 110 | switchQueueControlMemory: 16384 111 | switchQueueComputeMemory: 262144 112 | switchNVNShaderPoolsGranularity: 33554432 113 | switchNVNDefaultPoolsGranularity: 16777216 114 | switchNVNOtherPoolsGranularity: 16777216 115 | switchNVNMaxPublicTextureIDCount: 0 116 | switchNVNMaxPublicSamplerIDCount: 0 117 | vulkanEnableSetSRGBWrite: 0 118 | m_SupportedAspectRatios: 119 | 4:3: 1 120 | 5:4: 1 121 | 16:10: 1 122 | 16:9: 1 123 | Others: 1 124 | bundleVersion: 0.1 125 | preloadedAssets: [] 126 | metroInputSource: 0 127 | wsaTransparentSwapchain: 0 128 | m_HolographicPauseOnTrackingLoss: 1 129 | xboxOneDisableKinectGpuReservation: 1 130 | xboxOneEnable7thCore: 1 131 | isWsaHolographicRemotingEnabled: 0 132 | vrSettings: 133 | cardboard: 134 | depthFormat: 0 135 | enableTransitionView: 0 136 | daydream: 137 | depthFormat: 0 138 | useSustainedPerformanceMode: 0 139 | enableVideoLayer: 0 140 | useProtectedVideoMemory: 0 141 | minimumSupportedHeadTracking: 0 142 | maximumSupportedHeadTracking: 1 143 | hololens: 144 | depthFormat: 1 145 | depthBufferSharingEnabled: 1 146 | oculus: 147 | sharedDepthBuffer: 1 148 | dashSupport: 1 149 | lowOverheadMode: 0 150 | protectedContext: 0 151 | v2Signing: 0 152 | enable360StereoCapture: 0 153 | protectGraphicsMemory: 0 154 | enableFrameTimingStats: 0 155 | useHDRDisplay: 0 156 | m_ColorGamuts: 00000000 157 | targetPixelDensity: 30 158 | resolutionScalingMode: 0 159 | androidSupportedAspectRatio: 1 160 | androidMaxAspectRatio: 2.1 161 | applicationIdentifier: {} 162 | buildNumber: {} 163 | AndroidBundleVersionCode: 1 164 | AndroidMinSdkVersion: 16 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: 9.0 180 | tvOSSdkVersion: 0 181 | tvOSRequireExtendedGameController: 0 182 | tvOSTargetOSVersionString: 9.0 183 | uIPrerenderedIcon: 0 184 | uIRequiresPersistentWiFi: 0 185 | uIRequiresFullScreen: 1 186 | uIStatusBarHidden: 1 187 | uIExitOnSuspend: 0 188 | uIStatusBarStyle: 0 189 | iPhoneSplashScreen: {fileID: 0} 190 | iPhoneHighResSplashScreen: {fileID: 0} 191 | iPhoneTallHighResSplashScreen: {fileID: 0} 192 | iPhone47inSplashScreen: {fileID: 0} 193 | iPhone55inPortraitSplashScreen: {fileID: 0} 194 | iPhone55inLandscapeSplashScreen: {fileID: 0} 195 | iPhone58inPortraitSplashScreen: {fileID: 0} 196 | iPhone58inLandscapeSplashScreen: {fileID: 0} 197 | iPadPortraitSplashScreen: {fileID: 0} 198 | iPadHighResPortraitSplashScreen: {fileID: 0} 199 | iPadLandscapeSplashScreen: {fileID: 0} 200 | iPadHighResLandscapeSplashScreen: {fileID: 0} 201 | appleTVSplashScreen: {fileID: 0} 202 | appleTVSplashScreen2x: {fileID: 0} 203 | tvOSSmallIconLayers: [] 204 | tvOSSmallIconLayers2x: [] 205 | tvOSLargeIconLayers: [] 206 | tvOSLargeIconLayers2x: [] 207 | tvOSTopShelfImageLayers: [] 208 | tvOSTopShelfImageLayers2x: [] 209 | tvOSTopShelfImageWideLayers: [] 210 | tvOSTopShelfImageWideLayers2x: [] 211 | iOSLaunchScreenType: 0 212 | iOSLaunchScreenPortrait: {fileID: 0} 213 | iOSLaunchScreenLandscape: {fileID: 0} 214 | iOSLaunchScreenBackgroundColor: 215 | serializedVersion: 2 216 | rgba: 0 217 | iOSLaunchScreenFillPct: 100 218 | iOSLaunchScreenSize: 100 219 | iOSLaunchScreenCustomXibPath: 220 | iOSLaunchScreeniPadType: 0 221 | iOSLaunchScreeniPadImage: {fileID: 0} 222 | iOSLaunchScreeniPadBackgroundColor: 223 | serializedVersion: 2 224 | rgba: 0 225 | iOSLaunchScreeniPadFillPct: 100 226 | iOSLaunchScreeniPadSize: 100 227 | iOSLaunchScreeniPadCustomXibPath: 228 | iOSUseLaunchScreenStoryboard: 0 229 | iOSLaunchScreenCustomStoryboardPath: 230 | iOSDeviceRequirements: [] 231 | iOSURLSchemes: [] 232 | iOSBackgroundModes: 0 233 | iOSMetalForceHardShadows: 0 234 | metalEditorSupport: 1 235 | metalAPIValidation: 1 236 | iOSRenderExtraFrameOnPause: 0 237 | appleDeveloperTeamID: 238 | iOSManualSigningProvisioningProfileID: 239 | tvOSManualSigningProvisioningProfileID: 240 | iOSManualSigningProvisioningProfileType: 0 241 | tvOSManualSigningProvisioningProfileType: 0 242 | appleEnableAutomaticSigning: 0 243 | iOSRequireARKit: 0 244 | iOSAutomaticallyDetectAndAddCapabilities: 1 245 | appleEnableProMotion: 0 246 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 247 | templatePackageId: com.unity.template.3d@1.3.0 248 | templateDefaultScene: Assets/Scenes/SampleScene.unity 249 | AndroidTargetArchitectures: 5 250 | AndroidSplashScreenScale: 0 251 | androidSplashScreen: {fileID: 0} 252 | AndroidKeystoreName: 253 | AndroidKeyaliasName: 254 | AndroidBuildApkPerCpuArchitecture: 0 255 | AndroidTVCompatibility: 1 256 | AndroidIsGame: 1 257 | AndroidEnableTango: 0 258 | androidEnableBanner: 1 259 | androidUseLowAccuracyLocation: 0 260 | m_AndroidBanners: 261 | - width: 320 262 | height: 180 263 | banner: {fileID: 0} 264 | androidGamepadSupportLevel: 0 265 | resolutionDialogBanner: {fileID: 0} 266 | m_BuildTargetIcons: [] 267 | m_BuildTargetPlatformIcons: [] 268 | m_BuildTargetBatching: 269 | - m_BuildTarget: Standalone 270 | m_StaticBatching: 1 271 | m_DynamicBatching: 0 272 | - m_BuildTarget: tvOS 273 | m_StaticBatching: 1 274 | m_DynamicBatching: 0 275 | - m_BuildTarget: Android 276 | m_StaticBatching: 1 277 | m_DynamicBatching: 0 278 | - m_BuildTarget: iPhone 279 | m_StaticBatching: 1 280 | m_DynamicBatching: 0 281 | - m_BuildTarget: WebGL 282 | m_StaticBatching: 0 283 | m_DynamicBatching: 0 284 | m_BuildTargetGraphicsAPIs: 285 | - m_BuildTarget: AndroidPlayer 286 | m_APIs: 0b00000008000000 287 | m_Automatic: 1 288 | - m_BuildTarget: iOSSupport 289 | m_APIs: 10000000 290 | m_Automatic: 1 291 | - m_BuildTarget: AppleTVSupport 292 | m_APIs: 10000000 293 | m_Automatic: 0 294 | - m_BuildTarget: WebGLSupport 295 | m_APIs: 0b000000 296 | m_Automatic: 1 297 | m_BuildTargetVRSettings: 298 | - m_BuildTarget: Standalone 299 | m_Enabled: 0 300 | m_Devices: 301 | - Oculus 302 | - OpenVR 303 | m_BuildTargetEnableVuforiaSettings: [] 304 | openGLRequireES31: 0 305 | openGLRequireES31AEP: 0 306 | m_TemplateCustomTags: {} 307 | mobileMTRendering: 308 | Android: 1 309 | iPhone: 1 310 | tvOS: 1 311 | m_BuildTargetGroupLightmapEncodingQuality: [] 312 | m_BuildTargetGroupLightmapSettings: [] 313 | playModeTestRunnerEnabled: 0 314 | runPlayModeTestAsEditModeTest: 0 315 | actionOnDotNetUnhandledException: 1 316 | enableInternalProfiler: 0 317 | logObjCUncaughtExceptions: 1 318 | enableCrashReportAPI: 0 319 | cameraUsageDescription: 320 | locationUsageDescription: 321 | microphoneUsageDescription: 322 | switchNetLibKey: 323 | switchSocketMemoryPoolSize: 6144 324 | switchSocketAllocatorPoolSize: 128 325 | switchSocketConcurrencyLimit: 14 326 | switchScreenResolutionBehavior: 2 327 | switchUseCPUProfiler: 0 328 | switchApplicationID: 0x01004b9000490000 329 | switchNSODependencies: 330 | switchTitleNames_0: 331 | switchTitleNames_1: 332 | switchTitleNames_2: 333 | switchTitleNames_3: 334 | switchTitleNames_4: 335 | switchTitleNames_5: 336 | switchTitleNames_6: 337 | switchTitleNames_7: 338 | switchTitleNames_8: 339 | switchTitleNames_9: 340 | switchTitleNames_10: 341 | switchTitleNames_11: 342 | switchTitleNames_12: 343 | switchTitleNames_13: 344 | switchTitleNames_14: 345 | switchPublisherNames_0: 346 | switchPublisherNames_1: 347 | switchPublisherNames_2: 348 | switchPublisherNames_3: 349 | switchPublisherNames_4: 350 | switchPublisherNames_5: 351 | switchPublisherNames_6: 352 | switchPublisherNames_7: 353 | switchPublisherNames_8: 354 | switchPublisherNames_9: 355 | switchPublisherNames_10: 356 | switchPublisherNames_11: 357 | switchPublisherNames_12: 358 | switchPublisherNames_13: 359 | switchPublisherNames_14: 360 | switchIcons_0: {fileID: 0} 361 | switchIcons_1: {fileID: 0} 362 | switchIcons_2: {fileID: 0} 363 | switchIcons_3: {fileID: 0} 364 | switchIcons_4: {fileID: 0} 365 | switchIcons_5: {fileID: 0} 366 | switchIcons_6: {fileID: 0} 367 | switchIcons_7: {fileID: 0} 368 | switchIcons_8: {fileID: 0} 369 | switchIcons_9: {fileID: 0} 370 | switchIcons_10: {fileID: 0} 371 | switchIcons_11: {fileID: 0} 372 | switchIcons_12: {fileID: 0} 373 | switchIcons_13: {fileID: 0} 374 | switchIcons_14: {fileID: 0} 375 | switchSmallIcons_0: {fileID: 0} 376 | switchSmallIcons_1: {fileID: 0} 377 | switchSmallIcons_2: {fileID: 0} 378 | switchSmallIcons_3: {fileID: 0} 379 | switchSmallIcons_4: {fileID: 0} 380 | switchSmallIcons_5: {fileID: 0} 381 | switchSmallIcons_6: {fileID: 0} 382 | switchSmallIcons_7: {fileID: 0} 383 | switchSmallIcons_8: {fileID: 0} 384 | switchSmallIcons_9: {fileID: 0} 385 | switchSmallIcons_10: {fileID: 0} 386 | switchSmallIcons_11: {fileID: 0} 387 | switchSmallIcons_12: {fileID: 0} 388 | switchSmallIcons_13: {fileID: 0} 389 | switchSmallIcons_14: {fileID: 0} 390 | switchManualHTML: 391 | switchAccessibleURLs: 392 | switchLegalInformation: 393 | switchMainThreadStackSize: 1048576 394 | switchPresenceGroupId: 395 | switchLogoHandling: 0 396 | switchReleaseVersion: 0 397 | switchDisplayVersion: 1.0.0 398 | switchStartupUserAccount: 0 399 | switchTouchScreenUsage: 0 400 | switchSupportedLanguagesMask: 0 401 | switchLogoType: 0 402 | switchApplicationErrorCodeCategory: 403 | switchUserAccountSaveDataSize: 0 404 | switchUserAccountSaveDataJournalSize: 0 405 | switchApplicationAttribute: 0 406 | switchCardSpecSize: -1 407 | switchCardSpecClock: -1 408 | switchRatingsMask: 0 409 | switchRatingsInt_0: 0 410 | switchRatingsInt_1: 0 411 | switchRatingsInt_2: 0 412 | switchRatingsInt_3: 0 413 | switchRatingsInt_4: 0 414 | switchRatingsInt_5: 0 415 | switchRatingsInt_6: 0 416 | switchRatingsInt_7: 0 417 | switchRatingsInt_8: 0 418 | switchRatingsInt_9: 0 419 | switchRatingsInt_10: 0 420 | switchRatingsInt_11: 0 421 | switchRatingsInt_12: 0 422 | switchLocalCommunicationIds_0: 423 | switchLocalCommunicationIds_1: 424 | switchLocalCommunicationIds_2: 425 | switchLocalCommunicationIds_3: 426 | switchLocalCommunicationIds_4: 427 | switchLocalCommunicationIds_5: 428 | switchLocalCommunicationIds_6: 429 | switchLocalCommunicationIds_7: 430 | switchParentalControl: 0 431 | switchAllowsScreenshot: 1 432 | switchAllowsVideoCapturing: 1 433 | switchAllowsRuntimeAddOnContentInstall: 0 434 | switchDataLossConfirmation: 0 435 | switchUserAccountLockEnabled: 0 436 | switchSystemResourceMemory: 16777216 437 | switchSupportedNpadStyles: 3 438 | switchNativeFsCacheSize: 32 439 | switchIsHoldTypeHorizontal: 0 440 | switchSupportedNpadCount: 8 441 | switchSocketConfigEnabled: 0 442 | switchTcpInitialSendBufferSize: 32 443 | switchTcpInitialReceiveBufferSize: 64 444 | switchTcpAutoSendBufferSizeMax: 256 445 | switchTcpAutoReceiveBufferSizeMax: 256 446 | switchUdpSendBufferSize: 9 447 | switchUdpReceiveBufferSize: 42 448 | switchSocketBufferEfficiency: 4 449 | switchSocketInitializeEnabled: 1 450 | switchNetworkInterfaceManagerInitializeEnabled: 1 451 | switchPlayerConnectionEnabled: 1 452 | ps4NPAgeRating: 12 453 | ps4NPTitleSecret: 454 | ps4NPTrophyPackPath: 455 | ps4ParentalLevel: 11 456 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 457 | ps4Category: 0 458 | ps4MasterVersion: 01.00 459 | ps4AppVersion: 01.00 460 | ps4AppType: 0 461 | ps4ParamSfxPath: 462 | ps4VideoOutPixelFormat: 0 463 | ps4VideoOutInitialWidth: 1920 464 | ps4VideoOutBaseModeInitialWidth: 1920 465 | ps4VideoOutReprojectionRate: 60 466 | ps4PronunciationXMLPath: 467 | ps4PronunciationSIGPath: 468 | ps4BackgroundImagePath: 469 | ps4StartupImagePath: 470 | ps4StartupImagesFolder: 471 | ps4IconImagesFolder: 472 | ps4SaveDataImagePath: 473 | ps4SdkOverride: 474 | ps4BGMPath: 475 | ps4ShareFilePath: 476 | ps4ShareOverlayImagePath: 477 | ps4PrivacyGuardImagePath: 478 | ps4ExtraSceSysFile: 479 | ps4NPtitleDatPath: 480 | ps4RemotePlayKeyAssignment: -1 481 | ps4RemotePlayKeyMappingDir: 482 | ps4PlayTogetherPlayerCount: 0 483 | ps4EnterButtonAssignment: 1 484 | ps4ApplicationParam1: 0 485 | ps4ApplicationParam2: 0 486 | ps4ApplicationParam3: 0 487 | ps4ApplicationParam4: 0 488 | ps4DownloadDataSize: 0 489 | ps4GarlicHeapSize: 2048 490 | ps4ProGarlicHeapSize: 2560 491 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 492 | ps4pnSessions: 1 493 | ps4pnPresence: 1 494 | ps4pnFriends: 1 495 | ps4pnGameCustomData: 1 496 | playerPrefsSupport: 0 497 | enableApplicationExit: 0 498 | resetTempFolder: 1 499 | restrictedAudioUsageRights: 0 500 | ps4UseResolutionFallback: 0 501 | ps4ReprojectionSupport: 0 502 | ps4UseAudio3dBackend: 0 503 | ps4SocialScreenEnabled: 0 504 | ps4ScriptOptimizationLevel: 0 505 | ps4Audio3dVirtualSpeakerCount: 14 506 | ps4attribCpuUsage: 0 507 | ps4PatchPkgPath: 508 | ps4PatchLatestPkgPath: 509 | ps4PatchChangeinfoPath: 510 | ps4PatchDayOne: 0 511 | ps4attribUserManagement: 0 512 | ps4attribMoveSupport: 0 513 | ps4attrib3DSupport: 0 514 | ps4attribShareSupport: 0 515 | ps4attribExclusiveVR: 0 516 | ps4disableAutoHideSplash: 0 517 | ps4videoRecordingFeaturesUsed: 0 518 | ps4contentSearchFeaturesUsed: 0 519 | ps4CompatibilityPS5: 0 520 | ps4GPU800MHz: 1 521 | ps4attribEyeToEyeDistanceSettingVR: 0 522 | ps4IncludedModules: [] 523 | monoEnv: 524 | splashScreenBackgroundSourceLandscape: {fileID: 0} 525 | splashScreenBackgroundSourcePortrait: {fileID: 0} 526 | spritePackerPolicy: 527 | webGLMemorySize: 256 528 | webGLExceptionSupport: 1 529 | webGLNameFilesAsHashes: 0 530 | webGLDataCaching: 1 531 | webGLDebugSymbols: 0 532 | webGLEmscriptenArgs: 533 | webGLModulesDirectory: 534 | webGLTemplate: APPLICATION:Default 535 | webGLAnalyzeBuildSize: 0 536 | webGLUseEmbeddedResources: 0 537 | webGLCompressionFormat: 1 538 | webGLLinkerTarget: 1 539 | webGLThreadsSupport: 0 540 | scriptingDefineSymbols: {} 541 | platformArchitecture: {} 542 | scriptingBackend: {} 543 | il2cppCompilerConfiguration: {} 544 | managedStrippingLevel: {} 545 | incrementalIl2cppBuild: {} 546 | allowUnsafeCode: 0 547 | additionalIl2CppArgs: 548 | scriptingRuntimeVersion: 1 549 | apiCompatibilityLevelPerPlatform: {} 550 | m_RenderingPath: 1 551 | m_MobileRenderingPath: 1 552 | metroPackageName: Template_3D 553 | metroPackageVersion: 554 | metroCertificatePath: 555 | metroCertificatePassword: 556 | metroCertificateSubject: 557 | metroCertificateIssuer: 558 | metroCertificateNotAfter: 0000000000000000 559 | metroApplicationDescription: Template_3D 560 | wsaImages: {} 561 | metroTileShortName: 562 | metroTileShowName: 0 563 | metroMediumTileShowName: 0 564 | metroLargeTileShowName: 0 565 | metroWideTileShowName: 0 566 | metroSupportStreamingInstall: 0 567 | metroLastRequiredScene: 0 568 | metroDefaultTileSize: 1 569 | metroTileForegroundText: 2 570 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 571 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 572 | a: 1} 573 | metroSplashScreenUseBackgroundColor: 0 574 | platformCapabilities: {} 575 | metroTargetDeviceFamilies: {} 576 | metroFTAName: 577 | metroFTAFileTypes: [] 578 | metroProtocolName: 579 | metroCompilationOverrides: 1 580 | XboxOneProductId: 581 | XboxOneUpdateKey: 582 | XboxOneSandboxId: 583 | XboxOneContentId: 584 | XboxOneTitleId: 585 | XboxOneSCId: 586 | XboxOneGameOsOverridePath: 587 | XboxOnePackagingOverridePath: 588 | XboxOneAppManifestOverridePath: 589 | XboxOneVersion: 1.0.0.0 590 | XboxOnePackageEncryption: 0 591 | XboxOnePackageUpdateGranularity: 2 592 | XboxOneDescription: 593 | XboxOneLanguage: 594 | - enus 595 | XboxOneCapability: [] 596 | XboxOneGameRating: {} 597 | XboxOneIsContentPackage: 0 598 | XboxOneEnableGPUVariability: 1 599 | XboxOneSockets: {} 600 | XboxOneSplashScreen: {fileID: 0} 601 | XboxOneAllowedProductIds: [] 602 | XboxOnePersistentLocalStorageSize: 0 603 | XboxOneXTitleMemory: 8 604 | xboxOneScriptCompiler: 1 605 | XboxOneOverrideIdentityName: 606 | vrEditorSettings: 607 | daydream: 608 | daydreamIconForeground: {fileID: 0} 609 | daydreamIconBackground: {fileID: 0} 610 | cloudServicesEnabled: 611 | UNet: 1 612 | luminIcon: 613 | m_Name: 614 | m_ModelFolderPath: 615 | m_PortalFolderPath: 616 | luminCert: 617 | m_CertPath: 618 | m_PrivateKeyPath: 619 | luminIsChannelApp: 0 620 | luminVersion: 621 | m_VersionCode: 1 622 | m_VersionName: 623 | facebookSdkVersion: 7.9.4 624 | facebookAppId: 625 | facebookCookies: 1 626 | facebookLogging: 1 627 | facebookStatus: 1 628 | facebookXfbml: 0 629 | facebookFrictionlessRequests: 1 630 | apiCompatibilityLevel: 6 631 | cloudProjectId: 632 | framebufferDepthMemorylessMode: 0 633 | projectName: 634 | organizationId: 635 | cloudEnabled: 0 636 | enableNativePlatformBackendsForNewInputSystem: 0 637 | disableOldInputManagerSupport: 0 638 | legacyClampBlendShapeWeights: 0 639 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | executors: 3 | unity-2018: 4 | docker: 5 | - image: gableroux/unity3d:2018.4.26f1 6 | environment: 7 | UNITY_LICENSE_CONTENT_VAR: UNITY_LICENCE_CONTENT_2018_4_26 8 | unity-2019: 9 | docker: 10 | - image: gableroux/unity3d:2019.4.8f1 11 | environment: 12 | UNITY_LICENSE_CONTENT_VAR: UNITY_LICENSE_CONTENT_2019_4_8 13 | unity-2020: 14 | docker: 15 | - image: gableroux/unity3d:2020.1.2f1 16 | environment: 17 | UNITY_LICENSE_CONTENT_VAR: UNITY_LICENCE_CONTENT_2020_1_2 18 | RUN_UNITY_WITH_NOGRAPHICS: "true" 19 | 20 | .test-2018: &test-2018 21 | executor: unity-2018 22 | steps: 23 | - checkout 24 | - run: 25 | name: Preparing Unity 26 | command: chmod +x ./.circleci/scripts/prepare_unity.sh && ./.circleci/scripts/prepare_unity.sh 27 | - run: 28 | name: Running tests 29 | command: chmod +x ./.circleci/scripts/run_unity_tests.sh && ./.circleci/scripts/run_unity_tests.sh 30 | - store_artifacts: 31 | path: test-results 32 | destination: test-results 33 | - store_test_results: 34 | path: test-results 35 | 36 | .test-2019: &test-2019 37 | executor: unity-2019 38 | steps: 39 | - checkout 40 | - run: 41 | name: Preparing Unity 42 | command: chmod +x ./.circleci/scripts/prepare_unity.sh && ./.circleci/scripts/prepare_unity.sh 43 | - run: 44 | name: Running tests 45 | command: chmod +x ./.circleci/scripts/run_unity_tests.sh && ./.circleci/scripts/run_unity_tests.sh 46 | - store_artifacts: 47 | path: test-results 48 | destination: test-results 49 | - store_test_results: 50 | path: test-results 51 | 52 | .test-2020: &test-2020 53 | executor: unity-2020 54 | steps: 55 | - checkout 56 | - run: 57 | name: Preparing Unity 58 | command: chmod +x ./.circleci/scripts/prepare_unity.sh && ./.circleci/scripts/prepare_unity.sh 59 | - run: 60 | name: Running tests 61 | command: chmod +x ./.circleci/scripts/run_unity_tests.sh && ./.circleci/scripts/run_unity_tests.sh 62 | - store_artifacts: 63 | path: test-results 64 | destination: test-results 65 | - store_test_results: 66 | path: test-results 67 | 68 | jobs: 69 | test-editmode-2018: 70 | <<: *test-2018 71 | environment: 72 | TEST_PLATFORM: editmode 73 | test-editmode-2019: 74 | <<: *test-2019 75 | environment: 76 | TEST_PLATFORM: editmode 77 | test-editmode-2020: 78 | <<: *test-2020 79 | environment: 80 | TEST_PLATFORM: editmode 81 | # test-playmode-2019: 82 | # <<: *test-2019 83 | # environment: 84 | # TEST_PLATFORM: playmode 85 | 86 | workflows: 87 | version: 2 88 | test: 89 | jobs: 90 | - test-editmode-2018: 91 | context: Unity 92 | - test-editmode-2019: 93 | context: Unity 94 | - test-editmode-2020: 95 | context: Unity 96 | # - test-playmode-2019: 97 | # context: Unity 98 | -------------------------------------------------------------------------------- /.circleci/scripts/prepare_unity.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | set -x 5 | 6 | mkdir -p /root/.cache/unity3d 7 | mkdir -p /root/.local/share/unity3d/Unity/ 8 | 9 | set +x 10 | 11 | echo "Extracting Unity license file..." 12 | UNITY_LICENSE_CONTENT="${!UNITY_LICENSE_CONTENT_VAR}" 13 | if [ -z "$UNITY_LICENSE_CONTENT" ]; then 14 | echo "The $UNITY_LICENSE_CONTENT_VAR environment variable is not set. Code is not trusted. Aborting." 15 | exit 1 16 | fi 17 | echo "$UNITY_LICENSE_CONTENT" | base64 --decode | tr -d '\r' > /root/.local/share/unity3d/Unity/Unity_lic.ulf 18 | 19 | echo "Building Unity project..." 20 | PROJECT_ROOT=$(pwd) 21 | PACKAGE_DEST="$PROJECT_ROOT/Packages/UnityMeshSimplifier" 22 | mkdir -p "$PACKAGE_DEST" 23 | mv Editor "$PACKAGE_DEST/" 24 | mv Runtime "$PACKAGE_DEST/" 25 | mv Tests "$PACKAGE_DEST/" 26 | mv package.json "$PACKAGE_DEST/" 27 | 28 | mkdir "$PROJECT_ROOT/Assets" 29 | mkdir "$PROJECT_ROOT/Library" 30 | mkdir "$PROJECT_ROOT/ProjectSettings" 31 | cp -Trv "$PROJECT_ROOT/.circleci/ProjectSettings/" "$PROJECT_ROOT/ProjectSettings/" 32 | -------------------------------------------------------------------------------- /.circleci/scripts/run_unity_tests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -x 4 | 5 | echo "Testing for $TEST_PLATFORM" 6 | 7 | PROJECT_ROOT="$(pwd)" 8 | TEST_RESULT_DIR="$PROJECT_ROOT/test-results/nunit" 9 | TEST_RESULT_FILE_NAME="$TEST_PLATFORM-results.xml" 10 | TEST_RESULT_FILE_PATH="$TEST_RESULT_DIR/$TEST_RESULT_FILE_NAME" 11 | 12 | if [ -z "$UNITY_EXECUTABLE" ]; then 13 | UNITY_EXECUTABLE="/opt/Unity/Editor/Unity" 14 | fi 15 | 16 | if [ "$RUN_UNITY_WITH_NOGRAPHICS" == "true" ]; then 17 | $UNITY_EXECUTABLE \ 18 | -projectPath "$PROJECT_ROOT" \ 19 | -runTests \ 20 | -testPlatform "$TEST_PLATFORM" \ 21 | -testResults "$TEST_RESULT_FILE_PATH" \ 22 | -logFile - \ 23 | -batchmode \ 24 | -nographics 25 | else 26 | xvfb-run --auto-servernum --server-args='-screen 0 640x480x24' $UNITY_EXECUTABLE \ 27 | -projectPath "$PROJECT_ROOT" \ 28 | -runTests \ 29 | -testPlatform "$TEST_PLATFORM" \ 30 | -testResults "$TEST_RESULT_FILE_PATH" \ 31 | -logFile - \ 32 | -batchmode 33 | fi 34 | 35 | UNITY_EXIT_CODE=$? 36 | 37 | if [ $UNITY_EXIT_CODE -eq 0 ]; then 38 | echo "Run succeeded, no failures occurred"; 39 | elif [ $UNITY_EXIT_CODE -eq 2 ]; then 40 | echo "Run succeeded, some tests failed"; 41 | elif [ $UNITY_EXIT_CODE -eq 3 ]; then 42 | echo "Run failure (other failure)"; 43 | else 44 | echo "Unexpected exit code $UNITY_EXIT_CODE"; 45 | exit $UNITY_EXIT_CODE 46 | fi 47 | 48 | grep test-run < "$TEST_RESULT_FILE_PATH" | grep Passed 49 | exit $UNITY_EXIT_CODE 50 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.md] 11 | indent_style = space 12 | indent_size = 2 13 | 14 | [*.yml] 15 | indent_style = space 16 | indent_size = 2 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: Whinarn 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Environment (please complete the following information):** 27 | - OS: [e.g. Mac OS] 28 | - Unity Version: [e.g. 2019.3.4f1] 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: Whinarn 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **Related issues** 2 | Reference the issues related to your pull request here. 3 | 4 | **Describe the changes** 5 | A clear and concise description of what the goal of this pull request is. 6 | 7 | **How to test** 8 | A clear and concise description of how to test your changes. 9 | 10 | **Screenshots** 11 | If applicable, add screenshots to help explain your changes. 12 | 13 | **Known issues** 14 | Specify any known issues with your changes. 15 | 16 | **Further details** 17 | Add any further details that might be good to know. 18 | -------------------------------------------------------------------------------- /.github/workflows/commit_message_check.yml: -------------------------------------------------------------------------------- 1 | name: 'Commit Message Check' 2 | on: 3 | push: 4 | branches: 5 | - '**' 6 | 7 | jobs: 8 | check-commit-message: 9 | name: Check Commit Message 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Check Commit Type And Scope 13 | uses: gsactions/commit-message-checker@v1 14 | with: 15 | pattern: '^[a-z]+(?:\([a-z\-]+\))?: .+(?:\n(?:\n.+)+)?(?:\n\n.+)?$' 16 | error: 'Your message must have the correct format "(): " with an optional body and footer separated by blank lines.' 17 | - name: Check Line Length 18 | uses: gsactions/commit-message-checker@v1 19 | with: 20 | pattern: '^.{1,72}(?:\n.{0,100})*$' 21 | error: 'The maximum line length of 100 characters is exceeded.' 22 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | branches: 5 | - master 6 | jobs: 7 | release: 8 | name: release 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | with: 13 | fetch-depth: 0 14 | - name: Release 15 | uses: cycjimmy/semantic-release-action@v2 16 | with: 17 | semantic_version: 19 18 | extra_plugins: | 19 | @semantic-release/changelog 20 | @semantic-release/git 21 | branch: master 22 | env: 23 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 24 | -------------------------------------------------------------------------------- /.releaserc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tagFormat": "v${version}", 3 | "plugins": [ 4 | ["@semantic-release/commit-analyzer", { "preset": "angular" }], 5 | ["@semantic-release/release-notes-generator", { "preset": "angular" }], 6 | ["@semantic-release/changelog", { "preset": "angular" }], 7 | ["@semantic-release/npm", { "npmPublish": false }], 8 | ["@semantic-release/git", { 9 | "assets": [ 10 | "package.json", 11 | "CHANGELOG.md" 12 | ], 13 | "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" 14 | }], 15 | "@semantic-release/github" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # [3.1.0](https://github.com/Whinarn/UnityMeshSimplifier/compare/v3.0.1...v3.1.0) (2022-02-25) 2 | 3 | 4 | ### Features 5 | 6 | * **simplifier:** added options validation ([55264ce](https://github.com/Whinarn/UnityMeshSimplifier/commit/55264ce8a28f6755a2a920f25aa2312f2d185e72)) 7 | 8 | ## [3.0.1](https://github.com/Whinarn/UnityMeshSimplifier/compare/v3.0.0...v3.0.1) (2021-06-25) 9 | 10 | 11 | ### Bug Fixes 12 | 13 | * support Unity 2021 ([2f2eb3b](https://github.com/Whinarn/UnityMeshSimplifier/commit/2f2eb3bee2ac1d1691373200983ac64ae507dfc8)) 14 | 15 | # [3.0.0](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.3.6...v3.0.0) (2021-03-27) 16 | 17 | 18 | ### Bug Fixes 19 | 20 | * **lods:** prevent empty mesh names ([ec6cf87](https://github.com/Whinarn/UnityMeshSimplifier/commit/ec6cf87c4c652aca953cb782d8796749037322a6)) 21 | * **simplifier:** obsolete properties that moved to options struct ([84664d1](https://github.com/Whinarn/UnityMeshSimplifier/commit/84664d1852da93e5206f335d17db7025c7be5281)) 22 | * **simplifier:** options for uv component count ([7f7b773](https://github.com/Whinarn/UnityMeshSimplifier/commit/7f7b77370442f5e49dd74b2e8c39a427b21980ab)) 23 | * **simplifier:** removed obsolete properties ([24ccc56](https://github.com/Whinarn/UnityMeshSimplifier/commit/24ccc5663c1281e2feadf6c03e947481a68844c2)) 24 | 25 | 26 | ### Features 27 | 28 | * **lods:** save assets path is now less restricted ([380bda9](https://github.com/Whinarn/UnityMeshSimplifier/commit/380bda999c8b95baed6a6533b0b66bfb4eb8d2c9)) 29 | * **package:** bump minimum required version of Unity to 2018.1 ([8f37f81](https://github.com/Whinarn/UnityMeshSimplifier/commit/8f37f81a7688c2ff3a895c9616e4b171cd54a633)) 30 | * **simplifier:** set manual uv component count ([9795860](https://github.com/Whinarn/UnityMeshSimplifier/commit/9795860c6354b87924b97b354688e2b59098eda7)) 31 | 32 | 33 | ### BREAKING CHANGES 34 | 35 | * **simplifier:** removed obsolete properties 36 | * **lods:** save assets paths are now related to Assets/ rather 37 | than Assets/UMS_LODS/ 38 | 39 | ## [2.3.6](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.3.5...v2.3.6) (2020-11-20) 40 | 41 | 42 | ### Bug Fixes 43 | 44 | * **simplifier:** prevent near zero denominator ([469272a](https://github.com/Whinarn/UnityMeshSimplifier/commit/469272ae031774383eb13253e7e2d5abbaafe79c)) 45 | 46 | ## [2.3.5](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.3.4...v2.3.5) (2020-10-10) 47 | 48 | 49 | ### Bug Fixes 50 | 51 | * **lod-generator-helper:** mark scene as dirty ([7554f8e](https://github.com/Whinarn/UnityMeshSimplifier/commit/7554f8ecb7cd105aacdad4a07d32eaf081cf7ae3)) 52 | * **unity:** increase support for unity 2020 ([7a28614](https://github.com/Whinarn/UnityMeshSimplifier/commit/7a286148aecef6f7918abce34f3e7000f2856f4a)) 53 | 54 | ## [2.3.4](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.3.3...v2.3.4) (2020-08-25) 55 | 56 | 57 | ### Bug Fixes 58 | 59 | * **tests:** compile errors on 2018.4.26f1 ([#38](https://github.com/Whinarn/UnityMeshSimplifier/issues/38)) ([91b5ad7](https://github.com/Whinarn/UnityMeshSimplifier/commit/91b5ad7de7d6f77d29275fc69d3e7506df6a586f)) 60 | 61 | ## [2.3.3](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.3.2...v2.3.3) (2020-05-01) 62 | 63 | 64 | ### Bug Fixes 65 | 66 | * **mesh:** bug related to degenerated triangle when using smart linking ([e9d5def](https://github.com/Whinarn/UnityMeshSimplifier/commit/e9d5def2eb6e18eed7e9f86943e5d32bf0721d60)) 67 | 68 | ## [2.3.2](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.3.1...v2.3.2) (2020-04-30) 69 | 70 | 71 | ### Bug Fixes 72 | 73 | * **meshutils:** GetUsedUVComponents should now be able to return zero ([af60914](https://github.com/Whinarn/UnityMeshSimplifier/commit/af6091481d212f5c98bf1f8f16cf922367f0a08d)) 74 | 75 | ## [2.3.1](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.3.0...v2.3.1) (2020-04-14) 76 | 77 | 78 | ### Reverts 79 | 80 | * temporarily allow refactor commits to trigger a release ([fd8d697](https://github.com/Whinarn/UnityMeshSimplifier/commit/fd8d69751038f0d8a6fc9880c3159d3718d6a2ee)) 81 | 82 | ## [2.3.0](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.2.0...v2.3.0) (2020-04-14) 83 | 84 | ### Added 85 | 86 | * mesh simplifier uses the simplification options struct ([87d3fa8](https://github.com/Whinarn/UnityMeshSimplifier/commit/87d3fa81419c4fce2d360572290bfecee7a3fbf9)) 87 | 88 | ## [v2.2.0](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.1.0...v2.2.0) (2020-03-24) 89 | 90 | 91 | ### Added 92 | 93 | * An option for preserving surface curvature. 94 | 95 | ### Fixed 96 | 97 | * A bug with calculating vertex positions when combining meshes. 98 | 99 | ## [v2.1.0](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.0.1...v2.1.0) (2020-03-16) 100 | 101 | 102 | ### Added 103 | 104 | * A button to copy visibility changes from the LOD Group. 105 | 106 | ### Fixed 107 | 108 | * Fixed an incorrect tooltip for the MaxIterationCount of the SimplificationOptions struct. 109 | * Fixed potential problems of destroying LODs after some renderers no longer exists. 110 | * Meshes are always readable in editor. 111 | * Fixed a warning that is printed when a folder that doesn't exist is attempted to be removed. 112 | * Fixed bugs where mismatching bindposes resulted in incorrectly combined meshes. 113 | 114 | ## [v2.0.1](https://github.com/Whinarn/UnityMeshSimplifier/compare/v2.0.0...v2.0.1) (2019-07-12) 115 | 116 | 117 | ### Fixed 118 | 119 | * Fixed compilation errors in Unity 2018 120 | 121 | ## [v2.0.0](https://github.com/Whinarn/UnityMeshSimplifier/compare/v1.0.3-legacy...v2.0.0) (2019-07-07) 122 | 123 | 124 | ### Added 125 | 126 | * Unity package manifest file. 127 | * LOD generator. 128 | * Component to assist with LOD generation. 129 | * Added support to interpolate blend shapes. 130 | * Added support for up to 8 UV channels. 131 | 132 | ### Removed 133 | 134 | * Removed the long obsolete KeepBorders property on the MeshSimplifier class. 135 | 136 | ### Changed 137 | 138 | * Reorganized the project layout to match the Unity convention. 139 | * The vertex attributes are now interpolated using barycentric coordinates. 140 | 141 | ## [v1.0.3](https://github.com/Whinarn/UnityMeshSimplifier/compare/v1.0.2-legacy...v1.0.3-legacy) (2018-10-20) 142 | 143 | 144 | ### Fixed 145 | 146 | * The maximum hash distance is now calculated based on the VertexLinkDistanceSqr property value instead of being hardcoded to 1. 147 | * Fixed an issue with the vertex hashes not using the entire integer range, but instead was using only half of it. 148 | 149 | ## [v1.0.2](https://github.com/Whinarn/UnityMeshSimplifier/compare/v1.0.1-legacy...v1.0.2-legacy) (2018-07-05) 150 | 151 | 152 | ### Fixed 153 | 154 | * Fixed a documentation mistake with the VertexLinkDistanceSqr property on the MeshSimplifier class. 155 | 156 | ## [v1.0.1](https://github.com/Whinarn/UnityMeshSimplifier/compare/v1.0.0-legacy...v1.0.1-legacy) (2018-06-03) 157 | 158 | 159 | ### Fixed 160 | 161 | * Added more exception throwing on invalid parameters that wasn't previously handled. 162 | * Added assertions when getting the triangle indices for a sub-mesh, to detect a faulty state more easily. 163 | * Optimized the retrieving of sub-mesh triangles when having a large number of sub-meshes. 164 | * Heavily optimized the initialization and simplification process. 165 | 166 | ## [v1.0.0](https://github.com/Whinarn/UnityMeshSimplifier/compare/v0.1.0-legacy...v1.0.0-legacy) (2018-05-12) 167 | 168 | 169 | ### Added 170 | 171 | * Unity assembly definition file. 172 | * Feature to change the maximum iteration count for the mesh simplification. 173 | 174 | ### Fixed 175 | 176 | * Better support for skinned meshes. 177 | * Support for Unity 2017.4 and 2018.X 178 | 179 | ## [v0.1.0](https://github.com/Whinarn/UnityMeshSimplifier/releases/tag/v0.1.0-legacy) (2018-04-01) 180 | 181 | 182 | ### Added 183 | 184 | * A mesh simplification algorithm based on the [Fast Quadric Mesh Simplification](https://github.com/sp4cerat/Fast-Quadric-Mesh-Simplification) algorithm. 185 | * A feature (Smart Linking) that attempts to solve problems where holes could appear in simplified meshes. 186 | * Support for static and skinned meshes. 187 | * Support for 2D, 3D and 4D UVs. 188 | -------------------------------------------------------------------------------- /CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e029678e8aeb0044b335e85de4f2948 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to UnityMeshSimplifier 2 | 3 | Thank you for considering contributing to this project. 4 | 5 | ## Setup 6 | 7 | In order to start contributing to this project, you will need to setup a new Unity project. 8 | Make sure that you are using a compatible version of Unity ([see here](https://github.com/Whinarn/UnityMeshSimplifier/blob/master/README.md#compatibility)). 9 | 10 | The next step is to fork your own copy of this repository here on Github. 11 | Once you have your forked copy, you can should now clone it into the *Packages* directory of your Unity project. 12 | 13 | Your Unity project structure should now look something like this: 14 | 15 | ```text 16 | Assets 17 | Library 18 | ... 19 | Packages 20 | UnityMeshSimplifier 21 | ... 22 | ProjectSettings 23 | ... 24 | ``` 25 | 26 | When starting up your Unity project, you should see UnityMeshSimplifier appear in the package manager (Window -> Package Manager). 27 | 28 | ## Commit Guidelines 29 | 30 | We have strict rules over how our git commit messages can be formatted. This is due to them being used for automated semantic releases, as well as making the messages more readable and standarized. 31 | 32 | Each commit should only ever do one change, so that it is easy to review. 33 | 34 | ### Commit Message Format 35 | 36 | Every commit must specify at least a **type** and a **subject**. While **scope**, **body**, and **footer** remains optional. 37 | 38 | ```text 39 | (scope): 40 | 41 | 42 | 43 |