├── Demo ├── BallRoll.physicMaterial ├── BallRoll.physicMaterial.meta ├── Demo Scene.unity ├── Demo Scene.unity.meta ├── DustMaterla.mat ├── DustMaterla.mat.meta ├── Floor.mat ├── Floor.mat.meta ├── Wall.mtl ├── Wall.mtl.meta ├── Wall.obj └── Wall.obj.meta ├── Editor ├── CEditorFracture.cs ├── CEditorFracture.cs.meta ├── ChunkInfoEditor.cs ├── ChunkInfoEditor.cs.meta ├── Resources.meta └── Resources │ ├── Point.prefab │ ├── Point.prefab.meta │ ├── PointMaterial.mat │ ├── PointMaterial.mat.meta │ ├── PointShader.shader │ └── PointShader.shader.meta ├── LICENSE ├── Pictures └── DemoPicture.png ├── Plugins ├── NvBlast.cs ├── NvBlast.cs.meta ├── NvBlastExtUnity.cs ├── NvBlastExtUnity.cs.meta ├── liblibvhacd.dylib ├── liblibvhacd.dylib.meta ├── liblibvhacd.so ├── liblibvhacd.so.meta ├── libvhacd.dll ├── libvhacd.dll.meta ├── vhacd.asmdef ├── vhacd.asmdef.meta ├── x64.meta └── x64 │ ├── AuthoringTool_x64.exe │ ├── AuthoringTool_x64.exe.meta │ ├── NvBlastExtAssetUtils_x64.dll │ ├── NvBlastExtAssetUtils_x64.dll.meta │ ├── NvBlastExtAuthoring_x64.dll │ ├── NvBlastExtAuthoring_x64.dll.meta │ ├── NvBlastExtExporter_x64.dll │ ├── NvBlastExtExporter_x64.dll.meta │ ├── NvBlastExtPhysX_x64.dll │ ├── NvBlastExtPhysX_x64.dll.meta │ ├── NvBlastExtPxSerialization_x64.dll │ ├── NvBlastExtPxSerialization_x64.dll.meta │ ├── NvBlastExtSerialization_x64.dll │ ├── NvBlastExtSerialization_x64.dll.meta │ ├── NvBlastExtShaders_x64.dll │ ├── NvBlastExtShaders_x64.dll.meta │ ├── NvBlastExtStress_x64.dll │ ├── NvBlastExtStress_x64.dll.meta │ ├── NvBlastExtTkSerialization_x64.dll │ ├── NvBlastExtTkSerialization_x64.dll.meta │ ├── NvBlastExtUnity_x64.dll │ ├── NvBlastExtUnity_x64.dll.meta │ ├── NvBlastGlobals_x64.dll │ ├── NvBlastGlobals_x64.dll.meta │ ├── NvBlastTk_x64.dll │ ├── NvBlastTk_x64.dll.meta │ ├── NvBlast_x64.dll │ ├── NvBlast_x64.dll.meta │ ├── PhysX3Cooking_x64.dll │ ├── PhysX3Cooking_x64.dll.meta │ ├── PhysX3Gpu_x64.dll │ ├── PhysX3Gpu_x64.dll.meta │ ├── PhysX3_x64.dll │ ├── PhysX3_x64.dll.meta │ ├── PxFoundation_x64.dll │ ├── PxFoundation_x64.dll.meta │ ├── PxPvdSDK_x64.dll │ ├── PxPvdSDK_x64.dll.meta │ ├── nvToolsExt64_1.dll │ └── nvToolsExt64_1.dll.meta ├── Prefabs ├── VFX.meta └── VFX │ ├── FractureDust.prefab │ └── FractureDust.prefab.meta ├── README.md ├── Scripts ├── ChunkInfo.cs ├── ChunkInfo.cs.meta ├── ChunkRuntimeInfo.cs ├── ChunkRuntimeInfo.cs.meta ├── Demo.meta ├── Destructible.cs ├── Destructible.cs.meta ├── DrawNormals.cs ├── DrawNormals.cs.meta ├── FractureObject.cs ├── FractureObject.cs.meta ├── JointMonitor.cs ├── JointMonitor.cs.meta ├── RotationBounds.cs ├── RotationBounds.cs.meta ├── VHACD.cs └── VHACD.cs.meta └── VHACD Documentation ├── .editorconfig ├── .github └── pull_request_template.md ├── .gitignore ├── LICENSE.MD ├── LICENSE.MD.meta ├── README.md ├── README.md.meta ├── Third Party Notices.md └── Third Party Notices.md.meta /Demo/BallRoll.physicMaterial: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!134 &13400000 4 | PhysicMaterial: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: BallRoll 10 | dynamicFriction: 0.6 11 | staticFriction: 0.6 12 | bounciness: 0 13 | frictionCombine: 0 14 | bounceCombine: 0 15 | -------------------------------------------------------------------------------- /Demo/BallRoll.physicMaterial.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8c588e36f79237b45bb5d0c9a4976257 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Demo/Demo Scene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9278d338cbaaad54aa908dd4eebf5f78 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Demo/DustMaterla.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: DustMaterla 11 | m_Shader: {fileID: 4800000, guid: c4edd00ff2db5b24391a4fcb1762e459, type: 3} 12 | m_ShaderKeywords: _BLENDMODE_ALPHA _ENABLE_FOG_ON_TRANSPARENT _NORMALMAP_TANGENT_SPACE 13 | _SURFACE_TYPE_TRANSPARENT 14 | m_LightmapFlags: 4 15 | m_EnableInstancingVariants: 0 16 | m_DoubleSidedGI: 0 17 | m_CustomRenderQueue: 3000 18 | stringTagMap: 19 | RenderType: Transparent 20 | disabledShaderPasses: 21 | - DistortionVectors 22 | - MOTIONVECTORS 23 | m_SavedProperties: 24 | serializedVersion: 3 25 | m_TexEnvs: 26 | - _AnisotropyMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _BaseColorMap: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _BentNormalMap: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _BentNormalMapOS: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _CoatMaskMap: 43 | m_Texture: {fileID: 0} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _DetailMap: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _DistortionVectorMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _EmissiveColorMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | - _HeightMap: 59 | m_Texture: {fileID: 0} 60 | m_Scale: {x: 1, y: 1} 61 | m_Offset: {x: 0, y: 0} 62 | - _IridescenceMaskMap: 63 | m_Texture: {fileID: 0} 64 | m_Scale: {x: 1, y: 1} 65 | m_Offset: {x: 0, y: 0} 66 | - _IridescenceThicknessMap: 67 | m_Texture: {fileID: 0} 68 | m_Scale: {x: 1, y: 1} 69 | m_Offset: {x: 0, y: 0} 70 | - _MainTex: 71 | m_Texture: {fileID: 0} 72 | m_Scale: {x: 1, y: 1} 73 | m_Offset: {x: 0, y: 0} 74 | - _MaskMap: 75 | m_Texture: {fileID: 0} 76 | m_Scale: {x: 1, y: 1} 77 | m_Offset: {x: 0, y: 0} 78 | - _NormalMap: 79 | m_Texture: {fileID: 0} 80 | m_Scale: {x: 1, y: 1} 81 | m_Offset: {x: 0, y: 0} 82 | - _NormalMapOS: 83 | m_Texture: {fileID: 0} 84 | m_Scale: {x: 1, y: 1} 85 | m_Offset: {x: 0, y: 0} 86 | - _SpecularColorMap: 87 | m_Texture: {fileID: 0} 88 | m_Scale: {x: 1, y: 1} 89 | m_Offset: {x: 0, y: 0} 90 | - _SubsurfaceMaskMap: 91 | m_Texture: {fileID: 0} 92 | m_Scale: {x: 1, y: 1} 93 | m_Offset: {x: 0, y: 0} 94 | - _TangentMap: 95 | m_Texture: {fileID: 0} 96 | m_Scale: {x: 1, y: 1} 97 | m_Offset: {x: 0, y: 0} 98 | - _TangentMapOS: 99 | m_Texture: {fileID: 0} 100 | m_Scale: {x: 1, y: 1} 101 | m_Offset: {x: 0, y: 0} 102 | - _ThicknessMap: 103 | m_Texture: {fileID: 0} 104 | m_Scale: {x: 1, y: 1} 105 | m_Offset: {x: 0, y: 0} 106 | - _TransmittanceColorMap: 107 | m_Texture: {fileID: 0} 108 | m_Scale: {x: 1, y: 1} 109 | m_Offset: {x: 0, y: 0} 110 | - _UnlitColorMap: 111 | m_Texture: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0} 112 | m_Scale: {x: 1, y: 1} 113 | m_Offset: {x: 0, y: 0} 114 | m_Floats: 115 | - _AORemapMax: 1 116 | - _AORemapMin: 0 117 | - _ATDistance: 1 118 | - _AddPrecomputedVelocity: 0 119 | - _AlbedoAffectEmissive: 0 120 | - _AlphaCutoff: 0.5 121 | - _AlphaCutoffEnable: 0 122 | - _AlphaCutoffPostpass: 0.5 123 | - _AlphaCutoffPrepass: 0.5 124 | - _AlphaCutoffShadow: 0.5 125 | - _AlphaDstBlend: 10 126 | - _AlphaSrcBlend: 1 127 | - _Anisotropy: 0 128 | - _BlendMode: 0 129 | - _CoatMask: 0 130 | - _CullMode: 2 131 | - _CullModeForward: 2 132 | - _Cutoff: 0.5 133 | - _DepthOffsetEnable: 0 134 | - _DetailAlbedoScale: 1 135 | - _DetailNormalScale: 1 136 | - _DetailSmoothnessScale: 1 137 | - _DiffusionProfile: 0 138 | - _DiffusionProfileHash: 0 139 | - _DisplacementLockObjectScale: 1 140 | - _DisplacementLockTilingScale: 1 141 | - _DisplacementMode: 0 142 | - _DistortionBlendMode: 0 143 | - _DistortionBlurBlendMode: 0 144 | - _DistortionBlurDstBlend: 1 145 | - _DistortionBlurRemapMax: 1 146 | - _DistortionBlurRemapMin: 0 147 | - _DistortionBlurScale: 1 148 | - _DistortionBlurSrcBlend: 1 149 | - _DistortionDepthTest: 1 150 | - _DistortionDstBlend: 1 151 | - _DistortionEnable: 0 152 | - _DistortionOnly: 0 153 | - _DistortionScale: 1 154 | - _DistortionSrcBlend: 1 155 | - _DistortionVectorBias: -1 156 | - _DistortionVectorScale: 2 157 | - _DoubleSidedEnable: 0 158 | - _DoubleSidedNormalMode: 1 159 | - _DstBlend: 10 160 | - _EmissiveColorMode: 1 161 | - _EmissiveExposureWeight: 1 162 | - _EmissiveIntensity: 1 163 | - _EmissiveIntensityUnit: 0 164 | - _EnableBlendModePreserveSpecularLighting: 1 165 | - _EnableFogOnTransparent: 1 166 | - _EnableGeometricSpecularAA: 0 167 | - _EnergyConservingSpecularColor: 1 168 | - _HeightAmplitude: 0.02 169 | - _HeightCenter: 0.5 170 | - _HeightMapParametrization: 0 171 | - _HeightMax: 1 172 | - _HeightMin: -1 173 | - _HeightOffset: 0 174 | - _HeightPoMAmplitude: 2 175 | - _HeightTessAmplitude: 2 176 | - _HeightTessCenter: 0.5 177 | - _IncludeIndirectLighting: 1 178 | - _InvTilingScale: 1 179 | - _Ior: 1.5 180 | - _IridescenceMask: 1 181 | - _IridescenceThickness: 1 182 | - _LinkDetailsWithBase: 1 183 | - _MaterialID: 1 184 | - _Metallic: 0 185 | - _NormalMapSpace: 0 186 | - _NormalScale: 1 187 | - _PPDLodThreshold: 5 188 | - _PPDMaxSamples: 15 189 | - _PPDMinSamples: 5 190 | - _PPDPrimitiveLength: 1 191 | - _PPDPrimitiveWidth: 1 192 | - _ReceivesSSR: 1 193 | - _RefractionModel: 0 194 | - _SSRefractionProjectionModel: 0 195 | - _Smoothness: 0 196 | - _SmoothnessRemapMax: 1 197 | - _SmoothnessRemapMin: 0 198 | - _SpecularAAScreenSpaceVariance: 0.1 199 | - _SpecularAAThreshold: 0.2 200 | - _SpecularOcclusionMode: 1 201 | - _SrcBlend: 1 202 | - _StencilRef: 0 203 | - _StencilRefDepth: 0 204 | - _StencilRefDistortionVec: 4 205 | - _StencilRefGBuffer: 10 206 | - _StencilRefMV: 32 207 | - _StencilWriteMask: 6 208 | - _StencilWriteMaskDepth: 8 209 | - _StencilWriteMaskDistortionVec: 4 210 | - _StencilWriteMaskGBuffer: 14 211 | - _StencilWriteMaskMV: 40 212 | - _SubsurfaceMask: 1 213 | - _SupportDecals: 1 214 | - _SurfaceType: 1 215 | - _TexWorldScale: 1 216 | - _TexWorldScaleEmissive: 1 217 | - _Thickness: 1 218 | - _TransmissionEnable: 1 219 | - _TransparentBackfaceEnable: 0 220 | - _TransparentCullMode: 2 221 | - _TransparentDepthPostpassEnable: 0 222 | - _TransparentDepthPrepassEnable: 0 223 | - _TransparentSortPriority: 0 224 | - _TransparentWritingMotionVec: 0 225 | - _TransparentZWrite: 0 226 | - _UVBase: 0 227 | - _UVDetail: 0 228 | - _UVEmissive: 0 229 | - _UseEmissiveIntensity: 0 230 | - _UseShadowThreshold: 0 231 | - _ZTestDepthEqualForOpaque: 4 232 | - _ZTestGBuffer: 4 233 | - _ZTestModeDistortion: 4 234 | - _ZTestTransparent: 4 235 | - _ZWrite: 0 236 | m_Colors: 237 | - _BaseColor: {r: 1, g: 1, b: 1, a: 1} 238 | - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} 239 | - _Color: {r: 0, g: 0, b: 0, a: 1} 240 | - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} 241 | - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} 242 | - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} 243 | - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} 244 | - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} 245 | - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} 246 | - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} 247 | - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} 248 | - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} 249 | - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} 250 | - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} 251 | - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} 252 | - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} 253 | - _UnlitColor: {r: 1, g: 1, b: 1, a: 1} 254 | --- !u!114 &2871316921015168431 255 | MonoBehaviour: 256 | m_ObjectHideFlags: 11 257 | m_CorrespondingSourceObject: {fileID: 0} 258 | m_PrefabInstance: {fileID: 0} 259 | m_PrefabAsset: {fileID: 0} 260 | m_GameObject: {fileID: 0} 261 | m_Enabled: 1 262 | m_EditorHideFlags: 0 263 | m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} 264 | m_Name: 265 | m_EditorClassIdentifier: 266 | version: 2 267 | -------------------------------------------------------------------------------- /Demo/DustMaterla.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cb82e06af7fbcfb42a606d5275b1c39d 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Demo/Floor.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &-5292276858313621907 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 11 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | version: 2 16 | --- !u!21 &2100000 17 | Material: 18 | serializedVersion: 6 19 | m_ObjectHideFlags: 0 20 | m_CorrespondingSourceObject: {fileID: 0} 21 | m_PrefabInstance: {fileID: 0} 22 | m_PrefabAsset: {fileID: 0} 23 | m_Name: Floor 24 | m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} 25 | m_ShaderKeywords: _NORMALMAP_TANGENT_SPACE 26 | m_LightmapFlags: 4 27 | m_EnableInstancingVariants: 0 28 | m_DoubleSidedGI: 0 29 | m_CustomRenderQueue: -1 30 | stringTagMap: {} 31 | disabledShaderPasses: 32 | - DistortionVectors 33 | - MOTIONVECTORS 34 | - TransparentDepthPrepass 35 | - TransparentDepthPostpass 36 | - TransparentBackface 37 | m_SavedProperties: 38 | serializedVersion: 3 39 | m_TexEnvs: 40 | - _AnisotropyMap: 41 | m_Texture: {fileID: 0} 42 | m_Scale: {x: 1, y: 1} 43 | m_Offset: {x: 0, y: 0} 44 | - _BaseColorMap: 45 | m_Texture: {fileID: 0} 46 | m_Scale: {x: 1, y: 1} 47 | m_Offset: {x: 0, y: 0} 48 | - _BentNormalMap: 49 | m_Texture: {fileID: 0} 50 | m_Scale: {x: 1, y: 1} 51 | m_Offset: {x: 0, y: 0} 52 | - _BentNormalMapOS: 53 | m_Texture: {fileID: 0} 54 | m_Scale: {x: 1, y: 1} 55 | m_Offset: {x: 0, y: 0} 56 | - _CoatMaskMap: 57 | m_Texture: {fileID: 0} 58 | m_Scale: {x: 1, y: 1} 59 | m_Offset: {x: 0, y: 0} 60 | - _DetailMap: 61 | m_Texture: {fileID: 0} 62 | m_Scale: {x: 1, y: 1} 63 | m_Offset: {x: 0, y: 0} 64 | - _DistortionVectorMap: 65 | m_Texture: {fileID: 0} 66 | m_Scale: {x: 1, y: 1} 67 | m_Offset: {x: 0, y: 0} 68 | - _EmissiveColorMap: 69 | m_Texture: {fileID: 0} 70 | m_Scale: {x: 1, y: 1} 71 | m_Offset: {x: 0, y: 0} 72 | - _HeightMap: 73 | m_Texture: {fileID: 0} 74 | m_Scale: {x: 1, y: 1} 75 | m_Offset: {x: 0, y: 0} 76 | - _IridescenceMaskMap: 77 | m_Texture: {fileID: 0} 78 | m_Scale: {x: 1, y: 1} 79 | m_Offset: {x: 0, y: 0} 80 | - _IridescenceThicknessMap: 81 | m_Texture: {fileID: 0} 82 | m_Scale: {x: 1, y: 1} 83 | m_Offset: {x: 0, y: 0} 84 | - _MainTex: 85 | m_Texture: {fileID: 0} 86 | m_Scale: {x: 1, y: 1} 87 | m_Offset: {x: 0, y: 0} 88 | - _MaskMap: 89 | m_Texture: {fileID: 0} 90 | m_Scale: {x: 1, y: 1} 91 | m_Offset: {x: 0, y: 0} 92 | - _NormalMap: 93 | m_Texture: {fileID: 0} 94 | m_Scale: {x: 1, y: 1} 95 | m_Offset: {x: 0, y: 0} 96 | - _NormalMapOS: 97 | m_Texture: {fileID: 0} 98 | m_Scale: {x: 1, y: 1} 99 | m_Offset: {x: 0, y: 0} 100 | - _SpecularColorMap: 101 | m_Texture: {fileID: 0} 102 | m_Scale: {x: 1, y: 1} 103 | m_Offset: {x: 0, y: 0} 104 | - _SubsurfaceMaskMap: 105 | m_Texture: {fileID: 0} 106 | m_Scale: {x: 1, y: 1} 107 | m_Offset: {x: 0, y: 0} 108 | - _TangentMap: 109 | m_Texture: {fileID: 0} 110 | m_Scale: {x: 1, y: 1} 111 | m_Offset: {x: 0, y: 0} 112 | - _TangentMapOS: 113 | m_Texture: {fileID: 0} 114 | m_Scale: {x: 1, y: 1} 115 | m_Offset: {x: 0, y: 0} 116 | - _ThicknessMap: 117 | m_Texture: {fileID: 0} 118 | m_Scale: {x: 1, y: 1} 119 | m_Offset: {x: 0, y: 0} 120 | - _TransmittanceColorMap: 121 | m_Texture: {fileID: 0} 122 | m_Scale: {x: 1, y: 1} 123 | m_Offset: {x: 0, y: 0} 124 | m_Floats: 125 | - _AORemapMax: 1 126 | - _AORemapMin: 0 127 | - _ATDistance: 1 128 | - _AddPrecomputedVelocity: 0 129 | - _AlbedoAffectEmissive: 0 130 | - _AlphaCutoff: 0.5 131 | - _AlphaCutoffEnable: 0 132 | - _AlphaCutoffPostpass: 0.5 133 | - _AlphaCutoffPrepass: 0.5 134 | - _AlphaCutoffShadow: 0.5 135 | - _AlphaDstBlend: 0 136 | - _AlphaSrcBlend: 1 137 | - _Anisotropy: 0 138 | - _BlendMode: 0 139 | - _CoatMask: 0 140 | - _CullMode: 2 141 | - _CullModeForward: 2 142 | - _Cutoff: 0.5 143 | - _DepthOffsetEnable: 0 144 | - _DetailAlbedoScale: 1 145 | - _DetailNormalScale: 1 146 | - _DetailSmoothnessScale: 1 147 | - _DiffusionProfile: 0 148 | - _DiffusionProfileHash: 0 149 | - _DisplacementLockObjectScale: 1 150 | - _DisplacementLockTilingScale: 1 151 | - _DisplacementMode: 0 152 | - _DistortionBlendMode: 0 153 | - _DistortionBlurBlendMode: 0 154 | - _DistortionBlurDstBlend: 1 155 | - _DistortionBlurRemapMax: 1 156 | - _DistortionBlurRemapMin: 0 157 | - _DistortionBlurScale: 1 158 | - _DistortionBlurSrcBlend: 1 159 | - _DistortionDepthTest: 1 160 | - _DistortionDstBlend: 1 161 | - _DistortionEnable: 0 162 | - _DistortionScale: 1 163 | - _DistortionSrcBlend: 1 164 | - _DistortionVectorBias: -1 165 | - _DistortionVectorScale: 2 166 | - _DoubleSidedEnable: 0 167 | - _DoubleSidedNormalMode: 1 168 | - _DstBlend: 0 169 | - _EmissiveColorMode: 1 170 | - _EmissiveExposureWeight: 1 171 | - _EmissiveIntensity: 1 172 | - _EmissiveIntensityUnit: 0 173 | - _EnableBlendModePreserveSpecularLighting: 1 174 | - _EnableFogOnTransparent: 1 175 | - _EnableGeometricSpecularAA: 0 176 | - _EnergyConservingSpecularColor: 1 177 | - _HeightAmplitude: 0.02 178 | - _HeightCenter: 0.5 179 | - _HeightMapParametrization: 0 180 | - _HeightMax: 1 181 | - _HeightMin: -1 182 | - _HeightOffset: 0 183 | - _HeightPoMAmplitude: 2 184 | - _HeightTessAmplitude: 2 185 | - _HeightTessCenter: 0.5 186 | - _InvTilingScale: 1 187 | - _Ior: 1.5 188 | - _IridescenceMask: 1 189 | - _IridescenceThickness: 1 190 | - _LinkDetailsWithBase: 1 191 | - _MaterialID: 1 192 | - _Metallic: 0 193 | - _NormalMapSpace: 0 194 | - _NormalScale: 1 195 | - _PPDLodThreshold: 5 196 | - _PPDMaxSamples: 15 197 | - _PPDMinSamples: 5 198 | - _PPDPrimitiveLength: 1 199 | - _PPDPrimitiveWidth: 1 200 | - _ReceivesSSR: 1 201 | - _RefractionModel: 0 202 | - _SSRefractionProjectionModel: 0 203 | - _Smoothness: 0.5 204 | - _SmoothnessRemapMax: 1 205 | - _SmoothnessRemapMin: 0 206 | - _SpecularAAScreenSpaceVariance: 0.1 207 | - _SpecularAAThreshold: 0.2 208 | - _SpecularOcclusionMode: 1 209 | - _SrcBlend: 1 210 | - _StencilRef: 0 211 | - _StencilRefDepth: 8 212 | - _StencilRefDistortionVec: 4 213 | - _StencilRefGBuffer: 10 214 | - _StencilRefMV: 40 215 | - _StencilWriteMask: 6 216 | - _StencilWriteMaskDepth: 8 217 | - _StencilWriteMaskDistortionVec: 4 218 | - _StencilWriteMaskGBuffer: 14 219 | - _StencilWriteMaskMV: 40 220 | - _SubsurfaceMask: 1 221 | - _SupportDecals: 1 222 | - _SurfaceType: 0 223 | - _TexWorldScale: 1 224 | - _TexWorldScaleEmissive: 1 225 | - _Thickness: 1 226 | - _TransmissionEnable: 1 227 | - _TransparentBackfaceEnable: 0 228 | - _TransparentCullMode: 2 229 | - _TransparentDepthPostpassEnable: 0 230 | - _TransparentDepthPrepassEnable: 0 231 | - _TransparentSortPriority: 0 232 | - _TransparentWritingMotionVec: 0 233 | - _TransparentZWrite: 0 234 | - _UVBase: 0 235 | - _UVDetail: 0 236 | - _UVEmissive: 0 237 | - _UseEmissiveIntensity: 0 238 | - _UseShadowThreshold: 0 239 | - _ZTestDepthEqualForOpaque: 3 240 | - _ZTestGBuffer: 4 241 | - _ZTestModeDistortion: 4 242 | - _ZTestTransparent: 4 243 | - _ZWrite: 1 244 | m_Colors: 245 | - _BaseColor: {r: 0.1509434, g: 0.11920249, b: 0.09469562, a: 1} 246 | - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} 247 | - _Color: {r: 0.15094337, g: 0.11920246, b: 0.094695576, a: 1} 248 | - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} 249 | - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} 250 | - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} 251 | - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} 252 | - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} 253 | - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} 254 | - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} 255 | - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} 256 | - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} 257 | - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} 258 | - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} 259 | - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} 260 | - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} 261 | -------------------------------------------------------------------------------- /Demo/Floor.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ccc4f7a82c5a31d4fbd18e902417f30e 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Demo/Wall.mtl: -------------------------------------------------------------------------------- 1 | newmtl DefaultHDMaterial 2 | Kd 0.7279412 0.7279412 0.7279412 3 | d 1 4 | 5 | -------------------------------------------------------------------------------- /Demo/Wall.mtl.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d189c9f15a7a06449a6a293591fb7c40 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Demo/Wall.obj: -------------------------------------------------------------------------------- 1 | # ProBuilder 4.4.0 2 | # https://unity3d.com/unity/features/worldbuilding/probuilder 3 | # 24.02.2021 16:16:32 4 | 5 | mtllib ./Wall.mtl 6 | o Wall 7 | 8 | g Cube 9 | v 5.9 0 0 10 | v -9.900001 0 0 11 | v 5.900001 6.1 0 12 | v -9.900001 6.1 0 13 | v -9.900001 0 -0.2000008 14 | v -9.900001 6.1 -0.2000008 15 | v 5.9 0 -0.2000008 16 | v 5.900001 6.1 -0.2000008 17 | 18 | vt 5.9 0 19 | vt -9.900001 0 20 | vt 5.900001 6.1 21 | vt -9.900001 6.1 22 | vt 0 0 23 | vt -0.2000008 0 24 | vt 0 6.1 25 | vt -0.2000008 6.1 26 | vt 9.900001 0 27 | vt -5.9 0 28 | vt 9.900001 6.1 29 | vt -5.900001 6.1 30 | vt 0.2000008 4.612031E-07 31 | vt 0.2000008 6.1 32 | vt 0 6.1 33 | vt -5.900001 -0.2000008 34 | vt 9.900001 -0.2000008 35 | vt 5.9 -0.2000008 36 | vt -9.900001 -0.2000008 37 | 38 | vn 0 0 1 39 | vn -1 0 0 40 | vn 0 0 -1 41 | vn 1 -7.817003E-08 0 42 | vn 0 1 0 43 | vn 0 -1 0 44 | 45 | usemtl DefaultHDMaterial 46 | f 3/3/1 4/4/1 2/2/1 1/1/1 47 | f 4/7/2 6/8/2 5/6/2 2/5/2 48 | f 6/11/3 8/12/3 7/10/3 5/9/3 49 | f 8/14/4 3/15/4 1/5/4 7/13/4 50 | f 8/16/5 6/17/5 4/9/5 3/10/5 51 | f 1/1/6 2/2/6 5/19/6 7/18/6 52 | 53 | -------------------------------------------------------------------------------- /Demo/Wall.obj.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0ac53cf08316e9f4081e1b382854250e 3 | ModelImporter: 4 | serializedVersion: 19301 5 | internalIDToNameTable: [] 6 | externalObjects: {} 7 | materials: 8 | materialImportMode: 1 9 | materialName: 0 10 | materialSearch: 1 11 | materialLocation: 1 12 | animations: 13 | legacyGenerateAnimations: 4 14 | bakeSimulation: 0 15 | resampleCurves: 1 16 | optimizeGameObjects: 0 17 | motionNodeName: 18 | rigImportErrors: 19 | rigImportWarnings: 20 | animationImportErrors: 21 | animationImportWarnings: 22 | animationRetargetingWarnings: 23 | animationDoRetargetingWarnings: 0 24 | importAnimatedCustomProperties: 0 25 | importConstraints: 0 26 | animationCompression: 1 27 | animationRotationError: 0.5 28 | animationPositionError: 0.5 29 | animationScaleError: 0.5 30 | animationWrapMode: 0 31 | extraExposedTransformPaths: [] 32 | extraUserProperties: [] 33 | clipAnimations: [] 34 | isReadable: 0 35 | meshes: 36 | lODScreenPercentages: [] 37 | globalScale: 1 38 | meshCompression: 0 39 | addColliders: 0 40 | useSRGBMaterialColor: 1 41 | sortHierarchyByName: 1 42 | importVisibility: 1 43 | importBlendShapes: 1 44 | importCameras: 1 45 | importLights: 1 46 | fileIdsGeneration: 2 47 | swapUVChannels: 0 48 | generateSecondaryUV: 0 49 | useFileUnits: 1 50 | keepQuads: 0 51 | weldVertices: 1 52 | preserveHierarchy: 0 53 | skinWeightsMode: 0 54 | maxBonesPerVertex: 4 55 | minBoneWeight: 0.001 56 | meshOptimizationFlags: -1 57 | indexFormat: 0 58 | secondaryUVAngleDistortion: 8 59 | secondaryUVAreaDistortion: 15.000001 60 | secondaryUVHardAngle: 88 61 | secondaryUVPackMargin: 4 62 | useFileScale: 1 63 | tangentSpace: 64 | normalSmoothAngle: 60 65 | normalImportMode: 0 66 | tangentImportMode: 3 67 | normalCalculationMode: 4 68 | legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 69 | blendShapeNormalImportMode: 1 70 | normalSmoothingSource: 0 71 | referencedClips: [] 72 | importAnimation: 1 73 | humanDescription: 74 | serializedVersion: 3 75 | human: [] 76 | skeleton: [] 77 | armTwist: 0.5 78 | foreArmTwist: 0.5 79 | upperLegTwist: 0.5 80 | legTwist: 0.5 81 | armStretch: 0.05 82 | legStretch: 0.05 83 | feetSpacing: 0 84 | globalScale: 1 85 | rootMotionBoneName: 86 | hasTranslationDoF: 0 87 | hasExtraRoot: 0 88 | skeletonHasParents: 1 89 | lastHumanDescriptionAvatarSource: {instanceID: 0} 90 | autoGenerateAvatarMappingIfUnspecified: 1 91 | animationType: 2 92 | humanoidOversampling: 1 93 | avatarSetup: 0 94 | additionalBone: 0 95 | userData: 96 | assetBundleName: 97 | assetBundleVariant: 98 | -------------------------------------------------------------------------------- /Editor/CEditorFracture.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEditor; 3 | using UnityEngine; 4 | using MeshProcess; 5 | 6 | public class CEditorFracture : EditorWindow 7 | { 8 | private enum FractureTypes 9 | { 10 | Voronoi, 11 | Clustered, 12 | Slicing, 13 | Skinned, 14 | Plane, 15 | Cutout 16 | } 17 | 18 | private enum GenerateType 19 | { 20 | Preview, 21 | Generate, 22 | CreateAsset 23 | } 24 | 25 | [MenuItem("Window/Fracture")] 26 | public static void OpenEditor() 27 | { 28 | EditorWindow.GetWindow("Fracture"); 29 | } 30 | 31 | 32 | public const int raycastSteps = 8; 33 | public const string objectPostfix = "_Fractured"; 34 | 35 | private FractureTypes fractureType = FractureTypes.Voronoi; 36 | 37 | public GameObject point; 38 | public GameObject source; 39 | public Material insideMaterial; 40 | public bool islands = false; 41 | public bool previewColliders = false; 42 | public float previewDistance = 0.5f; 43 | public int totalChunks = 5; 44 | public int seed = 0; 45 | 46 | public float objectMass = 100; 47 | public float jointBreakForce = 1000; 48 | public AudioClip onBreakSound; 49 | public uint VHACDResolution = 100000; 50 | 51 | //TODO: serialize 52 | //public SlicingConfiguration sliceConf; 53 | 54 | Vector3Int slices = Vector3Int.one; 55 | float offset_variations = 0; 56 | float angle_variations = 0; 57 | float amplitude = 0; 58 | float frequency = 1; 59 | int octaveNumber = 1; 60 | int surfaceResolution = 2; 61 | 62 | public int clusters = 5; 63 | public int sitesPerCluster = 5; 64 | public float clusterRadius = 1; 65 | 66 | private GameObject previewObject; 67 | 68 | private void OnEnable() 69 | { 70 | point = (GameObject)Resources.Load("Point"); 71 | } 72 | 73 | private void OnSelectionChange() 74 | { 75 | Repaint(); 76 | } 77 | 78 | protected void OnGUI() 79 | { 80 | if (Application.isPlaying) 81 | { 82 | GUILayout.Label("PLAY MODE ACTIVE", GUI.skin.box, GUILayout.ExpandWidth(true)); 83 | return; 84 | } 85 | 86 | if (GUILayout.Button("Clean Up Objects")) CleanUp(true); 87 | 88 | GUILayout.Space(20); 89 | 90 | EditorGUI.BeginChangeCheck(); 91 | source = EditorGUILayout.ObjectField("Source", source, typeof(GameObject), true) as GameObject; 92 | if (EditorGUI.EndChangeCheck()) 93 | { 94 | CleanUp(true); 95 | } 96 | 97 | if (GUILayout.Button("Set selected object as Source") && Selection.activeGameObject != null) 98 | { 99 | //hachunk to not select preview chunks OR Points OR Destructible :) 100 | if (Selection.activeGameObject.GetComponent() == null && Selection.activeGameObject.hideFlags != HideFlags.NotEditable && Selection.activeGameObject.GetComponent() == null) 101 | { 102 | if (Selection.activeGameObject.GetComponent() != null) 103 | { 104 | CleanUp(false); 105 | 106 | source = Selection.activeGameObject; 107 | 108 | if (source.activeInHierarchy) 109 | source.SetActive(false); 110 | 111 | _createObject(GenerateType.Preview); 112 | 113 | Selection.activeGameObject = previewObject; 114 | } 115 | if (Selection.activeGameObject.GetComponentInChildren() != null) 116 | { 117 | source = Selection.activeGameObject.GetComponentInChildren().gameObject; 118 | 119 | if (source.activeInHierarchy) 120 | source.SetActive(false); 121 | 122 | _createObject(GenerateType.Preview); 123 | 124 | Selection.activeGameObject = previewObject; 125 | } 126 | } 127 | } 128 | 129 | if (!source) return; 130 | 131 | EditorGUI.BeginChangeCheck(); 132 | insideMaterial = (Material)EditorGUILayout.ObjectField("Inside Material", insideMaterial, typeof(Material), false); 133 | if (EditorGUI.EndChangeCheck()) 134 | { 135 | _createObject(GenerateType.Preview); 136 | } 137 | 138 | if (!insideMaterial) EditorGUILayout.HelpBox("If inside material is not assigned, the same material as material of selected object will be used", MessageType.Info); 139 | 140 | EditorGUI.BeginChangeCheck(); 141 | fractureType = (FractureTypes)EditorGUILayout.EnumPopup("Fracture Type", fractureType); 142 | if (EditorGUI.EndChangeCheck()) 143 | _createObject(GenerateType.Preview); 144 | 145 | EditorGUILayout.BeginHorizontal(); 146 | islands = EditorGUILayout.Toggle("Islands", islands); 147 | previewColliders = EditorGUILayout.Toggle("Preview Colliders", previewColliders); 148 | EditorGUILayout.EndHorizontal(); 149 | 150 | seed = (int)EditorApplication.timeSinceStartup; 151 | 152 | EditorGUI.BeginChangeCheck(); 153 | previewDistance = EditorGUILayout.Slider("Preview Chunks Distance", previewDistance, 0, 5); 154 | if (EditorGUI.EndChangeCheck()) 155 | { 156 | UpdatePreview(); 157 | } 158 | 159 | VHACDResolution = (uint)EditorGUILayout.IntSlider(new GUIContent("VHACD Resolution"), (int)VHACDResolution, 100000, 64000000); 160 | 161 | EditorGUILayout.Space(10); 162 | 163 | onBreakSound = (AudioClip)EditorGUILayout.ObjectField("On Break Sound", onBreakSound, typeof(AudioClip), false); 164 | objectMass = EditorGUILayout.FloatField("Object Mass", objectMass); 165 | jointBreakForce = EditorGUILayout.FloatField("Joint Break Force", jointBreakForce); 166 | 167 | bool canCreate = false; 168 | 169 | EditorGUI.BeginChangeCheck(); 170 | if (fractureType == FractureTypes.Voronoi) canCreate = GUI_Voronoi(); 171 | if (fractureType == FractureTypes.Clustered) canCreate = GUI_Clustered(); 172 | if (fractureType == FractureTypes.Slicing) canCreate = GUI_Slicing(); 173 | if (fractureType == FractureTypes.Skinned) canCreate = GUI_Skinned(); 174 | if (fractureType == FractureTypes.Plane) canCreate = GUI_Plane(); 175 | if (fractureType == FractureTypes.Cutout) canCreate = GUI_Cutout(); 176 | if(EditorGUI.EndChangeCheck()) 177 | { 178 | _createObject(GenerateType.Preview); 179 | } 180 | 181 | if (canCreate) 182 | { 183 | GUILayout.BeginHorizontal(); 184 | if (GUILayout.Button("Generate")) 185 | { 186 | _createObject(GenerateType.Generate); 187 | } 188 | 189 | if (GUILayout.Button("Create Prefab")) 190 | { 191 | _createObject(GenerateType.CreateAsset); 192 | } 193 | GUILayout.EndHorizontal(); 194 | } 195 | } 196 | 197 | private void _createObject(GenerateType generateType) 198 | { 199 | NvBlastExtUnity.setSeed(seed); 200 | 201 | CleanUp(false); 202 | 203 | GameObject cs = generateType == GenerateType.Preview ? new GameObject(generateType == GenerateType.Preview ? $"{source.name}{objectPostfix}Preview" : $"{source.name}{objectPostfix}") : Instantiate(source); 204 | if (generateType != GenerateType.Preview) 205 | cs.name = $"{source.name}{objectPostfix}"; 206 | 207 | cs.SetActive(true); 208 | cs.transform.position = Vector3.zero; 209 | cs.transform.rotation = Quaternion.identity; 210 | cs.transform.localScale = Vector3.one; 211 | 212 | if (generateType == GenerateType.Preview) 213 | previewObject = cs; 214 | 215 | Mesh ms = null; 216 | 217 | Material[] mats = new Material[2]; 218 | 219 | mats[1] = insideMaterial ? insideMaterial : source.GetComponent().sharedMaterial; 220 | 221 | MeshFilter mf = source.GetComponent(); 222 | SkinnedMeshRenderer smr = source.GetComponent(); 223 | 224 | if (mf != null) 225 | { 226 | mats[0] = source.GetComponent().sharedMaterial; 227 | ms = source.GetComponent().sharedMesh; 228 | } 229 | if (smr != null) 230 | { 231 | mats[0] = smr.sharedMaterial; 232 | smr.gameObject.transform.position = Vector3.zero; 233 | smr.gameObject.transform.rotation = Quaternion.identity; 234 | smr.gameObject.transform.localScale = Vector3.one; 235 | ms = new Mesh(); 236 | smr.BakeMesh(ms); 237 | //ms = smr.sharedMesh; 238 | } 239 | 240 | if (ms == null) 241 | return; 242 | 243 | NvMesh mymesh = new NvMesh(ms.vertices, ms.normals, ms.uv, ms.vertexCount, ms.GetIndices(0), (int)ms.GetIndexCount(0)); 244 | 245 | // cleaner = new NvMeshCleaner(); 246 | //cleaner.cleanMesh(mymesh); 247 | 248 | NvFractureTool fractureTool = new NvFractureTool(); 249 | fractureTool.setRemoveIslands(islands); 250 | fractureTool.setSourceMesh(mymesh); 251 | 252 | if (fractureType == FractureTypes.Voronoi) _Voronoi(fractureTool, mymesh); 253 | if (fractureType == FractureTypes.Clustered) _Clustered(fractureTool, mymesh); 254 | if (fractureType == FractureTypes.Slicing) _Slicing(fractureTool, mymesh); 255 | if (fractureType == FractureTypes.Skinned) _Skinned(fractureTool, mymesh); 256 | if (fractureType == FractureTypes.Plane) _Plane(fractureTool, mymesh); 257 | if (fractureType == FractureTypes.Cutout) _Cutout(fractureTool, mymesh); 258 | 259 | fractureTool.finalizeFracturing(); 260 | 261 | NvLogger.Log("Chunk Count: " + fractureTool.getChunkCount()); 262 | 263 | if (generateType == GenerateType.CreateAsset) 264 | { 265 | if (!AssetDatabase.IsValidFolder("Assets/NvBlast Prefabs")) AssetDatabase.CreateFolder("Assets", "NvBlast Prefabs"); 266 | if (!AssetDatabase.IsValidFolder("Assets/NvBlast Prefabs/Meshes")) AssetDatabase.CreateFolder("Assets/NvBlast Prefabs", "Meshes"); 267 | if (!AssetDatabase.IsValidFolder("Assets/NvBlast Prefabs/Fractured")) AssetDatabase.CreateFolder("Assets/NvBlast Prefabs", "Fractured"); 268 | 269 | FileUtil.DeleteFileOrDirectory("Assets/NvBlast Prefabs/Meshes/" + source.name); 270 | AssetDatabase.Refresh(); 271 | AssetDatabase.CreateFolder("Assets/NvBlast Prefabs/Meshes", source.name); 272 | } 273 | 274 | if (previewColliders) 275 | source.SetActive(false); 276 | 277 | for (int i = 1; i < fractureTool.getChunkCount(); i++) 278 | { 279 | GameObject chunk = new GameObject("Chunk" + i); 280 | chunk.transform.parent = cs.transform; 281 | 282 | MeshFilter chunkmf = chunk.AddComponent(); 283 | MeshRenderer chunkmr = chunk.AddComponent(); 284 | 285 | chunkmr.sharedMaterials = mats; 286 | 287 | NvMesh outside = fractureTool.getChunkMesh(i, false); 288 | NvMesh inside = fractureTool.getChunkMesh(i, true); 289 | 290 | Mesh m = outside.toUnityMesh(); 291 | m.subMeshCount = 2; 292 | m.SetIndices(inside.getIndexes(), MeshTopology.Triangles, 1); 293 | chunkmf.sharedMesh = m; 294 | 295 | if (generateType == GenerateType.CreateAsset) 296 | { 297 | AssetDatabase.CreateAsset(m, "Assets/NvBlast Prefabs/Meshes/" + source.name + "/Chunk" + i + ".asset"); 298 | } 299 | 300 | if (generateType == GenerateType.Preview) chunk.AddComponent(); 301 | 302 | if (generateType == GenerateType.Generate || generateType == GenerateType.CreateAsset || previewColliders) 303 | { 304 | VHACD vhacd = chunk.AddComponent(); 305 | vhacd.m_parameters.m_resolution = VHACDResolution; 306 | List meshes = vhacd.GenerateConvexMeshes(); 307 | 308 | foreach (Mesh mesh in meshes) 309 | { 310 | MeshCollider collider = chunk.AddComponent(); 311 | collider.sharedMesh = mesh; 312 | collider.convex = true; 313 | } 314 | DestroyImmediate(vhacd); 315 | } 316 | 317 | chunk.transform.position = Vector3.zero; 318 | chunk.transform.rotation = Quaternion.identity; 319 | } 320 | 321 | if (generateType == GenerateType.Generate || generateType == GenerateType.CreateAsset) 322 | { 323 | cs.AddComponent().jointBreakForce = jointBreakForce; 324 | 325 | for (int i = 0; i < cs.transform.childCount; i++) 326 | { 327 | Transform chunk = cs.transform.GetChild(i); 328 | chunk.gameObject.layer = LayerMask.NameToLayer("Fracture"); 329 | Bounds chunkBounds = new Bounds(chunk.GetComponent().bounds.center, chunk.GetComponent().bounds.size * 1.5f); 330 | 331 | chunk.GetComponent().enabled = false; 332 | 333 | ChunkRuntimeInfo chunkInfo = chunk.gameObject.AddComponent(); 334 | } 335 | } 336 | 337 | if (generateType == GenerateType.CreateAsset) 338 | { 339 | GameObject p = PrefabUtility.SaveAsPrefabAsset(cs, "Assets/NvBlast Prefabs/Fractured/" + source.name + "_fractured.prefab"); 340 | 341 | GameObject fo; 342 | 343 | bool skinnedMesh = false; 344 | if (source.GetComponent() != null) skinnedMesh = true; 345 | 346 | if (skinnedMesh) 347 | fo = Instantiate(source.transform.root.gameObject); 348 | else 349 | fo = Instantiate(source); 350 | 351 | Destructible d = fo.AddComponent(); 352 | d.fracturedPrefab = p; 353 | 354 | bool hasCollider = false; 355 | if (fo.GetComponent() != null) hasCollider = true; 356 | if (fo.GetComponent() != null) hasCollider = true; 357 | if (fo.GetComponent() != null) hasCollider = true; 358 | if (fo.GetComponent() != null) hasCollider = true; 359 | 360 | if (!hasCollider) 361 | { 362 | BoxCollider bc = fo.AddComponent(); 363 | if (skinnedMesh) 364 | { 365 | Bounds b = source.GetComponent().bounds; 366 | bc.center = new Vector3(0,.5f,0); 367 | bc.size = b.size; 368 | } 369 | } 370 | 371 | PrefabUtility.SaveAsPrefabAsset(fo, "Assets/NvBlast Prefabs/" + source.name + ".prefab"); 372 | DestroyImmediate(fo); 373 | } 374 | 375 | cs.transform.position = source.transform.position; 376 | cs.transform.rotation = source.transform.rotation; 377 | cs.transform.localScale = source.transform.localScale; 378 | 379 | UpdatePreview(); 380 | } 381 | 382 | private void _Cutout(NvFractureTool fractureTool, NvMesh mesh) 383 | { 384 | } 385 | 386 | private void _Plane(NvFractureTool fractureTool, NvMesh mesh) 387 | { 388 | } 389 | 390 | private void _Skinned(NvFractureTool fractureTool, NvMesh mesh) 391 | { 392 | SkinnedMeshRenderer smr = source.GetComponent(); 393 | NvVoronoiSitesGenerator sites = new NvVoronoiSitesGenerator(mesh); 394 | sites.boneSiteGeneration(smr); 395 | fractureTool.voronoiFracturing(0, sites); 396 | } 397 | 398 | private void _Slicing(NvFractureTool fractureTool, NvMesh mesh) 399 | { 400 | SlicingConfiguration conf = new SlicingConfiguration(); 401 | conf.slices = slices; 402 | conf.offset_variations = offset_variations; 403 | conf.angle_variations = angle_variations; 404 | 405 | conf.noise.amplitude = amplitude; 406 | conf.noise.frequency = frequency; 407 | conf.noise.octaveNumber = octaveNumber; 408 | conf.noise.surfaceResolution = surfaceResolution; 409 | 410 | fractureTool.slicing(0, conf, false); 411 | } 412 | 413 | private void _Clustered(NvFractureTool fractureTool, NvMesh mesh) 414 | { 415 | NvVoronoiSitesGenerator sites = new NvVoronoiSitesGenerator(mesh); 416 | sites.clusteredSitesGeneration(clusters, sitesPerCluster, clusterRadius); 417 | fractureTool.voronoiFracturing(0, sites); 418 | } 419 | 420 | private void _Voronoi(NvFractureTool fractureTool, NvMesh mesh) 421 | { 422 | NvVoronoiSitesGenerator sites = new NvVoronoiSitesGenerator(mesh); 423 | sites.uniformlyGenerateSitesInMesh(totalChunks); 424 | fractureTool.voronoiFracturing(0, sites); 425 | } 426 | 427 | private bool GUI_Voronoi() 428 | { 429 | GUILayout.Space(20); 430 | GUILayout.Label("VORONOI FRACTURE", GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.MinHeight(32)); 431 | 432 | totalChunks = EditorGUILayout.IntSlider("Total Chunks", totalChunks, 2, 100); 433 | 434 | if (GUILayout.Button("Visualize Points")) 435 | { 436 | _Visualize(); 437 | } 438 | return true; 439 | } 440 | 441 | private bool GUI_Clustered() 442 | { 443 | GUILayout.Space(20); 444 | GUILayout.Label("CLUSTERED VORONOI FRACTURE", GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.MinHeight(32)); 445 | 446 | clusters = EditorGUILayout.IntSlider("Clusters", clusters, 1, 100); 447 | sitesPerCluster = EditorGUILayout.IntSlider("Sites", sitesPerCluster, 1, 100); 448 | clusterRadius = EditorGUILayout.FloatField("Radius", clusterRadius); 449 | 450 | if (GUILayout.Button("Visualize Points")) 451 | { 452 | _Visualize(); 453 | } 454 | 455 | return true; 456 | } 457 | 458 | private bool GUI_Skinned() 459 | { 460 | GUILayout.Space(20); 461 | GUILayout.Label("SKINNED MESH VORONOI FRACTURE", GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.MinHeight(32)); 462 | 463 | if (source.GetComponent() == null) 464 | { 465 | EditorGUILayout.HelpBox("Skinned Mesh Not Selected", MessageType.Error); 466 | return false; 467 | } 468 | 469 | if (source.transform.root.position != Vector3.zero) 470 | { 471 | EditorGUILayout.HelpBox("Root must be at 0,0,0 for Skinned Meshes", MessageType.Info); 472 | if (GUILayout.Button("FIX")) 473 | { 474 | source.transform.root.position = Vector3.zero; 475 | source.transform.root.rotation = Quaternion.identity; 476 | source.transform.root.localScale = Vector3.one; 477 | } 478 | 479 | return false; 480 | } 481 | 482 | if (GUILayout.Button("Visualize Points")) 483 | { 484 | _Visualize(); 485 | } 486 | 487 | return true; 488 | } 489 | 490 | private bool GUI_Slicing() 491 | { 492 | GUILayout.Space(20); 493 | GUILayout.Label("SLICING FRACTURE", GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.MinHeight(32)); 494 | 495 | slices = EditorGUILayout.Vector3IntField("Slices", slices); 496 | offset_variations = EditorGUILayout.Slider("Offset", offset_variations, 0, 1); 497 | angle_variations = EditorGUILayout.Slider("Angle", angle_variations, 0, 1); 498 | 499 | GUILayout.BeginHorizontal(); 500 | amplitude = EditorGUILayout.FloatField("Amplitude", amplitude); 501 | frequency = EditorGUILayout.FloatField("Frequency", frequency); 502 | GUILayout.EndHorizontal(); 503 | 504 | GUILayout.BeginHorizontal(); 505 | octaveNumber = EditorGUILayout.IntField("Octave", octaveNumber); 506 | surfaceResolution = EditorGUILayout.IntField("Resolution", surfaceResolution); 507 | GUILayout.EndHorizontal(); 508 | 509 | return true; 510 | } 511 | 512 | private bool GUI_Plane() 513 | { 514 | GUILayout.Space(20); 515 | GUILayout.Label("PLANE FRACTURE", GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.MinHeight(32)); 516 | 517 | GUILayout.Label("Coming Soon..."); 518 | return false; 519 | } 520 | 521 | private bool GUI_Cutout() 522 | { 523 | GUILayout.Space(20); 524 | GUILayout.Label("CUTOUT FRACTURE", GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.MinHeight(32)); 525 | 526 | GUILayout.Label("Coming Soon..."); 527 | return false; 528 | } 529 | 530 | private void _Visualize() 531 | { 532 | NvBlastExtUnity.setSeed(seed); 533 | 534 | CleanUp(false); 535 | if (source == null) return; 536 | 537 | GameObject ps = new GameObject("POINTS"); 538 | ps.transform.position = Vector3.zero; 539 | ps.transform.rotation = Quaternion.identity; 540 | ps.transform.localScale = Vector3.one; 541 | 542 | Mesh ms = null; 543 | 544 | MeshFilter mf = source.GetComponent(); 545 | SkinnedMeshRenderer smr = source.GetComponent(); 546 | 547 | if (mf != null) 548 | { 549 | ms = source.GetComponent().sharedMesh; 550 | } 551 | if (smr != null) 552 | { 553 | smr.gameObject.transform.position = Vector3.zero; 554 | smr.gameObject.transform.rotation = Quaternion.identity; 555 | smr.gameObject.transform.localScale = Vector3.one; 556 | ms = new Mesh(); 557 | smr.BakeMesh(ms); 558 | //ms = smr.sharedMesh; 559 | } 560 | 561 | if (ms == null) return; 562 | 563 | NvMesh mymesh = new NvMesh(ms.vertices, ms.normals, ms.uv, ms.vertexCount, ms.GetIndices(0), (int)ms.GetIndexCount(0)); 564 | 565 | NvVoronoiSitesGenerator sites = new NvVoronoiSitesGenerator(mymesh); 566 | if (fractureType == FractureTypes.Voronoi) sites.uniformlyGenerateSitesInMesh(totalChunks); 567 | if (fractureType == FractureTypes.Clustered) sites.clusteredSitesGeneration(clusters, sitesPerCluster, clusterRadius); 568 | if (fractureType == FractureTypes.Skinned) sites.boneSiteGeneration(smr); 569 | 570 | Vector3[] vs = sites.getSites(); 571 | 572 | for (int i = 0; i < vs.Length; i++) 573 | { 574 | GameObject po = Instantiate(point, vs[i], Quaternion.identity, ps.transform); 575 | po.hideFlags = HideFlags.NotEditable; 576 | } 577 | 578 | ps.transform.rotation = source.transform.rotation; 579 | ps.transform.position = source.transform.position; 580 | } 581 | 582 | private void CleanUp(bool enableSource) 583 | { 584 | if(source) 585 | source.SetActive(enableSource); 586 | 587 | GameObject.DestroyImmediate(GameObject.Find("POINTS")); 588 | if (source) 589 | GameObject.DestroyImmediate(GameObject.Find($"{source.name}{objectPostfix}Preview")); 590 | } 591 | 592 | private void UpdatePreview() 593 | { 594 | if (previewObject == null) return; 595 | 596 | Transform[] ts = previewObject.transform.GetComponentsInChildren(); 597 | 598 | foreach (Transform t in ts) 599 | { 600 | ChunkInfo ci = t.GetComponent(); 601 | if (ci != null) 602 | { 603 | ci.UpdatePreview(previewDistance); 604 | } 605 | } 606 | } 607 | } -------------------------------------------------------------------------------- /Editor/CEditorFracture.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7b76fd133e2a9ad4fb828b81e7747ded 3 | timeCreated: 1523374101 4 | licenseType: Free 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Editor/ChunkInfoEditor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | 6 | [CustomEditor(typeof(ChunkInfo))] 7 | public class ChunkInfoEditor : Editor 8 | { 9 | public override void OnInspectorGUI() 10 | { 11 | ChunkInfo ci = (ChunkInfo)target; 12 | 13 | MeshFilter mf = ci.gameObject.GetComponent(); 14 | MeshRenderer mr = ci.gameObject.GetComponent(); 15 | 16 | Bounds b = mr.bounds; 17 | 18 | GUILayout.Label(ci.startBounds.ToString()); 19 | 20 | GUILayout.Label(b.ToString()); 21 | GUILayout.Label("Min:" + b.min.ToString()); 22 | GUILayout.Label("Max:" + b.max.ToString()); 23 | GUILayout.Label("Size:" + b.size.ToString()); 24 | } 25 | } -------------------------------------------------------------------------------- /Editor/ChunkInfoEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d25df78a4bdd4c45a1c2afb3a3c6db3 3 | timeCreated: 1523374101 4 | licenseType: Free 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Editor/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4bcbd2f4b17acd7428562fb8d55bfeea 3 | folderAsset: yes 4 | timeCreated: 1523374504 5 | licenseType: Free 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Editor/Resources/Point.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &100100000 4 | Prefab: 5 | m_ObjectHideFlags: 1 6 | serializedVersion: 2 7 | m_Modification: 8 | m_TransformParent: {fileID: 0} 9 | m_Modifications: [] 10 | m_RemovedComponents: [] 11 | m_ParentPrefab: {fileID: 0} 12 | m_RootGameObject: {fileID: 1625397954664434} 13 | m_IsPrefabParent: 1 14 | --- !u!1 &1625397954664434 15 | GameObject: 16 | m_ObjectHideFlags: 0 17 | m_PrefabParentObject: {fileID: 0} 18 | m_PrefabInternal: {fileID: 100100000} 19 | serializedVersion: 5 20 | m_Component: 21 | - component: {fileID: 4086466782208020} 22 | - component: {fileID: 33493510810413948} 23 | - component: {fileID: 65291979856279298} 24 | - component: {fileID: 23540266428370152} 25 | m_Layer: 0 26 | m_Name: Point 27 | m_TagString: Untagged 28 | m_Icon: {fileID: 0} 29 | m_NavMeshLayer: 0 30 | m_StaticEditorFlags: 0 31 | m_IsActive: 1 32 | --- !u!4 &4086466782208020 33 | Transform: 34 | m_ObjectHideFlags: 1 35 | m_PrefabParentObject: {fileID: 0} 36 | m_PrefabInternal: {fileID: 100100000} 37 | m_GameObject: {fileID: 1625397954664434} 38 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 39 | m_LocalPosition: {x: 1.0502788, y: 0.79255044, z: 0.219} 40 | m_LocalScale: {x: 0.025, y: 0.025, z: 0.025} 41 | m_Children: [] 42 | m_Father: {fileID: 0} 43 | m_RootOrder: 0 44 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 45 | --- !u!23 &23540266428370152 46 | MeshRenderer: 47 | m_ObjectHideFlags: 1 48 | m_PrefabParentObject: {fileID: 0} 49 | m_PrefabInternal: {fileID: 100100000} 50 | m_GameObject: {fileID: 1625397954664434} 51 | m_Enabled: 1 52 | m_CastShadows: 1 53 | m_ReceiveShadows: 1 54 | m_DynamicOccludee: 1 55 | m_MotionVectors: 1 56 | m_LightProbeUsage: 1 57 | m_ReflectionProbeUsage: 1 58 | m_Materials: 59 | - {fileID: 2100000, guid: 452be9de2f8909641a33c698ac1337da, type: 2} 60 | m_StaticBatchInfo: 61 | firstSubMesh: 0 62 | subMeshCount: 0 63 | m_StaticBatchRoot: {fileID: 0} 64 | m_ProbeAnchor: {fileID: 0} 65 | m_LightProbeVolumeOverride: {fileID: 0} 66 | m_ScaleInLightmap: 1 67 | m_PreserveUVs: 1 68 | m_IgnoreNormalsForChartDetection: 0 69 | m_ImportantGI: 0 70 | m_StitchLightmapSeams: 0 71 | m_SelectedEditorRenderState: 3 72 | m_MinimumChartSize: 4 73 | m_AutoUVMaxDistance: 0.5 74 | m_AutoUVMaxAngle: 89 75 | m_LightmapParameters: {fileID: 0} 76 | m_SortingLayerID: 0 77 | m_SortingLayer: 0 78 | m_SortingOrder: 0 79 | --- !u!33 &33493510810413948 80 | MeshFilter: 81 | m_ObjectHideFlags: 1 82 | m_PrefabParentObject: {fileID: 0} 83 | m_PrefabInternal: {fileID: 100100000} 84 | m_GameObject: {fileID: 1625397954664434} 85 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 86 | --- !u!65 &65291979856279298 87 | BoxCollider: 88 | m_ObjectHideFlags: 1 89 | m_PrefabParentObject: {fileID: 0} 90 | m_PrefabInternal: {fileID: 100100000} 91 | m_GameObject: {fileID: 1625397954664434} 92 | m_Material: {fileID: 0} 93 | m_IsTrigger: 0 94 | m_Enabled: 1 95 | serializedVersion: 2 96 | m_Size: {x: 1, y: 1, z: 1} 97 | m_Center: {x: 0, y: 0, z: 0} 98 | -------------------------------------------------------------------------------- /Editor/Resources/Point.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 658e36af4409c584ca3983652bba053c 3 | timeCreated: 1523374534 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 100100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Editor/Resources/PointMaterial.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: PointMaterial 11 | m_Shader: {fileID: 4800000, guid: f4332a5e272d304438c2e17986a851e8, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _AlphaTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _BumpMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _DetailAlbedoMap: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _DetailMask: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _DetailNormalMap: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _EmissionMap: 43 | m_Texture: {fileID: 0} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _MainTex: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _MetallicGlossMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _OcclusionMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | - _ParallaxMap: 59 | m_Texture: {fileID: 0} 60 | m_Scale: {x: 1, y: 1} 61 | m_Offset: {x: 0, y: 0} 62 | m_Floats: 63 | - PixelSnap: 0 64 | - _BumpScale: 1 65 | - _ColorMask: 15 66 | - _Cutoff: 0.5 67 | - _DetailNormalMapScale: 1 68 | - _DstBlend: 0 69 | - _EnableExternalAlpha: 0 70 | - _GlossMapScale: 1 71 | - _Glossiness: 0.5 72 | - _GlossyReflections: 1 73 | - _InvFade: 1 74 | - _Metallic: 0 75 | - _Mode: 0 76 | - _OcclusionStrength: 1 77 | - _Parallax: 0.02 78 | - _SmoothnessTextureChannel: 0 79 | - _SpecularHighlights: 1 80 | - _SrcBlend: 1 81 | - _Stencil: 0 82 | - _StencilComp: 8 83 | - _StencilOp: 0 84 | - _StencilReadMask: 255 85 | - _StencilWriteMask: 255 86 | - _UVSec: 0 87 | - _UseUIAlphaClip: 0 88 | - _ZWrite: 1 89 | m_Colors: 90 | - _Color: {r: 0, g: 0.5356252, b: 1, a: 1} 91 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 92 | - _Flip: {r: 1, g: 1, b: 1, a: 1} 93 | - _RendererColor: {r: 1, g: 1, b: 1, a: 1} 94 | - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} 95 | -------------------------------------------------------------------------------- /Editor/Resources/PointMaterial.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 452be9de2f8909641a33c698ac1337da 3 | timeCreated: 1523374512 4 | licenseType: Free 5 | NativeFormatImporter: 6 | externalObjects: {} 7 | mainObjectFileID: 2100000 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Editor/Resources/PointShader.shader: -------------------------------------------------------------------------------- 1 | Shader "Unlit/PointShader" 2 | { 3 | 4 | Properties{ 5 | _Color("Color", Color) = (1,1,1) 6 | } 7 | 8 | SubShader{ 9 | ZTest Always 10 | 11 | Color[_Color] 12 | Pass{} 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /Editor/Resources/PointShader.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f4332a5e272d304438c2e17986a851e8 3 | timeCreated: 1523540907 4 | licenseType: Free 5 | ShaderImporter: 6 | externalObjects: {} 7 | defaultTextures: [] 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2021, Dmitry Senyushkin 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /Pictures/DemoPicture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Pictures/DemoPicture.png -------------------------------------------------------------------------------- /Plugins/NvBlast.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using UnityEngine.Assertions; 6 | 7 | public abstract class DisposablePtr : IDisposable 8 | { 9 | protected void Initialize(IntPtr ptr) 10 | { 11 | Assert.IsTrue(this._ptr == IntPtr.Zero); 12 | this._ptr = ptr; 13 | } 14 | 15 | protected void ResetPtr() 16 | { 17 | this._ptr = IntPtr.Zero; 18 | } 19 | 20 | protected abstract void Release(); 21 | 22 | public IntPtr ptr 23 | { 24 | get { return _ptr; } 25 | } 26 | 27 | 28 | public void Dispose() 29 | { 30 | Dispose(true); 31 | } 32 | 33 | protected virtual void Dispose(bool bDisposing) 34 | { 35 | if (_ptr != IntPtr.Zero) 36 | { 37 | Release(); 38 | _ptr = IntPtr.Zero; 39 | } 40 | 41 | if (bDisposing) 42 | { 43 | GC.SuppressFinalize(this); 44 | } 45 | } 46 | 47 | ~DisposablePtr() 48 | { 49 | Dispose(false); 50 | } 51 | 52 | private IntPtr _ptr = IntPtr.Zero; 53 | } -------------------------------------------------------------------------------- /Plugins/NvBlast.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d411b1996845a5f46836047a6c5eed10 3 | timeCreated: 1523337022 4 | licenseType: Free 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Plugins/NvBlastExtUnity.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Runtime.InteropServices; 5 | using UnityEngine; 6 | using UnityEngine.Assertions; 7 | 8 | public class NvLogger 9 | { 10 | public static void Log(String msg) 11 | { 12 | //Debug.Log(msg);//Comment out to remove debug messages 13 | } 14 | } 15 | 16 | [StructLayout(LayoutKind.Sequential)] 17 | public struct NoiseConfiguration 18 | { 19 | public float amplitude;//0 - disabled 20 | public float frequency;//:1 21 | public int octaveNumber;//:1 22 | public int surfaceResolution;//:1 23 | }; 24 | 25 | [StructLayout(LayoutKind.Sequential)] 26 | public struct SlicingConfiguration 27 | { 28 | public Vector3Int slices; 29 | public float offset_variations;//0-1:0 30 | public float angle_variations;//0-1:0 31 | public NoiseConfiguration noise; 32 | }; 33 | 34 | public class NvMesh : DisposablePtr 35 | { 36 | [DllImport("NvBlastExtUnity_x64")] 37 | private static extern void _Mesh_Release(IntPtr mesh); 38 | 39 | [DllImport("NvBlastExtUnity_x64")] 40 | private static extern void _Mesh_getVertices(IntPtr mesh, [In,Out] Vector3[] arr); 41 | 42 | [DllImport("NvBlastExtUnity_x64")] 43 | private static extern void _Mesh_getNormals(IntPtr mesh, [In,Out] Vector3[] arr); 44 | 45 | [DllImport("NvBlastExtUnity_x64")] 46 | private static extern void _Mesh_getIndexes(IntPtr mesh, [In,Out] int[] arr); 47 | 48 | [DllImport("NvBlastExtUnity_x64")] 49 | private static extern void _Mesh_getUVs(IntPtr mesh, [In,Out] Vector2[] arr); 50 | 51 | [DllImport("NvBlastExtUnity_x64")] 52 | private static extern int _Mesh_getVerticesCount(IntPtr mesh); 53 | 54 | [DllImport("NvBlastExtUnity_x64")] 55 | private static extern int _Mesh_getIndexesCount(IntPtr mesh); 56 | 57 | [DllImport("NvBlastExtAuthoring_x64")] 58 | private static extern IntPtr NvBlastExtAuthoringCreateMesh(Vector3[] positions, Vector3[] normals, Vector2[] uv, Int32 verticesCount, Int32[] indices, Int32 indicesCount); 59 | 60 | public NvMesh(IntPtr mesh) 61 | { 62 | Initialize(mesh); 63 | NvLogger.Log("NvMesh:" + this.ptr.ToString()); 64 | } 65 | 66 | public NvMesh(Vector3[] positions, Vector3[] normals, Vector2[] uv, Int32 verticesCount, Int32[] indices, Int32 indicesCount) 67 | { 68 | Initialize(NvBlastExtAuthoringCreateMesh(positions, normals, uv, verticesCount, indices, indicesCount)); 69 | NvLogger.Log("NvMesh:" + this.ptr.ToString()); 70 | } 71 | 72 | public Vector3[] getVertices() 73 | { 74 | Vector3[] v = new Vector3[getVerticesCount()]; 75 | _Mesh_getVertices(this.ptr, v); 76 | return v; 77 | } 78 | public Vector3[] getNormals() 79 | { 80 | Vector3[] v = new Vector3[getVerticesCount()]; 81 | _Mesh_getNormals(this.ptr, v); 82 | return v; 83 | } 84 | public Vector2[] getUVs() 85 | { 86 | Vector2[] v = new Vector2[getVerticesCount()]; 87 | _Mesh_getUVs(this.ptr, v); 88 | return v; 89 | } 90 | public int[] getIndexes() 91 | { 92 | int[] v = new int[getIndexesCount()]; 93 | _Mesh_getIndexes(this.ptr, v); 94 | return v; 95 | } 96 | 97 | public int getVerticesCount() 98 | { 99 | return _Mesh_getVerticesCount(this.ptr); 100 | } 101 | 102 | public int getIndexesCount() 103 | { 104 | return _Mesh_getIndexesCount(this.ptr); 105 | } 106 | 107 | protected override void Release() 108 | { 109 | NvLogger.Log("_Mesh_Release"); 110 | _Mesh_Release(this.ptr); 111 | } 112 | 113 | //Unity Helper Functions 114 | public Mesh toUnityMesh() 115 | { 116 | Mesh m = new Mesh(); 117 | m.vertices = getVertices(); 118 | m.normals = getNormals(); 119 | m.uv = getUVs(); 120 | m.SetIndices(getIndexes(), MeshTopology.Triangles, 0, true); 121 | return m; 122 | } 123 | } 124 | 125 | public class NvMeshCleaner : DisposablePtr 126 | { 127 | [DllImport("NvBlastExtUnity_x64")] 128 | private static extern void _Cleaner_Release(IntPtr cleaner); 129 | 130 | [DllImport("NvBlastExtUnity_x64")] 131 | private static extern IntPtr _Cleaner_cleanMesh(IntPtr cleaner, IntPtr mesh); 132 | 133 | [DllImport("NvBlastExtAuthoring_x64")] 134 | private static extern IntPtr NvBlastExtAuthoringCreateMeshCleaner(); 135 | 136 | public NvMeshCleaner() 137 | { 138 | Initialize(NvBlastExtAuthoringCreateMeshCleaner()); 139 | NvLogger.Log("NvMeshCleaner:" + this.ptr.ToString()); 140 | } 141 | 142 | public NvMesh cleanMesh(NvMesh mesh) 143 | { 144 | return new NvMesh(_Cleaner_cleanMesh(this.ptr, mesh.ptr)); 145 | } 146 | 147 | protected override void Release() 148 | { 149 | NvLogger.Log("_Cleaner_Release"); 150 | _Cleaner_Release(this.ptr); 151 | } 152 | } 153 | 154 | public class NvFractureTool : DisposablePtr 155 | { 156 | [DllImport("NvBlastExtUnity_x64")] 157 | private static extern void _FractureTool_Release(IntPtr tool); 158 | 159 | [DllImport("NvBlastExtAuthoring_x64")] 160 | private static extern IntPtr NvBlastExtAuthoringCreateFractureTool(); 161 | 162 | [DllImport("NvBlastExtUnity_x64")] 163 | private static extern void _FractureTool_setSourceMesh(IntPtr tool, IntPtr mesh); 164 | 165 | [DllImport("NvBlastExtUnity_x64")] 166 | private static extern void _FractureTool_setRemoveIslands(IntPtr tool, bool remove); 167 | 168 | [DllImport("NvBlastExtUnity_x64")] 169 | private static extern bool _FractureTool_voronoiFracturing(IntPtr tool, int chunkId, IntPtr vsg); 170 | 171 | [DllImport("NvBlastExtUnity_x64")] 172 | private static extern bool _FractureTool_slicing(IntPtr tool, int chunkId, [Out] SlicingConfiguration conf, bool replaceChunk); 173 | 174 | [DllImport("NvBlastExtUnity_x64")] 175 | private static extern void _FractureTool_finalizeFracturing(IntPtr tool); 176 | 177 | [DllImport("NvBlastExtUnity_x64")] 178 | private static extern int _FractureTool_getChunkCount(IntPtr tool); 179 | 180 | [DllImport("NvBlastExtUnity_x64")] 181 | private static extern IntPtr _FractureTool_getChunkMesh(IntPtr tool, int chunkId, bool inside); 182 | 183 | public NvFractureTool() 184 | { 185 | Initialize(NvBlastExtAuthoringCreateFractureTool()); 186 | NvLogger.Log("NvFractureTool:" + this.ptr.ToString()); 187 | } 188 | 189 | public void setSourceMesh(NvMesh mesh) 190 | { 191 | _FractureTool_setSourceMesh(this.ptr, mesh.ptr); 192 | } 193 | 194 | public void setRemoveIslands(bool remove) 195 | { 196 | _FractureTool_setRemoveIslands(this.ptr, remove); 197 | } 198 | 199 | public bool voronoiFracturing(int chunkId, NvVoronoiSitesGenerator vsg) 200 | { 201 | return _FractureTool_voronoiFracturing(this.ptr, chunkId, vsg.ptr); 202 | } 203 | 204 | public bool slicing(int chunkId, SlicingConfiguration conf, bool replaceChunk) 205 | { 206 | return _FractureTool_slicing(this.ptr, chunkId, conf, replaceChunk); 207 | } 208 | 209 | public void finalizeFracturing() 210 | { 211 | _FractureTool_finalizeFracturing(this.ptr); 212 | } 213 | 214 | public int getChunkCount() 215 | { 216 | return _FractureTool_getChunkCount(this.ptr); 217 | } 218 | 219 | public NvMesh getChunkMesh(int chunkId, bool inside) 220 | { 221 | return new NvMesh(_FractureTool_getChunkMesh(this.ptr, chunkId, inside)); 222 | } 223 | 224 | protected override void Release() 225 | { 226 | NvLogger.Log("_FractureTool_Release"); 227 | _FractureTool_Release(this.ptr); 228 | } 229 | } 230 | 231 | public class NvVoronoiSitesGenerator : DisposablePtr 232 | { 233 | [DllImport("NvBlastExtUnity_x64")] 234 | private static extern void _VoronoiSitesGenerator_Release(IntPtr site); 235 | 236 | [DllImport("NvBlastExtUnity_x64")] 237 | private static extern IntPtr _VoronoiSitesGenerator_Create(IntPtr mesh); 238 | 239 | [DllImport("NvBlastExtUnity_x64")] 240 | private static extern IntPtr _NvVoronoiSitesGenerator_uniformlyGenerateSitesInMesh(IntPtr tool,int count); 241 | 242 | [DllImport("NvBlastExtUnity_x64")] 243 | private static extern IntPtr _NvVoronoiSitesGenerator_addSite(IntPtr tool, [In] Vector3 site); 244 | 245 | [DllImport("NvBlastExtUnity_x64")] 246 | private static extern bool _NvVoronoiSitesGenerator_clusteredSitesGeneration(IntPtr tool, int numberOfClusters, int sitesPerCluster, float clusterRadius); 247 | 248 | [DllImport("NvBlastExtUnity_x64")] 249 | private static extern int _NvVoronoiSitesGenerator_getSitesCount(IntPtr tool); 250 | 251 | [DllImport("NvBlastExtUnity_x64")] 252 | private static extern void _NvVoronoiSitesGenerator_getSites(IntPtr tool, [In, Out] Vector3[] arr); 253 | 254 | public NvVoronoiSitesGenerator(NvMesh mesh) 255 | { 256 | Initialize(_VoronoiSitesGenerator_Create(mesh.ptr)); 257 | NvLogger.Log("NvVoronoiSitesGenerator:" + this.ptr.ToString()); 258 | } 259 | 260 | public void uniformlyGenerateSitesInMesh(int count) 261 | { 262 | _NvVoronoiSitesGenerator_uniformlyGenerateSitesInMesh(this.ptr, count); 263 | } 264 | 265 | public void addSite(Vector3 site) 266 | { 267 | _NvVoronoiSitesGenerator_addSite(this.ptr, site); 268 | } 269 | 270 | public void clusteredSitesGeneration(int numberOfClusters, int sitesPerCluster, float clusterRadius) 271 | { 272 | _NvVoronoiSitesGenerator_clusteredSitesGeneration(this.ptr, numberOfClusters, sitesPerCluster, clusterRadius); 273 | } 274 | 275 | public Vector3[] getSites() 276 | { 277 | Vector3[] v = new Vector3[getSitesCount()]; 278 | _NvVoronoiSitesGenerator_getSites(this.ptr, v); 279 | return v; 280 | } 281 | 282 | public int getSitesCount() 283 | { 284 | return _NvVoronoiSitesGenerator_getSitesCount(this.ptr); 285 | } 286 | 287 | protected override void Release() 288 | { 289 | NvLogger.Log("_VoronoiSitesGenerator_Release"); 290 | _VoronoiSitesGenerator_Release(this.ptr); 291 | } 292 | 293 | //Unity Specific 294 | public void boneSiteGeneration(SkinnedMeshRenderer smr) 295 | { 296 | if (smr == null) 297 | { 298 | Debug.Log("No Skinned Mesh Renderer"); 299 | return; 300 | } 301 | 302 | Animator anim = smr.transform.root.GetComponent(); 303 | if (anim == null) 304 | { 305 | Debug.Log("Missing Animator"); 306 | return; 307 | } 308 | 309 | if (anim.GetBoneTransform(HumanBodyBones.Head)) addSite(anim.GetBoneTransform(HumanBodyBones.Head).position); 310 | if (anim.GetBoneTransform(HumanBodyBones.Neck)) addSite(anim.GetBoneTransform(HumanBodyBones.Neck).position); 311 | 312 | //if (anim.GetBoneTransform(HumanBodyBones.LeftShoulder)) addSite(anim.GetBoneTransform(HumanBodyBones.LeftShoulder).position); 313 | //if (anim.GetBoneTransform(HumanBodyBones.RightShoulder)) addSite(anim.GetBoneTransform(HumanBodyBones.RightShoulder).position); 314 | 315 | if (anim.GetBoneTransform(HumanBodyBones.LeftUpperArm)) addSite(anim.GetBoneTransform(HumanBodyBones.LeftUpperArm).position); 316 | if (anim.GetBoneTransform(HumanBodyBones.RightUpperArm)) addSite(anim.GetBoneTransform(HumanBodyBones.RightUpperArm).position); 317 | 318 | if (anim.GetBoneTransform(HumanBodyBones.LeftLowerArm)) addSite(anim.GetBoneTransform(HumanBodyBones.LeftLowerArm).position); 319 | if (anim.GetBoneTransform(HumanBodyBones.RightLowerArm)) addSite(anim.GetBoneTransform(HumanBodyBones.RightLowerArm).position); 320 | 321 | if (anim.GetBoneTransform(HumanBodyBones.LeftHand)) addSite(anim.GetBoneTransform(HumanBodyBones.LeftHand).position); 322 | if (anim.GetBoneTransform(HumanBodyBones.RightHand)) addSite(anim.GetBoneTransform(HumanBodyBones.RightHand).position); 323 | 324 | if (anim.GetBoneTransform(HumanBodyBones.Chest)) addSite(anim.GetBoneTransform(HumanBodyBones.Chest).position); 325 | if (anim.GetBoneTransform(HumanBodyBones.Spine)) addSite(anim.GetBoneTransform(HumanBodyBones.Spine).position); 326 | if (anim.GetBoneTransform(HumanBodyBones.Hips)) addSite(anim.GetBoneTransform(HumanBodyBones.Hips).position); 327 | 328 | if (anim.GetBoneTransform(HumanBodyBones.LeftUpperLeg)) addSite(anim.GetBoneTransform(HumanBodyBones.LeftUpperLeg).position); 329 | if (anim.GetBoneTransform(HumanBodyBones.RightUpperLeg)) addSite(anim.GetBoneTransform(HumanBodyBones.RightUpperLeg).position); 330 | 331 | if (anim.GetBoneTransform(HumanBodyBones.LeftLowerLeg)) addSite(anim.GetBoneTransform(HumanBodyBones.LeftLowerLeg).position); 332 | if (anim.GetBoneTransform(HumanBodyBones.RightLowerLeg)) addSite(anim.GetBoneTransform(HumanBodyBones.RightLowerLeg).position); 333 | 334 | if (anim.GetBoneTransform(HumanBodyBones.LeftFoot)) addSite(anim.GetBoneTransform(HumanBodyBones.LeftFoot).position); 335 | if (anim.GetBoneTransform(HumanBodyBones.RightFoot)) addSite(anim.GetBoneTransform(HumanBodyBones.RightFoot).position); 336 | 337 | //if (anim.GetBoneTransform(HumanBodyBones.LeftEye)) addSite(anim.GetBoneTransform(HumanBodyBones.LeftEye).position); 338 | //if (anim.GetBoneTransform(HumanBodyBones.RightEye)) addSite(anim.GetBoneTransform(HumanBodyBones.RightEye).position); 339 | } 340 | } 341 | 342 | public class NvBlastExtUnity 343 | { 344 | [DllImport("NvBlastExtUnity_x64")] 345 | public static extern void Version(); 346 | 347 | [DllImport("NvBlastExtUnity_x64")] 348 | public static extern void setSeed(int seed); 349 | 350 | 351 | } 352 | -------------------------------------------------------------------------------- /Plugins/NvBlastExtUnity.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4dda6205e0d0cb14ba11f25e60e5fe77 3 | timeCreated: 1523155696 4 | licenseType: Free 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Plugins/liblibvhacd.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/liblibvhacd.dylib -------------------------------------------------------------------------------- /Plugins/liblibvhacd.dylib.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ebe36a8812809424591718256496aa00 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Any: 16 | second: 17 | enabled: 0 18 | settings: {} 19 | - first: 20 | Editor: Editor 21 | second: 22 | enabled: 1 23 | settings: 24 | DefaultValueInitialized: true 25 | - first: 26 | Standalone: OSXUniversal 27 | second: 28 | enabled: 1 29 | settings: {} 30 | userData: 31 | assetBundleName: 32 | assetBundleVariant: 33 | -------------------------------------------------------------------------------- /Plugins/liblibvhacd.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/liblibvhacd.so -------------------------------------------------------------------------------- /Plugins/liblibvhacd.so.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 93026905049f20e40b08aa302b05678b 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | : Any 16 | second: 17 | enabled: 0 18 | settings: 19 | Exclude Editor: 0 20 | Exclude Linux64: 0 21 | Exclude OSXUniversal: 1 22 | Exclude WebGL: 1 23 | Exclude Win: 1 24 | Exclude Win64: 1 25 | Exclude WindowsStoreApps: 1 26 | - first: 27 | Any: 28 | second: 29 | enabled: 0 30 | settings: {} 31 | - first: 32 | Editor: Editor 33 | second: 34 | enabled: 1 35 | settings: 36 | CPU: x86_64 37 | DefaultValueInitialized: true 38 | OS: Linux 39 | - first: 40 | Standalone: Linux64 41 | second: 42 | enabled: 1 43 | settings: 44 | CPU: AnyCPU 45 | - first: 46 | Standalone: OSXUniversal 47 | second: 48 | enabled: 0 49 | settings: 50 | CPU: None 51 | - first: 52 | Standalone: Win 53 | second: 54 | enabled: 0 55 | settings: 56 | CPU: AnyCPU 57 | - first: 58 | Standalone: Win64 59 | second: 60 | enabled: 0 61 | settings: 62 | CPU: AnyCPU 63 | - first: 64 | WebGL: WebGL 65 | second: 66 | enabled: 0 67 | settings: {} 68 | - first: 69 | Windows Store Apps: WindowsStoreApps 70 | second: 71 | enabled: 0 72 | settings: 73 | CPU: X86 74 | DontProcess: true 75 | PlaceholderPath: 76 | SDK: AnySDK 77 | ScriptingBackend: AnyScriptingBackend 78 | userData: 79 | assetBundleName: 80 | assetBundleVariant: 81 | -------------------------------------------------------------------------------- /Plugins/libvhacd.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/libvhacd.dll -------------------------------------------------------------------------------- /Plugins/libvhacd.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f3f2df8dfc55d564b80e720ba5acdfd5 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | : Any 16 | second: 17 | enabled: 0 18 | settings: 19 | Exclude Editor: 0 20 | Exclude Linux64: 0 21 | Exclude OSXUniversal: 0 22 | Exclude WebGL: 1 23 | Exclude Win: 1 24 | Exclude Win64: 0 25 | Exclude WindowsStoreApps: 1 26 | - first: 27 | Any: 28 | second: 29 | enabled: 0 30 | settings: {} 31 | - first: 32 | Editor: Editor 33 | second: 34 | enabled: 1 35 | settings: 36 | CPU: x86_64 37 | DefaultValueInitialized: true 38 | OS: Windows 39 | - first: 40 | Standalone: Linux64 41 | second: 42 | enabled: 1 43 | settings: 44 | CPU: AnyCPU 45 | - first: 46 | Standalone: OSXUniversal 47 | second: 48 | enabled: 1 49 | settings: 50 | CPU: AnyCPU 51 | - first: 52 | Standalone: Win 53 | second: 54 | enabled: 0 55 | settings: 56 | CPU: None 57 | - first: 58 | Standalone: Win64 59 | second: 60 | enabled: 1 61 | settings: 62 | CPU: AnyCPU 63 | - first: 64 | Windows Store Apps: WindowsStoreApps 65 | second: 66 | enabled: 0 67 | settings: 68 | CPU: X86 69 | DontProcess: false 70 | PlaceholderPath: 71 | SDK: AnySDK 72 | ScriptingBackend: AnyScriptingBackend 73 | userData: 74 | assetBundleName: 75 | assetBundleVariant: 76 | -------------------------------------------------------------------------------- /Plugins/vhacd.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vhacd", 3 | "references": [], 4 | "includePlatforms": [], 5 | "excludePlatforms": [], 6 | "allowUnsafeCode": false, 7 | "overrideReferences": false, 8 | "precompiledReferences": [], 9 | "autoReferenced": true, 10 | "defineConstraints": [], 11 | "versionDefines": [], 12 | "noEngineReferences": false 13 | } -------------------------------------------------------------------------------- /Plugins/vhacd.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6a697808d7c80a549b57420070d6c4f3 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/x64.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f858de9dfcea7c94182f27ffe2dac9a6 3 | folderAsset: yes 4 | timeCreated: 1523154190 5 | licenseType: Free 6 | DefaultImporter: 7 | externalObjects: {} 8 | userData: 9 | assetBundleName: 10 | assetBundleVariant: 11 | -------------------------------------------------------------------------------- /Plugins/x64/AuthoringTool_x64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/AuthoringTool_x64.exe -------------------------------------------------------------------------------- /Plugins/x64/AuthoringTool_x64.exe.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 274221613d3e8e94bbc0fc654c5ad19b 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | DefaultImporter: 6 | externalObjects: {} 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtAssetUtils_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtAssetUtils_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtAssetUtils_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2276a50b4db24d14d96e1921a2b24d6b 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtAuthoring_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtAuthoring_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtAuthoring_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 835fbcad813f5294da828776781db1e9 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtExporter_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtExporter_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtExporter_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d96ad0e0240a8114a943683a3d0af41e 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtPhysX_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtPhysX_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtPhysX_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8e06a9088fd6e0a458dbcb04a48e6d97 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtPxSerialization_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtPxSerialization_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtPxSerialization_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6bfcb81c4de6d9442ac3cafc22add07c 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtSerialization_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtSerialization_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtSerialization_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7e589d7d4d4c96a47b7960ac51dc1dae 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtShaders_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtShaders_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtShaders_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38f416c66dc0f434a813712353064c29 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtStress_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtStress_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtStress_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ddde93fb3cdf650469ecfe18ab0c6584 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtTkSerialization_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtTkSerialization_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtTkSerialization_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 96005e468a2c10b4f8b1b88097ef50dd 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtUnity_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastExtUnity_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastExtUnity_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: daf5740686021704a9102191acbaf491 3 | timeCreated: 1523155666 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastGlobals_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastGlobals_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastGlobals_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 254ca5bb45f49654aac38284c5bb7848 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlastTk_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlastTk_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlastTk_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a02fa3bf28a9e7340a061abb3d6caeb0 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/NvBlast_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/NvBlast_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/NvBlast_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 586a3a5db3bc4d4439662de9d886c06d 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/PhysX3Cooking_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/PhysX3Cooking_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/PhysX3Cooking_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3f6f5e184b243774aa6bf034820333cb 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/PhysX3Gpu_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/PhysX3Gpu_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/PhysX3Gpu_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c2f2c7c61944af947b29b0288dfec980 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/PhysX3_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/PhysX3_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/PhysX3_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6e1e29cbaf0c73b4ba017c7194808725 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/PxFoundation_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/PxFoundation_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/PxFoundation_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 50c0106a26932be41a92e4d8a7022689 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/PxPvdSDK_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/PxPvdSDK_x64.dll -------------------------------------------------------------------------------- /Plugins/x64/PxPvdSDK_x64.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2c1620122867cd148873bf4a402fd557 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Plugins/x64/nvToolsExt64_1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/U3DC/unity-libre-fracture/60333fe99b660ca9bf4629a862fd2f60cfb5a807/Plugins/x64/nvToolsExt64_1.dll -------------------------------------------------------------------------------- /Plugins/x64/nvToolsExt64_1.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 41b1a5fc15a75f7458ee826c105e7481 3 | timeCreated: 1523158464 4 | licenseType: Free 5 | PluginImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | iconMap: {} 9 | executionOrder: {} 10 | isPreloaded: 0 11 | isOverridable: 0 12 | platformData: 13 | - first: 14 | '': OSXIntel 15 | second: 16 | enabled: 0 17 | settings: 18 | CPU: None 19 | - first: 20 | '': OSXIntel64 21 | second: 22 | enabled: 1 23 | settings: 24 | CPU: AnyCPU 25 | - first: 26 | Any: 27 | second: 28 | enabled: 1 29 | settings: {} 30 | - first: 31 | Editor: Editor 32 | second: 33 | enabled: 0 34 | settings: 35 | CPU: x86_64 36 | DefaultValueInitialized: true 37 | - first: 38 | Facebook: Win 39 | second: 40 | enabled: 0 41 | settings: 42 | CPU: None 43 | - first: 44 | Facebook: Win64 45 | second: 46 | enabled: 1 47 | settings: 48 | CPU: AnyCPU 49 | - first: 50 | Standalone: Linux 51 | second: 52 | enabled: 0 53 | settings: 54 | CPU: None 55 | - first: 56 | Standalone: Linux64 57 | second: 58 | enabled: 1 59 | settings: 60 | CPU: x86_64 61 | - first: 62 | Standalone: LinuxUniversal 63 | second: 64 | enabled: 1 65 | settings: 66 | CPU: x86_64 67 | - first: 68 | Standalone: OSXUniversal 69 | second: 70 | enabled: 0 71 | settings: 72 | CPU: x86_64 73 | - first: 74 | Standalone: Win 75 | second: 76 | enabled: 0 77 | settings: 78 | CPU: None 79 | - first: 80 | Standalone: Win64 81 | second: 82 | enabled: 1 83 | settings: 84 | CPU: AnyCPU 85 | userData: 86 | assetBundleName: 87 | assetBundleVariant: 88 | -------------------------------------------------------------------------------- /Prefabs/VFX.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 96d540ce06a017248b740e8a0778726a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Prefabs/VFX/FractureDust.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 69e19e285073c584eb3bb47c8a9e438e 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unity Libre Fracture 2 | 3 | ![Demo picture](https://gitlab.com/dima13230/unity-libre-fracture/-/raw/9504a9995980bb899bb635e8260c844701a7db86/Pictures/DemoPicture.png) 4 | 5 | Unity Libre Fracture is a free and open source fracture system developed for Unity Engine. 6 | It uses NVIDIA Blast wrapper for unity as base from [here](https://forum.unity.com/threads/nvidia-blast.472623) and for concave meshes uses VHACD (Volumetric Hierarchical Approximate Convex Decomposition) from [here](https://github.com/Unity-Technologies/VHACD). 7 | 8 | [YouTube Video Demonstration](https://www.youtube.com/watch?v=_vSFzkecSak) 9 | 10 | [Usage Tutorial](https://www.youtube.com/watch?v=od1mtc1HcUM) 11 | 12 | ### Unity Libre Fracture is now part of Verein Community. To preserve the accessibility of the repository from the resources where it was already mentioned, I won't transfer it to Verein Community (at least not yet) 13 | 14 | # TODO 15 | 16 | **[C]** - critical issue, **[NC]** - non-critical issue, **[F]** - feature 17 | 18 | - **[C]** Fix physical stability issue, probably related to the centers of masses (can be noticed on round objects like sphere when fractured) 19 | - **[F]** Distribute mass along chunks with taking their size in account 20 | - **[F]** If FractureObject had any joints attached and it was then fractured, make corresponding joints at the chunk(s) to the same connected body 21 | - **[F]** Mesh deformation system 22 | -------------------------------------------------------------------------------- /Scripts/ChunkInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class ChunkInfo : MonoBehaviour 6 | { 7 | public Vector3 startPosition; 8 | public Quaternion startRotation; 9 | public Bounds startBounds; 10 | 11 | void Reset() 12 | { 13 | MeshRenderer mr = this.GetComponent(); 14 | 15 | startBounds = mr.bounds; 16 | startPosition = this.transform.position; 17 | startRotation = this.transform.rotation; 18 | } 19 | 20 | public void UpdatePreview(float distance) 21 | { 22 | this.transform.position = this.transform.parent.TransformPoint(startBounds.center * distance); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Scripts/ChunkInfo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 45abeb623d94a3b45a0a71f7a40ad1e6 3 | timeCreated: 1523374067 4 | licenseType: Free 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Scripts/ChunkRuntimeInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.Events; 5 | 6 | #if UNITY_EDITOR 7 | using UnityEditor; 8 | #endif 9 | 10 | public class ChunkRuntimeInfo : MonoBehaviour 11 | { 12 | public List topConnections = new List(); 13 | public List bottomConnections = new List(); 14 | public List forwardConnections = new List(); 15 | public List backwardConnections = new List(); 16 | public List leftConnections = new List(); 17 | public List rightConnections = new List(); 18 | 19 | bool collidersEnabled = true; 20 | 21 | new Rigidbody rigidbody; 22 | FractureObject fractureObject; 23 | 24 | public bool isBrokenOff { get; set; } 25 | 26 | public UnityAction onFracture; 27 | 28 | public void Init() 29 | { 30 | SwitchColliders(collidersEnabled); 31 | rigidbody = GetComponent(); 32 | fractureObject = transform.parent.GetComponent(); 33 | } 34 | 35 | private void Update() 36 | { 37 | if ( 38 | topConnections.Count == 0 || 39 | bottomConnections.Count == 0 || 40 | forwardConnections.Count == 0 || 41 | backwardConnections.Count == 0 || 42 | leftConnections.Count == 0 || 43 | rightConnections.Count == 0) 44 | { 45 | rigidbody.isKinematic = false; 46 | SwitchColliders(true); 47 | } 48 | else // happens if surrounded from all sides 49 | { 50 | rigidbody.isKinematic = true; 51 | SwitchColliders(false); 52 | } 53 | 54 | if (GetComponents().Length == 0 && !isBrokenOff) 55 | { 56 | rigidbody.isKinematic = false; 57 | gameObject.layer = 0; 58 | onFracture.Invoke(this); 59 | isBrokenOff = true; 60 | } 61 | 62 | } 63 | 64 | void SwitchColliders(bool enabled) 65 | { 66 | if (collidersEnabled != enabled) 67 | { 68 | foreach (Collider collider in GetComponents()) 69 | { 70 | collider.enabled = enabled; 71 | } 72 | } 73 | } 74 | 75 | public void OnJointRemove(Rigidbody connectedBody) 76 | { 77 | topConnections.Remove(connectedBody); 78 | bottomConnections.Remove(connectedBody); 79 | forwardConnections.Remove(connectedBody); 80 | backwardConnections.Remove(connectedBody); 81 | leftConnections.Remove(connectedBody); 82 | rightConnections.Remove(connectedBody); 83 | 84 | rigidbody.ResetCenterOfMass(); 85 | } 86 | 87 | private void OnCollisionEnter(Collision collision) 88 | { 89 | //if(collision.relativeVelocity.magnitude >= fractureObject.chunkCollisionVelocityToCreateVFX) 90 | //{ 91 | // if(fractureObject.onChunkCollideVFX) 92 | // Instantiate(fractureObject.onChunkCollideVFX); 93 | //} 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /Scripts/ChunkRuntimeInfo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d2263ac4e11ff244181633cffc9b4b43 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/Demo.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80c5d42650d891c4c967078398e30d3a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Scripts/Destructible.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class Destructible : MonoBehaviour { 6 | 7 | public GameObject fracturedPrefab; 8 | 9 | private void OnMouseDown() 10 | { 11 | Instantiate(fracturedPrefab, transform.position, transform.rotation); 12 | Destroy(transform.root.gameObject); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Scripts/Destructible.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 70d913b0517a2fc4b96a49402013e29a 3 | timeCreated: 1523513620 4 | licenseType: Free 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Scripts/DrawNormals.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | #if UNITY_EDITOR 3 | using UnityEditor; 4 | #endif 5 | 6 | public class DrawNormals : MonoBehaviour 7 | { 8 | #if UNITY_EDITOR 9 | [SerializeField] 10 | private MeshFilter _meshFilter = null; 11 | [SerializeField] 12 | private bool _displayWireframe = false; 13 | [SerializeField] 14 | private NormalsDrawData _faceNormals = new NormalsDrawData(new Color32(34, 221, 221, 155), true); 15 | [SerializeField] 16 | private NormalsDrawData _vertexNormals = new NormalsDrawData(new Color32(200, 255, 195, 127), false); 17 | 18 | [System.Serializable] 19 | private class NormalsDrawData 20 | { 21 | [SerializeField] 22 | protected DrawType _draw = DrawType.Selected; 23 | protected enum DrawType { Never, Selected, Always } 24 | [SerializeField] 25 | protected float _length = 0.3f; 26 | [SerializeField] 27 | protected Color _normalColor; 28 | private Color _baseColor = new Color32(255, 133, 0, 255); 29 | private const float _baseSize = 0.0125f; 30 | 31 | 32 | public NormalsDrawData(Color normalColor, bool draw) 33 | { 34 | _normalColor = normalColor; 35 | _draw = draw ? DrawType.Selected : DrawType.Never; 36 | } 37 | 38 | public bool CanDraw(bool isSelected) 39 | { 40 | return (_draw == DrawType.Always) || (_draw == DrawType.Selected && isSelected); 41 | } 42 | 43 | public void Draw(Vector3 from, Vector3 direction) 44 | { 45 | if (Camera.current.transform.InverseTransformDirection(direction).z < 0f) 46 | { 47 | //Gizmos.color = _baseColor; 48 | //Gizmos.DrawWireSphere(from, _baseSize); 49 | 50 | Gizmos.color = _normalColor; 51 | Gizmos.DrawRay(from, direction * _length); 52 | } 53 | } 54 | } 55 | 56 | void OnDrawGizmosSelected() 57 | { 58 | EditorUtility.SetSelectedWireframeHidden(GetComponent(), !_displayWireframe); 59 | OnDrawNormals(true); 60 | } 61 | 62 | void OnDrawGizmos() 63 | { 64 | if (!Selection.Contains(this)) 65 | OnDrawNormals(false); 66 | } 67 | 68 | private void OnDrawNormals(bool isSelected) 69 | { 70 | if (_meshFilter == null) 71 | { 72 | _meshFilter = GetComponent(); 73 | if (_meshFilter == null) 74 | return; 75 | } 76 | 77 | Mesh mesh = _meshFilter.sharedMesh; 78 | 79 | //Draw Face Normals 80 | if (_faceNormals.CanDraw(isSelected)) 81 | { 82 | int[] triangles = mesh.triangles; 83 | Vector3[] vertices = mesh.vertices; 84 | 85 | for (int i = 0; i < triangles.Length; i += 3) 86 | { 87 | Vector3 v0 = transform.TransformPoint(vertices[triangles[i]]); 88 | Vector3 v1 = transform.TransformPoint(vertices[triangles[i + 1]]); 89 | Vector3 v2 = transform.TransformPoint(vertices[triangles[i + 2]]); 90 | Vector3 center = (v0 + v1 + v2) / 3; 91 | 92 | Vector3 dir = Vector3.Cross(v1 - v0, v2 - v0); 93 | dir /= dir.magnitude; 94 | 95 | _faceNormals.Draw(center, dir); 96 | } 97 | } 98 | 99 | //Draw Vertex Normals 100 | if (_vertexNormals.CanDraw(isSelected)) 101 | { 102 | Vector3[] vertices = mesh.vertices; 103 | Vector3[] normals = mesh.normals; 104 | for (int i = 0; i < vertices.Length; i++) 105 | { 106 | _vertexNormals.Draw(transform.TransformPoint(vertices[i]), transform.TransformVector(normals[i])); 107 | } 108 | } 109 | } 110 | #endif 111 | } -------------------------------------------------------------------------------- /Scripts/DrawNormals.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 37e4d50b491f7634aab141a4596986dc 3 | timeCreated: 1523374067 4 | licenseType: Free 5 | MonoImporter: 6 | externalObjects: {} 7 | serializedVersion: 2 8 | defaultReferences: [] 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Scripts/FractureObject.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class FractureObject : MonoBehaviour 6 | { 7 | 8 | public float mass = 100; 9 | public float jointBreakForce = 0; 10 | 11 | Vector3 CoM = Vector3.zero; 12 | 13 | public AudioClip onFractureSound; 14 | public GameObject onFractureVFX; 15 | 16 | public AudioClip onBreakSound; 17 | 18 | //public AudioClip onChunkCollideSound; 19 | //public GameObject onChunkCollideVFX; 20 | 21 | public float chunkCollisionVelocityToCreateVFX = 5; 22 | 23 | bool fractureInitialized = false; 24 | bool fractureActivated = false; 25 | 26 | List contactPoints; 27 | 28 | Vector3 normal; 29 | Vector3 impulse = Vector3.zero; 30 | 31 | bool hasPreservedCollidedObjectVelocity; 32 | Vector3 preservedCollidedObjectVelocity = Vector3.positiveInfinity; 33 | 34 | float force; 35 | 36 | // Start is called before the first frame update 37 | void Start() 38 | { 39 | InitFracture(); 40 | } 41 | 42 | void Update() 43 | { 44 | } 45 | 46 | public void InitFracture() 47 | { 48 | if (GetComponent()) 49 | GetComponent().mass = mass; 50 | 51 | ChunkRuntimeInfo[] chunks = GetComponentsInChildren(true); 52 | for (int i = 0; i < chunks.Length; i++) 53 | { 54 | chunks[i].onFracture += OnFracture; 55 | 56 | Rigidbody rigidbody = chunks[i].gameObject.AddComponent(); 57 | rigidbody.mass = mass / chunks.Length; 58 | 59 | JointMonitor jointMonitor = chunks[i].gameObject.AddComponent(); 60 | jointMonitor.onJointRemove += OnJointRemove; 61 | 62 | Bounds chunkBounds = chunks[i].GetComponent().bounds; 63 | 64 | Collider[] colliders = Physics.OverlapBox(chunkBounds.center, chunkBounds.extents * 1.1f, Quaternion.identity); 65 | foreach (Collider collider in colliders) 66 | { 67 | if (collider.transform.parent == transform) 68 | { 69 | Transform chunk2 = collider.transform; 70 | Rigidbody rigidbody2 = chunk2.GetComponent(); 71 | 72 | bool alreadyConnected = false; 73 | foreach (FixedJoint joint in chunk2.GetComponents()) 74 | if (joint.connectedBody == chunks[i].GetComponent()) 75 | alreadyConnected = true; 76 | 77 | Vector3 deltaPos = collider.transform.GetComponent().bounds.center - chunkBounds.center; 78 | Vector3 extents = chunkBounds.extents; 79 | if ( 80 | (deltaPos.x > -extents.x && deltaPos.x < extents.x) && 81 | (deltaPos.y > -extents.y && deltaPos.y < extents.y) && 82 | (deltaPos.z > extents.z)) 83 | { 84 | chunks[i].forwardConnections.Add(rigidbody2); 85 | } 86 | else if ( 87 | (deltaPos.x > -extents.x && deltaPos.x < extents.x) && 88 | (deltaPos.y > -extents.y && deltaPos.y < extents.y) && 89 | (deltaPos.z < -extents.z)) 90 | { 91 | chunks[i].backwardConnections.Add(rigidbody2); 92 | } 93 | else if (deltaPos.y > extents.y) 94 | { 95 | chunks[i].topConnections.Add(rigidbody2); 96 | } 97 | else if (deltaPos.y < -extents.y) 98 | { 99 | chunks[i].bottomConnections.Add(rigidbody2); 100 | } 101 | else if (deltaPos.x < -extents.x) 102 | { 103 | chunks[i].leftConnections.Add(rigidbody2); 104 | } 105 | else if (deltaPos.x > extents.x) 106 | { 107 | chunks[i].rightConnections.Add(rigidbody2); 108 | } 109 | else 110 | continue; // diagonal orientation? 111 | 112 | if (!alreadyConnected) 113 | { 114 | FixedJoint joint = chunks[i].gameObject.AddComponent(); 115 | 116 | joint.connectedBody = rigidbody2; 117 | joint.breakForce = jointBreakForce / 2; 118 | //joint.enablePreprocessing = false; 119 | } 120 | 121 | } 122 | } 123 | chunks[i].Init(); 124 | chunks[i].gameObject.SetActive(false); 125 | } 126 | 127 | fractureInitialized = true; 128 | } 129 | 130 | void ActivateFracture(Vector3 impulse) 131 | { 132 | Destroy(GetComponent()); 133 | 134 | Destroy(GetComponent()); // Remove this line if you don't have and aren't going to have ProBuilder installed 135 | 136 | Destroy(GetComponent()); 137 | Destroy(GetComponent()); 138 | Destroy(GetComponent()); 139 | foreach (Collider rootCollider in GetComponents()) 140 | Destroy(rootCollider); 141 | 142 | ChunkRuntimeInfo[] chunks = GetComponentsInChildren(true); 143 | foreach (ChunkRuntimeInfo chunk in chunks) 144 | { 145 | chunk.gameObject.SetActive(true); 146 | chunk.GetComponent().enabled = true; 147 | } 148 | 149 | 150 | foreach (ContactPoint contact in contactPoints) 151 | { 152 | Collider[] colliders = Physics.OverlapSphere(contact.point, 0.3f); 153 | if (colliders.Length == 0) 154 | continue; 155 | 156 | foreach (Collider collider in colliders) 157 | { 158 | if (collider.transform.parent == transform) 159 | { 160 | collider.GetComponent().AddForceAtPosition(impulse, contact.point); 161 | } 162 | } 163 | } 164 | 165 | foreach (ChunkRuntimeInfo chunk in chunks) 166 | { 167 | chunk.gameObject.layer = LayerMask.NameToLayer("Fracture"); 168 | } 169 | fractureActivated = true; 170 | } 171 | 172 | private void OnCollisionEnter(Collision collision) 173 | { 174 | List contacts = new List(); 175 | collision.GetContacts(contacts); 176 | 177 | Vector3 l_normal = Vector3.zero; 178 | foreach (ContactPoint point in contacts) 179 | l_normal += point.normal; 180 | 181 | normal = l_normal; 182 | 183 | FractureObject otherObject = collision.gameObject.GetComponent(); 184 | if (otherObject) 185 | { 186 | impulse = otherObject.mass * collision.relativeVelocity; 187 | } 188 | else if (collision.rigidbody && GetComponent()) 189 | { 190 | impulse = collision.rigidbody.mass * collision.relativeVelocity; 191 | preservedCollidedObjectVelocity = collision.rigidbody.velocity; 192 | hasPreservedCollidedObjectVelocity = true; 193 | } 194 | else 195 | { 196 | impulse = mass * collision.relativeVelocity; 197 | } 198 | 199 | force = (impulse * Vector3.Dot(impulse.normalized, normal.normalized)).magnitude; 200 | } 201 | 202 | private void OnCollisionStay(Collision collision) 203 | { 204 | if (force >= jointBreakForce) 205 | { 206 | contactPoints = new List(); 207 | collision.GetContacts(contactPoints); 208 | ActivateFracture(impulse); 209 | 210 | if (onBreakSound) 211 | if(!GetComponent()) 212 | AudioSource.PlayClipAtPoint(onBreakSound, transform.position); 213 | else 214 | GetComponent().PlayOneShot(onBreakSound); 215 | 216 | if (collision.rigidbody && hasPreservedCollidedObjectVelocity) 217 | collision.rigidbody.velocity = preservedCollidedObjectVelocity; 218 | } 219 | } 220 | 221 | void OnFracture(ChunkRuntimeInfo chunk) 222 | { 223 | if (onFractureVFX) 224 | Instantiate(onFractureVFX, chunk.transform.position, Quaternion.identity); 225 | 226 | if (onFractureSound) 227 | AudioSource.PlayClipAtPoint(onFractureSound, chunk.transform.position); 228 | } 229 | 230 | void OnJointRemove(Rigidbody rigidbody) 231 | { 232 | foreach (ChunkRuntimeInfo chunk in GetComponentsInChildren()) 233 | chunk.OnJointRemove(rigidbody); 234 | } 235 | } -------------------------------------------------------------------------------- /Scripts/FractureObject.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 20f971965d0daab4d8a833cc3ee227be 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/JointMonitor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.Events; 5 | 6 | public class JointMonitor : MonoBehaviour 7 | { 8 | [Serializable] 9 | public class JointRemovedEvent : UnityEvent { } 10 | 11 | public UnityAction onJointRemove; 12 | 13 | [SerializeField] 14 | JointRemovedEvent m_RemovedEvent = new JointRemovedEvent(); 15 | 16 | List m_rigidbodies; 17 | List m_MonitoredJoints; 18 | 19 | void Start() 20 | { 21 | m_MonitoredJoints = new List(1); 22 | GetComponents(m_MonitoredJoints); 23 | m_rigidbodies = new List(m_MonitoredJoints.Count); 24 | } 25 | 26 | void FixedUpdate() 27 | { 28 | /*for (var i = 0; i < m_MonitoredJoints.Count; ++i) 29 | { 30 | var joint = m_MonitoredJoints[i]; 31 | if (joint) 32 | { 33 | if (!m_rigidbodies.Contains(joint.connectedBody)) 34 | m_rigidbodies.Add(joint.connectedBody); 35 | 36 | continue; 37 | } 38 | 39 | onJointRemove.Invoke(m_rigidbodies[i]); 40 | m_RemovedEvent.Invoke(m_rigidbodies[i]); 41 | m_MonitoredJoints.RemoveAt(i); 42 | }*/ 43 | } 44 | } -------------------------------------------------------------------------------- /Scripts/JointMonitor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bc3a6cb4a941cde4d924111708f763d0 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/RotationBounds.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public struct RotationBounds 6 | { 7 | public Bounds baseBounds; 8 | 9 | public Vector3 rotation; 10 | 11 | public Vector3 RotatedExtents 12 | { 13 | get 14 | { 15 | return Quaternion.Euler(rotation) * (baseBounds.extents - baseBounds.center) + baseBounds.center; 16 | } 17 | } 18 | 19 | public Vector3[] RotatedPoints 20 | { 21 | get 22 | { 23 | Vector3 extents = baseBounds.extents; 24 | Vector3 center = baseBounds.center; 25 | Vector3[] originPoints = new Vector3[] 26 | { 27 | new Vector3(center.x + extents.x, center.y + extents.y, center.z + extents.z), // right-up-front 28 | new Vector3(center.x - extents.x, center.y + extents.y, center.z + extents.z), // left-up-front 29 | new Vector3(center.x + extents.x, center.y - extents.y, center.z + extents.z), // right-down-front 30 | new Vector3(center.x - extents.x, center.y - extents.y, center.z + extents.z), // left-down-front 31 | new Vector3(center.x + extents.x, center.y + extents.y, center.z - extents.z), // right-up-back 32 | new Vector3(center.x - extents.x, center.y + extents.y, center.z - extents.z), // left-up-back 33 | new Vector3(center.x + extents.x, center.y - extents.y, center.z - extents.z), // right-down-back 34 | new Vector3(center.x - extents.x, center.y - extents.y, center.z - extents.z), // left-down-back 35 | }; 36 | 37 | for (int i = 0; i < originPoints.Length; i++) 38 | { 39 | originPoints[i] = RotatePointAroundPivot(originPoints[i], center, rotation); 40 | } 41 | return originPoints; 42 | } 43 | } 44 | 45 | 46 | 47 | 48 | public Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles) 49 | { 50 | Vector3 dir = point - pivot; 51 | dir = Quaternion.Euler(angles) * dir; 52 | point = dir + pivot; 53 | return point; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /Scripts/RotationBounds.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e2480f7d1cc272349b896606446c853b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/VHACD.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.InteropServices; 5 | using UnityEngine; 6 | 7 | namespace MeshProcess 8 | { 9 | public class VHACD : MonoBehaviour 10 | { 11 | [System.Serializable] 12 | public unsafe struct Parameters 13 | { 14 | public void Init() 15 | { 16 | m_resolution = 100000; 17 | m_concavity = 0.001; 18 | m_planeDownsampling = 4; 19 | m_convexhullDownsampling = 4; 20 | m_alpha = 0.05; 21 | m_beta = 0.05; 22 | m_pca = 0; 23 | m_mode = 0; // 0: voxel-based (recommended), 1: tetrahedron-based 24 | m_maxNumVerticesPerCH = 64; 25 | m_minVolumePerCH = 0.0001; 26 | m_callback = null; 27 | m_logger = null; 28 | m_convexhullApproximation = 1; 29 | m_oclAcceleration = 0; 30 | m_maxConvexHulls = 1024; 31 | m_projectHullVertices = true; // This will project the output convex hull vertices onto the original source mesh to increase the floating point accuracy of the results 32 | } 33 | 34 | [Tooltip("maximum concavity")] 35 | [Range(0, 1)] 36 | public double m_concavity; 37 | 38 | [Tooltip("controls the bias toward clipping along symmetry planes")] 39 | [Range(0, 1)] 40 | public double m_alpha; 41 | 42 | [Tooltip("controls the bias toward clipping along revolution axes")] 43 | [Range(0, 1)] 44 | public double m_beta; 45 | 46 | [Tooltip("controls the adaptive sampling of the generated convex-hulls")] 47 | [Range(0, 0.01f)] 48 | public double m_minVolumePerCH; 49 | 50 | public void* m_callback; 51 | public void* m_logger; 52 | 53 | [Tooltip("maximum number of voxels generated during the voxelization stage")] 54 | [Range(10000, 64000000)] 55 | public uint m_resolution; 56 | 57 | [Tooltip("controls the maximum number of triangles per convex-hull")] 58 | [Range(4, 1024)] 59 | public uint m_maxNumVerticesPerCH; 60 | 61 | [Tooltip("controls the granularity of the search for the \"best\" clipping plane")] 62 | [Range(1, 16)] 63 | public uint m_planeDownsampling; 64 | 65 | [Tooltip("controls the precision of the convex-hull generation process during the clipping plane selection stage")] 66 | [Range(1, 16)] 67 | public uint m_convexhullDownsampling; 68 | 69 | [Tooltip("enable/disable normalizing the mesh before applying the convex decomposition")] 70 | [Range(0, 1)] 71 | public uint m_pca; 72 | 73 | [Tooltip("0: voxel-based (recommended), 1: tetrahedron-based")] 74 | [Range(0, 1)] 75 | public uint m_mode; 76 | 77 | [Range(0, 1)] 78 | public uint m_convexhullApproximation; 79 | 80 | [Range(0, 1)] 81 | public uint m_oclAcceleration; 82 | 83 | public uint m_maxConvexHulls; 84 | 85 | [Tooltip("This will project the output convex hull vertices onto the original source mesh to increase the floating point accuracy of the results")] 86 | public bool m_projectHullVertices; 87 | }; 88 | 89 | unsafe struct ConvexHull 90 | { 91 | public double* m_points; 92 | public uint* m_triangles; 93 | public uint m_nPoints; 94 | public uint m_nTriangles; 95 | public double m_volume; 96 | public fixed double m_center[3]; 97 | }; 98 | 99 | [DllImport("libvhacd")] static extern unsafe void* CreateVHACD(); 100 | 101 | [DllImport("libvhacd")] static extern unsafe void DestroyVHACD(void* pVHACD); 102 | 103 | [DllImport("libvhacd")] 104 | static extern unsafe bool ComputeFloat( 105 | void* pVHACD, 106 | float* points, 107 | uint countPoints, 108 | uint* triangles, 109 | uint countTriangles, 110 | Parameters* parameters); 111 | 112 | [DllImport("libvhacd")] 113 | static extern unsafe bool ComputeDouble( 114 | void* pVHACD, 115 | double* points, 116 | uint countPoints, 117 | uint* triangles, 118 | uint countTriangles, 119 | Parameters* parameters); 120 | 121 | [DllImport("libvhacd")] static extern unsafe uint GetNConvexHulls(void* pVHACD); 122 | 123 | [DllImport("libvhacd")] 124 | static extern unsafe void GetConvexHull( 125 | void* pVHACD, 126 | uint index, 127 | ConvexHull* ch); 128 | 129 | public Parameters m_parameters; 130 | 131 | public VHACD() { m_parameters.Init(); } 132 | 133 | [ContextMenu("Generate Convex Meshes")] 134 | public unsafe List GenerateConvexMeshes(Mesh mesh = null) 135 | { 136 | if(mesh == null) 137 | mesh = GetComponent().sharedMesh; 138 | var vhacd = CreateVHACD(); 139 | var parameters = m_parameters; 140 | 141 | var verts = mesh.vertices; 142 | var tris = mesh.triangles; 143 | fixed (Vector3* pVerts = verts) 144 | fixed (int* pTris = tris) 145 | { 146 | ComputeFloat( 147 | vhacd, 148 | (float*)pVerts, (uint)verts.Length, 149 | (uint*)pTris, (uint)tris.Length / 3, 150 | ¶meters); 151 | } 152 | 153 | var numHulls = GetNConvexHulls(vhacd); 154 | List convexMesh = new List((int)numHulls); 155 | foreach (var index in Enumerable.Range(0, (int)numHulls)) 156 | { 157 | ConvexHull hull; 158 | GetConvexHull(vhacd, (uint)index, &hull); 159 | 160 | var hullMesh = new Mesh(); 161 | var hullVerts = new Vector3[hull.m_nPoints]; 162 | fixed (Vector3* pHullVerts = hullVerts) 163 | { 164 | var pComponents = hull.m_points; 165 | var pVerts = pHullVerts; 166 | 167 | for (var pointCount = hull.m_nPoints; pointCount != 0; --pointCount) 168 | { 169 | pVerts->x = (float)pComponents[0]; 170 | pVerts->y = (float)pComponents[1]; 171 | pVerts->z = (float)pComponents[2]; 172 | 173 | pVerts += 1; 174 | pComponents += 3; 175 | } 176 | } 177 | 178 | hullMesh.SetVertices(hullVerts); 179 | 180 | var indices = new int[hull.m_nTriangles * 3]; 181 | Marshal.Copy((System.IntPtr)hull.m_triangles, indices, 0, indices.Length); 182 | hullMesh.SetTriangles(indices, 0); 183 | 184 | 185 | convexMesh.Add(hullMesh); 186 | } 187 | return convexMesh; 188 | } 189 | } 190 | } 191 | -------------------------------------------------------------------------------- /Scripts/VHACD.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7dd8cf483366b4d98864b7d7c9648e80 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /VHACD Documentation/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{kt, kts}] 2 | insert_final_newline = true 3 | indent_style = space 4 | indent_size = 4 5 | trim_trailing_whitespace = true 6 | 7 | # because of feature in intellij, where java and kotlin imports end up as last items 8 | # https://github.com/pinterest/ktlint/issues/527 9 | disabled_rules = import-ordering 10 | -------------------------------------------------------------------------------- /VHACD Documentation/.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Description 4 | 5 | 6 | 7 | ## Motivation and context 8 | 9 | Link to Jira ticket: 10 | 11 | 12 | 13 | 14 | ## How has this been tested? 15 | 16 | 17 | 18 | 19 | ## External documentation and screenshots (if appropriate): 20 | 21 | ## Types of changes 22 | 23 | - [ ] Bug fix (non-breaking change which fixes an issue) 24 | - [ ] New feature (non-breaking change which adds functionality) 25 | - [ ] Breaking change in service (fix or feature that would cause existing functionality to change) 26 | - [ ] Breaking change in local development environment (fix or feature that would cause local setup changes, update also readme.md) 27 | 28 | ## Checklist: 29 | 30 | - [ ] My code follows the code style of this project. 31 | - [ ] My change requires a change to the documentation. 32 | - [ ] I have updated the documentation accordingly. 33 | - [ ] I have added tests to cover my changes. 34 | - [ ] My change requires change in the monitoring. 35 | - [ ] I have updated the monitoring accordingly. 36 | -------------------------------------------------------------------------------- /VHACD Documentation/.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 4 | # 5 | /[Ll]ibrary/ 6 | /[Tt]emp/ 7 | /[Oo]bj/ 8 | /[Bb]uild/ 9 | /[Bb]uilds/ 10 | /[Ll]ogs/ 11 | /[Uu]ser[Ss]ettings/ 12 | 13 | # MemoryCaptures can get excessive in size. 14 | # They also could contain extremely sensitive data 15 | /[Mm]emoryCaptures/ 16 | 17 | # Uncomment this line if you wish to ignore the asset store tools plugin 18 | # /[Aa]ssets/AssetStoreTools* 19 | 20 | # Autogenerated Jetbrains Rider plugin 21 | /[Aa]ssets/Plugins/Editor/JetBrains* 22 | 23 | # Visual Studio cache directory 24 | .vs/ 25 | 26 | .DS_Store 27 | 28 | # Gradle cache directory 29 | .gradle/ 30 | 31 | # Autogenerated VS/MD/Consulo solution and project files 32 | ExportedObj/ 33 | .consulo/ 34 | *.csproj 35 | *.unityproj 36 | *.sln 37 | *.suo 38 | *.tmp 39 | *.user 40 | *.userprefs 41 | *.pidb 42 | *.booproj 43 | *.svd 44 | *.pdb 45 | *.mdb 46 | *.opendb 47 | *.VC.db 48 | 49 | # Unity3D generated meta files 50 | *.pidb.meta 51 | *.pdb.meta 52 | *.mdb.meta 53 | 54 | # Unity3D generated file on crash reports 55 | sysinfo.txt 56 | 57 | # Builds 58 | *.apk 59 | *.aab 60 | *.unitypackage 61 | 62 | # Crashlytics generated file 63 | crashlytics-build.properties 64 | 65 | # Packed Addressables 66 | /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* 67 | 68 | # Temporary auto-generated Android Assets 69 | /[Aa]ssets/[Ss]treamingAssets/aa.meta 70 | /[Aa]ssets/[Ss]treamingAssets/aa/* 71 | 72 | .DS_Store 73 | 74 | #Example URDF folder 75 | TestModel/ 76 | 77 | # Build and Deploy 78 | deploy/* 79 | .DS_Store 80 | .DS_Store 81 | -------------------------------------------------------------------------------- /VHACD Documentation/LICENSE.MD: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2011, Khaled Mamou (kmamou at gmail dot com) 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /VHACD Documentation/LICENSE.MD.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 69b853fc8138a3f468ca5e7798442656 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /VHACD Documentation/README.md: -------------------------------------------------------------------------------- 1 | # The V-HACD library decomposes a 3D surface into a set of "near" convex parts. 2 | 3 | ![Approximate convex decomposition of "Camel"](https://github.com/kmammou/v-hacd/raw/master/doc/acd.png) 4 | 5 | # Why do we need approximate convex decomposition? 6 | 7 | Collision detection is essential for [realistic physical interactions](https://www.youtube.com/watch?v=oyjE5L4-1lQ) in video games and computer animation. In order to ensure real-time interactivity with the player/user, video game and 3D modeling software developers usually approximate the 3D models composing the scene (e.g. animated characters, static objects...) by a set of simple convex shapes such as ellipsoids, capsules or convex-hulls. In practice, these simple shapes provide poor approximations for concave surfaces and generate false collision detection. 8 | 9 | ![Convex-hull vs. ACD](https://raw.githubusercontent.com/kmammou/v-hacd/master/doc/chvsacd.png) 10 | 11 | A second approach consists in computing an exact convex decomposition of a surface S, which consists in partitioning it into a minimal set of convex sub-surfaces. Exact convex decomposition algorithms are NP-hard and non-practical since they produce a high number of clusters. To overcome these limitations, the exact convexity constraint is relaxed and an approximate convex decomposition of S is instead computed. Here, the goal is to determine a partition of the mesh triangles with a minimal number of clusters, while ensuring that each cluster has a concavity lower than a user defined threshold. 12 | 13 | ![ACD vs. ECD](https://raw.githubusercontent.com/kmammou/v-hacd/master/doc/ecdvsacd.png) 14 | 15 | 16 | # Parameters 17 | | Parameter name | Description | Default value | Range | 18 | | ------------- | ------------- | ------------- | ---- | 19 | | resolution | maximum number of voxels generated during the voxelization stage | 100,000 | 10,000-64,000,000 | 20 | | depth | maximum number of clipping stages. During each split stage, all the model parts (with a concavity higher than the user defined threshold) are clipped according the "best" clipping plane | 20 | 1-32 | 21 | | concavity | maximum concavity | 0.0025 | 0.0-1.0 | 22 | | planeDownsampling | controls the granularity of the search for the "best" clipping plane | 4 | 1-16 | 23 | | convexhullDownsampling | controls the precision of the convex-hull generation process during the clipping plane selection stage | 4 | 1-16 | 24 | | alpha | controls the bias toward clipping along symmetry planes | 0.05 | 0.0-1.0 | 25 | | beta | controls the bias toward clipping along revolution axes | 0.05 | 0.0-1.0 | 26 | | gamma | maximum allowed concavity during the merge stage | 0.00125 | 0.0-1.0 | 27 | | pca | enable/disable normalizing the mesh before applying the convex decomposition | 0 | 0-1 | 28 | | mode | 0: voxel-based approximate convex decomposition, 1: tetrahedron-based approximate convex decomposition | 0 | 0-1 | 29 | | maxNumVerticesPerCH | controls the maximum number of triangles per convex-hull | 64 | 4-1024 | 30 | | minVolumePerCH | controls the adaptive sampling of the generated convex-hulls | 0.0001 | 0.0-0.01 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /VHACD Documentation/README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 022e2bf9bcd6a7b43a75571e48ae13c3 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /VHACD Documentation/Third Party Notices.md: -------------------------------------------------------------------------------- 1 | Component name: jasonmeisel/v-hacd-unity
2 | Copyright 2017-2020 Jason Meisel
3 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
4 | 5 | http://www.apache.org/licenses/LICENSE-2.0
6 | 7 | Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -------------------------------------------------------------------------------- /VHACD Documentation/Third Party Notices.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 20a80a5bd34d6ee41ad722e3779333c9 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------