diff --git a/Asset Sources/PBR Materials.blend b/Asset Sources/PBR Materials.blend new file mode 100644 index 000000000..cbe7a475b --- /dev/null +++ b/Asset Sources/PBR Materials.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c88c4c5380c3553182a545e04ffcc0776a54f7cbde4fa80de95f5e569b931de +size 359499 diff --git a/Asset Sources/blender_assets.cats.txt b/Asset Sources/blender_assets.cats.txt new file mode 100644 index 000000000..7fc29fe08 --- /dev/null +++ b/Asset Sources/blender_assets.cats.txt @@ -0,0 +1,10 @@ +# This is an Asset Catalog Definition file for Blender. +# +# Empty lines and lines starting with `#` will be ignored. +# The first non-ignored line should be the version indicator. +# Other lines are of the format "UUID:catalog/path/for/assets:simple catalog name" + +VERSION 1 + +2c70f9d2-3a69-4004-8f42-4712b3e6c439:Aetheria:Aetheria +a71be0dc-105e-4c66-8ff3-acb25522e9cd:Aetheria/PBR:Aetheria-PBR diff --git a/Assets/Materials/PBR.meta b/Assets/Materials/PBR.meta new file mode 100644 index 000000000..a534b0d5a --- /dev/null +++ b/Assets/Materials/PBR.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b293e272c024dc999b28fe49925e1d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre.meta b/Assets/Materials/PBR/Carbon_Fibre.meta new file mode 100644 index 000000000..c4c6f51e4 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 636104c9ca48436da05c3f6003fd3eae +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat new file mode 100644 index 000000000..b7f244b60 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Carbon_Fibre + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 5723eb533deb4d73a2b015bb75b523b4, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 32fc9d1c4304495da5350f8a8b52e14b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 15a9bba7a82740718ad2d3913f7297af, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat.meta new file mode 100644 index 000000000..b0f1c3097 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e5a779dec614c80a12925ba063bb99f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg new file mode 100644 index 000000000..4e3c4a374 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:327e42b2dfc859efd9b4f122cf1adbdb611c75e80dd3cb8a18bc69e83eef9585 +size 566952 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg.meta new file mode 100644 index 000000000..614f43088 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 32fc9d1c4304495da5350f8a8b52e14b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png new file mode 100644 index 000000000..31131f1a7 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd50d0187fdf8c05eba5ef982da5217c6adf9f03720a2c8041ef4bebd5a2658d +size 1944562 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png.meta new file mode 100644 index 000000000..19a8fae68 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 15a9bba7a82740718ad2d3913f7297af +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg new file mode 100644 index 000000000..c0e1c9aa8 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e76a53fce87086a2346756ef1ef25f6db6153bda3433611a192ac71b32b2ebdc +size 1356999 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg.meta new file mode 100644 index 000000000..072cf13c3 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 5723eb533deb4d73a2b015bb75b523b4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg new file mode 100644 index 000000000..fd7a1f7f1 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8005027078e974df48351781ce90885bd6325ac63d0a16b41938fca8fd35a634 +size 1189710 diff --git a/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg.meta b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg.meta new file mode 100644 index 000000000..503d1d154 --- /dev/null +++ b/Assets/Materials/PBR/Carbon_Fibre/Carbon_Fibre_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: b8e5cd91353441ebb42296a830fef845 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark.meta b/Assets/Materials/PBR/Gunmetal_Dark.meta new file mode 100644 index 000000000..7680bfe76 --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22e47659e8e14482b3466711751b01b8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat new file mode 100644 index 000000000..150f0f72c --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Gunmetal_Dark + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: dc71e34b4a1f4de7aa826d18b67b5852, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 1ed06708491744fe944217d19e450157, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 31e7d642ff8a49a28390c82626c4b6b9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat.meta new file mode 100644 index 000000000..24a52eab3 --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32199fedf9ce473191d8a734a74f3d5f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg new file mode 100644 index 000000000..4a0118922 --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28845bf0cc6a1edeed7e9f10f5db4034cae4ba7377bc53633f413de0dbcae5b7 +size 1451112 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg.meta new file mode 100644 index 000000000..848791f40 --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 1ed06708491744fe944217d19e450157 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png new file mode 100644 index 000000000..f3cca5c7f --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c101b3b9d7b3ff0636b6539cc65908dc5cac76e31e951a6a375918bb681076c +size 2899231 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png.meta new file mode 100644 index 000000000..598a3c189 --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 31e7d642ff8a49a28390c82626c4b6b9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg new file mode 100644 index 000000000..afd0fe3a6 --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b65d6b9091747bd81ee58adedcb6209d8ee21b2bde9298d7216989ada85ef622 +size 16545 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg.meta new file mode 100644 index 000000000..2eb33ad5e --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Metalness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 51e45f19716b43128ce5d2aac5b5aed4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg new file mode 100644 index 000000000..37f403c32 --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7b4437dca1fe52addbb21e145d3ccc43e8c1780b7930cc9dad1e2b73cb7455b +size 2260227 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg.meta new file mode 100644 index 000000000..e3fed3ebc --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: dc71e34b4a1f4de7aa826d18b67b5852 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg new file mode 100644 index 000000000..1e6edb81f --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f466bcf997694d56cb7bc93526a881a195e2ee63b1e0c8a19da88289596b9f4 +size 1228992 diff --git a/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg.meta b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg.meta new file mode 100644 index 000000000..d09d43872 --- /dev/null +++ b/Assets/Materials/PBR/Gunmetal_Dark/Gunmetal_Dark_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 5677a8acff8f49358627841b9be8e2dd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched.meta b/Assets/Materials/PBR/Metal_Scratched.meta new file mode 100644 index 000000000..a53ff5c65 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e9d00e0b2454cc08632c972d2ee499b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat new file mode 100644 index 000000000..fe6463397 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Metal_Scratched + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 3a10044baac4438f9fc0930783eccdf7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 5a9cee903a2d48718aaf6b224126f279, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 8b24d7ea11c341408a146fa39f59b7b0, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat.meta new file mode 100644 index 000000000..1d5895d52 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5874fba9e2242c79aea6b21ddb63af0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg new file mode 100644 index 000000000..cb09761f3 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:934e3f0e21b71cb534442f398b287f70158ba7cc3e11ab829f873ddce9cea7fb +size 4314757 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg.meta new file mode 100644 index 000000000..7b34b1c8f --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 5a9cee903a2d48718aaf6b224126f279 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png new file mode 100644 index 000000000..7b1578437 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ce0400bc23c44f54aa018b195472b99b7c7007bf93166017bfaf05d68bca38d +size 4647897 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png.meta new file mode 100644 index 000000000..b6b4c4b0e --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 8b24d7ea11c341408a146fa39f59b7b0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg new file mode 100644 index 000000000..687e06af5 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a4f1124670270e69c5fae2537f2493ab55d6f6264310fa344414eb75026cfde +size 564910 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg.meta new file mode 100644 index 000000000..697296e8c --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Metalness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 2eace05436f24d15944266ed3b841f21 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg new file mode 100644 index 000000000..e772289b2 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb3d7953fb7867f7948b5d7a0dff6044f92a6bba56e6f4a48ad30a94c6096d98 +size 5038957 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg.meta new file mode 100644 index 000000000..932d93b51 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 3a10044baac4438f9fc0930783eccdf7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg new file mode 100644 index 000000000..9dab37dc6 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fbd2281a995ab1185715dae4d7a657c10b338dfcb57a2f2245eac530d5bd7ed +size 2140434 diff --git a/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg.meta b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg.meta new file mode 100644 index 000000000..393e3bd91 --- /dev/null +++ b/Assets/Materials/PBR/Metal_Scratched/Metal_Scratched_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 986a2475c1e248d7be5208d88ee17a15 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light.meta b/Assets/Materials/PBR/Paint_Clean_Light.meta new file mode 100644 index 000000000..c72ff31ca --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c2497e59922c471b935a06c396acb73e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat new file mode 100644 index 000000000..f76052e2d --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Paint_Clean_Light + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: f548cd63b5734e04a284018fefc81b30, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 2c82a94e33b64fd481cbfeb7df9516bd, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: ad8a50784ce04f5d9b3bab2115eeea34, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat.meta new file mode 100644 index 000000000..519f702b0 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 132cb2f99d9f42fe9b05db1c0d653897 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg new file mode 100644 index 000000000..222b441ba --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e966978debc85c05e1e4834e1ac8406d863f9267c396d1580ec2d94fdce9738 +size 638778 diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg.meta new file mode 100644 index 000000000..029f71505 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 2c82a94e33b64fd481cbfeb7df9516bd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png new file mode 100644 index 000000000..a61363526 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:412547b698a0968ba6f7c4f31e888bd88afb9f24e049f5811ca51c7490510998 +size 3692433 diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png.meta new file mode 100644 index 000000000..41ba9a3be --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: ad8a50784ce04f5d9b3bab2115eeea34 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg new file mode 100644 index 000000000..0c74319d3 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70e36c645d2d6bc9ddc79b86d1275147c52947613fed8ed75dc6aec5d9282187 +size 3220864 diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg.meta new file mode 100644 index 000000000..d0c0e745e --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: f548cd63b5734e04a284018fefc81b30 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg new file mode 100644 index 000000000..499f33718 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44a1a3eb43252db6c242cd3e777a2e41819e872058e032e3cf8285cc578f35bb +size 2011305 diff --git a/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg.meta b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg.meta new file mode 100644 index 000000000..117171aad --- /dev/null +++ b/Assets/Materials/PBR/Paint_Clean_Light/Paint_Clean_Light_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 21721bf50f1f407d8e0f2b5e06bf4ef5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark.meta b/Assets/Materials/PBR/Paint_Worn_Dark.meta new file mode 100644 index 000000000..f6af35502 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22c55f60ad784e7495f2ddbae1e2799e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat new file mode 100644 index 000000000..11deee75d --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Paint_Worn_Dark + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP _OCCLUSIONMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: b37cce6dfe8a45d0a7ba4e9a844c68b9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 8f9bc4377cc4451aae71a877219e700f, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: b5158bc316ef42bead7fa70b7bc08a7a, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: e8713adbe3e74ac4a4f431581bb31a4b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat.meta new file mode 100644 index 000000000..c70f30afd --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e081b7d98e6d424fa42a6876a8e0bab3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg new file mode 100644 index 000000000..7c4f50094 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2e4af5867078208c00332af23bded29a4ac325b040f5980c2730ff8e551bc9d +size 2924087 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg.meta new file mode 100644 index 000000000..e3c6ca27e --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_AO.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: e8713adbe3e74ac4a4f431581bb31a4b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg new file mode 100644 index 000000000..de88b6108 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c57d484d39db6704fbcf32184f73472e6a78cfc63027422426fa170d87bdfc4a +size 5177435 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg.meta new file mode 100644 index 000000000..5cdcca076 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 8f9bc4377cc4451aae71a877219e700f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png new file mode 100644 index 000000000..ca9d86708 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98cc6442c3952acba81f86ae0210e9e0b171522dec1a80d9177eb942dd295d73 +size 5117887 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png.meta new file mode 100644 index 000000000..28b873752 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: b5158bc316ef42bead7fa70b7bc08a7a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg new file mode 100644 index 000000000..90096ce14 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3cdb47576c1085bea1bd3e90d055c7f45b66bda53d3ad03f825e5dc9665b93f +size 1073864 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg.meta new file mode 100644 index 000000000..fb46b8a1a --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Metalness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: c6d0917aab0d4442ad102a6088628f53 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg new file mode 100644 index 000000000..9c151b688 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60e7d12d4eefed9f9c763b3095b6db35542ee00c7f076b72bb2718a3ccd649c9 +size 7526970 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg.meta new file mode 100644 index 000000000..bcfcf9af3 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: b37cce6dfe8a45d0a7ba4e9a844c68b9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg new file mode 100644 index 000000000..918bb48c5 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:648bf332066975dad0fc618eda260571e8077a7d418587b8b55a68c7da797541 +size 2083327 diff --git a/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg.meta new file mode 100644 index 000000000..3607f105d --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Dark/Paint_Worn_Dark_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 46fe06d220b044d1a6bb1a716c6e8705 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light.meta b/Assets/Materials/PBR/Paint_Worn_Light.meta new file mode 100644 index 000000000..34d26b097 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b660a03d95714359ac68aa01a52064b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat new file mode 100644 index 000000000..9f6a4ff51 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Paint_Worn_Light + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP _OCCLUSIONMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 4ce3c2cc69304068b4a2ddc833b748b9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 73568a0c02bd4184bcb398c9e3dd7ab6, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: d9cd336372c244e398532512e3f8f3be, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 73e117729c3447e5aa0eb1a30fad7c75, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat.meta new file mode 100644 index 000000000..1441ced17 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5eb890ad19d44af98f2710f3af280e3c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg new file mode 100644 index 000000000..a9989d282 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2560f1aa453ffd2f4374c9ba4d184e1c43456726d8971460062515acef83b76 +size 2764255 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg.meta new file mode 100644 index 000000000..be48781f6 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_AO.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 73e117729c3447e5aa0eb1a30fad7c75 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg new file mode 100644 index 000000000..d05a21ab2 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:401b7ee4394595110564bcb12a40c0b87ea50acfc3632b7e7237e2d0165d1ded +size 4364255 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg.meta new file mode 100644 index 000000000..cc5b0e17b --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 73568a0c02bd4184bcb398c9e3dd7ab6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png new file mode 100644 index 000000000..08375c3a3 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c59489103f8a5ef438f0f74484cdf5af90b1ee2985a180d690772d1325816bf +size 6990606 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png.meta new file mode 100644 index 000000000..13b040de5 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: d9cd336372c244e398532512e3f8f3be +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg new file mode 100644 index 000000000..10a0cd502 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8be2891eeff9e521ac8d672edb106830e878ee0b73852a5763c803a8088014f2 +size 2705735 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg.meta new file mode 100644 index 000000000..402c2f3f3 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Metalness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 464aecd85593406aa2426215e07b988a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg new file mode 100644 index 000000000..549164ad2 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ae51f315549a7d63c7f0290e9f6d35dfcd1bc42df422579ee407c30692599a +size 6857447 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg.meta new file mode 100644 index 000000000..a9aa1c988 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 4ce3c2cc69304068b4a2ddc833b748b9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg new file mode 100644 index 000000000..d0ab06978 --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1207c0c4716229b36290416e4af37ccaf5351a65c8d93237a7802a95f45dfbcf +size 1929057 diff --git a/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg.meta b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg.meta new file mode 100644 index 000000000..2b1eeabdb --- /dev/null +++ b/Assets/Materials/PBR/Paint_Worn_Light/Paint_Worn_Light_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 58cb097056b5431e819ca45954ee3b47 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte.meta b/Assets/Materials/PBR/Plastic_Matte.meta new file mode 100644 index 000000000..91fd17d97 --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1126ae7b5bcb4d6b8403e31233638b8d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat new file mode 100644 index 000000000..f5845363d --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Plastic_Matte + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: d9e9439b6e9f43ed9c47015cafdcd5d3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 053c9b821bf649bab9c8f7b234803809, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: f405c1ca89914831a4366ac1e4d850ee, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat.meta new file mode 100644 index 000000000..f92b559c4 --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 636667df941046e79d2417c6b062d995 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg new file mode 100644 index 000000000..00c2a444a --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cb3a446755c2f868957807195d1e51ff989384da7878e8c0d9f93f391a5b755 +size 905715 diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg.meta new file mode 100644 index 000000000..e0947dee4 --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 053c9b821bf649bab9c8f7b234803809 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png new file mode 100644 index 000000000..45e075a5b --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:811b05a5b78048c711f5129d14073bfa1983443553a2b75453f15e46ad6da998 +size 3782071 diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png.meta new file mode 100644 index 000000000..c641103a4 --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: f405c1ca89914831a4366ac1e4d850ee +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg new file mode 100644 index 000000000..12b6ad1ff --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e177082ed5027b4bb533e39b0556c7f3ca4701d6ffa3761910dff678d7f43d07 +size 9096346 diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg.meta new file mode 100644 index 000000000..357ce2800 --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: d9e9439b6e9f43ed9c47015cafdcd5d3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg new file mode 100644 index 000000000..c1eb5f150 --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:629c695383835080794b90174ae19a422cb7234870752642afa81f36a28cd9e7 +size 2095946 diff --git a/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg.meta b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg.meta new file mode 100644 index 000000000..575bf2428 --- /dev/null +++ b/Assets/Materials/PBR/Plastic_Matte/Plastic_Matte_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 142ed10762d242a9a4ecf63ee0e38b71 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels.meta b/Assets/Materials/PBR/Plates_Panels.meta new file mode 100644 index 000000000..99eb09f70 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 086928e6583747e1b14c6767ced082b4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat b/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat new file mode 100644 index 000000000..babe13ca0 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Plates_Panels + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 8bc10cfce8a64defaf9f67d156003f09, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 2195885db9e846999fd10aa7f5c629b1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: d91bff887b764847a484d0a9bedce9e9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat.meta new file mode 100644 index 000000000..a8a703cf0 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c508beb10bbe4c7f88fc9a7c003e51d5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg new file mode 100644 index 000000000..9945f16ae --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e69514467f58898537ecc6b3c47e618537406a00b7eb24099d3835ca4ae4c9a +size 2132182 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg.meta new file mode 100644 index 000000000..960e6e0e3 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 2195885db9e846999fd10aa7f5c629b1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png new file mode 100644 index 000000000..de028ea73 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b5ea65058b4792f97c7f9affd89930342b2306ab5dbd21f930ef153d4f4acf1 +size 3414650 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png.meta new file mode 100644 index 000000000..6b036cb95 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: d91bff887b764847a484d0a9bedce9e9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg new file mode 100644 index 000000000..9edfab941 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:736a312c106a791672e1115df51ba0a08be7927f6cfc4aff97fcfb60311e002f +size 171958 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg.meta new file mode 100644 index 000000000..69399ee42 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Metalness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 5df39678e5734f51a29940f2f6a43dda +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg new file mode 100644 index 000000000..127c7888d --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f916040ca388073191224a515def08761a3e136a74f559feb5774ef50527d54 +size 3505435 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg.meta new file mode 100644 index 000000000..da4e2137e --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 8bc10cfce8a64defaf9f67d156003f09 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg new file mode 100644 index 000000000..cf7a6709b --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9fc8550cdb559c16cbd2d43196dcc271653e78c802519bc446684224048ff69 +size 1742286 diff --git a/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg.meta b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg.meta new file mode 100644 index 000000000..9d51593f6 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Panels/Plates_Panels_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: e2f6e4f21fd14d6eb65e100b4f012349 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted.meta b/Assets/Materials/PBR/Plates_Riveted.meta new file mode 100644 index 000000000..870fc938a --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79fbea05234f4b53a53eab2f090d2005 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat new file mode 100644 index 000000000..e8088be9b --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Plates_Riveted + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fb688a276034675b895c2edeb1b538b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: f07bacf217654b269eecfabbcc651b2b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 08b45a54ea8c4521b7c4e7b3974f0b42, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat.meta new file mode 100644 index 000000000..62c10b5e6 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 538d82fdc2de48f4bcf4e93b17407f90 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg new file mode 100644 index 000000000..fe22d7428 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a72ee2d4e5e6c3d4154e9244ad57f7c6b644b40b356db162c9f2b01e80547eb +size 1602784 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg.meta new file mode 100644 index 000000000..dc74b1c54 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: f07bacf217654b269eecfabbcc651b2b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png new file mode 100644 index 000000000..527fe9f5f --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d678e8bff66b2d3bc703c5d355c47644f135544ac33afd517f1a542195b7e43d +size 5021835 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png.meta new file mode 100644 index 000000000..778892894 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 08b45a54ea8c4521b7c4e7b3974f0b42 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg new file mode 100644 index 000000000..05c05f99a --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:212258a43acddd1cb67203b3b263721022ae5f22bbf2213842a608fb09dc2b2f +size 1396144 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg.meta new file mode 100644 index 000000000..86f483ff4 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Metalness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 24e3f6b76da9420592e2f21931defae7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg new file mode 100644 index 000000000..4c272122c --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e49f90c003cf728de4892eec7d71f08abec1b2f9cb4780c875d005cb313498ac +size 3616644 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg.meta new file mode 100644 index 000000000..aa8d94dbe --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 6fb688a276034675b895c2edeb1b538b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg new file mode 100644 index 000000000..b96f7460a --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d48b683b55fd5e89c91a0c4bfde3a539fc892abc958387045e7d0786fe5c1fbd +size 1889081 diff --git a/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg.meta b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg.meta new file mode 100644 index 000000000..232a09cf3 --- /dev/null +++ b/Assets/Materials/PBR/Plates_Riveted/Plates_Riveted_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 7b50b58679684fc8991f112974a62120 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber.meta b/Assets/Materials/PBR/Rubber.meta new file mode 100644 index 000000000..f4d39fafb --- /dev/null +++ b/Assets/Materials/PBR/Rubber.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 180d9a65c5784b618970824077421002 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber.mat b/Assets/Materials/PBR/Rubber/Rubber.mat new file mode 100644 index 000000000..2c10c3488 --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rubber + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 42826f488ae243178be306ada5ee9f41, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 83e6c1768e014acfb494fbf007c40c80, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: f1d4409638e4452cb1412503ed8526de, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Rubber/Rubber.mat.meta b/Assets/Materials/PBR/Rubber/Rubber.mat.meta new file mode 100644 index 000000000..989c2cd22 --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 257d49e9af154d6c9b5ea50a288db1fa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber_Color.jpg b/Assets/Materials/PBR/Rubber/Rubber_Color.jpg new file mode 100644 index 000000000..3a0e09062 --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d712c25987d3e6f40e3f37fae1ce1a4a4155d5e27cff64dadf2bbe140979dd98 +size 4479634 diff --git a/Assets/Materials/PBR/Rubber/Rubber_Color.jpg.meta b/Assets/Materials/PBR/Rubber/Rubber_Color.jpg.meta new file mode 100644 index 000000000..ff443d7b4 --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 83e6c1768e014acfb494fbf007c40c80 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png b/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png new file mode 100644 index 000000000..d194ddc8f --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a5d2c567edceeeec37de50166d325a0b3d29bc6cd90ad891635bf4cf8334376 +size 5044494 diff --git a/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png.meta new file mode 100644 index 000000000..fe4234492 --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: f1d4409638e4452cb1412503ed8526de +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg b/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg new file mode 100644 index 000000000..461b856ff --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61bf1b38eae723913275a1de5eb08d4ac543f11e28f4ac6f596a0644169010fc +size 9238212 diff --git a/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg.meta b/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg.meta new file mode 100644 index 000000000..16144739a --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 42826f488ae243178be306ada5ee9f41 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg b/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg new file mode 100644 index 000000000..7c59cbb40 --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc137f95179a4ae42d67819750d78c3fe878d438b789cf96b33947618305a275 +size 3042709 diff --git a/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg.meta b/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg.meta new file mode 100644 index 000000000..feca8c0c2 --- /dev/null +++ b/Assets/Materials/PBR/Rubber/Rubber_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 834b5a5e1e1a49559f9fdeffd947e0a0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/SOURCES.md b/Assets/Materials/PBR/SOURCES.md new file mode 100644 index 000000000..baebd4022 --- /dev/null +++ b/Assets/Materials/PBR/SOURCES.md @@ -0,0 +1,22 @@ +# PBR material sources + +All texture sets are from ambientCG (https://ambientcg.com), licensed CC0 1.0 Universal (public domain, https://creativecommons.org/publicdomain/zero/1.0/). 2K-JPG downloads; displacement and NormalDX dropped; NormalGL kept (OpenGL convention, used by Blender and Unity). + +| Material | ambientCG id | URL | Metallic source | +|---|---|---|---| +| Paint_Clean_Light | Plastic010 | https://ambientcg.com/view?id=Plastic010 | none in set: constant 0 | +| Paint_Worn_Light | PaintedMetal012 | https://ambientcg.com/view?id=PaintedMetal012 | ambientCG Metalness map | +| Paint_Worn_Dark | PaintedMetal007 | https://ambientcg.com/view?id=PaintedMetal007 | ambientCG Metalness map | +| Steel_Brushed | Metal009 | https://ambientcg.com/view?id=Metal009 | ambientCG Metalness map | +| Metal_Scratched | Metal002 | https://ambientcg.com/view?id=Metal002 | ambientCG Metalness map | +| Gunmetal_Dark | Metal030 | https://ambientcg.com/view?id=Metal030 | ambientCG Metalness map | +| Plates_Riveted | MetalPlates002 | https://ambientcg.com/view?id=MetalPlates002 | ambientCG Metalness map | +| Plates_Panels | MetalPlates006 | https://ambientcg.com/view?id=MetalPlates006 | ambientCG Metalness map | +| Tread_Diamond | DiamondPlate001 | https://ambientcg.com/view?id=DiamondPlate001 | ambientCG Metalness map | +| Rubber | Rubber001 | https://ambientcg.com/view?id=Rubber001 | none in set: constant 0 | +| Plastic_Matte | Plastic004 | https://ambientcg.com/view?id=Plastic004 | none in set: constant 0 | +| Carbon_Fibre | Fabric004 | https://ambientcg.com/view?id=Fabric004 | set map is all 1.0; dielectric, so constant 0 | + +Files per material: `_Color`, `_Roughness`, `_NormalGL`, `_Metalness` and `_AO` (where the set has them), plus `_MetallicSmoothness.png` generated here for Unity (Metallic in R, Smoothness = 1 - Roughness in A). AO exists only for Paint_Worn_Light and Paint_Worn_Dark. + +Blender library: `Asset Sources/PBR Materials.blend` (catalog Aetheria/PBR, images linked by relative path to this folder). Unity materials use Aetheria/GlowFade. diff --git a/Assets/Materials/PBR/SOURCES.md.meta b/Assets/Materials/PBR/SOURCES.md.meta new file mode 100644 index 000000000..4c16a4a62 --- /dev/null +++ b/Assets/Materials/PBR/SOURCES.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a29568b9a0cf46babc43fe6045d6e10a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed.meta b/Assets/Materials/PBR/Steel_Brushed.meta new file mode 100644 index 000000000..0a76b67a2 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76edddc4bbd74a8d80e7cc29729b334e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat new file mode 100644 index 000000000..7147c9aa2 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Steel_Brushed + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: c3ef09438e3e46d18a4c267810aeb285, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: f70b6df0395b4752b4ec80cb7bfd8f42, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 40f5e915d2734d43bc01f984772e9d29, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat.meta new file mode 100644 index 000000000..6a17f81b3 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 65c607f056d64708bb493dd31b39e79e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg new file mode 100644 index 000000000..c3406774a --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:209d3bb050be9f58c5af179d9712fa7799567a4cd50afd338d37674bdcff765b +size 2439272 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg.meta new file mode 100644 index 000000000..d6973f061 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: f70b6df0395b4752b4ec80cb7bfd8f42 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png new file mode 100644 index 000000000..8142b06f2 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2b84e6acb67eb71fb263546ba5fe2ddd5f6e00517addb3c96c0f226becab3bb +size 3309438 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png.meta new file mode 100644 index 000000000..130146909 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 40f5e915d2734d43bc01f984772e9d29 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg new file mode 100644 index 000000000..afd0fe3a6 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b65d6b9091747bd81ee58adedcb6209d8ee21b2bde9298d7216989ada85ef622 +size 16545 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg.meta new file mode 100644 index 000000000..1aa819912 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Metalness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 415d2498454d4d419948b2aa11eac78c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg new file mode 100644 index 000000000..2c9942542 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8773d9e97a4b057ced3e538d8ecc6069d27c8948191d61daf79b9ad93d93e3b3 +size 4120356 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg.meta new file mode 100644 index 000000000..e223398fa --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: c3ef09438e3e46d18a4c267810aeb285 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg new file mode 100644 index 000000000..a1d7edd1f --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e802f013b93cb1bd4b55cd91f02a1863233475a7f8bd0e6755cfaa447a729674 +size 1891607 diff --git a/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg.meta b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg.meta new file mode 100644 index 000000000..726ff5549 --- /dev/null +++ b/Assets/Materials/PBR/Steel_Brushed/Steel_Brushed_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 158c7794c28740d0a16fa2dc22e93d8c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond.meta b/Assets/Materials/PBR/Tread_Diamond.meta new file mode 100644 index 000000000..6a3445907 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 78b78bf7d2f84a8d85daaf75d21fa56f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat new file mode 100644 index 000000000..5b9542d0f --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Tread_Diamond + m_Shader: {fileID: 4800000, guid: ddff0b48b92c991499817d2a0f5d5059, type: 3} + m_ShaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 043636050ee1492697e5bebb7603bf12, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: df0632a08c5f1a1498fa325c755dc459, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: f04f0c584e824d81b7d7a91b969efef8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 28456bc0a3c045e394e0937b6fe0231c, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Fade: 0 + - _FadeEdge: 0.05 + - _FadeSharpness: 16 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EdgeColor: {r: 3.0117648, g: 3.0117648, b: 11.984314, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat.meta new file mode 100644 index 000000000..dd3e8ee22 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd8a08731d8c4a4d8961c92fe318f1bb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg new file mode 100644 index 000000000..c4aae91a2 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a1de0119ef8592c3054949b6a9608a5a814156f661ed54541b390feb6fb87cd +size 2675454 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg.meta new file mode 100644 index 000000000..f02278e36 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Color.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: f04f0c584e824d81b7d7a91b969efef8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png new file mode 100644 index 000000000..8c48d3028 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6131476bdbc8b6e910a5537a0aaadc977584f22c2a76d97f4cab4aa2b2b7ec0 +size 7151369 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png.meta new file mode 100644 index 000000000..8804c2d58 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_MetallicSmoothness.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 28456bc0a3c045e394e0937b6fe0231c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg new file mode 100644 index 000000000..d65027465 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6925202668aae7828b0a4765ca8854c539d94c4cd0f945b5195b5576272cdc7a +size 2420905 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg.meta new file mode 100644 index 000000000..c786edbd3 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Metalness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 5086225cf1bf485597fe191f1b9ca912 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg new file mode 100644 index 000000000..7411d45d0 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:317627265f2587cdfb00e06ea80415333b0ff2597321c79a77c2fd55448e5ec5 +size 7454546 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg.meta new file mode 100644 index 000000000..747097254 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_NormalGL.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 043636050ee1492697e5bebb7603bf12 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg new file mode 100644 index 000000000..2a2b7c7f8 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6aa2c8bd6044829215771cb1c3d82fcd3845565ff1a9416f4a10403dc2dfbc1b +size 2395648 diff --git a/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg.meta b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg.meta new file mode 100644 index 000000000..cc15cc441 --- /dev/null +++ b/Assets/Materials/PBR/Tread_Diamond/Tread_Diamond_Roughness.jpg.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 1d942e92edc64885ae82ceb88af83104 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 4 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/Weapons/Projectile.cs b/Assets/Scripts/Gameplay/Weapons/Projectile.cs index 70b591649..66a444d89 100644 --- a/Assets/Scripts/Gameplay/Weapons/Projectile.cs +++ b/Assets/Scripts/Gameplay/Weapons/Projectile.cs @@ -1,59 +1,96 @@ -using System.Collections; +using System; +using System.Collections; +using UniRx; using UnityEngine; -using static CultMath.math; -// Cut 3 (docs/fire-control-cut.md): the raycast, shield branch and SendHit are deleted -- FireControl already -// decided this shot's fate before this object was ever spawned (R8). What is left is pure flight-path -// presentation: fly, and disappear at Range or ShotId's resolution, whichever comes first. -// Cut 6b, 6.2 (12.4(b): Apply's own switch on the frozen Fuse decides this now, not Step): the flak-round -// blast resolves in the simulation, through FireControl.Detonate -- a MonoBehaviour calling it would be -// exactly the authority Cut 3 spent itself deleting, so the blast-distance/blast-radius fields this object -// used to carry for that are gone. This object's job stays fly-and-disappear. +// A ballistic round, drawn by DrawAhead.Round from what the simulation publishes and deciding nothing. The simulation +// owns the round's facts (the PendingShot copy taken at spawn, replaced by the sim's record at ShotCommitted, and the +// outcome it publishes), so this object stores no motion state of its own and computes no position, time, range or +// impact point: each frame it asks DrawAhead.Round where the round is at sim time plus the clock's Lead (the same +// draw-ahead ships use). The round ends on the sim's word: ShotResolved ends one that hit or burst, and +// DrawAhead.RoundOver ends one the sim published as a miss. The barrel is only where the round is first seen: its +// offset from the drawn line decays to zero over BlendTime sim seconds. The trail's fade after the end stays real time +// (pure presentation, ruling sim-speed-presentation). public class Projectile : MonoBehaviour { public TrailRenderer Trail; - public float Gravity; - public float Drag = .1f; public Prototype HitEffect; + // Sim seconds over which the barrel's offset from the sim line decays to nothing. + public float BlendTime = .1f; + + private PendingShot _shot; + private Zone _zone; + private CultMath.float3 _barrel; + private ShotOutcome _known; private bool _alive; + private CompositeDisposable _binding; - // Cut 3: FireControl.Fire's ShotId -- this projectile's handle onto Zone.ShotCommitted/ShotResolved. - public int ShotId { get; set; } - public Zone Zone { get; set; } - - public Vector3 StartPosition { get; set; } - public Vector3 Velocity { get; set; } - public Entity SourceEntity { get; set; } - public float Range { get; set; } - - private void OnEnable() + // Takes the shot as the sim holds it, the zone whose sim time it is drawn at, and where the barrel is as this round is first seen. + public void Launch(Zone zone, PendingShot shot, Vector3 barrel) { + _zone = zone; + _shot = shot; + _barrel = new CultMath.float3(barrel.x, barrel.y, barrel.z); + _known = null; + _binding?.Dispose(); + _binding = new CompositeDisposable( + zone.ShotCommitted.Where(o => o.ShotId == shot.ShotId).Subscribe(Committed), + zone.ShotResolved.Where(o => o.ShotId == shot.ShotId).Subscribe(Resolve)); _alive = true; + transform.forward = new Vector3(shot.TravelDirection.x, 0, shot.TravelDirection.y); + Draw(); } - // Update is called once per frame void Update() { - if (SourceEntity == null) return; - - if(_alive) - { - var t = transform; - Velocity -= Vector3.up * (Gravity * Time.deltaTime); - Velocity *= max(0, 1 - Drag * Time.deltaTime); - t.forward = Velocity.normalized; - - transform.position += Velocity * Time.deltaTime; - var distanceTraveled = (transform.position - StartPosition).magnitude; - if(distanceTraveled > Range) - StartCoroutine(Kill()); - } + if (_alive) Draw(); } - IEnumerator Kill() + private void Draw() + { + var lead = ActionGameManager.Clock.Lead; + transform.position = V(DrawAhead.Round(_shot, _known, _barrel, BlendTime, _zone.Time, lead)); + if (DrawAhead.RoundOver(_shot, _known, _zone.Time, lead)) Finish(); + } + + // The sim's commit: the record it holds now (a contact burst's arrival is shortened here) and what it decided. + private void Committed(ShotOutcome outcome) + { + if (_zone.TryGetShot(outcome.ShotId, out var record)) _shot = record; + _known = outcome; + } + + // The simulation's verdict. A round that hit or burst is drawn at its end and stops; a miss keeps flying. + private void Resolve(ShotOutcome outcome) + { + if (!_alive) return; + _known = outcome; + if (outcome.Result == ShotResult.Miss) return; + Draw(); + if (HitEffect != null) HitEffect.Instantiate().position = transform.position; + Finish(); + } + + private static Vector3 V(CultMath.float3 p) => new Vector3(p.x, p.y, p.z); + + private void Finish() { _alive = false; + _binding?.Dispose(); + _binding = null; + StartCoroutine(Fade()); + } + + void OnDisable() + { + _alive = false; + _binding?.Dispose(); + _binding = null; + } + + IEnumerator Fade() + { var startTime = Time.time; var lifetime = Trail.time; while (Time.time - startTime < lifetime) diff --git a/Assets/Scripts/Gameplay/Weapons/ProjectileManager.cs b/Assets/Scripts/Gameplay/Weapons/ProjectileManager.cs index 56cfdcf80..216756cf9 100644 --- a/Assets/Scripts/Gameplay/Weapons/ProjectileManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/ProjectileManager.cs @@ -1,32 +1,17 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using Random = UnityEngine.Random; +using UnityEngine; public class ProjectileManager : InstantWeaponEffectManager { public Prototype ProjectilePrototype; - public bool InheritVelocity; + // The round is drawn by DrawAhead from what the simulation publishes, so there is nothing to aim, jitter + // or inherit here: spread is priced by FireControl, and the sim's round inherits nothing from its shooter. public override void Fire(InstantWeapon weapon, EquippedItem item, EntityInstance source, EntityInstance target, int shotId) { + var zone = source.Entity.Zone; + if (!zone.TryGetShot(shotId, out var shot)) return; var p = ProjectilePrototype.Instantiate(); - var hp = item.Hardpoint; - var barrel = source.GetBarrel(hp); - var angle = weapon.Spread / 2; - p.ShotId = shotId; - p.SourceEntity = source.Entity; - p.Velocity = Quaternion.Euler( - Random.Range(-angle, angle), - Random.Range(-angle, angle), - Random.Range(-angle, angle)) * - barrel.forward * - weapon.Velocity; - p.StartPosition = p.transform.position = barrel.position + p.Velocity * (Random.value * Time.deltaTime); - if(InheritVelocity) - p.Velocity += new Vector3(source.Entity.Velocity.x, 0, source.Entity.Velocity.y); - p.Range = weapon.Range; - p.Zone = source.Entity.Zone; + p.Launch(zone, shot, source.GetBarrel(item.Hardpoint).position); p.Trail.Clear(); } } diff --git a/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs b/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs index 7515d55e7..244af7d89 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs @@ -187,6 +187,7 @@ public interface IPowerConsumer // superseded draft quoted -- checked directly here rather than trusted from that document. Union(39, typeof(TargetingSystemData)), Union(40, typeof(MineLayerData)), + Union(41, typeof(ThrottleLockData)), Union(42, typeof(VapourDumpData)), JsonObject(MemberSerialization.OptIn)] public abstract class BehaviorData diff --git a/Assets/Scripts/ServerShared/Behaviors/ThrottleLock.cs b/Assets/Scripts/ServerShared/Behaviors/ThrottleLock.cs new file mode 100644 index 000000000..d33ef07cb --- /dev/null +++ b/Assets/Scripts/ServerShared/Behaviors/ThrottleLock.cs @@ -0,0 +1,35 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +using MessagePack; +using Newtonsoft.Json; + +// Presence marks the lock: Entity.ThrottleLocked is true while an active effect carries one, and Ship.Update +// then reads full forward intent in place of MovementDirection. The behaviour holds no state and does nothing +// itself; turning stays with the pilot. +[Inspectable, MessagePackObject, JsonObject(MemberSerialization.OptIn), RuntimeInspectable] +public class ThrottleLockData : BehaviorData +{ + public override Behavior CreateInstance(EquippedItem item) + { + return new ThrottleLock(this, item); + } + public override Behavior CreateInstance(ConsumableItemEffect item) + { + return new ThrottleLock(this, item); + } +} + +public class ThrottleLock : Behavior +{ + public ThrottleLock(ThrottleLockData data, EquippedItem item) : base(data, item) + { + } + + public ThrottleLock(ThrottleLockData data, ConsumableItemEffect item) : base(data, item) + { + } + + public override bool Execute(float dt) => true; +} diff --git a/Assets/Scripts/ServerShared/DrawAhead.cs b/Assets/Scripts/ServerShared/DrawAhead.cs index d26bf91b4..13da8aae9 100644 --- a/Assets/Scripts/ServerShared/DrawAhead.cs +++ b/Assets/Scripts/ServerShared/DrawAhead.cs @@ -5,9 +5,11 @@ using CultMath; using static CultMath.math; -// Where a presenter draws the latest sim state when the frame falls Lead sim seconds after the last step. Pure reads -// of the simulation for presenters (never called by ServerShared): the sim owns every pose and no presenter stores -// one, a previous state or a velocity of its own. +// Pure presentation statics over sim state, never called by ServerShared, with no state of their own: the sim owns every +// pose and no presenter stores one, a previous state or a velocity of its own. Ships are drawn where the frame falls Lead +// sim seconds after the last step, by their last step's velocity and turn. A ballistic round's flight is presentation +// (ruling projectile-flight-is-presentation), drawn from the sim's facts: its frozen line, the published outcome, the +// commit tick, the impact cell on the target's drawn pose, the burst point. public static class DrawAhead { // A ship in a wormhole animation has its pose scripted by the step, not integrated from Velocity and TurnRate, @@ -37,4 +39,62 @@ public static class DrawAhead t.w * q.z + t.x * q.y - t.y * q.x + t.z * q.w, t.w * q.w - t.x * q.x - t.y * q.y - t.z * q.z)); } + + // A ballistic round at a sim time (the clock's Zone.Time + Lead): on its frozen line while the outcome is unknown or a + // miss, with the barrel's offset from that line decaying to nothing over blendTime sim seconds from the moment of firing. + // A round the sim published as a hit or burst steers from its line, from the commit tick, onto where it ends by the + // time damage lands: a burst's frozen point, else the impact cell on the target's drawn pose; and is held there after. + public static float3 Round(in PendingShot shot, ShotOutcome known, float3 barrel, float blendTime, float simTime, float lead) + { + var time = simTime + lead; + var drawn = Lifted(shot, Line(shot, known?.Result, time), barrel, blendTime, time); + if (known == null || known.Result == ShotResult.Miss) return drawn; + var end = known.HasBurstPoint + ? float3(known.BurstPoint.x, shot.FireOrigin.y, known.BurstPoint.y) + : Impact(known.Target, known.Cell, lead); + var commit = shot.ArrivalTime - known.ArrivalIn; + var steer = shot.ArrivalTime > commit ? saturate((time - commit) / (shot.ArrivalTime - commit)) : 1f; + return drawn + (end - drawn) * steer; + } + + // The impact cell's centre on the target's drawn pose: the cell at the sim pose, drawn ahead by the target's last + // step velocity and turned by its last step turn for lead seconds, as Position and Rotation draw the entity. + public static float3 Impact(Entity target, int2 cell, float lead) + { + var at = Position(target, lead); + var offset = target.ToWorldPoint((float2) cell) - target.Position.xz; + var turned = mul(offset, CultMath.float2x2.Rotate(Turn(target, lead))); + return float3(at.x + turned.x, at.y, at.z + turned.y); + } + + // Whether the drawn flight is over by time: only a published miss ends by the clock. A hit or burst ends on ShotResolved. + public static bool RoundOver(in PendingShot shot, ShotOutcome known, float simTime, float lead) => + known != null && known.Result == ShotResult.Miss && simTime + lead >= RoundEnd(shot, ShotResult.Miss); + + // The sim time a round's drawn line ends, for what is known of its outcome. A round that hit or burst (or whose outcome + // is not yet published) ends at its ArrivalTime; a round the sim has published as a Miss flies on to the weapon's frozen + // range and never ends short of its own arrival (a direct round's FireRange is measured to any target, in range or not). + public static float RoundEnd(in PendingShot shot, ShotResult? known) => + known == ShotResult.Miss + ? max(shot.ArrivalTime, shot.FireTime + (shot.Speed > .01f ? shot.MaxRange / shot.Speed : 0f)) + : shot.ArrivalTime; + + // The frozen line a round follows until it steers: from its frozen origin along its frozen direction at its frozen + // speed, held at RoundEnd once it has flown that far. With no outcome known the round is drawn no further than its + // arrival point and waits there for the sim to publish one. + private static float2 Line(in PendingShot shot, ShotResult? known, float time) + { + if (shot.Speed <= .01f) return shot.FireOrigin.xz; + var flown = clamp(time - shot.FireTime, 0f, RoundEnd(shot, known) - shot.FireTime); + return shot.FireOrigin.xz + shot.TravelDirection * (shot.Speed * flown); + } + + private static float Turn(Entity entity, float lead) => + entity is Ship { WormholeAnimationInProgress: true } ? 0f : entity.TurnRate * lead; + + private static float3 Lifted(in PendingShot shot, float2 planar, float3 barrel, float blendTime, float time) + { + var blend = blendTime > 0 ? saturate(1 - (time - shot.FireTime) / blendTime) : 0f; + return float3(planar.x, shot.FireOrigin.y, planar.y) + (barrel - shot.FireOrigin) * blend; + } } diff --git a/Assets/Scripts/ServerShared/Entity.cs b/Assets/Scripts/ServerShared/Entity.cs index 1da6e68d8..59bc38cc9 100644 --- a/Assets/Scripts/ServerShared/Entity.cs +++ b/Assets/Scripts/ServerShared/Entity.cs @@ -203,12 +203,10 @@ public abstract class Entity return presencePermitted; }), initialValue: true); - foreach (var item in Equipment) - foreach (var behavior in item.Behaviors) - { - if(behavior is IInitializableBehavior initializableBehavior) - initializableBehavior.Initialize(); - } + // One initialiser for everything that computes targets here: gear and the effects still running, so a + // consumable active across a refit retargets to the new items exactly as gear does. + InitializeBehaviors(Equipment.SelectMany(item => item.Behaviors)); + InitializeBehaviors(_activeConsumables.SelectMany(effect => effect.Behaviors)); foreach(var entity in Zone.Entities) { EntityInfoGathered[entity] = 0; @@ -860,9 +858,23 @@ public abstract class Entity public void ActivateConsumable(ConsumableItem item) { - _activeConsumables.Add(new ConsumableItemEffect(item, this)); + var effect = new ConsumableItemEffect(item, this); + // The same hook Activate runs over Equipment: a behaviour that computes its targets there (StatModifier) + // would otherwise reach its second tick uninitialised. + InitializeBehaviors(effect.Behaviors); + _activeConsumables.Add(effect); } + private static void InitializeBehaviors(IEnumerable behaviors) + { + foreach (var behavior in behaviors.ToList()) + if (behavior is IInitializableBehavior initializable) + initializable.Initialize(); + } + + // Derived, never written: true iff an active consumable effect carries a ThrottleLock. + public bool ThrottleLocked => _activeConsumables.Any(e => e.Behaviors.OfType().Any()); + public ConsumableItemEffect FindActiveConsumable(ConsumableItemData data) { return _activeConsumables.FirstOrDefault(ac => ac.Data == data); @@ -1448,11 +1460,16 @@ public abstract class Entity for (var i = 0; i < _activeConsumables.Count; i++) { _activeConsumables[i].Update(delta); - if (_activeConsumables[i].RemainingDuration < 0) + if (_activeConsumables[i].RemainingDuration <= 0) { // Cut 2 Gate 1 fix (docs/stats-and-power-cut.md): an expired consumable dropped out of this // list without ever telling the resolver, leaving its generation/cache/modifier entries // reachable (keyed by this ConsumableItemEffect instance) for the rest of the process. + // A StatModifier's attachments are keyed by its target items, not by the effect, so Forget alone + // leaves a boost attached to its targets: dispose each behaviour first. + foreach (var behavior in _activeConsumables[i].Behaviors) + if (behavior is IDisposable disposable) + disposable.Dispose(); Resolver.Forget(_activeConsumables[i]); _activeConsumables.RemoveAt(i--); } diff --git a/Assets/Scripts/ServerShared/FireControl.cs b/Assets/Scripts/ServerShared/FireControl.cs index 138776ce9..fbe2e0d13 100644 --- a/Assets/Scripts/ServerShared/FireControl.cs +++ b/Assets/Scripts/ServerShared/FireControl.cs @@ -755,6 +755,8 @@ public static class FireControl Spread = weapon.Spread, FireRange = fireRange, FireTime = now, + Speed = weapon.Velocity, + MaxRange = weapon.Range, FireOrigin = origin, FireTargetPosition = targetPosition, FireTargetVelocity = targetVelocity, @@ -853,6 +855,8 @@ public static class FireControl // A contact burst short of max range arrives when the round has flown that far, not at the frozen // max-range time (CommitBurst). Never later than the frozen time. if (shot.Outcome.Result == ShotResult.Burst) shot.ArrivalTime = min(shot.ArrivalTime, now + shot.Outcome.ArrivalIn); + // Written back before ShotCommitted fires: a presenter re-reading the record there (Zone.TryGetShot) sees + // the committed ArrivalTime a contact burst has just shortened. shots[i] = shot; zone.ShotCommitted.OnNext(shot.Outcome); } @@ -1999,6 +2003,11 @@ public struct PendingShot public float3 FireTargetPosition; public float3 FireTargetVelocity; public float FireTime; + // The weapon's Velocity at Fire, frozen with the rest so a presenter draws the same line whatever happens to the stat later. + public float Speed; + // The weapon's Range at Fire, likewise frozen: how far a presenter may draw a round that misses. FireRange above + // is the distance to the engaged target (0 for a round with none), not how far a round that misses flies on. + public float MaxRange; public float CommitTime; public float ArrivalTime; diff --git a/Assets/Scripts/ServerShared/ItemManager.cs b/Assets/Scripts/ServerShared/ItemManager.cs index d9c42d02a..884179e4e 100644 --- a/Assets/Scripts/ServerShared/ItemManager.cs +++ b/Assets/Scripts/ServerShared/ItemManager.cs @@ -183,6 +183,9 @@ public class ItemManager }; } + if (design is ConsumableItemData) + return new ConsumableItem { Data = l.Design, Lot = lot }; + return new CompoundCommodity { Data = l.Design, Lot = lot diff --git a/Assets/Scripts/ServerShared/Ship.cs b/Assets/Scripts/ServerShared/Ship.cs index 98dfa4fb3..993d92940 100644 --- a/Assets/Scripts/ServerShared/Ship.cs +++ b/Assets/Scripts/ServerShared/Ship.cs @@ -233,27 +233,29 @@ public class Ship : Entity if (_active && !_exitingWormhole && !_enteringWormhole) { RecalculateThrust(); + // The lock replaces intent here, once; player and agent intent both pass through this one read. + var move = ThrottleLocked ? float2(0, 1) : MovementDirection; foreach (var thruster in _allThrusters) thruster.Axis = 0; var rightThrusterTorqueCompensation = abs(RightStrafeTotalTorque) / RightStrafeTorqueThrusters.Count; foreach (var thruster in _rightThrusters) { var thrust = 0f; - thrust += MovementDirection.x; + thrust += move.x; if (RightStrafeTorqueThrusters.Contains(thruster)) - thrust -= MovementDirection.x * (rightThrusterTorqueCompensation / (abs(thruster.Torque) * thruster.Thrust)); + thrust -= move.x * (rightThrusterTorqueCompensation / (abs(thruster.Torque) * thruster.Thrust)); thruster.Axis = thrust; } var leftThrusterTorqueCompensation = abs(LeftStrafeTotalTorque) / LeftStrafeTorqueThrusters.Count; foreach (var thruster in _leftThrusters) { var thrust = 0f; - thrust += -MovementDirection.x; + thrust += -move.x; if (LeftStrafeTorqueThrusters.Contains(thruster)) - thrust += MovementDirection.x * (leftThrusterTorqueCompensation / (abs(thruster.Torque) * thruster.Thrust)); + thrust += move.x * (leftThrusterTorqueCompensation / (abs(thruster.Torque) * thruster.Thrust)); thruster.Axis = thrust; } - foreach (var thruster in _forwardThrusters) thruster.Axis += MovementDirection.y; - foreach (var thruster in _reverseThrusters) thruster.Axis += -MovementDirection.y; + foreach (var thruster in _forwardThrusters) thruster.Axis += move.y; + foreach (var thruster in _reverseThrusters) thruster.Axis += -move.y; foreach (var thruster in _clockwiseThrusters) thruster.Axis += Turn; foreach (var thruster in _counterClockwiseThrusters) thruster.Axis += -Turn; diff --git a/Assets/Scripts/ServerShared/StatResolver.cs b/Assets/Scripts/ServerShared/StatResolver.cs index bbd3ea542..7062fbd9e 100644 --- a/Assets/Scripts/ServerShared/StatResolver.cs +++ b/Assets/Scripts/ServerShared/StatResolver.cs @@ -141,6 +141,9 @@ public class StatResolver { set.Scale.Remove(modifierKey); set.Constant.Remove(modifierKey); + // An entry with nothing attached is no entry: a modifier that is gone leaves no trace in the resolver. + if (set.Scale.Count == 0 && set.Constant.Count == 0) + _modifiers.Remove(entry); } _cache.Remove(entry); } diff --git a/docs/aetheria-release-map.md b/docs/aetheria-release-map.md index 3cd61747c..08528d188 100644 --- a/docs/aetheria-release-map.md +++ b/docs/aetheria-release-map.md @@ -5835,6 +5835,26 @@ factor), which waits on all of them. a smaller step means more decisions per sim second, the same per real second. No ruling fixes a per-step count. +**Body facts for ballistic-flight r2** (source reads at e56f9c8b, 2026-10-09, imagination-aeth-ballistic-r2): + +- B-r2-1. FireControl.Step writes a committed shot back (`shots[i] = shot`, FireControl.cs:868) before `ShotCommitted` fires (:869). A no-lock fused round stopped by a hull has its `ArrivalTime` shortened at that commit (:867; CommitBurst :1024). A presenter's fire-time copy of the shot therefore carries a stale arrival unless it re-reads the record at `ShotCommitted`. +- B-r2-2. `FireControl.Designated` measures `range` to any non-null target before the in-range test (:293-297), and a direct round's FlightDistance is that range. A direct round can therefore be fired at a target beyond Range and arrive after `FireTime + MaxRange/Speed`. +- B-r2-3. `InstantWeapon.Execute` calls `FireControl.Fire` and then `OnFire` (:271-272) inside the entity loop, and `FireControl.Step` runs after it (Zone.cs:232). A presenter spawned from `OnFire` binds `ShotCommitted` and `ShotResolved` before its shot can commit or resolve, including a round fired at nothing that commits and misses in the same step. +- B-r2-4. Solve aims a direct or engaged fused round at the predicted intercept (`Solution().Direction`, :135-156) but sets FlightDistance to the current planar range (:654-666), so on a moving target the arrival point on the frozen line is not where the target is. Open as question direct-arrival-at-intercept. + +**Why a round's end is one sim statement.** The sim resolves a round at `ArrivalTime`. A drawn round that ends anywhere else needs a second owner of the end, which is what ballistic-flight s1 found in Projectile. `FireControl.RoundEnd(shot, known)` states the end for what the sim has published about the outcome: arrival for a hit, a burst or an unknown outcome, and the frozen weapon range for a miss, never short of arrival. `RoundAt` clamps there. A round whose outcome is not yet published waits at its arrival point for at most one step instead of overshooting. The drawing rules (placement, barrel blend, stop, done) are pure statics in DrawAhead, beside the ships' draw-ahead, so the headless suite tests them by behaviour rather than by grep. + +**Ballistic flight is presentation (r3, 2026-10-09).** After rulings projectile-flight-is-presentation, sim-hooks-presentation-agnostic and direct-arrival-keep-timing, FireControl owns only a shot's facts: the outcome, when damage lands (ArrivalTime, a contact burst's shortened arrival, the commit tick), the impact cell with its target, and a fused round's burst point. DrawAhead owns the drawn round, as pure statics tested headless. + +Probes at d98818ea: +(1) The impact cell is already on the outcome: on a hit, Commit stores the first cell of the shot's lane (FireControl.cs:960-988), MakeOutcome copies Cell and Target (:1527-1544), and ShotCommitted and ShotResolved publish the outcome (:881, :894). No sim hook was needed. +(2) Entity.ToWorldPoint (Entity.cs:717-725) is the one schematic-to-world frame. The step turns Direction by `mul(Direction, float2x2.Rotate(TurnRate*dt))` (Thruster.cs:129), so the cell on the drawn pose is `Position(target, lead).xz + Rotate(ToWorldPoint(cell) - Position.xz, TurnRate*lead)`, exactly. +(3) The commit tick equals `record.ArrivalTime - outcome.ArrivalIn` for every result (:877-881, :1541). +(4) An engaged proximity round is Hit or Burst, never Miss; it bursts at BurstPosition frozen at Fire (:1009-1017, :1148-1150), and it is drawn there. +(5) A target that leaves the zone mid-flight resolves as a fresh Miss (:857-868). + +Rationale: a hit follows its frozen line until the commit tick, then blends onto its impact cell on the target's drawn pose, so it lands on the hull rather than at the frozen line's arrival point. The sim's damage timing is unchanged. A miss flies on to the weapon's frozen range, which is DrawAhead.RoundEnd's choice. A kink at the commit frame (at most one step's share of the line-to-hull gap) and a snap back to the line after a target-gone Miss are accepted presentation. Rejected: publishing the lane's entry point as a new sim field; the ruling names the cell, so a hit effect may sit up to half a cell inside the hull skin. Risk: a hull mesh not aligned with its schematic makes hits land beside the mesh; that is a content fault, and the operator's moving-target check shows it. + ### Census Every Unity-side place that integrates, times or decides a sim fact at `6d427b7a`, and the cut @@ -7308,3 +7328,298 @@ vapour-cloud-presenter r2, modifier-stacking r3 (shrunk to tests), consumables-f follow-up; reshaped by `consumables-scarce`), boost-gear-systems r2 and boost-gear-combat r2 (held), ships-authoring-tool r2, ships-player r3. New: cut player-build r1, follow-up `component-records-after-demo`. No question raised. + +## Articulated mounts + +Mapped 2026-10-09 by Imagination (`imagination-aeth-articulated`, session `self-2026-10-09-ag`) for follow-up +`articulated-mounts`, against `origin/master` `6d83597b`. Re-mapped 2026-10-10 by Imagination +(`imagination-aeth-articulated-r2`, session `self-2026-10-10-ag`) against `origin/master` `acea1aa7`, after the +operator's rulings `mount-arc-gun-traverse` (arc on the hardpoint, traverse on the weapon, the link presentation +only; it supersedes `arc-on-the-hardpoint`, which superseded `arc-and-traverse-on-the-link`) and +`solver-in-gamecult-animation`. Rulings in force: `mount-arc-gun-traverse`, `rig-is-presentation`, +`solver-in-gamecult-animation`, `sim-hooks-presentation-agnostic`, `projectile-flight-is-presentation`, +`ship-roles-are-tags`, `thrusters-radiators-are-meshes`. AM1-AM11 were probed at `6d83597b`; AM12-AM17 at +`acea1aa7`. Every anchor in the specs is exact at `acea1aa7`. Where AM1-AM11 speak of links, read them as the +2026-10-09 model; AM12-AM17 and everything after them are the live model. + +**Scope tension for Self.** Target r4's `not_in_scope` lists "articulated mounts". The operator asked for this work +(her hermit-crab hull carries its big gun on a jointed arm). The target needs a revision that takes articulated +mounts out of `not_in_scope` before Hands is briefed. + +### Body facts + +**AM1. Arc is per hardpoint today, not per weapon.** `FireControl.ArcFor` (`FireControl.cs:36-41`) reads +`HardpointData.FiringArc` (`ItemData.cs:567-569`, key 6) when above zero, else `GameplaySettings.FiringArc` +(`Settings.cs:222`, initializer 120). `InArc` (`:50-58`) passes 360 or more unconditionally. The only shipped writer +was `AetherDb firing-arc-migrate` (`tools/AetherDb/Program.cs:998-1047`), which set 360 on the Turret hull's +Ballistic hardpoints. Twenty-three hardpoint initializers author `FiringArc`, all in tests (`git grep -nE +"[{,] *FiringArc = |^ +FiringArc = "` over tests, Assets/Scripts and tools: 23), and eight accessors read or write +it (`hardpoint\??\.FiringArc|Mount\(s\)\.FiringArc|Hardpoints\[0\]\.FiringArc`: 8). The brief's "per weapon, +default 120, turret 360" is this per-hardpoint rule. + +**AM2. Traverse is not simulated; it only prices.** `Solution` (`FireControl.cs:128-152`) says turrets traverse +instantly in the simulation and that link traverse "will make this stateful behind the same signature". +`TrackingRate` (`:238-245`) is the gun's `Weapon.Tracking` times the ship's targeting gear over `UnaidedTracking`, ++infinity for an unauthored gun, and only `PMount` reads it (`:383`, `:427`, `:720`). Follow-up +`articulated-mount-traverse-min` puts the link's traverse inside `TrackingRate` as the slower of the two. These cuts +add no slew state: arc and aim stay derived on every read. + +**AM3. The visual record reserves a pivot role nobody uses.** `ShipAuthoringStore.Roles` (`ShipAuthoring.cs:50-58`) +includes `articulation`, "a pivot, never a mount". No add-on code tags it, and `ShipModShips.Assemble` gives every +mod ship `ArticulationPoints = Array.Empty()` (`ShipModShips.cs:164`). The authoring doc says no +pivot is planned "until pivots move onto `HullData`" (`docs/moddable-ship-authoring.md:188-189`). + +**AM4. `ArticulationPoint` is one yaw/pitch pivot with no yaw clamp.** `ArticulationPoint.cs:9-48` slews yaw and +pitch toward `Target` at `Speed` and clamps only pitch. `ShipPrefabAuthoring.cs:139-149` parses +`Pivot.Group.YawMin.YawMax.PitchMin.PitchMax.Speed` but stores no yaw limit, so the Controls section's C9 line +("clamps yaw to YawMin..YawMax") is wrong on this base. A single pivot needs no IK. `EntityInstance.cs:282-289` +gives each articulation group an aim transform, and `LateUpdate` places it (`:410-417`) from +`FireControl.Solution(...).Direction` of the group's first weapon. A link presenter follows that read. The Eyes IK +report (AM11) found the same two facts. + +**AM5. The GLB path maps every node that carries `aetheria.id`.** `ShipModCatalog.ReadNodeIds` +(`ShipModCatalog.cs:195-218`) reads node extras, refuses a duplicate id and records whether the node has a mesh; it +keeps no parent relation. `Bind` (`:168-191`) checks each anchor's node. `ShipModVisual.LoadAsync` maps anchors to +Transforms through glTFast's instantiator (`ShipModVisual.cs:51-54`). A joint is an ordinary glTF node, so the same +map reaches it once it carries an id. + +**AM6. Probe: the add-on's export keeps an armature, its skin and data-bone extras.** Run on Starfire 2026-10-09 +with Blender 5.2.2 LTS at `C:\Program Files (x86)\Steam\steamapps\common\Blender\blender.exe` +(`--background --factory-startup`). Script `probe_rig_export.py` in the session scratchpad +(`...\scratchpad\imagination-aeth-articulated\`). It builds a collection with a hull cube; an armature +Shoulder > Elbow > Wrist; a cylinder skinned to Wrist through an Armature modifier; an empty `weapon-mount` +parented to the Wrist bone (`parent_type = BONE`) with a muzzle child; a Limit Rotation constraint on Elbow; and +custom properties on the Wrist data bone (`aetheria.role=link`, `aetheria.id=link.claw`) and on the Wrist pose bone. +It exports with the add-on's options (`__init__.py:359-361`: GLB, `use_active_collection`, `use_selection`, +`export_extras`, `export_yup`, `export_apply`). Result: +- One skin with joints `Shoulder, Elbow, Wrist`; the barrel node has `skin: 0` and a mesh. `export_apply` did not + bake the armature away. +- Joints are ordinary nodes in the hierarchy (`Arm > Shoulder > Elbow > Wrist > ClawGun > ClawGun.Muzzle`): the + bone-parented empty is a child of the Wrist joint node and keeps its extras. +- Data-bone custom properties export as the joint node's `extras` (`Wrist` carried `aetheria.role` and + `aetheria.id`). The pose-bone property did **not** export. A tag set by hand in Pose Mode's custom-properties + panel is lost; the add-on must write data-bone properties. +- The Limit Rotation constraint left no trace in the GLB (no extension, no extras). glTF carries no joint limits, + so the add-on must package them. +- The armature object's own custom property exported as extras on the `Arm` node. + +**AM7. The ship file carries unknown slots through.** `ship_cc.replace_layout` (`ship_cc.py:161-195`) and +`replace_visual` (`:116-140`) append each row's slots past the known members by mount or anchor id, and edit only +their own slots. `ShipSchemaPinTests` pins the Python slot numbers and member orders to the C# keys and asserts +`HARDPOINT_MEMBERS` has 7 names. A C# cut that adds `HardpointData` key 7 or `HullData` key 33 therefore needs no +Python change: the add-on carries both untouched until the add-on cut names them. + +**AM8. The schema version string is not a gate.** CultCache resolves a persisted record by schema name when the +local type has one version (CultLib `src/GameCult.Caching/CultCache.cs:518-523`). `aetheria.hulldata` and +`aetheria.ship_authoring` are both `"1"` (`ItemData.cs:510`, `ShipAuthoring.cs:12`). Bumping either buys no +refusal. A retired slot is guarded by a raw-payload refusal instead, as `RefuseLegacyEmbeddedHull` +(`ShipAuthoring.cs:124-151`) guards ShipAuthoring key 1. Every cut here keeps both versions at `"1"`. + +**AM9. Calibre is a footprint band, held only in a test so far.** `WeaponItemData.WeaponCaliber` +(`ItemData.cs:482-483`) runs Small to ExtraLarge (`Enums.cs:77-83`). Cut `caliber-bands` (unlanded) states the bands +(Small 1-2 cells, Medium 3-4, Large 5-6, ExtraLarge 7-9) only inside its test. No balance source names an arc cap +per calibre: AetheriaLore `Game Design/Ship Play Concepts.md` fork 2 (line 24, read in the ship-language +worktree) gives the trade without numbers. + +**AM10. In-flight add-on specs that touch arcs.** Among in-force specs with no report, only `ships-addon-gizmos` r3 +(arc fan from the row's arc) and `ships-addon-mounts` r5 (row defaults include `FiringArc`; a negative grep on +`.firing_arc =`) name a hardpoint arc. `controls-hud` r2, `controls-ai-bearing` r1 and `munition-shots` r5 read +`ArcFor` or `TrackingRate`, whose signatures these cuts keep. + +**AM11. Eyes prior art on IK** (`C:\Users\Meta\AppData\Local\Temp\claude\F--Projects-CultLib\f24b705c-99b0-4915-8cd0-d31d652edbbf\scratchpad\eyes-ik-prior-art\ik-prior-art.md`). +Damped least squares, min `||[J; lambda I] dtheta - [e; 0]||^2` with the joint bounds as the box, has exactly the +form of CultMath's existing `BoundedLeastSquares`. Every engine Eyes checked (Unity Animation Rigging, Godot 4.6, +Unreal Control Rig) keeps IK in the animation layer; none was found in a math library. Aim-an-axis leaves twist +about the aim free, so a chain aims with two effective degrees of freedom. + +**AM12. The sim already matches ruling `mount-arc-gun-traverse`; no sim cut is owed.** Probed at `acea1aa7`. +Arc: `HardpointData.FiringArc` (`ItemData.cs:567-569`, key 6) is the per-hardpoint, per-hull arc, and +`FireControl.ArcFor` (`FireControl.cs:34-41`) reads it, falling back to `GameplaySettings.FiringArc` (120) at 0. +Traverse: `WeaponData.Tracking` (`Behaviors/Weapon.cs:70-73`, key 33, degrees per second, +infinity when +unauthored; ruling `weapon-tracking-authored`) is a weapon stat, and `FireControl.TrackingRate` +(`FireControl.cs:239-245`) is that rate times the ship's targeting gear. Nothing reads a link, and no `LinkData`, +`HullLinks` or `HardpointData.Link` exists (`git grep` over Assets, tests and tools: 0). The only stale text is the +comment at `FireControl.cs:133-134`, which says traverse belongs to the link and cites the superseded ruling. +`ShipAuthoring.cs`, `ShipModCatalog.cs`, `ShipModPlan.cs`, `ItemData.cs`, `ShipModVisual.cs`, `ShipModShips.cs`, +`EntityInstance.cs`, `CultCacheDrawers.cs`, `tools/blender`, `docs/moddable-ship-authoring.md` and the ship tests +are byte-identical between `6d83597b` and `acea1aa7` (`git diff --stat`); `FireControl.cs` gained 9 lines, all +below line 755. + +**AM13. Shipped traverse falls with calibre already.** Probe `probe_track.py` (scratchpad +`imagination-aeth-articulated-r2`, cultcache-py over `GameData/Aetheria.cc` at `acea1aa7`), `WeaponData.Tracking` +per weapon item: Small guns 1.5 to 40 degrees per second (ClearPath 12, Earp 8, Spectra 10, ColdFire 6, the two +point-defence guns 40, RainbowLite 1.5); Medium guns 3 to 20 (Autocannon 4, ChargeBlast 3 and 3.5, Flak 20); the +one Large gun (plight) 2; launchers and the mine launcher +infinity. Twenty-two weapon items in all. + +**AM14. Shipped hardpoints and arcs.** Probe `probe_arcs.py` (same scratchpad): the catalog holds four hulls. Only +the Turret hull authors an arc: its two Ballistic hardpoints, 8 cells each (2x4, the ExtraLarge band), at 360. Ship +hulls carry weapon hardpoints of 2 cells (Energy, Ballistic) and 3 or 6 cells (Launcher), all at `FiringArc` 0, so +the default 120 applies. Cut `caliber-bands` (unlanded) states the bands Small 1-2 cells, Medium 3-4, Large 5-6, +ExtraLarge 7-9 only in its test (AM9). + +**AM15. What CultMath has for the rig today.** `F:\Projects\CultLib\packages\cultmath\src\CultMath`, read +2026-10-10: `quaternion` (`quaternion.cs`) is a plain struct with `identity`, `LookRotation(forward, up)` and float4 +conversions; `math.normalize(quaternion)` (`math.cs:225-235`) is the only quaternion operation. There is no +quaternion product, conjugate, axis-angle constructor, vector rotation by a quaternion, slerp, swing-twist split or +joint clamp. `BoundedLeastSquares.Solve(m, n, a, b, lo, hi, x, workspace, out iterations, ...)` minimises +`||A x - b||^2` in a box, dense and allocation-free, with `WorkspaceLength(n)`. That is the solve AM11 names. + +**AM16. A moving part needs no record of its own.** The joint tree (AM6: bones export as ordinary nodes with their +data-bone extras) already says which moving part a weapon mount rides: the nearest joint above the mount's node. +A tag on that bone adds nothing the hierarchy does not say, and the arc and traverse the link record carried now +live on the hardpoint and the weapon (AM12). + +**AM17. The add-on chain under these cuts is unlanded.** Specs `ships-addon-frame` r5, `ships-addon-mounts` r5 and +`ships-addon-mesh-mounts` r1 have no report; `tools/blender` at `acea1aa7` is the pre-r5 add-on (`_save_layout` +absent; Save Layout writes `FiringArc` from the panel's `firing_arc`, `__init__.py:43`, `:111`, `:174`, `:458`). +The add-on specs below are anchored at `acea1aa7` and name the region to re-find once that chain merges. + +### Model page + +| Kind | Identity | Lifecycle | Authority | +|---|---|---|---| +| Hardpoint arc (`HardpointData.FiringArc`, key 6, unchanged) | The hardpoint's mount id (`Transform`) on its hull. 0 is a fixed mount at `GameplaySettings.FiringArc`. | Authored per hull in the add-on's panel (or Studio for a shipped hull) and written by Save or Package. A package edited after a save changes the arc a run's guns use on Continue; it moves no cell, so it adds nothing to `mod-hull-changed-under-run`. | The ship author. `ShipAuthoringStore.Validate` judges it finite and non-negative and, for a mount on a joint, positive and within the joint chain's yaw reach. `FireControl.ArcFor` is its one reader. | +| Traverse (`WeaponData.Tracking`, key 33, unchanged) | A stat of the weapon item. | Authored per weapon design; any gun goes on any mount (ruling `mount-arc-gun-traverse`). | The weapon designer. `FireControl.TrackingRate` prices it; the rig presenter slews the picture at the same rate. | +| Joint (`ShipJoint` in `ShipAuthoring.Joints`, key 5) | Its bone's `aetheria.id`, which is its GLB node id. Package assigns `joint.` once to a data bone on a weapon mount's chain and keeps it there. | Re-rigging changes only the visual record; every Package and compose judges it again. No save, sim fact or catalog record names a joint. | The author's Blender bone IK settings (lock, limit, min, max), copied by Package. Validate judges the tree and the reach; Bind judges it against the GLB. No joint feeds a sim fact (ruling `rig-is-presentation`). | +| A mount's joint (`ShipAnchor.Joint`, key 5) | On a `weapon-mount` anchor only: the nearest joint above the mount's node; empty for a fixed mount. | Derived at Package from the mount's bone ancestry, as mounted `Position` is derived from the object. Re-parenting in Blender changes it at the next Package. | The Blender hierarchy; Package derives it; Bind refuses a GLB whose hierarchy disagrees. No panel or Studio edit writes it. | +| Rig (the Unity `MountRig`, one per driven joint) | The driven joint's id. | Cache-only: built with the prototype at boot from `ShipModPlan.Rigs` and the rest pose. | Writes only its joints' Transforms. Reads the lead weapon's `GunSolution.Direction` and `TrackingRate`. | + +A driven joint is a joint some weapon-mount anchor names. Its chain is that joint and its ancestors up to, not +including, the nearest ancestor that is itself driven, so a turret on a turret solves as two chains and the outer +chain never moves under the inner gun's solve. + +**C4 (follow-up `c4-ship-element-ids`).** No link element kind exists for variants: a variant that narrows a gun's +arc is a hardpoint tail-slot patch on `FiringArc`, by mount id, which C4 already plans. + +### Authority map + +- **Owner.** The hardpoint owns its arc (`FiringArc`), per hull. The weapon owns its traverse (`Tracking`). The + Blender hierarchy owns which joint a mount rides, derived into `ShipAnchor.Joint` at Package. The bone IK settings + own the joint limits, packaged into `ShipAuthoring.Joints`. FireControl owns the aim (`GunSolution.Direction`). +- **Sim inputs.** `HardpointData.FiringArc` and `WeaponData.Tracking`, as on `acea1aa7`. Nothing the rig adds. +- **Outputs.** `ArcFor`, `InArc`, `AimDirection`, `Solution` and `TrackingRate`, unchanged. Presentation reads the + lead weapon's `GunSolution.Direction` and `TrackingRate`. +- **Derived.** `ShipAnchor.Joint`, from the hierarchy. A driven joint's chain, from the joint tree. Yaw reach, from + the chain's degrees of freedom. The rigs and their `AimChain`s (cache-only). +- **No longer owners.** The link is not a record: `LinkData`, `HullData.Links`, `HardpointData.Link`, the Tag Link + operator and link rows are not built (cuts `links-record`, `links-arc`, `ships-addon-link-rows` withdrawn). + `FiringArc` is not retired (cut `retire-firing-arc` withdrawn). The `articulation` role is cut; a joint is not an + anchor. +- **Forbidden writers.** No joint limit, bone length, IK result or Unity transform feeds `ArcFor`, `TrackingRate` + or any sim fact. No panel or Studio edit writes `ShipAnchor.Joint`. No helper invents an arc. The add-on keeps no + copy of `GameplaySettings.FiringArc`. +- **Shared paths.** Validate's reach check and `ShipModPlan.Rigs` define a chain through one helper. Package and + the gizmo drag derive a mount's place through the same hull_grid functions. + +### Rationale + +**A moving part is a joint, not a record.** The operator ruled the link carries no sim stat (AM12). What remained +of it was a tag and a row holding nothing but an id. The joint tree already says which part a mount rides (AM16), +so the record keeps only what the presenter and the judge need: the joints with their limits, and on each weapon +mount the joint it rides. Moving parts come from armature bones only. A turret built from plain objects is a +one-bone armature; there is no object-link path, so joints have one source. + +**A bone with no free axis is not a joint.** Package turns a chain bone into a joint only when its IK settings +leave at least one degree of freedom. A gun on a fully locked bone has no joint above it and is a fixed mount at +its own arc, the default included. + +**A gun on a joint states its arc.** The judge checks the chain's yaw reach against the arc, and the judge has no +`GameplaySettings` (the default is a game setting, and the add-on keeps no copy of it either). So a weapon whose +mount rides a joint must author `FiringArc` above 0. Weapons on one joint share one `Rotation` and one `FiringArc`, +because the lead weapon's aim moves them all. + +**The reach check is yaw only, and conservative** (unchanged from 2026-10-09). The sim is planar. A chain covers the +arc when the summed ranges of its degrees of freedom whose axis lies within 5 degrees of Ship Root up reach the +arc, capped at 360. Serial parallel axes add, so the sum is exact for the arms the add-on makes. A chain whose yaw +comes only from tilted axes is refused with a message naming the joint. + +**Joint limits come from Blender's bone IK settings, not from Limit Rotation constraints** (unchanged). Blender's +own IK honours `lock_ik_*`, `use_ik_limit_*` and `ik_min_*`/`ik_max_*`; glTF carries no constraint (AM6). + +**The presenter slews at the weapon's traverse.** It turns its aim toward the lead weapon's +`GunSolution.Direction` (already arc-clamped by the sim) at most `FireControl.TrackingRate(lead, entity)` degrees +per second, the rate the sim prices the angular term with. +infinity is no slew. The sim stays stateless. + +**No Aetheria-side solver port.** Ruling `solver-in-gamecult-animation` puts the solve in a pure CultLib package. +The presenter calls that package's API; an Aetheria interface with one implementation would be a second surface +buying nothing a pure, headless-testable library does not already give. + +**Calibre and arc.** The operator's own examples put a heavy gun on a wide arc (the crab's claw) and a light gun in +a narrow port, and her ruling says calibre caps are enforced "if at all". The shipped Turret's ExtraLarge +hardpoints sweep 360 (AM14), and the weapon's traverse already falls with calibre (AM13), which prices a heavy gun +on a wide arc through `TrackingRate`. Question `hardpoint-arc-caps` puts the choice to her with no-cap recommended. +Under no-cap, follow-up `caliber-bands-one-table` is moot: the band table stays in `caliber-bands`' test, its only +reader. Under either cap option the judge reads the bands, so they become one table in ServerShared and that test +reads it. + +**Thrusters on joints stay a follow-up.** A gimballed thruster changes where thrust points, which is a sim fact the +thrust allocator does not model. Validate refuses `ShipAnchor.Joint` on any non-weapon anchor and Bind refuses a +thruster or radiator node under a joint, both naming follow-up `gimballed-thrusters`. + +### The rig's interface to GameCult.Animation and CultMath + +This is what `link-rig-presenter` calls; a later cultlib-gaps pass maps the cuts that provide it. Types and +operations only. Angles are radians at this API (the record's degrees convert once, when the presenter builds its +chain). + +CultMath (`quaternion`, `float3`; pure and allocation-free): +- `math.mul(quaternion a, quaternion b) -> quaternion`, composing in the Unity.Mathematics convention (`mul(a, b)` + applies `b` first). +- `math.rotate(quaternion q, float3 v) -> float3`. +- `math.conjugate(quaternion q) -> quaternion` and `math.inverse(quaternion q) -> quaternion`. +- `quaternion.AxisAngle(float3 unitAxis, float radians) -> quaternion`. +- `math.slerp(quaternion a, quaternion b, float t) -> quaternion` (shortest arc). +- Swing-twist and joint clamps, which the ruling also gives CultMath. The presenter does not call them (its degrees + of freedom are per-axis boxes); GameCult.Animation may: `math.swing_twist(quaternion q, float3 unitTwistAxis, out + quaternion swing, out quaternion twist)`, `math.clamp_hinge(quaternion q, float3 unitAxis, float min, float max) + -> quaternion`, `math.clamp_cone(quaternion swing, float3 unitAxis, float maxAngle) -> quaternion`, + `math.clamp_twist(quaternion twist, float3 unitAxis, float min, float max) -> quaternion`. + +GameCult.Animation (a new CultLib package, netstandard2.1, depending only on CultMath, and published as a UPM package +`org.gamecult.animation` beside `org.gamecult.cultmath` so Aetheria's `Packages/manifest.json` pins it the same way): +- `AimJoint { float3 RestPosition; quaternion RestRotation; }`: rest offset and rotation relative to the previous + joint (the first relative to the chain root's frame). +- `AimDof { int Joint; float3 Axis; float Min; float Max; }`: a unit axis in that joint's local frame and its bounds. +- `AimEffector { float3 Offset; float3 Axis; }`: the muzzle's offset and unit aim axis in the last joint's frame. +- `AimChain.Create(ReadOnlySpan joints, ReadOnlySpan dofs, AimEffector effector) -> AimChain`: + validates (finite values, unit axes within a tolerance, `Min <= Max`, `Joint` ascending and in range) and throws + `ArgumentException` naming the field, never the value. Exposes `JointCount` and `DofCount`. +- `AimChain.WorkspaceLength(in AimChain chain) -> int`. +- `AimChainSolver.Solve(in AimChain chain, ReadOnlySpan current, float3 targetDirection, Span next, + Span workspace) -> AimSolveStatus` (`Converged`, `IterationCap`, `InvalidInput`): turns the effector's aim + axis toward `targetDirection` (chain root frame) by damped least squares over `BoundedLeastSquares`, every angle + in `next` inside its `[Min, Max]`, twist about the aim left free; deterministic, allocation-free, warm-started from + `current`. +- `AimChain.Pose(in AimChain chain, ReadOnlySpan angles, Span localRotations)`: each joint's + local rotation, its rest rotation times the product of its degrees of freedom's axis-angle rotations in DOF order. +- `AimChain.EffectorDirection(in AimChain chain, ReadOnlySpan angles) -> float3`: the aim axis in the chain + root's frame (forward kinematics), for tests and the presenter's settled check. + +Aetheria keeps the glTF-to-Unity axis conversion (`JointAxes.ToLocal`, ServerShared, pure), the slew (planar angle +arithmetic over the existing `math.atan2` and `math.rotate(float2, radians)`), and the `UnityEngine.Quaternion` +conversion at the Transform write. + +### Cut order + +1. `link-rig-record` r3, no dependency: the joint record, the judge's rig rules, Bind's GLB checks, + `ShipModPlan.Rigs`, and the stale FireControl comment. **First.** +2. `ships-addon-gizmos` r6 after `ships-addon-mesh-mounts`: arc fans from the row's `FiringArc`. +3. `ships-addon-link-package` r3 after `link-rig-record`, `ships-addon-mounts` and `ships-addon-mesh-mounts`: + Package writes the joints and each weapon mount's joint. +4. `link-rig-presenter` r2 after `link-rig-record`, `ships-addon-link-package`, and the CultLib release carrying the + interface above (cultlib-gaps), pinned. +5. `link-calibre-judge` r2: blocked on question `hardpoint-arc-caps`; withdrawn if she rules no-cap. + +Withdrawn: `links-record` r1, `links-arc` r1, `retire-firing-arc` r1, `ships-addon-link-rows` r1, and question +`calibre-arc-caps`. + +### Admitted + +2026-10-09 (`imagination-aeth-articulated`): receipts `mind-commit-b0c6b373...`, `mind-commit-c00a16b5...`, +`mind-commit-08fce00f...`, `mind-commit-06e09a45...`. + +2026-10-10 (`imagination-aeth-articulated-r2`): receipts `mind-commit-0b2e932e...` (withdrew links-record r1, links-arc r1, +retire-firing-arc r1, ships-addon-link-rows r1; link-rig-record r3; ships-addon-gizmos r6), +`mind-commit-0c23fa01...` (ships-addon-link-package r2, link-rig-presenter r2, link-calibre-judge r2, question +`hardpoint-arc-caps`, withdrew question `calibre-arc-caps`) and `mind-commit-40788d58...` (ships-addon-link-package r3, +r2's arm smoke pins fixed). context-pack read every anchor SAME at `acea1aa7`. diff --git a/docs/aetheria-release-target.md b/docs/aetheria-release-target.md index 9f8a6b53a..402a6fe88 100644 --- a/docs/aetheria-release-target.md +++ b/docs/aetheria-release-target.md @@ -146,7 +146,9 @@ The typed target carries these as labelled statements. The reasons: (ruling `targeting-sublinear-wanted-not-critical`), and belt rendering through the index. - The faction-play tender loop (`faction-play-4`), drones and munitions, the - Colosseum, articulated mounts. + Colosseum, gimballed thrusters. Articulated weapon mounts are in scope: the arc + is the hardpoint's, traverse is the weapon's, and the moving part is + presentation only (ruling `mount-arc-gun-traverse`). - Narrative: storylets, Ghostlight, Ink beats per boss. - Volumetrics and the nebula backport. - Asura and procedural planet content. diff --git a/docs/research/hull-decals-and-wear-prior-art.md b/docs/research/hull-decals-and-wear-prior-art.md new file mode 100644 index 000000000..e8e62a16a --- /dev/null +++ b/docs/research/hull-decals-and-wear-prior-art.md @@ -0,0 +1,70 @@ +# Hull decals, panel lines and wear layering: prior art + +Eyes pass, 2026-10-10, before the hull shader design fork (operator: "I want tiling materials with global effects on top, plus decals ... Needs a new shader in unity to apply parallax decals for nice panel lines"). Related release-map follow-ups: hull-decals, hull-damage-wear. Facts only; tags mark FETCHED, SEARCH and KNOWLEDGE (unverified). + +# Hull decals and wear: prior-art facts (Eyes, 2026-10-10) + +Target (operator): tiling PBR materials + global per-ship wear/dirt masks + parallax panel-line decals, authored with DECALmachine 2.17 (Blender 5.2). +Tags: FETCHED = page read this session; SEARCH = search-result summary only; KNOWLEDGE = unverified recall; PROJECT = read from origin/master. +Placement: F:\Projects\Aetheria has no docs/research on origin/master, so this file sits in the scratchpad for Self to commit. + +## 5. Project / Unity constraints (PROJECT, origin/master; ProjectSettings are LFS pointers, read via `git lfs smudge`) +- Unity 6000.3.24f1 (ProjectVersion.txt). Built-in pipeline: GraphicsSettings m_CustomRenderPipeline {fileID: 0}. +- Colour space linear: ProjectSettings m_ActiveColorSpace: 1. +- GraphicsSettings: m_DefaultRenderingPath: 1, m_DefaultMobileRenderingPath: 1, tier settings (m_BuildTarget 1, Tier 2) renderingPath: 1, useHDR: 1, useDetailNormalMap: 1, standardShaderQuality 2. (Enum reading, KNOWLEDGE: 1 = Forward.) +- Per-camera override, counted in scenes/prefabs: m_RenderingPath: 1 on 21 cameras, -1 (use project setting) on 5, 3 (Deferred) on 4: Assets/Scenes/ARPG.unity:30582, FieldShieldTest.unity:1695, Main Menu.unity:1258, TestScene.unity:3781. Not checked: which camera ARPG:30582 is, or whether it is the gameplay camera. Effective path is forward for most cameras, deferred on those four. +- QualitySettings: single level "Amazing", pixelLightCount 4, shadows 0, shadowCascades 4, shadowDistance 150, anisotropicTextures 0, textureQuality 0. +- Graphics APIs set: Windows m_APIs 0200000012000000 (KNOWLEDGE decode: 2 = D3D11, 0x12 = Vulkan), Android 0b000000 (KNOWLEDGE: GLES3), iOS Metal; not decoded further. +- GlowFade (Assets/Shaders/GlowFade.shader, "Aetheria/GlowFade") is a CGPROGRAM surface shader: `#pragma surface surf Standard fullforwardshadows noambient vertex:vert`, `#pragma target 3.0`, Cull Off, RenderType Opaque, FallBack Diffuse. + - Samplers declared: _MainTex, _MetallicGlossMap, _OcclusionMap, _FadeTex, _BumpMap (5). All except _FadeTex sampled with uv_MainTex; _FadeTex uses uv_FadeTex. + - Includes "Dither Functions.cginc" and Volumetric.cginc (VolumeSampleColorSimple at vertex, ambientColor into Emission * 10). Sampler use inside Volumetric.cginc not inspected. + - Dither-clip fade via screenPos; multi_compile FLOW_GLOBAL / FLOW_SLOPE / NOISE_SLOPE; per-instance _Fade via UNITY_INSTANCING_BUFFER. Metallic = _Metallic * m.r, Smoothness = _Glossiness * m.a (packed metallic-smoothness). Normal = UnpackNormal(...) * _BumpScale. + - Input struct has no viewDir, worldPos, worldNormal or uv2; only uv_MainTex, uv_FadeTex, screenPos, ambientColor. +- docs/aetheria-release-map.md:358 lists `hull-decals` as a full-game follow-up ("Insignia and damage decals"); :1651 "With a mask texture, painted-in logos can live in the mask; only separate insignia and damage decals remain"; :2140 names `hull-damage-wear` as "the first real Ship parameter". No decal code or shader on origin/master (git grep decal over cs/shader/md hits only that doc). +- Assets/Materials/PBR holds 12 .mat folders (e.g. Carbon_Fibre, Gunmetal_Dark) each with Color, MetallicSmoothness, Normal(GL), Roughness maps. Shader used by those .mat files not determined (LFS pointer parse failed). +- Unity 6.5/6.6 manual banner (FETCHED, docs 6000.6 decals-birp page): Built-In RP "is deprecated and will be made obsolete in a future release", supported incl. bug fixes through the 6.7 LTS lifecycle. That page's only BiRP decal technique is the legacy Projector component. SEARCH: 6.3 LTS docs had no such banner. +- Sampler limits (SEARCH, Unity forum/issue tracker): D3D11 allows 16 active texture samplers per shader (issue tracker "maximum ps_4_0 sampler register index 16 exceeded"); surface shaders spend some internally (lightmaps, shadows); sampling the same texture twice reuses its sampler; a later Unity fix shares some internal samplers inline. No official Unity page stating the number found. Forum mentions GLES 3.0 as the min spec when more are needed. +- Unity Standard shader (FETCHED, StandardShaderMaterialParameterDetail): Secondary Maps = second Albedo and second Normal, usually tiled finer; Detail Mask limits where; "The Secondary normal map channel is more expensive than the primary one". Page does not name the UV set. SEARCH (old forum thread): only detail albedo and normal can use the secondary UV; occlusion cannot. +- Unity built-in has no decal system beyond Projector (FETCHED above). Deferred decals sample = Unity's "RenderingCommandBuffers" project (SEARCH, Unity manual GraphicsCommandBuffers older versions): "each decal is implemented as a box ... affects any geometry inside the box volume", "very similar to how lights are done in deferred shading, except instead of accumulating the lighting we modify the G-buffer textures". Command buffers attach via Camera.AddCommandBuffer at a CameraEvent; in deferred, depth is resolved at AfterGBuffer and shadows at BeforeLighting (SEARCH). The blog post body could not be fetched (404). + +## 1. DECALmachine export (machin3.io/DECALmachine/docs/...) +- Export intro (FETCHED, export_introduction): "DECALmachine 2.0 supports 3 approaches for exporting to Unity, Unreal Engine, etc.": Atlasing, Trim Sheets, Baking. +- Main page (FETCHED, machin3.io/DECALmachine): Atlases "for deferred rendering engines such as Unity HDRP and Unreal Engine"; Trim Sheets "anywhere, including forward renderers like Unity URP"; Baking = decals baked into the parent's UV space. +- Atlas (FETCHED, export_atlas): + - Output: texture set copied to a target folder plus `data.json` (each decal's position in the sheet). Atlas and trim sheet share the data format, so atlased decals appear as "Trims" in the file. Atlased decals get UVs remapped to atlas position; reversible. Channel packing is in the Atlas section of the Decal Export panel. Decal meshes export through the same panel or Blender's native exporter. + - Texture types named: Height, Opacity/masks (example packing: R = diffuse+emissive mask, G = normal mask, B = metallic+roughness mask, from Subset Occlusion / Alpha dropdowns), Base Color, Roughness/Metallic, Normal. + - Unity HDRP: deferred decals blending with the material underneath; Shader Graph decal shaders (Simple/Subset/Panel and Info) on GitHub; Amplify Shader Editor can build equivalents "and add parallax that matches Blender". Unity parallax: possible via ASE using the height map. + - Unity URP: forward, "decals are always opaque", no deferred projectors, trim sheets suggested; "a simple Lit shader with optional alpha mapping is possible, but matching materials is manual"; URP cannot reproduce HDRP material blending. + - Unreal 4.24: mesh decals (not decal actors) for performance; decal-domain material combining base colour/metal/rough/normal and the opacity map; per-channel opacity needs an engine patch; height map into a POM node on the UVs, Bump Offset as cheaper alternative. That section is by a third party. + - Caveats stated: no colour map is produced for normal-mapped decals or atlases (fake AO by blackening normal-only regions in base colour); UE 4.24 mesh decals lack AO. +- Trim sheet export (FETCHED, export_trim_sheet): models with trim detail export via native Blender export; textures via the Atlas export tools after adding one Trim Decal from the sheet and setting the sheet as its atlas; textures can be channel packed. No second-UV or parent-material description on the page. +- Bake (FETCHED, export_bake): "bakes decal textures onto the UV space of their parent objects"; works on objects with decals and at least one UV channel; one or several objects. Fetched page has an empty "Using Bake" heading and no texture list. The caveat "There is an open Blender issue/bug, that limits the usefulness of Baking Decals right now" is SEARCH (search summary of that page and the Superhive, Blender Market, Bazaar listings, which mark baking not recommended). The issue is not named; no source found saying it is fixed in 2.17. Listing: v2.17 supports Blender 4.3 to 5.2 (SEARCH). +- Material matching (FETCHED, match_material, shortcut DV): Simple, Subset, Panel decals, not Info. Source material must end in a Principled BSDF; nodes feeding it are ignored, "simple, parameter-based materials work best". Up to three material components per decal; Re-Apply and asset loaders match only Material and Material 2. Trim sheet materials matchable only if the sheet has no Color, Metallic or Roughness map. Blender-side only. +- Transfer UVs (FETCHED, transfer_uvs): creates a second UV channel on the decal mesh, copies the parent's UVs into it, copies the parent's image textures into the decal material (only UV-mapped image textures wired directly into a Principled BSDF; generated-coordinate parents use Init Generated Coords). Can use the parent's normal map and apply parallax to the transferred textures; works properly "only when the decal's and parent's UV spaces face the same way", which the page says is rarely the case. Page does not say whether this second UV channel is meant for export. +- Parallax (FETCHED, docs/assets): Simple, Subset, Panel decals (Panel inconsistent on the page) use parallax to offset UVs; view-angle dependent; depth into the surface works better than above; one depth level better than several; square decals better than elongated; mirrored decals need flipped UVs; Eevee flicker when a decal sits too close to the surface (fix: Displace modifier height or viewport clip start). Page does not name the height map or its channel. +- Decal types (FETCHED): Simple = normal + parallax, one material component; Subset = normal + parallax, two; Panel = normal, up to three; Info = colour. +- Not found: any documented export path of decal height into a forward hull shader; the atlas docs' only forward answer is URP trim sheets with manual material matching. + +## 2. Shipped-game practice +- Star Citizen (SEARCH, Polycount/Unreal forum threads; no primary talk found): community accounts of floating mesh decals blended over the base material; a secondary blend shader driven by vertex alpha for subtle wear in occluded areas (attributed to an SC developer post); POM on decals is hearsay; decals need an offset to avoid z-fighting; ships too large to bake from one high-poly. Whitepaper link on the Polycount thread not retrieved (polycount.com/discussion/comment/2585025 returned 403). Treat as unconfirmed. +- Unreal mesh decals (SEARCH, forum): POM works on decal actors but not mesh decals per one report; opacity tied to all channels so normal maps get affected; metalness/AO hard on mesh decals. +- Doom 2016 (SEARCH, DF interview, 80.lv, id Tech 6 wiki): opaque geometry and decals use clustered-forward shading; frustum grid of lights, probes and decals looked up in the forward pixel shader; 4000-decal in-view limit; depth prepass + equal test; decals are projected volumes in the cluster structure, not mesh decals. Doom Eternal course notes (advances.realtimerendering.com/s2020/RenderingDoomEternal.pdf, listed, not opened): fully forward, hybrid cluster+tile lists. +- Godot decal docs (SEARCH): a normal-only decal uses the albedo alpha to decide where the surface normal is overridden. Bevy clustered decals (SEARCH, commit): normal maps combined with Whiteout blending (SIGGRAPH 2007), chosen because it is commutative and associative unlike RNM. Both are projected decals, not mesh decals. +- Trim sheets vs decal sheets (SEARCH, Polycount forum answer): trim sheet = textures side by side in one bitmap; decal sheet = same layout overlaid on another texture via alpha edges or buffered rendering (deferred/stencil). Trim sheets suit repeated machinery/pipes. +- Insomniac/Ratchet trim-sheet talks, Halo, Destiny, Titanfall mesh-decal talks: not found (searches returned a members-only GDC lighting talk and a fan "ultimate trim" article on 80.lv). Polycount wiki decals / trim sheet pages: not retrieved. Destiny/Halo/Titanfall technique details: KNOWLEDGE only, unverified, not stated here. + +## 3. Parallax techniques +- SEARCH (Wikipedia, Tatarchuk SI3D06 PDF advances.realtimerendering.com/s2006/Tatarchuk-POM.pdf, listed not opened): POM first published 2005 (Brawley and Tatarchuk, ShaderX3); ray-marches a heightfield per fragment; "substantial GPU time", fragment-bound; changes apparent surface not the silhouette, so a flat outline shows at glancing angles; earlier methods aliased at grazing angles, Tatarchuk's adds adaptive sampling and refined intersection; prism POM (Dachsbacher and Tatarchuk 2007) addresses silhouettes; sensitive to fragment-vs-face normal variation; multi-pass use degrades from height mismatch. Step counts not surfaced. +- KNOWLEDGE (unverified): simple parallax mapping with offset limiting costs one extra height sample and a view-vector offset; steep/relief/POM variants take N linear steps (commonly 8-32) plus refinement; all need a tangent-space view vector; offset UVs can leave a decal's alpha/UV island at its edge. +- Alternatives named in sources: normal-map-only lines (Godot normal-only decal; DECALmachine Panel/Simple decals are normal-mapped); Unreal Bump Offset as cheaper than POM (FETCHED, DECALmachine atlas page); real geometry insets ("limited use of actual geometry" for silhouettes, SEARCH). + +## 4. Layering tiling material + global wear masks in built-in +- Unity Standard detail maps and detail mask: see section 5. +- Surface-shader extension pattern: GlowFade (PROJECT) shows surf function, extra samplers, Input struct fields. KNOWLEDGE (unverified): `uv2_Name` in Input reads UV1; `viewDir` and `worldPos` are available Input members. +- Height-blended material layers, per-ship curvature/AO mask packed RGB on UV1: no source consulted this session. KNOWLEDGE (unverified): mask-driven lerp of albedo/smoothness/normal with optional height-based contrast; mask on a unique non-overlapping UV channel because tiling UV0 repeats. +- Hand-retopologised hulls with deliberate seams: no source consulted on seam handling for tiling materials or triplanar alternatives. + +## Gaps for Self +- Which camera runs deferred in ARPG.unity:30582 and whether gameplay uses it. +- Shader assigned to the 12 PBR .mat files; sampler use in Volumetric.cginc. +- Primary sources not opened: Tatarchuk PDF, Doom Eternal PDF, Unity RenderingCommandBuffers project, SC whitepaper, identity of the DECALmachine Blender bug. diff --git a/tests/Aetheria.Shared.Tests/BallisticFlightTests.cs b/tests/Aetheria.Shared.Tests/BallisticFlightTests.cs new file mode 100644 index 000000000..79c787a74 --- /dev/null +++ b/tests/Aetheria.Shared.Tests/BallisticFlightTests.cs @@ -0,0 +1,534 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +using System; +using System.Linq; +using System.Reflection; +using UniRx; +using Xunit; +using static CultMath.math; +using float2 = CultMath.float2; +using float3 = CultMath.float3; +using int2 = CultMath.int2; + +// Ballistic flight: a round's flight is presentation (ruling projectile-flight-is-presentation). The simulation publishes +// the facts (the PendingShot's frozen origin, direction, speed, fire time and arrival, the outcome with its commit tick, +// impact cell and burst point) and DrawAhead's statics draw the round from them: Round the one statement of where a round +// is at a sim time, Impact where a hit lands on the target's drawn pose, RoundEnd and RoundOver when its drawn flight +// ends. FireControl owns none of it (ruling direct-arrival-keep-timing: damage keeps landing at the arrival time, the +// hit is drawn at its cell). Unity's Projectile calls Round and integrates nothing, so these tests pin the drawing +// against first principles (the shooter's position, the aim, the authored velocity and range, the hull's own frame) +// rather than against the code that computes it. Shares the Cut 12.4 engagement fixture. +public sealed partial class FireControlCut124Tests +{ + private const float BallisticSpeed = 20f; + + // A no-lock proximity round: flies the aim line (2,1) to max range, bursting there. + private Engagement FireBurstRound(out float3 origin) + { + var e = Build(TestSettings(), SolidShape(5, 4), velocity: BallisticSpeed, fuse: WeaponFuse.Proximity, blastRadius: 4f, + damage: 100f, weaponRange: NoLockRange); + Aim(e, float2(2, 1)); + e.Shooter.SetTarget(TargetRef.None); + origin = e.Shooter.Position; + FireControl.Fire(e.Weapon, e.WeaponItem, e.Shooter); + return e; + } + + // What the sim publishes for a shot, as a presenter holds it: only the result (no impact, no burst point). + private static ShotOutcome Known(in PendingShot shot, ShotResult result) => + new ShotOutcome { ShotId = shot.ShotId, Result = result, ArrivalIn = max(0f, shot.ArrivalTime - shot.CommitTime) }; + + // A hit on a cell of the target, committed at `commit`: ArrivalIn is how long after the commit damage lands. + private static ShotOutcome Hit(in PendingShot shot, Entity target, int2 cell, float commit) => + new ShotOutcome { ShotId = shot.ShotId, Result = ShotResult.Hit, Target = target, Cell = cell, ArrivalIn = shot.ArrivalTime - commit }; + + // The hull's occupied coordinate farthest from its centre of mass: a cell well off the target's position. + private static int2 FarCell(Engagement e) => + e.HullData.Shape.Coordinates.OrderByDescending(c => length((float2) c - e.HullData.Shape.CenterOfMass)).First(); + + [Fact] + public void ARoundIsDrawnOnItsFiredLine() + { + // Burst round: leaves the shooter, is where its own speed puts it a second in, and ends on the burst point. + var e = FireBurstRound(out var origin); + ShotOutcome outcome = null; + PendingShot burst = default; + using var c = e.Zone.ShotCommitted.Subscribe(o => + { + outcome = o; + e.Zone.TryGetShot(o.ShotId, out burst); + }); + e.Zone.Update(.01f); + Assert.NotNull(outcome); + Assert.True(outcome.HasBurstPoint); + var aim = normalize(float2(2, 1)); + // The shooter moves on after the round left: the line is the one frozen at Fire, not one drawn from where it is now. + e.Shooter.Position += float3(7, 0, 3); + + var start = DrawAhead.Round(burst, null, burst.FireOrigin, 0f, burst.FireTime, 0f); + Assert.Equal(origin.x, start.x, 3); + Assert.Equal(origin.z, start.z, 3); + + var second = DrawAhead.Round(burst, null, burst.FireOrigin, 0f, burst.FireTime + 1f, 0f); + Assert.Equal(origin.x + aim.x * BallisticSpeed, second.x, 3); + Assert.Equal(origin.z + aim.y * BallisticSpeed, second.z, 3); + + foreach (var known in new[] { null, outcome }) + foreach (var later in new[] { 0f, 1f, 50f }) + { + var arrival = DrawAhead.Round(burst, known, burst.FireOrigin, 0f, burst.ArrivalTime + later, 0f); + Assert.Equal(burst.BurstPosition.x, arrival.x, 3); + Assert.Equal(burst.BurstPosition.z, arrival.z, 3); + } + + // Past the weapon's range it is held at the range point, however late it is asked. + var held = DrawAhead.Round(burst, Known(burst, ShotResult.Miss), burst.FireOrigin, 0f, burst.FireTime + NoLockRange / BallisticSpeed + 50f, 0f); + Assert.Equal(origin.x + aim.x * NoLockRange, held.x, 3); + Assert.Equal(origin.z + aim.y * NoLockRange, held.z, 3); + // Before it was fired it is still at the origin, not behind it. + var before = DrawAhead.Round(burst, null, burst.FireOrigin, 0f, burst.FireTime - 5f, 0f); + Assert.Equal(origin.x, before.x, 3); + Assert.Equal(origin.z, before.z, 3); + + // Direct round at a stationary target 100 ahead (+z): arrives on the target, and a miss would fly on to the weapon's range. + var d = Build(TestSettings(), SolidShape(5, 4), velocity: BallisticSpeed, weaponRange: 1000f); + var dOrigin = d.Shooter.Position; + FireControl.Fire(d.Weapon, d.WeaponItem, d.Shooter); + var direct = SafeAssert.OnlyShot(d.Zone); + // A round not known to miss waits at its arrival point however late it is asked. + foreach (var at in new[] { direct.ArrivalTime, direct.FireTime + 99f }) + { + var waiting = DrawAhead.Round(direct, null, direct.FireOrigin, 0f, at, 0f); + Assert.Equal(d.Target.Position.x, waiting.x, 2); + Assert.Equal(d.Target.Position.z, waiting.z, 2); + } + Assert.Equal(dOrigin.z + 100f / 2f, DrawAhead.Round(direct, null, direct.FireOrigin, 0f, direct.FireTime + 2.5f, 0f).z, 2); + var heldDirect = DrawAhead.Round(direct, Known(direct, ShotResult.Miss), direct.FireOrigin, 0f, direct.FireTime + 1000f / BallisticSpeed + 99f, 0f); + Assert.Equal(dOrigin.z + 1000f, heldDirect.z, 2); + } + + // A round with no speed (the weapon authors Velocity 0, or effectively 0) does not fly: it is at its origin at any + // time, and is not stretched along its line by a vanishing speed over the range it would need forever to cover. + [Fact] + public void ARoundWithNoSpeedStaysAtItsOrigin() + { + var e = Build(TestSettings(), SolidShape(5, 4), velocity: .005f, weaponRange: 1000f); + var origin = e.Shooter.Position; + FireControl.Fire(e.Weapon, e.WeaponItem, e.Shooter); + var shot = SafeAssert.OnlyShot(e.Zone); + + var late = DrawAhead.Round(shot, Known(shot, ShotResult.Miss), shot.FireOrigin, 0f, shot.FireTime + 5000f, 0f); + Assert.Equal(origin.x, late.x, 3); + Assert.Equal(origin.z, late.z, 3); + } + + [Fact] + public void SpeedIsFrozenAtFire() + { + var e = FireBurstRound(out var origin); + var shot = SafeAssert.OnlyShot(e.Zone); + Assert.Equal(BallisticSpeed, shot.Speed, 4); + + // The stat changes after the round left, and the weapon re-reads it. + ((InstantWeaponData) e.Weapon.WeaponData).Velocity = Constant(BallisticSpeed * 5f); + e.Weapon.Execute(0f); + Assert.Equal(BallisticSpeed * 5f, e.Weapon.Velocity, 4); + + var after = SafeAssert.OnlyShot(e.Zone); + Assert.Equal(BallisticSpeed, after.Speed, 4); + var aim = normalize(float2(2, 1)); + var at = DrawAhead.Round(after, null, after.FireOrigin, 0f, after.FireTime + 1f, 0f); + Assert.Equal(origin.x + aim.x * BallisticSpeed, at.x, 3); + Assert.Equal(origin.z + aim.y * BallisticSpeed, at.z, 3); + } + + [Fact] + public void ARoundIsPure() + { + var e = FireDirectRound(20f, 1000f); + var shot = SafeAssert.OnlyShot(e.Zone); + e.Target.Direction = normalize(float2(1, 2)); + e.Target.TurnRate = 3f; + var time = e.Zone.Time; + var entities = e.Zone.Entities.ToList(); + var positions = entities.Select(x => x.Position).ToList(); + var velocities = entities.Select(x => x.Velocity).ToList(); + var directions = entities.Select(x => x.Direction).ToList(); + var turnRates = entities.Select(x => x.TurnRate).ToList(); + + var barrel = shot.FireOrigin + float3(1, .5f, -2); + var cell = FarCell(e); + foreach (var known in new[] { null, Known(shot, ShotResult.Miss), Hit(shot, e.Target, cell, shot.CommitTime) }) + for (var i = 0; i < 25; i++) + { + var at = shot.FireTime + i * .37f; + DrawAhead.Round(shot, known, barrel, .1f, at, .01f); + DrawAhead.RoundOver(shot, known, at, .01f); + DrawAhead.RoundEnd(shot, known?.Result); + DrawAhead.Impact(e.Target, cell, .01f * i); + } + + Assert.Equal(time, e.Zone.Time); + Assert.True(e.Zone.PendingShots.Count == 1 && e.Zone.PendingShots[0].Equals(shot), "the pending shot changed"); + Assert.True(e.Zone.Entities.SequenceEqual(entities), "the zone's entities changed"); + Assert.True(entities.Select(x => x.Position).SequenceEqual(positions), "an entity moved"); + Assert.True(entities.Select(x => x.Velocity).SequenceEqual(velocities), "an entity's velocity changed"); + Assert.True(entities.Select(x => x.Direction).SequenceEqual(directions), "an entity turned"); + Assert.True(entities.Select(x => x.TurnRate).SequenceEqual(turnRates), "an entity's turn rate changed"); + } + + // The weapon's Range is frozen with the rest: a round that misses flies on to the range it left with, whatever the stat + // becomes after. + [Fact] + public void RangeIsFrozenAtFire() + { + var e = FireBurstRound(out var origin); + var shot = SafeAssert.OnlyShot(e.Zone); + Assert.Equal(NoLockRange, shot.MaxRange, 4); + var endBefore = DrawAhead.RoundEnd(shot, ShotResult.Miss); + + // The stat changes after the round left, and the weapon re-reads it. + ((InstantWeaponData) e.Weapon.WeaponData).Range = Constant(NoLockRange * 5f); + e.Weapon.Execute(0f); + Assert.Equal(NoLockRange * 5f, e.Weapon.Range, 4); + + var after = SafeAssert.OnlyShot(e.Zone); + Assert.Equal(NoLockRange, after.MaxRange, 4); + Assert.Equal(endBefore, DrawAhead.RoundEnd(after, ShotResult.Miss), 4); + var aim = normalize(float2(2, 1)); + var held = DrawAhead.Round(after, Known(after, ShotResult.Miss), after.FireOrigin, 0f, after.FireTime + 1000f, 0f); + Assert.Equal(origin.x + aim.x * NoLockRange, held.x, 3); + Assert.Equal(origin.z + aim.y * NoLockRange, held.z, 3); + } + + // A direct round at a stationary target `targetRange` ahead (+z) of the shooter, weapon Range `range`, at `speed`; + // or, with atNothing, the same weapon fired along +z at no target. + private Engagement FireDirectRound(float speed, float range, float targetRange = 100f, bool atNothing = false) + { + var e = Build(TestSettings(), SolidShape(5, 4), velocity: speed, weaponRange: range, targetRange: targetRange); + if (atNothing) + { + Aim(e, float2(0, 1)); + e.Shooter.SetTarget(TargetRef.None); + } + FireControl.Fire(e.Weapon, e.WeaponItem, e.Shooter); + return e; + } + + // A hit, a burst or an outcome not yet known ends at the round's arrival; a miss flies on to the weapon's range and + // never ends short of its own arrival; only a published miss is over by the clock. + [Fact] + public void RoundEndAndRoundOverAreTheOutcomesEnd() + { + foreach (var speed in new[] { 20f, 200f }) + { + var d = FireDirectRound(speed, 1000f); + var direct = SafeAssert.OnlyShot(d.Zone); + Assert.Equal(direct.FireTime + 100f / speed, direct.ArrivalTime, 4); + Assert.Equal(direct.FireTime + 100f / speed, DrawAhead.RoundEnd(direct, null), 4); + Assert.Equal(direct.FireTime + 100f / speed, DrawAhead.RoundEnd(direct, ShotResult.Hit), 4); + Assert.Equal(direct.FireTime + 100f / speed, DrawAhead.RoundEnd(direct, ShotResult.Burst), 4); + Assert.Equal(direct.FireTime + 1000f / speed, DrawAhead.RoundEnd(direct, ShotResult.Miss), 4); + + Assert.False(DrawAhead.RoundOver(direct, null, direct.FireTime + 10000f, 0f)); + foreach (var result in new[] { ShotResult.Hit, ShotResult.Burst }) + Assert.False(DrawAhead.RoundOver(direct, Known(direct, result), direct.FireTime + 10000f, 0f)); + var missEnd = direct.FireTime + 1000f / speed; + Assert.False(DrawAhead.RoundOver(direct, Known(direct, ShotResult.Miss), missEnd - .01f, 0f)); + Assert.True(DrawAhead.RoundOver(direct, Known(direct, ShotResult.Miss), missEnd, 0f)); + + // A target beyond the weapon's range: a miss never ends short of its own arrival. + var far = FireDirectRound(speed, 100f, targetRange: 150f); + var beyond = SafeAssert.OnlyShot(far.Zone); + Assert.Equal(beyond.FireTime + 150f / speed, beyond.ArrivalTime, 4); + Assert.Equal(beyond.FireTime + 150f / speed, DrawAhead.RoundEnd(beyond, ShotResult.Miss), 4); + + // A round fired at nothing arrives where it left, and a miss flies on to the range. + var none = FireDirectRound(speed, 100f, atNothing: true); + var nothing = SafeAssert.OnlyShot(none.Zone); + Assert.Equal(nothing.FireTime, nothing.ArrivalTime, 4); + Assert.Equal(nothing.FireTime, DrawAhead.RoundEnd(nothing, null), 4); + Assert.Equal(nothing.FireTime + 100f / speed, DrawAhead.RoundEnd(nothing, ShotResult.Miss), 4); + + } + } + + // The frame falls Lead (< one step) after the last step, so a hit or burst is drawn at Zone.Time + Lead; it must stay + // on the arrival point until the sim resolves it, and only a published miss flies on. + [Theory] + [InlineData(20f)] + [InlineData(200f)] + public void ARoundIsDrawnNoFurtherThanItsArrivalUntilItMisses(float speed) + { + var e = FireDirectRound(speed, 1000f); + var shot = SafeAssert.OnlyShot(e.Zone); + var origin = shot.FireOrigin; + const float step = 1f / 30f; + + foreach (var lead in new[] { 0f, step / 2f, .999f * step }) + { + var waiting = DrawAhead.Round(shot, null, shot.FireOrigin, 0f, shot.ArrivalTime, lead); + Assert.Equal(origin.x, waiting.x, 3); + Assert.Equal(origin.z + 100f, waiting.z, 3); + var missed = DrawAhead.Round(shot, Known(shot, ShotResult.Miss), shot.FireOrigin, 0f, shot.ArrivalTime, lead); + Assert.Equal(origin.x, missed.x, 3); + Assert.Equal(origin.z + 100f + lead * speed, missed.z, 3); + } + + for (var time = shot.FireTime; time <= shot.ArrivalTime + 1f; time += 1f / 144f) + { + var drawn = DrawAhead.Round(shot, null, shot.FireOrigin, 0f, time, 0f); + Assert.True(drawn.z - origin.z <= 100f + 1e-3f, "the round was drawn past its arrival point"); + } + } + + // A no-lock contact round stopped by a hull short of max range has its arrival shortened at the commit; the + // simulation writes the record back before ShotCommitted fires, so a presenter re-reading it there draws the stop + // at the committed arrival, not the fire-time copy's. + [Fact] + public void TheCommittedRecordCarriesTheCommittedArrival() + { + var e = Build(TestSettings(), SolidShape(5, 4), velocity: 20f, fuse: WeaponFuse.Contact, blastRadius: 4f, damage: 100f, + weaponRange: NoLockRange); + e.Shooter.SetTarget(TargetRef.None); + Aim(e, float2(0, 1)); + AddShip(e, PointAlong(e, float2(0, 1), 25f), 1f, 300); + ShotOutcome outcome = null; + PendingShot record = default; + var found = false; + using var c = e.Zone.ShotCommitted.Subscribe(o => + { + outcome = o; + found = e.Zone.TryGetShot(o.ShotId, out record); + }); + + FireControl.Fire(e.Weapon, e.WeaponItem, e.Shooter); + var fired = SafeAssert.OnlyShot(e.Zone); + Assert.False(fired.Committed); + e.Zone.Update(.01f); + + Assert.True(found, "the committed record was not readable when ShotCommitted fired"); + Assert.True(record.Committed); + Assert.Equal(fired.FireTime + 3f, fired.ArrivalTime, 2); + Assert.Equal(fired.FireTime + 1.05f, record.ArrivalTime, 2); + Assert.True(record.ArrivalTime < fired.ArrivalTime); + + var stop = DrawAhead.Round(record, outcome, record.FireOrigin, 0f, record.ArrivalTime, 0f); + var expected = outcome.HasBurstPoint + ? outcome.BurstPoint + : record.FireOrigin.xz + record.TravelDirection * (20f * (record.ArrivalTime - record.FireTime)); + Assert.Equal(expected.x, stop.x, 3); + Assert.Equal(expected.y, stop.z, 3); + foreach (var later in new[] { 0f, .5f, 5f }) + { + var drawn = DrawAhead.Round(record, outcome, record.FireOrigin, 0f, record.ArrivalTime + later, 0f); + Assert.Equal(expected.x, drawn.x, 3); + Assert.Equal(expected.y, drawn.z, 3); + } + } + + // The barrel is only where the round is first seen: its offset from the sim line decays linearly to nothing over + // blendTime sim seconds from FireTime. + [Theory] + [InlineData(.1f)] + [InlineData(.25f)] + public void TheBarrelBlendDecaysOnSimTime(float blend) + { + var e = FireBurstRound(out var origin); + var shot = SafeAssert.OnlyShot(e.Zone); + var aim = normalize(float2(2, 1)); + var offset = float3(1, .5f, -2); + var barrel = shot.FireOrigin + offset; + float3 Line(float dt) => float3(origin.x + aim.x * BallisticSpeed * dt, origin.y, origin.z + aim.y * BallisticSpeed * dt); + + void Close(float3 want, float3 got) + { + Assert.Equal(want.x, got.x, 3); + Assert.Equal(want.y, got.y, 3); + Assert.Equal(want.z, got.z, 3); + } + + Close(barrel, DrawAhead.Round(shot, null, barrel, blend, shot.FireTime, 0f)); + Close(Line(blend / 2f) + offset * .5f, DrawAhead.Round(shot, null, barrel, blend, shot.FireTime + blend / 2f, 0f)); + Close(Line(blend), DrawAhead.Round(shot, null, barrel, blend, shot.FireTime + blend, 0f)); + Close(Line(2f * blend), DrawAhead.Round(shot, null, barrel, blend, shot.FireTime + 2f * blend, 0f)); + Close(Line(0f), DrawAhead.Round(shot, null, barrel, 0f, shot.FireTime, 0f)); + } + + // Placement depends on sim time alone: any history of frames walked to a checkpoint draws what a fresh call draws, which + // is the frozen line at the frozen speed. + [Theory] + [InlineData(20f)] + [InlineData(200f)] + public void ARoundIsAFunctionOfSimTime(float speed) + { + var e = FireDirectRound(speed, 1000f); + var shot = SafeAssert.OnlyShot(e.Zone); + var checkpoints = new[] { .05f, .3f, 1f, 3f }; + var histories = new[] { new[] { 1f / 144f }, new[] { 1f / 30f }, new[] { 1f / 144f, 1f / 30f, 1f / 90f } }; + var miss = Known(shot, ShotResult.Miss); + + foreach (var frames in histories) + { + var elapsed = 0f; + var frame = 0; + foreach (var checkpoint in checkpoints) + { + while (elapsed + 1e-4f < checkpoint) + { + elapsed = min(checkpoint, elapsed + frames[frame++ % frames.Length]); + DrawAhead.Round(shot, miss, shot.FireOrigin, .1f, shot.FireTime + elapsed, 0f); + } + var drawn = DrawAhead.Round(shot, miss, shot.FireOrigin, .1f, shot.FireTime + checkpoint, 0f); + var fresh = DrawAhead.Round(shot, miss, shot.FireOrigin, .1f, shot.FireTime + checkpoint, 0f); + // A frame that falls `lead` after the step draws what the sim time lead later would. + foreach (var lead in new[] { 1f / 60f, 1f / 90f }) + { + var ahead = DrawAhead.Round(shot, miss, shot.FireOrigin, .1f, shot.FireTime + checkpoint - lead, lead); + Assert.Equal(fresh.x, ahead.x, 3); + Assert.Equal(fresh.y, ahead.y, 3); + Assert.Equal(fresh.z, ahead.z, 3); + } + Assert.Equal(fresh.z, drawn.z, 3); + Assert.Equal(shot.FireOrigin.z + speed * min(checkpoint, 1000f / speed), drawn.z, 3); + Assert.Equal(shot.FireOrigin.x, drawn.x, 3); + Assert.Equal(shot.FireOrigin.y, drawn.y, 3); + } + } + } + + // A hit ends at its impact cell on the target's drawn pose when damage lands, not at the arrival point of the line + // frozen at Fire (ruling direct-arrival-keep-timing): the target has moved and turned since, and is drawn ahead by its + // last step's velocity and turn. The expected point is computed apart from DrawAhead, by moving the entity itself and + // asking its own schematic frame (Entity.ToWorldPoint) where the cell is. + [Theory] + [InlineData(20f)] + [InlineData(200f)] + public void AHitEndsAtItsImpactCellOnTheTargetsDrawnPose(float speed) + { + var e = Build(TestSettings(), SolidShape(5, 4), velocity: speed, weaponRange: 1000f); + e.Target.Velocity = float2(10, 0); + FireControl.Fire(e.Weapon, e.WeaponItem, e.Shooter); + var shot = SafeAssert.OnlyShot(e.Zone); + Assert.True(shot.TravelDirection.x > 0f, "the round did not lead the target"); + const float step = 1f / 30f; + + e.Target.Position += float3(40, 0, 0); + e.Target.Direction = normalize(float2(1, 2)); + e.Target.TurnRate = 3f; + var cell = FarCell(e); + var hit = Hit(shot, e.Target, cell, shot.CommitTime); + var arrivalOnTheLine = DrawAhead.Round(shot, null, shot.FireOrigin, 0f, shot.ArrivalTime, 0f); + var cellSize = e.Items.GameplaySettings.SchematicCellSize; + + foreach (var lead in new[] { 0f, step / 2f, .999f * step }) + { + var position = e.Target.Position; + var direction = e.Target.Direction; + e.Target.Position += float3(e.Target.Velocity.x, 0, e.Target.Velocity.y) * lead; + e.Target.Direction = mul(e.Target.Direction, CultMath.float2x2.Rotate(e.Target.TurnRate * lead)); + var cellPoint = e.Target.ToWorldPoint((float2) cell); + var expected = float3(cellPoint.x, e.Target.Position.y, cellPoint.y); + e.Target.Position = position; + e.Target.Direction = direction; + + Assert.True(length((expected - arrivalOnTheLine).xz) > cellSize, "the fixture put the cell on the frozen line's arrival point"); + var impact = DrawAhead.Impact(e.Target, cell, lead); + Assert.Equal(expected.x, impact.x, 3); + Assert.Equal(expected.y, impact.y, 3); + Assert.Equal(expected.z, impact.z, 3); + foreach (var simTime in new[] { shot.ArrivalTime, shot.ArrivalTime + .5f }) + { + var drawn = DrawAhead.Round(shot, hit, shot.FireOrigin, .1f, simTime, lead); + Assert.Equal(expected.x, drawn.x, 3); + Assert.Equal(expected.y, drawn.y, 3); + Assert.Equal(expected.z, drawn.z, 3); + } + } + } + + // A hit leaves its frozen line at the commit tick and steers onto its end by the time damage lands: before the commit it + // is on the line, half way through the steer it is half way to the impact cell, and a frame drawn ahead by the clock's + // lead places the round where the sim time that much later would. + [Fact] + public void ASteeredRoundLeavesItsLineAtTheCommit() + { + var e = FireDirectRound(20f, 1000f); + var shot = SafeAssert.OnlyShot(e.Zone); + Assert.Equal(shot.FireTime + 5f, shot.ArrivalTime, 3); + var cell = FarCell(e); + var commit = shot.ArrivalTime - 2f; + var hit = Hit(shot, e.Target, cell, commit); + + foreach (var t in new[] { commit - 1f, commit }) + { + var steered = DrawAhead.Round(shot, hit, shot.FireOrigin, 0f, t, 0f); + var line = DrawAhead.Round(shot, null, shot.FireOrigin, 0f, t, 0f); + Assert.Equal(line.x, steered.x, 3); + Assert.Equal(line.y, steered.y, 3); + Assert.Equal(line.z, steered.z, 3); + } + + var m = commit + 1f; + var onTheLine = DrawAhead.Round(shot, null, shot.FireOrigin, 0f, m, 0f); + var end = DrawAhead.Impact(e.Target, cell, 0f); + Assert.True(length((end - onTheLine).xz) > 1f, "the fixture put the impact cell on the line"); + var halfway = DrawAhead.Round(shot, hit, shot.FireOrigin, 0f, m, 0f); + Assert.Equal(onTheLine.x + (end.x - onTheLine.x) * .5f, halfway.x, 3); + Assert.Equal(onTheLine.y + (end.y - onTheLine.y) * .5f, halfway.y, 3); + Assert.Equal(onTheLine.z + (end.z - onTheLine.z) * .5f, halfway.z, 3); + + var ahead = DrawAhead.Round(shot, hit, shot.FireOrigin, 0f, m - .02f, .02f); + Assert.Equal(halfway.x, ahead.x, 3); + Assert.Equal(halfway.y, ahead.y, 3); + Assert.Equal(halfway.z, ahead.z, 3); + } + + // The sim states facts and draws nothing: no drawing function, and no lead, blend or barrel, lives in FireControl; + // those belong to DrawAhead, the presentation statics. + [Fact] + public void FireControlHasNoDrawingFunctions() + { + const BindingFlags all = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly; + var methods = typeof(FireControl).GetMethods(all).Cast().Concat(typeof(FireControl).GetConstructors(all)).ToList(); + Assert.NotEmpty(methods); + foreach (var method in methods) + { + Assert.False(method.Name.StartsWith("Round") || method.Name.StartsWith("Draw"), "FireControl has a drawing function: " + method.Name); + foreach (var parameter in method.GetParameters()) + Assert.False(new[] { "lead", "blendTime", "barrel" }.Contains(parameter.Name), "FireControl takes a drawing parameter: " + parameter.Name); + } + + foreach (var name in new[] { "Round", "Impact", "RoundOver", "RoundEnd" }) + Assert.NotNull(typeof(DrawAhead).GetMethod(name, BindingFlags.Public | BindingFlags.Static)); + } + + // A proximity round at a target that recedes faster than the round closes bursts at the weapon's range, pulled back + // along its line, while it arrives when it has flown the distance the target was fired at: its burst point is not + // the line at its arrival. The end is the sim's burst point, so a presenter that ended at the arrival line would + // end the tracer short of where the round burst. + [Fact] + public void ABurstRoundEndsAtItsBurstPointNotItsArrivalLine() + { + var e = Build(TestSettings(), SolidShape(5, 4), velocity: BallisticSpeed, fuse: WeaponFuse.Proximity, blastRadius: 4f, + damage: 100f, weaponRange: NoLockRange, targetRange: 50f); + e.Target.Velocity = float2(0, 15); + ShotOutcome outcome = null; + using var c = e.Zone.ShotCommitted.Subscribe(o => outcome = o); + FireControl.Fire(e.Weapon, e.WeaponItem, e.Shooter); + var origin = SafeAssert.OnlyShot(e.Zone).FireOrigin; + for (var i = 0; i < 100 && outcome == null; i++) e.Zone.Update(.05f); + Assert.NotNull(outcome); + Assert.True(outcome.HasBurstPoint); + Assert.True(e.Zone.TryGetShot(outcome.ShotId, out var record)); + + Assert.Equal(origin.x, outcome.BurstPoint.x, 3); + Assert.Equal(origin.z + NoLockRange, outcome.BurstPoint.y, 3); + Assert.Equal(origin.z + 50f, DrawAhead.Round(record, null, record.FireOrigin, 0f, record.ArrivalTime, 0f).z, 3); + var stop = DrawAhead.Round(record, outcome, record.FireOrigin, 0f, record.ArrivalTime, 0f); + Assert.Equal(outcome.BurstPoint.x, stop.x, 3); + Assert.Equal(outcome.BurstPoint.y, stop.z, 3); + } +} diff --git a/tests/Aetheria.Shared.Tests/ConsumableTests.cs b/tests/Aetheria.Shared.Tests/ConsumableTests.cs new file mode 100644 index 000000000..3e2d89db7 --- /dev/null +++ b/tests/Aetheria.Shared.Tests/ConsumableTests.cs @@ -0,0 +1,266 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using CultMath; +using GameCult.Caching; +using Xunit; + +// A consumable is a cargo item with a timed effect (aetheria-release CS-R1). Its modifiers exist in the resolver +// exactly while its effect is active: the host (Entity) initialises the effect's behaviours at activation and +// disposes them at expiry, and ItemManager.CreateInstance is the one way a lot becomes a ConsumableItem. +public sealed class ConsumableTests : IDisposable +{ + private readonly string _root = Path.Combine(Path.GetTempPath(), "aetheria-consumable-" + Guid.NewGuid().ToString("N")); + private string Catalog => Path.Combine(_root, "Aetheria.cc"); + private static readonly int2 EngineCell = new int2(0, 0); + private static readonly int2 HoldCell = new int2(1, 1); + + public ConsumableTests() => Directory.CreateDirectory(_root); + public void Dispose() => Directory.Delete(_root, true); + + private sealed class Rig + { + public CultCache Cache; + public ItemManager Items; + public Ship Ship; + public EquippedItem Engine; + public PerformanceStat Thrust; + public ConsumableItemData Consumable; + public ConsumableItemData Other; // a second, unrelated non-stackable design + public Func NewEngine; + public CultRecordKey Key; + public CultRecordRef Maker; + + public ConsumableItem Mint(ConsumableItemData design = null) => + Assert.IsType(Items.CreateInstance(Items.CreateLot(design ?? Consumable, Maker, .5f))); + public EquippedCargoBay Hold => Ship.CargoBays.Single(); + public int InCargo => Hold.Cargo.Keys.Count(i => i is ConsumableItem); + } + + // A ship with a thruster (Thrust 10) and a hold; the consumable doubles ThrusterData.Thrust for one second. + private Rig Build(bool stackable = false) + { + var thrust = new PerformanceStat { Min = 10, Max = 10 }; + var cache = AetheriaStores.Open(Catalog, catalogWritable: true); + cache.Upsert(new TestCatalogGlobal { Name = "Temperament" }); + cache.Upsert(new Faction { Name = "Maker", ShortName = "MKR" }); + var hullShape = new Shape(3, 3); + foreach (var cell in hullShape.AllCoordinates) hullShape[cell] = true; + var hullRef = cache.Upsert(new HullData + { + Name = "Skiff", HullType = HullType.Ship, Shape = hullShape, Durability = 10, + Hardpoints = { new HardpointData { Type = HardpointType.Sensors, Position = EngineCell, Shape = new Shape() } } + }); + var engineRef = cache.Upsert(new GearData + { + Name = "Engine", Hardpoint = HardpointType.Sensors, Shape = new Shape(), Durability = 10, + Behaviors = { new ThrusterData { Thrust = thrust } } + }); + var interior = new Shape(2, 1); // room for two consumables + foreach (var cell in interior.AllCoordinates) interior[cell] = true; + var holdRef = cache.Upsert(new CargoBayData { Name = "Hold", Shape = new Shape(), InteriorShape = interior, Durability = 10 }); + var consumableRef = cache.Upsert(new ConsumableItemData + { + Name = "Overdrive", Duration = 1f, Stackable = stackable, Shape = new Shape(), + Behaviors = + { + new StatModifierData + { + Stat = new StatReference { Target = nameof(ThrusterData), Stat = nameof(ThrusterData.Thrust) }, + Modifier = new PerformanceStat { Min = 2, Max = 2 }, + Type = StatModifierType.Multiplier + } + } + }); + var otherRef = cache.Upsert(new ConsumableItemData { Name = "Flare", Duration = 1f, Shape = new Shape() }); + cache.FlushAsync().Wait(); + + var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); + var makerRef = cache.RefOf(cache.GetByName("Maker")); + EquippableItem Gear(EquippableItemData design) => (EquippableItem) items.CreateInstance(items.CreateLot(design, makerRef, .5f)); + var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); + var ship = new Ship(items, zone, Gear(cache.Get(hullRef)), new EntitySettings()); + Assert.True(ship.TryEquip(Gear(cache.Get(engineRef)), EngineCell)); + Assert.True(ship.TryEquip(Gear(cache.Get(holdRef)), HoldCell)); + zone.Entities.Add(ship); + ship.Activate(); + var data = cache.Get(consumableRef); + return new Rig + { + Cache = cache, Items = items, Ship = ship, Thrust = thrust, Consumable = data, Other = cache.Get(otherRef), + NewEngine = () => Gear(cache.Get(engineRef)), + Key = items.ItemData.RefOf(data).Key, + Engine = ship.Equipment.Single(e => e.Data.Name == "Engine"), + Maker = makerRef + }; + } + + // Two ticks after activation the modifier has attached (the first tick executes it, the second applies it). + private static void Tick(Rig rig, int times, float dt) + { + for (var i = 0; i < times; i++) rig.Ship.Update(dt); + } + + // The rule: a consumable's modifiers exist in the resolver exactly while its effect is active, never after. + // Observed at the resolved stat and at the resolver's modifier entry count, not at a flag. + [Fact] + public void AConsumableModifierBoostsUntilExpiry() + { + var rig = Build(); + using var _ = rig.Cache; + var resolver = rig.Ship.Resolver; + Assert.Equal(10f, rig.Engine.Evaluate(rig.Thrust), 3); + var baseline = resolver.ModifierEntryCount; + + rig.Ship.ActivateConsumable(rig.Mint()); + Tick(rig, 2, .3f); // 0.4s of the 1s remain; the modifier has attached + Assert.Equal(20f, rig.Engine.Evaluate(rig.Thrust), 3); + Assert.True(resolver.ModifierEntryCount > baseline); + + Tick(rig, 3, .3f); // 1.5s elapsed in all: the effect ran out on the fourth tick + Assert.Equal(10f, rig.Engine.Evaluate(rig.Thrust), 3); + Assert.Equal(baseline, resolver.ModifierEntryCount); + } + + // A lot minted through the one production path is a ConsumableItem, and a hold holding it activates it. + [Fact] + public void ABoughtConsumableActivates() + { + var rig = Build(); + using var _ = rig.Cache; + Assert.True(rig.Hold.TryStore(rig.Mint())); + Assert.Equal(1, rig.InCargo); + + Assert.True(rig.Ship.TryActivateConsumable(rig.Consumable)); + Assert.Equal(0, rig.InCargo); + Assert.NotNull(rig.Ship.FindActiveConsumable(rig.Consumable)); + } + + // CS-R1: a non-stackable design allows one active effect at a time, so its Duration is its cooldown. + [Fact] + public void ANonStackableConsumableRefusesASecondActivation() + { + var rig = Build(); + using var _ = rig.Cache; + Assert.True(rig.Hold.TryStore(rig.Mint())); + Assert.True(rig.Hold.TryStore(rig.Mint())); + + Assert.True(rig.Ship.TryActivateConsumable(rig.Consumable)); + Assert.False(rig.Ship.TryActivateConsumable(rig.Consumable)); + Assert.Equal(1, rig.InCargo); + + Tick(rig, 5, .3f); // the first effect has run out + Assert.True(rig.Ship.TryActivateConsumable(rig.Consumable)); + Assert.Equal(0, rig.InCargo); + } + + // The expiry boundary: Duration 1 with 0.3 s ticks leaves 0.1 s after the third tick (still active) and + // -0.2 s after the fourth (gone). An expiry one tick early or one tick late changes one of these two reads. + [Fact] + public void AConsumableLivesForItsDurationAndNoLonger() + { + var rig = Build(); + using var _ = rig.Cache; + rig.Ship.ActivateConsumable(rig.Mint()); + Tick(rig, 3, .3f); + Assert.Equal(20f, rig.Engine.Evaluate(rig.Thrust), 3); + Tick(rig, 1, .3f); + Assert.Equal(10f, rig.Engine.Evaluate(rig.Thrust), 3); + } + + // An effect runs for exactly its Duration: Duration 1 with 0.25 s ticks (exact in floats) executes its + // behaviours on four ticks and is gone when the fourth ends, not on a fifth. + [Fact] + public void AConsumableRunsForExactlyItsDurationInTicks() + { + var rig = Build(); + using var _ = rig.Cache; + rig.Ship.ActivateConsumable(rig.Mint()); + Tick(rig, 3, .25f); + Assert.NotNull(rig.Ship.FindActiveConsumable(rig.Consumable)); + Assert.Equal(20f, rig.Engine.Evaluate(rig.Thrust), 3); + Tick(rig, 1, .25f); // the fourth tick spends the last of the Duration + Assert.Null(rig.Ship.FindActiveConsumable(rig.Consumable)); + Assert.Equal(10f, rig.Engine.Evaluate(rig.Thrust), 3); + } + + // CS-R1, the stackable side: a stackable design activates again while its first effect runs, and every + // multiplier on the stat multiplies. + [Fact] + public void TwoStackableConsumablesOverlapAndMultiply() + { + var rig = Build(stackable: true); + using var _ = rig.Cache; + Assert.True(rig.Hold.TryStore(rig.Mint())); + Assert.True(rig.Hold.TryStore(rig.Mint())); + + Assert.True(rig.Ship.TryActivateConsumable(rig.Consumable)); + Assert.True(rig.Ship.TryActivateConsumable(rig.Consumable)); + Assert.Equal(0, rig.InCargo); + Tick(rig, 2, .3f); + Assert.Equal(40f, rig.Engine.Evaluate(rig.Thrust), 3); + } + + // Two modifiers share one resolver entry, both attached. The first expires while the second still runs: the + // second's boost stays, and when it expires too nothing is left behind. + [Fact] + public void AnExpiringConsumableLeavesAnOverlappingOnesBoost() + { + var rig = Build(stackable: true); + using var _ = rig.Cache; + var resolver = rig.Ship.Resolver; + var baseline = resolver.ModifierEntryCount; + Assert.True(rig.Hold.TryStore(rig.Mint())); + Assert.True(rig.Hold.TryStore(rig.Mint())); + + Assert.True(rig.Ship.TryActivateConsumable(rig.Consumable)); + Tick(rig, 1, .3f); + Assert.True(rig.Ship.TryActivateConsumable(rig.Consumable)); + Tick(rig, 2, .3f); // both attached: the first has 0.1 s left, the second 0.4 s + Assert.Equal(40f, rig.Engine.Evaluate(rig.Thrust), 3); + + Tick(rig, 1, .3f); // the first ran out; the second's boost is still on the shared entry + Assert.Equal(20f, rig.Engine.Evaluate(rig.Thrust), 3); + Assert.True(resolver.ModifierEntryCount > baseline); + + Tick(rig, 1, .3f); // and now the second + Assert.Equal(10f, rig.Engine.Evaluate(rig.Thrust), 3); + Assert.Equal(baseline, resolver.ModifierEntryCount); + } + + // CS-R1: the cooldown is per design. A running effect of one design does not refuse another design. + [Fact] + public void ADesignsCooldownDoesNotBlockAnotherDesign() + { + var rig = Build(); + using var _ = rig.Cache; + Assert.True(rig.Hold.TryStore(rig.Mint())); + Assert.True(rig.Hold.TryStore(rig.Mint(rig.Other))); + + Assert.True(rig.Ship.TryActivateConsumable(rig.Consumable)); + Assert.True(rig.Ship.TryActivateConsumable(rig.Other)); + Assert.Equal(0, rig.InCargo); + } + + // Docking: an effect still running when the entity deactivates, is refitted and activates again boosts the + // items now fitted, as gear modifiers do, not the thruster that was swapped out. + [Fact] + public void AConsumableActiveAcrossARefitBoostsTheNewItems() + { + var rig = Build(); + using var _ = rig.Cache; + rig.Ship.ActivateConsumable(rig.Mint()); + Tick(rig, 2, .3f); + Assert.Equal(20f, rig.Engine.Evaluate(rig.Thrust), 3); + + rig.Ship.Deactivate(); + Assert.NotNull(rig.Ship.TryUnequip(rig.Engine)); + Assert.True(rig.Ship.TryEquip(rig.NewEngine(), EngineCell)); + rig.Ship.Activate(); + Tick(rig, 2, .1f); // 0.2 s more: the effect still has 0.2 s of its second + var fitted = rig.Ship.Equipment.Single(e => e.Data.Name == "Engine"); + Assert.NotSame(rig.Engine, fitted); + Assert.Equal(20f, fitted.Evaluate(rig.Thrust), 3); + } +} diff --git a/tests/Aetheria.Shared.Tests/LoadoutTests.cs b/tests/Aetheria.Shared.Tests/LoadoutTests.cs index 1f2c9c842..303ca8f06 100644 --- a/tests/Aetheria.Shared.Tests/LoadoutTests.cs +++ b/tests/Aetheria.Shared.Tests/LoadoutTests.cs @@ -760,11 +760,7 @@ public sealed class LoadoutTests : IDisposable var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var hullItem = (EquippableItem) items.CreateInstance(items.CreateLot(hullData, maker, .5f)); var ship = new Ship(items, null, hullItem, new EntitySettings()); - // ItemManager.CreateInstance has no ConsumableItemData branch (it only special-cases EquippableItemData, - // falling back to CompoundCommodity otherwise); build the instance directly, as that method does for - // EquippableItem. - var consumableLot = items.CreateLot(consumableData, maker, .5f); - var consumableItem = new ConsumableItem { Data = cache.RefOf(consumableData), Lot = consumableLot }; + var consumableItem = (ConsumableItem) items.CreateInstance(items.CreateLot(consumableData, maker, .5f)); var effect = new ConsumableItemEffect(consumableItem, ship); effect.Update(5f); // half the duration elapsed -> progress .5 -> effectiveness .5 on a linear ramp diff --git a/tests/Aetheria.Shared.Tests/StatResolverTests.cs b/tests/Aetheria.Shared.Tests/StatResolverTests.cs index 9afafcd26..0c0283f20 100644 --- a/tests/Aetheria.Shared.Tests/StatResolverTests.cs +++ b/tests/Aetheria.Shared.Tests/StatResolverTests.cs @@ -441,7 +441,7 @@ public sealed class StatResolverTests : IDisposable for (var i = 0; i < 20; i++) { var lot = items.Lots.Add(new Lot { Design = cache.RefOf(boosterData), Origin = new Attributed(), Quality = .5f, Roles = new List() }); - var consumableItem = new ConsumableItem { Data = cache.RefOf(boosterData), Lot = lot }; + var consumableItem = Assert.IsType(items.CreateInstance(lot)); ship.ActivateConsumable(consumableItem); // Duration is 0.01s; one 1-second tick expires it and drives Entity.Update's expiry branch. diff --git a/tests/Aetheria.Shared.Tests/ThrottleLockTests.cs b/tests/Aetheria.Shared.Tests/ThrottleLockTests.cs new file mode 100644 index 000000000..3f6109155 --- /dev/null +++ b/tests/Aetheria.Shared.Tests/ThrottleLockTests.cs @@ -0,0 +1,274 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using CultMath; +using GameCult.Caching; +using Xunit; +using static CultMath.math; + +// A ThrottleLock on an active consumable replaces the pilot's movement intent with full forward, read once at +// the top of Ship.Update's active branch. Turn is untouched. Every observation is a thruster's Axis after a real +// Ship.Update, with the effect started through Entity.ActivateConsumable. +public sealed class ThrottleLockTests : IDisposable +{ + private readonly string _root = Path.Combine(Path.GetTempPath(), "aetheria-throttlelock-" + Guid.NewGuid().ToString("N")); + private string Catalog => Path.Combine(_root, "Aetheria.cc"); + + public ThrottleLockTests() => Directory.CreateDirectory(_root); + public void Dispose() => Directory.Delete(_root, true); + + private static GameplaySettings Settings() => new GameplaySettings + { + DefaultEntitySettings = new EntitySettings(), + Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Rarity = 0, Color = new float3(1, 1, 1) } }, + QualityPriceModifier = new ExponentialLerp() + }; + + private static PerformanceStat Constant(float v) => new PerformanceStat { Min = v, Max = v }; + + private static EquippableItem Mint(CultCache cache, ItemManager items, ItemData design, ItemRotation rotation = ItemRotation.None) => new EquippableItem + { + Data = cache.RefOf(design), + Durability = design is EquippableItemData equippable ? equippable.Durability : 0, + Rotation = rotation, + Lot = items.Lots.Add(new Lot { Design = cache.RefOf(design), Origin = new Attributed(), Quality = .5f, Roles = new List() }) + }; + + private sealed class Fixture + { + public CultCache Cache; + public ItemManager Items; + public Ship Ship; + public ConsumableItemData Lock; + public Thruster Forward, Reverse, Clockwise; + public Thruster[] Right, Left; // pairs with opposing torque: a lone off-axis strafe thruster cancels its own torque + + public void ActivateLock() => Ship.ActivateConsumable(new ConsumableItem + { + Data = Cache.RefOf(Lock), + Lot = Items.Lots.Add(new Lot { Design = Cache.RefOf(Lock), Origin = new Attributed(), Quality = .5f, Roles = new List() }) + }); + } + + // One thruster per intent direction, plus two reverse thrusters either side of the centre line, one of + // which has clockwise torque (the one Turn reaches). Thrusters are found by their item's rotation, as Ship + // sorts them. + private Fixture Build(float lockDuration) + { + var cache = AetheriaStores.Open(Catalog, catalogWritable: true); + cache.Upsert(new TestCatalogGlobal { Name = "Temperament" }); + var hullShape = new Shape(5, 5); + foreach (var cell in hullShape.AllCoordinates) hullShape[cell] = true; + cache.Upsert(new HullData { Name = "Skiff", HullType = HullType.Ship, Shape = hullShape, Durability = 10, Mass = 1000 }); + cache.Upsert(new GearData + { + Name = "Thruster", Hardpoint = HardpointType.Tool, Shape = new Shape(), Durability = 10, + MinimumTemperature = 0, MaximumTemperature = 1000, OptimalTemperature = 280, PlateauWidth = 400, + Behaviors = { new ThrusterData { Thrust = Constant(100), Visibility = Constant(0), Heat = Constant(0), EnergyUsage = Constant(0) } } + }); + var lockData = new ConsumableItemData { Name = "Overdrive", Duration = lockDuration, Behaviors = { new ThrottleLockData() } }; + cache.Upsert(lockData); + cache.FlushAsync().Wait(); + + var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); + var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); + var ship = new Ship(items, zone, Mint(cache, items, cache.GetByName("Skiff")), new EntitySettings()); + var gear = cache.GetByName("Thruster"); + Assert.True(ship.TryEquip(Mint(cache, items, gear, ItemRotation.Reversed), new int2(2, 1))); + Assert.True(ship.TryEquip(Mint(cache, items, gear, ItemRotation.None), new int2(1, 2))); + Assert.True(ship.TryEquip(Mint(cache, items, gear, ItemRotation.None), new int2(3, 2))); + // Strafe pairs sit either side of the centre line across the ship's length, so their torques oppose. + Assert.True(ship.TryEquip(Mint(cache, items, gear, ItemRotation.CounterClockwise), new int2(1, 1))); + Assert.True(ship.TryEquip(Mint(cache, items, gear, ItemRotation.CounterClockwise), new int2(1, 3))); + Assert.True(ship.TryEquip(Mint(cache, items, gear, ItemRotation.Clockwise), new int2(3, 1))); + Assert.True(ship.TryEquip(Mint(cache, items, gear, ItemRotation.Clockwise), new int2(3, 3))); + zone.Entities.Add(ship); + ship.Aim = float3(0, 0, 1); + ship.Activate(); + + var thrusters = ship.GetBehaviors().ToArray(); + return new Fixture + { + Cache = cache, Items = items, Ship = ship, Lock = cache.GetByName("Overdrive"), + Forward = thrusters.Single(t => t.Item.EquippableItem.Rotation == ItemRotation.Reversed), + Right = thrusters.Where(t => t.Item.EquippableItem.Rotation == ItemRotation.CounterClockwise).ToArray(), + Left = thrusters.Where(t => t.Item.EquippableItem.Rotation == ItemRotation.Clockwise).ToArray(), + Reverse = thrusters.First(t => t.Item.EquippableItem.Rotation == ItemRotation.None && t.Torque <= 0), + Clockwise = thrusters.First(t => t.Item.EquippableItem.Rotation == ItemRotation.None && t.Torque > 0) + }; + } + + // Spec ALockedThrottleIgnoresIntent. Mutation: read MovementDirection in place of move at any of the six + // sites in Ship.Update and the matching assertion goes red. + [Fact] + public void ALockedThrottleIgnoresIntent() + { + var f = Build(100f); + using var _ = f.Cache; + f.ActivateLock(); + Assert.True(f.Ship.ThrottleLocked); + + foreach (var intent in new[] { float2(0, -1), float2(1, 0), float2(-1, 0) }) + { + f.Ship.MovementDirection = intent; + f.Ship.Turn = 0; + f.Ship.Update(0.01f); + Assert.Equal(1f, f.Forward.Axis); + Assert.Equal(0f, f.Reverse.Axis); + Assert.All(f.Right, t => Assert.Equal(0f, t.Axis)); + Assert.All(f.Left, t => Assert.Equal(0f, t.Axis)); + } + + // Turning stays with the pilot: the clockwise-torque thruster follows Turn while the lock holds. + f.Ship.MovementDirection = float2(0, -1); + f.Ship.Turn = 1; + f.Ship.Update(0.01f); + Assert.Equal(1f, f.Clockwise.Axis); + f.Ship.Turn = 0; + f.Ship.Update(0.01f); + Assert.Equal(0f, f.Clockwise.Axis); + } + + // Spec TheLockEndsWithItsEffect. Mutation: make ThrottleLocked a latch (set on activation, never cleared) + // and the post-expiry reverse axis stays 0. + [Fact] + public void TheLockEndsWithItsEffect() + { + var f = Build(1f); + using var _ = f.Cache; + f.ActivateLock(); + f.Ship.MovementDirection = float2(0, -1); + f.Ship.Update(0.5f); + Assert.Equal(0f, f.Reverse.Axis); + + f.Ship.Update(2f); // runs past the Duration; the effect leaves at the end of this tick + Assert.False(f.Ship.ThrottleLocked); + + f.Ship.Update(0.01f); + Assert.Equal(1f, f.Reverse.Axis); + Assert.Equal(0f, f.Forward.Axis); + } + + // Spec AnUnlockedShipFollowsIntent. Mutation: replace the conditional by an unconditional float2(0, 1) and + // the reverse and strafe assertions go red. + [Fact] + public void AnUnlockedShipFollowsIntent() + { + var f = Build(1f); + using var _ = f.Cache; + Assert.False(f.Ship.ThrottleLocked); + + f.Ship.MovementDirection = float2(0, -1); + f.Ship.Update(0.01f); + Assert.Equal(1f, f.Reverse.Axis); + Assert.Equal(0f, f.Forward.Axis); + + f.Ship.MovementDirection = float2(1, 0); + f.Ship.Update(0.01f); + Assert.All(f.Right, t => Assert.Equal(1f, t.Axis)); + Assert.All(f.Left, t => Assert.Equal(0f, t.Axis)); + Assert.Equal(0f, f.Forward.Axis); + + f.Ship.MovementDirection = float2(-1, 0); + f.Ship.Update(0.01f); + Assert.All(f.Left, t => Assert.Equal(1f, t.Axis)); + Assert.All(f.Right, t => Assert.Equal(0f, t.Axis)); + + f.Ship.MovementDirection = float2(0, 1); + f.Ship.Update(0.01f); + Assert.Equal(1f, f.Forward.Axis); + Assert.Equal(0f, f.Reverse.Axis); + } + + // Finding zero-stick-unpinned. Mutation: float2(0, length(MovementDirection)) as the locked intent. The lock + // supplies full forward whatever the stick's magnitude, including none and a short reverse push. + [Fact] + public void ALockedShipGetsFullForwardWhateverTheStickLength() + { + var f = Build(100f); + using var _ = f.Cache; + f.ActivateLock(); + foreach (var intent in new[] { float2(0, 0), float2(.3f, .2f), float2(-.5f, -.5f) }) + { + f.Ship.MovementDirection = intent; + f.Ship.Turn = 0; + f.Ship.Update(0.01f); + Assert.Equal(1f, f.Forward.Axis); + Assert.Equal(0f, f.Reverse.Axis); + Assert.All(f.Right, t => Assert.Equal(0f, t.Axis)); + Assert.All(f.Left, t => Assert.Equal(0f, t.Axis)); + } + } + + // Finding ccw-turn-unpinned. Mutation: drop the counter-clockwise Turn. Turn in either sign reaches only the + // thrusters with torque of that sign, at full, while the lock holds forward. + [Fact] + public void ALockedShipTurnsBothWays() + { + var f = Build(100f); + using var _ = f.Cache; + f.ActivateLock(); + var all = f.Ship.GetBehaviors().ToArray(); + var cw = all.Where(t => t.Torque > 0 && t.Item.EquippableItem.Rotation == ItemRotation.None).ToArray(); + var ccw = all.Where(t => t.Torque < 0 && t.Item.EquippableItem.Rotation == ItemRotation.None).ToArray(); + Assert.NotEmpty(cw); + Assert.NotEmpty(ccw); + f.Ship.MovementDirection = float2(1, -1); + foreach (var turn in new[] { 1f, -1f }) + { + f.Ship.Turn = turn; + f.Ship.Update(0.01f); + Assert.All(turn > 0 ? cw : ccw, t => Assert.Equal(1f, t.Axis)); + Assert.All(turn > 0 ? ccw : cw, t => Assert.Equal(0f, t.Axis)); + Assert.Equal(1f, f.Forward.Axis); + } + } + + // Finding non-lock-consumable-unpinned. Mutation: any active consumable locks. A consumable without + // ThrottleLockData leaves the pilot's intent in force. + [Fact] + public void AConsumableWithoutTheLockDoesNotLock() + { + var f = Build(100f); + using var _ = f.Cache; + var plain = new ConsumableItemData { Name = "Plain", Duration = 100f }; + f.Cache.Upsert(plain); + f.Ship.ActivateConsumable(new ConsumableItem + { + Data = f.Cache.RefOf(plain), + Lot = f.Items.Lots.Add(new Lot { Design = f.Cache.RefOf(plain), Origin = new Attributed(), Quality = .5f, Roles = new List() }) + }); + Assert.False(f.Ship.ThrottleLocked); + f.Ship.MovementDirection = float2(0, -1); + f.Ship.Update(0.01f); + Assert.Equal(1f, f.Reverse.Axis); + Assert.Equal(0f, f.Forward.Axis); + } + + // Finding lock-end-boundary-unpinned, finding lock-end-at-90pct-unpinned. Mutations: the lock ends at half + // Duration, at 0.8 or 0.9 of Duration, or one tick late. Duration 1 stepped in 0.25 s ticks (exact in + // floats) locks the axes on exactly four ticks (reverse stays 0), the effect is gone when the fourth ends, + // and the fifth tick follows the stick. The count scales with Duration: 2 s locks eight ticks. + [Theory] + [InlineData(1f, 4)] + [InlineData(2f, 8)] + public void TheLockEndsAtTheExactTickOfItsDuration(float duration, int lockedTicks) + { + var f = Build(duration); + using var _ = f.Cache; + f.ActivateLock(); + f.Ship.MovementDirection = float2(0, -1); + for (var i = 0; i < lockedTicks; i++) + { + Assert.True(f.Ship.ThrottleLocked); + f.Ship.Update(.25f); + Assert.Equal(0f, f.Reverse.Axis); + Assert.Equal(1f, f.Forward.Axis); + } + Assert.False(f.Ship.ThrottleLocked); + f.Ship.Update(.25f); + Assert.Equal(1f, f.Reverse.Axis); + Assert.Equal(0f, f.Forward.Axis); + } +}