diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5cfc150..1e4fae2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,11 +7,29 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Publish + - uses: actions/checkout@v5 + - name: Install Unity Package Manager CLI + run: | + curl -fsSL https://cdn.packages.unity.com/upm-cli/install.sh | bash + echo "$HOME/.upm/bin" >> "$GITHUB_PATH" + "$HOME/.upm/bin/upm" --version + - name: Pack and sign + run: | + test -n "${UNITY_ORGANIZATION_ID}" + mkdir -p "$RUNNER_TEMP/signed-package" + upm pack . \ + --organization-id "${UNITY_ORGANIZATION_ID}" \ + --destination "$RUNNER_TEMP/signed-package" + env: + UPM_SERVICE_ACCOUNT_KEY_ID: ${{ secrets.UPM_SERVICE_ACCOUNT_KEY_ID }} + UPM_SERVICE_ACCOUNT_KEY_SECRET: ${{ secrets.UPM_SERVICE_ACCOUNT_KEY_SECRET }} + UNITY_ORGANIZATION_ID: ${{ secrets.UNITY_ORGANIZATION_ID }} + - name: Publish signed package run: | echo "//registry.visualpinball.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc - npm publish + package_tgz="$(find "$RUNNER_TEMP/signed-package" -maxdepth 1 -name '*.tgz' -print -quit)" + test -n "$package_tgz" + npm publish "$package_tgz" --registry=https://registry.visualpinball.org/ env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} @@ -19,9 +37,8 @@ jobs: runs-on: ubuntu-latest needs: [ publish ] steps: - - uses: peter-evans/repository-dispatch@v1 + - uses: peter-evans/repository-dispatch@v4 with: token: ${{ secrets.GH_PAT }} event-type: publish-complete client-payload: '{"artifacts_run_id": "${{ github.run_id }}"}' - diff --git a/Assets/Art/Graphs/ColliderShader.shader b/Assets/Art/Graphs/ColliderShader.shader new file mode 100644 index 0000000..e615872 --- /dev/null +++ b/Assets/Art/Graphs/ColliderShader.shader @@ -0,0 +1,291 @@ +Shader "Pinball/HDRP/ColliderShader" +{ + Properties + { + [HDR]_Color ("Color", Color) = (0.1, 1.0, 0.25, 1.0) + _FaceOpacity ("Face Opacity", Range(0, 1)) = 0.15 + _WireThickness ("Wire Thickness", Range(0.5, 8.0)) = 1.5 + [Toggle] _DrawOnTop ("Draw On Top", Float) = 0 + } + + SubShader + { + Tags + { + "RenderPipeline" = "HDRenderPipeline" + "Queue" = "Transparent+100" + "RenderType" = "Transparent" + } + + Pass + { + Name "ForwardOnly" + Tags { "LightMode" = "ForwardOnly" } + + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + ZTest Always + Cull Off + + HLSLPROGRAM + #pragma target 4.5 + #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan switch switch2 + #pragma vertex Vert + #pragma geometry Geom + #pragma fragment Frag + #pragma editor_sync_compilation + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl" + + CBUFFER_START(UnityPerMaterial) + float4 _Color; + float _FaceOpacity; + float _WireThickness; + float _DrawOnTop; + CBUFFER_END + + struct Attributes + { + float3 positionOS : POSITION; + }; + + struct VaryingsToGeom + { + float4 positionCS : SV_POSITION; + }; + + struct Varyings + { + float4 positionCS : SV_POSITION; + float3 barycentric : TEXCOORD0; + }; + + float2 SafeNormalize2(float2 v) + { + float len2 = dot(v, v); + if (len2 <= 1e-10) + { + return float2(1.0, 0.0); + } + return v * rsqrt(len2); + } + + VaryingsToGeom Vert(Attributes input) + { + VaryingsToGeom output; + output.positionCS = TransformObjectToHClip(input.positionOS); + return output; + } + + [maxvertexcount(3)] + void Geom(triangle VaryingsToGeom input[3], inout TriangleStream stream) + { + float4 p0 = input[0].positionCS; + float4 p1 = input[1].positionCS; + float4 p2 = input[2].positionCS; + + float w0 = (abs(p0.w) > 1e-6) ? p0.w : 1e-6; + float w1 = (abs(p1.w) > 1e-6) ? p1.w : 1e-6; + float w2 = (abs(p2.w) > 1e-6) ? p2.w : 1e-6; + + float2 n0 = p0.xy / w0; + float2 n1 = p1.xy / w1; + float2 n2 = p2.xy / w2; + + float2 e0 = n1 - n0; + float2 e1 = n2 - n0; + float area2 = abs(e0.x * e1.y - e0.y * e1.x); + float minArea2 = 8.0 / max(_ScreenSize.x * _ScreenSize.y, 1.0); + + if (area2 <= minArea2) + { + float pixelToNdc = 2.0 / max(_ScreenSize.x, _ScreenSize.y); + float inflate = pixelToNdc * max(_WireThickness, 1.0) * 1.5; + + float d01 = dot(n1 - n0, n1 - n0); + float d12 = dot(n2 - n1, n2 - n1); + float d20 = dot(n0 - n2, n0 - n2); + float maxLen2 = max(d01, max(d12, d20)); + + float2 new0 = n0; + float2 new1 = n1; + float2 new2 = n2; + + if (maxLen2 <= 1e-12) + { + float2 center = (n0 + n1 + n2) / 3.0; + new0 = center + float2( inflate, 0.0); + new1 = center + float2(-inflate, 0.0); + new2 = center + float2(0.0, inflate); + } + else if (d01 >= d12 && d01 >= d20) + { + float2 axis = SafeNormalize2(n1 - n0); + float2 perp = float2(-axis.y, axis.x); + float2 mid = (n0 + n1) * 0.5; + new2 = mid + perp * inflate; + } + else if (d12 >= d20) + { + float2 axis = SafeNormalize2(n2 - n1); + float2 perp = float2(-axis.y, axis.x); + float2 mid = (n1 + n2) * 0.5; + new0 = mid + perp * inflate; + } + else + { + float2 axis = SafeNormalize2(n0 - n2); + float2 perp = float2(-axis.y, axis.x); + float2 mid = (n2 + n0) * 0.5; + new1 = mid + perp * inflate; + } + + n0 = new0; + n1 = new1; + n2 = new2; + + p0.xy = n0 * w0; + p1.xy = n1 * w1; + p2.xy = n2 * w2; + } + + Varyings output = (Varyings)0; + + output.positionCS = p0; + output.barycentric = float3(1.0, 0.0, 0.0); + stream.Append(output); + + output.positionCS = p1; + output.barycentric = float3(0.0, 1.0, 0.0); + stream.Append(output); + + output.positionCS = p2; + output.barycentric = float3(0.0, 0.0, 1.0); + stream.Append(output); + } + + bool IsOccluded(float fragDeviceDepth, float sceneDeviceDepth) + { + // Compare linearized eye depth so this works consistently for + // perspective + orthographic cameras and reversed-Z setups. + float fragEyeDepth = LinearEyeDepth(fragDeviceDepth, _ZBufferParams); + float sceneEyeDepth = LinearEyeDepth(sceneDeviceDepth, _ZBufferParams); + return fragEyeDepth > (sceneEyeDepth + 1e-4); + } + + float4 Frag(Varyings input) : SV_Target + { + if (_DrawOnTop < 0.5) + { + uint2 pixelCoords = (uint2)(input.positionCS.xy * _RTHandleScale.xy); + pixelCoords = clamp(pixelCoords, uint2(0, 0), (uint2)_ScreenSize.xy - 1); + + // Compare device-depth values from the same space. + float fragDeviceDepth = input.positionCS.z / max(input.positionCS.w, 1e-6); + float sceneDeviceDepth = LoadCameraDepth(pixelCoords); + + if (IsOccluded(fragDeviceDepth, sceneDeviceDepth)) + { + clip(-1); + } + } + + float minBarycentric = min(input.barycentric.x, min(input.barycentric.y, input.barycentric.z)); + float pixelWidth = max(fwidth(minBarycentric), 1e-5); + float wireMask = 1.0 - smoothstep(0.0, pixelWidth * _WireThickness, minBarycentric); + + float faceAlpha = saturate(_Color.a * _FaceOpacity); + float wireAlpha = saturate(_Color.a); + float alpha = lerp(faceAlpha, wireAlpha, wireMask); + + return float4(_Color.rgb, alpha); + } + ENDHLSL + } + } + + // Fallback for platforms without geometry shaders. + SubShader + { + Tags + { + "RenderPipeline" = "HDRenderPipeline" + "Queue" = "Transparent+100" + "RenderType" = "Transparent" + } + + Pass + { + Name "ForwardOnlyFallback" + Tags { "LightMode" = "ForwardOnly" } + + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + ZTest Always + Cull Off + + HLSLPROGRAM + #pragma target 4.5 + #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan switch switch2 + #pragma vertex VertFallback + #pragma fragment FragFallback + #pragma editor_sync_compilation + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl" + + CBUFFER_START(UnityPerMaterial) + float4 _Color; + float _FaceOpacity; + float _DrawOnTop; + CBUFFER_END + + struct Attributes + { + float3 positionOS : POSITION; + }; + + struct Varyings + { + float4 positionCS : SV_POSITION; + }; + + Varyings VertFallback(Attributes input) + { + Varyings output; + output.positionCS = TransformObjectToHClip(input.positionOS); + return output; + } + + bool IsOccluded(float fragDeviceDepth, float sceneDeviceDepth) + { + // Compare linearized eye depth so this works consistently for + // perspective + orthographic cameras and reversed-Z setups. + float fragEyeDepth = LinearEyeDepth(fragDeviceDepth, _ZBufferParams); + float sceneEyeDepth = LinearEyeDepth(sceneDeviceDepth, _ZBufferParams); + return fragEyeDepth > (sceneEyeDepth + 1e-4); + } + + float4 FragFallback(Varyings input) : SV_Target + { + if (_DrawOnTop < 0.5) + { + uint2 pixelCoords = (uint2)(input.positionCS.xy * _RTHandleScale.xy); + pixelCoords = clamp(pixelCoords, uint2(0, 0), (uint2)_ScreenSize.xy - 1); + + float fragDeviceDepth = input.positionCS.z / max(input.positionCS.w, 1e-6); + float sceneDeviceDepth = LoadCameraDepth(pixelCoords); + + if (IsOccluded(fragDeviceDepth, sceneDeviceDepth)) + { + clip(-1); + } + } + + return float4(_Color.rgb, saturate(_Color.a * _FaceOpacity)); + } + ENDHLSL + } + } +} diff --git a/Assets/Art/Graphs/ColliderShader.shader.meta b/Assets/Art/Graphs/ColliderShader.shader.meta new file mode 100644 index 0000000..4b1c95f --- /dev/null +++ b/Assets/Art/Graphs/ColliderShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bdf15e24985d4a3eafb7f7edf2ba1c66 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/Gold_AW_Heavy.mat b/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/Gold_AW_Heavy.mat index a8da49a..d2a899d 100644 --- a/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/Gold_AW_Heavy.mat +++ b/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/Gold_AW_Heavy.mat @@ -200,6 +200,7 @@ Material: - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 - _DstBlend: 0 + - _DstBlend2: 0 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -237,6 +238,7 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 1 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 @@ -310,3 +312,4 @@ Material: - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/StainlessSteel_AW_Heavy.mat b/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/StainlessSteel_AW_Heavy.mat index 7bdede5..c9d55e8 100644 --- a/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/StainlessSteel_AW_Heavy.mat +++ b/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/StainlessSteel_AW_Heavy.mat @@ -200,6 +200,7 @@ Material: - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 - _DstBlend: 0 + - _DstBlend2: 0 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -237,6 +238,7 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 1 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 @@ -302,3 +304,4 @@ Material: - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/Titanium_AW_Heavy.mat b/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/Titanium_AW_Heavy.mat index 5f453f9..0f40fc1 100644 --- a/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/Titanium_AW_Heavy.mat +++ b/Assets/Art/Materials/Default/Metal/AdjustableWearMetals/Titanium_AW_Heavy.mat @@ -200,6 +200,7 @@ Material: - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 - _DstBlend: 0 + - _DstBlend2: 0 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -237,6 +238,7 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 1 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 @@ -302,3 +304,4 @@ Material: - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Blue.mat b/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Blue.mat index 8a98c8f..5dc5729 100644 --- a/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Blue.mat +++ b/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Blue.mat @@ -188,6 +188,7 @@ Material: - _DoubleSidedGIMode: 1 - _DoubleSidedNormalMode: 1 - _DstBlend: 0 + - _DstBlend2: 0 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -225,6 +226,7 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 0 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 @@ -289,6 +291,7 @@ Material: - _UVMappingMask: {r: 0, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &5688198111047547604 MonoBehaviour: m_ObjectHideFlags: 11 diff --git a/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Teal.mat b/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Teal.mat index eed1b50..4f37754 100644 --- a/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Teal.mat +++ b/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Teal.mat @@ -188,6 +188,7 @@ Material: - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 - _DstBlend: 0 + - _DstBlend2: 0 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -225,6 +226,7 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 0 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 @@ -289,6 +291,7 @@ Material: - _UVMappingMask: {r: 0, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &5688198111047547604 MonoBehaviour: m_ObjectHideFlags: 11 diff --git a/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Yellow.mat b/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Yellow.mat index b782325..f4c4921 100644 --- a/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Yellow.mat +++ b/Assets/Art/Materials/Default/Plastic/HardTranslucent/Plastic - Translucent Yellow.mat @@ -188,6 +188,7 @@ Material: - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 - _DstBlend: 0 + - _DstBlend2: 0 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -225,6 +226,7 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 0 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 @@ -289,6 +291,7 @@ Material: - _UVMappingMask: {r: 0, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &5688198111047547604 MonoBehaviour: m_ObjectHideFlags: 11 diff --git a/Assets/Art/Materials/Default/Special/Emissive/EmissiveGlow.mat b/Assets/Art/Materials/Default/Special/Emissive/EmissiveGlow.mat index 5714530..23b225f 100644 --- a/Assets/Art/Materials/Default/Special/Emissive/EmissiveGlow.mat +++ b/Assets/Art/Materials/Default/Special/Emissive/EmissiveGlow.mat @@ -27,7 +27,7 @@ Material: - TransparentBackface - MOTIONVECTORS - RayTracingPrepass - m_LockedProperties: + m_LockedProperties: _EmissiveColorLDR _EmissiveColorMap m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -165,6 +165,7 @@ Material: - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 2 - _DstBlend: 0 + - _DstBlend2: 0 - _Emission_Intensity: 14.43 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 @@ -202,6 +203,7 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 0 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 @@ -267,6 +269,7 @@ Material: - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &2587545780360812095 MonoBehaviour: m_ObjectHideFlags: 11 diff --git a/Assets/Art/Materials/Measured/Chrome/ChromeDirt.mat b/Assets/Art/Materials/Measured/Chrome/ChromeDirt.mat index d5fbd58..e5a2f7e 100644 --- a/Assets/Art/Materials/Measured/Chrome/ChromeDirt.mat +++ b/Assets/Art/Materials/Measured/Chrome/ChromeDirt.mat @@ -31,7 +31,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: e2e0fbff39661804e8d1c76df2334d8f, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -133,16 +133,16 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 0.849 - - Vector1_7EB7D62C: 0.95 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 0.849 + - _VpeOcclusionIntensity: 0.95 - Vector1_A9269C49: 0.1688311 - - Vector1_BB4DD4C5: 0.043 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0 + - _VpeSpecularAAThreshold: 0.043 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 @@ -274,9 +274,9 @@ Material: - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: - - Color_AD8F67CE: {r: 1, g: 1, b: 1, a: 0} - - Vector2_3344450D: {r: 3, g: 3, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 1, g: 1, b: 1, a: 0} + - _VpeTiling: {r: 3, g: 3, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Art/Materials/Measured/Chrome/ChromeSatinDirt.mat b/Assets/Art/Materials/Measured/Chrome/ChromeSatinDirt.mat index 3bcf12c..3b761c5 100644 --- a/Assets/Art/Materials/Measured/Chrome/ChromeSatinDirt.mat +++ b/Assets/Art/Materials/Measured/Chrome/ChromeSatinDirt.mat @@ -47,7 +47,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: e2e0fbff39661804e8d1c76df2334d8f, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -149,16 +149,16 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 0.775 - - Vector1_7EB7D62C: 0.929 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 0.775 + - _VpeOcclusionIntensity: 0.929 - Vector1_A9269C49: 0.1688311 - - Vector1_BB4DD4C5: 0.043 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0 + - _VpeSpecularAAThreshold: 0.043 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 @@ -290,9 +290,9 @@ Material: - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: - - Color_AD8F67CE: {r: 1, g: 1, b: 1, a: 0} - - Vector2_3344450D: {r: 3, g: 3, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 1, g: 1, b: 1, a: 0} + - _VpeTiling: {r: 3, g: 3, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Art/Materials/Measured/Chrome/ChromeSatinScratched.mat b/Assets/Art/Materials/Measured/Chrome/ChromeSatinScratched.mat index 9ca4384..65f1079 100644 --- a/Assets/Art/Materials/Measured/Chrome/ChromeSatinScratched.mat +++ b/Assets/Art/Materials/Measured/Chrome/ChromeSatinScratched.mat @@ -31,7 +31,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: 35ab4b368b5b19c438c1118785008adc, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -133,16 +133,16 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 0.775 - - Vector1_7EB7D62C: 1 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 0.775 + - _VpeOcclusionIntensity: 1 - Vector1_A9269C49: 0.1688311 - - Vector1_BB4DD4C5: 0.043 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0.623 + - _VpeSpecularAAThreshold: 0.043 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0.623 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 @@ -274,9 +274,9 @@ Material: - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: - - Color_AD8F67CE: {r: 1, g: 1, b: 1, a: 0} - - Vector2_3344450D: {r: 10, g: 10, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 1, g: 1, b: 1, a: 0} + - _VpeTiling: {r: 10, g: 10, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Art/Materials/Measured/Chrome/ChromeScratched.mat b/Assets/Art/Materials/Measured/Chrome/ChromeScratched.mat index 5381df1..72f3c0d 100644 --- a/Assets/Art/Materials/Measured/Chrome/ChromeScratched.mat +++ b/Assets/Art/Materials/Measured/Chrome/ChromeScratched.mat @@ -47,7 +47,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: 35ab4b368b5b19c438c1118785008adc, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -149,16 +149,16 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 1 - - Vector1_7EB7D62C: 1 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 1 + - _VpeOcclusionIntensity: 1 - Vector1_A9269C49: 0.1688311 - - Vector1_BB4DD4C5: 0.043 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0.44 + - _VpeSpecularAAThreshold: 0.043 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0.44 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 @@ -290,9 +290,9 @@ Material: - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: - - Color_AD8F67CE: {r: 1, g: 1, b: 1, a: 0} - - Vector2_3344450D: {r: 10, g: 10, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 1, g: 1, b: 1, a: 0} + - _VpeTiling: {r: 10, g: 10, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Art/Materials/Measured/Metal/Metal.mat b/Assets/Art/Materials/Measured/Metal/Metal.mat index cb3bd5a..80f54ab 100644 --- a/Assets/Art/Materials/Measured/Metal/Metal.mat +++ b/Assets/Art/Materials/Measured/Metal/Metal.mat @@ -46,7 +46,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: 567bef35ebe50974a97d2c2bbe4a86a9, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -148,15 +148,15 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 0.799 - - Vector1_7EB7D62C: 0.593 - - Vector1_BB4DD4C5: 0.043 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0.211 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 0.799 + - _VpeOcclusionIntensity: 0.593 + - _VpeSpecularAAThreshold: 0.043 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0.211 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 @@ -289,9 +289,9 @@ Material: - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: - - Color_AD8F67CE: {r: 0.64705884, g: 0.64705884, b: 0.64705884, a: 0} - - Vector2_3344450D: {r: 3, g: 3, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 0.64705884, g: 0.64705884, b: 0.64705884, a: 0} + - _VpeTiling: {r: 3, g: 3, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Art/Materials/Measured/Metal/MetalDark.mat b/Assets/Art/Materials/Measured/Metal/MetalDark.mat index 05d30bc..a8735a2 100644 --- a/Assets/Art/Materials/Measured/Metal/MetalDark.mat +++ b/Assets/Art/Materials/Measured/Metal/MetalDark.mat @@ -31,7 +31,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: 567bef35ebe50974a97d2c2bbe4a86a9, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -133,15 +133,15 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 0.799 - - Vector1_7EB7D62C: 0.593 - - Vector1_BB4DD4C5: 0.043 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0.211 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 0.799 + - _VpeOcclusionIntensity: 0.593 + - _VpeSpecularAAThreshold: 0.043 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0.211 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 @@ -273,9 +273,9 @@ Material: - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: - - Color_AD8F67CE: {r: 0.27450982, g: 0.27450982, b: 0.27450982, a: 0} - - Vector2_3344450D: {r: 3, g: 3, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 0.27450982, g: 0.27450982, b: 0.27450982, a: 0} + - _VpeTiling: {r: 3, g: 3, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Art/Materials/Measured/Metal/MetalScratched.mat b/Assets/Art/Materials/Measured/Metal/MetalScratched.mat index 7bf037a..2c8f318 100644 --- a/Assets/Art/Materials/Measured/Metal/MetalScratched.mat +++ b/Assets/Art/Materials/Measured/Metal/MetalScratched.mat @@ -15,7 +15,7 @@ Material: - _DISABLE_SSR_TRANSPARENT m_InvalidKeywords: [] m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 + m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 m_CustomRenderQueue: 2225 stringTagMap: @@ -30,7 +30,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: 39fd45b8f0f48af46b14f937f96a58ee, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -132,15 +132,15 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 0.799 - - Vector1_7EB7D62C: 0.407 - - Vector1_BB4DD4C5: 0.043 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0.211 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 0.799 + - _VpeOcclusionIntensity: 0.407 + - _VpeSpecularAAThreshold: 0.043 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0.211 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 @@ -189,6 +189,7 @@ Material: - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 - _DstBlend: 0 + - _DstBlend2: 0 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -215,6 +216,7 @@ Material: - _IridescenceThickness: 1 - _LinkDetailsWithBase: 1 - _MaterialID: 1 + - _MaterialTypeMask: 2 - _Metallic: 0 - _NormalMapSpace: 0 - _NormalScale: 1 @@ -224,6 +226,7 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 0 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 @@ -273,9 +276,9 @@ Material: - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: - - Color_AD8F67CE: {r: 0.64705884, g: 0.64705884, b: 0.64705884, a: 0} - - Vector2_3344450D: {r: 10, g: 10, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 0.64705884, g: 0.64705884, b: 0.64705884, a: 0} + - _VpeTiling: {r: 10, g: 10, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} @@ -293,6 +296,7 @@ Material: - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &5449768099283285284 MonoBehaviour: m_ObjectHideFlags: 11 diff --git a/Assets/Art/Materials/Measured/Metal/MetalScratchedDark.mat b/Assets/Art/Materials/Measured/Metal/MetalScratchedDark.mat index 57d6c96..77d62b8 100644 --- a/Assets/Art/Materials/Measured/Metal/MetalScratchedDark.mat +++ b/Assets/Art/Materials/Measured/Metal/MetalScratchedDark.mat @@ -47,7 +47,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: 39fd45b8f0f48af46b14f937f96a58ee, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -149,15 +149,15 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 0.799 - - Vector1_7EB7D62C: 0.407 - - Vector1_BB4DD4C5: 0.043 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0.211 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 0.799 + - _VpeOcclusionIntensity: 0.407 + - _VpeSpecularAAThreshold: 0.043 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0.211 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 @@ -289,9 +289,9 @@ Material: - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: - - Color_AD8F67CE: {r: 0.27450982, g: 0.27450982, b: 0.27450982, a: 0} - - Vector2_3344450D: {r: 10, g: 10, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 0.27450982, g: 0.27450982, b: 0.27450982, a: 0} + - _VpeTiling: {r: 10, g: 10, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Art/Materials/Measured/Mirror/MirrorDirt.mat b/Assets/Art/Materials/Measured/Mirror/MirrorDirt.mat index dedd2a0..c317991 100644 --- a/Assets/Art/Materials/Measured/Mirror/MirrorDirt.mat +++ b/Assets/Art/Materials/Measured/Mirror/MirrorDirt.mat @@ -47,7 +47,7 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_1E4703A: + - _VpeMaskMap: m_Texture: {fileID: 2800000, guid: 8221d56edcc955d48a0c96057c74fff9, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -149,19 +149,19 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_2E810D38: 0.995 + - _VpeMakeTriplanarWorldSpace: 0 + - _VpeMakeTriplanar: 0 + - _VpeSpecularAAScreenSpaceVariance: 0.1 + - _VpeSmoothnessRemapMax: 0.995 - Vector1_39957ABB: 0.2 - Vector1_5F01DFDD: 0.584 - - Vector1_7EB7D62C: 1 + - _VpeOcclusionIntensity: 1 - Vector1_96F85197: 1 - Vector1_A0747EDC: 0.1 - - Vector1_BB4DD4C5: 0.042 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0 + - _VpeSpecularAAThreshold: 0.042 + - _VpeMetallicIntensity: 1 + - _VpeTriplanarBlend: 1 + - _VpeSmoothnessRemapMin: 0 - Vector1_ECDFB20A: 1 - _AORemapMax: 1 - _AORemapMin: 0 @@ -295,9 +295,9 @@ Material: - _ZWrite: 1 m_Colors: - Color_84E5CB89: {r: 1, g: 1, b: 1, a: 0} - - Color_AD8F67CE: {r: 1, g: 1, b: 1, a: 0} - - Vector2_3344450D: {r: 10, g: 10, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} + - _VpeColor: {r: 1, g: 1, b: 1, a: 0} + - _VpeTiling: {r: 10, g: 10, b: 0, a: 0} + - _VpeOffset: {r: 0, g: 0, b: 0, a: 0} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Art/Materials/Measured/Rubber/Rubber.mat b/Assets/Art/Materials/Measured/Rubber/Rubber.mat deleted file mode 100644 index 7a1d44a..0000000 --- a/Assets/Art/Materials/Measured/Rubber/Rubber.mat +++ /dev/null @@ -1,320 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Rubber - m_Shader: {fileID: -6465566751694194690, guid: 8fdac3d3cc81e6146acf04bcab7c9cc8, - type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _DISABLE_SSR_TRANSPARENT - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2225 - stringTagMap: - MotionVector: User - disabledShaderPasses: - - MOTIONVECTORS - - TransparentBackface - - TransparentDepthPrepass - - TransparentDepthPostpass - - RayTracingPrepass - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - Texture2D_1E4703A: - m_Texture: {fileID: 2800000, guid: 7343846adadc0074599d820ce4b23796, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - Texture2D_524261BE: - m_Texture: {fileID: 2800000, guid: affbe13daab5f374d93482b4407635dc, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - Texture2D_B9CEC4F9: - m_Texture: {fileID: 2800000, guid: 6d9beadd74e02964c8cb5b19a3f3ea41, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _AnisotropyMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BentNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BentNormalMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _CoatMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DistortionVectorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissiveColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _HeightMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescenceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescenceThicknessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecularColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SubsurfaceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TangentMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TangentMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ThicknessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TransmittanceColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_29D01071: 0.753 - - Vector1_2E810D38: 0.969 - - Vector1_7EB7D62C: 1 - - Vector1_BB4DD4C5: 0.2 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0.33 - - _AORemapMax: 1 - - _AORemapMin: 0 - - _ATDistance: 1 - - _AddPrecomputedVelocity: 0 - - _AlbedoAffectEmissive: 0 - - _AlphaCutoff: 0.5 - - _AlphaCutoffEnable: 0 - - _AlphaCutoffPostpass: 0.5 - - _AlphaCutoffPrepass: 0.5 - - _AlphaCutoffShadow: 0.5 - - _AlphaDstBlend: 0 - - _AlphaSrcBlend: 1 - - _AlphaToMask: 0 - - _AlphaToMaskInspectorValue: 0 - - _Anisotropy: 0 - - _BlendMode: 0 - - _CoatMask: 0 - - _ConservativeDepthOffsetEnable: 0 - - _CullMode: 2 - - _CullModeForward: 2 - - _Cutoff: 0.5 - - _DepthOffsetEnable: 0 - - _DetailAlbedoScale: 1 - - _DetailNormalScale: 1 - - _DetailSmoothnessScale: 1 - - _DiffusionProfile: 0 - - _DiffusionProfileHash: 0 - - _DisplacementLockObjectScale: 1 - - _DisplacementLockTilingScale: 1 - - _DisplacementMode: 0 - - _DistortionBlendMode: 0 - - _DistortionBlurBlendMode: 0 - - _DistortionBlurDstBlend: 0 - - _DistortionBlurRemapMax: 1 - - _DistortionBlurRemapMin: 0 - - _DistortionBlurScale: 1 - - _DistortionBlurSrcBlend: 0 - - _DistortionDepthTest: 1 - - _DistortionDstBlend: 0 - - _DistortionEnable: 0 - - _DistortionScale: 1 - - _DistortionSrcBlend: 0 - - _DistortionVectorBias: -1 - - _DistortionVectorScale: 2 - - _DoubleSidedEnable: 0 - - _DoubleSidedGIMode: 0 - - _DoubleSidedNormalMode: 1 - - _DstBlend: 0 - - _EmissiveColorMode: 1 - - _EmissiveExposureWeight: 1 - - _EmissiveIntensity: 1 - - _EmissiveIntensityUnit: 0 - - _EnableBlendModePreserveSpecularLighting: 1 - - _EnableFogOnTransparent: 1 - - _EnableGeometricSpecularAA: 0 - - _EnableSpecularOcclusion: 0 - - _EnergyConservingSpecularColor: 1 - - _HdrpVersion: 2 - - _HeightAmplitude: 0.02 - - _HeightCenter: 0.5 - - _HeightMapParametrization: 0 - - _HeightMax: 1 - - _HeightMin: -1 - - _HeightOffset: 0 - - _HeightPoMAmplitude: 2 - - _HeightTessAmplitude: 2 - - _HeightTessCenter: 0.5 - - _InvTilingScale: 1 - - _Ior: 1 - - _IridescenceMask: 1 - - _IridescenceThickness: 1 - - _LinkDetailsWithBase: 1 - - _MaterialID: 1 - - _Metallic: 0 - - _NormalMapSpace: 0 - - _NormalScale: 1 - - _OpaqueCullMode: 2 - - _PPDLodThreshold: 5 - - _PPDMaxSamples: 15 - - _PPDMinSamples: 5 - - _PPDPrimitiveLength: 1 - - _PPDPrimitiveWidth: 1 - - _RayTracing: 0 - - _ReceivesSSR: 1 - - _ReceivesSSRTransparent: 0 - - _RefractionModel: 0 - - _RenderQueueType: 1 - - _RequireSplitLighting: 0 - - _SSRefractionProjectionModel: 0 - - _Smoothness: 0.5 - - _SmoothnessRemapMax: 1 - - _SmoothnessRemapMin: 0 - - _SpecularAAScreenSpaceVariance: 0.1 - - _SpecularAAThreshold: 0.2 - - _SrcBlend: 1 - - _StencilRef: 0 - - _StencilRefDepth: 8 - - _StencilRefDistortionVec: 4 - - _StencilRefGBuffer: 10 - - _StencilRefMV: 40 - - _StencilWriteMask: 6 - - _StencilWriteMaskDepth: 8 - - _StencilWriteMaskDistortionVec: 4 - - _StencilWriteMaskGBuffer: 14 - - _StencilWriteMaskMV: 40 - - _SubsurfaceMask: 1 - - _SupportDecals: 1 - - _SurfaceType: 0 - - _TexWorldScale: 1 - - _TexWorldScaleEmissive: 1 - - _Thickness: 1 - - _ThicknessMultiplier: 1 - - _TransmissionEnable: 1 - - _TransparentBackfaceEnable: 0 - - _TransparentCullMode: 2 - - _TransparentDepthPostpassEnable: 0 - - _TransparentDepthPrepassEnable: 0 - - _TransparentSortPriority: 0 - - _TransparentWritingMotionVec: 0 - - _TransparentZWrite: 0 - - _UVBase: 0 - - _UVDetail: 0 - - _UVEmissive: 0 - - _UseEmissiveIntensity: 0 - - _UseShadowThreshold: 0 - - _ZTestDepthEqualForOpaque: 3 - - _ZTestGBuffer: 4 - - _ZTestModeDistortion: 8 - - _ZTestTransparent: 4 - - _ZWrite: 1 - m_Colors: - - Color_9A170B2D: {r: 0.4509804, g: 0.4509804, b: 0.4509804, a: 0} - - Vector2_3344450D: {r: 5, g: 5, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} - - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} - - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} - - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} - - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} - - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} - - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} - - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} - - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} - - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} - - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} - - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} - m_BuildTextureStacks: [] ---- !u!114 &4776210437622097205 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 13 - hdPluginSubTargetMaterialVersions: - m_Keys: [] - m_Values: diff --git a/Assets/Art/Materials/Measured/Rubber/RubberDirt White.mat b/Assets/Art/Materials/Measured/Rubber/RubberDirt White.mat deleted file mode 100644 index 0c45fc5..0000000 --- a/Assets/Art/Materials/Measured/Rubber/RubberDirt White.mat +++ /dev/null @@ -1,320 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: RubberDirt White - m_Shader: {fileID: -6465566751694194690, guid: 8fdac3d3cc81e6146acf04bcab7c9cc8, - type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _DISABLE_SSR_TRANSPARENT - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2225 - stringTagMap: - MotionVector: User - disabledShaderPasses: - - MOTIONVECTORS - - TransparentBackface - - TransparentDepthPrepass - - TransparentDepthPostpass - - RayTracingPrepass - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - Texture2D_1E4703A: - m_Texture: {fileID: 2800000, guid: 7343846adadc0074599d820ce4b23796, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - Texture2D_524261BE: - m_Texture: {fileID: 2800000, guid: affbe13daab5f374d93482b4407635dc, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - Texture2D_B9CEC4F9: - m_Texture: {fileID: 2800000, guid: 361803da4b7bcf348bad32e6bcf90ea8, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _AnisotropyMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BentNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BentNormalMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _CoatMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DistortionVectorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissiveColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _HeightMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescenceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescenceThicknessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecularColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SubsurfaceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TangentMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TangentMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ThicknessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TransmittanceColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_29D01071: 0.4 - - Vector1_2E810D38: 0.382 - - Vector1_7EB7D62C: 1 - - Vector1_BB4DD4C5: 0.2 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0 - - _AORemapMax: 1 - - _AORemapMin: 0 - - _ATDistance: 1 - - _AddPrecomputedVelocity: 0 - - _AlbedoAffectEmissive: 0 - - _AlphaCutoff: 0.5 - - _AlphaCutoffEnable: 0 - - _AlphaCutoffPostpass: 0.5 - - _AlphaCutoffPrepass: 0.5 - - _AlphaCutoffShadow: 0.5 - - _AlphaDstBlend: 0 - - _AlphaSrcBlend: 1 - - _AlphaToMask: 0 - - _AlphaToMaskInspectorValue: 0 - - _Anisotropy: 0 - - _BlendMode: 0 - - _CoatMask: 0 - - _ConservativeDepthOffsetEnable: 0 - - _CullMode: 2 - - _CullModeForward: 2 - - _Cutoff: 0.5 - - _DepthOffsetEnable: 0 - - _DetailAlbedoScale: 1 - - _DetailNormalScale: 1 - - _DetailSmoothnessScale: 1 - - _DiffusionProfile: 0 - - _DiffusionProfileHash: 0 - - _DisplacementLockObjectScale: 1 - - _DisplacementLockTilingScale: 1 - - _DisplacementMode: 0 - - _DistortionBlendMode: 0 - - _DistortionBlurBlendMode: 0 - - _DistortionBlurDstBlend: 0 - - _DistortionBlurRemapMax: 1 - - _DistortionBlurRemapMin: 0 - - _DistortionBlurScale: 1 - - _DistortionBlurSrcBlend: 0 - - _DistortionDepthTest: 1 - - _DistortionDstBlend: 0 - - _DistortionEnable: 0 - - _DistortionScale: 1 - - _DistortionSrcBlend: 0 - - _DistortionVectorBias: -1 - - _DistortionVectorScale: 2 - - _DoubleSidedEnable: 0 - - _DoubleSidedGIMode: 0 - - _DoubleSidedNormalMode: 1 - - _DstBlend: 0 - - _EmissiveColorMode: 1 - - _EmissiveExposureWeight: 1 - - _EmissiveIntensity: 1 - - _EmissiveIntensityUnit: 0 - - _EnableBlendModePreserveSpecularLighting: 1 - - _EnableFogOnTransparent: 1 - - _EnableGeometricSpecularAA: 0 - - _EnableSpecularOcclusion: 0 - - _EnergyConservingSpecularColor: 1 - - _HdrpVersion: 2 - - _HeightAmplitude: 0.02 - - _HeightCenter: 0.5 - - _HeightMapParametrization: 0 - - _HeightMax: 1 - - _HeightMin: -1 - - _HeightOffset: 0 - - _HeightPoMAmplitude: 2 - - _HeightTessAmplitude: 2 - - _HeightTessCenter: 0.5 - - _InvTilingScale: 1 - - _Ior: 1 - - _IridescenceMask: 1 - - _IridescenceThickness: 1 - - _LinkDetailsWithBase: 1 - - _MaterialID: 1 - - _Metallic: 0 - - _NormalMapSpace: 0 - - _NormalScale: 1 - - _OpaqueCullMode: 2 - - _PPDLodThreshold: 5 - - _PPDMaxSamples: 15 - - _PPDMinSamples: 5 - - _PPDPrimitiveLength: 1 - - _PPDPrimitiveWidth: 1 - - _RayTracing: 0 - - _ReceivesSSR: 1 - - _ReceivesSSRTransparent: 0 - - _RefractionModel: 0 - - _RenderQueueType: 1 - - _RequireSplitLighting: 0 - - _SSRefractionProjectionModel: 0 - - _Smoothness: 0.5 - - _SmoothnessRemapMax: 1 - - _SmoothnessRemapMin: 0 - - _SpecularAAScreenSpaceVariance: 0.1 - - _SpecularAAThreshold: 0.2 - - _SrcBlend: 1 - - _StencilRef: 0 - - _StencilRefDepth: 8 - - _StencilRefDistortionVec: 4 - - _StencilRefGBuffer: 10 - - _StencilRefMV: 40 - - _StencilWriteMask: 6 - - _StencilWriteMaskDepth: 9 - - _StencilWriteMaskDistortionVec: 4 - - _StencilWriteMaskGBuffer: 15 - - _StencilWriteMaskMV: 41 - - _SubsurfaceMask: 1 - - _SupportDecals: 1 - - _SurfaceType: 0 - - _TexWorldScale: 1 - - _TexWorldScaleEmissive: 1 - - _Thickness: 1 - - _ThicknessMultiplier: 1 - - _TransmissionEnable: 1 - - _TransparentBackfaceEnable: 0 - - _TransparentCullMode: 2 - - _TransparentDepthPostpassEnable: 0 - - _TransparentDepthPrepassEnable: 0 - - _TransparentSortPriority: 0 - - _TransparentWritingMotionVec: 0 - - _TransparentZWrite: 0 - - _UVBase: 0 - - _UVDetail: 0 - - _UVEmissive: 0 - - _UseEmissiveIntensity: 0 - - _UseShadowThreshold: 0 - - _ZTestDepthEqualForOpaque: 3 - - _ZTestGBuffer: 4 - - _ZTestModeDistortion: 8 - - _ZTestTransparent: 4 - - _ZWrite: 1 - m_Colors: - - Color_9A170B2D: {r: 1, g: 1, b: 1, a: 0} - - Vector2_3344450D: {r: 5, g: 5, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} - - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} - - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} - - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} - - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} - - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} - - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} - - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} - - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} - - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} - - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} - - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} - m_BuildTextureStacks: [] ---- !u!114 &6016001201480335492 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 13 - hdPluginSubTargetMaterialVersions: - m_Keys: [] - m_Values: diff --git a/Assets/Art/Materials/Measured/Rubber/RubberDirt.mat b/Assets/Art/Materials/Measured/Rubber/RubberDirt.mat deleted file mode 100644 index a4aaa9f..0000000 --- a/Assets/Art/Materials/Measured/Rubber/RubberDirt.mat +++ /dev/null @@ -1,320 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: RubberDirt - m_Shader: {fileID: -6465566751694194690, guid: 8fdac3d3cc81e6146acf04bcab7c9cc8, - type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _DISABLE_SSR_TRANSPARENT - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2225 - stringTagMap: - MotionVector: User - disabledShaderPasses: - - MOTIONVECTORS - - TransparentBackface - - TransparentDepthPrepass - - TransparentDepthPostpass - - RayTracingPrepass - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - Texture2D_1E4703A: - m_Texture: {fileID: 2800000, guid: 7343846adadc0074599d820ce4b23796, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - Texture2D_524261BE: - m_Texture: {fileID: 2800000, guid: affbe13daab5f374d93482b4407635dc, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - Texture2D_B9CEC4F9: - m_Texture: {fileID: 2800000, guid: 6d9beadd74e02964c8cb5b19a3f3ea41, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _AnisotropyMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BentNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BentNormalMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _CoatMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DistortionVectorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissiveColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _HeightMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescenceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescenceThicknessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecularColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SubsurfaceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TangentMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TangentMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ThicknessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TransmittanceColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - Boolean_77E75FAA: 0 - - Boolean_F2394607: 0 - - Vector1_20B60D22: 0.1 - - Vector1_29D01071: 0.4 - - Vector1_2E810D38: 0.382 - - Vector1_7EB7D62C: 1 - - Vector1_BB4DD4C5: 0.2 - - Vector1_BD53BAF8: 1 - - Vector1_BDDC6585: 1 - - Vector1_E8712278: 0 - - _AORemapMax: 1 - - _AORemapMin: 0 - - _ATDistance: 1 - - _AddPrecomputedVelocity: 0 - - _AlbedoAffectEmissive: 0 - - _AlphaCutoff: 0.5 - - _AlphaCutoffEnable: 0 - - _AlphaCutoffPostpass: 0.5 - - _AlphaCutoffPrepass: 0.5 - - _AlphaCutoffShadow: 0.5 - - _AlphaDstBlend: 0 - - _AlphaSrcBlend: 1 - - _AlphaToMask: 0 - - _AlphaToMaskInspectorValue: 0 - - _Anisotropy: 0 - - _BlendMode: 0 - - _CoatMask: 0 - - _ConservativeDepthOffsetEnable: 0 - - _CullMode: 2 - - _CullModeForward: 2 - - _Cutoff: 0.5 - - _DepthOffsetEnable: 0 - - _DetailAlbedoScale: 1 - - _DetailNormalScale: 1 - - _DetailSmoothnessScale: 1 - - _DiffusionProfile: 0 - - _DiffusionProfileHash: 0 - - _DisplacementLockObjectScale: 1 - - _DisplacementLockTilingScale: 1 - - _DisplacementMode: 0 - - _DistortionBlendMode: 0 - - _DistortionBlurBlendMode: 0 - - _DistortionBlurDstBlend: 0 - - _DistortionBlurRemapMax: 1 - - _DistortionBlurRemapMin: 0 - - _DistortionBlurScale: 1 - - _DistortionBlurSrcBlend: 0 - - _DistortionDepthTest: 1 - - _DistortionDstBlend: 0 - - _DistortionEnable: 0 - - _DistortionScale: 1 - - _DistortionSrcBlend: 0 - - _DistortionVectorBias: -1 - - _DistortionVectorScale: 2 - - _DoubleSidedEnable: 0 - - _DoubleSidedGIMode: 0 - - _DoubleSidedNormalMode: 1 - - _DstBlend: 0 - - _EmissiveColorMode: 1 - - _EmissiveExposureWeight: 1 - - _EmissiveIntensity: 1 - - _EmissiveIntensityUnit: 0 - - _EnableBlendModePreserveSpecularLighting: 1 - - _EnableFogOnTransparent: 1 - - _EnableGeometricSpecularAA: 0 - - _EnableSpecularOcclusion: 0 - - _EnergyConservingSpecularColor: 1 - - _HdrpVersion: 2 - - _HeightAmplitude: 0.02 - - _HeightCenter: 0.5 - - _HeightMapParametrization: 0 - - _HeightMax: 1 - - _HeightMin: -1 - - _HeightOffset: 0 - - _HeightPoMAmplitude: 2 - - _HeightTessAmplitude: 2 - - _HeightTessCenter: 0.5 - - _InvTilingScale: 1 - - _Ior: 1 - - _IridescenceMask: 1 - - _IridescenceThickness: 1 - - _LinkDetailsWithBase: 1 - - _MaterialID: 1 - - _Metallic: 0 - - _NormalMapSpace: 0 - - _NormalScale: 1 - - _OpaqueCullMode: 2 - - _PPDLodThreshold: 5 - - _PPDMaxSamples: 15 - - _PPDMinSamples: 5 - - _PPDPrimitiveLength: 1 - - _PPDPrimitiveWidth: 1 - - _RayTracing: 0 - - _ReceivesSSR: 1 - - _ReceivesSSRTransparent: 0 - - _RefractionModel: 0 - - _RenderQueueType: 1 - - _RequireSplitLighting: 0 - - _SSRefractionProjectionModel: 0 - - _Smoothness: 0.5 - - _SmoothnessRemapMax: 1 - - _SmoothnessRemapMin: 0 - - _SpecularAAScreenSpaceVariance: 0.1 - - _SpecularAAThreshold: 0.2 - - _SrcBlend: 1 - - _StencilRef: 0 - - _StencilRefDepth: 8 - - _StencilRefDistortionVec: 4 - - _StencilRefGBuffer: 10 - - _StencilRefMV: 40 - - _StencilWriteMask: 6 - - _StencilWriteMaskDepth: 8 - - _StencilWriteMaskDistortionVec: 4 - - _StencilWriteMaskGBuffer: 14 - - _StencilWriteMaskMV: 40 - - _SubsurfaceMask: 1 - - _SupportDecals: 1 - - _SurfaceType: 0 - - _TexWorldScale: 1 - - _TexWorldScaleEmissive: 1 - - _Thickness: 1 - - _ThicknessMultiplier: 1 - - _TransmissionEnable: 1 - - _TransparentBackfaceEnable: 0 - - _TransparentCullMode: 2 - - _TransparentDepthPostpassEnable: 0 - - _TransparentDepthPrepassEnable: 0 - - _TransparentSortPriority: 0 - - _TransparentWritingMotionVec: 0 - - _TransparentZWrite: 0 - - _UVBase: 0 - - _UVDetail: 0 - - _UVEmissive: 0 - - _UseEmissiveIntensity: 0 - - _UseShadowThreshold: 0 - - _ZTestDepthEqualForOpaque: 3 - - _ZTestGBuffer: 4 - - _ZTestModeDistortion: 8 - - _ZTestTransparent: 4 - - _ZWrite: 1 - m_Colors: - - Color_9A170B2D: {r: 1, g: 1, b: 1, a: 0} - - Vector2_3344450D: {r: 5, g: 5, b: 0, a: 0} - - Vector2_7CFC7CEF: {r: 0, g: 0, b: 0, a: 0} - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} - - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} - - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} - - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} - - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} - - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} - - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} - - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} - - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} - - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} - - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} - - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} - m_BuildTextureStacks: [] ---- !u!114 &6016001201480335492 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 13 - hdPluginSubTargetMaterialVersions: - m_Keys: [] - m_Values: diff --git a/Assets/Art/Materials/Visual Pinball/Light (Bulb).mat b/Assets/Art/Materials/Visual Pinball/Light (Bulb).mat index 6f21490..84b47c7 100644 --- a/Assets/Art/Materials/Visual Pinball/Light (Bulb).mat +++ b/Assets/Art/Materials/Visual Pinball/Light (Bulb).mat @@ -34,7 +34,7 @@ Material: - _SURFACE_TYPE_TRANSPARENT m_InvalidKeywords: [] m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 + m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 m_CustomRenderQueue: 3000 stringTagMap: diff --git a/Assets/Art/Materials/Measured/Rubber.meta b/Assets/EditorResources/Prefabs/Screenshot.meta similarity index 77% rename from Assets/Art/Materials/Measured/Rubber.meta rename to Assets/EditorResources/Prefabs/Screenshot.meta index 5eeb4cc..c01f670 100644 --- a/Assets/Art/Materials/Measured/Rubber.meta +++ b/Assets/EditorResources/Prefabs/Screenshot.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b0c18c5f2f4bd7e44bc8002ab30108fa +guid: c63658719085d9c47a65254a5c67e28a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/EditorResources/Prefabs/Screenshot/Camera.prefab b/Assets/EditorResources/Prefabs/Screenshot/Camera.prefab new file mode 100644 index 0000000..c8763dc --- /dev/null +++ b/Assets/EditorResources/Prefabs/Screenshot/Camera.prefab @@ -0,0 +1,275 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1307834878885156031 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4633372326761225632} + - component: {fileID: 61893913141357991} + - component: {fileID: 735507037576757371} + - component: {fileID: 2825298320066550030} + - component: {fileID: 4817292252108891711} + - component: {fileID: 3946951019361322933} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4633372326761225632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307834878885156031} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!20 &61893913141357991 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307834878885156031} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 2 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 1100 + m_ShutterSpeed: 0.02 + m_Aperture: 5.6 + m_FocusDistance: 10 + m_FocalLength: 305.50766 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 24, y: 16} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 9 + field of view: 3 + orthographic: 0 + orthographic size: 10 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!81 &735507037576757371 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307834878885156031} + m_Enabled: 1 +--- !u!114 &2825298320066550030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307834878885156031} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 23c1ce4fb46143f46bc5cb5224c934f6, type: 3} + m_Name: + m_EditorClassIdentifier: + clearColorMode: 0 + backgroundColorHDR: {r: 0.025, g: 0.07, b: 0.19, a: 0} + clearDepth: 1 + volumeLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + volumeAnchorOverride: {fileID: 0} + antialiasing: 3 + SMAAQuality: 2 + dithering: 0 + stopNaNs: 0 + taaSharpenStrength: 0.78 + TAAQuality: 2 + taaSharpenMode: 0 + taaRingingReduction: 0 + taaHistorySharpening: 0.592 + taaAntiFlicker: 0.81 + taaMotionVectorRejection: 0 + taaAntiHistoryRinging: 1 + taaBaseBlendFactor: 0.875 + taaJitterScale: 1 + physicalParameters: + m_Iso: 1100 + m_ShutterSpeed: 0.02 + m_Aperture: 5.6 + m_FocusDistance: 10 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + flipYMode: 0 + xrRendering: 1 + fullscreenPassthrough: 0 + allowDynamicResolution: 0 + customRenderingSettings: 1 + invertFaceCulling: 0 + probeLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + hasPersistentHistory: 0 + screenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + screenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + allowDeepLearningSuperSampling: 1 + deepLearningSuperSamplingUseCustomQualitySettings: 0 + deepLearningSuperSamplingQuality: 0 + deepLearningSuperSamplingUseCustomAttributes: 0 + deepLearningSuperSamplingUseOptimalSettings: 1 + deepLearningSuperSamplingSharpening: 0 + allowFidelityFX2SuperResolution: 1 + fidelityFX2SuperResolutionUseCustomQualitySettings: 0 + fidelityFX2SuperResolutionQuality: 0 + fidelityFX2SuperResolutionUseCustomAttributes: 0 + fidelityFX2SuperResolutionUseOptimalSettings: 1 + fidelityFX2SuperResolutionEnableSharpening: 0 + fidelityFX2SuperResolutionSharpening: 0 + fsrOverrideSharpness: 0 + fsrSharpness: 0.92 + exposureTarget: {fileID: 0} + materialMipBias: 0 + m_RenderingPathCustomFrameSettings: + bitDatas: + data1: 72127351782899471 + data2: 13763000469717909504 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 9 + materialQuality: 0 + renderingPathCustomFrameSettingsOverrideMask: + mask: + data1: 71465268844399 + data2: 17179803648 + defaultFrameSettings: 0 + m_Version: 9 + m_ObsoleteRenderingPath: 0 + m_ObsoleteFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 +--- !u!114 &4817292252108891711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307834878885156031} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 869da57aeeeeca34f879e2e9be2e23bb, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &3946951019361322933 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307834878885156031} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2bbdee04830a45449bbceaa234a2a2b6, type: 3} + m_Name: + m_EditorClassIdentifier: + panSpeed: 10 + orbitSpeed: 10 + zoomSpeed: 10 + smoothing: 5 + ballCamSmoothing: 20 + initialOrbit: {fileID: 0} + lockTarget: {fileID: 0} + focusWithGamepad: 1 + defaultFocusDistance: 1 + minFocusDistance: 0.3 + maxFocusDistance: 1.5 + player: {fileID: 0} + dofVolume: {fileID: 0} + positionOffset: {x: 0.26449245, y: 0, z: -0.5732074} + isAnimating: 0 diff --git a/Assets/Art/Materials/Measured/Rubber/RubberDirt.mat.meta b/Assets/EditorResources/Prefabs/Screenshot/Camera.prefab.meta similarity index 54% rename from Assets/Art/Materials/Measured/Rubber/RubberDirt.mat.meta rename to Assets/EditorResources/Prefabs/Screenshot/Camera.prefab.meta index 7136ee8..cb9b263 100644 --- a/Assets/Art/Materials/Measured/Rubber/RubberDirt.mat.meta +++ b/Assets/EditorResources/Prefabs/Screenshot/Camera.prefab.meta @@ -1,8 +1,7 @@ fileFormatVersion: 2 -guid: 4f9a7826dd41fb846aad23fba0884900 -NativeFormatImporter: +guid: 35533cf90ff55004da16a35ee8204450 +PrefabImporter: externalObjects: {} - mainObjectFileID: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/EditorResources/Prefabs/Screenshot/DirectionalLight.prefab b/Assets/EditorResources/Prefabs/Screenshot/DirectionalLight.prefab new file mode 100644 index 0000000..0dd9cea --- /dev/null +++ b/Assets/EditorResources/Prefabs/Screenshot/DirectionalLight.prefab @@ -0,0 +1,242 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7631563275570800826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5852332728881948154} + - component: {fileID: 807113009505553765} + - component: {fileID: 7871148201223638717} + m_Layer: 0 + m_Name: DirectionalLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5852332728881948154 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7631563275570800826} + serializedVersion: 2 + m_LocalRotation: {x: 0.14389731, y: 0.35668385, z: -0.8924626, w: -0.23575555} + m_LocalPosition: {x: -0.172, y: -2.074, z: 0.322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 145.33301, y: 148.884, z: -39.526978} +--- !u!108 &807113009505553765 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7631563275570800826} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 300 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 2 + m_AreaSize: {x: 0.5, y: 0.5} + m_BounceIntensity: 1 + m_ColorTemperature: 4900 + m_UseColorTemperature: 1 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 2 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!114 &7871148201223638717 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7631563275570800826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3} + m_Name: + m_EditorClassIdentifier: + m_PointlightHDType: 0 + m_SpotLightShape: 0 + m_AreaLightShape: 0 + m_EnableSpotReflector: 1 + m_LightUnit: 2 + m_LuxAtDistance: 1 + m_Intensity: 300 + m_InnerSpotPercent: -1 + m_ShapeWidth: -1 + m_ShapeHeight: -1 + m_AspectRatio: 1 + m_SpotIESCutoffPercent: 100 + m_LightDimmer: 1 + m_VolumetricDimmer: 1 + m_FadeDistance: 10000 + m_VolumetricFadeDistance: 10000 + m_AffectDiffuse: 1 + m_AffectSpecular: 1 + m_NonLightmappedOnly: 0 + m_ShapeRadius: 0.025 + m_SoftnessScale: 1 + m_UseCustomSpotLightShadowCone: 0 + m_CustomSpotLightShadowCone: 30 + m_MaxSmoothness: 0.99 + m_ApplyRangeAttenuation: 1 + m_DisplayAreaLightEmissiveMesh: 0 + m_AreaLightCookie: {fileID: 0} + m_IESPoint: {fileID: 0} + m_IESSpot: {fileID: 0} + m_IncludeForRayTracing: 1 + m_IncludeForPathTracing: 1 + m_AreaLightShadowCone: 120 + m_UseScreenSpaceShadows: 0 + m_InteractsWithSky: 1 + m_AngularDiameter: 2 + diameterMultiplerMode: 0 + diameterMultiplier: 1 + diameterOverride: 0.5 + celestialBodyShadingSource: 1 + sunLightOverride: {fileID: 0} + sunColor: {r: 1, g: 1, b: 1, a: 1} + sunIntensity: 130000 + moonPhase: 0.2 + moonPhaseRotation: 0 + earthshine: 1 + flareSize: 2 + flareTint: {r: 1, g: 1, b: 1, a: 1} + flareFalloff: 4 + flareMultiplier: 1 + surfaceTexture: {fileID: 0} + surfaceTint: {r: 1, g: 1, b: 1, a: 1} + m_Distance: 1.5e+11 + m_UseRayTracedShadows: 0 + m_NumRayTracingSamples: 7 + m_FilterTracedShadow: 1 + m_FilterSizeTraced: 18 + m_SunLightConeAngle: 0.5 + m_LightShadowRadius: 0.5 + m_SemiTransparentShadow: 0 + m_ColorShadow: 1 + m_DistanceBasedFiltering: 0 + m_EvsmExponent: 15 + m_EvsmLightLeakBias: 0 + m_EvsmVarianceBias: 0.00001 + m_EvsmBlurPasses: 0 + m_LightlayersMask: 1 + m_LinkShadowLayers: 1 + m_ShadowNearPlane: 0.1 + m_BlockerSampleCount: 24 + m_FilterSampleCount: 16 + m_MinFilterSize: 0.1 + m_DirLightPCSSBlockerSampleCount: 24 + m_DirLightPCSSFilterSampleCount: 16 + m_DirLightPCSSMaxPenumbraSize: 0.56 + m_DirLightPCSSMaxSamplingDistance: 0.5 + m_DirLightPCSSMinFilterSizeTexels: 1.5 + m_DirLightPCSSMinFilterMaxAngularDiameter: 10 + m_DirLightPCSSBlockerSearchAngularDiameter: 12 + m_DirLightPCSSBlockerSamplingClumpExponent: 2 + m_KernelSize: 5 + m_LightAngle: 1 + m_MaxDepthBias: 0.001 + m_ShadowResolution: + m_Override: 256 + m_UseOverride: 1 + m_Level: 0 + m_ShadowDimmer: 1 + m_VolumetricShadowDimmer: 1 + m_ShadowFadeDistance: 10000 + m_UseContactShadow: + m_Override: 0 + m_UseOverride: 1 + m_Level: 2 + m_RayTracedContactShadow: 0 + m_ShadowTint: {r: 0, g: 0, b: 0, a: 1} + m_PenumbraTint: 0 + m_NormalBias: 0.75 + m_SlopeBias: 0.124 + m_ShadowUpdateMode: 0 + m_AlwaysDrawDynamicShadows: 0 + m_UpdateShadowOnLightMovement: 0 + m_CachedShadowTranslationThreshold: 0.01 + m_CachedShadowAngularThreshold: 0.5 + m_BarnDoorAngle: 90 + m_BarnDoorLength: 0.05 + m_preserveCachedShadow: 0 + m_OnDemandShadowRenderOnPlacement: 1 + m_ShadowCascadeRatios: + - 0.05 + - 0.2 + - 0.3 + m_ShadowCascadeBorders: + - 0.2 + - 0.2 + - 0.2 + - 0.2 + m_ShadowAlgorithm: 0 + m_ShadowVariant: 0 + m_ShadowPrecision: 0 + useOldInspector: 0 + useVolumetric: 1 + featuresFoldout: 1 + m_AreaLightEmissiveMeshShadowCastingMode: 0 + m_AreaLightEmissiveMeshMotionVectorGenerationMode: 0 + m_AreaLightEmissiveMeshLayer: -1 + m_Version: 14 + m_ObsoleteShadowResolutionTier: 1 + m_ObsoleteUseShadowQualitySettings: 0 + m_ObsoleteCustomShadowResolution: 512 + m_ObsoleteContactShadows: 0 diff --git a/Assets/EditorResources/Prefabs/Screenshot/DirectionalLight.prefab.meta b/Assets/EditorResources/Prefabs/Screenshot/DirectionalLight.prefab.meta new file mode 100644 index 0000000..a026ced --- /dev/null +++ b/Assets/EditorResources/Prefabs/Screenshot/DirectionalLight.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 97c116cbd65fbfa47839bb67ec8c4543 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Graphs.meta b/Assets/Resources/Graphs.meta new file mode 100644 index 0000000..4c75475 --- /dev/null +++ b/Assets/Resources/Graphs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e062b4e4a6c659343b4cbddcd373c909 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Graphs/Metal.shadergraph b/Assets/Resources/Graphs/Metal.shadergraph similarity index 93% rename from Assets/Art/Graphs/Metal.shadergraph rename to Assets/Resources/Graphs/Metal.shadergraph index 9db8e04..3c957bb 100644 --- a/Assets/Art/Graphs/Metal.shadergraph +++ b/Assets/Resources/Graphs/Metal.shadergraph @@ -4,79 +4,79 @@ "typeInfo": { "fullName": "UnityEditor.ShaderGraph.ColorShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Color\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"f8eb412e-f340-43ca-a9f7-95fcb1ec1f6f\"\n },\n \"m_DefaultReferenceName\": \"Color_AD8F67CE\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"r\": 1.0,\n \"g\": 1.0,\n \"b\": 1.0,\n \"a\": 0.0\n },\n \"m_ColorMode\": 0,\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Color\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"f8eb412e-f340-43ca-a9f7-95fcb1ec1f6f\"\n },\n \"m_DefaultReferenceName\": \"_VpeColor\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"r\": 1.0,\n \"g\": 1.0,\n \"b\": 1.0,\n \"a\": 0.0\n },\n \"m_ColorMode\": 0,\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.TextureShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Mask Map\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"08c12969-f961-4c19-8379-f82b982d7d99\"\n },\n \"m_DefaultReferenceName\": \"Texture2D_1E4703A\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"e2e0fbff39661804e8d1c76df2334d8f\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" + "JSONnodeData": "{\n \"m_Name\": \"Mask Map\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"08c12969-f961-4c19-8379-f82b982d7d99\"\n },\n \"m_DefaultReferenceName\": \"_VpeMaskMap\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"e2e0fbff39661804e8d1c76df2334d8f\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Metallic Intensity\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"308d3cc0-6bd1-4972-9694-2b6b3b5aa2f6\"\n },\n \"m_DefaultReferenceName\": \"Vector1_BD53BAF8\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Metallic Intensity\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"308d3cc0-6bd1-4972-9694-2b6b3b5aa2f6\"\n },\n \"m_DefaultReferenceName\": \"_VpeMetallicIntensity\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Smoothness Remap Min\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"f0ec8223-5ac2-4ad4-b260-fd873e778f72\"\n },\n \"m_DefaultReferenceName\": \"Vector1_E8712278\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.35100001096725466,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Smoothness Remap Min\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"f0ec8223-5ac2-4ad4-b260-fd873e778f72\"\n },\n \"m_DefaultReferenceName\": \"_VpeSmoothnessRemapMin\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.35100001096725466,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Smoothness Remap Max\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"2cb3926e-7fa9-4250-817b-45e6164cf209\"\n },\n \"m_DefaultReferenceName\": \"Vector1_2E810D38\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.9750000238418579,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Smoothness Remap Max\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"2cb3926e-7fa9-4250-817b-45e6164cf209\"\n },\n \"m_DefaultReferenceName\": \"_VpeSmoothnessRemapMax\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.9750000238418579,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Occlusion Intensity\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0dcd71f3-415f-4b97-b7a0-5210c19e436c\"\n },\n \"m_DefaultReferenceName\": \"Vector1_7EB7D62C\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Occlusion Intensity\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0dcd71f3-415f-4b97-b7a0-5210c19e436c\"\n },\n \"m_DefaultReferenceName\": \"_VpeOcclusionIntensity\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector2ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Tiling\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0631a177-5d31-4f83-907b-3655399df5a5\"\n },\n \"m_DefaultReferenceName\": \"Vector2_3344450D\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"x\": 3.0,\n \"y\": 3.0,\n \"z\": 0.0,\n \"w\": 0.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Tiling\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0631a177-5d31-4f83-907b-3655399df5a5\"\n },\n \"m_DefaultReferenceName\": \"_VpeTiling\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"x\": 3.0,\n \"y\": 3.0,\n \"z\": 0.0,\n \"w\": 0.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector2ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Offset\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"ae9b7bad-6c92-4587-8961-35e784c593da\"\n },\n \"m_DefaultReferenceName\": \"Vector2_7CFC7CEF\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"x\": 0.0,\n \"y\": 0.0,\n \"z\": 0.0,\n \"w\": 0.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Offset\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"ae9b7bad-6c92-4587-8961-35e784c593da\"\n },\n \"m_DefaultReferenceName\": \"_VpeOffset\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"x\": 0.0,\n \"y\": 0.0,\n \"z\": 0.0,\n \"w\": 0.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.BooleanShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Make Triplanar\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"c7867a85-9649-4b38-9d67-527196907815\"\n },\n \"m_DefaultReferenceName\": \"Boolean_F2394607\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": false,\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Make Triplanar\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"c7867a85-9649-4b38-9d67-527196907815\"\n },\n \"m_DefaultReferenceName\": \"_VpeMakeTriplanar\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": false,\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.BooleanShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Make Triplanar WorldSpace (Triplanar must be activated)\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"4d0723b7-1743-4ec7-9b07-d79957e49017\"\n },\n \"m_DefaultReferenceName\": \"Boolean_77E75FAA\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": false,\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Make Triplanar WorldSpace (Triplanar must be activated)\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"4d0723b7-1743-4ec7-9b07-d79957e49017\"\n },\n \"m_DefaultReferenceName\": \"_VpeMakeTriplanarWorldSpace\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": false,\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Triplanar Blend\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"ba9a5db5-fd2e-429e-b77b-d68b42f1fe29\"\n },\n \"m_DefaultReferenceName\": \"Vector1_BDDC6585\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Triplanar Blend\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"ba9a5db5-fd2e-429e-b77b-d68b42f1fe29\"\n },\n \"m_DefaultReferenceName\": \"_VpeTriplanarBlend\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Specular AA Screen Space Variance\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"c7194e83-cf44-4142-a98a-a7ef5653018f\"\n },\n \"m_DefaultReferenceName\": \"Vector1_20B60D22\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.10000000149011612,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Specular AA Screen Space Variance\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"c7194e83-cf44-4142-a98a-a7ef5653018f\"\n },\n \"m_DefaultReferenceName\": \"_VpeSpecularAAScreenSpaceVariance\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.10000000149011612,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Specular AA Treshold\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"44fdd183-dc0b-406e-828e-f5b3fc9dc9c8\"\n },\n \"m_DefaultReferenceName\": \"Vector1_BB4DD4C5\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.20000000298023225,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Specular AA Treshold\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"44fdd183-dc0b-406e-828e-f5b3fc9dc9c8\"\n },\n \"m_DefaultReferenceName\": \"_VpeSpecularAAThreshold\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.20000000298023225,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" } ], "m_SerializableNodes": [ diff --git a/Assets/Art/Graphs/Metal.shadergraph.meta b/Assets/Resources/Graphs/Metal.shadergraph.meta similarity index 100% rename from Assets/Art/Graphs/Metal.shadergraph.meta rename to Assets/Resources/Graphs/Metal.shadergraph.meta diff --git a/Assets/Art/Graphs/Rubber.shadergraph b/Assets/Resources/Graphs/Rubber.shadergraph similarity index 94% rename from Assets/Art/Graphs/Rubber.shadergraph rename to Assets/Resources/Graphs/Rubber.shadergraph index 570fcf3..42da3bd 100644 --- a/Assets/Art/Graphs/Rubber.shadergraph +++ b/Assets/Resources/Graphs/Rubber.shadergraph @@ -4,91 +4,91 @@ "typeInfo": { "fullName": "UnityEditor.ShaderGraph.TextureShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Base Color Map\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"92876efc-0b8f-4016-aec6-93c67da1ea2c\"\n },\n \"m_DefaultReferenceName\": \"Texture2D_B9CEC4F9\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"6d9beadd74e02964c8cb5b19a3f3ea41\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" + "JSONnodeData": "{\n \"m_Name\": \"Base Color Map\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"92876efc-0b8f-4016-aec6-93c67da1ea2c\"\n },\n \"m_DefaultReferenceName\": \"_VpeBaseColorMap\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"6d9beadd74e02964c8cb5b19a3f3ea41\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.ColorShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Color Tint\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"9ffc6092-6329-4d83-a9e7-61d9e5fa4a71\"\n },\n \"m_DefaultReferenceName\": \"Color_9A170B2D\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"r\": 1.0,\n \"g\": 1.0,\n \"b\": 1.0,\n \"a\": 0.0\n },\n \"m_ColorMode\": 0,\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Color Tint\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"9ffc6092-6329-4d83-a9e7-61d9e5fa4a71\"\n },\n \"m_DefaultReferenceName\": \"_VpeColorTint\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"r\": 1.0,\n \"g\": 1.0,\n \"b\": 1.0,\n \"a\": 0.0\n },\n \"m_ColorMode\": 0,\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.TextureShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Normal Map\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0e1bf1e4-026a-4fa8-a98c-eb8bf134e6c7\"\n },\n \"m_DefaultReferenceName\": \"Texture2D_524261BE\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"affbe13daab5f374d93482b4407635dc\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" + "JSONnodeData": "{\n \"m_Name\": \"Normal Map\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0e1bf1e4-026a-4fa8-a98c-eb8bf134e6c7\"\n },\n \"m_DefaultReferenceName\": \"_VpeNormalMap\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"affbe13daab5f374d93482b4407635dc\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Normal Intensity\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"da8c88ab-7532-4bcb-893e-df498038c787\"\n },\n \"m_DefaultReferenceName\": \"Vector1_29D01071\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.4000000059604645,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 2.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Normal Intensity\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"da8c88ab-7532-4bcb-893e-df498038c787\"\n },\n \"m_DefaultReferenceName\": \"_VpeNormalIntensity\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.4000000059604645,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 2.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.TextureShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Mask Map\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"08c12969-f961-4c19-8379-f82b982d7d99\"\n },\n \"m_DefaultReferenceName\": \"Texture2D_1E4703A\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"7343846adadc0074599d820ce4b23796\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" + "JSONnodeData": "{\n \"m_Name\": \"Mask Map\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"08c12969-f961-4c19-8379-f82b982d7d99\"\n },\n \"m_DefaultReferenceName\": \"_VpeMaskMap\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"m_SerializedTexture\": \"{\\\"texture\\\":{\\\"fileID\\\":2800000,\\\"guid\\\":\\\"7343846adadc0074599d820ce4b23796\\\",\\\"type\\\":3}}\",\n \"m_Guid\": \"\"\n },\n \"m_Modifiable\": true,\n \"m_DefaultType\": 0\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Smoothness Remap Min\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"f0ec8223-5ac2-4ad4-b260-fd873e778f72\"\n },\n \"m_DefaultReferenceName\": \"Vector1_E8712278\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.0,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Smoothness Remap Min\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"f0ec8223-5ac2-4ad4-b260-fd873e778f72\"\n },\n \"m_DefaultReferenceName\": \"_VpeSmoothnessRemapMin\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.0,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Smoothness Remap Max\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"2cb3926e-7fa9-4250-817b-45e6164cf209\"\n },\n \"m_DefaultReferenceName\": \"Vector1_2E810D38\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.38199999928474429,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Smoothness Remap Max\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"2cb3926e-7fa9-4250-817b-45e6164cf209\"\n },\n \"m_DefaultReferenceName\": \"_VpeSmoothnessRemapMax\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.38199999928474429,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Occlusion Intensity\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0dcd71f3-415f-4b97-b7a0-5210c19e436c\"\n },\n \"m_DefaultReferenceName\": \"Vector1_7EB7D62C\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Occlusion Intensity\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0dcd71f3-415f-4b97-b7a0-5210c19e436c\"\n },\n \"m_DefaultReferenceName\": \"_VpeOcclusionIntensity\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 1,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector2ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Tiling\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0631a177-5d31-4f83-907b-3655399df5a5\"\n },\n \"m_DefaultReferenceName\": \"Vector2_3344450D\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"x\": 5.0,\n \"y\": 5.0,\n \"z\": 0.0,\n \"w\": 0.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Tiling\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"0631a177-5d31-4f83-907b-3655399df5a5\"\n },\n \"m_DefaultReferenceName\": \"_VpeTiling\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"x\": 5.0,\n \"y\": 5.0,\n \"z\": 0.0,\n \"w\": 0.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector2ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Offset\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"ae9b7bad-6c92-4587-8961-35e784c593da\"\n },\n \"m_DefaultReferenceName\": \"Vector2_7CFC7CEF\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"x\": 0.0,\n \"y\": 0.0,\n \"z\": 0.0,\n \"w\": 0.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Offset\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"ae9b7bad-6c92-4587-8961-35e784c593da\"\n },\n \"m_DefaultReferenceName\": \"_VpeOffset\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": {\n \"x\": 0.0,\n \"y\": 0.0,\n \"z\": 0.0,\n \"w\": 0.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.BooleanShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Make Triplanar\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"c7867a85-9649-4b38-9d67-527196907815\"\n },\n \"m_DefaultReferenceName\": \"Boolean_F2394607\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": false,\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Make Triplanar\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"c7867a85-9649-4b38-9d67-527196907815\"\n },\n \"m_DefaultReferenceName\": \"_VpeMakeTriplanar\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": false,\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.BooleanShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Make Triplanar WorldSpace (Triplanar must be activated)\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"4d0723b7-1743-4ec7-9b07-d79957e49017\"\n },\n \"m_DefaultReferenceName\": \"Boolean_77E75FAA\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": false,\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Make Triplanar WorldSpace (Triplanar must be activated)\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"4d0723b7-1743-4ec7-9b07-d79957e49017\"\n },\n \"m_DefaultReferenceName\": \"_VpeMakeTriplanarWorldSpace\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": false,\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Triplanar Blend\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"ba9a5db5-fd2e-429e-b77b-d68b42f1fe29\"\n },\n \"m_DefaultReferenceName\": \"Vector1_BDDC6585\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Triplanar Blend\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"ba9a5db5-fd2e-429e-b77b-d68b42f1fe29\"\n },\n \"m_DefaultReferenceName\": \"_VpeTriplanarBlend\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 1.0,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Specular AA Screen Space Variance\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"c7194e83-cf44-4142-a98a-a7ef5653018f\"\n },\n \"m_DefaultReferenceName\": \"Vector1_20B60D22\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.10000000149011612,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Specular AA Screen Space Variance\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"c7194e83-cf44-4142-a98a-a7ef5653018f\"\n },\n \"m_DefaultReferenceName\": \"_VpeSpecularAAScreenSpaceVariance\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.10000000149011612,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" }, { "typeInfo": { "fullName": "UnityEditor.ShaderGraph.Vector1ShaderProperty" }, - "JSONnodeData": "{\n \"m_Name\": \"Specular AA Treshold\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"44fdd183-dc0b-406e-828e-f5b3fc9dc9c8\"\n },\n \"m_DefaultReferenceName\": \"Vector1_BB4DD4C5\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.20000000298023225,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" + "JSONnodeData": "{\n \"m_Name\": \"Specular AA Treshold\",\n \"m_GeneratePropertyBlock\": true,\n \"m_Guid\": {\n \"m_GuidSerialized\": \"44fdd183-dc0b-406e-828e-f5b3fc9dc9c8\"\n },\n \"m_DefaultReferenceName\": \"_VpeSpecularAAThreshold\",\n \"m_OverrideReferenceName\": \"\",\n \"m_Precision\": 0,\n \"m_Value\": 0.20000000298023225,\n \"m_FloatType\": 0,\n \"m_RangeValues\": {\n \"x\": 0.0,\n \"y\": 1.0\n },\n \"m_Hidden\": false\n}" } ], "m_SerializableNodes": [ diff --git a/Assets/Art/Graphs/Rubber.shadergraph.meta b/Assets/Resources/Graphs/Rubber.shadergraph.meta similarity index 100% rename from Assets/Art/Graphs/Rubber.shadergraph.meta rename to Assets/Resources/Graphs/Rubber.shadergraph.meta diff --git a/LookDev~/Assets/Materials/Wood, Solid.mat b/Assets/Resources/Materials/VpeDecalTemplate.mat similarity index 87% rename from LookDev~/Assets/Materials/Wood, Solid.mat rename to Assets/Resources/Materials/VpeDecalTemplate.mat index c91e1d8..80cfa82 100644 --- a/LookDev~/Assets/Materials/Wood, Solid.mat +++ b/Assets/Resources/Materials/VpeDecalTemplate.mat @@ -1,21 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-5356917893099157034 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 13 - hdPluginSubTargetMaterialVersions: - m_Keys: [] - m_Values: --- !u!21 &2100000 Material: serializedVersion: 8 @@ -23,20 +7,23 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Wood, Solid - m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Name: VpeDecalTemplate + m_Shader: {fileID: 4800000, guid: 1d64af84bdc970c4fae0c1e06dd95b73, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - - _DISABLE_SSR_TRANSPARENT - - _MASKMAP + - _COLORMAP + - _MATERIAL_AFFECTS_ALBEDO + - _MATERIAL_AFFECTS_MASKMAP + - _MATERIAL_AFFECTS_NORMAL - _NORMALMAP + m_InvalidKeywords: + - _DISABLE_SSR_TRANSPARENT - _NORMALMAP_TANGENT_SPACE - m_InvalidKeywords: [] m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 + m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2225 + m_CustomRenderQueue: 2000 stringTagMap: {} disabledShaderPasses: - TransparentDepthPrepass @@ -44,6 +31,8 @@ Material: - TransparentBackface - RayTracingPrepass - MOTIONVECTORS + - DecalMeshForwardEmissive + - DecalProjectorForwardEmissive m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -53,7 +42,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BaseColorMap: - m_Texture: {fileID: 2800000, guid: 537723115918bd94cbaa7f3265c2f419, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BentNormalMap: @@ -89,15 +78,15 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: 537723115918bd94cbaa7f3265c2f419, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MaskMap: - m_Texture: {fileID: 2800000, guid: e54c329f93b39ca40ba0fe6396714c8f, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _NormalMap: - m_Texture: {fileID: 2800000, guid: 982896cd83f4ce0449aa832d6a49be9c, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _NormalMapOS: @@ -146,10 +135,17 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - _AO: 1 - _AORemapMax: 1 - _AORemapMin: 0 - _ATDistance: 1 - _AddPrecomputedVelocity: 0 + - _AffectAO: 0 + - _AffectAlbedo: 1 + - _AffectEmission: 0 + - _AffectMetal: 1 + - _AffectNormal: 1 + - _AffectSmoothness: 1 - _AlbedoAffectEmissive: 0 - _AlphaCutoff: 0.5 - _AlphaCutoffEnable: 0 @@ -160,14 +156,23 @@ Material: - _AlphaRemapMax: 1 - _AlphaRemapMin: 0 - _AlphaSrcBlend: 1 - - _AlphaToMask: 0 - - _AlphaToMaskInspectorValue: 0 - _Anisotropy: 0 - _BlendMode: 0 - _CoatMask: 0 - _CullMode: 2 - _CullModeForward: 2 - _Cutoff: 0.5 + - _DecalBlend: 1 + - _DecalColorMask0: 15 + - _DecalColorMask1: 15 + - _DecalColorMask2: 11 + - _DecalColorMask3: 8 + - _DecalMaskMapBlueScale: 1 + - _DecalMeshBiasType: 0 + - _DecalMeshDepthBias: 0 + - _DecalMeshViewBias: 0 + - _DecalStencilRef: 16 + - _DecalStencilWriteMask: 16 - _DepthOffsetEnable: 0 - _DetailAlbedoScale: 1 - _DetailNormalScale: 1 @@ -180,6 +185,7 @@ Material: - _DoubleSidedEnable: 0 - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 + - _DrawOrder: 0 - _DstBlend: 0 - _DstBlend2: 0 - _EmissiveColorMode: 1 @@ -204,10 +210,12 @@ Material: - _IridescenceMask: 1 - _IridescenceThickness: 1 - _LinkDetailsWithBase: 1 + - _MaskBlendSrc: 0 - _MaterialID: 1 - _Metallic: 0 - _MetallicRemapMax: 1 - _MetallicRemapMin: 0 + - _NormalBlendSrc: 0 - _NormalMapSpace: 0 - _NormalScale: 1 - _ObjectSpaceUVMapping: 0 @@ -223,7 +231,7 @@ Material: - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 - _RefractionModel: 0 - - _Smoothness: 0.5 + - _Smoothness: 0.7 - _SmoothnessRemapMax: 1 - _SmoothnessRemapMin: 0 - _SpecularAAScreenSpaceVariance: 0.1 @@ -256,6 +264,7 @@ Material: - _UVBase: 0 - _UVDetail: 0 - _UVEmissive: 0 + - _Unity_Identify_HDRP_Decal: 1 - _UseEmissiveIntensity: 0 - _UseShadowThreshold: 0 - _ZTestDepthEqualForOpaque: 3 @@ -264,12 +273,12 @@ Material: - _ZWrite: 1 m_Colors: - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorHDR: {r: 0, g: 0, b: 0, a: 1} - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} @@ -281,3 +290,19 @@ Material: - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] m_AllowLocking: 1 +--- !u!114 &4732692459141027952 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: diff --git a/Assets/Resources/Materials/VpeDecalTemplate.mat.meta b/Assets/Resources/Materials/VpeDecalTemplate.mat.meta new file mode 100644 index 0000000..0ac05b1 --- /dev/null +++ b/Assets/Resources/Materials/VpeDecalTemplate.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9be5f138f3274c4ea6a4df77a9bb18f6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LookDev~/Assets/Materials/Wood, Kicker, 1.25in, Beveled.mat b/Assets/Resources/Materials/VpeLitFabricSilkTemplate.mat similarity index 83% rename from LookDev~/Assets/Materials/Wood, Kicker, 1.25in, Beveled.mat rename to Assets/Resources/Materials/VpeLitFabricSilkTemplate.mat index 70a5176..3203ba3 100644 --- a/LookDev~/Assets/Materials/Wood, Kicker, 1.25in, Beveled.mat +++ b/Assets/Resources/Materials/VpeLitFabricSilkTemplate.mat @@ -1,21 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-5356917893099157034 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 13 - hdPluginSubTargetMaterialVersions: - m_Keys: [] - m_Values: --- !u!21 &2100000 Material: serializedVersion: 8 @@ -23,21 +7,21 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Wood, Kicker, 1.25in, Beveled - m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Name: VpeLitFabricSilkTemplate + m_Shader: {fileID: -6465566751694194690, guid: bc94c50a74daa04489c96618e0dfab75, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - _BASE_UV_CHANNEL_UV0 - _DISABLE_SSR_TRANSPARENT - - _MASKMAP - - _NORMALMAP - - _NORMALMAP_TANGENT_SPACE + - _THREAD_UV_CHANNEL_UV0 m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: 2225 - stringTagMap: {} + stringTagMap: + MotionVector: User disabledShaderPasses: - TransparentDepthPrepass - TransparentDepthPostpass @@ -53,7 +37,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BaseColorMap: - m_Texture: {fileID: 2800000, guid: eb8cf012b9427b34a830f90da56f45d6, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BentNormalMap: @@ -76,6 +60,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _FuzzMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _HeightMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -89,15 +77,15 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: eb8cf012b9427b34a830f90da56f45d6, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MaskMap: - m_Texture: {fileID: 2800000, guid: 5ffdc14fe5adab344b2583a2416362da, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _NormalMap: - m_Texture: {fileID: 2800000, guid: f8f4653f2224e064393037b8e8f782d8, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _NormalMapOS: @@ -124,7 +112,7 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _TransmissionMaskMap: + - _ThreadMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -157,14 +145,14 @@ Material: - _AlphaCutoffPrepass: 0.5 - _AlphaCutoffShadow: 0.5 - _AlphaDstBlend: 0 - - _AlphaRemapMax: 1 - - _AlphaRemapMin: 0 - _AlphaSrcBlend: 1 - _AlphaToMask: 0 - _AlphaToMaskInspectorValue: 0 - _Anisotropy: 0 + - _BASE_UV_CHANNEL: 0 - _BlendMode: 0 - _CoatMask: 0 + - _ConservativeDepthOffsetEnable: 0 - _CullMode: 2 - _CullModeForward: 2 - _Cutoff: 0.5 @@ -181,6 +169,7 @@ Material: - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 - _DstBlend: 0 + - _DstBlend2: 0 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -189,6 +178,9 @@ Material: - _EnableFogOnTransparent: 1 - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 + - _ExcludeFromTUAndAA: 0 + - _FuzzMapUVScale: 0.1 + - _FuzzStrength: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 - _HeightMapParametrization: 0 @@ -208,20 +200,24 @@ Material: - _MetallicRemapMax: 1 - _MetallicRemapMin: 0 - _NormalMapSpace: 0 + - _NormalMapStrength: 0.85 - _NormalScale: 1 - - _ObjectSpaceUVMapping: 0 - - _ObjectSpaceUVMappingEmissive: 0 - _OpaqueCullMode: 2 - _PPDLodThreshold: 5 - _PPDMaxSamples: 15 - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 + - _PerPixelSorting: 0 - _RayTracing: 0 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 - _RefractionModel: 0 + - _RenderQueueType: 1 + - _RequireSplitLighting: 0 - _Smoothness: 0.5 + - _SmoothnessMax: 0.994 + - _SmoothnessMin: 0 - _SmoothnessRemapMax: 1 - _SmoothnessRemapMin: 0 - _SpecularAAScreenSpaceVariance: 0.1 @@ -230,20 +226,25 @@ Material: - _SrcBlend: 1 - _StencilRef: 0 - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 - _StencilRefGBuffer: 10 - _StencilRefMV: 40 - _StencilWriteMask: 6 - _StencilWriteMaskDepth: 9 - - _StencilWriteMaskGBuffer: 15 - - _StencilWriteMaskMV: 41 + - _StencilWriteMaskDistortionVec: 4 + - _StencilWriteMaskGBuffer: 14 + - _StencilWriteMaskMV: 43 - _SubsurfaceMask: 1 - _SupportDecals: 1 - _SurfaceType: 0 + - _THREAD_UV_CHANNEL: 0 - _TexWorldScale: 1 - _TexWorldScaleEmissive: 1 - _Thickness: 1 + - _ThreadAOStrength01: 0.5 + - _ThreadNormalStrength: 0.5 + - _ThreadSmoothnessScale: 0.5 - _TransmissionEnable: 1 - - _TransmissionMask: 1 - _TransparentBackfaceEnable: 0 - _TransparentCullMode: 2 - _TransparentDepthPostpassEnable: 0 @@ -260,10 +261,11 @@ Material: - _ZTestGBuffer: 4 - _ZTestTransparent: 4 - _ZWrite: 1 + - _useThreadMap: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColor: {r: 0.7264151, g: 0.10051019, b: 0.10051019, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 0.7264151, g: 0.10051017, b: 0.10051017, a: 1} - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} @@ -277,4 +279,25 @@ Material: - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + - _uvBaseMask: {r: 1, g: 0, b: 0, a: 0} + - _uvBaseST: {r: 1, g: 1, b: 0, a: 0} + - _uvThreadMask: {r: 1, g: 0, b: 0, a: 0} + - _uvThreadST: {r: 1, g: 1, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &996654408194131843 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: diff --git a/Assets/Resources/Materials/VpeLitFabricSilkTemplate.mat.meta b/Assets/Resources/Materials/VpeLitFabricSilkTemplate.mat.meta new file mode 100644 index 0000000..dfccc94 --- /dev/null +++ b/Assets/Resources/Materials/VpeLitFabricSilkTemplate.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b98573164014b448a725fb772ad9b79 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LookDev~/Assets/Materials/Wood, Solid, Large.mat b/Assets/Resources/Materials/VpeLitOpaqueTemplate.mat similarity index 87% rename from LookDev~/Assets/Materials/Wood, Solid, Large.mat rename to Assets/Resources/Materials/VpeLitOpaqueTemplate.mat index 7071d2f..d551683 100644 --- a/LookDev~/Assets/Materials/Wood, Solid, Large.mat +++ b/Assets/Resources/Materials/VpeLitOpaqueTemplate.mat @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-5356917893099157034 +--- !u!114 &-8779386500307014649 MonoBehaviour: m_ObjectHideFlags: 11 m_CorrespondingSourceObject: {fileID: 0} @@ -10,12 +10,12 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: version: 13 hdPluginSubTargetMaterialVersions: m_Keys: [] - m_Values: + m_Values: --- !u!21 &2100000 Material: serializedVersion: 8 @@ -23,28 +23,30 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Wood, Solid, Large + m_Name: VpeLitOpaqueTemplate m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - _ALPHATEST_ON - _DISABLE_SSR_TRANSPARENT - _MASKMAP - _NORMALMAP - _NORMALMAP_TANGENT_SPACE m_InvalidKeywords: [] m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 + m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 m_CustomRenderQueue: 2225 stringTagMap: {} disabledShaderPasses: + - DistortionVectors + - MOTIONVECTORS - TransparentDepthPrepass - TransparentDepthPostpass - TransparentBackface - - RayTracingPrepass - - MOTIONVECTORS - m_LockedProperties: + - ForwardEmissiveForDeferred + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -53,7 +55,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BaseColorMap: - m_Texture: {fileID: 2800000, guid: 92c1b55026180b24690d9e7820598e39, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BentNormalMap: @@ -72,6 +74,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _EmissiveColorMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -89,15 +95,15 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: 92c1b55026180b24690d9e7820598e39, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MaskMap: - m_Texture: {fileID: 2800000, guid: 5a9a1a990e0b0f440822133e934985fc, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _NormalMap: - m_Texture: {fileID: 2800000, guid: c2e1e5d52b47c8b4bbb7748b800b81c8, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _NormalMapOS: @@ -177,6 +183,20 @@ Material: - _DisplacementLockObjectScale: 1 - _DisplacementLockTilingScale: 1 - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 1 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 1 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 1 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 1 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 - _DoubleSidedEnable: 0 - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 @@ -189,6 +209,7 @@ Material: - _EnableFogOnTransparent: 1 - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 + - _ForceForwardEmissive: 0 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 - _HeightMapParametrization: 0 @@ -198,7 +219,7 @@ Material: - _HeightPoMAmplitude: 2 - _HeightTessAmplitude: 2 - _HeightTessCenter: 0.5 - - _InvTilingScale: 1 + - _InvTilingScale: 0.5 - _Ior: 1.5 - _IridescenceMask: 1 - _IridescenceThickness: 1 @@ -217,10 +238,11 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 - - _RayTracing: 0 + - _RayTracing: 1 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 - _RefractionModel: 0 + - _SSRefractionProjectionModel: 0 - _Smoothness: 0.5 - _SmoothnessRemapMax: 1 - _SmoothnessRemapMin: 0 @@ -230,10 +252,12 @@ Material: - _SrcBlend: 1 - _StencilRef: 0 - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 - _StencilRefGBuffer: 10 - _StencilRefMV: 40 - _StencilWriteMask: 6 - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 - _StencilWriteMaskGBuffer: 15 - _StencilWriteMaskMV: 41 - _SubsurfaceMask: 1 @@ -258,6 +282,7 @@ Material: - _UseShadowThreshold: 0 - _ZTestDepthEqualForOpaque: 3 - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 4 - _ZTestTransparent: 4 - _ZWrite: 1 m_Colors: diff --git a/Assets/Resources/Materials/VpeLitOpaqueTemplate.mat.meta b/Assets/Resources/Materials/VpeLitOpaqueTemplate.mat.meta new file mode 100644 index 0000000..988e45f --- /dev/null +++ b/Assets/Resources/Materials/VpeLitOpaqueTemplate.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4e84668066764dcdbab6d6998c727f38 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/VpeLitTranslucentPlanarTemplate.mat b/Assets/Resources/Materials/VpeLitTranslucentPlanarTemplate.mat new file mode 100644 index 0000000..c54e86d --- /dev/null +++ b/Assets/Resources/Materials/VpeLitTranslucentPlanarTemplate.mat @@ -0,0 +1,306 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8779386500307014646 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: VpeLitTranslucentPlanarTemplate + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _MASKMAP + - _MATERIAL_FEATURE_TRANSMISSION + - _NORMALMAP + - _NORMALMAP_TANGENT_SPACE + - _REFRACTION_PLANE + - _SURFACE_TYPE_TRANSPARENT + - _THICKNESSMAP + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: + - DistortionVectors + - MOTIONVECTORS + - ForwardEmissiveForDeferred + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CoatMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissiveColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _HeightMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecularColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SubsurfaceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmissionMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmittanceColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AORemapMax: 1 + - _AORemapMin: 0 + - _ATDistance: 1 + - _AddPrecomputedVelocity: 0 + - _AlbedoAffectEmissive: 0 + - _AlphaCutoff: 0.5 + - _AlphaCutoffEnable: 0 + - _AlphaCutoffPostpass: 0.5 + - _AlphaCutoffPrepass: 0.5 + - _AlphaCutoffShadow: 0.5 + - _AlphaDstBlend: 10 + - _AlphaRemapMax: 1 + - _AlphaRemapMin: 0 + - _AlphaSrcBlend: 1 + - _AlphaToMask: 0 + - _AlphaToMaskInspectorValue: 0 + - _Anisotropy: 0 + - _BlendMode: 0 + - _CoatMask: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 0 + - _DetailAlbedoScale: 1 + - _DetailNormalScale: 1 + - _DetailSmoothnessScale: 1 + - _DiffusionProfile: 0 + - _DiffusionProfileHash: 0 + - _DisplacementLockObjectScale: 1 + - _DisplacementLockTilingScale: 1 + - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 1 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 1 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 1 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 1 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 + - _DoubleSidedEnable: 0 + - _DoubleSidedGIMode: 0 + - _DoubleSidedNormalMode: 1 + - _DstBlend: 10 + - _EmissiveColorMode: 1 + - _EmissiveExposureWeight: 1 + - _EmissiveIntensity: 1 + - _EmissiveIntensityUnit: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _EnableGeometricSpecularAA: 0 + - _EnergyConservingSpecularColor: 1 + - _ForceForwardEmissive: 0 + - _HeightAmplitude: 0.02 + - _HeightCenter: 0.5 + - _HeightMapParametrization: 0 + - _HeightMax: 1 + - _HeightMin: -1 + - _HeightOffset: 0 + - _HeightPoMAmplitude: 2 + - _HeightTessAmplitude: 2 + - _HeightTessCenter: 0.5 + - _InvTilingScale: 0.5 + - _Ior: 1.5 + - _IridescenceMask: 1 + - _IridescenceThickness: 1 + - _LinkDetailsWithBase: 1 + - _MaterialID: 5 + - _Metallic: 0 + - _MetallicRemapMax: 1 + - _MetallicRemapMin: 0 + - _NormalMapSpace: 0 + - _NormalScale: 1 + - _ObjectSpaceUVMapping: 0 + - _ObjectSpaceUVMappingEmissive: 0 + - _OpaqueCullMode: 2 + - _PPDLodThreshold: 5 + - _PPDMaxSamples: 15 + - _PPDMinSamples: 5 + - _PPDPrimitiveLength: 1 + - _PPDPrimitiveWidth: 1 + - _RayTracing: 1 + - _ReceivesSSR: 1 + - _ReceivesSSRTransparent: 1 + - _RefractionModel: 1 + - _SSRefractionProjectionModel: 0 + - _Smoothness: 0.5 + - _SmoothnessRemapMax: 1 + - _SmoothnessRemapMin: 0 + - _SpecularAAScreenSpaceVariance: 0.1 + - _SpecularAAThreshold: 0.2 + - _SpecularOcclusionMode: 1 + - _SrcBlend: 1 + - _StencilRef: 0 + - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 + - _StencilRefGBuffer: 10 + - _StencilRefMV: 40 + - _StencilWriteMask: 6 + - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 + - _StencilWriteMaskGBuffer: 15 + - _StencilWriteMaskMV: 41 + - _SubsurfaceMask: 1 + - _SupportDecals: 1 + - _SurfaceType: 1 + - _TexWorldScale: 1 + - _TexWorldScaleEmissive: 1 + - _Thickness: 1 + - _TransmissionEnable: 1 + - _TransmissionMask: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentCullMode: 2 + - _TransparentDepthPostpassEnable: 0 + - _TransparentDepthPrepassEnable: 0 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 0 + - _TransparentZWrite: 0 + - _UVBase: 0 + - _UVDetail: 0 + - _UVEmissive: 0 + - _UseEmissiveIntensity: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 3 + - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 4 + - _ZTestTransparent: 4 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} + - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} + - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} + - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] + diff --git a/Assets/Resources/Materials/VpeLitTranslucentPlanarTemplate.mat.meta b/Assets/Resources/Materials/VpeLitTranslucentPlanarTemplate.mat.meta new file mode 100644 index 0000000..50785cf --- /dev/null +++ b/Assets/Resources/Materials/VpeLitTranslucentPlanarTemplate.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d470e0ff7df4b648d1cbc887b6d7d06 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/VpeLitTranslucentSphereTemplate.mat b/Assets/Resources/Materials/VpeLitTranslucentSphereTemplate.mat new file mode 100644 index 0000000..c014167 --- /dev/null +++ b/Assets/Resources/Materials/VpeLitTranslucentSphereTemplate.mat @@ -0,0 +1,308 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8779386500307014646 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: VpeLitTranslucentSphereTemplate + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _DISABLE_SSR_TRANSPARENT + - _MASKMAP + - _MATERIAL_FEATURE_TRANSMISSION + - _NORMALMAP + - _NORMALMAP_TANGENT_SPACE + - _REFRACTION_SPHERE + - _SURFACE_TYPE_TRANSPARENT + - _THICKNESSMAP + - _TRANSPARENT_WRITES_MOTION_VEC + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: + - DistortionVectors + - MOTIONVECTORS + - ForwardEmissiveForDeferred + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CoatMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissiveColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _HeightMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecularColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SubsurfaceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmissionMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmittanceColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AORemapMax: 1 + - _AORemapMin: 0 + - _ATDistance: 1 + - _AddPrecomputedVelocity: 0 + - _AlbedoAffectEmissive: 0 + - _AlphaCutoff: 0.5 + - _AlphaCutoffEnable: 0 + - _AlphaCutoffPostpass: 0.5 + - _AlphaCutoffPrepass: 0.5 + - _AlphaCutoffShadow: 0.5 + - _AlphaDstBlend: 10 + - _AlphaRemapMax: 1 + - _AlphaRemapMin: 0 + - _AlphaSrcBlend: 1 + - _AlphaToMask: 0 + - _AlphaToMaskInspectorValue: 0 + - _Anisotropy: 0 + - _BlendMode: 0 + - _CoatMask: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 0 + - _DetailAlbedoScale: 1 + - _DetailNormalScale: 1 + - _DetailSmoothnessScale: 1 + - _DiffusionProfile: 0 + - _DiffusionProfileHash: 0 + - _DisplacementLockObjectScale: 1 + - _DisplacementLockTilingScale: 1 + - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 1 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 1 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 1 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 1 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 + - _DoubleSidedEnable: 0 + - _DoubleSidedGIMode: 0 + - _DoubleSidedNormalMode: 1 + - _DstBlend: 10 + - _EmissiveColorMode: 1 + - _EmissiveExposureWeight: 1 + - _EmissiveIntensity: 1 + - _EmissiveIntensityUnit: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _EnableGeometricSpecularAA: 0 + - _EnergyConservingSpecularColor: 1 + - _ForceForwardEmissive: 0 + - _HeightAmplitude: 0.02 + - _HeightCenter: 0.5 + - _HeightMapParametrization: 0 + - _HeightMax: 1 + - _HeightMin: -1 + - _HeightOffset: 0 + - _HeightPoMAmplitude: 2 + - _HeightTessAmplitude: 2 + - _HeightTessCenter: 0.5 + - _InvTilingScale: 0.5 + - _Ior: 1.5 + - _IridescenceMask: 1 + - _IridescenceThickness: 1 + - _LinkDetailsWithBase: 1 + - _MaterialID: 5 + - _Metallic: 0 + - _MetallicRemapMax: 1 + - _MetallicRemapMin: 0 + - _NormalMapSpace: 0 + - _NormalScale: 1 + - _ObjectSpaceUVMapping: 0 + - _ObjectSpaceUVMappingEmissive: 0 + - _OpaqueCullMode: 2 + - _PPDLodThreshold: 5 + - _PPDMaxSamples: 15 + - _PPDMinSamples: 5 + - _PPDPrimitiveLength: 1 + - _PPDPrimitiveWidth: 1 + - _RayTracing: 1 + - _ReceivesSSR: 1 + - _ReceivesSSRTransparent: 0 + - _RefractionModel: 2 + - _SSRefractionProjectionModel: 0 + - _Smoothness: 0.5 + - _SmoothnessRemapMax: 1 + - _SmoothnessRemapMin: 0 + - _SpecularAAScreenSpaceVariance: 0.1 + - _SpecularAAThreshold: 0.2 + - _SpecularOcclusionMode: 1 + - _SrcBlend: 1 + - _StencilRef: 0 + - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 + - _StencilRefGBuffer: 10 + - _StencilRefMV: 40 + - _StencilWriteMask: 6 + - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 + - _StencilWriteMaskGBuffer: 15 + - _StencilWriteMaskMV: 41 + - _SubsurfaceMask: 1 + - _SupportDecals: 1 + - _SurfaceType: 1 + - _TexWorldScale: 1 + - _TexWorldScaleEmissive: 1 + - _Thickness: 1 + - _TransmissionEnable: 1 + - _TransmissionMask: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentCullMode: 2 + - _TransparentDepthPostpassEnable: 0 + - _TransparentDepthPrepassEnable: 0 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 0 + - _TransparentZWrite: 0 + - _UVBase: 0 + - _UVDetail: 0 + - _UVEmissive: 0 + - _UseEmissiveIntensity: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 3 + - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 4 + - _ZTestTransparent: 4 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} + - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} + - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} + - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] + diff --git a/Assets/Art/Materials/Measured/Rubber/Rubber.mat.meta b/Assets/Resources/Materials/VpeLitTranslucentSphereTemplate.mat.meta similarity index 78% rename from Assets/Art/Materials/Measured/Rubber/Rubber.mat.meta rename to Assets/Resources/Materials/VpeLitTranslucentSphereTemplate.mat.meta index 24dc897..d8dbd5e 100644 --- a/Assets/Art/Materials/Measured/Rubber/Rubber.mat.meta +++ b/Assets/Resources/Materials/VpeLitTranslucentSphereTemplate.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1029b38bdee65ba4482ab14d2b7a9f04 +guid: 5fe632faa6b34240892d35e23d8aa03a NativeFormatImporter: externalObjects: {} mainObjectFileID: 0 diff --git a/Assets/Resources/Materials/VpeLitTranslucentThinTemplate.mat b/Assets/Resources/Materials/VpeLitTranslucentThinTemplate.mat new file mode 100644 index 0000000..90bd3aa --- /dev/null +++ b/Assets/Resources/Materials/VpeLitTranslucentThinTemplate.mat @@ -0,0 +1,308 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8779386500307014647 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: VpeLitTranslucentThinTemplate + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _DISABLE_SSR_TRANSPARENT + - _MASKMAP + - _MATERIAL_FEATURE_TRANSMISSION + - _NORMALMAP + - _NORMALMAP_TANGENT_SPACE + - _REFRACTION_THIN + - _SURFACE_TYPE_TRANSPARENT + - _THICKNESSMAP + - _TRANSPARENT_WRITES_MOTION_VEC + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: + - DistortionVectors + - MOTIONVECTORS + - ForwardEmissiveForDeferred + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CoatMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissiveColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _HeightMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecularColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SubsurfaceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmissionMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmittanceColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AORemapMax: 1 + - _AORemapMin: 0 + - _ATDistance: 1 + - _AddPrecomputedVelocity: 0 + - _AlbedoAffectEmissive: 0 + - _AlphaCutoff: 0.5 + - _AlphaCutoffEnable: 0 + - _AlphaCutoffPostpass: 0.5 + - _AlphaCutoffPrepass: 0.5 + - _AlphaCutoffShadow: 0.5 + - _AlphaDstBlend: 10 + - _AlphaRemapMax: 1 + - _AlphaRemapMin: 0 + - _AlphaSrcBlend: 1 + - _AlphaToMask: 0 + - _AlphaToMaskInspectorValue: 0 + - _Anisotropy: 0 + - _BlendMode: 0 + - _CoatMask: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 0 + - _DetailAlbedoScale: 1 + - _DetailNormalScale: 1 + - _DetailSmoothnessScale: 1 + - _DiffusionProfile: 0 + - _DiffusionProfileHash: 0 + - _DisplacementLockObjectScale: 1 + - _DisplacementLockTilingScale: 1 + - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 1 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 1 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 1 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 1 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 + - _DoubleSidedEnable: 0 + - _DoubleSidedGIMode: 0 + - _DoubleSidedNormalMode: 1 + - _DstBlend: 10 + - _EmissiveColorMode: 1 + - _EmissiveExposureWeight: 1 + - _EmissiveIntensity: 1 + - _EmissiveIntensityUnit: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _EnableGeometricSpecularAA: 0 + - _EnergyConservingSpecularColor: 1 + - _ForceForwardEmissive: 0 + - _HeightAmplitude: 0.02 + - _HeightCenter: 0.5 + - _HeightMapParametrization: 0 + - _HeightMax: 1 + - _HeightMin: -1 + - _HeightOffset: 0 + - _HeightPoMAmplitude: 2 + - _HeightTessAmplitude: 2 + - _HeightTessCenter: 0.5 + - _InvTilingScale: 0.5 + - _Ior: 1.5 + - _IridescenceMask: 1 + - _IridescenceThickness: 1 + - _LinkDetailsWithBase: 1 + - _MaterialID: 5 + - _Metallic: 0 + - _MetallicRemapMax: 1 + - _MetallicRemapMin: 0 + - _NormalMapSpace: 0 + - _NormalScale: 1 + - _ObjectSpaceUVMapping: 0 + - _ObjectSpaceUVMappingEmissive: 0 + - _OpaqueCullMode: 2 + - _PPDLodThreshold: 5 + - _PPDMaxSamples: 15 + - _PPDMinSamples: 5 + - _PPDPrimitiveLength: 1 + - _PPDPrimitiveWidth: 1 + - _RayTracing: 1 + - _ReceivesSSR: 1 + - _ReceivesSSRTransparent: 0 + - _RefractionModel: 3 + - _SSRefractionProjectionModel: 0 + - _Smoothness: 0.5 + - _SmoothnessRemapMax: 1 + - _SmoothnessRemapMin: 0 + - _SpecularAAScreenSpaceVariance: 0.1 + - _SpecularAAThreshold: 0.2 + - _SpecularOcclusionMode: 1 + - _SrcBlend: 1 + - _StencilRef: 0 + - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 + - _StencilRefGBuffer: 10 + - _StencilRefMV: 40 + - _StencilWriteMask: 6 + - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 + - _StencilWriteMaskGBuffer: 15 + - _StencilWriteMaskMV: 41 + - _SubsurfaceMask: 1 + - _SupportDecals: 1 + - _SurfaceType: 1 + - _TexWorldScale: 1 + - _TexWorldScaleEmissive: 1 + - _Thickness: 1 + - _TransmissionEnable: 1 + - _TransmissionMask: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentCullMode: 2 + - _TransparentDepthPostpassEnable: 1 + - _TransparentDepthPrepassEnable: 1 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 1 + - _TransparentZWrite: 0 + - _UVBase: 0 + - _UVDetail: 0 + - _UVEmissive: 0 + - _UseEmissiveIntensity: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 3 + - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 4 + - _ZTestTransparent: 4 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} + - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} + - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} + - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] + diff --git a/Assets/Resources/Materials/VpeLitTranslucentThinTemplate.mat.meta b/Assets/Resources/Materials/VpeLitTranslucentThinTemplate.mat.meta new file mode 100644 index 0000000..0fe4aad --- /dev/null +++ b/Assets/Resources/Materials/VpeLitTranslucentThinTemplate.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1de31f22bd8b45f5b1492b20b655ce43 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/LookDev~/Assets/Materials/Wood, Kicker, 1.25in.mat b/Assets/Resources/Materials/VpeLitTransparentTemplate.mat similarity index 85% rename from LookDev~/Assets/Materials/Wood, Kicker, 1.25in.mat rename to Assets/Resources/Materials/VpeLitTransparentTemplate.mat index bfadb07..214c0be 100644 --- a/LookDev~/Assets/Materials/Wood, Kicker, 1.25in.mat +++ b/Assets/Resources/Materials/VpeLitTransparentTemplate.mat @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-5356917893099157034 +--- !u!114 &-8779386500307014648 MonoBehaviour: m_ObjectHideFlags: 11 m_CorrespondingSourceObject: {fileID: 0} @@ -10,12 +10,12 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: + m_Name: + m_EditorClassIdentifier: version: 13 hdPluginSubTargetMaterialVersions: m_Keys: [] - m_Values: + m_Values: --- !u!21 &2100000 Material: serializedVersion: 8 @@ -23,7 +23,7 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Wood, Kicker, 1.25in + m_Name: VpeLitTransparentTemplate m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 @@ -32,19 +32,19 @@ Material: - _MASKMAP - _NORMALMAP - _NORMALMAP_TANGENT_SPACE + - _SURFACE_TYPE_TRANSPARENT m_InvalidKeywords: [] m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 + m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2225 - stringTagMap: {} + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent disabledShaderPasses: - - TransparentDepthPrepass - - TransparentDepthPostpass - - TransparentBackface - - RayTracingPrepass + - DistortionVectors - MOTIONVECTORS - m_LockedProperties: + - ForwardEmissiveForDeferred + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -53,7 +53,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BaseColorMap: - m_Texture: {fileID: 2800000, guid: c5c2d85d067c694459c54c88cd46fdd3, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _BentNormalMap: @@ -72,6 +72,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _EmissiveColorMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -89,15 +93,15 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: c5c2d85d067c694459c54c88cd46fdd3, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MaskMap: - m_Texture: {fileID: 2800000, guid: c5153c74c8e42064e87cd9563d600ac0, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _NormalMap: - m_Texture: {fileID: 2800000, guid: d5c67f78cccff6646b46f7aaecbd9c78, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _NormalMapOS: @@ -156,7 +160,7 @@ Material: - _AlphaCutoffPostpass: 0.5 - _AlphaCutoffPrepass: 0.5 - _AlphaCutoffShadow: 0.5 - - _AlphaDstBlend: 0 + - _AlphaDstBlend: 10 - _AlphaRemapMax: 1 - _AlphaRemapMin: 0 - _AlphaSrcBlend: 1 @@ -177,10 +181,24 @@ Material: - _DisplacementLockObjectScale: 1 - _DisplacementLockTilingScale: 1 - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 1 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 1 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 1 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 1 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 - _DoubleSidedEnable: 0 - _DoubleSidedGIMode: 0 - _DoubleSidedNormalMode: 1 - - _DstBlend: 0 + - _DstBlend: 10 - _EmissiveColorMode: 1 - _EmissiveExposureWeight: 1 - _EmissiveIntensity: 1 @@ -189,6 +207,7 @@ Material: - _EnableFogOnTransparent: 1 - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 + - _ForceForwardEmissive: 0 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 - _HeightMapParametrization: 0 @@ -198,7 +217,7 @@ Material: - _HeightPoMAmplitude: 2 - _HeightTessAmplitude: 2 - _HeightTessCenter: 0.5 - - _InvTilingScale: 1 + - _InvTilingScale: 0.5 - _Ior: 1.5 - _IridescenceMask: 1 - _IridescenceThickness: 1 @@ -217,10 +236,11 @@ Material: - _PPDMinSamples: 5 - _PPDPrimitiveLength: 1 - _PPDPrimitiveWidth: 1 - - _RayTracing: 0 + - _RayTracing: 1 - _ReceivesSSR: 1 - _ReceivesSSRTransparent: 0 - _RefractionModel: 0 + - _SSRefractionProjectionModel: 0 - _Smoothness: 0.5 - _SmoothnessRemapMax: 1 - _SmoothnessRemapMin: 0 @@ -230,15 +250,17 @@ Material: - _SrcBlend: 1 - _StencilRef: 0 - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 - _StencilRefGBuffer: 10 - _StencilRefMV: 40 - _StencilWriteMask: 6 - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 - _StencilWriteMaskGBuffer: 15 - _StencilWriteMaskMV: 41 - _SubsurfaceMask: 1 - _SupportDecals: 1 - - _SurfaceType: 0 + - _SurfaceType: 1 - _TexWorldScale: 1 - _TexWorldScaleEmissive: 1 - _Thickness: 1 @@ -258,8 +280,9 @@ Material: - _UseShadowThreshold: 0 - _ZTestDepthEqualForOpaque: 3 - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 4 - _ZTestTransparent: 4 - - _ZWrite: 1 + - _ZWrite: 0 m_Colors: - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} diff --git a/Assets/Resources/Materials/VpeLitTransparentTemplate.mat.meta b/Assets/Resources/Materials/VpeLitTransparentTemplate.mat.meta new file mode 100644 index 0000000..78ea683 --- /dev/null +++ b/Assets/Resources/Materials/VpeLitTransparentTemplate.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ead7b7f8f53c4df9afd7d36c848ad2d9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/VpePackNormalForHdrp.shader b/Assets/Resources/VpePackNormalForHdrp.shader new file mode 100644 index 0000000..1c3786c --- /dev/null +++ b/Assets/Resources/VpePackNormalForHdrp.shader @@ -0,0 +1,47 @@ +Shader "Hidden/VPE/PackNormalForHdrp" +{ + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Overlay" } + Cull Off + ZWrite Off + ZTest Always + + Pass + { + HLSLPROGRAM + #pragma vertex Vert + #pragma fragment Frag + #include "UnityCG.cginc" + + sampler2D _MainTex; + + struct Attributes + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct Varyings + { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + }; + + Varyings Vert(Attributes input) + { + Varyings output; + output.positionCS = UnityObjectToClipPos(input.vertex); + output.uv = input.uv; + return output; + } + + float4 Frag(Varyings input) : SV_Target + { + float4 normalSample = tex2D(_MainTex, input.uv); + return float4(1.0, normalSample.g, 1.0, normalSample.r); + } + ENDHLSL + } + } +} diff --git a/Assets/Resources/VpePackNormalForHdrp.shader.meta b/Assets/Resources/VpePackNormalForHdrp.shader.meta new file mode 100644 index 0000000..5fb53b9 --- /dev/null +++ b/Assets/Resources/VpePackNormalForHdrp.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5b6dbd24dd5f4c0cb9237cb0bf87258b +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Diffusion Profiles/Drop Target.asset b/Assets/Settings/Diffusion Profiles/Drop Target.asset new file mode 100644 index 0000000..2fce91e --- /dev/null +++ b/Assets/Settings/Diffusion Profiles/Drop Target.asset @@ -0,0 +1,28 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b2686e09ec7aef44bad2843e4416f057, type: 3} + m_Name: Drop Target + m_EditorClassIdentifier: + profile: + scatteringDistance: {r: 0.7490196, g: 0.7490196, b: 0.7490196, a: 1} + scatteringDistanceMultiplier: 0.3 + transmissionTint: {r: 1, g: 1, b: 1, a: 1} + texturingMode: 0 + smoothnessMultipliers: {x: 1, y: 1} + lobeMix: 0.5 + diffuseShadingPower: 1 + transmissionMode: 0 + thicknessRemap: {x: 0, y: 2} + worldScale: 0.001 + ior: 1.454 + hash: 1078371701 + m_Version: 2 diff --git a/LookDev~/Assets/Materials/Wood, Kicker, 1.25in, Beveled.mat.meta b/Assets/Settings/Diffusion Profiles/Drop Target.asset.meta similarity index 64% rename from LookDev~/Assets/Materials/Wood, Kicker, 1.25in, Beveled.mat.meta rename to Assets/Settings/Diffusion Profiles/Drop Target.asset.meta index 214fbe5..7c02f3f 100644 --- a/LookDev~/Assets/Materials/Wood, Kicker, 1.25in, Beveled.mat.meta +++ b/Assets/Settings/Diffusion Profiles/Drop Target.asset.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: fa682fa33c9eb20428b7607f3a427190 +guid: 0215f86284a68e942afb4d9edf974cf4 NativeFormatImporter: externalObjects: {} - mainObjectFileID: 2100000 + mainObjectFileID: 11400000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Settings/Diffusion Profiles/Inserts.asset b/Assets/Settings/Diffusion Profiles/Inserts.asset new file mode 100644 index 0000000..05a3fef --- /dev/null +++ b/Assets/Settings/Diffusion Profiles/Inserts.asset @@ -0,0 +1,28 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b2686e09ec7aef44bad2843e4416f057, type: 3} + m_Name: Inserts + m_EditorClassIdentifier: + profile: + scatteringDistance: {r: 0.5, g: 0.5, b: 0.5, a: 1} + scatteringDistanceMultiplier: 1 + transmissionTint: {r: 1, g: 0.8041472, b: 0.2924527, a: 1} + texturingMode: 0 + smoothnessMultipliers: {x: 1, y: 1} + lobeMix: 0.5 + diffuseShadingPower: 1 + transmissionMode: 0 + thicknessRemap: {x: 1.5, y: 3.3} + worldScale: 1 + ior: 1.49 + hash: 1080455802 + m_Version: 2 diff --git a/Assets/Art/Materials/Measured/Rubber/RubberDirt White.mat.meta b/Assets/Settings/Diffusion Profiles/Inserts.asset.meta similarity index 64% rename from Assets/Art/Materials/Measured/Rubber/RubberDirt White.mat.meta rename to Assets/Settings/Diffusion Profiles/Inserts.asset.meta index 7f8921f..89935f3 100644 --- a/Assets/Art/Materials/Measured/Rubber/RubberDirt White.mat.meta +++ b/Assets/Settings/Diffusion Profiles/Inserts.asset.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: d6df9133a6cbc75488013b258ef80885 +guid: 35ea030392590a64eab52bf99a9db95e NativeFormatImporter: externalObjects: {} - mainObjectFileID: 2100000 + mainObjectFileID: 11400000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Settings/RPCore/VPEHDRP_DXR.asset b/Assets/Settings/RPCore/VPEHDRP_DXR.asset index 8fe6599..99617aa 100644 --- a/Assets/Settings/RPCore/VPEHDRP_DXR.asset +++ b/Assets/Settings/RPCore/VPEHDRP_DXR.asset @@ -19,6 +19,7 @@ MonoBehaviour: supportSSAO: 1 supportSSGI: 1 supportSubsurfaceScattering: 0 + subsurfaceScatteringAttenuation: 1 sssSampleBudget: m_Values: 140000002800000050000000 m_SchemaId: @@ -34,6 +35,7 @@ MonoBehaviour: supportWater: 0 waterSimulationResolution: 128 supportWaterExclusion: 1 + supportWaterHorizontalDeformation: 0 supportWaterDecals: 1 waterDecalAtlasSize: 1024 maximumWaterDecalCount: 48 @@ -49,7 +51,9 @@ MonoBehaviour: supportTransparentDepthPrepass: 1 supportTransparentDepthPostpass: 1 colorBufferFormat: 74 + depthBufferFormat: 0 supportCustomPass: 0 + supportVariableRateShading: 1 customBufferFormat: 12 supportedLitShaderMode: 2 planarReflectionResolution: @@ -166,6 +170,8 @@ MonoBehaviour: enabled: 1 useMipBias: 1 advancedUpscalersByPriority: 00 + advancedUpscalerNames: + - DLSS DLSSPerfQualitySetting: 1 DLSSInjectionPoint: 0 TAAUInjectionPoint: 0 @@ -173,6 +179,11 @@ MonoBehaviour: defaultInjectionPoint: 2 DLSSUseOptimalSettings: 1 DLSSSharpness: 0.5 + DLSSRenderPresetForQuality: 0 + DLSSRenderPresetForBalanced: 0 + DLSSRenderPresetForPerformance: 0 + DLSSRenderPresetForUltraPerformance: 0 + DLSSRenderPresetForDLAA: 0 FSR2EnableSharpness: 0 FSR2Sharpness: 0 FSR2UseOptimalSettings: 0 @@ -350,7 +361,7 @@ MonoBehaviour: m_CompositorCustomVolumeComponentsList: m_InjectionPoint: 1 m_CustomPostProcessTypesAsString: [] - m_Version: 25 + m_Version: 26 m_ObsoleteFrameSettings: overrides: 0 enableShadow: 0 @@ -544,3 +555,4 @@ MonoBehaviour: m_ObsoleteLensAttenuation: 0 m_ObsoleteDiffusionProfileSettingsList: [] m_PrefilterUseLegacyLightmaps: 0 + m_PrefilterUseLightmapBicubicSampling: 0 diff --git a/Assets/Settings/RPCore/VPEHDRP_HQ.asset b/Assets/Settings/RPCore/VPEHDRP_HQ.asset index 40b7a45..5fd5798 100644 --- a/Assets/Settings/RPCore/VPEHDRP_HQ.asset +++ b/Assets/Settings/RPCore/VPEHDRP_HQ.asset @@ -19,6 +19,7 @@ MonoBehaviour: supportSSAO: 1 supportSSGI: 1 supportSubsurfaceScattering: 0 + subsurfaceScatteringAttenuation: 1 sssSampleBudget: m_Values: 140000002800000050000000 m_SchemaId: @@ -34,6 +35,7 @@ MonoBehaviour: supportWater: 0 waterSimulationResolution: 128 supportWaterExclusion: 1 + supportWaterHorizontalDeformation: 0 supportWaterDecals: 1 waterDecalAtlasSize: 1024 maximumWaterDecalCount: 48 @@ -49,7 +51,9 @@ MonoBehaviour: supportTransparentDepthPrepass: 1 supportTransparentDepthPostpass: 1 colorBufferFormat: 74 + depthBufferFormat: 0 supportCustomPass: 0 + supportVariableRateShading: 1 customBufferFormat: 12 supportedLitShaderMode: 2 planarReflectionResolution: @@ -166,6 +170,8 @@ MonoBehaviour: enabled: 1 useMipBias: 1 advancedUpscalersByPriority: 00 + advancedUpscalerNames: + - DLSS DLSSPerfQualitySetting: 1 DLSSInjectionPoint: 0 TAAUInjectionPoint: 0 @@ -173,6 +179,11 @@ MonoBehaviour: defaultInjectionPoint: 2 DLSSUseOptimalSettings: 1 DLSSSharpness: 0.5 + DLSSRenderPresetForQuality: 0 + DLSSRenderPresetForBalanced: 0 + DLSSRenderPresetForPerformance: 0 + DLSSRenderPresetForUltraPerformance: 0 + DLSSRenderPresetForDLAA: 0 FSR2EnableSharpness: 0 FSR2Sharpness: 0 FSR2UseOptimalSettings: 0 @@ -350,7 +361,7 @@ MonoBehaviour: m_CompositorCustomVolumeComponentsList: m_InjectionPoint: 1 m_CustomPostProcessTypesAsString: [] - m_Version: 25 + m_Version: 26 m_ObsoleteFrameSettings: overrides: 0 enableShadow: 0 @@ -544,3 +555,4 @@ MonoBehaviour: m_ObsoleteLensAttenuation: 0 m_ObsoleteDiffusionProfileSettingsList: [] m_PrefilterUseLegacyLightmaps: 0 + m_PrefilterUseLightmapBicubicSampling: 0 diff --git a/Assets/Settings/RPCore/VPEHDRP_LQ.asset b/Assets/Settings/RPCore/VPEHDRP_LQ.asset index 2c7b88d..34fbab5 100644 --- a/Assets/Settings/RPCore/VPEHDRP_LQ.asset +++ b/Assets/Settings/RPCore/VPEHDRP_LQ.asset @@ -19,6 +19,7 @@ MonoBehaviour: supportSSAO: 1 supportSSGI: 1 supportSubsurfaceScattering: 0 + subsurfaceScatteringAttenuation: 1 sssSampleBudget: m_Values: 0a0000001400000028000000 m_SchemaId: @@ -34,6 +35,7 @@ MonoBehaviour: supportWater: 0 waterSimulationResolution: 128 supportWaterExclusion: 1 + supportWaterHorizontalDeformation: 0 supportWaterDecals: 1 waterDecalAtlasSize: 1024 maximumWaterDecalCount: 48 @@ -49,7 +51,9 @@ MonoBehaviour: supportTransparentDepthPrepass: 1 supportTransparentDepthPostpass: 1 colorBufferFormat: 74 + depthBufferFormat: 0 supportCustomPass: 0 + supportVariableRateShading: 1 customBufferFormat: 12 supportedLitShaderMode: 2 planarReflectionResolution: @@ -166,6 +170,8 @@ MonoBehaviour: enabled: 1 useMipBias: 0 advancedUpscalersByPriority: 00 + advancedUpscalerNames: + - DLSS DLSSPerfQualitySetting: 0 DLSSInjectionPoint: 0 TAAUInjectionPoint: 0 @@ -173,6 +179,11 @@ MonoBehaviour: defaultInjectionPoint: 2 DLSSUseOptimalSettings: 1 DLSSSharpness: 0.5 + DLSSRenderPresetForQuality: 0 + DLSSRenderPresetForBalanced: 0 + DLSSRenderPresetForPerformance: 0 + DLSSRenderPresetForUltraPerformance: 0 + DLSSRenderPresetForDLAA: 0 FSR2EnableSharpness: 0 FSR2Sharpness: 0 FSR2UseOptimalSettings: 0 @@ -350,7 +361,7 @@ MonoBehaviour: m_CompositorCustomVolumeComponentsList: m_InjectionPoint: 1 m_CustomPostProcessTypesAsString: [] - m_Version: 25 + m_Version: 26 m_ObsoleteFrameSettings: overrides: 0 enableShadow: 0 @@ -544,3 +555,4 @@ MonoBehaviour: m_ObsoleteLensAttenuation: 0 m_ObsoleteDiffusionProfileSettingsList: [] m_PrefilterUseLegacyLightmaps: 0 + m_PrefilterUseLightmapBicubicSampling: 0 diff --git a/Assets/Settings/RPCore/VPEHDRP_MQ.asset b/Assets/Settings/RPCore/VPEHDRP_MQ.asset index 7465a1a..0521b66 100644 --- a/Assets/Settings/RPCore/VPEHDRP_MQ.asset +++ b/Assets/Settings/RPCore/VPEHDRP_MQ.asset @@ -19,6 +19,7 @@ MonoBehaviour: supportSSAO: 1 supportSSGI: 1 supportSubsurfaceScattering: 0 + subsurfaceScatteringAttenuation: 1 sssSampleBudget: m_Values: 140000002800000050000000 m_SchemaId: @@ -34,6 +35,7 @@ MonoBehaviour: supportWater: 0 waterSimulationResolution: 128 supportWaterExclusion: 1 + supportWaterHorizontalDeformation: 0 supportWaterDecals: 1 waterDecalAtlasSize: 1024 maximumWaterDecalCount: 48 @@ -49,7 +51,9 @@ MonoBehaviour: supportTransparentDepthPrepass: 1 supportTransparentDepthPostpass: 0 colorBufferFormat: 74 + depthBufferFormat: 0 supportCustomPass: 0 + supportVariableRateShading: 1 customBufferFormat: 12 supportedLitShaderMode: 2 planarReflectionResolution: @@ -166,6 +170,8 @@ MonoBehaviour: enabled: 1 useMipBias: 1 advancedUpscalersByPriority: 00 + advancedUpscalerNames: + - DLSS DLSSPerfQualitySetting: 0 DLSSInjectionPoint: 0 TAAUInjectionPoint: 0 @@ -173,6 +179,11 @@ MonoBehaviour: defaultInjectionPoint: 2 DLSSUseOptimalSettings: 1 DLSSSharpness: 0.5 + DLSSRenderPresetForQuality: 0 + DLSSRenderPresetForBalanced: 0 + DLSSRenderPresetForPerformance: 0 + DLSSRenderPresetForUltraPerformance: 0 + DLSSRenderPresetForDLAA: 0 FSR2EnableSharpness: 0 FSR2Sharpness: 0 FSR2UseOptimalSettings: 0 @@ -350,7 +361,7 @@ MonoBehaviour: m_CompositorCustomVolumeComponentsList: m_InjectionPoint: 1 m_CustomPostProcessTypesAsString: [] - m_Version: 25 + m_Version: 26 m_ObsoleteFrameSettings: overrides: 0 enableShadow: 0 @@ -544,3 +555,4 @@ MonoBehaviour: m_ObsoleteLensAttenuation: 0 m_ObsoleteDiffusionProfileSettingsList: [] m_PrefilterUseLegacyLightmaps: 0 + m_PrefilterUseLightmapBicubicSampling: 0 diff --git a/Editor/HdrpMaterialEditorImporter.cs b/Editor/HdrpMaterialEditorImporter.cs new file mode 100644 index 0000000..a7eb71c --- /dev/null +++ b/Editor/HdrpMaterialEditorImporter.cs @@ -0,0 +1,228 @@ +// Visual Pinball Engine +// Copyright (C) 2026 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using System; +using System.Collections.Generic; +using System.IO; +using NLog; +using UnityEditor; +using UnityEngine; +using UnityEngine.Rendering; +using VisualPinball.Unity; +using VisualPinball.Unity.Editor; +using Logger = NLog.Logger; +using Object = UnityEngine.Object; + +namespace VisualPinball.Engine.Unity.Hdrp.Editor +{ + // Editor-side .vpe material reconstruction. Drives the same HdrpMaterialResolver the player + // uses — so property mapping has a single home — but feeds it the freshly imported texture + // assets and persists the resulting materials as .mat assets. + internal sealed class HdrpMaterialEditorImporter : IVpeMaterialEditorImporter + { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + public int Apply( + Transform tableRoot, + VpeMaterialsPayload payload, + IReadOnlyDictionary texturesById, + string materialAssetFolder, + Func resolveNode) + { + if (!tableRoot || payload?.Profiles == null) { + return 0; + } + + // The imported textures are real Unity assets: normal maps come back as proper + // normal-map imports that HDRP samples natively, so the resolver must not re-pack them. + foreach (var profile in payload.Profiles) { + SetAssetNormalPacking(profile?.Lit?.NormalMap); + SetAssetNormalPacking(profile?.Fabric?.Lit?.NormalMap); + SetAssetNormalPacking(profile?.Decal?.NormalMap); + } + + var resolver = new HdrpMaterialResolver( + NewLitTemplate("VpeImportLitOpaque"), + NewLitTemplate("VpeImportLitTransparent"), + litTranslucentThinTemplate: NewLitTemplate("VpeImportLitTranslucent"), + fabricSilkTemplate: NewFabricSilkTemplate(), + decalTemplate: NewDecalTemplate(), + materialOverrides: FindShaderGraphTemplates(payload)); + + var provider = new AssetTextureProvider(texturesById); + var profilesByName = new Dictionary(StringComparer.Ordinal); + foreach (var profile in payload.Profiles) { + if (profile != null && !string.IsNullOrWhiteSpace(profile.Name)) { + profilesByName[VpeMaterialNameUtil.NormalizeMaterialName(profile.Name)] = profile; + } + } + + var materialsByProfile = new Dictionary(); + var appliedSlots = 0; + foreach (var renderer in tableRoot.GetComponentsInChildren(true)) { + if (!renderer) { + continue; + } + var materials = renderer.sharedMaterials; + var modified = false; + for (var i = 0; i < materials.Length; i++) { + var imported = materials[i]; + if (!imported) { + continue; + } + var key = VpeMaterialNameUtil.NormalizeMaterialName(imported.name); + if (!profilesByName.TryGetValue(key, out var profile)) { + continue; + } + + if (!materialsByProfile.TryGetValue(profile, out var material)) { + material = resolver.CreateMaterial(profile, provider, imported); + if (material) { + var assetPath = $"{materialAssetFolder}/{SanitizeFileName(profile.Name)}.mat"; + AssetDatabase.CreateAsset(material, assetPath); + } + materialsByProfile[profile] = material; + } + if (!material) { + continue; + } + + materials[i] = material; + modified = true; + appliedSlots++; + } + if (modified) { + renderer.sharedMaterials = materials; + } + } + + ApplyRendererStates(tableRoot, payload, resolveNode); + AssetDatabase.SaveAssets(); + return appliedSlots; + } + + private static void SetAssetNormalPacking(VpeNormalMapRef normalMap) + { + if (normalMap != null && !string.IsNullOrEmpty(normalMap.TextureId)) { + normalMap.Packing = VpeNormalPackings.Dxt5nm; + normalMap.RuntimeCompress = false; + } + } + + private static Material NewLitTemplate(string name) + { + var shader = Shader.Find("HDRP/Lit"); + return shader ? new Material(shader) { name = name } : null; + } + + private static Material NewDecalTemplate() + { + var shader = Shader.Find("HDRP/Decal"); + return shader ? new Material(shader) { name = "VpeImportDecal" } : null; + } + + private static Material NewFabricSilkTemplate() + { + var shader = Shader.Find("HDRP/Fabric/Fabric Silk"); + return shader ? new Material(shader) { name = "VpeImportFabricSilk" } : null; + } + + // Locates shader-graph template materials (metal/rubber/DMD) by their captured template + // names, searching the HDRP package and the project. + private static Dictionary FindShaderGraphTemplates(VpeMaterialsPayload payload) + { + var overrides = new Dictionary(StringComparer.Ordinal); + foreach (var profile in payload.Profiles) { + var templateName = profile?.Metal?.TemplateName ?? profile?.Rubber?.TemplateName ?? profile?.Dmd?.TemplateName; + if (string.IsNullOrWhiteSpace(templateName) || overrides.ContainsKey(templateName)) { + continue; + } + foreach (var guid in AssetDatabase.FindAssets($"t:Material {templateName}")) { + var assetPath = AssetDatabase.GUIDToAssetPath(guid); + var candidate = AssetDatabase.LoadAssetAtPath(assetPath); + if (candidate && string.Equals(candidate.name, templateName, StringComparison.Ordinal)) { + overrides[templateName] = candidate; + break; + } + } + } + return overrides; + } + + private static void ApplyRendererStates(Transform tableRoot, VpeMaterialsPayload payload, Func resolveNode) + { + if (payload.RendererStates == null) { + return; + } + foreach (var state in payload.RendererStates) { + if (state == null) { + continue; + } + Transform target = null; + if (!string.IsNullOrEmpty(state.NodeId) && resolveNode != null) { + target = resolveNode(state.NodeId); + } + if (!target || !target.TryGetComponent(out var renderer)) { + continue; + } + renderer.shadowCastingMode = VpeMaterialEnums.ParseShadowCastingMode(state.CastShadows); + renderer.receiveShadows = state.ReceiveShadows; + renderer.renderingLayerMask = state.RenderingLayerMask; + if (state.Hdrp != null && state.Hdrp.RayTracingMode >= 0) { + renderer.rayTracingMode = (UnityEngine.Experimental.Rendering.RayTracingMode)state.Hdrp.RayTracingMode; + } + } + } + + private static string SanitizeFileName(string name) + { + var invalid = Path.GetInvalidFileNameChars(); + var chars = name.ToCharArray(); + for (var i = 0; i < chars.Length; i++) { + if (Array.IndexOf(invalid, chars[i]) >= 0) { + chars[i] = '_'; + } + } + return new string(chars); + } + + private sealed class AssetTextureProvider : IVpeTextureProvider + { + private readonly IReadOnlyDictionary _texturesById; + + public AssetTextureProvider(IReadOnlyDictionary texturesById) + { + _texturesById = texturesById ?? new Dictionary(); + } + + public Texture2D Get(string textureId) + { + return !string.IsNullOrEmpty(textureId) && _texturesById.TryGetValue(textureId, out var texture) + ? texture + : null; + } + } + } + + [InitializeOnLoad] + internal static class HdrpMaterialEditorImporterRegistration + { + static HdrpMaterialEditorImporterRegistration() + { + VpeMaterialEditorImport.Register(new HdrpMaterialEditorImporter()); + } + } +} diff --git a/Editor/HdrpMaterialEditorImporter.cs.meta b/Editor/HdrpMaterialEditorImporter.cs.meta new file mode 100644 index 0000000..d8b68d5 --- /dev/null +++ b/Editor/HdrpMaterialEditorImporter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4951cff57b773e54bb0ad5d17021ddad \ No newline at end of file diff --git a/Editor/HdrpMaterialTextureEncoder.cs b/Editor/HdrpMaterialTextureEncoder.cs new file mode 100644 index 0000000..5973d80 --- /dev/null +++ b/Editor/HdrpMaterialTextureEncoder.cs @@ -0,0 +1,97 @@ +// Visual Pinball Engine +// Copyright (C) 2026 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using System; +using NLog; +using UnityEngine; +using Logger = NLog.Logger; + +namespace VisualPinball.Engine.Unity.Hdrp.Editor +{ + // Utility for round-tripping arbitrary Unity textures (compressed, GPU-only, etc.) into export + // payloads. Goes via a temporary RenderTexture + ReadPixels so it works on assets without the + // Read/Write flag. Only used as a fallback when a texture has no original source file to pack; + // GPU-ready payloads are cooked by the player at load time, never at export. + internal static class HdrpMaterialTextureEncoder + { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + public static bool TryEncode(Texture2D source, bool linear, out byte[] pngData) + { + pngData = null; + if (!TryReadTexturePixels(source, linear, out var readableTexture)) { + return false; + } + + try { + pngData = readableTexture.EncodeToPNG(); + return pngData is { Length: > 0 }; + + } catch (Exception e) { + Logger.Warn(e, $"Unable to PNG-encode texture '{source.name}' for v1 material export."); + return false; + + } finally { + DestroyTexture(readableTexture); + } + } + + private static bool TryReadTexturePixels(Texture2D source, bool linear, out Texture2D readableTexture) + { + readableTexture = null; + if (!source) { + return false; + } + + var readWrite = linear ? RenderTextureReadWrite.Linear : RenderTextureReadWrite.sRGB; + var renderTexture = RenderTexture.GetTemporary( + source.width, source.height, 0, RenderTextureFormat.ARGB32, readWrite); + + var previousRenderTexture = RenderTexture.active; + try { + Graphics.Blit(source, renderTexture); + RenderTexture.active = renderTexture; + readableTexture = new Texture2D(source.width, source.height, TextureFormat.RGBA32, false, linear); + readableTexture.ReadPixels(new Rect(0, 0, source.width, source.height), 0, 0); + readableTexture.Apply(updateMipmaps: false, makeNoLongerReadable: false); + return true; + + } catch (Exception e) { + Logger.Warn(e, $"Unable to read texture '{source.name}' for v1 material export."); + DestroyTexture(readableTexture); + readableTexture = null; + return false; + + } finally { + RenderTexture.active = previousRenderTexture; + RenderTexture.ReleaseTemporary(renderTexture); + } + } + + private static void DestroyTexture(Texture2D texture) + { + if (!texture) { + return; + } + + if (Application.isPlaying) { + UnityEngine.Object.Destroy(texture); + } else { + UnityEngine.Object.DestroyImmediate(texture); + } + } + } +} diff --git a/Editor/HdrpMaterialTextureEncoder.cs.meta b/Editor/HdrpMaterialTextureEncoder.cs.meta new file mode 100644 index 0000000..74023af --- /dev/null +++ b/Editor/HdrpMaterialTextureEncoder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7b4c7643d7f94c9b9ce5cc6d80a3c627 diff --git a/Editor/HdrpMaterialTranslator.cs b/Editor/HdrpMaterialTranslator.cs new file mode 100644 index 0000000..7df6933 --- /dev/null +++ b/Editor/HdrpMaterialTranslator.cs @@ -0,0 +1,1418 @@ +// Visual Pinball Engine +// Copyright (C) 2026 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using NLog; +using UnityEditor; +using UnityEngine; +using VisualPinball.Unity; +using VisualPinball.Unity.Editor; +using Logger = NLog.Logger; + +namespace VisualPinball.Engine.Unity.Hdrp.Editor +{ + // Editor-only. Translates Unity Materials on a scene's renderers into the portable material + // payload (schema v2) plus a set of source texture blobs keyed by file name. Portable intent + // goes to the top of each profile; everything HDRP-specific lands in the profile's Hdrp block. + // + // Only HDRP-aware mappings are implemented here; if VPE adopts additional pipelines the + // translator fans out on shader name. + internal static class HdrpMaterialTranslator + { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + private const string HdrpLitShaderName = "HDRP/Lit"; + private const string HdrpFabricShaderPrefix = "HDRP/Fabric/"; + private const string HdrpDecalShaderName = "HDRP/Decal"; + private const string HdrpUnlitShaderName = "HDRP/Unlit"; + private const string VpeMetalShaderGraphPathSuffix = "/Assets/Resources/Graphs/Metal.shadergraph"; + private const string VpeRubberShaderGraphPathSuffix = "/Assets/Resources/Graphs/Rubber.shadergraph"; + private const string VpeDmdShaderGraphPathSuffix = "/Assets/Shaders/Srp/Display/DotMatrixDisplayGraph.shadergraph"; + + private const string VpeBaseColorMap = "_VpeBaseColorMap"; + private const string VpeColor = "_VpeColor"; + private const string VpeColorTint = "_VpeColorTint"; + private const string VpeMaskMap = "_VpeMaskMap"; + private const string VpeMetallicIntensity = "_VpeMetallicIntensity"; + private const string VpeNormalMap = "_VpeNormalMap"; + private const string VpeNormalIntensity = "_VpeNormalIntensity"; + private const string VpeOcclusionIntensity = "_VpeOcclusionIntensity"; + private const string VpeOffset = "_VpeOffset"; + private const string VpeSmoothnessRemapMax = "_VpeSmoothnessRemapMax"; + private const string VpeSmoothnessRemapMin = "_VpeSmoothnessRemapMin"; + private const string VpeTiling = "_VpeTiling"; + + public static VpeMaterialCaptureResult Capture(Transform tableRoot, IEnumerable renderers, Func nodeId) + { + var profiles = new Dictionary(StringComparer.Ordinal); + var rendererStates = new List(); + var ctx = new CaptureContext(); + + if (renderers != null) { + foreach (var renderer in renderers) { + if (!renderer) { + continue; + } + + if (tableRoot) { + rendererStates.Add(CaptureRendererState(renderer, tableRoot, nodeId)); + } + + foreach (var material in renderer.sharedMaterials) { + if (!material) { + continue; + } + var key = NormalizeMaterialName(material.name); + if (string.IsNullOrWhiteSpace(key) || profiles.ContainsKey(key)) { + continue; + } + + var profile = TranslateMaterial(material, ctx); + if (profile != null) { + profile.Name = key; + profiles[key] = profile; + } + } + } + } + + var payload = new VpeMaterialsPayload { + FormatVersion = VpeMaterialSchema.Version, + WrittenBy = "HdrpMaterialTranslator", + Profiles = profiles.Values.ToArray(), + Textures = ctx.BuildTextureAssets(), + RendererStates = rendererStates.ToArray(), + }; + ctx.LogUnsupportedMaterialsSummary(); + return new VpeMaterialCaptureResult(payload, ctx.BlobSources); + } + + public static IDisposable PrepareGltfExport(IEnumerable renderers) + { + return new GltfExportMaterialScope(renderers); + } + + private static VpeRendererState CaptureRendererState(Renderer renderer, Transform tableRoot, Func nodeId) + { + var id = nodeId?.Invoke(renderer.transform); + return new VpeRendererState { + NodeId = id, + CastShadows = VpeMaterialEnums.ToShadowCastingMode(renderer.shadowCastingMode), + ReceiveShadows = renderer.receiveShadows, + RenderingLayerMask = renderer.renderingLayerMask, + Hdrp = new VpeHdrpRendererHints { + RayTracingMode = (int)renderer.rayTracingMode, + }, + }; + } + + private static VpeMaterialProfile TranslateMaterial(Material material, CaptureContext ctx) + { + if (!material || !material.shader) { + return null; + } + + var shaderName = material.shader.name; + switch (shaderName) { + case HdrpLitShaderName: + return TranslateHdrpLit(material, ctx); + case HdrpDecalShaderName: + return TranslateHdrpDecal(material, ctx); + case HdrpUnlitShaderName: + return TranslateHdrpUnlit(material, ctx); + } + if (IsHdrpFabricShader(shaderName)) { + return TranslateHdrpFabricSilk(material, ctx); + } + + if (IsVpeRubberMaterial(material)) { + return TranslateVpeRubberShaderGraph(material, ctx); + } + if (IsVpeMetalMaterial(material)) { + return TranslateVpeMetalShaderGraph(material, ctx); + } + if (IsVpeDmdMaterial(material)) { + return TranslateVpeDmdShaderGraph(material); + } + + ctx.RegisterUnsupportedMaterial(shaderName, material.name); + return null; + } + + private static VpeMaterialProfile TranslateHdrpLit(Material material, CaptureContext ctx) + { + // Every texture is shipped in the source layer; the glb carries no image data for + // captured materials. This is what makes runtime import fast: no PNG decode in the glb + // path, the player cooks the sources once and caches GPU-ready payloads. + var baseColorTexture = ctx.CaptureSideChannelTextureRef(material, "_BaseColorMap", VpeColorSpaces.SRgb); + var baseColor = ResolveHdrpBaseColor(material); + + var lit = new VpeLitProfile { + BaseColor = { + Color = baseColor, + Texture = baseColorTexture, + }, + Metallic = SafeGetFloat(material, "_Metallic", 0f), + Smoothness = SafeGetFloat(material, "_Smoothness", 0.5f), + OcclusionStrength = 1f, + IridescenceMask = SafeGetFloat(material, "_IridescenceMask", 1f), + IridescenceThickness = SafeGetFloat(material, "_IridescenceThickness", 1f), + // MaskMap packs HDRP-specific channels (R=metal, G=AO, B=detail, A=smooth). glTF + // has no lossless equivalent, so the packing is declared via MaskPacking. + MaskMap = ctx.CaptureSideChannelTextureRef(material, "_MaskMap", VpeColorSpaces.Linear), + MaskPacking = VpeMaskPackings.HdrpMaskMap, + MetallicRemap = new Vector2( + SafeGetFloat(material, "_MetallicRemapMin", 0f), + SafeGetFloat(material, "_MetallicRemapMax", 1f)), + SmoothnessRemap = new Vector2( + SafeGetFloat(material, "_SmoothnessRemapMin", 0f), + SafeGetFloat(material, "_SmoothnessRemapMax", 1f)), + AoRemap = new Vector2( + SafeGetFloat(material, "_AORemapMin", 0f), + SafeGetFloat(material, "_AORemapMax", 1f)), + AlphaRemap = new Vector2( + SafeGetFloat(material, "_AlphaRemapMin", 0f), + SafeGetFloat(material, "_AlphaRemapMax", 1f)), + UvBase = Mathf.RoundToInt(SafeGetFloat(material, "_UVBase", 0f)), + NormalMap = ctx.CaptureSideChannelNormalMapRef(material, "_NormalMap", + strength: SafeGetFloat(material, "_NormalScale", 1f)), + Emissive = new VpeEmissive { + Color = SafeGetColor(material, "_EmissiveColor", Color.black), + HasLdrColor = HasAnyProperty(material, "_EmissiveColorLDR", "_EmissionColor"), + LdrColor = ResolveHdrpEmissiveLdrColor(material), + Texture = ctx.CaptureSideChannelTextureRef(material, "_EmissiveColorMap", VpeColorSpaces.SRgb), + UseIntensity = SafeGetFloat(material, "_UseEmissiveIntensity", 0f) > 0.5f, + Intensity = SafeGetFloat(material, "_EmissiveIntensity", 0f), + IntensityUnit = HdrpEmissiveIntensityUnitToString( + SafeGetFloat(material, "_EmissiveIntensityUnit", 0f)), + }, + SurfaceType = HdrpSurfaceTypeToString( + SafeGetFloat(material, "_SurfaceType", 0f), + SafeGetFloat(material, "_AlphaCutoffEnable", 0f)), + AlphaCutoff = SafeGetFloat(material, "_AlphaCutoff", 0.5f), + DoubleSided = SafeGetFloat(material, "_DoubleSidedEnable", 0f) > 0.5f, + DoubleSidedGi = material.doubleSidedGI, + BlendMode = VpeMaterialEnums.ToBlendMode(Mathf.RoundToInt(SafeGetFloat(material, "_BlendMode", 0f))), + SortPriority = Mathf.RoundToInt(SafeGetFloat(material, "_TransparentSortPriority", 0f)), + + RefractionModel = HdrpRefractionModelToString( + SafeGetFloat(material, "_RefractionModel", 0f), + material), + Ior = SafeGetFloat(material, "_Ior", 1f), + // Authoring intent is encoded by the explicit HDRP translucent signals: + // MaterialID==5 or the transmission keyword. Do not infer from _TransmissionEnable; + // HDRP keeps that float at 1 on many non-translucent materials. + HasTransmission = material.IsKeywordEnabled("_MATERIAL_FEATURE_TRANSMISSION") + || Mathf.Approximately(SafeGetFloat(material, "_MaterialID", 1f), 5f), + Thickness = SafeGetFloat(material, "_Thickness", 1f), + ThicknessRemap = SafeGetVector2(material, "_ThicknessRemap", new Vector2(0f, 1f)), + AbsorptionDistance = SafeGetFloat(material, "_ATDistance", 1f), + TransmittanceColor = SafeGetColor(material, "_TransmittanceColor", Color.white), + ThicknessMap = ctx.CaptureSideChannelTextureRef(material, "_ThicknessMap", VpeColorSpaces.Linear), + + Hdrp = new VpeHdrpLitHints { + TexWorldScale = SafeGetFloat(material, "_TexWorldScale", 1f), + InvTilingScale = SafeGetFloat(material, "_InvTilingScale", 1f), + GeometricSpecularAa = SafeGetFloat(material, "_EnableGeometricSpecularAA", 0f) > 0.5f, + SpecularAaScreenSpaceVariance = SafeGetFloat(material, "_SpecularAAScreenSpaceVariance", 0f), + SpecularAaThreshold = SafeGetFloat(material, "_SpecularAAThreshold", 0f), + SpecularOcclusionMode = Mathf.RoundToInt(SafeGetFloat(material, "_SpecularOcclusionMode", -1f)), + EnergyConservingSpecularColor = SafeGetFloat(material, "_EnergyConservingSpecularColor", 1f) > 0.5f, + SpecularColor = SafeGetColor(material, "_SpecularColor", Color.white), + SpecularColorMap = ctx.CaptureSideChannelTextureRef(material, "_SpecularColorMap", VpeColorSpaces.SRgb), + CoatMask = SafeGetFloat(material, "_CoatMask", -1f), + CoatMaskMap = ctx.CaptureSideChannelTextureRef(material, "_CoatMaskMap", VpeColorSpaces.Linear), + SupportDecals = SafeGetFloat(material, "_SupportDecals", 1f) > 0.5f + && !material.IsKeywordEnabled("_DISABLE_DECALS"), + CullMode = Mathf.RoundToInt(SafeGetFloat(material, "_CullMode", -1f)), + CullModeForward = Mathf.RoundToInt(SafeGetFloat(material, "_CullModeForward", -1f)), + OpaqueCullMode = Mathf.RoundToInt(SafeGetFloat(material, "_OpaqueCullMode", -1f)), + TransparentCullMode = Mathf.RoundToInt(SafeGetFloat(material, "_TransparentCullMode", -1f)), + EnableFogOnTransparent = SafeGetFloat(material, "_EnableFogOnTransparent", 1f) > 0.5f + || material.IsKeywordEnabled("_ENABLE_FOG_ON_TRANSPARENT"), + TransparentDepthPrepass = SafeGetFloat(material, "_TransparentDepthPrepassEnable", 0f) > 0.5f, + TransparentDepthPostpass = SafeGetFloat(material, "_TransparentDepthPostpassEnable", 0f) > 0.5f, + TransparentWritesMotionVectors = (SafeGetFloat(material, "_TransparentWritingMotionVec", 0f) > 0.5f + || material.IsKeywordEnabled("_TRANSPARENT_WRITES_MOTION_VEC")) + && (material.GetShaderPassEnabled("MOTIONVECTORS") || material.GetShaderPassEnabled("MotionVectors")), + TransparentBackface = SafeGetFloat(material, "_TransparentBackfaceEnable", 0f) > 0.5f, + BlendModePreserveSpecularLighting = SafeGetFloat(material, "_EnableBlendModePreserveSpecularLighting", 1f) > 0.5f + || material.IsKeywordEnabled("_BLENDMODE_PRESERVE_SPECULAR_LIGHTING"), + ZTestTransparent = Mathf.RoundToInt(SafeGetFloat(material, "_ZTestTransparent", -1f)), + ZTestDepthEqualForOpaque = Mathf.RoundToInt(SafeGetFloat(material, "_ZTestDepthEqualForOpaque", -1f)), + ZTestGBuffer = Mathf.RoundToInt(SafeGetFloat(material, "_ZTestGBuffer", -1f)), + DisableSsrTransparent = material.IsKeywordEnabled("_DISABLE_SSR_TRANSPARENT") + || SafeGetFloat(material, "_ReceivesSSRTransparent", 0f) < 0.5f, + DisableSsr = material.IsKeywordEnabled("_DISABLE_SSR") + || SafeGetFloat(material, "_ReceivesSSR", 1f) < 0.5f, + RayTracing = Mathf.RoundToInt(SafeGetFloat(material, "_RayTracing", -1f)), + MaterialId = Mathf.RoundToInt(SafeGetFloat(material, "_MaterialID", -1f)), + RenderQueueOverride = material.renderQueue, + TransmissionEnable = SafeGetFloat(material, "_TransmissionEnable", -1f), + TransmissionMask = SafeGetFloat(material, "_TransmissionMask", -1f), + DiffusionProfileHash = SafeGetFloat(material, "_DiffusionProfileHash", 0f), + DiffusionProfileAsset = SafeGetVector(material, "_DiffusionProfileAsset", Vector4.zero), + EmissiveExposureWeight = SafeGetFloat(material, "_EmissiveExposureWeight", 1f), + }, + }; + + return new VpeMaterialProfile { + Type = VpeMaterialTypes.Lit, + Lit = lit, + }; + } + + private static VpeMaterialProfile TranslateHdrpFabricSilk(Material material, CaptureContext ctx) + { + var litProfile = TranslateHdrpLit(material, ctx); + var fabric = new VpeFabricSilkProfile { + Lit = litProfile.Lit, + Hdrp = new VpeHdrpFabricSilkHints { + UseThreadMap = SafeGetFloat(material, "_useThreadMap", 0f) > 0.5f + || material.IsKeywordEnabled("_THREAD_UV_CHANNEL_UV0"), + ThreadMap = ctx.CaptureSideChannelTextureRef(material, "_ThreadMap", VpeColorSpaces.Linear), + ThreadAOStrength01 = SafeGetFloat(material, "_ThreadAOStrength01", -1f), + ThreadNormalStrength = SafeGetFloat(material, "_ThreadNormalStrength", -1f), + ThreadSmoothnessScale = SafeGetFloat(material, "_ThreadSmoothnessScale", -1f), + ThreadUvChannel = SafeGetFloat(material, "_THREAD_UV_CHANNEL", -1f), + FuzzMap = ctx.CaptureSideChannelTextureRef(material, "_FuzzMap", VpeColorSpaces.Linear), + FuzzStrength = SafeGetFloat(material, "_FuzzStrength", -1f), + FuzzMapUvScale = SafeGetFloat(material, "_FuzzMapUVScale", -1f), + }, + }; + + return new VpeMaterialProfile { + Type = VpeMaterialTypes.FabricSilk, + Fabric = fabric, + }; + } + + private static VpeMaterialProfile TranslateVpeMetalShaderGraph(Material material, CaptureContext ctx) + { + var source = ResolveSourceMaterialAsset(material); + var maskMap = CaptureShaderGraphTextureRef(ctx, material, source, VpeMaskMap, VpeColorSpaces.Linear) + ?? ctx.CaptureTextureAssetRef("Packages/org.visualpinball.unity.assets/Assets/Library/_Generic/Tileable Textures/tx_wear_scratches_heavy_mask_MADR.png", VpeColorSpaces.Linear); + if (maskMap != null) { + maskMap.Scale = SafeGetVector2(material, VpeTiling, SafeGetVector2(source, VpeTiling, maskMap.Scale)); + maskMap.Offset = SafeGetVector2(material, VpeOffset, SafeGetVector2(source, VpeOffset, maskMap.Offset)); + } + + var metallicIntensity = SafeGetFloat(material, VpeMetallicIntensity, SafeGetFloat(source, VpeMetallicIntensity, 1f)); + var occlusionIntensity = Mathf.Clamp01(SafeGetFloat(material, VpeOcclusionIntensity, SafeGetFloat(source, VpeOcclusionIntensity, 1f))); + var lit = new VpeLitProfile { + BaseColor = { + Color = SafeGetColor(material, VpeColor, SafeGetColor(source, VpeColor, ResolveHdrpBaseColor(material))), + }, + Metallic = metallicIntensity, + Smoothness = SafeGetFloat(material, "_Smoothness", SafeGetFloat(source, "_Smoothness", 0.5f)), + OcclusionStrength = occlusionIntensity, + MaskMap = maskMap, + MaskPacking = VpeMaskPackings.HdrpMaskMap, + MetallicRemap = new Vector2(0f, metallicIntensity), + SmoothnessRemap = new Vector2( + SafeGetFloat(material, VpeSmoothnessRemapMin, SafeGetFloat(source, VpeSmoothnessRemapMin, 0f)), + SafeGetFloat(material, VpeSmoothnessRemapMax, SafeGetFloat(source, VpeSmoothnessRemapMax, 1f))), + AoRemap = new Vector2(1f - occlusionIntensity, 1f), + AlphaRemap = new Vector2( + SafeGetFloat(material, "_AlphaRemapMin", SafeGetFloat(source, "_AlphaRemapMin", 0f)), + SafeGetFloat(material, "_AlphaRemapMax", SafeGetFloat(source, "_AlphaRemapMax", 1f))), + UvBase = 0, + Emissive = new VpeEmissive { + Color = SafeGetColor(material, "_EmissiveColor", Color.black), + HasLdrColor = HasAnyProperty(material, "_EmissiveColorLDR", "_EmissionColor"), + LdrColor = ResolveHdrpEmissiveLdrColor(material), + Texture = ctx.CaptureSideChannelTextureRef(material, "_EmissiveColorMap", VpeColorSpaces.SRgb), + UseIntensity = SafeGetFloat(material, "_UseEmissiveIntensity", 0f) > 0.5f, + Intensity = SafeGetFloat(material, "_EmissiveIntensity", 0f), + IntensityUnit = HdrpEmissiveIntensityUnitToString( + SafeGetFloat(material, "_EmissiveIntensityUnit", 0f)), + }, + SurfaceType = HdrpSurfaceTypeToString( + SafeGetFloat(material, "_SurfaceType", 0f), + SafeGetFloat(material, "_AlphaCutoffEnable", 0f)), + AlphaCutoff = SafeGetFloat(material, "_AlphaCutoff", 0.5f), + DoubleSided = SafeGetFloat(material, "_DoubleSidedEnable", 0f) > 0.5f, + DoubleSidedGi = material.doubleSidedGI, + HasTransmission = material.IsKeywordEnabled("_MATERIAL_FEATURE_TRANSMISSION") + || Mathf.Approximately(SafeGetFloat(material, "_MaterialID", 1f), 5f), + + Hdrp = new VpeHdrpLitHints { + TexWorldScale = SafeGetFloat(material, "_TexWorldScale", SafeGetFloat(source, "_TexWorldScale", 1f)), + InvTilingScale = SafeGetFloat(material, "_InvTilingScale", SafeGetFloat(source, "_InvTilingScale", 1f)), + GeometricSpecularAa = SafeGetFloat(material, "_EnableGeometricSpecularAA", SafeGetFloat(source, "_EnableGeometricSpecularAA", 0f)) > 0.5f, + SpecularAaScreenSpaceVariance = SafeGetFloat(material, "_SpecularAAScreenSpaceVariance", SafeGetFloat(source, "_SpecularAAScreenSpaceVariance", 0f)), + SpecularAaThreshold = SafeGetFloat(material, "_SpecularAAThreshold", SafeGetFloat(source, "_SpecularAAThreshold", 0f)), + SpecularOcclusionMode = Mathf.RoundToInt(SafeGetFloat(material, "_SpecularOcclusionMode", SafeGetFloat(source, "_SpecularOcclusionMode", -1f))), + EnergyConservingSpecularColor = SafeGetFloat(material, "_EnergyConservingSpecularColor", SafeGetFloat(source, "_EnergyConservingSpecularColor", 1f)) > 0.5f, + SpecularColor = SafeGetColor(material, "_SpecularColor", SafeGetColor(source, "_SpecularColor", Color.white)), + SpecularColorMap = CaptureShaderGraphTextureRef(ctx, material, source, "_SpecularColorMap", VpeColorSpaces.SRgb), + CoatMask = SafeGetFloat(material, "_CoatMask", SafeGetFloat(source, "_CoatMask", -1f)), + CoatMaskMap = CaptureShaderGraphTextureRef(ctx, material, source, "_CoatMaskMap", VpeColorSpaces.Linear), + CullMode = Mathf.RoundToInt(SafeGetFloat(material, "_CullMode", -1f)), + CullModeForward = Mathf.RoundToInt(SafeGetFloat(material, "_CullModeForward", -1f)), + OpaqueCullMode = Mathf.RoundToInt(SafeGetFloat(material, "_OpaqueCullMode", -1f)), + TransparentCullMode = Mathf.RoundToInt(SafeGetFloat(material, "_TransparentCullMode", -1f)), + BlendModePreserveSpecularLighting = SafeGetFloat(material, "_EnableBlendModePreserveSpecularLighting", SafeGetFloat(source, "_EnableBlendModePreserveSpecularLighting", 1f)) > 0.5f + || material.IsKeywordEnabled("_BLENDMODE_PRESERVE_SPECULAR_LIGHTING"), + DisableSsr = material.IsKeywordEnabled("_DISABLE_SSR") + || SafeGetFloat(material, "_ReceivesSSR", 1f) < 0.5f, + RayTracing = Mathf.RoundToInt(SafeGetFloat(material, "_RayTracing", -1f)), + MaterialId = Mathf.RoundToInt(SafeGetFloat(material, "_MaterialID", -1f)), + RenderQueueOverride = material.renderQueue, + TransmissionEnable = SafeGetFloat(material, "_TransmissionEnable", -1f), + TransmissionMask = SafeGetFloat(material, "_TransmissionMask", -1f), + }, + }; + + return new VpeMaterialProfile { + Type = VpeMaterialTypes.Metal, + Metal = CreateShaderGraphProfile(material), + Lit = lit, + }; + } + + private static VpeMaterialProfile TranslateVpeDmdShaderGraph(Material material) + { + return new VpeMaterialProfile { + Type = VpeMaterialTypes.Dmd, + Dmd = CreateShaderGraphProfile(material), + }; + } + + private static VpeShaderGraphProfile CreateShaderGraphProfile(Material material) + { + var source = ResolveSourceMaterialAsset(material); + return new VpeShaderGraphProfile { + TemplateName = source ? source.name : material.name, + }; + } + + private static VpeMaterialProfile TranslateVpeRubberShaderGraph(Material material, CaptureContext ctx) + { + var source = ResolveSourceMaterialAsset(material); + var baseColorMap = CaptureShaderGraphTextureRef(ctx, material, source, VpeBaseColorMap, VpeColorSpaces.SRgb); + var normalMap = CaptureShaderGraphNormalMapRef(ctx, material, source, VpeNormalMap, + SafeGetFloat(material, VpeNormalIntensity, SafeGetFloat(source, VpeNormalIntensity, 1f))); + var maskMap = CaptureShaderGraphTextureRef(ctx, material, source, VpeMaskMap, VpeColorSpaces.Linear); + + var scale = SafeGetVector2(material, VpeTiling, SafeGetVector2(source, VpeTiling, Vector2.one)); + var offset = SafeGetVector2(material, VpeOffset, SafeGetVector2(source, VpeOffset, Vector2.zero)); + ApplyTextureTransform(baseColorMap, scale, offset); + ApplyTextureTransform(normalMap, scale, offset); + ApplyTextureTransform(maskMap, scale, offset); + + var occlusionIntensity = Mathf.Clamp01(SafeGetFloat(material, VpeOcclusionIntensity, SafeGetFloat(source, VpeOcclusionIntensity, 1f))); + var lit = new VpeLitProfile { + BaseColor = { + Color = SafeGetColor(material, VpeColorTint, SafeGetColor(source, VpeColorTint, ResolveHdrpBaseColor(material))), + Texture = baseColorMap, + }, + Metallic = SafeGetFloat(material, "_Metallic", SafeGetFloat(source, "_Metallic", 0f)), + Smoothness = SafeGetFloat(material, "_Smoothness", SafeGetFloat(source, "_Smoothness", 0.5f)), + OcclusionStrength = occlusionIntensity, + MaskMap = maskMap, + MaskPacking = VpeMaskPackings.HdrpMaskMap, + MetallicRemap = new Vector2(0f, SafeGetFloat(material, "_Metallic", SafeGetFloat(source, "_Metallic", 0f))), + SmoothnessRemap = new Vector2( + SafeGetFloat(material, VpeSmoothnessRemapMin, SafeGetFloat(source, VpeSmoothnessRemapMin, 0f)), + SafeGetFloat(material, VpeSmoothnessRemapMax, SafeGetFloat(source, VpeSmoothnessRemapMax, 1f))), + AoRemap = new Vector2(1f - occlusionIntensity, 1f), + AlphaRemap = new Vector2( + SafeGetFloat(material, "_AlphaRemapMin", SafeGetFloat(source, "_AlphaRemapMin", 0f)), + SafeGetFloat(material, "_AlphaRemapMax", SafeGetFloat(source, "_AlphaRemapMax", 1f))), + UvBase = 0, + NormalMap = normalMap, + Emissive = new VpeEmissive { + Color = SafeGetColor(material, "_EmissiveColor", Color.black), + HasLdrColor = HasAnyProperty(material, "_EmissiveColorLDR", "_EmissionColor"), + LdrColor = ResolveHdrpEmissiveLdrColor(material), + Texture = ctx.CaptureSideChannelTextureRef(material, "_EmissiveColorMap", VpeColorSpaces.SRgb), + UseIntensity = SafeGetFloat(material, "_UseEmissiveIntensity", 0f) > 0.5f, + Intensity = SafeGetFloat(material, "_EmissiveIntensity", 0f), + IntensityUnit = HdrpEmissiveIntensityUnitToString( + SafeGetFloat(material, "_EmissiveIntensityUnit", 0f)), + }, + SurfaceType = HdrpSurfaceTypeToString( + SafeGetFloat(material, "_SurfaceType", 0f), + SafeGetFloat(material, "_AlphaCutoffEnable", 0f)), + AlphaCutoff = SafeGetFloat(material, "_AlphaCutoff", 0.5f), + DoubleSided = SafeGetFloat(material, "_DoubleSidedEnable", 0f) > 0.5f, + DoubleSidedGi = material.doubleSidedGI, + + Hdrp = new VpeHdrpLitHints { + TexWorldScale = SafeGetFloat(material, "_TexWorldScale", SafeGetFloat(source, "_TexWorldScale", 1f)), + InvTilingScale = SafeGetFloat(material, "_InvTilingScale", SafeGetFloat(source, "_InvTilingScale", 1f)), + GeometricSpecularAa = SafeGetFloat(material, "_EnableGeometricSpecularAA", SafeGetFloat(source, "_EnableGeometricSpecularAA", 0f)) > 0.5f, + SpecularAaScreenSpaceVariance = SafeGetFloat(material, "_SpecularAAScreenSpaceVariance", SafeGetFloat(source, "_SpecularAAScreenSpaceVariance", 0f)), + SpecularAaThreshold = SafeGetFloat(material, "_SpecularAAThreshold", SafeGetFloat(source, "_SpecularAAThreshold", 0f)), + SpecularOcclusionMode = Mathf.RoundToInt(SafeGetFloat(material, "_SpecularOcclusionMode", SafeGetFloat(source, "_SpecularOcclusionMode", -1f))), + EnergyConservingSpecularColor = SafeGetFloat(material, "_EnergyConservingSpecularColor", SafeGetFloat(source, "_EnergyConservingSpecularColor", 1f)) > 0.5f, + SpecularColor = SafeGetColor(material, "_SpecularColor", SafeGetColor(source, "_SpecularColor", Color.white)), + SpecularColorMap = CaptureShaderGraphTextureRef(ctx, material, source, "_SpecularColorMap", VpeColorSpaces.SRgb), + CoatMask = SafeGetFloat(material, "_CoatMask", SafeGetFloat(source, "_CoatMask", -1f)), + CoatMaskMap = CaptureShaderGraphTextureRef(ctx, material, source, "_CoatMaskMap", VpeColorSpaces.Linear), + CullMode = Mathf.RoundToInt(SafeGetFloat(material, "_CullMode", -1f)), + CullModeForward = Mathf.RoundToInt(SafeGetFloat(material, "_CullModeForward", -1f)), + OpaqueCullMode = Mathf.RoundToInt(SafeGetFloat(material, "_OpaqueCullMode", -1f)), + TransparentCullMode = Mathf.RoundToInt(SafeGetFloat(material, "_TransparentCullMode", -1f)), + BlendModePreserveSpecularLighting = SafeGetFloat(material, "_EnableBlendModePreserveSpecularLighting", SafeGetFloat(source, "_EnableBlendModePreserveSpecularLighting", 1f)) > 0.5f + || material.IsKeywordEnabled("_BLENDMODE_PRESERVE_SPECULAR_LIGHTING"), + DisableSsr = material.IsKeywordEnabled("_DISABLE_SSR") + || SafeGetFloat(material, "_ReceivesSSR", 1f) < 0.5f, + RayTracing = Mathf.RoundToInt(SafeGetFloat(material, "_RayTracing", -1f)), + MaterialId = Mathf.RoundToInt(SafeGetFloat(material, "_MaterialID", -1f)), + RenderQueueOverride = material.renderQueue, + }, + }; + + return new VpeMaterialProfile { + Type = VpeMaterialTypes.Rubber, + Rubber = CreateShaderGraphProfile(material), + Lit = lit, + }; + } + + private static VpeMaterialProfile TranslateHdrpDecal(Material material, CaptureContext ctx) + { + var decal = new VpeDecalProfile { + BaseColor = { + Color = SafeGetColor(material, "_BaseColor", Color.white), + // Decal albedo alpha is load-bearing (where the decal applies). Exporting through + // glTF can convert this map to JPEG and drop alpha, so always side-channel it. + Texture = ctx.CaptureSideChannelTextureRef(material, "_BaseColorMap", VpeColorSpaces.SRgb), + }, + NormalMap = ctx.CaptureSideChannelNormalMapRef(material, "_NormalMap", + strength: SafeGetFloat(material, "_NormalScale", 1f)), + MaskMap = ctx.CaptureSideChannelTextureRef(material, "_MaskMap", VpeColorSpaces.Linear), + MaskPacking = VpeMaskPackings.HdrpMaskMap, + AffectAlbedo = material.IsKeywordEnabled("_MATERIAL_AFFECTS_ALBEDO") + || SafeGetFloat(material, "_AffectAlbedo", 1f) > 0.5f, + AffectNormal = material.IsKeywordEnabled("_MATERIAL_AFFECTS_NORMAL") + || SafeGetFloat(material, "_AffectNormal", 1f) > 0.5f, + AffectMask = material.IsKeywordEnabled("_MATERIAL_AFFECTS_MASKMAP") + || SafeGetFloat(material, "_AffectMaskmap", 0f) > 0.5f, + DecalBlend = SafeGetFloat(material, "_DecalBlend", 1f), + NormalBlendSrc = SafeGetFloat(material, "_NormalBlendSrc", 1f), + MaskBlendSrc = SafeGetFloat(material, "_MaskBlendSrc", 1f), + Smoothness = SafeGetFloat(material, "_DecalSmoothness", 0.5f), + Metallic = SafeGetFloat(material, "_DecalMetallic", 0f), + AmbientOcclusion = SafeGetFloat(material, "_DecalAO", 1f), + }; + + return new VpeMaterialProfile { + Type = VpeMaterialTypes.Decal, + Decal = decal, + }; + } + + private static VpeMaterialProfile TranslateHdrpUnlit(Material material, CaptureContext ctx) + { + var unlit = new VpeUnlitProfile { + BaseColor = { + Color = SafeGetColor(material, "_UnlitColor", SafeGetColor(material, "_BaseColor", Color.white)), + Texture = ctx.CaptureImportedTextureRef(material, "_UnlitColorMap") + ?? ctx.CaptureImportedTextureRef(material, "_BaseColorMap"), + }, + SurfaceType = HdrpSurfaceTypeToString( + SafeGetFloat(material, "_SurfaceType", 0f), + SafeGetFloat(material, "_AlphaCutoffEnable", 0f)), + AlphaCutoff = SafeGetFloat(material, "_AlphaCutoff", 0.5f), + DoubleSided = SafeGetFloat(material, "_DoubleSidedEnable", 0f) > 0.5f, + }; + return new VpeMaterialProfile { + Type = VpeMaterialTypes.Unlit, + Unlit = unlit, + }; + } + + private static string HdrpSurfaceTypeToString(float surfaceType, float alphaCutoffEnable) + { + if (surfaceType > 0.5f) { + return VpeSurfaceTypes.Transparent; + } + return alphaCutoffEnable > 0.5f ? VpeSurfaceTypes.AlphaTest : VpeSurfaceTypes.Opaque; + } + + private static string HdrpEmissiveIntensityUnitToString(float value) + { + // HDRP: 0 = Nits, 1 = EV100. + return value > 0.5f ? VpeEmissiveIntensityUnits.Ev100 : VpeEmissiveIntensityUnits.Nits; + } + + private static Material CreateSanitizedGltfExportMaterial(Material source) + { + if (!source || !source.shader) { + return null; + } + + // Captured material types carry all their texture data in the package's source layer, + // so the glTF export must not duplicate any of it. Stripping every texture also stops + // glTFast from encoding hundreds of megabytes of images into table.glb, which used to + // dominate both package size and load time. Unsupported shaders keep their textures so + // the glTF fallback material still looks right. + var shaderName = source.shader.name; + var clone = shaderName switch { + HdrpLitShaderName => CreateTextureFreeClone(source), + HdrpDecalShaderName => CreateTextureFreeClone(source), + _ => IsVpeRubberMaterial(source) || IsVpeMetalMaterial(source) || IsVpeDmdMaterial(source) + || IsHdrpFabricShader(shaderName) + ? CreateTextureFreeClone(source) + : null, + }; + + if (clone) { + clone.name = source.name; + } + return clone; + } + + private static Material CreateTextureFreeClone(Material source) + { + var hasAnyTexture = false; + var propertyNames = GetSerializedTexturePropertyNames(source); + foreach (var propertyName in propertyNames) { + if (!string.IsNullOrWhiteSpace(propertyName) + && IsTextureShaderProperty(source.shader, propertyName) + && source.GetTexture(propertyName)) { + hasAnyTexture = true; + break; + } + } + if (!hasAnyTexture) { + return null; + } + + var clone = new Material(source); + foreach (var propertyName in propertyNames) { + if (!string.IsNullOrWhiteSpace(propertyName) + && IsTextureShaderProperty(clone.shader, propertyName) + && clone.GetTexture(propertyName)) { + clone.SetTexture(propertyName, null); + } + } + return clone; + } + + private static List GetSerializedTexturePropertyNames(Material source) + { + var propertyNames = new List(); + if (!source) { + return propertyNames; + } + + var texEnvs = new SerializedObject(source).FindProperty("m_SavedProperties.m_TexEnvs"); + if (texEnvs == null || !texEnvs.isArray) { + propertyNames.AddRange(source.GetTexturePropertyNames() + .Where(propertyName => source.HasProperty(propertyName))); + return propertyNames; + } + + for (var i = 0; i < texEnvs.arraySize; i++) { + var entry = texEnvs.GetArrayElementAtIndex(i); + var propertyName = entry.FindPropertyRelative("first")?.stringValue; + if (!string.IsNullOrWhiteSpace(propertyName) && source.HasProperty(propertyName)) { + propertyNames.Add(propertyName); + } + } + return propertyNames; + } + + private static bool IsTextureShaderProperty(Shader shader, string propertyName) + { + if (!shader || string.IsNullOrWhiteSpace(propertyName)) { + return false; + } + + var propertyCount = ShaderUtil.GetPropertyCount(shader); + for (var i = 0; i < propertyCount; i++) { + if (!string.Equals(ShaderUtil.GetPropertyName(shader, i), propertyName, StringComparison.Ordinal)) { + continue; + } + return string.Equals(ShaderUtil.GetPropertyType(shader, i).ToString(), "TexEnv", StringComparison.Ordinal); + } + return false; + } + + private static bool IsVpeMetalShaderGraph(Shader shader) + { + if (!shader) { + return false; + } + + var path = AssetDatabase.GetAssetPath(shader); + return !string.IsNullOrWhiteSpace(path) + && path.Replace('\\', '/').EndsWith(VpeMetalShaderGraphPathSuffix, StringComparison.Ordinal); + } + + private static bool IsVpeRubberShaderGraph(Shader shader) + { + if (!shader) { + return false; + } + + var path = AssetDatabase.GetAssetPath(shader); + return !string.IsNullOrWhiteSpace(path) + && path.Replace('\\', '/').EndsWith(VpeRubberShaderGraphPathSuffix, StringComparison.Ordinal); + } + + private static bool IsVpeDmdShaderGraph(Shader shader) + { + if (!shader) { + return false; + } + + var path = AssetDatabase.GetAssetPath(shader); + return !string.IsNullOrWhiteSpace(path) + && path.Replace('\\', '/').EndsWith(VpeDmdShaderGraphPathSuffix, StringComparison.Ordinal); + } + + private static bool IsVpeMetalMaterial(Material material) + { + return IsVpeMetalShaderGraph(material.shader); + } + + private static bool IsVpeRubberMaterial(Material material) + { + return IsVpeRubberShaderGraph(material.shader); + } + + private static bool IsVpeDmdMaterial(Material material) + { + return IsVpeDmdShaderGraph(material.shader); + } + + private static bool IsHdrpFabricShader(string shaderName) + { + return !string.IsNullOrWhiteSpace(shaderName) + && shaderName.StartsWith(HdrpFabricShaderPrefix, StringComparison.Ordinal); + } + + // HDRP _RefractionModel float: 0=None, 1=Plane, 2=Sphere, 3=Thin. We also check keywords + // since the float is sometimes left at a stale value while the keyword tells the real story. + private static string HdrpRefractionModelToString(float value, Material material) + { + if (material.IsKeywordEnabled("_REFRACTION_PLANE")) { + return VpeRefractionModels.Planar; + } + if (material.IsKeywordEnabled("_REFRACTION_SPHERE")) { + return VpeRefractionModels.Sphere; + } + if (material.IsKeywordEnabled("_REFRACTION_THIN")) { + return VpeRefractionModels.Thin; + } + var mode = Mathf.RoundToInt(value); + return mode switch { + 1 => VpeRefractionModels.Planar, + 2 => VpeRefractionModels.Sphere, + 3 => VpeRefractionModels.Thin, + _ => VpeRefractionModels.None, + }; + } + + private static float SafeGetFloat(Material material, string property, float fallback) + { + return material && material.HasProperty(property) ? material.GetFloat(property) : fallback; + } + + private static Color SafeGetColor(Material material, string property, Color fallback) + { + return material && material.HasProperty(property) ? material.GetColor(property) : fallback; + } + + private static Color ResolveHdrpBaseColor(Material material) + { + var baseColor = SafeGetColor(material, "_BaseColor", Color.white); + var color = SafeGetColor(material, "_Color", baseColor); + + // Some HDRP material variants store their visible color override in _Color only. + // Prefer that override when _BaseColor still looks like the inherited/default value. + if (material.HasProperty("_Color") + && !Approximately(color, baseColor) + && RgbApproximately(baseColor, Color.white) + && Mathf.Approximately(baseColor.a, color.a)) { + return color; + } + + return baseColor; + } + + private static Color ResolveHdrpEmissiveLdrColor(Material material) + { + var ldr = SafeGetColor(material, "_EmissiveColorLDR", + SafeGetColor(material, "_EmissionColor", Color.black)); + if (!Approximately(ldr, Color.black)) { + return ldr; + } + + var intensity = SafeGetFloat(material, "_EmissiveIntensity", 0f); + var hdr = SafeGetColor(material, "_EmissiveColor", Color.black); + if (intensity > 0.000001f && !Approximately(hdr, Color.black)) { + return hdr / intensity; + } + + return ldr; + } + + private static bool HasAnyProperty(Material material, params string[] properties) + { + for (var i = 0; i < properties.Length; i++) { + if (material.HasProperty(properties[i])) { + return true; + } + } + + return false; + } + + private static bool Approximately(Color a, Color b) + { + return Mathf.Approximately(a.r, b.r) + && Mathf.Approximately(a.g, b.g) + && Mathf.Approximately(a.b, b.b) + && Mathf.Approximately(a.a, b.a); + } + + private static bool RgbApproximately(Color a, Color b) + { + return Mathf.Approximately(a.r, b.r) + && Mathf.Approximately(a.g, b.g) + && Mathf.Approximately(a.b, b.b); + } + + private static Vector2 SafeGetVector2(Material material, string property, Vector2 fallback) + { + if (!material || !material.HasProperty(property)) { + return fallback; + } + + var value = material.GetVector(property); + return new Vector2(value.x, value.y); + } + + private static Vector4 SafeGetVector(Material material, string property, Vector4 fallback) + { + return material && material.HasProperty(property) ? material.GetVector(property) : fallback; + } + + private static Material ResolveSourceMaterialAsset(Material material) + { + if (!material) { + return null; + } + + var path = AssetDatabase.GetAssetPath(material); + if (!string.IsNullOrWhiteSpace(path)) { + return material; + } + + var normalizedName = NormalizeMaterialName(material.name); + if (string.IsNullOrWhiteSpace(normalizedName)) { + return null; + } + + var measured = ResolveMeasuredMaterialAsset(normalizedName); + if (measured) { + return measured; + } + + var roots = new[] { + "Assets", + "Packages/org.visualpinball.engine.unity.hdrp", + "Packages/org.visualpinball.unity.assets", + }; + return FindMaterialAssetByExactName(normalizedName, roots) + ?? FindMaterialAssetByExactName(normalizedName, null); + } + + private static Material ResolveMeasuredMaterialAsset(string normalizedName) + { + var measuredRoots = new[] { + "Packages/org.visualpinball.engine.unity.hdrp/Assets/Art/Materials/Measured/Metal", + "Packages/org.visualpinball.engine.unity.hdrp/Assets/Art/Materials/Measured/Rubber", + "Assets/Art/Materials/Measured/Metal", + "Assets/Art/Materials/Measured/Rubber", + }; + + foreach (var root in measuredRoots) { + var candidate = AssetDatabase.LoadAssetAtPath($"{root}/{normalizedName}.mat"); + if (candidate && string.Equals(NormalizeMaterialName(candidate.name), normalizedName, StringComparison.Ordinal)) { + return candidate; + } + } + + return null; + } + + private static Material FindMaterialAssetByExactName(string normalizedName, string[] roots) + { + var guids = roots == null + ? AssetDatabase.FindAssets("t:Material") + : AssetDatabase.FindAssets("t:Material", roots); + foreach (var guid in guids) { + var assetPath = AssetDatabase.GUIDToAssetPath(guid); + var candidate = AssetDatabase.LoadAssetAtPath(assetPath); + if (candidate && string.Equals(NormalizeMaterialName(candidate.name), normalizedName, StringComparison.Ordinal)) { + return candidate; + } + } + + return null; + } + + private static VpeTextureRef CaptureShaderGraphTextureRef( + CaptureContext ctx, + Material material, + Material source, + string property, + string colorSpace) + { + return ctx.CaptureSideChannelTextureRef(material, property, colorSpace) + ?? ctx.CaptureSideChannelTextureRef(source, property, colorSpace); + } + + private static VpeNormalMapRef CaptureShaderGraphNormalMapRef( + CaptureContext ctx, + Material material, + Material source, + string property, + float strength) + { + return ctx.CaptureSideChannelNormalMapRef(material, property, strength) + ?? ctx.CaptureSideChannelNormalMapRef(source, property, strength); + } + + private static void ApplyTextureTransform(VpeTextureRef texture, Vector2 scale, Vector2 offset) + { + if (texture == null) { + return; + } + + texture.Scale = scale; + texture.Offset = offset; + } + + private static void ApplyTextureTransform(VpeNormalMapRef texture, Vector2 scale, Vector2 offset) + { + if (texture == null) { + return; + } + + texture.Scale = scale; + texture.Offset = offset; + } + + public static string NormalizeMaterialName(string materialName) + => VpeMaterialNameUtil.NormalizeMaterialName(materialName); + + private sealed class CaptureContext + { + private readonly Dictionary _assetsByTexture = new(); + private readonly HashSet _usedIds = new(StringComparer.Ordinal); + private readonly HashSet _usedFileNames = new(StringComparer.Ordinal); + // Deferred byte sources (file path or inline bytes) recorded during the main-thread walk; + // the caller loads them in parallel off the main thread. + private readonly List _blobSources = new(); + private readonly Dictionary _unsupportedShaders = new(StringComparer.Ordinal); + + public IReadOnlyList BlobSources => _blobSources; + + public VpeTexture[] BuildTextureAssets() + { + var assets = new VpeTexture[_assetsByTexture.Count]; + var i = 0; + foreach (var asset in _assetsByTexture.Values) { + assets[i++] = asset; + } + return assets; + } + + public void RegisterUnsupportedMaterial(string shaderName, string materialName) + { + if (string.IsNullOrWhiteSpace(shaderName)) { + shaderName = ""; + } + + if (!_unsupportedShaders.TryGetValue(shaderName, out var usage)) { + usage = new UnsupportedShaderUsage(); + _unsupportedShaders[shaderName] = usage; + } + + usage.Count++; + if (!string.IsNullOrWhiteSpace(materialName) && usage.MaterialSamples.Count < 4) { + usage.MaterialSamples.Add(materialName); + } + } + + public void LogUnsupportedMaterialsSummary() + { + if (_unsupportedShaders.Count == 0) { + return; + } + + var totalMaterials = 0; + var shaderSummaries = new List(); + foreach (var entry in _unsupportedShaders.OrderByDescending(pair => pair.Value.Count).ThenBy(pair => pair.Key, StringComparer.Ordinal)) { + totalMaterials += entry.Value.Count; + var materialSamples = entry.Value.MaterialSamples.Count > 0 + ? $" [{string.Join(", ", entry.Value.MaterialSamples)}{(entry.Value.Count > entry.Value.MaterialSamples.Count ? ", ..." : string.Empty)}]" + : string.Empty; + shaderSummaries.Add($"{entry.Key} x{entry.Value.Count}{materialSamples}"); + } + + Logger.Info( + $"Skipped material translation for {totalMaterials} material(s) across {_unsupportedShaders.Count} unsupported shader(s). " + + $"These materials will fall back to the glTF-imported material at runtime. " + + $"Shaders: {string.Join("; ", shaderSummaries)}"); + } + + // Captures a texture reference whose pixel data must be shipped in the source layer + // (i.e. is not losslessly reproduced by the glb). Use for HDRP-specific packings like + // MaskMap where channel semantics differ from glTF's PBR textures. + public VpeTextureRef CaptureSideChannelTextureRef(Material material, string property, string colorSpace, VpeTextureRef fallback = null) + { + if (!material) { + return fallback; + } + var texture = material.HasProperty(property) ? material.GetTexture(property) as Texture2D : null; + if (!texture) { + return CaptureSerializedSideChannelTextureRef(material, property, colorSpace, fallback); + } + + var asset = GetOrCaptureAsset(texture, colorSpace); + if (asset == null) { + return fallback; + } + + return new VpeTextureRef { + TextureId = asset.Id, + Offset = material.GetTextureOffset(property), + Scale = material.GetTextureScale(property), + }; + } + + private VpeTextureRef CaptureSerializedSideChannelTextureRef(Material material, string property, string colorSpace, VpeTextureRef fallback) + { + var texEnvs = new SerializedObject(material).FindProperty("m_SavedProperties.m_TexEnvs"); + if (texEnvs == null || !texEnvs.isArray) { + return CaptureYamlSideChannelTextureRef(material, property, colorSpace, fallback); + } + + for (var i = 0; i < texEnvs.arraySize; i++) { + var entry = texEnvs.GetArrayElementAtIndex(i); + var key = entry.FindPropertyRelative("first")?.stringValue; + if (!string.Equals(key, property, StringComparison.Ordinal)) { + continue; + } + + var value = entry.FindPropertyRelative("second"); + var texture = value?.FindPropertyRelative("m_Texture")?.objectReferenceValue as Texture2D; + if (!texture) { + return CaptureYamlSideChannelTextureRef(material, property, colorSpace, fallback); + } + + var asset = GetOrCaptureAsset(texture, colorSpace); + if (asset == null) { + return fallback; + } + + return new VpeTextureRef { + TextureId = asset.Id, + Offset = value.FindPropertyRelative("m_Offset")?.vector2Value ?? Vector2.zero, + Scale = value.FindPropertyRelative("m_Scale")?.vector2Value ?? Vector2.one, + }; + } + + return CaptureYamlSideChannelTextureRef(material, property, colorSpace, fallback); + } + + private VpeTextureRef CaptureYamlSideChannelTextureRef(Material material, string property, string colorSpace, VpeTextureRef fallback) + { + var assetPath = AssetDatabase.GetAssetPath(material); + if (string.IsNullOrWhiteSpace(assetPath)) { + return fallback; + } + + var fullPath = Path.Combine(Directory.GetCurrentDirectory(), assetPath); + if (!File.Exists(fullPath)) { + return fallback; + } + + var guid = ExtractTextureGuidFromMaterialYaml(fullPath, property); + if (string.IsNullOrWhiteSpace(guid)) { + return fallback; + } + + var texturePath = AssetDatabase.GUIDToAssetPath(guid); + if (string.IsNullOrWhiteSpace(texturePath)) { + return fallback; + } + + var texture = AssetDatabase.LoadAssetAtPath(texturePath); + if (!texture) { + return fallback; + } + + var asset = GetOrCaptureAsset(texture, colorSpace); + if (asset == null) { + return fallback; + } + + return new VpeTextureRef { + TextureId = asset.Id, + Offset = Vector2.zero, + Scale = Vector2.one, + }; + } + + private static string ExtractTextureGuidFromMaterialYaml(string materialPath, string property) + { + var lines = File.ReadAllLines(materialPath); + for (var i = 0; i < lines.Length; i++) { + if (!lines[i].TrimStart().StartsWith($"- {property}:", StringComparison.Ordinal)) { + continue; + } + + for (var j = i + 1; j < lines.Length && j < i + 8; j++) { + var line = lines[j]; + if (j > i + 1 && line.TrimStart().StartsWith("- ", StringComparison.Ordinal)) { + break; + } + var marker = "guid:"; + var markerIndex = line.IndexOf(marker, StringComparison.Ordinal); + if (markerIndex < 0) { + continue; + } + + var start = markerIndex + marker.Length; + var end = line.IndexOf(',', start); + var guid = (end >= 0 ? line.Substring(start, end - start) : line.Substring(start)).Trim(); + return string.Equals(guid, "0", StringComparison.Ordinal) ? null : guid; + } + } + + return null; + } + + // Captures tiling only — no TextureId, no source bytes. Pixel data is read at + // runtime from the gltFast-imported material by matching property-name aliases. + public VpeTextureRef CaptureImportedTextureRef(Material material, string property) + { + if (!material.HasProperty(property)) { + return null; + } + var texture = material.GetTexture(property); + if (!texture) { + return null; + } + return new VpeTextureRef { + TextureId = null, + Offset = material.GetTextureOffset(property), + Scale = material.GetTextureScale(property), + }; + } + + public VpeNormalMapRef CaptureSideChannelNormalMapRef(Material material, string property, float strength) + { + if (!material || !material.HasProperty(property)) { + return null; + } + var texture = material.GetTexture(property) as Texture2D; + if (!texture) { + return null; + } + + var asset = GetOrCaptureAsset(texture, VpeColorSpaces.Linear); + if (asset == null) { + return null; + } + + return new VpeNormalMapRef { + TextureId = asset.Id, + Offset = material.GetTextureOffset(property), + Scale = material.GetTextureScale(property), + Strength = strength, + // The package carries plain-RGB source normals. The runtime cook re-packs them + // into HDRP's AG layout for its local cache; the uncached fallback path keeps + // the runtime repack behavior. + Packing = VpeNormalPackings.Rgb, + }; + } + + public VpeTextureRef CaptureTextureAssetRef(string assetPath, string colorSpace) + { + if (string.IsNullOrWhiteSpace(assetPath)) { + return null; + } + + var texture = AssetDatabase.LoadAssetAtPath(assetPath); + if (!texture) { + return null; + } + + var asset = GetOrCaptureAsset(texture, colorSpace); + if (asset == null) { + return null; + } + + return new VpeTextureRef { + TextureId = asset.Id, + Offset = Vector2.zero, + Scale = Vector2.one, + }; + } + + private VpeTexture GetOrCaptureAsset(Texture2D texture, string colorSpace) + { + if (_assetsByTexture.TryGetValue(texture, out var existing)) { + return existing; + } + + var requestedColorSpace = string.Equals(colorSpace, VpeColorSpaces.Linear, StringComparison.OrdinalIgnoreCase) + ? VpeColorSpaces.Linear + : VpeColorSpaces.SRgb; + var linear = requestedColorSpace == VpeColorSpaces.Linear; + + var id = BuildId(texture); + var asset = new VpeTexture { + Id = id, + ColorSpace = requestedColorSpace, + WrapMode = VpeMaterialEnums.ToWrapMode(texture.wrapMode), + FilterMode = VpeMaterialEnums.ToFilterMode(texture.filterMode), + AnisoLevel = Mathf.Max(1, texture.anisoLevel), + GenerateMipMaps = true, + SourceName = texture.name, + // Imported dimensions, i.e. the authored intent after any importer max-size + // clamp. The runtime cook downsizes larger source files to fit these. + Width = texture.width, + Height = texture.height, + }; + + // Ask the Editor TextureImporter for canonical sampling settings when available. The + // semantic slot already decided ColorSpace above (for example MaskMap/ThicknessMap + // must stay linear even if the source asset is imported as a regular sRGB texture), + // but wrap/filter/mip intent should still follow the authored asset settings. + var assetPath = AssetDatabase.GetAssetPath(texture); + if (!string.IsNullOrEmpty(assetPath) && AssetImporter.GetAtPath(assetPath) is TextureImporter importer) { + asset.GenerateMipMaps = importer.mipmapEnabled; + asset.AnisoLevel = Mathf.Max(asset.AnisoLevel, importer.anisoLevel); + asset.WrapMode = VpeMaterialEnums.ToWrapMode(importer.wrapMode); + asset.FilterMode = VpeMaterialEnums.ToFilterMode(importer.filterMode); + } + + // The package carries the lossless source layer: the original asset file bytes, + // untouched, whenever the source is a format the runtime cook can decode. Anything + // else (no source file, runtime-generated, exotic formats) falls back to a lossless + // PNG of the imported pixels. GPU-ready payloads are never written into the package; + // the player cooks and caches them locally. + // Determine the byte source on the main thread (asset path / mime / extension), but + // DON'T read the file here — record a deferred source so the heavy disk + PNG16→8 work + // runs in parallel off the main thread (see VpeTextureBlobLoader). Textures with no + // decodable source file fall back to a lossless PNG of the imported pixels, which needs + // a Unity readback and so is encoded inline, here, on the main thread (rare). + string fileAssetPath = null; + var fileIsPng = false; + byte[] inlineBytes = null; + string extension = null; + if (!string.IsNullOrEmpty(assetPath) && File.Exists(assetPath)) { + var sourceExtension = Path.GetExtension(assetPath); + if (string.Equals(sourceExtension, ".png", StringComparison.OrdinalIgnoreCase)) { + fileAssetPath = assetPath; + fileIsPng = true; + asset.MimeType = "image/png"; + extension = ".png"; + } else if (string.Equals(sourceExtension, ".jpg", StringComparison.OrdinalIgnoreCase) + || string.Equals(sourceExtension, ".jpeg", StringComparison.OrdinalIgnoreCase)) { + fileAssetPath = assetPath; + asset.MimeType = "image/jpeg"; + extension = ".jpg"; + } + } + if (fileAssetPath == null) { + if (!HdrpMaterialTextureEncoder.TryEncode(texture, linear, out inlineBytes)) { + return null; + } + asset.MimeType = "image/png"; + extension = ".png"; + } + asset.FileName = BuildFileName(id, extension); + + _assetsByTexture[texture] = asset; + _blobSources.Add(inlineBytes != null + ? VpeTextureBlobSource.FromBytes(asset.FileName, inlineBytes) + : VpeTextureBlobSource.FromFile(asset.FileName, fileAssetPath, fileIsPng)); + return asset; + } + + // Texture names are not unique across a table; two distinct textures sharing a name + // must still get distinct ids (and file names), otherwise one would shadow the other + // in the payload's texture table. + private string BuildId(Texture2D texture) + { + var raw = string.IsNullOrWhiteSpace(texture.name) ? "tex" : texture.name; + // Normalize so the id is stable across exports regardless of editor instance suffixes. + var id = VpeMaterialNameUtil.NormalizeTextureName(raw); + if (string.IsNullOrWhiteSpace(id)) { + id = "tex"; + } + if (_usedIds.Add(id)) { + return id; + } + var n = 2; + string candidate; + do { + candidate = $"{id}-{n++}"; + } while (!_usedIds.Add(candidate)); + return candidate; + } + + private string BuildFileName(string id, string extension) + { + var invalid = Path.GetInvalidFileNameChars(); + var chars = id.ToCharArray(); + for (var i = 0; i < chars.Length; i++) { + if (Array.IndexOf(invalid, chars[i]) >= 0 || chars[i] == '/' || chars[i] == '\\') { + chars[i] = '_'; + } + } + var stem = new string(chars); + var fileName = $"{stem}{extension}"; + // Sanitization can collapse two distinct ids onto the same file name. Reserve the name + // in _usedFileNames so the next texture can't claim it. + var n = 2; + while (!_usedFileNames.Add(fileName)) { + fileName = $"{stem}-{n++}{extension}"; + } + return fileName; + } + + private sealed class UnsupportedShaderUsage + { + public int Count; + public readonly List MaterialSamples = new(); + } + } + + private sealed class GltfExportMaterialScope : IDisposable + { + private readonly List _rendererStates = new(); + private readonly List _clonedMaterials = new(); + + public GltfExportMaterialScope(IEnumerable renderers) + { + if (renderers == null) { + return; + } + + var sanitizedBySource = new Dictionary(); + foreach (var renderer in renderers) { + if (!renderer) { + continue; + } + + var originalMaterials = renderer.sharedMaterials; + if (originalMaterials == null || originalMaterials.Length == 0) { + continue; + } + + Material[] sanitizedMaterials = null; + for (var index = 0; index < originalMaterials.Length; index++) { + var source = originalMaterials[index]; + if (!source) { + continue; + } + + if (!sanitizedBySource.TryGetValue(source, out var sanitized)) { + sanitized = CreateSanitizedGltfExportMaterial(source) ?? source; + sanitizedBySource[source] = sanitized; + if (sanitized != source) { + _clonedMaterials.Add(sanitized); + } + } + + if (sanitized == source) { + continue; + } + + sanitizedMaterials ??= (Material[])originalMaterials.Clone(); + sanitizedMaterials[index] = sanitized; + } + + if (sanitizedMaterials == null) { + continue; + } + + _rendererStates.Add(new RendererMaterialState(renderer, originalMaterials)); + renderer.sharedMaterials = sanitizedMaterials; + } + } + + public void Dispose() + { + foreach (var state in _rendererStates) { + if (state.Renderer) { + state.Renderer.sharedMaterials = state.Materials; + } + } + + foreach (var material in _clonedMaterials) { + if (material) { + UnityEngine.Object.DestroyImmediate(material); + } + } + + _rendererStates.Clear(); + _clonedMaterials.Clear(); + } + + private readonly struct RendererMaterialState + { + public readonly Renderer Renderer; + public readonly Material[] Materials; + + public RendererMaterialState(Renderer renderer, Material[] materials) + { + Renderer = renderer; + Materials = materials; + } + } + } + } + + [InitializeOnLoad] + internal static class HdrpMaterialTranslatorRegistration + { + static HdrpMaterialTranslatorRegistration() + { + VpeMaterialTranslator.Register(new Adapter()); + } + + private sealed class Adapter : IVpeMaterialTranslator, IVpeMaterialGltfExportPreprocessor + { + public VpeMaterialCaptureResult Capture(Transform tableRoot, IEnumerable renderers, Func nodeId) + { + return HdrpMaterialTranslator.Capture(tableRoot, renderers, nodeId); + } + + public IDisposable PrepareGltfExport(IEnumerable renderers) + { + return HdrpMaterialTranslator.PrepareGltfExport(renderers); + } + } + } +} diff --git a/Editor/HdrpMaterialTranslator.cs.meta b/Editor/HdrpMaterialTranslator.cs.meta new file mode 100644 index 0000000..c4d17e2 --- /dev/null +++ b/Editor/HdrpMaterialTranslator.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: dc65f8e8e9cd4229a47d69e9f5168cd5 diff --git a/Editor/HdrpPackageScreenshotEnvironmentProvider.cs b/Editor/HdrpPackageScreenshotEnvironmentProvider.cs new file mode 100644 index 0000000..91bedf4 --- /dev/null +++ b/Editor/HdrpPackageScreenshotEnvironmentProvider.cs @@ -0,0 +1,185 @@ +// Visual Pinball Engine +// Copyright (C) 2026 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; +using VisualPinball.Unity.Editor; + +namespace VisualPinball.Engine.Unity.Hdrp.Editor +{ + [InitializeOnLoad] + internal static class HdrpPackageScreenshotEnvironmentRegistration + { + static HdrpPackageScreenshotEnvironmentRegistration() + { + PackageScreenshotEnvironmentProvider.Register(new Provider()); + } + + private sealed class Provider : IPackageScreenshotEnvironmentProvider + { + public IDisposable CreateEnvironmentScope(Transform tableRoot, Cubemap hdriCubemap, float hdriExposure, bool includeDirectionalLight) + { + return new TemporaryHdrpEnvironmentScope(tableRoot, hdriCubemap, hdriExposure, includeDirectionalLight); + } + } + } + + internal sealed class TemporaryHdrpEnvironmentScope : IDisposable + { + private const string DirectionalLightPrefabPath = + "Packages/org.visualpinball.engine.unity.hdrp/Assets/EditorResources/Prefabs/Screenshot/DirectionalLight.prefab"; + + private readonly GameObject _temporaryDirectionalLight; + private readonly Light _originalSun; + private readonly List _disabledLights = new(); + private readonly GameObject _temporaryHdriVolume; + private readonly VolumeProfile _temporaryHdriProfile; + + public TemporaryHdrpEnvironmentScope(Transform tableRoot, Cubemap hdriCubemap, float hdriExposure, bool includeDirectionalLight) + { + _originalSun = RenderSettings.sun; + + if (includeDirectionalLight) { + _temporaryDirectionalLight = InstantiateDirectionalLight(); + if (_temporaryDirectionalLight) { + var light = _temporaryDirectionalLight.GetComponentInChildren(true); + if (light) { + RenderSettings.sun = light; + } + } + } + + DisableNonTableLights(tableRoot); + _temporaryHdriVolume = CreateTemporaryHdriOverride(hdriCubemap, hdriExposure, out _temporaryHdriProfile); + } + + public void Dispose() + { + for (var i = _disabledLights.Count - 1; i >= 0; i--) { + var disabledLightState = _disabledLights[i]; + if (disabledLightState.Light) { + disabledLightState.Light.enabled = disabledLightState.WasEnabled; + } + } + + RenderSettings.sun = _originalSun; + + if (_temporaryDirectionalLight) { + UnityEngine.Object.DestroyImmediate(_temporaryDirectionalLight); + } + + if (_temporaryHdriVolume) { + UnityEngine.Object.DestroyImmediate(_temporaryHdriVolume); + } + + if (_temporaryHdriProfile) { + UnityEngine.Object.DestroyImmediate(_temporaryHdriProfile); + } + } + + // Replace the scene's HDRI sky with the one configured on the table (plus + // its exposure) for the duration of the screenshot, via a top-priority + // global volume that only overrides the HDRI texture and exposure. + private static GameObject CreateTemporaryHdriOverride(Cubemap hdriCubemap, float hdriExposure, out VolumeProfile profile) + { + profile = null; + if (!hdriCubemap) { + return null; + } + + var go = new GameObject("Package Screenshot HDRI") { + hideFlags = HideFlags.HideAndDontSave + }; + + var volume = go.AddComponent(); + volume.isGlobal = true; + // Higher than any scene volume so this HDRI always wins. + volume.priority = float.MaxValue; + + profile = ScriptableObject.CreateInstance(); + profile.hideFlags = HideFlags.HideAndDontSave; + + // overrides:false so only the parameters we touch below are applied; + // rotation and everything else still come from the scene's sky volume. + var sky = profile.Add(false); + sky.hdriSky.overrideState = true; + sky.hdriSky.value = hdriCubemap; + sky.skyIntensityMode.overrideState = true; + sky.skyIntensityMode.value = SkyIntensityMode.Exposure; + sky.exposure.overrideState = true; + sky.exposure.value = hdriExposure; + + volume.sharedProfile = profile; + return go; + } + + // The screenshot directional light is a fully authored prefab (HDRP light + // data, intensity, colour temperature, flares, shadow resolution, …). Using + // it directly keeps screenshot lighting coherent across tables and avoids + // re-deriving HDRP light settings in code. + private static GameObject InstantiateDirectionalLight() + { + var prefab = AssetDatabase.LoadAssetAtPath(DirectionalLightPrefabPath); + if (!prefab) { + Debug.LogError($"Could not find screenshot directional light prefab at path: {DirectionalLightPrefabPath}"); + return null; + } + + var instance = UnityEngine.Object.Instantiate(prefab); + instance.name = "Package Screenshot Directional Light"; + instance.hideFlags = HideFlags.HideAndDontSave; + return instance; + } + + private void DisableNonTableLights(Transform tableRoot) + { + var lights = UnityEngine.Object.FindObjectsOfType(true); + foreach (var light in lights) { + if (!light) { + continue; + } + if (_temporaryDirectionalLight && light.transform.IsChildOf(_temporaryDirectionalLight.transform)) { + continue; + } + if (!light.gameObject.scene.IsValid() || light.hideFlags != HideFlags.None) { + continue; + } + if (tableRoot && light.transform.IsChildOf(tableRoot)) { + continue; + } + + _disabledLights.Add(new DisabledLightState(light, light.enabled)); + light.enabled = false; + } + } + + private readonly struct DisabledLightState + { + public readonly Light Light; + public readonly bool WasEnabled; + + public DisabledLightState(Light light, bool wasEnabled) + { + Light = light; + WasEnabled = wasEnabled; + } + } + } +} diff --git a/Editor/HdrpPackageScreenshotEnvironmentProvider.cs.meta b/Editor/HdrpPackageScreenshotEnvironmentProvider.cs.meta new file mode 100644 index 0000000..f0b310b --- /dev/null +++ b/Editor/HdrpPackageScreenshotEnvironmentProvider.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e6b9513c9b3a37f4da512c709d15e7a8 \ No newline at end of file diff --git a/Editor/VisualPinball.Engine.Unity.Hdrp.Editor.asmdef b/Editor/VisualPinball.Engine.Unity.Hdrp.Editor.asmdef index f61c80f..53ad426 100644 --- a/Editor/VisualPinball.Engine.Unity.Hdrp.Editor.asmdef +++ b/Editor/VisualPinball.Engine.Unity.Hdrp.Editor.asmdef @@ -7,9 +7,11 @@ "VisualPinball.Unity", "VisualPinball.Unity.Patcher", "VisualPinball.Unity.AssetLibrary", + "Unity.RenderPipelines.Core.Runtime", "Unity.RenderPipelines.HighDefinition.Runtime", "Unity.RenderPipelines.HighDefinition.Config.Runtime", - "VisualPinball.Unity.Editor" + "VisualPinball.Unity.Editor", + "VisualPinball.Engine.Unity.Hdrp" ], "includePlatforms": [ "Editor" ], "excludePlatforms": [], diff --git a/LookDev~/Assets/Materials/Wood, Kicker, 1.25in.mat.meta b/LookDev~/Assets/Materials/Wood, Kicker, 1.25in.mat.meta deleted file mode 100644 index bc62dd4..0000000 --- a/LookDev~/Assets/Materials/Wood, Kicker, 1.25in.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e128779e95b68ea49ba4f801bf429552 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Materials/Wood, Solid, Large.mat.meta b/LookDev~/Assets/Materials/Wood, Solid, Large.mat.meta deleted file mode 100644 index 9a2378c..0000000 --- a/LookDev~/Assets/Materials/Wood, Solid, Large.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 27ca64b434ddfca45b2637af47b5a1d3 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Materials/Wood, Solid.mat.meta b/LookDev~/Assets/Materials/Wood, Solid.mat.meta deleted file mode 100644 index 4e07475..0000000 --- a/LookDev~/Assets/Materials/Wood, Solid.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 28c77fa3637dfcb47b294ac0d6ff6fc6 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Materials/Wood, Target, 0.65in.mat b/LookDev~/Assets/Materials/Wood, Target, 0.65in.mat deleted file mode 100644 index d6b39e2..0000000 --- a/LookDev~/Assets/Materials/Wood, Target, 0.65in.mat +++ /dev/null @@ -1,280 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-5356917893099157034 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 13 - hdPluginSubTargetMaterialVersions: - m_Keys: [] - m_Values: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Wood, Target, 0.65in - m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _DISABLE_SSR_TRANSPARENT - - _MASKMAP - - _NORMALMAP - - _NORMALMAP_TANGENT_SPACE - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2225 - stringTagMap: {} - disabledShaderPasses: - - TransparentDepthPrepass - - TransparentDepthPostpass - - TransparentBackface - - RayTracingPrepass - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _AnisotropyMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseColorMap: - m_Texture: {fileID: 2800000, guid: da44eec3193d78d4bae09874fa950a63, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BentNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BentNormalMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _CoatMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissiveColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _HeightMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescenceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescenceThicknessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: da44eec3193d78d4bae09874fa950a63, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MaskMap: - m_Texture: {fileID: 2800000, guid: 38b1c433d26696541b00be94ace49669, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMap: - m_Texture: {fileID: 2800000, guid: bf3cb7ae71af26e48b13959144ac7303, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecularColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SubsurfaceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TangentMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TangentMapOS: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ThicknessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TransmissionMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TransmittanceColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AORemapMax: 1 - - _AORemapMin: 0 - - _ATDistance: 1 - - _AddPrecomputedVelocity: 0 - - _AlbedoAffectEmissive: 0 - - _AlphaCutoff: 0.5 - - _AlphaCutoffEnable: 0 - - _AlphaCutoffPostpass: 0.5 - - _AlphaCutoffPrepass: 0.5 - - _AlphaCutoffShadow: 0.5 - - _AlphaDstBlend: 0 - - _AlphaRemapMax: 1 - - _AlphaRemapMin: 0 - - _AlphaSrcBlend: 1 - - _AlphaToMask: 0 - - _AlphaToMaskInspectorValue: 0 - - _Anisotropy: 0 - - _BlendMode: 0 - - _CoatMask: 0 - - _CullMode: 2 - - _CullModeForward: 2 - - _Cutoff: 0.5 - - _DepthOffsetEnable: 0 - - _DetailAlbedoScale: 1 - - _DetailNormalScale: 1 - - _DetailSmoothnessScale: 1 - - _DiffusionProfile: 0 - - _DiffusionProfileHash: 0 - - _DisplacementLockObjectScale: 1 - - _DisplacementLockTilingScale: 1 - - _DisplacementMode: 0 - - _DoubleSidedEnable: 0 - - _DoubleSidedGIMode: 0 - - _DoubleSidedNormalMode: 1 - - _DstBlend: 0 - - _EmissiveColorMode: 1 - - _EmissiveExposureWeight: 1 - - _EmissiveIntensity: 1 - - _EmissiveIntensityUnit: 0 - - _EnableBlendModePreserveSpecularLighting: 1 - - _EnableFogOnTransparent: 1 - - _EnableGeometricSpecularAA: 0 - - _EnergyConservingSpecularColor: 1 - - _HeightAmplitude: 0.02 - - _HeightCenter: 0.5 - - _HeightMapParametrization: 0 - - _HeightMax: 1 - - _HeightMin: -1 - - _HeightOffset: 0 - - _HeightPoMAmplitude: 2 - - _HeightTessAmplitude: 2 - - _HeightTessCenter: 0.5 - - _InvTilingScale: 1 - - _Ior: 1.5 - - _IridescenceMask: 1 - - _IridescenceThickness: 1 - - _LinkDetailsWithBase: 1 - - _MaterialID: 1 - - _Metallic: 0 - - _MetallicRemapMax: 1 - - _MetallicRemapMin: 0 - - _NormalMapSpace: 0 - - _NormalScale: 1 - - _ObjectSpaceUVMapping: 0 - - _ObjectSpaceUVMappingEmissive: 0 - - _OpaqueCullMode: 2 - - _PPDLodThreshold: 5 - - _PPDMaxSamples: 15 - - _PPDMinSamples: 5 - - _PPDPrimitiveLength: 1 - - _PPDPrimitiveWidth: 1 - - _RayTracing: 0 - - _ReceivesSSR: 1 - - _ReceivesSSRTransparent: 0 - - _RefractionModel: 0 - - _Smoothness: 0.5 - - _SmoothnessRemapMax: 1 - - _SmoothnessRemapMin: 0 - - _SpecularAAScreenSpaceVariance: 0.1 - - _SpecularAAThreshold: 0.2 - - _SpecularOcclusionMode: 1 - - _SrcBlend: 1 - - _StencilRef: 0 - - _StencilRefDepth: 8 - - _StencilRefGBuffer: 10 - - _StencilRefMV: 40 - - _StencilWriteMask: 6 - - _StencilWriteMaskDepth: 9 - - _StencilWriteMaskGBuffer: 15 - - _StencilWriteMaskMV: 41 - - _SubsurfaceMask: 1 - - _SupportDecals: 1 - - _SurfaceType: 0 - - _TexWorldScale: 1 - - _TexWorldScaleEmissive: 1 - - _Thickness: 1 - - _TransmissionEnable: 1 - - _TransmissionMask: 1 - - _TransparentBackfaceEnable: 0 - - _TransparentCullMode: 2 - - _TransparentDepthPostpassEnable: 0 - - _TransparentDepthPrepassEnable: 0 - - _TransparentSortPriority: 0 - - _TransparentWritingMotionVec: 0 - - _TransparentZWrite: 0 - - _UVBase: 0 - - _UVDetail: 0 - - _UVEmissive: 0 - - _UseEmissiveIntensity: 0 - - _UseShadowThreshold: 0 - - _ZTestDepthEqualForOpaque: 3 - - _ZTestGBuffer: 4 - - _ZTestTransparent: 4 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} - - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} - - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} - - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} - - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} - - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} - - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} - - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} - - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} - - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} - - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} - - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} - - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} - m_BuildTextureStacks: [] diff --git a/LookDev~/Assets/Materials/Wood, Target, 0.65in.mat.meta b/LookDev~/Assets/Materials/Wood, Target, 0.65in.mat.meta deleted file mode 100644 index 4672d8b..0000000 --- a/LookDev~/Assets/Materials/Wood, Target, 0.65in.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 42fc0f190ad9a8d46805325d9cda01cb -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Models/Playfield - Kicker 1.25in, Beveled.fbx b/LookDev~/Assets/Models/Playfield - Kicker 1.25in, Beveled.fbx deleted file mode 100644 index 88afde9..0000000 Binary files a/LookDev~/Assets/Models/Playfield - Kicker 1.25in, Beveled.fbx and /dev/null differ diff --git a/LookDev~/Assets/Models/Playfield - Kicker 1.25in, Beveled.fbx.meta b/LookDev~/Assets/Models/Playfield - Kicker 1.25in, Beveled.fbx.meta deleted file mode 100644 index c341f76..0000000 --- a/LookDev~/Assets/Models/Playfield - Kicker 1.25in, Beveled.fbx.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: 4e1cb61e08166fb44a520188edaae4cc -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 1 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Models/Playfield - Kicker 1.25in.fbx b/LookDev~/Assets/Models/Playfield - Kicker 1.25in.fbx deleted file mode 100644 index b10ea97..0000000 Binary files a/LookDev~/Assets/Models/Playfield - Kicker 1.25in.fbx and /dev/null differ diff --git a/LookDev~/Assets/Models/Playfield - Kicker 1.25in.fbx.meta b/LookDev~/Assets/Models/Playfield - Kicker 1.25in.fbx.meta deleted file mode 100644 index e6b9699..0000000 --- a/LookDev~/Assets/Models/Playfield - Kicker 1.25in.fbx.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: 96de1d238a8ec704cbbb7fb3c47f4738 -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 1 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Models/Playfield - Solid, Large.fbx b/LookDev~/Assets/Models/Playfield - Solid, Large.fbx deleted file mode 100644 index 81c4ad1..0000000 Binary files a/LookDev~/Assets/Models/Playfield - Solid, Large.fbx and /dev/null differ diff --git a/LookDev~/Assets/Models/Playfield - Solid, Large.fbx.meta b/LookDev~/Assets/Models/Playfield - Solid, Large.fbx.meta deleted file mode 100644 index d64f9f6..0000000 --- a/LookDev~/Assets/Models/Playfield - Solid, Large.fbx.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: a5738ce28c7206b4eb4ecf40f2756059 -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 1 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Models/Playfield - Solid.fbx b/LookDev~/Assets/Models/Playfield - Solid.fbx deleted file mode 100644 index fdc268e..0000000 Binary files a/LookDev~/Assets/Models/Playfield - Solid.fbx and /dev/null differ diff --git a/LookDev~/Assets/Models/Playfield - Solid.fbx.meta b/LookDev~/Assets/Models/Playfield - Solid.fbx.meta deleted file mode 100644 index 71a9f3b..0000000 --- a/LookDev~/Assets/Models/Playfield - Solid.fbx.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: 461e8c0257531fc4bad55ff32513e55d -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 1 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Models/Playfield - Target 0.65in.fbx b/LookDev~/Assets/Models/Playfield - Target 0.65in.fbx deleted file mode 100644 index b1bb2f2..0000000 Binary files a/LookDev~/Assets/Models/Playfield - Target 0.65in.fbx and /dev/null differ diff --git a/LookDev~/Assets/Models/Playfield - Target 0.65in.fbx.meta b/LookDev~/Assets/Models/Playfield - Target 0.65in.fbx.meta deleted file mode 100644 index e5101d7..0000000 --- a/LookDev~/Assets/Models/Playfield - Target 0.65in.fbx.meta +++ /dev/null @@ -1,109 +0,0 @@ -fileFormatVersion: 2 -guid: eee35afb9763a474183f8722e612476d -ModelImporter: - serializedVersion: 22200 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 0 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importPhysicalCameras: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - strictVertexDataChecks: 0 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - importBlendShapeDeformPercent: 1 - remapMaterialsIfMaterialImportModeIsNone: 0 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_BaseMap.png b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_BaseMap.png deleted file mode 100644 index 07b0675..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_BaseMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_BaseMap.png.meta b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_BaseMap.png.meta deleted file mode 100644 index 3459970..0000000 --- a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_BaseMap.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: eb8cf012b9427b34a830f90da56f45d6 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_MaskMap.png b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_MaskMap.png deleted file mode 100644 index 37e60e0..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_MaskMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_MaskMap.png.meta b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_MaskMap.png.meta deleted file mode 100644 index e8788b1..0000000 --- a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_MaskMap.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: 5ffdc14fe5adab344b2583a2416362da -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: 4096 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - maxTextureSize: 4096 - 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/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_Normal.png b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_Normal.png deleted file mode 100644 index 756d8ee..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_Normal.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_Normal.png.meta b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_Normal.png.meta deleted file mode 100644 index b71518f..0000000 --- a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in, Beveled_Normal.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: f8f4653f2224e064393037b8e8f782d8 -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: 4096 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 2 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - maxTextureSize: 4096 - 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/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_BaseMap.png b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_BaseMap.png deleted file mode 100644 index 728f093..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_BaseMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_BaseMap.png.meta b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_BaseMap.png.meta deleted file mode 100644 index 4e2fb94..0000000 --- a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_BaseMap.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: c5c2d85d067c694459c54c88cd46fdd3 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 8192 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_MaskMap.png b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_MaskMap.png deleted file mode 100644 index bff2962..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_MaskMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_MaskMap.png.meta b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_MaskMap.png.meta deleted file mode 100644 index 12bc09a..0000000 --- a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_MaskMap.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: c5153c74c8e42064e87cd9563d600ac0 -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: 4096 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - maxTextureSize: 4096 - 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/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_Normal.png b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_Normal.png deleted file mode 100644 index f6c376c..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_Normal.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_Normal.png.meta b/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_Normal.png.meta deleted file mode 100644 index 1e8bd6c..0000000 --- a/LookDev~/Assets/Textures/Playfield - Kicker 1.25in_Normal.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: d5c67f78cccff6646b46f7aaecbd9c78 -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: 4096 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 2 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - maxTextureSize: 4096 - 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/LookDev~/Assets/Textures/Playfield - Solid, Large_BaseMap.png b/LookDev~/Assets/Textures/Playfield - Solid, Large_BaseMap.png deleted file mode 100644 index ee8202b..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Solid, Large_BaseMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Solid, Large_BaseMap.png.meta b/LookDev~/Assets/Textures/Playfield - Solid, Large_BaseMap.png.meta deleted file mode 100644 index 5f3a9bd..0000000 --- a/LookDev~/Assets/Textures/Playfield - Solid, Large_BaseMap.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: 92c1b55026180b24690d9e7820598e39 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Textures/Playfield - Solid, Large_MaskMap.png b/LookDev~/Assets/Textures/Playfield - Solid, Large_MaskMap.png deleted file mode 100644 index d488baa..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Solid, Large_MaskMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Solid, Large_MaskMap.png.meta b/LookDev~/Assets/Textures/Playfield - Solid, Large_MaskMap.png.meta deleted file mode 100644 index bfbc43b..0000000 --- a/LookDev~/Assets/Textures/Playfield - Solid, Large_MaskMap.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: 5a9a1a990e0b0f440822133e934985fc -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: 4096 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - maxTextureSize: 4096 - 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/LookDev~/Assets/Textures/Playfield - Solid, Large_Normal.png b/LookDev~/Assets/Textures/Playfield - Solid, Large_Normal.png deleted file mode 100644 index 41fbe26..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Solid, Large_Normal.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Solid, Large_Normal.png.meta b/LookDev~/Assets/Textures/Playfield - Solid, Large_Normal.png.meta deleted file mode 100644 index 05b2a1a..0000000 --- a/LookDev~/Assets/Textures/Playfield - Solid, Large_Normal.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: c2e1e5d52b47c8b4bbb7748b800b81c8 -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: 4096 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 2 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - maxTextureSize: 4096 - 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/LookDev~/Assets/Textures/Playfield - Solid_BaseMap.png b/LookDev~/Assets/Textures/Playfield - Solid_BaseMap.png deleted file mode 100644 index 424ef5f..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Solid_BaseMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Solid_BaseMap.png.meta b/LookDev~/Assets/Textures/Playfield - Solid_BaseMap.png.meta deleted file mode 100644 index 53f10ff..0000000 --- a/LookDev~/Assets/Textures/Playfield - Solid_BaseMap.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: 537723115918bd94cbaa7f3265c2f419 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Textures/Playfield - Solid_MaskMap.png b/LookDev~/Assets/Textures/Playfield - Solid_MaskMap.png deleted file mode 100644 index 0f6787b..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Solid_MaskMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Solid_MaskMap.png.meta b/LookDev~/Assets/Textures/Playfield - Solid_MaskMap.png.meta deleted file mode 100644 index 7e68d1e..0000000 --- a/LookDev~/Assets/Textures/Playfield - Solid_MaskMap.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: e54c329f93b39ca40ba0fe6396714c8f -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: 4096 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - maxTextureSize: 4096 - 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/LookDev~/Assets/Textures/Playfield - Solid_Normal.png b/LookDev~/Assets/Textures/Playfield - Solid_Normal.png deleted file mode 100644 index 6a45824..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Solid_Normal.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Solid_Normal.png.meta b/LookDev~/Assets/Textures/Playfield - Solid_Normal.png.meta deleted file mode 100644 index d064867..0000000 --- a/LookDev~/Assets/Textures/Playfield - Solid_Normal.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: 982896cd83f4ce0449aa832d6a49be9c -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: 4096 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - 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: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 2 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 4096 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - maxTextureSize: 4096 - 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/LookDev~/Assets/Textures/Playfield - Target 0.65in - BaseMap.png b/LookDev~/Assets/Textures/Playfield - Target 0.65in - BaseMap.png deleted file mode 100644 index 9ffe361..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Target 0.65in - BaseMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Target 0.65in - BaseMap.png.meta b/LookDev~/Assets/Textures/Playfield - Target 0.65in - BaseMap.png.meta deleted file mode 100644 index b52f5ab..0000000 --- a/LookDev~/Assets/Textures/Playfield - Target 0.65in - BaseMap.png.meta +++ /dev/null @@ -1,127 +0,0 @@ -fileFormatVersion: 2 -guid: da44eec3193d78d4bae09874fa950a63 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 12 - 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: 1 - 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: 0 - platformSettings: - - serializedVersion: 3 - 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 - - serializedVersion: 3 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 3 - buildTarget: Server - 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: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/LookDev~/Assets/Textures/Playfield - Target 0.65in - MaskMap.png b/LookDev~/Assets/Textures/Playfield - Target 0.65in - MaskMap.png deleted file mode 100644 index f09d5ac..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Target 0.65in - MaskMap.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Target 0.65in - MaskMap.png.meta b/LookDev~/Assets/Textures/Playfield - Target 0.65in - MaskMap.png.meta deleted file mode 100644 index b48a9b2..0000000 --- a/LookDev~/Assets/Textures/Playfield - Target 0.65in - MaskMap.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: 38b1c433d26696541b00be94ace49669 -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: 1 - 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: 0 - 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 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - 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/LookDev~/Assets/Textures/Playfield - Target 0.65in - Normal.png b/LookDev~/Assets/Textures/Playfield - Target 0.65in - Normal.png deleted file mode 100644 index 6999854..0000000 Binary files a/LookDev~/Assets/Textures/Playfield - Target 0.65in - Normal.png and /dev/null differ diff --git a/LookDev~/Assets/Textures/Playfield - Target 0.65in - Normal.png.meta b/LookDev~/Assets/Textures/Playfield - Target 0.65in - Normal.png.meta deleted file mode 100644 index 4a56780..0000000 --- a/LookDev~/Assets/Textures/Playfield - Target 0.65in - Normal.png.meta +++ /dev/null @@ -1,130 +0,0 @@ -fileFormatVersion: 2 -guid: bf3cb7ae71af26e48b13959144ac7303 -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: 1 - 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: 0 - 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 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Server - 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/LookDev~/Assets/UniversalRenderPipelineGlobalSettings.asset b/LookDev~/Assets/UniversalRenderPipelineGlobalSettings.asset index d6e4421..4d06e15 100644 --- a/LookDev~/Assets/UniversalRenderPipelineGlobalSettings.asset +++ b/LookDev~/Assets/UniversalRenderPipelineGlobalSettings.asset @@ -55,9 +55,19 @@ MonoBehaviour: - rid: 5393441150654742743 - rid: 5393441150654742744 - rid: 5393441150654742745 + - rid: 7334442343296663557 + - rid: 7334442343296663558 + - rid: 7334442343296663559 + - rid: 7334442343296663560 + - rid: 7334442343296663561 + - rid: 7334442343296663562 + - rid: 7334442343296663563 + - rid: 7334442343296663564 + - rid: 7334442343296663565 + - rid: 7334442343296663566 m_RuntimeSettings: m_List: [] - m_AssetVersion: 8 + m_AssetVersion: 9 m_ObsoleteDefaultVolumeProfile: {fileID: 0} m_RenderingLayerNames: - Default @@ -135,9 +145,6 @@ MonoBehaviour: m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, type: 3} m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: 5c81372d981403744adbdda4433c9c11, type: 3} m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 80aa867ac363ac043847b06ad71604cd, type: 3} - m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3} - m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3} - m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3} m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, type: 3} m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, type: 3} m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, type: 3} @@ -153,6 +160,8 @@ MonoBehaviour: m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} m_CameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, type: 3} m_StencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + m_ClusterDeferred: {fileID: 4800000, guid: 222cce62363a44a380c36bf03b392608, type: 3} + m_StencilDitherMaskSeedPS: {fileID: 4800000, guid: 8c3ee818f2efa514c889881ccb2e95a2, type: 3} m_DBufferClear: {fileID: 4800000, guid: f056d8bd2a1c7e44e9729144b4c70395, type: 3} - rid: 5393441150654742734 type: {class: URPShaderStrippingSetting, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} @@ -171,11 +180,11 @@ MonoBehaviour: m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3} m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3} m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3} - m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} + m_DefaultMesh2DLitMaterial: {fileID: 2100000, guid: 9452ae1262a74094f8a68013fbcd1834, type: 2} - rid: 5393441150654742736 type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime} data: @@ -255,3 +264,117 @@ MonoBehaviour: m_setupCS: {fileID: 7200000, guid: 33be2e9a5506b2843bdb2bdff9cad5e1, type: 3} m_preTaaCS: {fileID: 7200000, guid: a679dba8ec4d9ce45884a270b0e22dda, type: 3} m_taaCS: {fileID: 7200000, guid: 3923900e2b41b5e47bc25bfdcbcdc9e6, type: 3} + - rid: 7334442343296663557 + type: {class: RayTracingRenderPipelineResources, ns: UnityEngine.Rendering.UnifiedRayTracing, asm: Unity.UnifiedRayTracing.Runtime} + data: + m_Version: 1 + m_GeometryPoolKernels: {fileID: 7200000, guid: 98e3d58cae7210c4786f67f504c9e899, type: 3} + m_CopyBuffer: {fileID: 7200000, guid: 1b95b5dcf48d1914c9e1e7405c7660e3, type: 3} + m_CopyPositions: {fileID: 7200000, guid: 1ad53a96b58d3c3488dde4f14db1aaeb, type: 3} + m_BitHistogram: {fileID: 7200000, guid: 8670f7ce4b60cef43bed36148aa1b0a2, type: 3} + m_BlockReducePart: {fileID: 7200000, guid: 4e034cc8ea2635c4e9f063e5ddc7ea7a, type: 3} + m_BlockScan: {fileID: 7200000, guid: 4d6d5de35fa45ef4a92119397a045cc9, type: 3} + m_BuildHlbvh: {fileID: 7200000, guid: 2d70cd6be91bd7843a39a54b51c15b13, type: 3} + m_RestructureBvh: {fileID: 7200000, guid: 56641cb88dcb31a4398a4997ef7a7a8c, type: 3} + m_Scatter: {fileID: 7200000, guid: a2eaeefdac4637a44b734e85b7be9186, type: 3} + - rid: 7334442343296663558 + type: {class: ScreenSpaceAmbientOcclusionPersistentResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3} + m_Version: 0 + - rid: 7334442343296663559 + type: {class: PostProcessData/ShaderResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + stopNanPS: {fileID: 4800000, guid: 1121bb4e615ca3c48b214e79e841e823, type: 3} + subpixelMorphologicalAntialiasingPS: {fileID: 4800000, guid: 63eaba0ebfb82cc43bde059b4a8c65f6, type: 3} + gaussianDepthOfFieldPS: {fileID: 4800000, guid: 5e7134d6e63e0bc47a1dd2669cedb379, type: 3} + bokehDepthOfFieldPS: {fileID: 4800000, guid: 2aed67ad60045d54ba3a00c91e2d2631, type: 3} + cameraMotionBlurPS: {fileID: 4800000, guid: 1edcd131364091c46a17cbff0b1de97a, type: 3} + paniniProjectionPS: {fileID: 4800000, guid: a15b78cf8ca26ca4fb2090293153c62c, type: 3} + lutBuilderLdrPS: {fileID: 4800000, guid: 65df88701913c224d95fc554db28381a, type: 3} + lutBuilderHdrPS: {fileID: 4800000, guid: ec9fec698a3456d4fb18cf8bacb7a2bc, type: 3} + bloomPS: {fileID: 4800000, guid: 5f1864addb451f54bae8c86d230f736e, type: 3} + temporalAntialiasingPS: {fileID: 4800000, guid: 9c70c1a35ff15f340b38ea84842358bf, type: 3} + LensFlareDataDrivenPS: {fileID: 4800000, guid: 6cda457ac28612740adb23da5d39ea92, type: 3} + LensFlareScreenSpacePS: {fileID: 4800000, guid: 701880fecb344ea4c9cd0db3407ab287, type: 3} + scalingSetupPS: {fileID: 4800000, guid: e8ee25143a34b8c4388709ea947055d1, type: 3} + easuPS: {fileID: 4800000, guid: 562b7ae4f629f144aa97780546fce7c6, type: 3} + uberPostPS: {fileID: 4800000, guid: e7857e9d0c934dc4f83f270f8447b006, type: 3} + finalPostPassPS: {fileID: 4800000, guid: c49e63ed1bbcb334780a3bd19dfed403, type: 3} + m_ShaderResourcesVersion: 0 + - rid: 7334442343296663560 + type: {class: PostProcessData/TextureResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + blueNoise16LTex: [] + filmGrainTex: + - {fileID: 2800000, guid: 654c582f7f8a5a14dbd7d119cbde215d, type: 3} + - {fileID: 2800000, guid: dd77ffd079630404e879388999033049, type: 3} + - {fileID: 2800000, guid: 1097e90e1306e26439701489f391a6c0, type: 3} + - {fileID: 2800000, guid: f0b67500f7fad3b4c9f2b13e8f41ba6e, type: 3} + - {fileID: 2800000, guid: 9930fb4528622b34687b00bbe6883de7, type: 3} + - {fileID: 2800000, guid: bd9e8c758250ef449a4b4bfaad7a2133, type: 3} + - {fileID: 2800000, guid: 510a2f57334933e4a8dbabe4c30204e4, type: 3} + - {fileID: 2800000, guid: b4db8180660810945bf8d55ab44352ad, type: 3} + - {fileID: 2800000, guid: fd2fd78b392986e42a12df2177d3b89c, type: 3} + - {fileID: 2800000, guid: 5cdee82a77d13994f83b8fdabed7c301, type: 3} + smaaAreaTex: {fileID: 2800000, guid: d1f1048909d55cd4fa1126ab998f617e, type: 3} + smaaSearchTex: {fileID: 2800000, guid: 51eee22c2a633ef4aada830eed57c3fd, type: 3} + m_TexturesResourcesVersion: 0 + - rid: 7334442343296663561 + type: {class: ScreenSpaceAmbientOcclusionDynamicResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_BlueNoise256Textures: + - {fileID: 2800000, guid: 36f118343fc974119bee3d09e2111500, type: 3} + - {fileID: 2800000, guid: 4b7b083e6b6734e8bb2838b0b50a0bc8, type: 3} + - {fileID: 2800000, guid: c06cc21c692f94f5fb5206247191eeee, type: 3} + - {fileID: 2800000, guid: cb76dd40fa7654f9587f6a344f125c9a, type: 3} + - {fileID: 2800000, guid: e32226222ff144b24bf3a5a451de54bc, type: 3} + - {fileID: 2800000, guid: 3302065f671a8450b82c9ddf07426f3a, type: 3} + - {fileID: 2800000, guid: 56a77a3e8d64f47b6afe9e3c95cb57d5, type: 3} + m_Version: 0 + - rid: 7334442343296663562 + type: {class: URPReflectionProbeSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Universal.Runtime} + data: + version: 1 + useReflectionProbeRotation: 1 + - rid: 7334442343296663563 + type: {class: OnTilePostProcessResource, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_UberPostShader: {fileID: 4800000, guid: fe4f13c1004a07d4ea1e30bfd0326d9e, type: 3} + - rid: 7334442343296663564 + type: {class: VrsRenderPipelineRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_TextureComputeShader: {fileID: 7200000, guid: cacb30de6c40c7444bbc78cb0a81fd2a, type: 3} + m_VisualizationShader: {fileID: 4800000, guid: 620b55b8040a88d468e94abe55bed5ba, type: 3} + m_VisualizationLookupTable: + m_Data: + - {r: 0.785, g: 0.23, b: 0.2, a: 1} + - {r: 1, g: 0.8, b: 0.8, a: 1} + - {r: 0.4, g: 0.2, b: 0.2, a: 1} + - {r: 0.51, g: 0.8, b: 0.6, a: 1} + - {r: 0.6, g: 0.8, b: 1, a: 1} + - {r: 0.2, g: 0.4, b: 0.6, a: 1} + - {r: 0.8, g: 1, b: 0.8, a: 1} + - {r: 0.2, g: 0.4, b: 0.2, a: 1} + - {r: 0.125, g: 0.22, b: 0.36, a: 1} + m_ConversionLookupTable: + m_Data: + - {r: 0.785, g: 0.23, b: 0.2, a: 1} + - {r: 1, g: 0.8, b: 0.8, a: 1} + - {r: 0.4, g: 0.2, b: 0.2, a: 1} + - {r: 0.51, g: 0.8, b: 0.6, a: 1} + - {r: 0.6, g: 0.8, b: 1, a: 1} + - {r: 0.2, g: 0.4, b: 0.6, a: 1} + - {r: 0.8, g: 1, b: 0.8, a: 1} + - {r: 0.2, g: 0.4, b: 0.2, a: 1} + - {r: 0.125, g: 0.22, b: 0.36, a: 1} + - rid: 7334442343296663565 + type: {class: RenderingDebuggerRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + - rid: 7334442343296663566 + type: {class: LightmapSamplingSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + m_UseBicubicLightmapSampling: 0 diff --git a/LookDev~/ProjectSettings/ProjectVersion.txt b/LookDev~/ProjectSettings/ProjectVersion.txt index 92cbd95..a4b5984 100644 --- a/LookDev~/ProjectSettings/ProjectVersion.txt +++ b/LookDev~/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 6000.0.42f1 -m_EditorVersionWithRevision: 6000.0.42f1 (feb9a7235030) +m_EditorVersion: 6000.3.6f1 +m_EditorVersionWithRevision: 6000.3.6f1 (bbb010bdb8a3) diff --git a/Runtime/HdrpGltfMaterialGenerator.cs b/Runtime/HdrpGltfMaterialGenerator.cs new file mode 100644 index 0000000..226f277 --- /dev/null +++ b/Runtime/HdrpGltfMaterialGenerator.cs @@ -0,0 +1,73 @@ +// Visual Pinball Engine +// Copyright (C) 2026 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// ReSharper disable CheckNamespace + +using GLTFast.Materials; +using UnityEngine; +using VisualPinball.Unity; + +namespace VisualPinball.Engine.Unity.Hdrp +{ + public sealed class HdrpGltfMaterialGenerator : HighDefinitionRPMaterialGenerator + { + private static Shader _hdrpLit; + + private static Shader HdrpLit + { + get + { + if (!_hdrpLit) { + _hdrpLit = Shader.Find("HDRP/Lit"); + } + if (!_hdrpLit) { + // Shader.Find can return null on very early calls (gltFast init, before HDRP/Lit + // is registered). Fall back to the shipped opaque template's shader — also + // HDRP/Lit and guaranteed in the build — so we never drop through to gltFast's + // (stripped) shadergraph and log a spurious "shader missing" warning. + var template = UnityEngine.Resources.Load("Materials/VpeLitOpaqueTemplate"); + if (template) { + _hdrpLit = template.shader; + } + } + return _hdrpLit; + } + } + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + private static void Register() + { + RuntimeGltfMaterialGenerator.Factory = () => new HdrpGltfMaterialGenerator(); + } + + // gltFast's own glTF HDRP shadergraphs (glTF-pbrMetallicRoughness[StackLit]) ship broken + // ray-tracing passes that fail to compile in player builds, so we keep them out of the build. + // Every imported glTF material is replaced at runtime by HdrpMaterialResolver (matched by + // name), so what gltFast builds here is a transient placeholder that only needs to be a + // valid, correctly-named HDRP material. Use stock HDRP/Lit; no gltFast shadergraph required. + protected override Shader GetMetallicShader(MetallicShaderFeatures features) + { + return HdrpLit ? HdrpLit : base.GetMetallicShader(features); + } + + protected override Material GenerateDefaultMaterial(bool pointsSupport = false) + { + return HdrpLit + ? new Material(HdrpLit) { name = DefaultMaterialName } + : base.GenerateDefaultMaterial(pointsSupport); + } + } +} diff --git a/Runtime/HdrpGltfMaterialGenerator.cs.meta b/Runtime/HdrpGltfMaterialGenerator.cs.meta new file mode 100644 index 0000000..971d4a5 --- /dev/null +++ b/Runtime/HdrpGltfMaterialGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec0c162a6d9d448eaa96812b4f57ec2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/HdrpGraphicsApplier.cs b/Runtime/HdrpGraphicsApplier.cs new file mode 100644 index 0000000..31da488 --- /dev/null +++ b/Runtime/HdrpGraphicsApplier.cs @@ -0,0 +1,93 @@ +// Visual Pinball Engine +// Copyright (C) 2026 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; +using VisualPinball.Unity; + +namespace VisualPinball.Engine.Unity.Hdrp +{ + /// + /// Applies the host app's to HDRP at runtime: camera anti-aliasing + /// and the live Volume effects (SSR, SSAO, SSGI/RT-GI, Bloom). Registered before any scene loads, the + /// same pattern as HdrpMaterialResolver. Engine-level settings (resolution, vsync, quality level) + /// are applied host-side and don't pass through here. + /// + public sealed class HdrpGraphicsApplier : IVpeGraphicsApplier + { + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + private static void Register() => VpeGraphics.Register(new HdrpGraphicsApplier()); + + public void Apply(VpeGraphicsSettings settings) + { + ApplyCameraAntialiasing(settings.AntiAliasing); + ApplyVolume(settings); + } + + private static void ApplyCameraAntialiasing(int aa) + { + var cam = Camera.main; + if (cam == null) { + return; + } + var hd = cam.GetComponent(); + if (hd != null) { + hd.antialiasing = (HDAdditionalCameraData.AntialiasingMode)Mathf.Clamp(aa, 0, 3); + } + } + + private static void ApplyVolume(VpeGraphicsSettings s) + { + var volume = FindGlobalVolume(); + var profile = volume != null ? volume.profile : null; + if (profile == null) { + return; + } + if (profile.TryGet(out var ssr)) { + ssr.active = s.ScreenSpaceReflections; + ssr.tracing.value = s.RayTracedReflections ? RayCastingMode.RayTracing : RayCastingMode.RayMarching; + } + if (profile.TryGet(out var ao)) { + ao.active = s.AmbientOcclusion; + } + if (profile.TryGet(out var bloom)) { + bloom.active = s.Bloom; + } + if (profile.TryGet(out var gi)) { + gi.active = s.ScreenSpaceGlobalIllumination || s.RayTracedGlobalIllumination; + gi.tracing.value = s.RayTracedGlobalIllumination ? RayCastingMode.RayTracing : RayCastingMode.RayMarching; + } + } + + // The active global Volume with the highest priority (we read its .profile instance, so we don't + // dirty the shared asset). + private static Volume FindGlobalVolume() + { + var volumes = Object.FindObjectsByType(FindObjectsInactive.Exclude, FindObjectsSortMode.None); + Volume best = null; + foreach (var v in volumes) { + if (!v.isGlobal || !v.enabled || !v.gameObject.activeInHierarchy) { + continue; + } + if (best == null || v.priority > best.priority) { + best = v; + } + } + return best; + } + } +} diff --git a/Runtime/HdrpGraphicsApplier.cs.meta b/Runtime/HdrpGraphicsApplier.cs.meta new file mode 100644 index 0000000..25c9697 --- /dev/null +++ b/Runtime/HdrpGraphicsApplier.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 852de50f796105544880928ddb5c3c35 \ No newline at end of file diff --git a/Runtime/HdrpMaterialResolver.cs b/Runtime/HdrpMaterialResolver.cs new file mode 100644 index 0000000..ef9f438 --- /dev/null +++ b/Runtime/HdrpMaterialResolver.cs @@ -0,0 +1,1458 @@ +// Visual Pinball Engine +// Copyright (C) 2026 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using System; +using System.Collections.Generic; +using System.Text; +using NLog; +using UnityEngine; +using UnityEngine.Rendering.HighDefinition; +using VisualPinball.Unity; +#if UNITY_EDITOR +using UnityEditor; +#endif +using Logger = NLog.Logger; +using Stopwatch = System.Diagnostics.Stopwatch; + +namespace VisualPinball.Engine.Unity.Hdrp +{ + // Turns portable material profiles (schema v2; legacy v1 payloads are upgraded before they + // reach the resolver) into live HDRP Materials in the Player. + // + // The resolver clones a set of template materials shipped with the Player project. Each template + // is an authored HDRP/Lit material whose keyword combination the build compiler preserves; cloning + // inherits that compiled variant, so runtime keyword flipping never hits a stripped variant. + // + // To support additional surface/material types later: add a template asset + a new case in + // CreateMaterial / Supports + apply method. No changes to the .vpe format required. + public sealed class HdrpMaterialResolver : IVpeMaterialResolver, IVpeMaterialResolverDiagnostics + { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + private const bool VerboseResolverLogs = false; + private readonly Material _litOpaqueTemplate; + private readonly Material _litTransparentTemplate; + private readonly Material _litTranslucentThinTemplate; + private readonly Material _litTranslucentPlanarTemplate; + private readonly Material _litTranslucentSphereTemplate; + private readonly Material _fabricSilkTemplate; + private readonly Material _decalTemplate; + private readonly Dictionary _materialOverrides; + private static readonly int MainTextureProperty = Shader.PropertyToID("_MainTex"); + private const string NormalRepackShaderResourcePath = "VpePackNormalForHdrp"; + + // Re-packed normal maps are shared across every material slot that samples the same source. + // gltFast-imported textures and side-channel textures both pass through here; the cache is + // keyed on the source Texture2D so identity alone determines reuse. + private readonly Dictionary _repackedNormalCache = new(); + private static readonly HashSet _loggedMissingBaseColorMap = new(); + private static readonly HashSet _loggedApronBaseAssignments = new(); + private static readonly HashSet _loggedApronImportedDump = new(); + private static readonly Dictionary _diffusionProfilesByName = new(StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary _diffusionProfileHashByInstance = new(); + private static readonly HashSet _loggedDiffusionAssignments = new(); + private static readonly System.Reflection.FieldInfo _diffusionProfileField = + typeof(DiffusionProfileSettings).GetField("profile", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + private static readonly System.Reflection.FieldInfo _diffusionHashField = + _diffusionProfileField?.FieldType?.GetField("hash", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + private static Material _normalRepackMaterial; + private static bool _normalRepackMaterialQueried; + private static bool _loggedMissingNormalRepackShader; + private static bool _loggedNormalRepackGpuFallback; + private readonly ResolverDiagnostics _diagnostics = new(); + + public HdrpMaterialResolver( + Material litOpaqueTemplate, + Material litTransparentTemplate, + Material litTranslucentThinTemplate = null, + Material litTranslucentPlanarTemplate = null, + Material litTranslucentSphereTemplate = null, + Material fabricSilkTemplate = null, + Material decalTemplate = null, + Dictionary materialOverrides = null) + { + _litOpaqueTemplate = litOpaqueTemplate; + _litTransparentTemplate = litTransparentTemplate; + _litTranslucentThinTemplate = litTranslucentThinTemplate; + _litTranslucentPlanarTemplate = litTranslucentPlanarTemplate; + _litTranslucentSphereTemplate = litTranslucentSphereTemplate; + _fabricSilkTemplate = fabricSilkTemplate; + _decalTemplate = decalTemplate; + _materialOverrides = materialOverrides ?? new Dictionary(StringComparer.Ordinal); + } + + public bool Supports(string materialType) + { + return materialType switch { + VpeMaterialTypes.Lit => _litOpaqueTemplate, + VpeMaterialTypes.FabricSilk => _fabricSilkTemplate, + VpeMaterialTypes.Decal => _decalTemplate, + VpeMaterialTypes.Metal => true, + VpeMaterialTypes.Rubber => true, + VpeMaterialTypes.Dmd => true, + _ => false, + }; + } + + public Material CreateMaterial(VpeMaterialProfile profile, IVpeTextureProvider textures, Material importedMaterial) + { + if (profile == null) { + return null; + } + + _diagnostics.CreateCalls++; + + return profile.Type switch { + VpeMaterialTypes.Lit => BuildLit(profile, textures, importedMaterial), + VpeMaterialTypes.FabricSilk => BuildFabricSilk(profile, textures, importedMaterial), + VpeMaterialTypes.Decal => BuildDecal(profile, textures, importedMaterial), + VpeMaterialTypes.Metal => BuildShaderGraphMaterial(profile, profile.Metal) ?? BuildLit(profile, textures, importedMaterial), + VpeMaterialTypes.Rubber => BuildShaderGraphMaterial(profile, profile.Rubber) ?? BuildLit(profile, textures, importedMaterial), + VpeMaterialTypes.Dmd => BuildShaderGraphMaterial(profile, profile.Dmd), + _ => null, + }; + } + + private Material BuildShaderGraphMaterial(VpeMaterialProfile profile, VpeShaderGraphProfile shaderGraph) + { + var templateName = shaderGraph?.TemplateName; + if (string.IsNullOrWhiteSpace(templateName)) { + templateName = profile.Name; + } + + if (string.IsNullOrWhiteSpace(templateName) + || !_materialOverrides.TryGetValue(templateName, out var template) + || !template) { + return null; + } + + var cloneStopwatch = Stopwatch.StartNew(); + var material = new Material(template) { name = profile.Name }; + cloneStopwatch.Stop(); + _diagnostics.MaterialCloneMilliseconds += cloneStopwatch.ElapsedMilliseconds; + material.enableInstancing = true; + return material; + } + + public void ResetDiagnostics() + { + PruneRepackedNormalCache(); + _diagnostics.Reset(); + } + + public string GetDiagnosticsSummary() + { + return _diagnostics.ToSummaryString(); + } + + private Material BuildDecal(VpeMaterialProfile profile, IVpeTextureProvider textures, Material imported) + { + _diagnostics.DecalBuilds++; + var decal = profile.Decal; + if (decal == null || !_decalTemplate) { + return null; + } + + var cloneStopwatch = Stopwatch.StartNew(); + var material = new Material(_decalTemplate) { name = profile.Name }; + cloneStopwatch.Stop(); + _diagnostics.MaterialCloneMilliseconds += cloneStopwatch.ElapsedMilliseconds; + + SetColor(material, "_BaseColor", decal.BaseColor.Color); + SetTexture(material, "_BaseColorMap", decal.BaseColor.Texture, textures, imported); + + var normalStopwatch = Stopwatch.StartNew(); + SetNormalMap(material, "_NormalMap", decal.NormalMap, textures, imported); + normalStopwatch.Stop(); + _diagnostics.NormalMapMilliseconds += normalStopwatch.ElapsedMilliseconds; + if (decal.NormalMap != null) { + SetFloat(material, "_NormalScale", decal.NormalMap.Strength); + } + + // Decal MaskMap is pipeline-specific channel packing; only use side-channel data. + SetTexture(material, "_MaskMap", decal.MaskMap, textures, importedMaterial: null); + + SetFloat(material, "_DecalBlend", decal.DecalBlend); + SetFloat(material, "_NormalBlendSrc", decal.NormalBlendSrc); + SetFloat(material, "_MaskBlendSrc", decal.MaskBlendSrc); + SetFloat(material, "_DecalSmoothness", decal.Smoothness); + SetFloat(material, "_DecalMetallic", decal.Metallic); + SetFloat(material, "_DecalAO", decal.AmbientOcclusion); + SetFloat(material, "_AffectAlbedo", decal.AffectAlbedo ? 1f : 0f); + SetFloat(material, "_AffectNormal", decal.AffectNormal ? 1f : 0f); + SetFloat(material, "_AffectMaskmap", decal.AffectMask ? 1f : 0f); + + ApplyDecalAffectKeyword(material, "_MATERIAL_AFFECTS_ALBEDO", decal.AffectAlbedo); + ApplyDecalAffectKeyword(material, "_MATERIAL_AFFECTS_NORMAL", decal.AffectNormal); + ApplyDecalAffectKeyword(material, "_MATERIAL_AFFECTS_MASKMAP", decal.AffectMask); + + material.enableInstancing = true; + var validateStopwatch = Stopwatch.StartNew(); + HDMaterial.ValidateMaterial(material); + validateStopwatch.Stop(); + _diagnostics.ValidateMilliseconds += validateStopwatch.ElapsedMilliseconds; + return material; + } + + private static void ApplyDecalAffectKeyword(Material material, string keyword, bool enabled) + { + if (enabled) { + material.EnableKeyword(keyword); + } else { + material.DisableKeyword(keyword); + } + } + + private Material BuildLit(VpeMaterialProfile profile, IVpeTextureProvider textures, Material imported) + { + return BuildLit(profile.Name, profile.Lit, textures, imported); + } + + private Material BuildFabricSilk(VpeMaterialProfile profile, IVpeTextureProvider textures, Material imported) + { + var fabric = profile.Fabric; + if (fabric?.Lit == null || !_fabricSilkTemplate) { + return null; + } + + return BuildLit(profile.Name, fabric.Lit, textures, imported, _fabricSilkTemplate, fabric.Hdrp); + } + + private Material BuildLit( + string profileName, + VpeLitProfile lit, + IVpeTextureProvider textures, + Material imported, + Material forcedTemplate = null, + VpeHdrpFabricSilkHints fabricSilk = null) + { + _diagnostics.LitBuilds++; + if (lit == null) { + return null; + } + var hdrp = lit.Hdrp ?? new VpeHdrpLitHints(); + + if (_materialOverrides.TryGetValue(profileName, out var overrideTemplate) && overrideTemplate) { + return new Material(overrideTemplate) { name = profileName }; + } + + var template = forcedTemplate ? forcedTemplate : PickLitTemplate(lit, profileName); + if (!template) { + return null; + } + + var cloneStopwatch = Stopwatch.StartNew(); + var material = new Material(template) { name = profileName }; + cloneStopwatch.Stop(); + _diagnostics.MaterialCloneMilliseconds += cloneStopwatch.ElapsedMilliseconds; + LogApronImportedMaterial(profileName, imported); + + SetColor(material, "_BaseColor", lit.BaseColor.Color); + SetColor(material, "_Color", lit.BaseColor.Color); + SetTexture(material, "_BaseColorMap", lit.BaseColor.Texture, textures, imported); + + SetFloat(material, "_Metallic", lit.Metallic); + SetFloat(material, "_Smoothness", lit.Smoothness); + SetFloat(material, "_IridescenceMask", lit.IridescenceMask); + SetFloat(material, "_IridescenceThickness", lit.IridescenceThickness); + SetFloat(material, "_MetallicRemapMin", lit.MetallicRemap.x); + SetFloat(material, "_MetallicRemapMax", lit.MetallicRemap.y); + SetFloat(material, "_SmoothnessRemapMin", lit.SmoothnessRemap.x); + SetFloat(material, "_SmoothnessRemapMax", lit.SmoothnessRemap.y); + SetFloat(material, "_AORemapMin", lit.AoRemap.x); + SetFloat(material, "_AORemapMax", lit.AoRemap.y); + SetFloat(material, "_AlphaRemapMin", lit.AlphaRemap.x); + SetFloat(material, "_AlphaRemapMax", lit.AlphaRemap.y); + SetFloat(material, "_UVBase", lit.UvBase); + SetFloat(material, "_TexWorldScale", hdrp.TexWorldScale); + SetFloat(material, "_InvTilingScale", hdrp.InvTilingScale); + SetFloat(material, "_EnableGeometricSpecularAA", hdrp.GeometricSpecularAa ? 1f : 0f); + SetFloat(material, "_SpecularAAScreenSpaceVariance", hdrp.SpecularAaScreenSpaceVariance); + SetFloat(material, "_SpecularAAThreshold", hdrp.SpecularAaThreshold); + if (hdrp.GeometricSpecularAa) { + material.EnableKeyword("_ENABLE_GEOMETRIC_SPECULAR_AA"); + } else { + material.DisableKeyword("_ENABLE_GEOMETRIC_SPECULAR_AA"); + } + ApplyHdrpSupplementalState(material, lit, textures); + SetFloat(material, "_SupportDecals", hdrp.SupportDecals ? 1f : 0f); + if (hdrp.SupportDecals) { + material.DisableKeyword("_DISABLE_DECALS"); + } else { + material.EnableKeyword("_DISABLE_DECALS"); + } + if (hdrp.RayTracing >= 0) { + SetFloat(material, "_RayTracing", hdrp.RayTracing); + } + ApplyMaterialFeatureState(material, lit); + + // MaskMap always side-channel; never fall back to imported (channel packing differs). + SetTexture(material, "_MaskMap", lit.MaskMap, textures, importedMaterial: null); + var normalStopwatch = Stopwatch.StartNew(); + SetNormalMap(material, "_NormalMap", lit.NormalMap, textures, imported); + normalStopwatch.Stop(); + _diagnostics.NormalMapMilliseconds += normalStopwatch.ElapsedMilliseconds; + if (lit.NormalMap != null) { + SetFloat(material, "_NormalScale", lit.NormalMap.Strength); + } + ApplyFabricSilkState(material, fabricSilk, textures); + + SetColor(material, "_EmissiveColor", lit.Emissive.Color); + var emissiveLdrColor = lit.Emissive.HasLdrColor + ? (Color)lit.Emissive.LdrColor + : ResolveLegacyEmissiveLdrColor(lit.Emissive); + SetColor(material, "_EmissiveColorLDR", emissiveLdrColor); + SetColor(material, "_EmissionColor", emissiveLdrColor); + SetTexture(material, "_EmissiveColorMap", lit.Emissive.Texture, textures, imported); + SetFloat(material, "_UseEmissiveIntensity", lit.Emissive.UseIntensity ? 1f : 0f); + SetFloat(material, "_EmissiveIntensity", lit.Emissive.Intensity); + SetFloat(material, "_EmissiveIntensityUnit", lit.Emissive.IntensityUnit == VpeEmissiveIntensityUnits.Ev100 ? 1f : 0f); + SetFloat(material, "_EmissiveExposureWeight", hdrp.EmissiveExposureWeight); + + ApplySurfaceState(material, lit); + ApplyDoubleSidedState(material, lit); + ApplyTranslucencyState(material, lit, textures); + ApplySsrTransparentState(material, lit); + + material.doubleSidedGI = lit.DoubleSidedGi; + material.enableInstancing = true; + + if (hdrp.RenderQueueOverride >= 0) { + material.renderQueue = hdrp.RenderQueueOverride; + } + + // Let HDRP reconcile derived render state (passes, stencil refs, blend state, etc.) + // from the final property/keyword set. Without this, alpha-test and transparent + // materials can inherit stale template pass-state in player builds. + var validateStopwatch = Stopwatch.StartNew(); + HDMaterial.ValidateMaterial(material); + validateStopwatch.Stop(); + _diagnostics.ValidateMilliseconds += validateStopwatch.ElapsedMilliseconds; + if (hdrp.RenderQueueOverride >= 0) { + material.renderQueue = hdrp.RenderQueueOverride; + } + if (hdrp.RayTracing >= 0) { + SetFloat(material, "_RayTracing", hdrp.RayTracing); + } + ApplyMaterialFeatureState(material, lit); + ApplyFabricSilkState(material, fabricSilk, textures); + ApplyHdrpSupplementalState(material, lit, textures); + var diffusionStopwatch = Stopwatch.StartNew(); + ApplyTransmissionDiffusionProfile(material, profileName, lit); + diffusionStopwatch.Stop(); + _diagnostics.DiffusionMilliseconds += diffusionStopwatch.ElapsedMilliseconds; + + LogFirstOfEach(lit.SurfaceType, lit.RefractionModel, profileName, template.name, material); + + return material; + } + + private static void ApplyTransmissionDiffusionProfile(Material material, string profileName, VpeLitProfile lit) + { + if (material == null || lit == null || !lit.HasTransmission) { + return; + } + var hdrp = lit.Hdrp ?? new VpeHdrpLitHints(); + + if (Mathf.Abs(hdrp.DiffusionProfileHash) > 0.000001f) { + SetFloat(material, "_DiffusionProfileHash", hdrp.DiffusionProfileHash); + SetVector(material, "_DiffusionProfileAsset", hdrp.DiffusionProfileAsset); + return; + } + + if (material.HasProperty("_DiffusionProfileHash") + && Mathf.Abs(material.GetFloat("_DiffusionProfileHash")) > 0.000001f) { + return; + } + + DiffusionProfileSettings profile = null; + foreach (var candidate in GetPreferredDiffusionProfileNames(profileName)) { + profile = GetDiffusionProfileByName(candidate); + if (profile) { + break; + } + } + + if (!profile) { + return; + } + + var setAssetVector = SetDiffusionProfileHashOnly(material, profile); + var key = $"{profileName ?? ""}|{profile.name}"; + if (VerboseResolverLogs && _loggedDiffusionAssignments.Add(key)) { + Debug.Log( + $"HdrpMaterialResolver: assigned diffusion profile '{profile.name}' to '{profileName}' " + + $"(v1 payload does not serialize diffusion profile binding; hash-only runtime assignment, " + + $"assetVector={(setAssetVector ? "set" : "missing")})."); + } + } + + private static bool SetDiffusionProfileHashOnly(Material material, DiffusionProfileSettings profile) + { + if (material == null || !material.HasProperty("_DiffusionProfileHash")) { + return false; + } + + var hash = GetDiffusionProfileHash(profile); + material.SetFloat("_DiffusionProfileHash", hash); + return TryApplyDiffusionProfileAssetVector(material, profile); + } + + private static float GetDiffusionProfileHash(DiffusionProfileSettings profile) + { + if (!profile) { + return 0f; + } + + var id = UnityObjectId.Get(profile); + if (_diffusionProfileHashByInstance.TryGetValue(id, out var cached)) { + return cached; + } + + float hashAsFloat = 0f; + try { + if (_diffusionProfileField != null && _diffusionHashField != null) { + var profileStruct = _diffusionProfileField.GetValue(profile); + if (profileStruct != null) { + var rawHash = _diffusionHashField.GetValue(profileStruct); + uint hash = rawHash switch { + uint u => u, + int i => unchecked((uint)i), + long l => unchecked((uint)l), + _ => 0u, + }; + hashAsFloat = BitConverter.ToSingle(BitConverter.GetBytes(hash), 0); + } + } + } catch { + hashAsFloat = 0f; + } + + _diffusionProfileHashByInstance[id] = hashAsFloat; + return hashAsFloat; + } + + private static bool TryApplyDiffusionProfileAssetVector(Material material, DiffusionProfileSettings profile) + { + if (material == null + || profile == null + || !material.HasProperty("_DiffusionProfileAsset")) { + return false; + } + +#if UNITY_EDITOR + var assetPath = AssetDatabase.GetAssetPath(profile); + if (string.IsNullOrWhiteSpace(assetPath)) { + return false; + } + + var guid = AssetDatabase.AssetPathToGUID(assetPath); + if (string.IsNullOrWhiteSpace(guid) || guid.Length != 32) { + return false; + } + + material.SetVector("_DiffusionProfileAsset", ConvertGuidToVector4(guid)); + return true; +#else + return false; +#endif + } + + private static Vector4 ConvertGuidToVector4(string guid) + { + var bytes = new byte[16]; + for (var i = 0; i < 16; i++) { + bytes[i] = byte.Parse( + guid.Substring(i * 2, 2), + System.Globalization.NumberStyles.HexNumber, + System.Globalization.CultureInfo.InvariantCulture); + } + + var floats = new float[4]; + Buffer.BlockCopy(bytes, 0, floats, 0, 16); + return new Vector4(floats[0], floats[1], floats[2], floats[3]); + } + + private static IEnumerable GetPreferredDiffusionProfileNames(string profileName) + { + if (ContainsIgnoreCase(profileName, "plastic")) { + yield return "Plastics"; + yield return "Translite"; + yield break; + } + + if (ContainsIgnoreCase(profileName, "label") + || ContainsIgnoreCase(profileName, "decal") + || ContainsIgnoreCase(profileName, "translite") + || ContainsIgnoreCase(profileName, "hat")) { + yield return "Translite"; + yield return "Plastics"; + yield break; + } + + if (ContainsIgnoreCase(profileName, "insert")) { + yield return "Plastics"; + yield return "Translite"; + yield break; + } + + yield return "Translite"; + yield return "Plastics"; + } + + private static bool ContainsIgnoreCase(string value, string needle) + { + return !string.IsNullOrWhiteSpace(value) + && !string.IsNullOrWhiteSpace(needle) + && value.IndexOf(needle, StringComparison.OrdinalIgnoreCase) >= 0; + } + + private static DiffusionProfileSettings GetDiffusionProfileByName(string name) + { + if (string.IsNullOrWhiteSpace(name)) { + return null; + } + + if (_diffusionProfilesByName.TryGetValue(name, out var cached)) { + return cached; + } + + var allProfiles = UnityEngine.Resources.FindObjectsOfTypeAll(); + for (var i = 0; i < allProfiles.Length; i++) { + var profile = allProfiles[i]; + if (!profile || !string.Equals(profile.name, name, StringComparison.OrdinalIgnoreCase)) { + continue; + } + _diffusionProfilesByName[name] = profile; + return profile; + } + + _diffusionProfilesByName[name] = null; + return null; + } + + // Re-asserts the HDRP blend/depth/queue state we expect for the requested surface type. + // The template carries these values, but being explicit here guards against template drift + // and against future HDMaterial.ValidateMaterial calls that might overwrite silently. + private static void ApplySurfaceState(Material material, VpeLitProfile lit) + { + var hdrp = lit.Hdrp ?? new VpeHdrpLitHints(); + switch (lit.SurfaceType) { + case VpeSurfaceTypes.Transparent: + SetFloat(material, "_SurfaceType", 1f); + SetFloat(material, "_BlendMode", VpeMaterialEnums.ToHdrpBlendMode(lit.BlendMode)); + SetFloat(material, "_TransparentSortPriority", lit.SortPriority); + SetFloat(material, "_SrcBlend", 1f); // One + SetFloat(material, "_DstBlend", 10f); // OneMinusSrcAlpha + SetFloat(material, "_AlphaSrcBlend", 1f); + SetFloat(material, "_AlphaDstBlend", 10f); + SetFloat(material, "_ZWrite", 0f); + SetFloat(material, "_TransparentZWrite", 0f); + SetFloat(material, "_TransparentDepthPrepassEnable", hdrp.TransparentDepthPrepass ? 1f : 0f); + SetFloat(material, "_TransparentDepthPostpassEnable", hdrp.TransparentDepthPostpass ? 1f : 0f); + SetFloat(material, "_TransparentWritingMotionVec", hdrp.TransparentWritesMotionVectors ? 1f : 0f); + SetFloat(material, "_TransparentBackfaceEnable", hdrp.TransparentBackface ? 1f : 0f); + if (hdrp.ZTestTransparent >= 0) { + SetFloat(material, "_ZTestTransparent", hdrp.ZTestTransparent); + } + SetFloat(material, "_EnableFogOnTransparent", hdrp.EnableFogOnTransparent ? 1f : 0f); + SetFloat(material, "_EnableBlendModePreserveSpecularLighting", hdrp.BlendModePreserveSpecularLighting ? 1f : 0f); + SetFloat(material, "_AlphaCutoffEnable", 0f); + material.EnableKeyword("_SURFACE_TYPE_TRANSPARENT"); + if (hdrp.EnableFogOnTransparent) { + material.EnableKeyword("_ENABLE_FOG_ON_TRANSPARENT"); + } else { + material.DisableKeyword("_ENABLE_FOG_ON_TRANSPARENT"); + } + if (hdrp.TransparentWritesMotionVectors) { + material.EnableKeyword("_TRANSPARENT_WRITES_MOTION_VEC"); + } else { + material.DisableKeyword("_TRANSPARENT_WRITES_MOTION_VEC"); + } + ApplyBlendModeKeywords(material, lit.BlendMode, hdrp.BlendModePreserveSpecularLighting); + material.DisableKeyword("_ALPHATEST_ON"); + SetShaderPassEnabledSafe(material, "MOTIONVECTORS", hdrp.TransparentWritesMotionVectors); + SetShaderPassEnabledSafe(material, "MotionVectors", hdrp.TransparentWritesMotionVectors); + SetShaderPassEnabledSafe(material, "TransparentDepthPrepass", hdrp.TransparentDepthPrepass); + SetShaderPassEnabledSafe(material, "TransparentDepthPostpass", hdrp.TransparentDepthPostpass); + if (material.renderQueue < 3000) { + material.renderQueue = 3000; + } + break; + + case VpeSurfaceTypes.AlphaTest: + SetFloat(material, "_SurfaceType", 0f); + SetFloat(material, "_AlphaCutoffEnable", 1f); + SetFloat(material, "_AlphaCutoff", lit.AlphaCutoff); + SetFloat(material, "_Cutoff", lit.AlphaCutoff); + material.DisableKeyword("_SURFACE_TYPE_TRANSPARENT"); + material.EnableKeyword("_ALPHATEST_ON"); + ApplyOpaqueZTestState(material, hdrp); + SetShaderPassEnabledSafe(material, "MOTIONVECTORS", true); + SetShaderPassEnabledSafe(material, "MotionVectors", true); + if (material.renderQueue is < 2450 or > 2499) { + material.renderQueue = 2450; + } + break; + + default: // Opaque + SetFloat(material, "_SurfaceType", 0f); + SetFloat(material, "_AlphaCutoffEnable", 0f); + material.DisableKeyword("_SURFACE_TYPE_TRANSPARENT"); + material.DisableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_TRANSPARENT_WRITES_MOTION_VEC"); + material.DisableKeyword("_ENABLE_FOG_ON_TRANSPARENT"); + material.DisableKeyword("_BLENDMODE_PRE_MULTIPLY"); + material.DisableKeyword("_BLENDMODE_PRESERVE_SPECULAR_LIGHTING"); + SetFloat(material, "_TransparentDepthPrepassEnable", 0f); + SetFloat(material, "_TransparentDepthPostpassEnable", 0f); + SetFloat(material, "_TransparentWritingMotionVec", 0f); + SetFloat(material, "_TransparentBackfaceEnable", 0f); + SetFloat(material, "_TransparentSortPriority", 0f); + ApplyOpaqueZTestState(material, hdrp); + break; + } + } + + private static void ApplyOpaqueZTestState(Material material, VpeHdrpLitHints hdrp) + { + if (hdrp.ZTestDepthEqualForOpaque >= 0) { + SetFloat(material, "_ZTestDepthEqualForOpaque", hdrp.ZTestDepthEqualForOpaque); + } + if (hdrp.ZTestGBuffer >= 0) { + SetFloat(material, "_ZTestGBuffer", hdrp.ZTestGBuffer); + } + } + + private static void ApplyBlendModeKeywords(Material material, string blendMode, bool preserveSpecular) + { + if (blendMode == VpeBlendModes.Premultiply) { + material.EnableKeyword("_BLENDMODE_PRE_MULTIPLY"); + } else { + material.DisableKeyword("_BLENDMODE_PRE_MULTIPLY"); + } + + if (preserveSpecular) { + material.EnableKeyword("_BLENDMODE_PRESERVE_SPECULAR_LIGHTING"); + } else { + material.DisableKeyword("_BLENDMODE_PRESERVE_SPECULAR_LIGHTING"); + } + } + + private static void SetShaderPassEnabledSafe(Material material, string passName, bool enabled) + { + // Unknown pass names are ignored by Unity; we still guard to avoid resolver hard-failures + // if HDRP renames a pass across major versions. + try { + material.SetShaderPassEnabled(passName, enabled); + } catch { + // Intentionally ignore; pass name not available in this shader version. + } + } + + private static void ApplyMaterialFeatureState(Material material, VpeLitProfile lit) + { + var hdrp = lit.Hdrp ?? new VpeHdrpLitHints(); + if (hdrp.MaterialId >= 0) { + SetFloat(material, "_MaterialID", hdrp.MaterialId); + } + if (hdrp.TransmissionEnable >= 0f) { + SetFloat(material, "_TransmissionEnable", hdrp.TransmissionEnable); + } + if (hdrp.TransmissionMask >= 0f) { + SetFloat(material, "_TransmissionMask", hdrp.TransmissionMask); + } + + if (lit.HasTransmission) { + material.EnableKeyword("_MATERIAL_FEATURE_TRANSMISSION"); + } else { + material.DisableKeyword("_MATERIAL_FEATURE_TRANSMISSION"); + } + } + + private static void ApplyHdrpSupplementalState(Material material, VpeLitProfile lit, IVpeTextureProvider textures) + { + if (material == null || lit == null) { + return; + } + + var hdrp = lit.Hdrp ?? new VpeHdrpLitHints(); + if (hdrp.SpecularOcclusionMode >= 0) { + SetFloat(material, "_SpecularOcclusionMode", hdrp.SpecularOcclusionMode); + } + SetFloat(material, "_EnergyConservingSpecularColor", hdrp.EnergyConservingSpecularColor ? 1f : 0f); + SetColor(material, "_SpecularColor", hdrp.SpecularColor); + SetTexture(material, "_SpecularColorMap", hdrp.SpecularColorMap, textures, importedMaterial: null); + + var hasCoatMaskMap = hdrp.CoatMaskMap != null && !string.IsNullOrWhiteSpace(hdrp.CoatMaskMap.TextureId); + if (hdrp.CoatMask >= 0f) { + SetFloat(material, "_CoatMask", hdrp.CoatMask); + if (hdrp.CoatMask > 0.000001f || hasCoatMaskMap) { + material.EnableKeyword("_MATERIAL_FEATURE_CLEAR_COAT"); + } else { + material.DisableKeyword("_MATERIAL_FEATURE_CLEAR_COAT"); + } + } else if (hasCoatMaskMap) { + material.EnableKeyword("_MATERIAL_FEATURE_CLEAR_COAT"); + } + SetTexture(material, "_CoatMaskMap", hdrp.CoatMaskMap, textures, importedMaterial: null); + + if (hdrp.DisableSsr) { + SetFloat(material, "_ReceivesSSR", 0f); + material.EnableKeyword("_DISABLE_SSR"); + } else { + SetFloat(material, "_ReceivesSSR", 1f); + material.DisableKeyword("_DISABLE_SSR"); + } + } + + private static void ApplyFabricSilkState(Material material, VpeHdrpFabricSilkHints fabric, IVpeTextureProvider textures) + { + if (fabric == null || material == null) { + return; + } + + SetFloat(material, "_useThreadMap", fabric.UseThreadMap ? 1f : 0f); + if (fabric.ThreadAOStrength01 >= 0f) { + SetFloat(material, "_ThreadAOStrength01", fabric.ThreadAOStrength01); + } + if (fabric.ThreadNormalStrength >= 0f) { + SetFloat(material, "_ThreadNormalStrength", fabric.ThreadNormalStrength); + } + if (fabric.ThreadSmoothnessScale >= 0f) { + SetFloat(material, "_ThreadSmoothnessScale", fabric.ThreadSmoothnessScale); + } + if (fabric.ThreadUvChannel >= 0f) { + SetFloat(material, "_THREAD_UV_CHANNEL", fabric.ThreadUvChannel); + } + if (fabric.FuzzStrength >= 0f) { + SetFloat(material, "_FuzzStrength", fabric.FuzzStrength); + } + if (fabric.FuzzMapUvScale >= 0f) { + SetFloat(material, "_FuzzMapUVScale", fabric.FuzzMapUvScale); + } + + SetTexture(material, "_ThreadMap", fabric.ThreadMap, textures, importedMaterial: null); + SetTexture(material, "_FuzzMap", fabric.FuzzMap, textures, importedMaterial: null); + + if (fabric.UseThreadMap) { + material.EnableKeyword("_THREAD_UV_CHANNEL_UV0"); + } else { + material.DisableKeyword("_THREAD_UV_CHANNEL_UV0"); + } + } + + private static void ApplySsrTransparentState(Material material, VpeLitProfile lit) + { + var hdrp = lit.Hdrp ?? new VpeHdrpLitHints(); + if (hdrp.DisableSsrTransparent) { + SetFloat(material, "_ReceivesSSRTransparent", 0f); + material.EnableKeyword("_DISABLE_SSR_TRANSPARENT"); + } else { + SetFloat(material, "_ReceivesSSRTransparent", 1f); + material.DisableKeyword("_DISABLE_SSR_TRANSPARENT"); + } + } + + private static void ApplyDoubleSidedState(Material material, VpeLitProfile lit) + { + var hdrp = lit.Hdrp ?? new VpeHdrpLitHints(); + if (lit.DoubleSided) { + SetFloat(material, "_DoubleSidedEnable", 1f); + SetFloat(material, "_CullMode", hdrp.CullMode >= 0 ? hdrp.CullMode : 0f); + SetFloat(material, "_CullModeForward", hdrp.CullModeForward >= 0 ? hdrp.CullModeForward : 0f); + SetFloat(material, "_OpaqueCullMode", hdrp.OpaqueCullMode >= 0 ? hdrp.OpaqueCullMode : 0f); + SetFloat(material, "_TransparentCullMode", hdrp.TransparentCullMode >= 0 ? hdrp.TransparentCullMode : 0f); + material.EnableKeyword("_DOUBLESIDED_ON"); + material.doubleSidedGI = true; + } else { + SetFloat(material, "_DoubleSidedEnable", 0f); + if (hdrp.CullMode >= 0) { + SetFloat(material, "_CullMode", hdrp.CullMode); + } + if (hdrp.CullModeForward >= 0) { + SetFloat(material, "_CullModeForward", hdrp.CullModeForward); + } + if (hdrp.OpaqueCullMode >= 0) { + SetFloat(material, "_OpaqueCullMode", hdrp.OpaqueCullMode); + } + if (hdrp.TransparentCullMode >= 0) { + SetFloat(material, "_TransparentCullMode", hdrp.TransparentCullMode); + } + material.DisableKeyword("_DOUBLESIDED_ON"); + } + } + + private void ApplyTranslucencyState(Material material, VpeLitProfile lit, IVpeTextureProvider textures) + { + var hdrp = lit.Hdrp ?? new VpeHdrpLitHints(); + // HDRP Translucent material archetype (MaterialID=5) combined with a refraction model. + // VPE schema treats transmission/refraction as transparent-surface features; applying + // them to alpha-test materials can push them into odd mixed variants. + if (lit.SurfaceType != VpeSurfaceTypes.Transparent) { + return; + } + + // Start from a known non-translucent baseline so template defaults don't leak into + // profiles that don't request transmission/refraction. Keep explicit material feature + // scalars from the source material; transparent refraction is valid on Standard Lit + // plastics and must not be promoted to Translucent unless transmission was requested. + SetFloat(material, "_MaterialID", hdrp.MaterialId >= 0 ? hdrp.MaterialId : 1f); + SetFloat(material, "_TransmissionEnable", hdrp.TransmissionEnable >= 0f ? hdrp.TransmissionEnable : 0f); + SetFloat(material, "_TransmissionMask", hdrp.TransmissionMask >= 0f ? hdrp.TransmissionMask : 0f); + material.DisableKeyword("_MATERIAL_FEATURE_TRANSMISSION"); + material.DisableKeyword("_THICKNESSMAP"); + material.DisableKeyword("_REFRACTION_PLANE"); + material.DisableKeyword("_REFRACTION_SPHERE"); + material.DisableKeyword("_REFRACTION_THIN"); + SetFloat(material, "_RefractionModel", 0f); + + if (!lit.HasTransmission && lit.RefractionModel == VpeRefractionModels.None) { + return; + } + + SetFloat(material, "_MaterialID", lit.HasTransmission && hdrp.MaterialId < 0 ? 5f : hdrp.MaterialId >= 0 ? hdrp.MaterialId : 1f); + if (lit.HasTransmission) { + SetFloat(material, "_TransmissionEnable", 1f); + SetFloat(material, "_TransmissionMask", 1f); + material.EnableKeyword("_MATERIAL_FEATURE_TRANSMISSION"); + } + + SetFloat(material, "_Thickness", lit.Thickness); + SetVector(material, "_ThicknessRemap", new Vector4(lit.ThicknessRemap.x, lit.ThicknessRemap.y, 0f, 0f)); + SetFloat(material, "_ATDistance", lit.AbsorptionDistance); + SetFloat(material, "_Ior", Mathf.Max(1f, lit.Ior)); + SetColor(material, "_TransmittanceColor", lit.TransmittanceColor); + + // Refraction keyword — exactly one must win. The template already pre-compiled one + // variant; we flip keywords here to match the profile's intent, trusting that the + // same three REFRACTION_* variants are present via our thin + planar templates. + switch (lit.RefractionModel) { + case VpeRefractionModels.Planar: + material.EnableKeyword("_REFRACTION_PLANE"); + SetFloat(material, "_RefractionModel", 1f); + break; + case VpeRefractionModels.Sphere: + material.EnableKeyword("_REFRACTION_SPHERE"); + SetFloat(material, "_RefractionModel", 2f); + break; + case VpeRefractionModels.Thin: + material.EnableKeyword("_REFRACTION_THIN"); + SetFloat(material, "_RefractionModel", 3f); + break; + default: + SetFloat(material, "_RefractionModel", 0f); + break; + } + + // Thickness map — HDRP packs thickness channels specifically; side-channel only. + if (lit.ThicknessMap != null && !string.IsNullOrWhiteSpace(lit.ThicknessMap.TextureId)) { + var tex = textures?.Get(lit.ThicknessMap.TextureId); + if (tex && material.HasProperty("_ThicknessMap")) { + material.SetTexture("_ThicknessMap", tex); + material.SetTextureOffset("_ThicknessMap", lit.ThicknessMap.Offset); + material.SetTextureScale("_ThicknessMap", lit.ThicknessMap.Scale); + material.EnableKeyword("_THICKNESSMAP"); + } + } + } + + // Emits a single log per distinct (surfaceType, refractionModel, templateName) triple so we + // can confirm the resolver picked the right template without spamming 149 lines per load. + private static readonly HashSet _loggedSurfaceTemplates = new(); + + private static void LogFirstOfEach(string surfaceType, string refractionModel, string profileName, string templateName, Material material) + { + if (!VerboseResolverLogs) { + return; + } + + var key = $"{surfaceType}|{refractionModel}|{templateName}"; + if (!_loggedSurfaceTemplates.Add(key)) { + return; + } + var baseColor = material.HasProperty("_BaseColor") ? material.GetColor("_BaseColor") : default; + var surfType = material.HasProperty("_SurfaceType") ? material.GetFloat("_SurfaceType") : -1f; + var matId = material.HasProperty("_MaterialID") ? material.GetFloat("_MaterialID") : -1f; + var refMode = material.HasProperty("_RefractionModel") ? material.GetFloat("_RefractionModel") : -1f; + var ior = material.HasProperty("_Ior") ? material.GetFloat("_Ior") : -1f; + var thickness = material.HasProperty("_Thickness") ? material.GetFloat("_Thickness") : -1f; + var tx = material.HasProperty("_TransmissionEnable") ? material.GetFloat("_TransmissionEnable") : -1f; + var mvPass = material.GetShaderPassEnabled("MOTIONVECTORS") || material.GetShaderPassEnabled("MotionVectors"); + var prePass = material.GetShaderPassEnabled("TransparentDepthPrepass"); + var postPass = material.GetShaderPassEnabled("TransparentDepthPostpass"); + var kws = string.Join(",", material.shaderKeywords); + Debug.Log( + $"HdrpMaterialResolver first sample [{surfaceType}|{refractionModel}] '{profileName}' on template '{templateName}':\n" + + $" baseColor={baseColor} queue={material.renderQueue} shader={material.shader.name}\n" + + $" _SurfaceType={surfType} _MaterialID={matId} _RefractionModel={refMode} _Ior={ior} _Thickness={thickness} _TransmissionEnable={tx}\n" + + $" passState: MOTIONVECTORS={mvPass} TransparentDepthPrepass={prePass} TransparentDepthPostpass={postPass}\n" + + $" keywords=[{kws}]"); + } + + private Material PickLitTemplate(VpeLitProfile lit, string profileName) + { + switch (lit.SurfaceType) { + case VpeSurfaceTypes.Transparent: + // Translucent archetype (pinball inserts, plastic ramps): needs refraction + + // transmission. Falls back through thin → planar → plain transparent so a + // missing template never turns the material opaque-magenta. + if (lit.HasTransmission) { + var translucent = PickTranslucentTemplate(lit.RefractionModel); + if (translucent) { + return translucent; + } + Debug.LogWarning( + $"HdrpMaterialResolver: '{profileName}' requests transmission/refraction ({lit.RefractionModel}) " + + "but no translucent template is configured. Falling back to simple transparent."); + } + if (_litTransparentTemplate) { + return _litTransparentTemplate; + } + Debug.LogWarning($"HdrpMaterialResolver: '{profileName}' transparent but no transparent template; using opaque."); + return _litOpaqueTemplate; + + case VpeSurfaceTypes.AlphaTest: + return _litOpaqueTemplate; + + default: + if (!_litOpaqueTemplate) { + Debug.LogWarning($"HdrpMaterialResolver: no lit-opaque template configured; profile '{profileName}' not applied."); + } + return _litOpaqueTemplate; + } + } + + private Material PickTranslucentTemplate(string refractionModel) + { + switch (refractionModel) { + case VpeRefractionModels.Thin: + return _litTranslucentThinTemplate ?? _litTranslucentSphereTemplate ?? _litTranslucentPlanarTemplate; + case VpeRefractionModels.Planar: + return _litTranslucentPlanarTemplate ?? _litTranslucentSphereTemplate ?? _litTranslucentThinTemplate; + case VpeRefractionModels.Sphere: + return _litTranslucentSphereTemplate ?? _litTranslucentPlanarTemplate ?? _litTranslucentThinTemplate; + default: + // HasTransmission without a named refraction model still wants the translucent + // archetype; pick thin as the generic default. + return _litTranslucentThinTemplate ?? _litTranslucentPlanarTemplate ?? _litTranslucentSphereTemplate; + } + } + + private static void SetFloat(Material material, string property, float value) + { + if (material.HasProperty(property)) { + material.SetFloat(property, value); + } + } + + private static void SetColor(Material material, string property, Color value) + { + if (material.HasProperty(property)) { + material.SetColor(property, value); + } + } + + private static Color ResolveLegacyEmissiveLdrColor(VpeEmissive emissive) + { + if (emissive == null) { + return Color.black; + } + + var hdr = (Color)emissive.Color; + if (emissive.Intensity > 0.000001f && !Approximately(hdr, Color.black)) { + return hdr / emissive.Intensity; + } + + return hdr; + } + + private static bool Approximately(Color a, Color b) + { + return Mathf.Approximately(a.r, b.r) + && Mathf.Approximately(a.g, b.g) + && Mathf.Approximately(a.b, b.b) + && Mathf.Approximately(a.a, b.a); + } + + private static void SetVector(Material material, string property, Vector4 value) + { + if (material.HasProperty(property)) { + material.SetVector(property, value); + } + } + + private static void SetTexture(Material material, string property, VpeTextureRef textureRef, IVpeTextureProvider textures, Material importedMaterial) + { + if (textureRef == null || !material.HasProperty(property)) { + return; + } + + Texture texture = null; + var fromImported = false; + if (!string.IsNullOrWhiteSpace(textureRef.TextureId)) { + texture = textures?.Get(textureRef.TextureId); + } + if (!texture && importedMaterial) { + texture = GetImportedTexture(importedMaterial, property); + fromImported = texture; + } + if (!texture) { + if (property == "_BaseColorMap" && importedMaterial) { + LogMissingImportedBaseColorMap(importedMaterial, material.name); + } + return; + } + + if (property == "_BaseColorMap" && material.name.IndexOf("Apron", System.StringComparison.OrdinalIgnoreCase) >= 0) { + LogApronBaseAssignment(material.name, importedMaterial, texture, fromImported); + } + + material.SetTexture(property, texture); + material.SetTextureOffset(property, textureRef.Offset); + material.SetTextureScale(property, textureRef.Scale); + } + + private static void LogMissingImportedBaseColorMap(Material importedMaterial, string profileName) + { + var importedName = importedMaterial ? importedMaterial.name : ""; + var key = $"{profileName}|{importedName}"; + if (!_loggedMissingBaseColorMap.Add(key)) { + return; + } + + var shaderName = importedMaterial && importedMaterial.shader ? importedMaterial.shader.name : ""; + var hasMainTex = importedMaterial && importedMaterial.mainTexture; + var props = importedMaterial ? importedMaterial.GetTexturePropertyNames() : System.Array.Empty(); + var propDump = props != null && props.Length > 0 ? string.Join(", ", props) : ""; + Logger.Warn( + $"HdrpMaterialResolver: failed to resolve imported _BaseColorMap for profile '{profileName}' " + + $"from source material '{importedName}' (shader='{shaderName}', mainTexture={(hasMainTex ? "yes" : "no")}, textureProps=[{propDump}])."); + } + + private static void LogApronBaseAssignment(string profileName, Material importedMaterial, Texture assignedTexture, bool fromImported) + { + if (!VerboseResolverLogs) { + return; + } + + var importedName = importedMaterial ? importedMaterial.name : ""; + var textureName = assignedTexture ? assignedTexture.name : ""; + var key = $"{profileName}|{importedName}|{textureName}|{fromImported}"; + if (!_loggedApronBaseAssignments.Add(key)) { + return; + } + + var shaderName = importedMaterial && importedMaterial.shader ? importedMaterial.shader.name : ""; + var sourceProps = System.Array.Empty(); + if (fromImported && importedMaterial && assignedTexture) { + var names = importedMaterial.GetTexturePropertyNames(); + var matched = new List(); + for (var i = 0; i < names.Length; i++) { + var prop = names[i]; + if (string.IsNullOrWhiteSpace(prop)) { + continue; + } + var t = importedMaterial.GetTexture(prop); + if (t == assignedTexture) { + matched.Add(prop); + } + } + sourceProps = matched.ToArray(); + } + var src = sourceProps.Length > 0 ? string.Join(", ", sourceProps) : ""; + Logger.Warn( + $"HdrpMaterialResolver apron base assignment: profile='{profileName}', imported='{importedName}', " + + $"shader='{shaderName}', texture='{textureName}', fromImported={fromImported}, sourceProps=[{src}]"); + } + + private static void LogApronImportedMaterial(string profileName, Material imported) + { + if (!VerboseResolverLogs) { + return; + } + + if (profileName == null || profileName.IndexOf("Apron", System.StringComparison.OrdinalIgnoreCase) < 0) { + return; + } + if (!imported) { + Logger.Warn($"HdrpMaterialResolver apron imported material is null for profile '{profileName}'."); + return; + } + + var key = $"{profileName}|{imported.name}"; + if (!_loggedApronImportedDump.Add(key)) { + return; + } + + var shader = imported.shader ? imported.shader.name : ""; + var props = imported.GetTexturePropertyNames(); + var rows = new List(); + for (var i = 0; i < props.Length; i++) { + var p = props[i]; + if (string.IsNullOrWhiteSpace(p)) { + continue; + } + var t = imported.GetTexture(p); + rows.Add($"{p}={(t ? t.name : "")}"); + } + var dump = rows.Count > 0 ? string.Join(", ", rows) : ""; + Logger.Warn( + $"HdrpMaterialResolver apron imported material: profile='{profileName}', imported='{imported.name}', " + + $"shader='{shader}', mainTexture={(imported.mainTexture ? imported.mainTexture.name : "")}, textures=[{dump}]"); + } + + private void SetNormalMap(Material material, string property, VpeNormalMapRef textureRef, IVpeTextureProvider textures, Material importedMaterial) + { + if (textureRef == null || !material.HasProperty(property)) { + return; + } + + Texture texture = null; + var fromImportedMaterial = false; + if (!string.IsNullOrWhiteSpace(textureRef.TextureId)) { + texture = textures?.Get(textureRef.TextureId); + } + if (!texture && importedMaterial) { + texture = GetImportedTexture(importedMaterial, property); + fromImportedMaterial = texture; + } + if (!texture) { + return; + } + + // HDRP's _NormalMap expects a Unity "Normal Map" imported texture (DXT5nm-like swizzle + // path in UnpackNormalmapRGorAG). Textures arriving via the glb or the side-channel are + // plain RGB PNGs (see VpeNormalPackings.Rgb) because runtime-loaded textures can't carry + // Unity's import-time normal flag. Re-pack (A=R, G=G) so HDRP samples correctly. + var src = texture as Texture2D; + Texture repacked; + if (!src) { + repacked = texture; + } else if (_repackedNormalCache.TryGetValue(src, out var cached)) { + repacked = cached; + } else { + cached = fromImportedMaterial + ? RepackNormalMapForHdrpCpuFallback(src, runtimeCompress: textureRef.RuntimeCompress) + : RepackNormalMapForHdrp(src, textureRef.Packing, textureRef.RuntimeCompress); + _repackedNormalCache[src] = cached; + repacked = cached; + } + material.SetTexture(property, repacked); + material.SetTextureOffset(property, textureRef.Offset); + material.SetTextureScale(property, textureRef.Scale); + } + + // Maps v1 intent property names → a priority list of aliases likely to be present on a + // glTFast-imported material. glTFast uses different names depending on its target pipeline + // graph, and legacy Built-in materials may reuse yet other names. + private static Texture GetImportedTexture(Material imported, string vpeProperty) + { + string[] aliases = vpeProperty switch { + "_BaseColorMap" => new[] { + "_BaseColorMap", + "_BaseMap", + "_MainTex", + "baseColorTexture", + "baseColorMap", + "_BaseColorTexture", + "_ColorMap", + "_AlbedoMap", + "_DiffuseMap", + "_ColorTexture", + }, + "_NormalMap" => new[] { + "_NormalMap", + "_BumpMap", + "normalTexture", + "_NormalTexture", + }, + "_EmissiveColorMap" => new[] { + "_EmissiveColorMap", + "_EmissionMap", + "_EmissiveMap", + "emissiveTexture", + "emissionTexture", + "_EmissionColorMap", + }, + _ => System.Array.Empty(), + }; + foreach (var alias in aliases) { + if (!imported.HasProperty(alias)) { + continue; + } + var t = imported.GetTexture(alias); + if (t) { + return t; + } + } + + // Heuristic fallback for importer/pipeline-specific property names we don't explicitly + // know. This keeps opaque materials (like the apron base) from turning white if the glTF + // importer renamed the base map property. + string[] includeNeedles = vpeProperty switch { + "_BaseColorMap" => new[] { "base", "albedo", "diffuse", "color", "main" }, + "_NormalMap" => new[] { "normal", "bump" }, + "_EmissiveColorMap" => new[] { "emiss", "emission" }, + _ => null, + }; + if (includeNeedles != null && includeNeedles.Length > 0) { + var excludeNeedles = vpeProperty == "_BaseColorMap" + ? new[] { "normal", "bump", "mask", "metal", "rough", "smooth", "ao", "occlusion", "height", "parallax", "emiss", "emission" } + : System.Array.Empty(); + var propNames = imported.GetTexturePropertyNames(); + for (var i = 0; i < propNames.Length; i++) { + var prop = propNames[i]; + if (string.IsNullOrWhiteSpace(prop)) { + continue; + } + var lowered = prop.ToLowerInvariant(); + var include = false; + for (var n = 0; n < includeNeedles.Length; n++) { + if (lowered.Contains(includeNeedles[n])) { + include = true; + break; + } + } + if (!include) { + continue; + } + var excluded = false; + for (var n = 0; n < excludeNeedles.Length; n++) { + if (lowered.Contains(excludeNeedles[n])) { + excluded = true; + break; + } + } + if (excluded) { + continue; + } + var t = imported.GetTexture(prop); + if (t) { + return t; + } + } + } + + // Last-resort safety net for unknown shader graphs: use mainTexture only. Avoid selecting + // arbitrary texture properties here (mask/ORM maps can make surfaces appear white). + if (vpeProperty == "_BaseColorMap") { + var main = GetMainTextureSafe(imported); + if (main) { + return main; + } + } + return null; + } + + private static Texture GetMainTextureSafe(Material material) + { + if (!material) { + return null; + } + + try { + return material.mainTexture; + } catch { + return null; + } + } + + private static Texture RepackNormalMapForHdrp(Texture2D source, string packing, bool runtimeCompress) + { + // Only need to re-pack plain-RGB normals. If the source was already dxt5nm/rg, leave it. + if (packing != VpeNormalPackings.Rgb || !source) { + return source; + } + + // Temporary safety valve while we verify that the GPU repack path preserves + // the same relief response as Unity's CPU-side runtime repack. + return RepackNormalMapForHdrpCpuFallback(source, runtimeCompress: runtimeCompress); + + var repackMaterial = GetOrCreateNormalRepackMaterial(); + if (!repackMaterial) { + return RepackNormalMapForHdrpCpuFallback(source, runtimeCompress: runtimeCompress); + } + + var repacked = new RenderTexture(source.width, source.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear) { + name = $"{source.name} (NormalRepack)", + wrapMode = source.wrapMode, + filterMode = source.filterMode, + anisoLevel = Mathf.Max(1, source.anisoLevel), + useMipMap = true, + autoGenerateMips = false, + hideFlags = HideFlags.HideAndDontSave, + }; + repacked.Create(); + try { + repackMaterial.SetTexture(MainTextureProperty, source); + Graphics.Blit(source, repacked, repackMaterial, 0); + repacked.GenerateMips(); + return repacked; + } catch (Exception e) { + DestroyRuntimeObject(repacked); + if (!_loggedNormalRepackGpuFallback) { + _loggedNormalRepackGpuFallback = true; + Logger.Warn(e, "HdrpMaterialResolver: GPU normal repack failed. Falling back to CPU normal repack."); + } + return RepackNormalMapForHdrpCpuFallback(source, runtimeCompress: runtimeCompress); + } + } + + private void PruneRepackedNormalCache() + { + if (_repackedNormalCache.Count == 0) { + return; + } + + var staleKeys = new List(); + foreach (var pair in _repackedNormalCache) { + if (pair.Key) { + continue; + } + + DestroyRuntimeObject(pair.Value); + staleKeys.Add(pair.Key); + } + + for (var i = 0; i < staleKeys.Count; i++) { + _repackedNormalCache.Remove(staleKeys[i]); + } + } + + private static Material GetOrCreateNormalRepackMaterial() + { + if (_normalRepackMaterial) { + return _normalRepackMaterial; + } + if (_normalRepackMaterialQueried) { + return null; + } + + _normalRepackMaterialQueried = true; + var shader = UnityEngine.Resources.Load(NormalRepackShaderResourcePath) + ?? Shader.Find("Hidden/VPE/PackNormalForHdrp"); + if (!shader) { + if (!_loggedMissingNormalRepackShader) { + _loggedMissingNormalRepackShader = true; + Logger.Warn($"HdrpMaterialResolver: failed to load Resources/{NormalRepackShaderResourcePath}. Falling back to CPU normal repack."); + } + return null; + } + + _normalRepackMaterial = new Material(shader) { + name = "VPE HDRP Normal Repack", + hideFlags = HideFlags.HideAndDontSave, + }; + return _normalRepackMaterial; + } + + private static Texture2D RepackNormalMapForHdrpCpuFallback( + Texture2D source, + bool flipRed = false, + bool flipGreen = false, + bool runtimeCompress = true) + { + var rt = RenderTexture.GetTemporary(source.width, source.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear); + var previous = RenderTexture.active; + try { + Graphics.Blit(source, rt); + RenderTexture.active = rt; + var repacked = new Texture2D(source.width, source.height, TextureFormat.RGBA32, true, true) { + name = $"{source.name} (NormalRepack)", + wrapMode = source.wrapMode, + filterMode = source.filterMode, + anisoLevel = Mathf.Max(1, source.anisoLevel), + hideFlags = HideFlags.HideAndDontSave, + }; + var pixels = new Texture2D(source.width, source.height, TextureFormat.RGBA32, false, true); + pixels.ReadPixels(new Rect(0, 0, source.width, source.height), 0, 0); + pixels.Apply(false, false); + var raw = pixels.GetPixels32(); + for (var i = 0; i < raw.Length; i++) { + var p = raw[i]; + var x = flipRed ? (byte)(255 - p.r) : p.r; + var y = flipGreen ? (byte)(255 - p.g) : p.g; + // DXT5nm-style payload for Unity/HDRP unpack: X lives in A, Y in G, and R must be 1 + // so UnpackNormalmapRGorAG's "packednormal.x *= packednormal.w" reconstructs X. + raw[i] = new Color32(255, y, 255, x); + } + repacked.SetPixels32(raw); + repacked.Apply(true, false); + if (runtimeCompress) { + try { + repacked.Compress(highQuality: true); + } catch (Exception e) { + Logger.Warn(e, $"HdrpMaterialResolver: failed compressing normal map '{repacked.name}'. Keeping uncompressed texture."); + } + } + repacked.Apply(true, true); + DestroyRuntimeObject(pixels); + return repacked; + } finally { + RenderTexture.active = previous; + RenderTexture.ReleaseTemporary(rt); + } + } + + private static void DestroyRuntimeObject(UnityEngine.Object obj) + { + if (!obj) { + return; + } + + if (Application.isPlaying) { + UnityEngine.Object.Destroy(obj); + } else { + UnityEngine.Object.DestroyImmediate(obj); + } + } + + private sealed class ResolverDiagnostics + { + public int CreateCalls; + public int LitBuilds; + public int DecalBuilds; + public long MaterialCloneMilliseconds; + public long ValidateMilliseconds; + public long NormalMapMilliseconds; + public long DiffusionMilliseconds; + + public void Reset() + { + CreateCalls = 0; + LitBuilds = 0; + DecalBuilds = 0; + MaterialCloneMilliseconds = 0; + ValidateMilliseconds = 0; + NormalMapMilliseconds = 0; + DiffusionMilliseconds = 0; + } + + public string ToSummaryString() + { + var builder = new StringBuilder(128); + builder.Append("createCalls=").Append(CreateCalls) + .Append(", lit=").Append(LitBuilds) + .Append(", decal=").Append(DecalBuilds) + .Append(", cloneMs=").Append(MaterialCloneMilliseconds) + .Append(", validateMs=").Append(ValidateMilliseconds) + .Append(", normalMs=").Append(NormalMapMilliseconds) + .Append(", diffusionMs=").Append(DiffusionMilliseconds); + return builder.ToString(); + } + } + } +} diff --git a/Runtime/HdrpMaterialResolver.cs.meta b/Runtime/HdrpMaterialResolver.cs.meta new file mode 100644 index 0000000..81f54a4 --- /dev/null +++ b/Runtime/HdrpMaterialResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f1c649f4ccf4d548509d4a0a6b2ed11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/MaterialConverter.cs b/Runtime/MaterialConverter.cs index bd0e648..40d9ed9 100644 --- a/Runtime/MaterialConverter.cs +++ b/Runtime/MaterialConverter.cs @@ -223,19 +223,23 @@ public void SetEmissiveColor(MaterialPropertyBlock propBlock, Color color) return material.GetColor(EmissiveColorHDR); } - public void SetEmissiveIntensity(Material material, MaterialPropertyBlock propBlock, float intensity) - { - var ldr = material.GetColor(EmissiveColorLDR); - var hdr = ldr * intensity; - // https://issuetracker.unity3d.com/issues/hdrp-setting-emission-property-emissivecolor-via-material-and-via-material-property-block-leads-to-different-results - propBlock.SetColor(EmissiveColorHDR, hdr.gamma); - } - - public float GetEmissiveIntensity(Material material) - { - if (!material) { - return 0; - } + public void SetEmissiveIntensity(Material material, MaterialPropertyBlock propBlock, float intensity) + { + if (!material || !material.HasProperty(EmissiveColorLDR) || !material.HasProperty(EmissiveColorHDR)) { + return; + } + + var ldr = material.GetColor(EmissiveColorLDR); + var hdr = ldr * intensity; + // https://issuetracker.unity3d.com/issues/hdrp-setting-emission-property-emissivecolor-via-material-and-via-material-property-block-leads-to-different-results + propBlock.SetColor(EmissiveColorHDR, hdr.gamma); + } + + public float GetEmissiveIntensity(Material material) + { + if (!material || !material.HasProperty(EmissiveColorHDR) || !material.HasProperty(EmissiveColorLDR)) { + return 0; + } var hdr = material.GetColor(EmissiveColorHDR); var ldr = material.GetColor(EmissiveColorLDR); var intensity = hdr.r > 0 // look at the first non-0 value diff --git a/Runtime/VisualPinball.Engine.Unity.Hdrp.asmdef b/Runtime/VisualPinball.Engine.Unity.Hdrp.asmdef index 482505b..369afcc 100644 --- a/Runtime/VisualPinball.Engine.Unity.Hdrp.asmdef +++ b/Runtime/VisualPinball.Engine.Unity.Hdrp.asmdef @@ -2,10 +2,12 @@ "name": "VisualPinball.Engine.Unity.Hdrp", "rootNamespace": "VisualPinball.Engine.Unity.Hdrp", "references": [ - "VisualPinball.Engine", - "VisualPinball.Unity", - "Unity.RenderPipelines.HighDefinition.Runtime", - "Unity.RenderPipelines.HighDefinition.Config.Runtime" + "VisualPinball.Engine", + "VisualPinball.Unity", + "glTFast", + "Unity.RenderPipelines.HighDefinition.Runtime", + "Unity.RenderPipelines.HighDefinition.Config.Runtime", + "Unity.RenderPipelines.Core.Runtime" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Runtime/VpeMaterialResolverBootstrap.cs b/Runtime/VpeMaterialResolverBootstrap.cs new file mode 100644 index 0000000..e301bd1 --- /dev/null +++ b/Runtime/VpeMaterialResolverBootstrap.cs @@ -0,0 +1,121 @@ +// Visual Pinball Engine +// Copyright (C) 2026 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using System.Collections.Generic; +using UnityEngine; +using VisualPinball.Unity; + +namespace VisualPinball.Engine.Unity.Hdrp +{ + // Registers the Player's HDRP resolver with VpeMaterialResolver before any scene loads. + // Template materials live under Assets/Runtime/Resources/Materials/; Resources.Load pulls them + // into the build automatically, which is exactly the leverage we need — the template's keyword + // combination is what the build compiler keeps on HDRP/Lit. + public static class VpeMaterialResolverBootstrap + { + private const string LitOpaqueTemplatePath = "Materials/VpeLitOpaqueTemplate"; + private const string LitTransparentTemplatePath = "Materials/VpeLitTransparentTemplate"; + private const string LitTranslucentThinTemplatePath = "Materials/VpeLitTranslucentThinTemplate"; + private const string LitTranslucentPlanarTemplatePath = "Materials/VpeLitTranslucentPlanarTemplate"; + private const string LitTranslucentSphereTemplatePath = "Materials/VpeLitTranslucentSphereTemplate"; + private const string FabricSilkTemplatePath = "Materials/VpeLitFabricSilkTemplate"; + private const string DecalTemplatePath = "Materials/VpeDecalTemplate"; + private const string MetalScratchedOverridePath = "Materials/VpeMeasured/MetalScratched"; + private const string RubberDirtWhiteOverridePath = "Materials/VpeMeasured/RubberDirt White"; + private const string DotMatrixDisplayOverridePath = "Materials/VpeMeasured/Dot Matrix Display (SRP)"; + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + private static void Register() + { + // Fully qualified: VisualPinball.Engine has a .Resources sub-namespace that shadows + // UnityEngine.Resources for code living under VisualPinball.Engine.Player. + var litOpaque = UnityEngine.Resources.Load(LitOpaqueTemplatePath); + var litTransparent = UnityEngine.Resources.Load(LitTransparentTemplatePath); + var litTranslucentThin = UnityEngine.Resources.Load(LitTranslucentThinTemplatePath); + var litTranslucentPlanar = UnityEngine.Resources.Load(LitTranslucentPlanarTemplatePath); + var litTranslucentSphere = UnityEngine.Resources.Load(LitTranslucentSphereTemplatePath); + var fabricSilk = UnityEngine.Resources.Load(FabricSilkTemplatePath); + var decalTemplate = UnityEngine.Resources.Load(DecalTemplatePath); + var materialOverrides = new Dictionary(System.StringComparer.Ordinal); + RegisterMaterialOverride(materialOverrides, "MetalScratched", MetalScratchedOverridePath); + RegisterMaterialOverride(materialOverrides, "RubberDirt White", RubberDirtWhiteOverridePath); + RegisterMaterialOverride(materialOverrides, "Dot Matrix Display (SRP)", DotMatrixDisplayOverridePath); + if (!litOpaque) { + Debug.LogError( + $"VpeMaterialResolverBootstrap: could not load '{LitOpaqueTemplatePath}' from Resources. " + + "Imported tables will fall back to the glTF-imported materials."); + return; + } + if (!litTransparent) { + Debug.LogWarning( + $"VpeMaterialResolverBootstrap: could not load '{LitTransparentTemplatePath}' from Resources. " + + "Transparent surfaces will fall back to the opaque template."); + } + if (!litTranslucentThin) { + Debug.LogWarning( + $"VpeMaterialResolverBootstrap: could not load '{LitTranslucentThinTemplatePath}' from Resources. " + + "Thin translucent (ramp plastics) will fall back to plain transparent."); + } + if (!litTranslucentPlanar) { + Debug.LogWarning( + $"VpeMaterialResolverBootstrap: could not load '{LitTranslucentPlanarTemplatePath}' from Resources. " + + "Planar translucent (inserts, hard plastics) will fall back to plain transparent."); + } + if (!litTranslucentSphere) { + Debug.LogWarning( + $"VpeMaterialResolverBootstrap: could not load '{LitTranslucentSphereTemplatePath}' from Resources. " + + "Sphere translucent (posts, rounded plastics) will fall back to planar/thin."); + } + if (!fabricSilk) { + Debug.LogWarning( + $"VpeMaterialResolverBootstrap: could not load '{FabricSilkTemplatePath}' from Resources. " + + "vpe.fabric.silk profiles will fall back to glTF-imported materials."); + } + if (!decalTemplate) { + Debug.LogWarning( + $"VpeMaterialResolverBootstrap: could not load '{DecalTemplatePath}' from Resources. " + + "vpe.decal profiles will fall back to glTF-imported materials."); + } + Debug.Log( + $"VpeMaterialResolverBootstrap: templates loaded. " + + $"opaque={litOpaque.name}, " + + $"transparent={(litTransparent ? litTransparent.name : "")}, " + + $"translucent-thin={(litTranslucentThin ? litTranslucentThin.name : "")}, " + + $"translucent-planar={(litTranslucentPlanar ? litTranslucentPlanar.name : "")}, " + + $"translucent-sphere={(litTranslucentSphere ? litTranslucentSphere.name : "")}, " + + $"fabric-silk={(fabricSilk ? fabricSilk.name : "")}, " + + $"decal={(decalTemplate ? decalTemplate.name : "")}."); + VpeMaterialResolver.Register(new HdrpMaterialResolver( + litOpaque, + litTransparent, + litTranslucentThin, + litTranslucentPlanar, + litTranslucentSphere, + fabricSilk, + decalTemplate, + materialOverrides + )); + } + + private static void RegisterMaterialOverride(Dictionary overrides, string profileName, string resourcePath) + { + var material = UnityEngine.Resources.Load(resourcePath); + if (material) { + overrides[profileName] = material; + } + } + } +} diff --git a/Runtime/VpeMaterialResolverBootstrap.cs.meta b/Runtime/VpeMaterialResolverBootstrap.cs.meta new file mode 100644 index 0000000..189a174 --- /dev/null +++ b/Runtime/VpeMaterialResolverBootstrap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3183e9e3c7be4a35a5a7bcf5f4f74f48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: -1000 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package.json b/package.json index 823e3fa..1d00043 100644 --- a/package.json +++ b/package.json @@ -7,11 +7,11 @@ "Unity", "HDRP" ], - "unity": "6000.0", - "unityRelease": "37f1", + "unity": "6000.5", + "unityRelease": "0f1", "dependencies": { - "com.unity.render-pipelines.high-definition": "17.0.3", - "com.unity.render-pipelines.high-definition-config": "17.0.3", + "com.unity.render-pipelines.high-definition": "17.5.0", + "com.unity.render-pipelines.high-definition-config": "17.5.0", "org.visualpinball.engine.unity": "0.0.1-preview.180", "org.visualpinball.unity.assets": "0.0.1-preview.6" },