diff --git a/Assets/GameAssets/Materials/Tex_Marble_SlabWhite2.mat b/Assets/GameAssets/Materials/Tex_Marble_SlabWhite2.mat index 28e2d984..e86e18d8 100644 --- a/Assets/GameAssets/Materials/Tex_Marble_SlabWhite2.mat +++ b/Assets/GameAssets/Materials/Tex_Marble_SlabWhite2.mat @@ -25,7 +25,7 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: Tex_Marble_SlabWhite2 m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _SPECGLOSSMAP + m_ShaderKeywords: m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -78,7 +78,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _SpecGlossMap: - m_Texture: {fileID: 2800000, guid: 1923e3cc893838d4b9854b9021e28935, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Tex_D: @@ -163,7 +163,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0 + - _Glossiness: 0.501 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Materials/Tex_Marble_TilesSquare0a.mat b/Assets/GameAssets/Materials/Tex_Marble_TilesSquare0a.mat index b3961e33..ca7cb5ef 100644 --- a/Assets/GameAssets/Materials/Tex_Marble_TilesSquare0a.mat +++ b/Assets/GameAssets/Materials/Tex_Marble_TilesSquare0a.mat @@ -9,7 +9,7 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: Tex_Marble_TilesSquare0a m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _NORMALMAP _SPECGLOSSMAP + m_ShaderKeywords: _NORMALMAP m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -62,7 +62,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _SpecGlossMap: - m_Texture: {fileID: 2800000, guid: eca7c0f583c85414db7db984e6ecdaad, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Tex_D: @@ -147,7 +147,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0 + - _Glossiness: 0.506 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Materials/Tex_Plaster_Plain.mat b/Assets/GameAssets/Materials/Tex_Plaster_Plain.mat index a5100373..ba793a6f 100644 --- a/Assets/GameAssets/Materials/Tex_Plaster_Plain.mat +++ b/Assets/GameAssets/Materials/Tex_Plaster_Plain.mat @@ -25,7 +25,7 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: Tex_Plaster_Plain m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _NORMALMAP _SPECGLOSSMAP + m_ShaderKeywords: _NORMALMAP m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 1 @@ -78,7 +78,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _SpecGlossMap: - m_Texture: {fileID: 2800000, guid: aba30b7103546b34aad978776757699a, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Tex_D: @@ -134,7 +134,7 @@ Material: - _AlphaToMaskInspectorValue: 0 - _Anisotropy: 0 - _BlendMode: 0 - - _BumpScale: 1 + - _BumpScale: 0.5 - _CoatMask: 0 - _ConservativeDepthOffsetEnable: 0 - _CullMode: 0 @@ -163,7 +163,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0 + - _Glossiness: 1 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Materials/Tex_Wood_GluLamBeam_SideNew.mat b/Assets/GameAssets/Materials/Tex_Wood_GluLamBeam_SideNew.mat index 146784c1..ee1b7059 100644 --- a/Assets/GameAssets/Materials/Tex_Wood_GluLamBeam_SideNew.mat +++ b/Assets/GameAssets/Materials/Tex_Wood_GluLamBeam_SideNew.mat @@ -25,7 +25,7 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: Tex_Wood_GluLamBeam_SideNew m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _NORMALMAP _SPECGLOSSMAP + m_ShaderKeywords: _NORMALMAP m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 1 @@ -78,7 +78,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _SpecGlossMap: - m_Texture: {fileID: 2800000, guid: 1afd64b7a911a5549a6eef2fe5cdd7d7, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Tex_D: @@ -163,7 +163,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0 + - _Glossiness: 0.926 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Materials/Tex_vbiiegp_White.mat b/Assets/GameAssets/Materials/Tex_vbiiegp_White.mat index b76c1367..de1f67f7 100644 --- a/Assets/GameAssets/Materials/Tex_vbiiegp_White.mat +++ b/Assets/GameAssets/Materials/Tex_vbiiegp_White.mat @@ -163,7 +163,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0.261 + - _Glossiness: 0.8 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Materials/Tex_vbiiegp_green.mat b/Assets/GameAssets/Materials/Tex_vbiiegp_green.mat index e5463005..66d00bf0 100644 --- a/Assets/GameAssets/Materials/Tex_vbiiegp_green.mat +++ b/Assets/GameAssets/Materials/Tex_vbiiegp_green.mat @@ -163,7 +163,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0.261 + - _Glossiness: 0.5 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Materials/Tex_vbiiegp_grey.mat b/Assets/GameAssets/Materials/Tex_vbiiegp_grey.mat index 8f902114..85e5491c 100644 --- a/Assets/GameAssets/Materials/Tex_vbiiegp_grey.mat +++ b/Assets/GameAssets/Materials/Tex_vbiiegp_grey.mat @@ -163,7 +163,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0.261 + - _Glossiness: 0.5 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Materials/TexturesCom_Vents0021.mat b/Assets/GameAssets/Materials/TexturesCom_Vents0021.mat index 2316cc26..82d9c7df 100644 --- a/Assets/GameAssets/Materials/TexturesCom_Vents0021.mat +++ b/Assets/GameAssets/Materials/TexturesCom_Vents0021.mat @@ -9,7 +9,7 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: TexturesCom_Vents0021 m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _ALPHAPREMULTIPLY_ON + m_ShaderKeywords: _ALPHABLEND_ON m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -218,7 +218,7 @@ Material: - _Metallic: 0 - _MetallicRemapMax: 1 - _MetallicRemapMin: 0 - - _Mode: 3 + - _Mode: 2 - _NormalMapSpace: 0 - _NormalScale: 1 - _OcclusionStrength: 1 @@ -241,7 +241,7 @@ Material: - _SpecularAAThreshold: 0.2 - _SpecularHighlights: 1 - _SpecularOcclusionMode: 1 - - _SrcBlend: 1 + - _SrcBlend: 5 - _StencilRef: 0 - _StencilRefDepth: 0 - _StencilRefGBuffer: 2 @@ -277,7 +277,7 @@ Material: 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} + - _Color: {r: 0.51886785, g: 0.51886785, b: 0.51886785, 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} diff --git a/Assets/GameAssets/Materials/玻璃.mat b/Assets/GameAssets/Materials/玻璃.mat index 82dfed35..4fcde992 100644 --- a/Assets/GameAssets/Materials/玻璃.mat +++ b/Assets/GameAssets/Materials/玻璃.mat @@ -198,7 +198,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0.484 + - _Glossiness: 0.135 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 @@ -277,7 +277,7 @@ Material: m_Colors: - _BaseColor: {r: 0.20689571, g: 0.37144187, b: 0.2598333, a: 0.6} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - - _Color: {r: 0.4134478, g: 0.53773576, b: 0.4519179, a: 0} + - _Color: {r: 0.29436633, g: 0.3301887, b: 0.30556083, a: 0} - _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} diff --git a/Assets/GameAssets/Materials/磨砂玻璃.mat b/Assets/GameAssets/Materials/磨砂玻璃.mat index 2593db49..3c04f0a5 100644 --- a/Assets/GameAssets/Materials/磨砂玻璃.mat +++ b/Assets/GameAssets/Materials/磨砂玻璃.mat @@ -293,7 +293,7 @@ Material: m_Colors: - _BaseColor: {r: 0.37750837, g: 0.56427705, b: 0.43258724, a: 0.9} - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} - - _Color: {r: 0.50743145, g: 0.5943396, b: 0.5335039, a: 0.9} + - _Color: {r: 0.56585974, g: 0.6415094, b: 0.5888835, a: 0.84313726} - _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} diff --git a/Assets/GameAssets/Models/营业厅配景/材质/Tex_OfficeChair_0a.mat b/Assets/GameAssets/Models/营业厅配景/材质/Tex_OfficeChair_0a.mat index 25d63ca9..557d9c58 100644 --- a/Assets/GameAssets/Models/营业厅配景/材质/Tex_OfficeChair_0a.mat +++ b/Assets/GameAssets/Models/营业厅配景/材质/Tex_OfficeChair_0a.mat @@ -147,7 +147,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0 + - _Glossiness: 0.627 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Models/营业厅配景/配镜相关材质/YH_YYT_T020.mat b/Assets/GameAssets/Models/营业厅配景/配镜相关材质/YH_YYT_T020.mat index 21cb40fa..a800c114 100644 --- a/Assets/GameAssets/Models/营业厅配景/配镜相关材质/YH_YYT_T020.mat +++ b/Assets/GameAssets/Models/营业厅配景/配镜相关材质/YH_YYT_T020.mat @@ -263,7 +263,7 @@ Material: - _EnableGeometricSpecularAA: 0 - _EnergyConservingSpecularColor: 1 - _GlossMapScale: 1 - - _Glossiness: 0.328 + - _Glossiness: 0.907 - _GlossyReflections: 1 - _HeightAmplitude: 0.02 - _HeightCenter: 0.5 diff --git a/Assets/GameAssets/Scenes/营业厅通用.asset b/Assets/GameAssets/Scenes/营业厅通用.asset index 50b6f16a..06e26f2f 100644 --- a/Assets/GameAssets/Scenes/营业厅通用.asset +++ b/Assets/GameAssets/Scenes/营业厅通用.asset @@ -1,5 +1,42 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8812053221142558256 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 7a34fa72bd4185749832024e9c8010bf, type: 3} + m_Name: ScreenSpaceReflections + m_EditorClassIdentifier: + active: 0 + enabled: + overrideState: 1 + value: 1 + preset: + overrideState: 1 + value: 5 + maximumIterationCount: + overrideState: 0 + value: 16 + resolution: + overrideState: 0 + value: 0 + thickness: + overrideState: 0 + value: 8 + maximumMarchDistance: + overrideState: 1 + value: 100 + distanceFade: + overrideState: 1 + value: 0.001 + vignette: + overrideState: 0 + value: 0.5 --- !u!114 &-5088152751173518735 MonoBehaviour: m_ObjectHideFlags: 3 @@ -1421,6 +1458,7 @@ MonoBehaviour: - {fileID: -2577705183074798555} - {fileID: -5088152751173518735} - {fileID: 3711592583115391261} + - {fileID: -8812053221142558256} --- !u!114 &3711592583115391261 MonoBehaviour: m_ObjectHideFlags: 3 diff --git a/Assets/Resources/Scripts/Main.cs b/Assets/Resources/Scripts/Main.cs index f56a3e0b..cd3a51e1 100644 --- a/Assets/Resources/Scripts/Main.cs +++ b/Assets/Resources/Scripts/Main.cs @@ -55,7 +55,7 @@ public class Main : UIBase //切换视角时相机移动速度 private float camMoveSpeed=6; //待机时长 - private float waitTime=5; + private float waitTime=120; Tweener t_camAnimAngle; Tweener t_camAnimPos; diff --git a/Assets/ShinySSRR Bundle.meta b/Assets/ShinySSRR Bundle.meta new file mode 100644 index 00000000..c2a366d5 --- /dev/null +++ b/Assets/ShinySSRR Bundle.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 905fb51feceb940d59cfdc43db34c4a1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR Bundle/Builtin.meta b/Assets/ShinySSRR Bundle/Builtin.meta new file mode 100644 index 00000000..3574d492 --- /dev/null +++ b/Assets/ShinySSRR Bundle/Builtin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fb4ba7bf14074ced96eed25f1a064e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR Bundle/Builtin/ShinySSRR_Builtin.unitypackage b/Assets/ShinySSRR Bundle/Builtin/ShinySSRR_Builtin.unitypackage new file mode 100644 index 00000000..16b2d81c Binary files /dev/null and b/Assets/ShinySSRR Bundle/Builtin/ShinySSRR_Builtin.unitypackage differ diff --git a/Assets/ShinySSRR Bundle/Builtin/ShinySSRR_Builtin.unitypackage.meta b/Assets/ShinySSRR Bundle/Builtin/ShinySSRR_Builtin.unitypackage.meta new file mode 100644 index 00000000..cd0b5ab1 --- /dev/null +++ b/Assets/ShinySSRR Bundle/Builtin/ShinySSRR_Builtin.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c772529a50726457a8a776aa05ddf703 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR Bundle/URP.meta b/Assets/ShinySSRR Bundle/URP.meta new file mode 100644 index 00000000..e0ed4427 --- /dev/null +++ b/Assets/ShinySSRR Bundle/URP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c78775a88d77047438839433d0738c53 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR Bundle/URP/ShinySSRR_URP.unitypackage b/Assets/ShinySSRR Bundle/URP/ShinySSRR_URP.unitypackage new file mode 100644 index 00000000..5eea2666 Binary files /dev/null and b/Assets/ShinySSRR Bundle/URP/ShinySSRR_URP.unitypackage differ diff --git a/Assets/ShinySSRR Bundle/URP/ShinySSRR_URP.unitypackage.meta b/Assets/ShinySSRR Bundle/URP/ShinySSRR_URP.unitypackage.meta new file mode 100644 index 00000000..ba0036e6 --- /dev/null +++ b/Assets/ShinySSRR Bundle/URP/ShinySSRR_URP.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f085e05cb66e14aa1b720ef0b8768ee7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR Bundle/_README.txt b/Assets/ShinySSRR Bundle/_README.txt new file mode 100644 index 00000000..5c834a4a --- /dev/null +++ b/Assets/ShinySSRR Bundle/_README.txt @@ -0,0 +1,20 @@ + +This asset contains 2 main packages. Please use the appropriate package according to the rendering pipeline of your project: + +** Built-in pipeline ** +- Import the package from the folder /Builtin. + +** Universal Rendering Pipeline ** +- Import the package from the folder /URP + + +Once imported, read the PDF documentation for additional details. +Thanks for using Shiny SSRR. + + +Questions / Suggestions / Support +--------------------------------- +* Website-Forum: https://kronnect.com +* Support: contact@kronnect.com +* Twitter: @Kronnect + diff --git a/Assets/ShinySSRR Bundle/_README.txt.meta b/Assets/ShinySSRR Bundle/_README.txt.meta new file mode 100644 index 00000000..f12086c1 --- /dev/null +++ b/Assets/ShinySSRR Bundle/_README.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 70ef9ec3fa1bf4639a43acfbbf066247 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR.meta b/Assets/ShinySSRR.meta new file mode 100644 index 00000000..156cc758 --- /dev/null +++ b/Assets/ShinySSRR.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47a5c523ba966461db59c29625db0874 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo.meta b/Assets/ShinySSRR/Demo.meta new file mode 100644 index 00000000..f178af18 --- /dev/null +++ b/Assets/ShinySSRR/Demo.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 271fbc457f4af4a44a2a7ce4705d2df2 +folderAsset: yes +timeCreated: 1542876294 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Materials.meta b/Assets/ShinySSRR/Demo/Materials.meta new file mode 100644 index 00000000..414b5cbf --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cb45faf5ebb76442a9c88b4e977fa069 +folderAsset: yes +timeCreated: 1542877572 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Materials/Floor.mat b/Assets/ShinySSRR/Demo/Materials/Floor.mat new file mode 100644 index 00000000..76c5c12f --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Floor.mat @@ -0,0 +1,119 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8558442800701317947 +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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 2 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Floor + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 40351333731c94777b93eda89ce1d4eb, type: 3} + m_Scale: {x: 2, y: 2} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 69735cf47f0104165973f07ff96d4d98, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 10, y: 10} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 2, y: 2} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 40351333731c94777b93eda89ce1d4eb, type: 3} + m_Scale: {x: 2, y: 2} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 943181a31ab5a411496dc4b0d6a41630, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 0.02 + - _DstBlend: 0 + - _EmissionScaleUI: 1 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0.538 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 0.111 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.0104 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.499 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0.99999994} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 1, g: 1, b: 1, a: 1} + - _SpecularColor: {r: 0.11764706, g: 0.11764706, b: 0.11764706, a: 1} diff --git a/Assets/ShinySSRR/Demo/Materials/Floor.mat.meta b/Assets/ShinySSRR/Demo/Materials/Floor.mat.meta new file mode 100644 index 00000000..7968540f --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Floor.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: c5e68f4db72684d25be883ee27d7fa97 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/Assets/ShinySSRR/Demo/Materials/Gold.mat b/Assets/ShinySSRR/Demo/Materials/Gold.mat new file mode 100644 index 00000000..c22e905c --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Gold.mat @@ -0,0 +1,119 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5610605729892836785 +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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 2 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Gold + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.9 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.908 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.96078426, g: 0.8392157, b: 0.47450978, a: 1} + - _Color: {r: 0.9607843, g: 0.8392157, b: 0.4745098, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SpecularColor: {r: 0.8088235, g: 0.6295969, b: 0.3033088, a: 1} diff --git a/Assets/ShinySSRR/Demo/Materials/Gold.mat.meta b/Assets/ShinySSRR/Demo/Materials/Gold.mat.meta new file mode 100644 index 00000000..d7703450 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Gold.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 5096e016b7e68464899a979f01e98542 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/Assets/ShinySSRR/Demo/Materials/Mirror.mat b/Assets/ShinySSRR/Demo/Materials/Mirror.mat new file mode 100644 index 00000000..8540e1ad --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Mirror.mat @@ -0,0 +1,109 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mirror + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 1 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} +--- !u!114 &5106466146314827787 +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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 2 diff --git a/Assets/ShinySSRR/Demo/Materials/Mirror.mat.meta b/Assets/ShinySSRR/Demo/Materials/Mirror.mat.meta new file mode 100644 index 00000000..fa9a049b --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Mirror.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 823e4ead765ed42a58a2334b8058ca00 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Materials/PlasticGlossy.mat b/Assets/ShinySSRR/Demo/Materials/PlasticGlossy.mat new file mode 100644 index 00000000..92612d93 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/PlasticGlossy.mat @@ -0,0 +1,119 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2992342339722848979 +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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 2 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PlasticGlossy + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.633 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.8 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0, g: 0.78942597, b: 0.79607844, a: 1} + - _Color: {r: 0, g: 0.78942597, b: 0.79607844, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SpecularColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/Assets/ShinySSRR/Demo/Materials/PlasticGlossy.mat.meta b/Assets/ShinySSRR/Demo/Materials/PlasticGlossy.mat.meta new file mode 100644 index 00000000..3620f31e --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/PlasticGlossy.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 1f83895e6354f411da22ab491b664095 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/Assets/ShinySSRR/Demo/Materials/SHINY.asset b/Assets/ShinySSRR/Demo/Materials/SHINY.asset new file mode 100644 index 00000000..d4f2f3d6 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/SHINY.asset @@ -0,0 +1,165 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SHINY + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 1296 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 526 + localAABB: + m_Center: {x: 2.0361328, y: -1.2124023, z: 0.125} + m_Extent: {x: 2.0361328, y: 0.73095703, z: 0.125} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 0 + m_IndexBuffer: 3500000001003500010002003500020003003500030004003500040005003500050006003500060007000b000c000d000b000d000e000b000e000f000b000f0010000b00100011000b00110012000b00120013000b00130014000b00140015000b0015001600160017001800160018001900160019001a0016001a001b0016001b001c0016001c001d0016001d001e0016001e001f0016001f002000160020002100160021002200160022002300160023002400270028002900270029002a0027002a002b0027002b002c0027002c002d0027002d002e0027002e002f0027002f0030003000310032003000320033003000330034003000340035003000350007003000070008003000080009000b00160024000b00240025000b00250026000b0026002700270030000900270009000a000a000b002700370036006b00380037006b00390038006b003a0039006b003b003a006b003c003b006b003d003c006b004300420041004400430041004500440041004600450041004700460041004800470041004900480041004a00490041004b004a0041004c004b0041004e004d004c004f004e004c0050004f004c00510050004c00520051004c00530052004c00540053004c00550054004c00560055004c00570056004c00580057004c00590058004c005a0059004c005f005e005d0060005f005d00610060005d00620061005d00630062005d00640063005d00650064005d00660065005d006800670066006900680066006a00690066006b006a0066003d006b0066003e003d0066003f003e0066005a004c0041005b005a0041005c005b0041005d005c0041003f0066005d0040003f005d005d00410040006c006d006e006d006f006e00700071007200710073007200720073007400730075007400740075007600750077007600760077007800770079007800780079007a0079007b007a007a007b007c007b007d007c007c007d007e007d007f007e007e007f0080007f0081008000800081008200810083008200820083008400830085008400840085008600850087008600860087008800870089008800880089008a0089008b008a008a008b008c008b008d008c008c008d008e008d008f008e008e008f0090008f0091009000900091009200910093009200920093009400930095009400940095009600950097009600960097009800970099009800980099009a0099009b009a009a009b009c009b009d009c009c009d009e009d009f009e009e009f00a0009f00a100a000a000a100a200a100a300a200a200a300a400a300a500a400a600a700a800a700a900a800aa00ab00ac00ab00ad00ac00ac00ad00ae00ad00af00ae00ae00af00b000af00b100b000b000b100b200b100b300b200b200b300b400b300b500b400b400b500b600b500b700b600b600b700b800b700b900b800b800b900ba00b900bb00ba00ba00bb00bc00bb00bd00bc00bc00bd00be00bd00bf00be00be00bf00c000bf00c100c000c000c100c200c100c300c200c200c300c400c300c500c400c400c500c600c500c700c600c600c700c800c700c900c800c800c900ca00c900cb00ca00ca00cb00cc00cb00cd00cc00cc00cd00ce00cd00cf00ce00ce00cf00d000cf00d100d000d000d100d200d100d300d200d200d300d400d300d500d400d400d500d600d500d700d600d600d700d800d700d900d800d800d900da00d900db00da00da00db00dc00db00dd00dc00dc00dd00de00dd00df00de00eb00e000e100eb00e100e200eb00e200e300e400e500e600e400e600e700e400e700e800e400e800e900e400e900ea00ea00eb00e300e300e400ea00ed00ec00f700ee00ed00f700ef00ee00f700f200f100f000f300f200f000f400f300f000f500f400f000f600f500f000ef00f700f600f600f000ef00f800f900fa00f900fb00fa00fc00fd00fe00fd00ff00fe00000101010201010103010201040105010601050107010601080109010a0109010b010a010c010d010e010d010f010e01100111011201110113011201140115011601150117011601180119011a0119011b011a011c011d011e011d011f011e012001210122012101230122012401250126012501270126012b012801290129012a012b012d012c012f012f012e012d01300131013201310133013201340135013601350137013601380139013a0139013b013a013c013d013e013d013f013e01590140014101410142014301410143014401410144014501410145014601410146014701470148014901470149014a0147014a014b0147014b014c0147014c014d0147014d014e0147014e014f0147014f0150014701500151014701510152014701520153014701530154015401550156015401560157015401570158015401580159015401590141014101470154015b015a0173015d015c015b015e015d015b015f015e015b0160015f015b01610160015b016301620161016401630161016501640161016601650161016701660161016801670161016901680161016a01690161016b016a0161016c016b0161016d016c0161016e016d01610170016f016e01710170016e01720171016e01730172016e015b0173016e016e0161015b01740175017601750177017601780179017a0179017b017a017c017d017e017d017f017e017e017f0180017f0181018001800181018201810183018201820183018401830185018401840185018601850187018601880189018a0189018b018a018a018b018c018b018d018c018c018d018e018d018f018e018e018f0190018f0191019001900191019201910193019201940195019601950197019601980199019a0199019b019a019c019d019e019d019f019e01a001a101a201a101a301a201a201a301a401a301a501a401a401a501a601a501a701a601a601a701a801a701a901a801a801a901aa01a901ab01aa01ac01ad01ae01ad01af01ae01ae01af01b001af01b101b001b001b101b201b101b301b201b201b301b401b301b501b401b401b501b601b501b701b601b801b901ba01b901bb01ba01cc01bc01bd01bd01be01bf01bd01bf01c001bd01c001c101bd01c101c201bd01c201c301bd01c301c401c401c501c601c401c601c701c401c701c801c401c801c901c401c901ca01c401ca01cb01c401cb01cc01bd01c401cc01ce01cd01dd01d001cf01ce01d101d001ce01d201d101ce01d301d201ce01d401d301ce01d501d401ce01d701d601d501d801d701d501d901d801d501da01d901d501db01da01d501dc01db01d501dd01dc01d501dd01d501ce01de01df01e001df01e101e001e001e101e201e101e301e201e401e501e601e501e701e601e801e901ea01e901eb01ea01ea01eb01ec01eb01ed01ec01ec01ed01ee01ed01ef01ee01ee01ef01f001ef01f101f001f001f101f201f101f301f201f401f501f601f501f701f601f601f701f801f701f901f801f801f901fa01f901fb01fa01fa01fb01fc01fb01fd01fc01fc01fd01fe01fd01ff01fe010002010202020102030202020402050206020502070206020602070208020702090208020a020b020c020b020d020c02 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 526 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 24 + format: 2 + dimension: 4 + - stream: 0 + offset: 28 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 18936 + _typelessdata: 0000b83c0020f0bf000000000000000000000000000080bfffffffff14bf073d29cb3c3d0000b83c0040cabf000000000000000000000000ffff7fbfffffffff14bf073dff757e3e00009b3d0080cfbf000000000000000000000000000080bfffffffff03b4e43d41bb613e0000033e0040d3bf000000000000000000000000000080bfffffffff834a413ede354d3e0040383e0080d5bf000000000000000000000000000080bfffffffff4bee873ed6e5403e00006e3e0040d6bf000000000000000000000000000080bfffffffffc495af3e29cb3c3e0010983e0008d5bf000000000000000000000000000080bfffffffff6f5ee03e8276433e0040b13e0060d1bf000000000000000000000000000080bfffffffff3ec4023f9078573e0030c13e00a0cbbf000000000000000000000000000080bfffffffff45860e3fc1ef763e0080c63e0020c4bf000000000000000000000000000080bfffffffff9d71123f44fd8f3e0020b83e0050b9bf000000000000000000000000000080bfffffffffb0d6073fe592ad3e00008d3e00a0adbf000000000000000000000000000080bfffffffffce0bd03e6d8dcd3e00007e3e00a0aabf000000000000000000000000000080bfffffffff9963bb3ec7c2d53e00006a3e0060a8bf000000000000000000000000000080bfffffffff4ea2ac3ecceadb3e0000f23d00249abf000000000000000000000000000080bfffffffff3989323ea56e013f0000483d00708dbf000000000000000000000000000080bfffffffffe98c933d9bcf123f0000483c00b480bf000000000000000000000000ffff7fbfffffffffe98c933c833b243f0000000000c064bf000000000000000000000000ffff7fbfffffffff0000000097d5373f54553d3c904347bf000000000000000000000000000080bfffffffff5aae8b3cfc004c3f56553d3d38ce2dbf000000000000000000000000000080bfffffffff5bae8b3d136b5d3f0000d53d006018bf000000000000000000000000000080bfffffffff26241d3ed6136c3f1cc7383ec83108bf000000000000000000000000000080bffffffffff951883e4225773f39ce8a3ee4f8fcbe000000000000000000000000000080bfffffffffe6cecc3e51c97d3f0080c03e0080f6be000000000000000000000000000080bfffffffff6d040e3f0000803f00d0de3e00b0f8be000000000000000000000000ffff7fbfffffffff6261243f78407f3f00c0fc3e0040ffbe000000000000000000000000ffff7fbfffffffff84773a3fe2017d3f00a80d3f003805bf000000000000000000000000000080bfffffffffb003513f582e793f00c01d3f00400dbf000000000000000000000000000080bfffffffffc4c2683ff8af733f00c01d3f00c04dbf000000000000000000000000000080bfffffffffc4c2683f3091473f00a80c3f00f045bf000000000000000000000000000080bffffffffff6894f3f41e94c3f00c0ff3e000041bf000000000000000000000000000080bfffffffff1cae3c3fe049503f00b0eb3e00603ebf000000000000000000000000000080bfffffffff04e12d3f8c15523f0000da3e00803dbf000000000000000000000000000080bfffffffff79d4203fc5ae523f0060bd3e00f83fbf000000000000000000000000ffff7fbfffffffff3ab60b3f76fe503f0080a63e006047bf000000000000000000000000000080bfffffffffe5abf53e88ed4b3f0080973e00c852bf000000000000000000000000000080bffffffffff689df3e2620443f0080923e004061bf000000000000000000000000000080bfffffffff5029d83e7c3a3a3f0040963e00c86ebf000000000000000000000000000080bfffffffffccb1dd3efdf8303f0080a13e00607bbf000000000000000000000000000080bfffffffff404bee3ea95b283f0080ba3e003485bf000000000000000000000000000080bfffffffff3d97093f7f131e3f0080e73e00a08fbf000000000000000000000000000080bfffffffff25ca2a3f7cd10f3f00f0113f000c9ebf000000000000000000000000000080bfffffffffd754573f252df83e0000233f00d0a9bf000000000000000000000000000080bfffffffffd881703fe5fbd73e00e02a3f0054b5bf000000000000000000000000000080bfffffffff76207c3fc279b83e00802d3f0000c3bf000000000000000000000000000080bfffffffff0000803f4611933eff5f2a3f726cd2bf000000000000000000000000000080bfffffffff97637b3f8ebb513e0000213f1c87dfbf000000000000000000000000ffff7fbfffffffff638e6d3fe4050a3e0060113f0050eabf000000000000000000000000000080bfffffffff5e80563f14039e3de2b8f83e5555f2bf000000000000000000000000000080bfffffffffcf7e373f83740c3d8ea3c53e5525f7bf000000000000000000000000000080bffffffffffbce113f82740c3c0080893e00c0f8bf000000000000000000000000000080bfffffffffc1e1ca3e0000000000e04b3e0038f8bf000000000000000000000000000080bfffffffffc368963eb50e3a3b00800a3e00a0f6bf000000000000000000000000000080bfffffffff7b5b4c3eb50e3a3c00c09c3d00f0f3bf000000000000000000000000000080bfffffffff0a49e73dc5aed23c0000b83c0020f0bf0000803e00000000000000000000803fffffffff14bf073d29cb3c3d0000b83c0040cabf0000803e0000000000000000ffff7f3fffffffff14bf073dff757e3e00009b3d0080cfbf0000803e00000000000000000000803fffffffff03b4e43d41bb613e0000033e0040d3bf0000803e00000000000000000000803fffffffff834a413ede354d3e0040383e0080d5bf0000803e00000000000000000000803fffffffff4bee873ed6e5403e00006e3e0040d6bf0000803e00000000000000000000803fffffffffc495af3e29cb3c3e0010983e0008d5bf0000803e00000000000000000000803fffffffff6f5ee03e8276433e0040b13e0060d1bf0000803e00000000000000000000803fffffffff3ec4023f9078573e0030c13e00a0cbbf0000803e00000000000000000000803fffffffff45860e3fc1ef763e0080c63e0020c4bf0000803e00000000000000000000803fffffffff9d71123f44fd8f3e0020b83e0050b9bf0000803e00000000000000000000803fffffffffb0d6073fe592ad3e00008d3e00a0adbf0000803e00000000000000000000803fffffffffce0bd03e6d8dcd3e00007e3e00a0aabf0000803e00000000000000000000803fffffffff9963bb3ec7c2d53e00006a3e0060a8bf0000803e00000000000000000000803fffffffff4ea2ac3ecceadb3e0000f23d00249abf0000803e00000000000000000000803fffffffff3989323ea56e013f0000483d00708dbf0000803e00000000000000000000803fffffffffe98c933d9bcf123f0000483c00b480bf0000803e0000000000000000ffff7f3fffffffffe98c933c833b243f0000000000c064bf0000803e00000000000000000000803fffffffff0000000097d5373f54553d3c904347bf0000803e00000000000000000000803fffffffff5aae8b3cfc004c3f56553d3d38ce2dbf0000803e00000000000000000000803fffffffff5bae8b3d136b5d3f0000d53d006018bf0000803e00000000000000000000803fffffffff26241d3ed6136c3f1cc7383ec83108bf0000803e00000000000000000000803ffffffffff951883e4225773f39ce8a3ee4f8fcbe0000803e00000000000000000000803fffffffffe6cecc3e51c97d3f0080c03e0080f6be0000803e00000000000000000000803fffffffff6d040e3f0000803f00d0de3e00b0f8be0000803e0000000000000000ffff7f3fffffffff6261243f78407f3f00c0fc3e0040ffbe0000803e00000000000000000000803fffffffff84773a3fe2017d3f00a80d3f003805bf0000803e00000000000000000000803fffffffffb003513f582e793f00c01d3f00400dbf0000803e00000000000000000000803fffffffffc4c2683ff8af733f00c01d3f00c04dbf0000803e00000000000000000000803fffffffffc4c2683f3091473f00a80c3f00f045bf0000803e00000000000000000000803ffffffffff6894f3f41e94c3f00c0ff3e000041bf0000803e00000000000000000000803fffffffff1cae3c3fe049503f00b0eb3e00603ebf0000803e00000000000000000000803fffffffff04e12d3f8c15523f0000da3e00803dbf0000803e00000000000000000000803fffffffff79d4203fc5ae523f0060bd3e00f83fbf0000803e0000000000000000ffff7f3fffffffff3ab60b3f76fe503f0080a63e006047bf0000803e00000000000000000000803fffffffffe5abf53e88ed4b3f0080973e00c852bf0000803e00000000000000000000803ffffffffff689df3e2620443f0080923e004061bf0000803e00000000000000000000803fffffffff5029d83e7c3a3a3f0040963e00c86ebf0000803e00000000000000000000803fffffffffccb1dd3efdf8303f0080a13e00607bbf0000803e00000000000000000000803fffffffff404bee3ea95b283f0080ba3e003485bf0000803e00000000000000000000803fffffffff3d97093f7f131e3f0080e73e00a08fbf0000803e00000000000000000000803fffffffff25ca2a3f7cd10f3f00f0113f000c9ebf0000803e00000000000000000000803fffffffffd754573f252df83e0000233f00d0a9bf0000803e00000000000000000000803fffffffffd881703fe5fbd73e00e02a3f0054b5bf0000803e00000000000000000000803fffffffff76207c3fc279b83e00802d3f0000c3bf0000803e00000000000000000000803fffffffff0000803f4611933eff5f2a3f726cd2bf0000803e00000000000000000000803fffffffff97637b3f8ebb513e0000213f1c87dfbf0000803e0000000000000000ffff7f3fffffffff638e6d3fe4050a3e0060113f0050eabf0000803e00000000000000000000803fffffffff5e80563f14039e3de2b8f83e5555f2bf0000803e00000000000000000000803fffffffffcf7e373f83740c3d8ea3c53e5525f7bf0000803e00000000000000000000803ffffffffffbce113f82740c3c0080893e00c0f8bf0000803e00000000000000000000803fffffffffc1e1ca3e0000000000e04b3e0038f8bf0000803e00000000000000000000803fffffffffc368963eb50e3a3b00800a3e00a0f6bf0000803e00000000000000000000803fffffffff7b5b4c3eb50e3a3c00c09c3d00f0f3bf0000803e00000000000000000000803fffffffff0a49e73dc5aed23c0000b83c0020f0bf00000000000080bf0000000000000000ffffffff14bf073d29cb3c3d0000b83c0020f0bf0000803e000080bf0000000000000000ffffffff14bf073d29cb3c3d0000b83c0040cabf00000000000080bf0000000000000000ffffffff14bf073dff757e3e0000b83c0040cabf0000803e000080bf0000000000000000ffffffff14bf073dff757e3e0000b83c0040cabf0000000005441c3ffbc54a3f00000000ffffffff14bf073dff757e3e0000b83c0040cabf0000803e05441c3ffbc54a3f00000000ffffffff14bf073dff757e3e00009b3d0080cfbf00000000cd05133f6092513f00000000ffffffff03b4e43d41bb613e00009b3d0080cfbf0000803ec4b3083ff671583f00000000ffffffff03b4e43d41bb613e0000033e0040d3bf000000009e13e03e682e663f00000000ffffffff834a413ede354d3e0000033e0040d3bf0000803ecf3dc33e02a86c3f00000000ffffffff834a413ede354d3e0040383e0080d5bf000000005cce813ed3a2773f00000000ffffffff4bee873ed6e5403e0040383e0080d5bf0000803e57dc3b3eb2a77b3f00000000ffffffff4bee873ed6e5403e00006e3e0040d6bf00000000454d543c80fa7f3f00000000ffffffffc495af3e29cb3c3e00006e3e0040d6bf0000803e534194bd0f547f3f00000000ffffffffc495af3e29cb3c3e0010983e0008d5bf00000000ba0c84bedb56773f00000000ffffffff6f5ee03e8276433e0010983e0008d5bf0000803e8dd1c1bed1f26c3f00000000ffffffff6f5ee03e8276433e0040b13e0060d1bf000000003a701ebf8e14493f00000000ffffffff3ec4023f9078573e0040b13e0060d1bf0000803ee0693abf99752f3f00000000ffffffff3ec4023f9078573e0030c13e00a0cbbf00000000c0f265bf1608e13e00000000ffffffff45860e3fc1ef763e0030c13e00a0cbbf0000803e85d173bff90e9c3e00000000ffffffff45860e3fc1ef763e0080c63e0020c4bf00000000d1d47fbfc8aa14bd00000000ffffffff9d71123f44fd8f3e0080c63e0020c4bf0000803eb6f87abf4af649be00000000ffffffff9d71123f44fd8f3e0020b83e0050b9bf00000000f44f61bf1711f3be00000000ffffffffb0d6073fe592ad3e0020b83e0050b9bf0000803e99314ebf52b917bf00000000ffffffffb0d6073fe592ad3e00008d3e00a0adbf00000000f19339bfcd5730bf00000000ffffffffce0bd03e6d8dcd3e00008d3e00a0adbf0000803e4d8a34bf467f35bf00000000ffffffffce0bd03e6d8dcd3e00007e3e00a0aabf0000000014db27bfd94941bf00000000ffffffff9963bb3ec7c2d53e00007e3e00a0aabf0000803e096029bf5ff53fbf00000000ffffffff9963bb3ec7c2d53e00006a3e0060a8bf00000000602433bf98e036bf00000000ffffffff4ea2ac3ecceadb3e00006a3e0060a8bf0000803e62ed34bf811c35bf00000000ffffffff4ea2ac3ecceadb3e0000f23d00249abf000000002d1f3ebf2e6f2bbf00000000ffffffff3989323ea56e013f0000f23d00249abf0000803ebb8047bf8c6b20bf00000000ffffffff3989323ea56e013f0000483d00708dbf0000000088a65cbf18ce01bf00000000ffffffffe98c933d9bcf123f0000483d00708dbf0000803ef3f566bf51d8dcbe00000000ffffffffe98c933d9bcf123f0000483c00b480bf00000000dcd876bffcae87be00000000ffffffffe98c933c833b243f0000483c00b480bf0000803ee08e7bbf46ed3dbe00000000ffffffffe98c933c833b243f0000000000c064bf00000000ecd07fbfa2381bbd00000000ffffffff0000000097d5373f0000000000c064bf0000803ec4de7fbf986c023d00000000ffffffff0000000097d5373f54553d3c904347bf00000000d5287cbfe7b4303e00000000ffffffff5aae8b3cfc004c3f54553d3c904347bf0000803ecee877bf4b677f3e00000000ffffffff5aae8b3cfc004c3f56553d3d38ce2dbf00000000357869bf3e07d23e00000000ffffffff5bae8b3d136b5d3f56553d3d38ce2dbf0000803e59155fbfe627fb3e00000000ffffffff5bae8b3d136b5d3f0000d53d006018bf0000000086be44bfa9ca233f00000000ffffffff26241d3ed6136c3f0000d53d006018bf0000803e26c934bfad40353f00000000ffffffff26241d3ed6136c3f1cc7383ec83108bf00000000ab300fbf7835543f00000000fffffffff951883e4225773f1cc7383ec83108bf0000803ef816f3be5d4e613f00000000fffffffff951883e4225773f39ce8a3ee4f8fcbe000000003d3e97be6f93743f00000000ffffffffe6cecc3e51c97d3f39ce8a3ee4f8fcbe0000803e1cd652bed4837a3f00000000ffffffffe6cecc3e51c97d3f0080c03e0080f6be00000000ef7f9fbdf1387f3f00000000ffffffff6d040e3f0000803f0080c03e0080f6be0000803e7e4296bcfaf47f3f00000000ffffffff6d040e3f0000803f00d0de3e00b0f8be00000000018ff53d35277e3f00000000ffffffff6261243f78407f3f00d0de3e00b0f8be0000803e30682b3e57637c3f00000000ffffffff6261243f78407f3f00c0fc3e0040ffbe0000000030ec843eee38773f00000000ffffffff84773a3fe2017d3f00c0fc3e0040ffbe0000803e810f9b3e42fa733f00000000ffffffff84773a3fe2017d3f00a80d3f003805bf00000000f801c33e58b46c3f00000000ffffffffb003513f582e793f00a80d3f003805bf0000803e8a83d43e15e8683f00000000ffffffffb003513f582e793f00c01d3f00400dbf00000000129ee43ef00f653f00000000ffffffffc4c2683ff8af733f00c01d3f00400dbf0000803e129ee43ef00f653f00000000ffffffffc4c2683ff8af733f00c01d3f00400dbf000000000000803f0000000000000000ffffffffc4c2683ff8af733f00c01d3f00400dbf0000803e0000803f0000000000000000ffffffffc4c2683ff8af733f00c01d3f00c04dbf000000000000803f0000000000000000ffffffffc4c2683f3091473f00c01d3f00c04dbf0000803e0000803f0000000000000000ffffffffc4c2683f3091473f00c01d3f00c04dbf0000000029d4d4beacd568bf00000000ffffffffc4c2683f3091473f00c01d3f00c04dbf0000803e29d4d4beacd568bf00000000ffffffffc4c2683f3091473f00a80c3f00f045bf000000007655cdbede826abf00000000fffffffff6894f3f41e94c3f00a80c3f00f045bf0000803e651cc4befb796cbf00000000fffffffff6894f3f41e94c3f00c0ff3e000041bf000000003fa6a9bed08971bf00000000ffffffff1cae3c3fe049503f00c0ff3e000041bf0000803ee8ae97befd8174bf00000000ffffffff1cae3c3fe049503f00b0eb3e00603ebf00000000b44354be88707abf00000000ffffffff04e12d3f8c15523f00b0eb3e00603ebf0000803ea9a51fbea0de7cbf00000000ffffffff04e12d3f8c15523f0000da3e00803dbf000000001ff4b73c79ef7fbf00000000ffffffff79d4203fc5ae523f0000da3e00803dbf0000803e06c2dc3d26827ebf00000000ffffffff79d4203fc5ae523f0060bd3e00f83fbf000000007bc2963e89a674bf00000000ffffffff3ab60b3f76fe503f0060bd3e00f83fbf0000803efcc4d73e332868bf00000000ffffffff3ab60b3f76fe503f0080a63e006047bf000000005846273fa1ca41bf00000000ffffffffe5abf53e88ed4b3f0080a63e006047bf0000803e07ac403f269028bf00000000ffffffffe5abf53e88ed4b3f0080973e00c852bf0000000038bd673f178fd9be00000000fffffffff689df3e2620443f0080973e00c852bf0000803e1288743fae8797be00000000fffffffff689df3e2620443f0080923e004061bf000000004b4f7f3fef4a96bd00000000ffffffff5029d83e7c3a3a3f0080923e004061bf0000803e56e27f3f2173f63c00000000ffffffff5029d83e7c3a3a3f0040963e00c86ebf000000000422793f2e966b3e00000000ffffffffccb1dd3efdf8303f0040963e00c86ebf0000803eea72723f435fa43e00000000ffffffffccb1dd3efdf8303f0080a13e00607bbf00000000486f5c3fd52b023f00000000ffffffff404bee3ea95b283f0080a13e00607bbf0000803e73f44f3f0a4d153f00000000ffffffff404bee3ea95b283f0080ba3e003485bf000000004f2c3b3f1fa62e3f00000000ffffffff3d97093f7f131e3f0080ba3e003485bf0000803ee8c6333fd540363f00000000ffffffff3d97093f7f131e3f0080e73e00a08fbf000000004d252f3f52b53a3f00000000ffffffff25ca2a3f7cd10f3f0080e73e00a08fbf0000803e8215303fdad2393f00000000ffffffff25ca2a3f7cd10f3f00f0113f000c9ebf00000000ec47393faaa7303f00000000ffffffffd754573f252df83e00f0113f000c9ebf0000803ef251433fc37c253f00000000ffffffffd754573f252df83e0000233f00d0a9bf000000008d985b3fd194033f00000000ffffffffd881703fe5fbd73e0000233f00d0a9bf0000803eac8d673f3859da3e00000000ffffffffd881703fe5fbd73e00e02a3f0054b5bf000000007b56783fada7783e00000000ffffffff76207c3fc279b83e00e02a3f0054b5bf0000803efd6c7c3f4c842a3e00000000ffffffff76207c3fc279b83e00802d3f0000c3bf00000000c9eb7f3f9874cb3c00000000ffffffff0000803f4611933e00802d3f0000c3bf0000803ec1c97f3f8d9f26bd00000000ffffffff0000803f4611933eff5f2a3f726cd2bf00000000900c7c3fd63533be00000000ffffffff97637b3f8ebb513eff5f2a3f726cd2bf0000803e0999773fe31882be00000000ffffffff97637b3f8ebb513e0000213f1c87dfbf00000000492a683f00bcd7be00000000ffffffff638e6d3fe4050a3e0000213f1c87dfbf0000803e52e35c3f8b6601bf00000000ffffffff638e6d3fe4050a3e0060113f0050eabf0000000089e23f3f637529bf00000000ffffffff5e80563f14039e3d0060113f0050eabf0000803ec2662e3f5b673bbf00000000ffffffff5e80563f14039e3de2b8f83e5555f2bf000000004e77063f66d759bf00000000ffffffffcf7e373f83740c3de2b8f83e5555f2bf0000803e4e1ae13e4cee65bf00000000ffffffffcf7e373f83740c3d8ea3c53e5525f7bf00000000158f883ef5b976bf00000000fffffffffbce113f82740c3c8ea3c53e5525f7bf0000803e1b723c3eb2a07bbf00000000fffffffffbce113f82740c3c0080893e00c0f8bf000000000f658c3dd4657fbf00000000ffffffffc1e1ca3e000000000080893e00c0f8bf0000803e9a33873c13f77fbf00000000ffffffffc1e1ca3e0000000000e04b3e0038f8bf00000000f784d0bd6eab7ebf00000000ffffffffc368963eb50e3a3b00e04b3e0038f8bf0000803ef74a15bebf437dbf00000000ffffffffc368963eb50e3a3b00800a3e00a0f6bf00000000c1d474be3e9378bf00000000ffffffff7b5b4c3eb50e3a3c00800a3e00a0f6bf0000803e094693be482e75bf00000000ffffffff7b5b4c3eb50e3a3c00c09c3d00f0f3bf00000000ada9c5be3c276cbf00000000ffffffff0a49e73dc5aed23c00c09c3d00f0f3bf0000803e419cdebe628966bf00000000ffffffff0a49e73dc5aed23c0000b83c0020f0bf00000000ae03f7be863c60bf00000000ffffffff14bf073d29cb3c3d0000b83c0020f0bf0000803eae03f7be863c60bf00000000ffffffff14bf073d29cb3c3d00c0383f0080f6bf000000000000000000000000000080bfffffffff000000000000000000c0383f000000bf000000000000000000000000000080bfffffffff000000000000803f0060803f000000bf000000000000000000000000000080bfffffffff4fefa23e0000803f0060803f008083bf000000000000000000000000000080bfffffffff4fefa23ea850213f0020a93f008083bf000000000000000000000000000080bfffffffff19af2d3fa850213f0020a93f000000bf000000000000000000000000000080bfffffffff19af2d3f0000803f0080cd3f000000bf000000000000000000000000000080bfffffffff0000803f0000803f0080cd3f0080f6bf000000000000000000000000000080bfffffffff0000803f000000000020a93f0080f6bf000000000000000000000000000080bfffffffff19af2d3f000000000020a93f0020a7bf000000000000000000000000000080bfffffffff19af2d3f58afde3e0060803f0020a7bf000000000000000000000000000080bfffffffff4fefa23e58afde3e0060803f0080f6bf000000000000000000000000000080bfffffffff4fefa23e0000000000c0383f0080f6bf0000803e00000000000000000000803fffffffff000000000000000000c0383f000000bf0000803e00000000000000000000803fffffffff000000000000803f0060803f000000bf0000803e00000000000000000000803fffffffff4fefa23e0000803f0060803f008083bf0000803e00000000000000000000803fffffffff4fefa23ea850213f0020a93f008083bf0000803e00000000000000000000803fffffffff19af2d3fa850213f0020a93f000000bf0000803e00000000000000000000803fffffffff19af2d3f0000803f0080cd3f000000bf0000803e00000000000000000000803fffffffff0000803f0000803f0080cd3f0080f6bf0000803e00000000000000000000803fffffffff0000803f000000000020a93f0080f6bf0000803e00000000000000000000803fffffffff19af2d3f000000000020a93f0020a7bf0000803e00000000000000000000803fffffffff19af2d3f58afde3e0060803f0020a7bf0000803e00000000000000000000803fffffffff4fefa23e58afde3e0060803f0080f6bf0000803e00000000000000000000803fffffffff4fefa23e0000000000c0383f0080f6bf00000000000080bf0000000000000000ffffffff000000000000000000c0383f0080f6bf0000803e000080bf0000000000000000ffffffff000000000000000000c0383f000000bf00000000000080bf0000000000000000ffffffff000000000000803f00c0383f000000bf0000803e000080bf0000000000000000ffffffff000000000000803f00c0383f000000bf00000000000000000000803f00000000ffffffff000000000000803f00c0383f000000bf0000803e000000000000803f00000000ffffffff000000000000803f0060803f000000bf00000000000000000000803f00000000ffffffff4fefa23e0000803f0060803f000000bf0000803e000000000000803f00000000ffffffff4fefa23e0000803f0060803f000000bf000000000000803f0000000000000000ffffffff4fefa23e0000803f0060803f000000bf0000803e0000803f0000000000000000ffffffff4fefa23e0000803f0060803f008083bf000000000000803f0000000000000000ffffffff4fefa23ea850213f0060803f008083bf0000803e0000803f0000000000000000ffffffff4fefa23ea850213f0060803f008083bf00000000000000000000803f00000000ffffffff4fefa23ea850213f0060803f008083bf0000803e000000000000803f00000000ffffffff4fefa23ea850213f0020a93f008083bf00000000000000000000803f00000000ffffffff19af2d3fa850213f0020a93f008083bf0000803e000000000000803f00000000ffffffff19af2d3fa850213f0020a93f008083bf00000000000080bf0000000000000000ffffffff19af2d3fa850213f0020a93f008083bf0000803e000080bf0000000000000000ffffffff19af2d3fa850213f0020a93f000000bf00000000000080bf0000000000000000ffffffff19af2d3f0000803f0020a93f000000bf0000803e000080bf0000000000000000ffffffff19af2d3f0000803f0020a93f000000bf00000000000000000000803f00000000ffffffff19af2d3f0000803f0020a93f000000bf0000803e000000000000803f00000000ffffffff19af2d3f0000803f0080cd3f000000bf00000000000000000000803f00000000ffffffff0000803f0000803f0080cd3f000000bf0000803e000000000000803f00000000ffffffff0000803f0000803f0080cd3f000000bf000000000000803f0000000000000000ffffffff0000803f0000803f0080cd3f000000bf0000803e0000803f0000000000000000ffffffff0000803f0000803f0080cd3f0080f6bf000000000000803f0000000000000000ffffffff0000803f000000000080cd3f0080f6bf0000803e0000803f0000000000000000ffffffff0000803f000000000080cd3f0080f6bf0000000000000000000080bf00000000ffffffff0000803f000000000080cd3f0080f6bf0000803e00000000000080bf00000000ffffffff0000803f000000000020a93f0080f6bf0000000000000000000080bf00000000ffffffff19af2d3f000000000020a93f0080f6bf0000803e00000000000080bf00000000ffffffff19af2d3f000000000020a93f0080f6bf00000000000080bf0000000000000000ffffffff19af2d3f000000000020a93f0080f6bf0000803e000080bf0000000000000000ffffffff19af2d3f000000000020a93f0020a7bf00000000000080bf0000000000000000ffffffff19af2d3f58afde3e0020a93f0020a7bf0000803e000080bf0000000000000000ffffffff19af2d3f58afde3e0020a93f0020a7bf0000000000000000000080bf00000000ffffffff19af2d3f58afde3e0020a93f0020a7bf0000803e00000000000080bf00000000ffffffff19af2d3f58afde3e0060803f0020a7bf0000000000000000000080bf00000000ffffffff4fefa23e58afde3e0060803f0020a7bf0000803e00000000000080bf00000000ffffffff4fefa23e58afde3e0060803f0020a7bf000000000000803f0000000000000000ffffffff4fefa23e58afde3e0060803f0020a7bf0000803e0000803f0000000000000000ffffffff4fefa23e58afde3e0060803f0080f6bf000000000000803f0000000000000000ffffffff4fefa23e000000000060803f0080f6bf0000803e0000803f0000000000000000ffffffff4fefa23e000000000060803f0080f6bf0000000000000000000080bf00000000ffffffff4fefa23e000000000060803f0080f6bf0000803e00000000000080bf00000000ffffffff4fefa23e0000000000c0383f0080f6bf0000000000000000000080bf00000000ffffffff000000000000000000c0383f0080f6bf0000803e00000000000080bf00000000ffffffff000000000000000000a0db3f0080f6bf000000000000000000000000ffff7fbfffffffff000000000000000000a0db3f000000bf000000000000000000000000ffff7fbfffffffff000000000000803f00600040000000bf000000000000000000000000ffff7fbfffffffff0000803f0000803f006000400080f6bf000000000000000000000000ffff7fbfffffffff0000803f0000000000a0db3f0080f6bf0000803e0000000000000000ffff7f3fffffffff000000000000000000a0db3f000000bf0000803e0000000000000000ffff7f3fffffffff000000000000803f00600040000000bf0000803e0000000000000000ffff7f3fffffffff0000803f0000803f006000400080f6bf0000803e0000000000000000ffff7f3fffffffff0000803f0000000000a0db3f0080f6bf00000000000080bf0000000000000000ffffffff000000000000000000a0db3f0080f6bf0000803e000080bf0000000000000000ffffffff000000000000000000a0db3f000000bf00000000000080bf0000000000000000ffffffff000000000000803f00a0db3f000000bf0000803e000080bf0000000000000000ffffffff000000000000803f00a0db3f000000bf00000000000000000000803f00000000ffffffff000000000000803f00a0db3f000000bf0000803e000000000000803f00000000ffffffff000000000000803f00600040000000bf00000000000000000000803f00000000ffffffff0000803f0000803f00600040000000bf0000803e000000000000803f00000000ffffffff0000803f0000803f00600040000000bf000000000000803f0000000000000000ffffffff0000803f0000803f00600040000000bf0000803e0000803f0000000000000000ffffffff0000803f0000803f006000400080f6bf000000000000803f0000000000000000ffffffff0000803f00000000006000400080f6bf0000803e0000803f0000000000000000ffffffff0000803f00000000006000400080f6bf0000000000000000000080bf00000000ffffffff0000803f00000000006000400080f6bf0000803e00000000000080bf00000000ffffffff0000803f0000000000a0db3f0080f6bf0000000000000000000080bf00000000ffffffff000000000000000000a0db3f0080f6bf0000803e00000000000080bf00000000ffffffff0000000000000000007008400080f6bf000000000000000000000000000080bfffffffff000000000000000000700840000000bf000000000000000000000000000080bfffffffff000000000000803f00e01a40000000bf000000000000000000000000000080bfffffffff21e5a63e0000803f00502d400040a2bf000000000000000000000000000080bfffffffff21e5263f955cec3e004a2e400044a8bf000000000000000000000000000080bfffffffff9e502b3f247cdb3e00982f4000d0b0bf000000000000000000000000ffff7fbfffffffff4b38313fc181c33e002a3140007cbbbf000000000000000000000000000080bfffffffffbb53383f2f91a53e00f0324000e0c7bf000000000000000000000000000080bfffffffff855a403f34ce823e00b03140004cb5bf000000000000000000000000000080bfffffffff36b23a3f10edb63e00d030400050a4bf000000000000000000000000000080bfffffffff65bc363f4a93e63e004c304000ac94bf000000000000000000000000000080bffffffffff766343f373a093f00203040002086bf000000000000000000000000ffff7fbfffffffffd39f333f04a21d3f00203040000000bf000000000000000000000000000080bfffffffffd39f333f0000803f00004140000000bf000000000000000000000000000080bfffffffff0000803f0000803f000041400080f6bf000000000000000000000000000080bfffffffff0000803f00000000002030400080f6bf000000000000000000000000000080bfffffffffd39f333f0000000000201c40006090bf000000000000000000000000000080bfffffffffbf35b23e3a410f3f00381b4000988abf000000000000000000000000ffff7fbfffffffffb201aa3e485d173f0080194000807bbf000000000000000000000000000080bfffffffffd9729a3e7e61293f009c184000206ebf000000000000000000000000000080bfffffffff0163923efbc2323f00f01740000064bf000000000000000000000000000080bfffffffff134e8c3eeedc393f007c184000987abf000000000000000000000000000080bfffffffff5841913e35042a3f00e0184000f089bf000000000000000000000000000080bfffffffff89ca943ef148183f001c1940008c98bf000000000000000000000000000080bfffffffffa7e9963eb2ca033f0030194000c0a9bf000000000000000000000000000080bfffffffffb19e973e0f52d73e003019400080f6bf000000000000000000000000ffff7fbfffffffffb19e973e00000000007008400080f6bf0000803e00000000000000000000803fffffffff000000000000000000700840000000bf0000803e00000000000000000000803fffffffff000000000000803f00e01a40000000bf0000803e00000000000000000000803fffffffff21e5a63e0000803f00502d400040a2bf0000803e00000000000000000000803fffffffff21e5263f955cec3e004a2e400044a8bf0000803e00000000000000000000803fffffffff9e502b3f247cdb3e00982f4000d0b0bf0000803e0000000000000000ffff7f3fffffffff4b38313fc181c33e002a3140007cbbbf0000803e00000000000000000000803fffffffffbb53383f2f91a53e00f0324000e0c7bf0000803e00000000000000000000803fffffffff855a403f34ce823e00b03140004cb5bf0000803e00000000000000000000803fffffffff36b23a3f10edb63e00d030400050a4bf0000803e00000000000000000000803fffffffff65bc363f4a93e63e004c304000ac94bf0000803e00000000000000000000803ffffffffff766343f373a093f00203040002086bf0000803e0000000000000000ffff7f3fffffffffd39f333f04a21d3f00203040000000bf0000803e00000000000000000000803fffffffffd39f333f0000803f00004140000000bf0000803e00000000000000000000803fffffffff0000803f0000803f000041400080f6bf0000803e00000000000000000000803fffffffff0000803f00000000002030400080f6bf0000803e00000000000000000000803fffffffffd39f333f0000000000201c40006090bf0000803e00000000000000000000803fffffffffbf35b23e3a410f3f00381b4000988abf0000803e0000000000000000ffff7f3fffffffffb201aa3e485d173f0080194000807bbf0000803e00000000000000000000803fffffffffd9729a3e7e61293f009c184000206ebf0000803e00000000000000000000803fffffffff0163923efbc2323f00f01740000064bf0000803e00000000000000000000803fffffffff134e8c3eeedc393f007c184000987abf0000803e00000000000000000000803fffffffff5841913e35042a3f00e0184000f089bf0000803e00000000000000000000803fffffffff89ca943ef148183f001c1940008c98bf0000803e00000000000000000000803fffffffffa7e9963eb2ca033f0030194000c0a9bf0000803e00000000000000000000803fffffffffb19e973e0f52d73e003019400080f6bf0000803e0000000000000000ffff7f3fffffffffb19e973e00000000007008400080f6bf00000000000080bf0000000000000000ffffffff0000000000000000007008400080f6bf0000803e000080bf0000000000000000ffffffff000000000000000000700840000000bf00000000000080bf0000000000000000ffffffff000000000000803f00700840000000bf0000803e000080bf0000000000000000ffffffff000000000000803f00700840000000bf00000000000000000000803f00000000ffffffff000000000000803f00700840000000bf0000803e000000000000803f00000000ffffffff000000000000803f00e01a40000000bf00000000000000000000803f00000000ffffffff21e5a63e0000803f00e01a40000000bf0000803e000000000000803f00000000ffffffff21e5a63e0000803f00e01a40000000bf00000000d9ac6f3fabe8b33e00000000ffffffff21e5a63e0000803f00e01a40000000bf0000803ed9ac6f3fabe8b33e00000000ffffffff21e5a63e0000803f00502d400040a2bf000000002ecb6f3fbe46b33e00000000ffffffff21e5263f955cec3e00502d400040a2bf0000803eda1b703fc794b13e00000000ffffffff21e5263f955cec3e004a2e400044a8bf00000000ec0e743f3d8d9a3e00000000ffffffff9e502b3f247cdb3e004a2e400044a8bf0000803e157f743fa3c1973e00000000ffffffff9e502b3f247cdb3e00982f4000d0b0bf000000009b21753f5c9a933e00000000ffffffff4b38313fc181c33e00982f4000d0b0bf0000803e3760753feef7913e00000000ffffffff4b38313fc181c33e002a3140007cbbbf000000001bc8753f1c368f3e00000000ffffffffbb53383f2f91a53e002a3140007cbbbf0000803efcf4753fa3008e3e00000000ffffffffbb53383f2f91a53e00f0324000e0c7bf000000006f1d763f35e78c3e00000000ffffffff855a403f34ce823e00f0324000e0c7bf0000803e6f1d763f35e78c3e00000000ffffffff855a403f34ce823e00f0324000e0c7bf0000000091b67dbfc79008be00000000ffffffff855a403f34ce823e00f0324000e0c7bf0000803e91b67dbfc79008be00000000ffffffff855a403f34ce823e00b03140004cb5bf0000000085087ebf9b5ffdbd00000000ffffffff36b23a3f10edb63e00b03140004cb5bf0000803ee7587ebfb156e8bd00000000ffffffff36b23a3f10edb63e00d030400050a4bf0000000053f07ebf3549babd00000000ffffffff65bc363f4a93e63e00d030400050a4bf0000803e7f347fbfe444a1bd00000000ffffffff65bc363f4a93e63e004c304000ac94bf00000000d9a57fbfc2c456bd00000000fffffffff766343f373a093f004c304000ac94bf0000803eafcf7fbfe3411dbd00000000fffffffff766343f373a093f00203040002086bf000000006dfe7fbf640ce3bb00000000ffffffffd39f333f04a21d3f00203040002086bf0000803ed6ff7fbf448811bb00000000ffffffffd39f333f04a21d3f00203040000000bf00000000000080bf0000000000000000ffffffffd39f333f0000803f00203040000000bf0000803e000080bf0000000000000000ffffffffd39f333f0000803f00203040000000bf00000000000000000000803f00000000ffffffffd39f333f0000803f00203040000000bf0000803e000000000000803f00000000ffffffffd39f333f0000803f00004140000000bf00000000000000000000803f00000000ffffffff0000803f0000803f00004140000000bf0000803e000000000000803f00000000ffffffff0000803f0000803f00004140000000bf000000000000803f0000000000000000ffffffff0000803f0000803f00004140000000bf0000803e0000803f0000000000000000ffffffff0000803f0000803f000041400080f6bf000000000000803f0000000000000000ffffffff0000803f00000000000041400080f6bf0000803e0000803f0000000000000000ffffffff0000803f00000000000041400080f6bf0000000000000000000080bf00000000ffffffff0000803f00000000000041400080f6bf0000803e00000000000080bf00000000ffffffff0000803f00000000002030400080f6bf0000000000000000000080bf00000000ffffffffd39f333f00000000002030400080f6bf0000803e00000000000080bf00000000ffffffffd39f333f00000000002030400080f6bf00000000365e6ebffab9babe00000000ffffffffd39f333f00000000002030400080f6bf0000803e365e6ebffab9babe00000000ffffffffd39f333f0000000000201c40006090bf00000000b88a6ebf13d6b9be00000000ffffffffbf35b23e3a410f3f00201c40006090bf0000803eed016fbf6d6db7be00000000ffffffffbf35b23e3a410f3f00381b4000988abf000000003ee975bfe3518ebe00000000ffffffffb201aa3e485d173f00381b4000988abf0000803ee5c476bff83f88be00000000ffffffffb201aa3e485d173f0080194000807bbf00000000005077bf084084be00000000ffffffffd9729a3e7e61293f0080194000807bbf0000803e295677bfef1184be00000000ffffffffd9729a3e7e61293f009c184000206ebf00000000126477bf8ba983be00000000ffffffff0163923efbc2323f009c184000206ebf0000803ed46877bfc48583be00000000ffffffff0163923efbc2323f00f01740000064bf00000000996e77bf515a83be00000000ffffffff134e8c3eeedc393f00f01740000064bf0000803e996e77bf515a83be00000000ffffffff134e8c3eeedc393f00f01740000064bf00000000fbce7e3fb05cc53d00000000ffffffff134e8c3eeedc393f00f01740000064bf0000803efbce7e3fb05cc53d00000000ffffffff134e8c3eeedc393f007c184000987abf000000009b187f3f11f3ab3d00000000ffffffff5841913e35042a3f007c184000987abf0000803ee1537f3f0955943d00000000ffffffff5841913e35042a3f00e0184000f089bf0000000033ab7f3fe94c503d00000000ffffffff89ca943ef148183f00e0184000f089bf0000803ed4c87f3f630a283d00000000ffffffff89ca943ef148183f001c1940008c98bf00000000d1ed7f3f7bf5c03c00000000ffffffffa7e9963eb2ca033f001c1940008c98bf0000803eaef77f3fd58d823c00000000ffffffffa7e9963eb2ca033f0030194000c0a9bf00000000beff7f3f923e383b00000000ffffffffb19e973e0f52d73e0030194000c0a9bf0000803ef9ff7f3fdaf26f3a00000000ffffffffb19e973e0f52d73e003019400080f6bf00000000ffff7f3f0000000000000000ffffffffb19e973e00000000003019400080f6bf0000803effff7f3f0000000000000000ffffffffb19e973e00000000003019400080f6bf0000000000000000000080bf00000000ffffffffb19e973e00000000003019400080f6bf0000803e00000000000080bf00000000ffffffffb19e973e00000000007008400080f6bf0000000000000000000080bf00000000ffffffff0000000000000000007008400080f6bf0000803e00000000000080bf00000000ffffffff000000000000000000505d400080f6bf000000000000000000000000000080bfffffffff34f6b23e0000000000505d4000c0a0bf000000000000000000000000000080bfffffffff34f6b23ee391f03e00304840000000bf000000000000000000000000ffff7fbfffffffff000000000000803f00605b40000000bf000000000000000000000000000080bfffffffff4f8ca23e0000803f00606140000042bf000000000000000000000000000080bfffffffffa160d53ea8b5513f00fc624000b853bf000000000000000000000000000080bfffffffffe902e33e3e48453f00706440006065bf000000000000000000000000ffff7fbfffffffff5552ef3e0de6383f00c86540002877bf000000000000000000000000000080bfffffffff8db4fa3e6a6d2c3f0010674000a084bf000000000000000000000000000080bfffffffff9cc7023fabbc1f3f003c684000b075bf000000000000000000000000000080bfffffffff58be073f21752d3f00806940008063bf000000000000000000000000000080bfffffffffbd1a0d3fb5363a3f00d46a4000e052bf000000000000000000000000000080bfffffffffe7ba123fbddf453f00306c40000044bf000000000000000000000000000080bffffffffff57c183f8e4e503f00d07240000000bf000000000000000000000000000080bfffffffffd78c343f0000803f00508240000000bf000000000000000000000000000080bfffffffff0000803f0000803f00606f4000c0a0bf000000000000000000000000000080bfffffffff5afd253fe391f03e00606f400080f6bf000000000000000000000000000080bfffffffff5afd253f0000000000505d400080f6bf0000803e00000000000000000000803fffffffff34f6b23e0000000000505d4000c0a0bf0000803e00000000000000000000803fffffffff34f6b23ee391f03e00304840000000bf0000803e0000000000000000ffff7f3fffffffff000000000000803f00605b40000000bf0000803e00000000000000000000803fffffffff4f8ca23e0000803f00606140000042bf0000803e00000000000000000000803fffffffffa160d53ea8b5513f00fc624000b853bf0000803e00000000000000000000803fffffffffe902e33e3e48453f00706440006065bf0000803e0000000000000000ffff7f3fffffffff5552ef3e0de6383f00c86540002877bf0000803e00000000000000000000803fffffffff8db4fa3e6a6d2c3f0010674000a084bf0000803e00000000000000000000803fffffffff9cc7023fabbc1f3f003c684000b075bf0000803e00000000000000000000803fffffffff58be073f21752d3f00806940008063bf0000803e00000000000000000000803fffffffffbd1a0d3fb5363a3f00d46a4000e052bf0000803e00000000000000000000803fffffffffe7ba123fbddf453f00306c40000044bf0000803e00000000000000000000803ffffffffff57c183f8e4e503f00d07240000000bf0000803e00000000000000000000803fffffffffd78c343f0000803f00508240000000bf0000803e00000000000000000000803fffffffff0000803f0000803f00606f4000c0a0bf0000803e00000000000000000000803fffffffff5afd253fe391f03e00606f400080f6bf0000803e00000000000000000000803fffffffff5afd253f0000000000505d400080f6bf00000000000080bf0000000000000000ffffffff34f6b23e0000000000505d400080f6bf0000803e000080bf0000000000000000ffffffff34f6b23e0000000000505d4000c0a0bf00000000f2e17cbf82511fbe00000000ffffffff34f6b23ee391f03e00505d4000c0a0bf0000803e1b0775bff94994be00000000ffffffff34f6b23ee391f03e00304840000000bf00000000159b6abfb3e6ccbe00000000ffffffff000000000000803f00304840000000bf0000803e159b6abfb3e6ccbe00000000ffffffff000000000000803f00304840000000bf0000000000000000ffff7f3f00000000ffffffff000000000000803f00304840000000bf0000803e00000000ffff7f3f00000000ffffffff000000000000803f00605b40000000bf0000000000000000ffff7f3f00000000ffffffff4f8ca23e0000803f00605b40000000bf0000803e00000000ffff7f3f00000000ffffffff4f8ca23e0000803f00605b40000000bf000000004c96703ff2f8ae3e00000000ffffffff4f8ca23e0000803f00605b40000000bf0000803e4c96703ff2f8ae3e00000000ffffffff4f8ca23e0000803f00606140000042bf000000000e97703fd2f4ae3e00000000ffffffffa160d53ea8b5513f00606140000042bf0000803e8498703fc2ecae3e00000000ffffffffa160d53ea8b5513f00fc624000b853bf00000000997a713fcdfca93e00000000ffffffffe902e33e3e48453f00fc624000b853bf0000803e5454723f4713a53e00000000ffffffffe902e33e3e48453f00706440006065bf00000000a7ce733fe3209c3e00000000ffffffff5552ef3e0de6383f00706440006065bf0000803ea46f743f0525983e00000000ffffffff5552ef3e0de6383f00c86540002877bf000000002c7b753f2d42913e00000000ffffffff8db4fa3e6a6d2c3f00c86540002877bf0000803ec6e6753ff0628e3e00000000ffffffff8db4fa3e6a6d2c3f0010674000a084bf000000005e4f763f7c888b3e00000000ffffffff9cc7023fabbc1f3f0010674000a084bf0000803e5e4f763f7c888b3e00000000ffffffff9cc7023fabbc1f3f0010674000a084bf00000000eaf378bfe69c6e3e00000000ffffffff9cc7023fabbc1f3f0010674000a084bf0000803eeaf378bfe69c6e3e00000000ffffffff9cc7023fabbc1f3f003c684000b075bf000000009f3e78bfbe237a3e00000000ffffffff58be073f21752d3f003c684000b075bf0000803e737877bf0610833e00000000ffffffff58be073f21752d3f00806940008063bf0000000034c975bf922e8f3e00000000ffffffffbd1a0d3fb5363a3f00806940008063bf0000803e7fdd74bfde5b953e00000000ffffffffbd1a0d3fb5363a3f00d46a4000e052bf00000000d6d472bf0c19a23e00000000ffffffffe7ba123fbddf453f00d46a4000e052bf0000803ee2b271bfacbba83e00000000ffffffffe7ba123fbddf453f00306c40000044bf00000000061e6fbfb9dab63e00000000fffffffff57c183f8e4e503f00306c40000044bf0000803e1bb86ebf5decb83e00000000fffffffff57c183f8e4e503f00d07240000000bf00000000fe866ebf37e9b93e00000000ffffffffd78c343f0000803f00d07240000000bf0000803efe866ebf37e9b93e00000000ffffffffd78c343f0000803f00d07240000000bf00000000000000000000803f00000000ffffffffd78c343f0000803f00d07240000000bf0000803e000000000000803f00000000ffffffffd78c343f0000803f00508240000000bf00000000000000000000803f00000000ffffffff0000803f0000803f00508240000000bf0000803e000000000000803f00000000ffffffff0000803f0000803f00508240000000bf0000000014626a3f01ebcdbe00000000ffffffff0000803f0000803f00508240000000bf0000803e14626a3f01ebcdbe00000000ffffffff0000803f0000803f00606f4000c0a0bf00000000e5e7743f991795be00000000ffffffff5afd253fe391f03e00606f4000c0a0bf0000803ea6d87c3ff43c20be00000000ffffffff5afd253fe391f03e00606f400080f6bf000000000000803f0000000000000000ffffffff5afd253f0000000000606f400080f6bf0000803e0000803f0000000000000000ffffffff5afd253f0000000000606f400080f6bf0000000000000000000080bf00000000ffffffff5afd253f0000000000606f400080f6bf0000803e00000000000080bf00000000ffffffff5afd253f0000000000505d400080f6bf0000000000000000000080bf00000000ffffffff34f6b23e0000000000505d400080f6bf0000803e00000000000080bf00000000ffffffff34f6b23e00000000 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 2.0361328, y: -1.2124023, z: 0.125} + m_Extent: {x: 2.0361328, y: 0.73095703, z: 0.125} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/Assets/ShinySSRR/Demo/Materials/SHINY.asset.meta b/Assets/ShinySSRR/Demo/Materials/SHINY.asset.meta new file mode 100644 index 00000000..201d0f0a --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/SHINY.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7df98aac384664f258cb7819563222e0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Materials/ShinyText.mat b/Assets/ShinySSRR/Demo/Materials/ShinyText.mat new file mode 100644 index 00000000..ae5d42eb --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/ShinyText.mat @@ -0,0 +1,109 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3129266592905315525 +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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 2 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ShinyText + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _RECEIVE_SHADOWS_OFF + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 0 + - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/Assets/ShinySSRR/Demo/Materials/ShinyText.mat.meta b/Assets/ShinySSRR/Demo/Materials/ShinyText.mat.meta new file mode 100644 index 00000000..052d35fd --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/ShinyText.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4722affc8a4174224b0373590433dd61 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Materials/Silk.mat b/Assets/ShinySSRR/Demo/Materials/Silk.mat new file mode 100644 index 00000000..96210080 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Silk.mat @@ -0,0 +1,119 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Silk + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.7 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 0.75 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.6 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.49411762, g: 0.14509797, b: 0.16470581, a: 1} + - _Color: {r: 0.49411765, g: 0.14509805, b: 0.16470589, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SpecularColor: {r: 0.74264705, g: 0.20750435, b: 0.216731, a: 1} +--- !u!114 &7254247028269435741 +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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 2 diff --git a/Assets/ShinySSRR/Demo/Materials/Silk.mat.meta b/Assets/ShinySSRR/Demo/Materials/Silk.mat.meta new file mode 100644 index 00000000..56c26322 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Silk.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: cc0954b3a33054342b0fd89feda97068 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/Assets/ShinySSRR/Demo/Materials/Wall.mat b/Assets/ShinySSRR/Demo/Materials/Wall.mat new file mode 100644 index 00000000..b3c270e1 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Wall.mat @@ -0,0 +1,119 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6803998695329737601 +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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 2 +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Wall + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _NORMALMAP _OCCLUSIONMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 9d4329142f9cd482983a58ac599786dd, type: 3} + m_Scale: {x: 3, y: 3} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: fd639c096a8584af0b7b70577421b9a1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 10, y: 10} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 3, y: 3} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 9d4329142f9cd482983a58ac599786dd, type: 3} + m_Scale: {x: 3, y: 3} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 4eef545667c58495ea824bd3998da006, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 2800000, guid: a1d43acc22aa4427f89ca56382ce5272, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlphaClip: 0 + - _AlphaTestRef: 0.5 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 0.02 + - _DstBlend: 0 + - _EmissionScaleUI: 1 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0.325 + - _Glossiness: 0.311 + - _GlossyReflections: 1 + - _Lightmapping: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.0203 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.311 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0.99999994} + - _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 1, g: 1, b: 1, a: 1} + - _SpecularColor: {r: 0.11764706, g: 0.11764706, b: 0.11764706, a: 1} diff --git a/Assets/ShinySSRR/Demo/Materials/Wall.mat.meta b/Assets/ShinySSRR/Demo/Materials/Wall.mat.meta new file mode 100644 index 00000000..79a3b11b --- /dev/null +++ b/Assets/ShinySSRR/Demo/Materials/Wall.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: c756ee1000105437892bd5901771ff7b +NativeFormatImporter: + userData: + assetBundleName: diff --git a/Assets/ShinySSRR/Demo/Scene.unity b/Assets/ShinySSRR/Demo/Scene.unity new file mode 100644 index 00000000..7f48ad3b --- /dev/null +++ b/Assets/ShinySSRR/Demo/Scene.unity @@ -0,0 +1,1622 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 2 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.1804663, g: 0.22593236, b: 0.30702642, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 1 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000000, guid: 334c1ca31d9f941d69425982909406b3, + type: 2} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &165230857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 102722, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 165230858} + m_Layer: 0 + m_Name: CalibrationWalls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &165230858 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 431536, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165230857} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1165184421} + - {fileID: 181859161} + - {fileID: 1435719952} + - {fileID: 1525858954} + m_Father: {fileID: 1694850532} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &181859160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 125776, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 181859161} + - component: {fileID: 181859164} + - component: {fileID: 181859163} + - component: {fileID: 181859162} + m_Layer: 0 + m_Name: CalibrationWallRearRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &181859161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 494730, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181859160} + m_LocalRotation: {x: 0.5, y: 0.5, z: -0.5000001, w: 0.49999994} + m_LocalPosition: {x: -2.5, y: 2.5, z: 0} + m_LocalScale: {x: 0.5, y: 1, z: 0.49999997} + m_Children: [] + m_Father: {fileID: 165230858} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &181859162 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2304408, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181859160} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c756ee1000105437892bd5901771ff7b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &181859163 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6442406, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181859160} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &181859164 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3378452, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181859160} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &472769855 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100000, guid: e11f662626928b14e8f57acb029360b9, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 472769856} + - component: {fileID: 472769857} + m_Layer: 0 + m_Name: DirectionalLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &472769856 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400000, guid: e11f662626928b14e8f57acb029360b9, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472769855} + m_LocalRotation: {x: 0.4095739, y: -0.74160993, z: 0.53017515, w: -0.0343263} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 409.31, y: 131.908, z: -80.97} +--- !u!108 &472769857 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 10800000, guid: e11f662626928b14e8f57acb029360b9, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472769855} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.9885849, b: 0.95686275, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 1 + m_NormalBias: 1 + 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: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &567592204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 567592205} + - component: {fileID: 567592208} + - component: {fileID: 567592207} + - component: {fileID: 567592206} + - component: {fileID: 567592209} + - component: {fileID: 567592210} + m_Layer: 0 + m_Name: Mirror + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &567592205 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_LocalRotation: {x: -0.12019721, y: -0.19789091, z: 0.1420371, w: -0.9624018} + m_LocalPosition: {x: 1.667, y: 0.42, z: 0.716} + m_LocalScale: {x: 0.5, y: 0.72956, z: 0.01} + m_Children: [] + m_Father: {fileID: 1694850532} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 16.713001, y: -338.774, z: -13.6380005} +--- !u!23 &567592206 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 823e4ead765ed42a58a2334b8058ca00, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &567592207 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &567592208 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &567592209 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 75f82f03739e4499282c234601d0b1ad, type: 3} + m_Name: + m_EditorClassIdentifier: + ignore: 0 + scope: 0 + layerMask: + serializedVersion: 2 + m_Bits: 4294967295 + nameFilter: + subMeshMask: 0 + useMaterialSmoothness: 0 + materialSmoothnessMapPropertyName: _MetallicGlossMap + materialSmoothnessIntensityPropertyName: _Glossiness + smoothness: 1 + perSubMeshSmoothness: 0 + subMeshSettings: [] + useMaterialNormalMap: 0 + materialNormalMapPropertyName: _BumpMap + overrideGlobalSettings: 1 + sampleCount: 16 + stepSize: 0.1 + binarySearchIterations: 6 + thickness: 0.2 + decay: 1 + fresnel: 0 + fuzzyness: 0 + contactHardening: 0 + jitter: 0.3 +--- !u!114 &567592210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 567592204} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c13d913a91f304bc5bc349878064d02d, type: 3} + m_Name: + m_EditorClassIdentifier: + axis: {x: 0, y: 1, z: 0} + speed: 60 +--- !u!1 &617211756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 195550, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 617211757} + - component: {fileID: 617211762} + - component: {fileID: 617211761} + - component: {fileID: 617211760} + m_Layer: 1 + m_Name: SilkSphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &617211757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 403562, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617211756} + m_LocalRotation: {x: 0.6559353, y: -0, z: -0, w: 0.7548171} + m_LocalPosition: {x: 0.53, y: -0.021, z: 1.08} + m_LocalScale: {x: 1, y: 1, z: 0.3} + m_Children: [] + m_Father: {fileID: 1202089666} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 81.981, y: 0, z: 0} +--- !u!23 &617211760 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2319362, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617211756} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 3 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: cc0954b3a33054342b0fd89feda97068, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 617211757} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &617211761 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 13518414, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617211756} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &617211762 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3336432, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 617211756} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &656694097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 158430, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 656694098} + - component: {fileID: 656694104} + - component: {fileID: 656694103} + - component: {fileID: 656694102} + m_Layer: 1 + m_Name: GoldSphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &656694098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 494476, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656694097} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.837, y: 0.268, z: -0.108} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1202089666} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &656694102 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2319392, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656694097} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 3 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5096e016b7e68464899a979f01e98542, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &656694103 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 13548954, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656694097} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &656694104 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3351936, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656694097} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &965526239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100000, guid: 97b34cadc45c6d94abd78dfc533fc3b2, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 965526244} + - component: {fileID: 965526243} + - component: {fileID: 965526240} + - component: {fileID: 965526241} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &965526240 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 8100000, guid: 97b34cadc45c6d94abd78dfc533fc3b2, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965526239} + m_Enabled: 1 +--- !u!114 &965526241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965526239} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cf716a1be50b448e7b1d1968ab734946, type: 3} + m_Name: + m_EditorClassIdentifier: + showInSceneView: 1 + downsampling: 1 + depthBias: 0.01 + outputMode: 0 + separationPos: 0.55 + lowPrecision: 0 + sampleCount: 64 + stepSize: 0.29 + binarySearchIterations: 6 + thickness: 0.17 + jitter: 0.268 + animatedJitter: 0 + reflectionsMultiplier: 1 + reflectionsMinIntensity: 0 + reflectionsMaxIntensity: 0.9 + fresnel: 0.75 + decay: 4 + specularControl: 1 + specularSoftenPower: 15 + vignetteSize: 1.1 + fuzzyness: 0 + contactHardening: 0 + minimumBlur: 0 + blurDownsampling: 1 +--- !u!20 &965526243 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2000000, guid: 97b34cadc45c6d94abd78dfc533fc3b2, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965526239} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.25, g: 0.25, b: 0.25, a: 0.003921569} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 20 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: 3 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &965526244 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400000, guid: 97b34cadc45c6d94abd78dfc533fc3b2, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965526239} + m_LocalRotation: {x: 0.009687304, y: -0.99049336, z: 0.0896651, w: 0.10387209} + m_LocalPosition: {x: 0.9737709, y: 0.86444944, z: 2.951747} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 10, y: -180, z: 0} +--- !u!1 &1016798143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1016798146} + - component: {fileID: 1016798145} + - component: {fileID: 1016798144} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1016798144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016798143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1016798145 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016798143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1016798146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016798143} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1165184420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 182018, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1165184421} + - component: {fileID: 1165184424} + - component: {fileID: 1165184423} + - component: {fileID: 1165184422} + m_Layer: 0 + m_Name: CalibrationWallRearLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1165184421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 464034, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165184420} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} + m_LocalPosition: {x: 0, y: 2.5, z: -2.5} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_Children: [] + m_Father: {fileID: 165230858} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1165184422 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2391912, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165184420} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c756ee1000105437892bd5901771ff7b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1165184423 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6494426, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165184420} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1165184424 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3305810, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165184420} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1179472412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100006, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1179472413} + - component: {fileID: 1179472416} + - component: {fileID: 1179472415} + - component: {fileID: 1179472414} + - component: {fileID: 1179472417} + m_Layer: 0 + m_Name: CalibrationFloor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1179472413 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400006, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_Children: [] + m_Father: {fileID: 1694850532} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1179472414 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2300004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c5e68f4db72684d25be883ee27d7fa97, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1179472415 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6400004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1179472416 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3300004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1179472417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179472412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 75f82f03739e4499282c234601d0b1ad, type: 3} + m_Name: + m_EditorClassIdentifier: + ignore: 0 + scope: 0 + layerMask: + serializedVersion: 2 + m_Bits: 4294967295 + nameFilter: + subMeshMask: 0 + useMaterialSmoothness: 1 + materialSmoothnessMapPropertyName: _MetallicGlossMap + materialSmoothnessIntensityPropertyName: _Glossiness + smoothness: 0.7 + perSubMeshSmoothness: 0 + subMeshSettings: + - smoothness: 0 + useMaterialNormalMap: 1 + materialNormalMapPropertyName: _BumpMap + overrideGlobalSettings: 1 + sampleCount: 73 + stepSize: 0.29 + binarySearchIterations: 6 + thickness: 0.276 + decay: 2 + fresnel: 0.75 + fuzzyness: 0 + contactHardening: 0 + jitter: 0.268 +--- !u!1 &1202089665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 190392, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1202089666} + - component: {fileID: 1202089667} + m_Layer: 0 + m_Name: SampleSpheres + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1202089666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 470018, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202089665} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1392572691} + - {fileID: 656694098} + - {fileID: 617211757} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1202089667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202089665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 75f82f03739e4499282c234601d0b1ad, type: 3} + m_Name: + m_EditorClassIdentifier: + ignore: 0 + scope: 10 + layerMask: + serializedVersion: 2 + m_Bits: 4294967295 + nameFilter: + subMeshMask: 0 + useMaterialSmoothness: 1 + materialSmoothnessMapPropertyName: _MetallicGlossMap + materialSmoothnessIntensityPropertyName: _Glossiness + smoothness: 0.75 + perSubMeshSmoothness: 0 + subMeshSettings: [] + useMaterialNormalMap: 1 + materialNormalMapPropertyName: _BumpMap + overrideGlobalSettings: 1 + sampleCount: 73 + stepSize: 0.29 + binarySearchIterations: 6 + thickness: 0.276 + decay: 2 + fresnel: 0.75 + fuzzyness: 0 + contactHardening: 0 + jitter: 0.268 +--- !u!1 &1392572690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 145214, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1392572691} + - component: {fileID: 1392572696} + - component: {fileID: 1392572695} + - component: {fileID: 1392572694} + - component: {fileID: 1392572692} + m_Layer: 1 + m_Name: PlasticSphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1392572691 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 473706, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.765, y: 0.23, z: 1.473} + m_LocalScale: {x: 0.88, y: 0.65, z: 0.5} + m_Children: [] + m_Father: {fileID: 1202089666} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1392572692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c13d913a91f304bc5bc349878064d02d, type: 3} + m_Name: + m_EditorClassIdentifier: + axis: {x: 0, y: 1, z: 0} + speed: 60 +--- !u!23 &1392572694 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2375834, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 3 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1f83895e6354f411da22ab491b664095, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!135 &1392572695 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 13564548, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1392572696 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3335484, guid: d7720c2417695eb45bd70f6d10a17068, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392572690} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1435719951 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1435719952} + - component: {fileID: 1435719955} + - component: {fileID: 1435719954} + - component: {fileID: 1435719953} + m_Layer: 0 + m_Name: CalibrationWallFrontLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1435719952 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435719951} + m_LocalRotation: {x: 0.5000003, y: -0.5000001, z: -0.49999964, w: -0.50000006} + m_LocalPosition: {x: 2.4999998, y: 2.5, z: 0} + m_LocalScale: {x: 0.4999999, y: 1, z: 0.4999999} + m_Children: [] + m_Father: {fileID: 165230858} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1435719953 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2300002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435719951} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c756ee1000105437892bd5901771ff7b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1435719954 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6400002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435719951} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1435719955 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3300002, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435719951} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1525858953 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1525858954} + - component: {fileID: 1525858957} + - component: {fileID: 1525858956} + - component: {fileID: 1525858955} + m_Layer: 0 + m_Name: CalibrationWallFrontRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 65 + m_IsActive: 1 +--- !u!4 &1525858954 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525858953} + m_LocalRotation: {x: 0.70710695, y: 0.0000002682209, z: 0.00000021584746, w: -0.7071066} + m_LocalPosition: {x: 0, y: 2.500002, z: 2.5000014} + m_LocalScale: {x: 0.49999997, y: 1, z: 0.5} + m_Children: [] + m_Father: {fileID: 165230858} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1525858955 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2300000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525858953} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 823e4ead765ed42a58a2334b8058ca00, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!64 &1525858956 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6400000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525858953} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1525858957 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 3300000, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525858953} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1694850531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1694850532} + m_Layer: 0 + m_Name: StaticGeometry + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1694850532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400004, guid: a3244c08ab4d16f45b564401c17e84d4, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694850531} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1179472413} + - {fileID: 165230858} + - {fileID: 567592205} + - {fileID: 2117803091} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2117803087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2117803091} + - component: {fileID: 2117803090} + - component: {fileID: 2117803089} + m_Layer: 0 + m_Name: ShinyText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2117803089 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117803087} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4722affc8a4174224b0373590433dd61, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2117803090 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117803087} + m_Mesh: {fileID: 4300000, guid: 7df98aac384664f258cb7819563222e0, type: 2} +--- !u!4 &2117803091 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117803087} + m_LocalRotation: {x: 0, y: 0.9893614, z: -0, w: -0.14547859} + m_LocalPosition: {x: 2.17, y: 1.93, z: -1.58} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1694850532} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 196.73, z: 0} diff --git a/Assets/ShinySSRR/Demo/Scene.unity.meta b/Assets/ShinySSRR/Demo/Scene.unity.meta new file mode 100644 index 00000000..c9f4f930 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Scene.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6f71b213fc61141bd8073cd41403bdf7 +timeCreated: 1542877475 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Scripts.meta b/Assets/ShinySSRR/Demo/Scripts.meta new file mode 100644 index 00000000..36da5e01 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1cd737baac9345c4a35ba1a8739e71e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Scripts/Rotate.cs b/Assets/ShinySSRR/Demo/Scripts/Rotate.cs new file mode 100644 index 00000000..0d987627 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Scripts/Rotate.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +namespace ShinySSRR { + + public class Rotate : MonoBehaviour { + + public Vector3 axis = Vector3.up; + public float speed = 60f; + + void Update() { + transform.Rotate(axis * (Time.deltaTime * speed)); + + } + } + +} \ No newline at end of file diff --git a/Assets/ShinySSRR/Demo/Scripts/Rotate.cs.meta b/Assets/ShinySSRR/Demo/Scripts/Rotate.cs.meta new file mode 100644 index 00000000..b352bdb8 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Scripts/Rotate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c13d913a91f304bc5bc349878064d02d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Textures.meta b/Assets/ShinySSRR/Demo/Textures.meta new file mode 100644 index 00000000..c2fbb3d7 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9030b1a978d064cad96fc5af58408379 +folderAsset: yes +timeCreated: 1542901861 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_diff_1k.png b/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_diff_1k.png new file mode 100644 index 00000000..05469a08 Binary files /dev/null and b/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_diff_1k.png differ diff --git a/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_diff_1k.png.meta b/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_diff_1k.png.meta new file mode 100644 index 00000000..c82ea092 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_diff_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 40351333731c94777b93eda89ce1d4eb +timeCreated: 1542918613 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_nor_1k.png b/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_nor_1k.png new file mode 100644 index 00000000..9bbac775 Binary files /dev/null and b/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_nor_1k.png differ diff --git a/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_nor_1k.png.meta b/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_nor_1k.png.meta new file mode 100644 index 00000000..4934abb1 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Textures/floor_tiles_06_nor_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 69735cf47f0104165973f07ff96d4d98 +timeCreated: 1542918925 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png new file mode 100644 index 00000000..e4491ca6 Binary files /dev/null and b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png differ diff --git a/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png.meta b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png.meta new file mode 100644 index 00000000..20059ed9 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_AO_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 4eef545667c58495ea824bd3998da006 +timeCreated: 1542918613 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png new file mode 100644 index 00000000..1f5d9264 Binary files /dev/null and b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png differ diff --git a/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png.meta b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png.meta new file mode 100644 index 00000000..a3036993 --- /dev/null +++ b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_Nor_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: fd639c096a8584af0b7b70577421b9a1 +timeCreated: 1542918741 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png new file mode 100644 index 00000000..10e299c9 Binary files /dev/null and b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png differ diff --git a/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png.meta b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png.meta new file mode 100644 index 00000000..a270051c --- /dev/null +++ b/Assets/ShinySSRR/Demo/Textures/red_brick_plaster_patch_02_diff_1k.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 9d4329142f9cd482983a58ac599786dd +timeCreated: 1542918615 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Documentation.meta b/Assets/ShinySSRR/Documentation.meta new file mode 100644 index 00000000..d56e491c --- /dev/null +++ b/Assets/ShinySSRR/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a22dad3c37b6a45c985b13d5ef39823b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Documentation/Documentation.pdf b/Assets/ShinySSRR/Documentation/Documentation.pdf new file mode 100644 index 00000000..11f073b3 --- /dev/null +++ b/Assets/ShinySSRR/Documentation/Documentation.pdf @@ -0,0 +1,183 @@ +USER GUIDE + 1 + Contents + +Introduction ............................................................................................................................................3 +Setup ......................................................................................................................................................3 +Requirements ..................................................................................................................................................................... 3 +Configuration .....................................................................................................................................................................3 +Demo Scene .......................................................................................................................................................................3 +How to add reflections to your scenes ......................................................................................................4 +Forward rendering configuration ......................................................................................................................................4 + + Why is necessary to add a Reflections script on the objects? .......................................................................................5 +Deferred rendering configuration .....................................................................................................................................5 +Global settings ...................................................................................................................................................................6 + + General settings.............................................................................................................................................................6 + Raytracing settings........................................................................................................................................................6 + Reflection Intensity ........................................................................................................................................................7 +Reflection Sharpness..........................................................................................................................................................7 +Support...................................................................................................................................................7 + + 2 + Introduction + +Thank you for purchasing! +Shiny SSRR means Screen Space Raytraced Reflections. +Reflections add a realistic touch to many surfaces. Use them wisely and in a subtle way to improve the quality +of your scenes. +This is a camera effect which has benefits and limitations: + + - Benefits: it’s very fast and independent of scene complexity. + - Limitations: only visible objects can render reflections on the scene. + +Setup + +Requirements + ▪ Unity 2019.4 LTS + ▪ Forward or deferred rendering path. + ▪ Windows / Mac desktop platforms. + +Configuration + 1) Make sure your project meets the above requirements. + 2) Import Shiny SSRR asset into your project. + 3) Add Shiny SSRR to your camera. + +Demo Scene +If everything is properly setup, you should be able to see the reflections in the included demo scene. + + 3 + How to add reflections to your scenes + +Shiny SSRR can be run in forward or deferred mode depending on your camera rendering path setting. +In forward, in addition to add Shiny SSRR to your camera, you need to add a Reflections script to any object +or group of objects that will receive reflections. Each group of objects can use different settings bringing lot +of flexibility. +In deferred, only global settings on the camera script (Shiny SSRR script) are used and Reflections scripts are +ignored because Shiny SSRR will work with the g-buffers which are independent of the scene geometry. + +Forward rendering configuration +In this mode, add the Reflections script to any game object that you want to receive reflections. A single +Reflections script can cover many game objects thanks to the “Scope” options shown in the inspector below: + +When you add this script to the game object, it will start receiving reflections (assuming you have the +Screen Space Reflections render feature correctly installed as described in the previous page). +The rest of options are: + + - Ignore: enable this option to exclude this game object from getting any reflection. This is useful if + you assign the Reflections script to the root of a group of objects, but you don’t want reflections on + some of them. + + - Scope: in addition to add reflections to this object, you can specify that reflections should also be + added to the children of the object. And you can also specify some filters, like the layer, a name + pattern or specific sub-meshes. + + - Use Material Smoothness: if the game object uses a PBR material with _Smoothness property, the + asset can use that value so changing the smoothness of the material will affect the reflections as well. + + - Per Sub Mesh Smoothness: let you specify a different smoothness value per submesh. + - Smothness: if the “Use Material Smoothness” is not enabled or the material doesn’t have a + + smoothness property, this value will be used instead. + - Use Material Normal Map: if the game object uses a material with a normal map, use it. If the + + material has no normal texture, this option will be ignored. + - Material Property Names: this are the default names for usual smoothness map textures, normal + + map and smoothness intensity values used in standard shader. Feel free to specify custom shader + + 4 + property names if required. The smoothness value is encoded in the alpha channel of the smoothness + map so make sure that texture preserves the alpha value in Import settings. + - Override Global Settings: let you use different raytracing settings only for this object. + Hint: in forward rendering mode, you can also customize the reflection intensity modifying the alpha + + value of the color of that material. + +Why is necessary to add a Reflections script on the objects? +Because forward renderer doesn’t store (by default) normals and smoothness into a dedicated buffer which +are required to compute reflections. The asset needs to compute the normal per object in order to produce +correct reflections. In deferred rendering path, Shiny SSRR can leverage the g-buffers to automate the effect +on the entire scene without requiring you to add the Reflections scripts. +However, there’s a bonus for using this method: by adding and customizing Reflections per group of objects +you have total control of how the effect renders on the screen. In order to make this process faster, there’re +global settings that are automatically applied to all reflections (see next section). +Also, because you’re specifying which objects will require reflections, the overall result can render faster +because the system doesn’t need to process the entire screen – only those pixels of the objects that will +receive reflections. + +Deferred rendering configuration +If your camera is set to deferred rendering path, Shiny SSRR will detect this and automatically work in that +mode. +Benefits of deferred include a unified approach to reflections and more physically based results since +smoothness is read per pixel. Also, you don’t need to add the Reflections script to the objects that will receive +reflections. +On the other hand, you lose a bit of flexibility since you can no longer customize the raytracing settings per +object but globally. This can be tricky as sometimes you prefer to use less or more samples or different decay +or jitter settings for example. Also, because deferred applies to entire screen, it can be a bit more expensive. + + 5 + Global settings +The global settings are located in the Shiny SSRR render feature itself and provide options that affect all +reflections. These settings are shown in the screenshot below: + +General settings + - Show In Scene View: this option allows you to disable reflections while working in the SceneView. + - Downsampling: applies the effect to a reduced size image buffer improving performance in exchange + of accuracy/quality. Depth Bias is used to clip reflections by depth buffer so objects on top of others + do not get reflections. The Depth Bias parameter is used only when downsampling is greater than 1 + and only if camera is rendering in forward rendering path. + - Output Mode: let you debug the result or show a side-by-side comparison between the original + image and the image with reflections. + - Low Precision: uses LDR buffer (ARGB32) instead of HDR (ARGBhalf) buffer for reflection buffers. + +Raytracing settings + - Sample Count: the number of steps used in the raytracer. The more samples, the more quality and + extensive the reflections result. + - Max Ray Length: the maximum distance of reflections. + - Thickness: when the ray passes behind an object, it needs to figure if it’s hitting the object or passing + behind it. Since the back faces of objects are not rendered, the asset uses a fixed value. Increase this + value to ensure all reflections are captured. + - Binary Search Iterations: increase to refine the hit position detected by the raytracer. Usually a value + of 6 or 8 is enough in most situations. + - Thickness Fine: when this option is enabled, after the binary search has refined the reflection hit + position, the algorithm will discard the reflection hit if the distance from the ray to the surface is + greater than this value. Therefore, this is the actual thickness value used after binary search. Keep it + as low as possible as long as reflections look bright and sharp. + - Jitter: reduces banding artefacts by adding a random offset to the starting position of the rays. + - Animated jitter: this option changes the jitter amount per pixel every frame redistributing the noise. + 6 + Reflection Intensity + - Global Multiplier: this is a global multiplier to all reflections intensity and let you tune down the + effect globally. + - Min Intensity: determines the minimum reflection intensity on all surfaces. Can be used to force a + very shiny environment. + - Max Intensity: caps the maximum reflection intensity on any surface. + - Fresnel: this setting reduces the reflection intensity based on the view angle to the surface. A value + of 1 gives more realistic results. + - Decay: this setting reduces the reflection intensity based on the distance to the reflected point. + - Specular Control: reduces intensity of specular in the reflections. This will produce less + flickering/shimmering in the scene caused by certain materials. + - Vignette Size: reflections are tuned down around the screen borders. This setting controls the + intensity of this reduction. + +Reflection Sharpness + - Fuzzyness: a blur multiplier which is also based on the distance to the reflected point so distant + reflections look blurrier than contact reflections. + - Contact Hardening: increases the sharpness of contact (short distance) reflections. + - Minimum Blur: defines the minimum blur intensity for all reflections. + - Blur Downsampling: size of the blur buffers. Increasing only if you want to improve performance a + bit. + - Blur Strength: let you control the blur spread along the x and y axis. + +Support + +We hope you find the asset easy and fun to use. Feel free to contact us for any enquiry. +Visit our Support Forum on https://kronnect.com for help and access to the latest beta releases. +Kronnect Technologies +Email: contact@kronnect.com +Support Forum: https://www.kronnect.com/support + + 7 + diff --git a/Assets/ShinySSRR/Documentation/Documentation.pdf.meta b/Assets/ShinySSRR/Documentation/Documentation.pdf.meta new file mode 100644 index 00000000..b22a357b --- /dev/null +++ b/Assets/ShinySSRR/Documentation/Documentation.pdf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e1bbb55d9cc634ffcadd831c02b5d9e1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Documentation/Kronnect Assets.pdf b/Assets/ShinySSRR/Documentation/Kronnect Assets.pdf new file mode 100644 index 00000000..3d1fda1b --- /dev/null +++ b/Assets/ShinySSRR/Documentation/Kronnect Assets.pdf @@ -0,0 +1,263 @@ +Don’t miss these other cool assets brought to you by + + BEAUTIFY 2 is an acclaimed full-screen image processing effect that improves the image quality in real time + + producing incredibly crisp and vivid scenes. Compatible with built-in, LWRP and URP pipelines. + In addition to this unique image enhancement filter, you will find in Beautify additional effects like high quality Bloom, + dirty lens effect, vignetting, night & thermal vision and more! + Get it on the Asset Store: + + https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/beautify-2-advanced-post-processing-163949?aid=1101lGsd + + DYNAMIC FOG & MIST 2 is a full-screen image effect that adds live, moving Fog, Mist and Sky Haze to your scenes + + making them less dull and boring. Compatible with built-in and URP pipelines. + Get it on the Asset Store: + + https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/dynamic-fog-mist-48200?aid=1101lGsd + + VOLUMETRIC FOG & MIST 2 is the enhanced version of Dynamic Fog & Mist (which is also included in the package) + + and has been designed to provide a better-looking fog and cloud formations with support of lighting and glow effects. + Compatible with built-in and URP pipelines. + It’s feature-rich with options like fog of war, Sun tracking, better transparent and sprite support, sun shafts and more. + Get it on the Asset Store: + + https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/volumetric-fog-mist-2-162694?aid=1101lGsd + WORLD POLITICAL MAP SERIES is a collection of professional mapping assets for Unity (2D and Globe Editions). Used by + + many companies and agencies across the world to visualize data, resources, interact with the user, etc. + Compatible with built-in and URP pipelines. + + Get it on the Asset Store (Globe Edition): + + https://assetstore.unity.com/packages/tools/gui/world-map-globe-edition-2-150643?aid=1101lGsd + + Get it on the Asset Store (2D Edition): + + https://assetstore.unity.com/packages/tools/gui/world-map-2d-edition-2-151238?aid=1101lGsd + +WORLD MAP STRATEGY KIT 2 is a complete framework for building AAA strategy games, including all world countries + +and provinces, +7000 cities, cool 3D PBS dynamic viewport for map, hexagonal grid, pathfinding, real elevation, and much +more. +Compatible with built-in and URP pipelines. + +Get it on the Asset Store: + +https://assetstore.unity.com/packages/tools/game-toolkits/world-map-strategy-kit-2-150938?aid=1101lGsd + + WORLD MAPS PRO BUNDLE 2 is our most complete and professional suite of maps for Unity platform for the best price. + + Compatible with built-in and URP pipelines. This bundle contains: + - World Political Map Globe Edition + - World Political Map 2D Edition + - World Map Strategy Kit + - World Flags and Weather Icons + + Purchase this bundle and save $$$! + + https://assetstore.unity.com/packages/tools/gui/world-maps-pro-bundle-2-151240?aid=1101lGsd + SHINY SSRR is our Screen Space Raytraced Reflections solution optimized for both forward and deferred rendering + +path. As with Beautify, this effect gives an instant boost to your scene by making light bounce on shiny surfaces, casting +gorgeous reflections on all kind of reflective surfaces. Compatible with built-in and URP pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/slug/188638?aid=1101lGsd + +SKYBOX PLUS is an artist-driven replacement for Unity default skybox. Includes a lovely blend of procedural haze and + +hand-drawn clouds which mimic the style of Studio Ghibli. +Supports full day/night transition with moon, stars, several cloud layers with custom animation and lot of customization +options. . Compatible with built-in and URP pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/2d/textures-materials/sky/skybox-plus-182966?aid=1101lGsd + +VOLUMETRIC LIGHTS is a powerful asset to add scattering effect to any number of Unity lights. Supports spot, point + +and area light types. Directional lights are also supported for localized areas. Includes advanced options like dust lit +particles and shadow occlusion. Compatible with built-in and URP pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/vfx/shaders/volumetric-lights-164149?aid=1101lGsd + COMPASS NAVIGATOR PRO adds a “Skyrim”-like compass bar to your UI, including smooth fade in/out, various bar + +designs, +11 icons in two variations (+22 icons) and nice features like minimap and beam lights! +Compatible with all render pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/tools/gui/compass-navigator-pro-59519?aid=1101lGsd + +X-FRAME FPS ACCELERATOR provides you extra frames per second in your mobile games (iOS and Android). It takes + +advantage of the huge screen resolution of these devices to sacrifice some pixels in Exchange of performance with flexible +and dynamic quality options. Compatible with built-in and URP pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/tools/camera/x-frame-fps-accelerator-63965?aid=1101lGsd + +SHADER CONTROL is a tiny but powerful tool that will allow you to identify and manage shader keywords usage in your + +project, taking more control over the build size and compilation time. Compatible with all render pipelines. +Quickly locates and helps you disable keywords not needed, learn about the shaders used in your project and their keywords! +Get it on the Asset Store: + +https://assetstore.unity.com/packages/vfx/shaders/shader-control-74817?aid=1101lGsd + TERRAIN GRID SYSTEM is an advanced grid generator and territory/cell highlighter/fader for both Terrain and 2D grids. + + Compatible with all render pipelines. It can generate Voronoi, hexagonal and boxed grids dynamically on your terrain, with + flexible position options . Compatible with built-in and URP pipelines. + Get it on the Asset Store: + + https://assetstore.unity.com/packages/tools/terrain/terrain-grid-system-47215?aid=1101lGsd + +GRIDS 2D is similar to Terrain Grid System but only for flat 2D grids. It’s fast, convenient and easy to use. + +Compatible with all render pipelines. It can also generate Voronoi, hexagonal and boxed grids dynamically on your terrain, with +flexible API to integrate with your game. Compatible with built-in and URP pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/tools/sprite-management/grids-2d-59981?aid=1101lGsd + +HEXASPHERE GRID SYSTEM leverages shader technologies like texture arrays and geometry shaders to render hundreds + +of thousands of interactive and customizable tiles in a spherical/hexagonal grid. +Fully interactive, with VR support and super-fast. Compatible with built-in and URP pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/tools/modeling/hexasphere-grid-system-89112?aid=1101lGsd + TUNNEL FX 2 is a full-screen post image effect that creates stunning, colorful 3D animated tunnels. It does not create any + +real tunnel but just draw the tunnel as a post-effect behind any geometry or UI. +Compatible with built-in and URP pipelines. + +Get it on the Asset Store: + +https://assetstore.unity.com/packages/tools/particles-effects/tunnel-fx-2-86544?aid=1101lGsd + +GLOBAL SNOW renders your existing scene into a winter landscape with a couple of clicks. Just add a single script to your + +camera and customize the results. +Supports relief mapping for realistic snow effect + human footprints + terrain marks with automatic collision detection and +more! +Get it on the Asset Store: + +https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/global-snow-79795?aid=1101lGsd + +HIGHLIGHT PLUS adds outline, glow and see-through effects to any 3D object in the scene. + +It’s performant and designed for all platforms, including built-in and URP rendering pipelines. + +Get it on the Asset Store: + +https://assetstore.unity.com/packages/tools/particles-effects/highlight-plus-134149?aid=1101lGsd + VOXEL PLAY 2 is a procedural, fast environment based on cubes. It leverages highly optimized code, including + +geometry shaders and texture arrays, to generate beautiful, rich, vast infinite worlds which can be customized and +modified in many ways. Compatible with built-in and URP pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/tools/game-toolkits/voxel-play-2-201234?aid=1101lGsd + +PIRATES OF VOXEL PLAY is a multiplayer game template built with Mirror and Voxel Play. It’s the perfect + +sample project to learn how to implement multiplayer games using these two frameworks. +Includes animated characters, a fully populated tropical island with 3 biomes, wild beasts, weapons, loots, cute +music and sound effects and of course plenty of commented code, documentation and video tutorials! +Get it on the Asset Store: + +https://assetstore.unity.com/packages/slug/189096?aid=1101lGsd + LIQUID VOLUME is a powerful and highly customizable shader that simulates realistic and animated liquid + +containers. Can be used in 3D scenes and 2D UI (demos included). +Liquid Volume is super easy and fun to use: just add the main script to any primitive (sphere, box, cylinder and +similar shape models) to convert it into a liquid container! +Get it on the Asset Store: + +https://assetstore.unity.com/packages/vfx/shaders/liquid-volume-70992?aid=1101lGsd + +LIQUID VOLUME PRO 2 includes all features of Liquid Volume and adds additional advanced options plus + +improved compatibility with more platforms. +Among the new options are multiple liquid layers support, miscible liquids, bubbles, better mesh options and full +WebGL support! Compatible with built-in and URP pipelines. +Get it on the Asset Store: + +https://assetstore.unity.com/packages/vfx/shaders/liquid-volume-pro-129967?aid=1101lGsd + HIGHLIGHT PLUS 2D adds outline, glow, see-through and other effects to any sprite in the scene. + +It’s performant and designed for all platforms, including standard and URP rendering pipelines. +Get it on the Asset Store: +https://assetstore.unity.com/packages/tools/particles-effects/highlight-plus-2d-138383?aid=1101lGsd + +TRAILS FX renders smooth, mesmerizing trails behind moving objects and characters. + +It’s performant thanks to the use of GPU instancing and use correct transparency order producing a fascinating effect. +Compatible with built-in and URP pipelines. +Get it on the Asset Store: + + https://assetstore.unity.com/packages/tools/particles-effects/trails-fx-146898?aid=1101lGsd + +COLOR STUDIO is an Editor Extension that allows you to create awesome color palettes and recolor objects, sprites and scenes + +easily in editor and runtime. Compatible with all render pipelines. +It comes with an interactive color wheel editor and a complete set of tools that let you also export color palettes as LUTs, +transform existing textures or specific colors from object materials. +Get it on the Asset Store: +https://assetstore.unity.com/packages/tools/painting/color-studio-151892?aid=1101lGsd + LUT PACK is a collection of +200 cinematic and artistic LUTs plus tints for Beautify. They can dramatically change the mood + +and look of your game scenes. Beautify includes a LUT Browser that let you quickly text each one of the included LUT in this +package. +Get it on the Asset Store: +https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/lut-pack-for-beautify-202502?aid=1101lGsd + +FRAME PACK is a collection of +75 film mattes and artistic borders that can be used with Beautify or Unity UI. This p + +Get it on the Asset Store: +https://assetstore.unity.com/packages/2d/gui/frame-pack-204058?aid=1101lGsd + + MILITARY UNITS – THE STYLIZED ART COLLECTION includes +100 hand-painted, stylized portraits of military units + + from ancient warriors to modern ships and aircraft. Great for decorating your game screens, unit sheets, icons, or prototyping. + Get it on the Asset Store: + https://assetstore.unity.com/packages/2d/textures-materials/military-units-the-stylized-art-collection- + 187769?aid=1101lGsd + Luma Based Ambient Occlusion is a full-screen image effect that simulates occlusion based solely on color + +information. +Get it on the Asset Store: +https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/luma-based-ambient-occlusion-ssao-2d- +93013?aid=1101lGsd + +RPG Starter Bundle includes a collection of visual, environment effects, navigation tools and assets to quickly build the + +foundation of a RPG/Fantasy game or prototype. Save 50% purchasing this bundle (total value: $150)! This package +features the following assets: Compass Navigator Pro, Skybox Plus, Dynamic Fog % Mist, Tunnel FX 2, Liquid Volume +Get it on the Asset Store: +https://assetstore.unity.com/packages/templates/packs/rpg-starter-bundle-213822?aid=1101lGsd + +Beautify HDRP is a post processing effect created for High Definition Rendering Pipeline that improves the image + +quality in real time producing incredibly crisp and vivid scenes. +Get it on the Asset Store: +https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/beautify-hdrp-165411?aid=1101lGsd + Potions & Volumetric Liquid contains 8 unique (16 variations), high detailed, PBR set of magic potions with + +advanced volumetric effect for the liquids inside the flasks. +This asset uses Liquid Volume Pro to render the liquids and its effects (Liquid Volume Pro license is included with this +asset). + +Get it on the Asset Store: +https://assetstore.unity.com/packages/3d/props/potions-volumetric-liquid-221221?aid=1101lGsd + +Split Screen Pro is a camera composing system that enables automatic screen split between two targets or players. + +This asset can automatically detect when the two targets are far from each other and show a dynamic split line which +separates and adapts the view in two halves, one per each target or player. + +Get it on the Asset Store: +https://assetstore.unity.com/packages/tools/camera/split-screen-pro-207149?aid=1101lGsd + diff --git a/Assets/ShinySSRR/Documentation/Kronnect Assets.pdf.meta b/Assets/ShinySSRR/Documentation/Kronnect Assets.pdf.meta new file mode 100644 index 00000000..43823a36 --- /dev/null +++ b/Assets/ShinySSRR/Documentation/Kronnect Assets.pdf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 69e3348e62e074f67a41f46346aa95c4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor.meta b/Assets/ShinySSRR/Editor.meta new file mode 100644 index 00000000..a43a3bcd --- /dev/null +++ b/Assets/ShinySSRR/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 067274d47684a48ca896bde6de6ea9be +folderAsset: yes +timeCreated: 1542886534 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor/ReflectionsEditor.cs b/Assets/ShinySSRR/Editor/ReflectionsEditor.cs new file mode 100644 index 00000000..c6f225aa --- /dev/null +++ b/Assets/ShinySSRR/Editor/ReflectionsEditor.cs @@ -0,0 +1,177 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace ShinySSRR { + + [CustomEditor(typeof(Reflections))] + public class ReflectionsEditor : Editor { + + SerializedProperty ignore, scope, layerMask, nameFilter, subMeshMask; + SerializedProperty smoothness, perSubMeshSmoothness, subMeshSettings; + SerializedProperty useMaterialSmoothness, materialSmoothnessMapPropertyName, materialSmoothnessIntensityPropertyName; + SerializedProperty useMaterialNormalMap, materialNormalMapPropertyName; + SerializedProperty fresnel, fuzzyness, contactHardening; + SerializedProperty overrideGlobalSettings; + SerializedProperty sampleCount, maxRayLength, thickness, binarySearchIterations, refineThickness, thicknessFine, decay, jitter; + ShinySSRR shiny; + + private void OnEnable() { + ignore = serializedObject.FindProperty("ignore"); + scope = serializedObject.FindProperty("scope"); + layerMask = serializedObject.FindProperty("layerMask"); + nameFilter = serializedObject.FindProperty("nameFilter"); + subMeshMask = serializedObject.FindProperty("subMeshMask"); + smoothness = serializedObject.FindProperty("smoothness"); + useMaterialSmoothness = serializedObject.FindProperty("useMaterialSmoothness"); + materialSmoothnessMapPropertyName = serializedObject.FindProperty("materialSmoothnessMapPropertyName"); + materialSmoothnessIntensityPropertyName = serializedObject.FindProperty("materialSmoothnessIntensityPropertyName"); + perSubMeshSmoothness = serializedObject.FindProperty("perSubMeshSmoothness"); + subMeshSettings = serializedObject.FindProperty("subMeshSettings"); + useMaterialNormalMap = serializedObject.FindProperty("useMaterialNormalMap"); + materialNormalMapPropertyName = serializedObject.FindProperty("materialNormalMapPropertyName"); + fresnel = serializedObject.FindProperty("fresnel"); + fuzzyness = serializedObject.FindProperty("fuzzyness"); + contactHardening = serializedObject.FindProperty("contactHardening"); + overrideGlobalSettings = serializedObject.FindProperty("overrideGlobalSettings"); + sampleCount = serializedObject.FindProperty("sampleCount"); + maxRayLength = serializedObject.FindProperty("maxRayLength"); + binarySearchIterations = serializedObject.FindProperty("binarySearchIterations"); + thickness = serializedObject.FindProperty("thickness"); + refineThickness = serializedObject.FindProperty("refineThickness"); + thicknessFine = serializedObject.FindProperty("thicknessFine"); + decay = serializedObject.FindProperty("decay"); + jitter = serializedObject.FindProperty("jitter"); + } + + public override void OnInspectorGUI() { + + if (shiny == null) { + shiny = FindObjectOfType(); + } + if (shiny == null) { + EditorGUILayout.HelpBox("Shiny SSRR must be added to the camera!", MessageType.Error); + EditorGUILayout.Separator(); + GUI.enabled = false; + } else { + EditorGUILayout.BeginVertical(GUI.skin.box); + if (GUILayout.Button("Show Global Settings")) { + Selection.SetActiveObjectWithContext(shiny.gameObject, null); + GUIUtility.ExitGUI(); + } + EditorGUILayout.EndVertical(); + } + + bool isForwardPath = true; + if (shiny.isDeferredActive) { + EditorGUILayout.HelpBox("In deferred mode, material properties like smoothness and normal map plus global SSR settings are used.", MessageType.Warning); + isForwardPath = false; + GUI.enabled = false; + } + + // ensure submesh array size matches materials count + Reflections refl = (Reflections)target; + if (refl.ssrRenderers != null && refl.ssrRenderers.Count == 1 && refl.ssrRenderers[0].originalMaterials != null) { + List materials = refl.ssrRenderers[0].originalMaterials; + if (refl.subMeshSettings == null) { + refl.subMeshSettings = new SubMeshSettingsData[materials.Count]; + } else if (refl.subMeshSettings.Length < materials.Count) { + System.Array.Resize(ref refl.subMeshSettings, materials.Count); + } + } + + serializedObject.Update(); + + EditorGUILayout.PropertyField(ignore); + if (!ignore.boolValue) { + + if (refl.renderers?.Count == 0) { + if (scope.intValue == (int)Scope.OnlyThisObject) { + EditorGUILayout.HelpBox("No renderers found on this gameobject. Switch to 'Include Children' or add this script to another object which contains a renderer.", MessageType.Warning); + } else { + EditorGUILayout.HelpBox("No renderers found under this gameobject.", MessageType.Warning); + } + } + + EditorGUILayout.PropertyField(scope); + if (scope.intValue == (int)Scope.IncludeChildren) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(layerMask); + EditorGUILayout.PropertyField(nameFilter); + EditorGUILayout.PropertyField(subMeshMask); + EditorGUI.indentLevel--; + } + + EditorGUILayout.PropertyField(useMaterialSmoothness); + GUI.enabled = !useMaterialSmoothness.boolValue; + EditorGUILayout.PropertyField(perSubMeshSmoothness); + if (perSubMeshSmoothness.boolValue) { + EditorGUILayout.PropertyField(subMeshSettings, new GUIContent("Smoothness Values"), true); + } else { + EditorGUILayout.PropertyField(smoothness); + } + GUI.enabled = isForwardPath; + EditorGUILayout.PropertyField(useMaterialNormalMap); + + if (useMaterialSmoothness.boolValue || perSubMeshSmoothness.boolValue || useMaterialNormalMap.boolValue) { + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Material Property Names", EditorStyles.miniBoldLabel); + if (useMaterialSmoothness.boolValue || perSubMeshSmoothness.boolValue) { + EditorGUILayout.PropertyField(materialSmoothnessMapPropertyName, new GUIContent("Smoothness Map", "The material property name for the smoothness map")); + EditorGUILayout.PropertyField(materialSmoothnessIntensityPropertyName, new GUIContent("Smoothness Intensity", "The material property name for the smoothness intensity")); + } + if (useMaterialNormalMap.boolValue) { + EditorGUILayout.PropertyField(materialNormalMapPropertyName, new GUIContent("NormalMap", "The material property name for the normal map")); + } + } + + EditorGUILayout.PropertyField(overrideGlobalSettings); + if (overrideGlobalSettings.boolValue) { + EditorGUI.indentLevel++; + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Apply Quality Preset:", GUILayout.Width(EditorGUIUtility.labelWidth)); + if (GUILayout.Button("Fast")) { + ApplyRaytracingPreset(RaytracingPreset.Fast); + } + if (GUILayout.Button("Medium")) { + ApplyRaytracingPreset(RaytracingPreset.Medium); + } + if (GUILayout.Button("High")) { + ApplyRaytracingPreset(RaytracingPreset.High); + } + if (GUILayout.Button("Superb")) { + ApplyRaytracingPreset(RaytracingPreset.Superb); + } + if (GUILayout.Button("Ultra")) { + ApplyRaytracingPreset(RaytracingPreset.Ultra); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.PropertyField(sampleCount); + EditorGUILayout.PropertyField(maxRayLength); + EditorGUILayout.PropertyField(thickness); + EditorGUILayout.PropertyField(binarySearchIterations); + EditorGUILayout.PropertyField(refineThickness); + if (refineThickness.boolValue) { + EditorGUILayout.PropertyField(thicknessFine); + } + EditorGUILayout.PropertyField(jitter); + EditorGUILayout.PropertyField(fresnel); + EditorGUILayout.PropertyField(decay); + EditorGUILayout.PropertyField(fuzzyness, new GUIContent("Fuzziness")); + EditorGUILayout.PropertyField(contactHardening); + EditorGUI.indentLevel--; + } + } + + serializedObject.ApplyModifiedProperties(); + } + + + void ApplyRaytracingPreset(RaytracingPreset preset) { + Reflections ssr = (Reflections)target; + ssr.ApplyRaytracingPreset(preset); + EditorUtility.SetDirty(ssr); + } + + } +} \ No newline at end of file diff --git a/Assets/ShinySSRR/Editor/ReflectionsEditor.cs.meta b/Assets/ShinySSRR/Editor/ReflectionsEditor.cs.meta new file mode 100644 index 00000000..670e77fb --- /dev/null +++ b/Assets/ShinySSRR/Editor/ReflectionsEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9d5f488a96de4e9990356f3caab6a5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor/RenderFeatureEditor.cs b/Assets/ShinySSRR/Editor/RenderFeatureEditor.cs new file mode 100644 index 00000000..996968b3 --- /dev/null +++ b/Assets/ShinySSRR/Editor/RenderFeatureEditor.cs @@ -0,0 +1,182 @@ +using UnityEngine; +using UnityEditor; + +namespace ShinySSRR { + + [CustomEditor(typeof(ShinySSRR))] + public class RenderFeatureEditor : Editor { + + SerializedProperty showInSceneView; + SerializedProperty smoothnessThreshold, reflectionsMultiplier, reflectionsMinIntensity, reflectionsMaxIntensity; + SerializedProperty downsampling, depthBias, outputMode, separationPos, lowPrecision, stopNaN; + SerializedProperty sampleCount, maxRayLength, thickness, binarySearchIterations, refineThickness, thicknessFine, decay, jitter, animatedJitter; + SerializedProperty fresnel, fuzzyness, contactHardening, minimumBlur; + SerializedProperty blurDownsampling, blurStrength, specularControl, specularSoftenPower, vignetteSize; + Reflections[] reflections; + public Texture bulbOnIcon, bulbOffIcon, deleteIcon, arrowRight; + + private void OnEnable() { + showInSceneView = serializedObject.FindProperty("showInSceneView"); + smoothnessThreshold = serializedObject.FindProperty("smoothnessThreshold"); + reflectionsMultiplier = serializedObject.FindProperty("reflectionsMultiplier"); + reflectionsMinIntensity = serializedObject.FindProperty("reflectionsMinIntensity"); + reflectionsMaxIntensity = serializedObject.FindProperty("reflectionsMaxIntensity"); + downsampling = serializedObject.FindProperty("downsampling"); + depthBias = serializedObject.FindProperty("depthBias"); + outputMode = serializedObject.FindProperty("outputMode"); + separationPos = serializedObject.FindProperty("separationPos"); + lowPrecision = serializedObject.FindProperty("lowPrecision"); + stopNaN = serializedObject.FindProperty("stopNaN"); + sampleCount = serializedObject.FindProperty("sampleCount"); + maxRayLength = serializedObject.FindProperty("maxRayLength"); + binarySearchIterations = serializedObject.FindProperty("binarySearchIterations"); + thickness = serializedObject.FindProperty("thickness"); + thicknessFine = serializedObject.FindProperty("thicknessFine"); + refineThickness = serializedObject.FindProperty("refineThickness"); + decay = serializedObject.FindProperty("decay"); + fresnel = serializedObject.FindProperty("fresnel"); + fuzzyness = serializedObject.FindProperty("fuzzyness"); + contactHardening = serializedObject.FindProperty("contactHardening"); + minimumBlur = serializedObject.FindProperty("minimumBlur"); + jitter = serializedObject.FindProperty("jitter"); + animatedJitter = serializedObject.FindProperty("animatedJitter"); + blurDownsampling = serializedObject.FindProperty("blurDownsampling"); + blurStrength = serializedObject.FindProperty("blurStrength"); + specularControl = serializedObject.FindProperty("specularControl"); + specularSoftenPower = serializedObject.FindProperty("specularSoftenPower"); + vignetteSize = serializedObject.FindProperty("vignetteSize"); + +#if UNITY_2020_1_OR_NEWER + reflections = FindObjectsOfType(true); +#else + reflections = FindObjectsOfType(); +#endif + } + + public override void OnInspectorGUI() { + + ShinySSRR shiny = (ShinySSRR)target; + int reflectionsCount = reflections != null ? reflections.Length : 0; + + serializedObject.Update(); + + EditorGUILayout.PropertyField(showInSceneView); + EditorGUILayout.PropertyField(downsampling); + if (downsampling.intValue > 1 && !shiny.isDeferredActive) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(depthBias); + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(outputMode); + if (outputMode.intValue == (int)OutputMode.SideBySideComparison) { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(separationPos); + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(lowPrecision); + EditorGUILayout.PropertyField(stopNaN, new GUIContent("Stop NaN")); + + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Raytracing Settings", EditorStyles.boldLabel); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Apply Quality Preset:", GUILayout.Width(EditorGUIUtility.labelWidth)); + ShinySSRR ssr = (ShinySSRR)target; + if (GUILayout.Button("Fast")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.Fast); + } + if (GUILayout.Button("Medium")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.Medium); + } + if (GUILayout.Button("High")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.High); + } + if (GUILayout.Button("Superb")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.Superb); + } + if (GUILayout.Button("Ultra")) { + ssr.ApplyRaytracingPreset(RaytracingPreset.Ultra); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.PropertyField(sampleCount); + EditorGUILayout.PropertyField(maxRayLength); + EditorGUILayout.PropertyField(thickness); + EditorGUILayout.PropertyField(binarySearchIterations); + EditorGUILayout.PropertyField(refineThickness); + if (refineThickness.boolValue) { + EditorGUILayout.PropertyField(thicknessFine); + } + EditorGUILayout.PropertyField(jitter); + EditorGUILayout.PropertyField(animatedJitter); + + EditorGUILayout.PropertyField(smoothnessThreshold, new GUIContent("Smoothness Threshold", "Minimum smoothness to receive reflections")); + EditorGUILayout.PropertyField(reflectionsMultiplier, new GUIContent("Global Multiplier")); + EditorGUILayout.PropertyField(reflectionsMinIntensity, new GUIContent("Min Intensity")); + EditorGUILayout.PropertyField(reflectionsMaxIntensity, new GUIContent("Max Intensity")); + EditorGUILayout.PropertyField(fresnel); + EditorGUILayout.PropertyField(decay); + EditorGUILayout.PropertyField(specularControl); + if (specularControl.boolValue) { + EditorGUILayout.PropertyField(specularSoftenPower); + } + EditorGUILayout.PropertyField(vignetteSize); + + EditorGUILayout.PropertyField(fuzzyness, new GUIContent("Fuzziness")); + EditorGUILayout.PropertyField(contactHardening); + EditorGUILayout.PropertyField(minimumBlur); + EditorGUILayout.PropertyField(blurDownsampling); + EditorGUILayout.PropertyField(blurStrength); + + if (reflectionsCount > 0) { + if (!shiny.isDeferredActive) { + EditorGUILayout.HelpBox("Some settings may be overriden by Reflections scripts on specific objects.", MessageType.Info); + } + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Reflections scripts in Scene", EditorStyles.helpBox); + if (shiny.isDeferredActive) { + EditorGUILayout.HelpBox("In deferred rendering path, only global SSR settings are used.", MessageType.Warning); + } + for (int k = 0; k < reflectionsCount; k++) { + Reflections refl = reflections[k]; + if (refl == null) continue; + EditorGUILayout.BeginHorizontal(); + GUI.enabled = refl.gameObject.activeInHierarchy; + if (GUILayout.Button(new GUIContent(refl.enabled ? bulbOnIcon : bulbOffIcon, "Toggle on/off this reflection"), EditorStyles.miniButton, GUILayout.Width(35))) { + refl.enabled = !refl.enabled; + } + GUI.enabled = true; + if (GUILayout.Button(new GUIContent(deleteIcon, "Remove this reflection script"), EditorStyles.miniButton, GUILayout.Width(35))) { + if (EditorUtility.DisplayDialog("Confirmation", "Remove the reflection script on " + refl.gameObject.name + "?", "Ok", "Cancel")) { + DestroyImmediate(refl); + reflections[k] = null; + continue; + } + } + if (GUILayout.Button(new GUIContent(arrowRight, "Select this reflection script"), EditorStyles.miniButton, GUILayout.Width(35), GUILayout.Width(40))) { + Selection.activeObject = refl.gameObject; + EditorGUIUtility.PingObject(refl.gameObject); + GUIUtility.ExitGUI(); + } + GUI.enabled = refl.isActiveAndEnabled; + if (!refl.gameObject.activeInHierarchy) { + GUILayout.Label(refl.name + " (hidden gameobject)"); + } else { + GUILayout.Label(refl.name); + } + GUI.enabled = true; + EditorGUILayout.EndHorizontal(); + } + } else if (reflectionsCount == 0) { + if (!shiny.isDeferredActive) { + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Reflections in Scene", EditorStyles.helpBox); + EditorGUILayout.HelpBox("In forward rendering path, add a Reflections script to any object or group of objects that you want to get reflections.", MessageType.Info); + } + + } + + serializedObject.ApplyModifiedProperties(); + + } + + } +} \ No newline at end of file diff --git a/Assets/ShinySSRR/Editor/RenderFeatureEditor.cs.meta b/Assets/ShinySSRR/Editor/RenderFeatureEditor.cs.meta new file mode 100644 index 00000000..ba2a59b1 --- /dev/null +++ b/Assets/ShinySSRR/Editor/RenderFeatureEditor.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 13896aabf7b59431f81d75f56d7dece0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - bulbOnIcon: {fileID: 2800000, guid: dd840e0a27f8e4bb5844722993c541be, type: 3} + - bulbOffIcon: {fileID: 2800000, guid: 7f28d2ee7b6104945a9761f8a6879afc, type: 3} + - deleteIcon: {fileID: 2800000, guid: d156c5754f844469b8874c1c5fb37e8b, type: 3} + - arrowRight: {fileID: 2800000, guid: cb3a0e4282dfb452884cb8f63e7975f5, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor/Resources.meta b/Assets/ShinySSRR/Editor/Resources.meta new file mode 100644 index 00000000..e07b515d --- /dev/null +++ b/Assets/ShinySSRR/Editor/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48f41183a3a11478dbfd6fa43108a255 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor/Resources/arrowRight.png b/Assets/ShinySSRR/Editor/Resources/arrowRight.png new file mode 100644 index 00000000..2c2168dd Binary files /dev/null and b/Assets/ShinySSRR/Editor/Resources/arrowRight.png differ diff --git a/Assets/ShinySSRR/Editor/Resources/arrowRight.png.meta b/Assets/ShinySSRR/Editor/Resources/arrowRight.png.meta new file mode 100644 index 00000000..074abacc --- /dev/null +++ b/Assets/ShinySSRR/Editor/Resources/arrowRight.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: cb3a0e4282dfb452884cb8f63e7975f5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 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 + - 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: Android + 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: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor/Resources/bulbOff.png b/Assets/ShinySSRR/Editor/Resources/bulbOff.png new file mode 100644 index 00000000..c3a530d7 Binary files /dev/null and b/Assets/ShinySSRR/Editor/Resources/bulbOff.png differ diff --git a/Assets/ShinySSRR/Editor/Resources/bulbOff.png.meta b/Assets/ShinySSRR/Editor/Resources/bulbOff.png.meta new file mode 100644 index 00000000..9513af5c --- /dev/null +++ b/Assets/ShinySSRR/Editor/Resources/bulbOff.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: 7f28d2ee7b6104945a9761f8a6879afc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 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 + - 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: Android + 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: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor/Resources/bulbOn.png b/Assets/ShinySSRR/Editor/Resources/bulbOn.png new file mode 100644 index 00000000..5d9abb95 Binary files /dev/null and b/Assets/ShinySSRR/Editor/Resources/bulbOn.png differ diff --git a/Assets/ShinySSRR/Editor/Resources/bulbOn.png.meta b/Assets/ShinySSRR/Editor/Resources/bulbOn.png.meta new file mode 100644 index 00000000..16b3fec9 --- /dev/null +++ b/Assets/ShinySSRR/Editor/Resources/bulbOn.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: dd840e0a27f8e4bb5844722993c541be +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 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 + - 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: Android + 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: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor/Resources/delete.png b/Assets/ShinySSRR/Editor/Resources/delete.png new file mode 100644 index 00000000..86acef23 Binary files /dev/null and b/Assets/ShinySSRR/Editor/Resources/delete.png differ diff --git a/Assets/ShinySSRR/Editor/Resources/delete.png.meta b/Assets/ShinySSRR/Editor/Resources/delete.png.meta new file mode 100644 index 00000000..e51aa7ca --- /dev/null +++ b/Assets/ShinySSRR/Editor/Resources/delete.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: d156c5754f844469b8874c1c5fb37e8b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 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 + - 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: Android + 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: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Editor/SubMeshSettingsDrawer.cs b/Assets/ShinySSRR/Editor/SubMeshSettingsDrawer.cs new file mode 100644 index 00000000..62900efe --- /dev/null +++ b/Assets/ShinySSRR/Editor/SubMeshSettingsDrawer.cs @@ -0,0 +1,56 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace ShinySSRR { + + [CustomPropertyDrawer(typeof(SubMeshSettingsData))] + public class SubMeshSettingsDrawer : PropertyDrawer { + + public override float GetPropertyHeight(SerializedProperty prop, GUIContent label) { + GUIStyle style = GUI.skin.GetStyle("label"); + float lineHeight = style.CalcHeight(label, EditorGUIUtility.currentViewWidth); + return lineHeight; + } + + + public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) { + Rect firstColumn = position; + firstColumn.width = EditorGUIUtility.labelWidth - firstColumn.x; + Rect secondColumn = position; + secondColumn.x = EditorGUIUtility.labelWidth + 5; + secondColumn.width = position.width - secondColumn.x; + int propIndex = GetArrayIndex(prop); + Reflections refl = (Reflections)prop.serializedObject.targetObject; + if (refl.ssrRenderers != null && refl.ssrRenderers.Count == 1 && refl.ssrRenderers[0].originalMaterials != null) { + List materials = refl.ssrRenderers[0].originalMaterials; + int matIndex = propIndex; + if (matIndex >= materials.Count) { + matIndex = materials.Count - 1; + } + EditorGUI.LabelField(firstColumn, materials[matIndex].name); + } else { + EditorGUI.LabelField(firstColumn, "SubMesh " + propIndex); + } + EditorGUI.PropertyField(secondColumn, prop.FindPropertyRelative("smoothness"), GUIContent.none); + } + + /// + /// Returns the index of this property in the array + /// + int GetArrayIndex(SerializedProperty property) { + string s = property.propertyPath; + int bracket = s.LastIndexOf("["); + if (bracket >= 0) { + string indexStr = s.Substring(bracket + 1, s.Length - bracket - 2); + int index; + if (int.TryParse(indexStr, out index)) { + return index; + } + } + return 0; + } + + } + +} diff --git a/Assets/ShinySSRR/Editor/SubMeshSettingsDrawer.cs.meta b/Assets/ShinySSRR/Editor/SubMeshSettingsDrawer.cs.meta new file mode 100644 index 00000000..e9ef767b --- /dev/null +++ b/Assets/ShinySSRR/Editor/SubMeshSettingsDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b3f27cbc12734736a0815f99ff123c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/README.txt b/Assets/ShinySSRR/README.txt new file mode 100644 index 00000000..5cb281be --- /dev/null +++ b/Assets/ShinySSRR/README.txt @@ -0,0 +1,77 @@ +******************************** +* SHINY - SSRR * +* Created by Kronnect * +* README FILE * +******************************** + + +This package is designed for the built-in pipeline (for URP, please remove this one and import the other package included in the bundle). +Requirements: Unity 2019.4 or later + +How to use the asset +-------------------- +Add ShinySSRR to the camera where you want reflections to be visible + + +Help & Support Forum +-------------------- + +Check the Documentation (PDF) for detailed instructions: + +Have any question or issue? +* Email: contact@kronnect.com +* Support Forum: https://kronnect.com +* Twitter: @Kronnect + +If you like Shiny, please rate it on the Asset Store. It encourages us to keep improving it! Thanks! + + +Future updates +-------------- + +All our assets follow an incremental development process by which a few beta releases are published on our support forum (kronnect.com). +We encourage you to signup and engage our forum. The forum is the primary support and feature discussions medium. + +Of course, all updates of the asset will be eventually available on the Asset Store. + + + +More Cool Assets! +----------------- +Check out our other assets here: +https://assetstore.unity.com/publishers/15018 + + + +Version history +--------------- + +Version 4.1 +- Added "Smoothness Threshold" parameter to global settings + +Version 4.0 +- Added raytracing quality presets +- Added "Refine Thickness" option +- Replaced "Step Size" with "Max Ray Length" +- Added "Stop NaN" option which can prevents artifacts when blending reflections due to pixel values out of range +- Added "Blur Strength" option +- Fixes and minor improvements + +Version 3.0 +- Redesigned reflection blur with simpler settings and contact hardening option +- New pyramid-blur for contact hardening/distance blur +- Rearranged inspector options +- Material smoothness now reduces fuzzyness + +Version 2.6 +- Ability to customize the material property names for smoothness map & normal map in Reflections script + +Version 2.5 +- Added support for smoothness map when using metallic workflow in forward rendering path + +Version 1.1 +- Max Reflections Multiplier increased to 2 +- Added Reflections Min and Max clamping parameters + +Version 1.0 +- First release for the built-in pipeline based on the URP version feature set diff --git a/Assets/ShinySSRR/README.txt.meta b/Assets/ShinySSRR/README.txt.meta new file mode 100644 index 00000000..b73383f2 --- /dev/null +++ b/Assets/ShinySSRR/README.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afa59e23243a84ed78c2b40071a90760 +timeCreated: 1542901568 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime.meta b/Assets/ShinySSRR/Runtime.meta new file mode 100644 index 00000000..8eff2ec1 --- /dev/null +++ b/Assets/ShinySSRR/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1963f396e1564dc98a20530a7199f1d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources.meta b/Assets/ShinySSRR/Runtime/Resources.meta new file mode 100644 index 00000000..956edddc --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8dba4c348fa3a43c096bbbabc14d44b8 +folderAsset: yes +timeCreated: 1542876301 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR.meta b/Assets/ShinySSRR/Runtime/Resources/SSR.meta new file mode 100644 index 00000000..932440a7 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 544859eb1711348f3888a2d91d804bd4 +folderAsset: yes +timeCreated: 1542893576 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR.shader b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR.shader new file mode 100644 index 00000000..593907a2 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR.shader @@ -0,0 +1,134 @@ +Shader "Hidden/Kronnect/SSR" { +Properties { + _MainTex("", any) = "" {} + _BumpMap("Normal Map", 2D) = "bump" {} + _SmoothnessMap("Smoothness Map", 2D) = "white" {} + _Color("", Color) = (1,1,1) + _NoiseTex("", any) = "" {} + _SSRSettings("", Vector) = (1,1,1,1) + _SSRSettings2("", Vector) = (1,1,1,1) +} + +HLSLINCLUDE + #pragma target 3.0 +ENDHLSL + + +Subshader { + + Tags { "RenderType" = "Transparent" "DisableBatching"="True" "ForceNoShadowCasting"="True" } + + HLSLINCLUDE + #pragma target 3.0 + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + #include "UnityCG.cginc" + ENDHLSL + + Pass { // 0: Copy exact + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCopyExact + #include "SSR_Blends.hlsl" + ENDHLSL + } + + Pass { // 1: Surface reflection + HLSLPROGRAM + #pragma vertex VertSSRSurf + #pragma fragment FragSSRSurf + #pragma multi_compile_local _ SSR_NORMALMAP + #pragma multi_compile_local _ SSR_SMOOTHNESSMAP + #pragma multi_compile_local _ SSR_JITTER + #pragma multi_compile_local _ SSR_THICKNESS_FINE + + #include "SSR_Common.hlsl" + #include "SSR_Surface_Pass.hlsl" + ENDHLSL + } + + Pass { // 2 Resolve + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragResolve + #include "SSR_Solve.hlsl" + ENDHLSL + } + + Pass { // 3 Blur horizontally + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertBlur + #pragma fragment FragBlur + #pragma multi_compile_local _ SSR_DENOISE + #define SSR_BLUR_HORIZ + #include "SSR_Blur.hlsl" + ENDHLSL + } + + Pass { // 4 Blur vertically + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertBlur + #pragma multi_compile_local _ SSR_DENOISE + #pragma fragment FragBlur + #include "SSR_Blur.hlsl" + ENDHLSL + } + + Pass { // 5 Debug + ZWrite Off ZTest Always Cull Off + Blend One Zero + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCopyExact + #include "SSR_Blends.hlsl" + ENDHLSL + } + + Pass { // 6 Combine + ZWrite Off ZTest Always Cull Off + Blend One One // precomputed alpha in Resolve pass + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCombine + #include "SSR_Blends.hlsl" + ENDHLSL + } + + Pass { // 7 Combine with compare + ZWrite Off ZTest Always Cull Off + Blend One One // precomputed alpha in Resolve pass + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCombineWithCompare + #include "SSR_Blends.hlsl" + ENDHLSL + } + + Pass { // 8 Deferred pass + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragSSR + #pragma multi_compile_local _ SSR_JITTER + #pragma multi_compile_local _ SSR_THICKNESS_FINE + #include "SSR_Common.hlsl" + #include "SSR_GBuf_Pass.hlsl" + ENDHLSL + } + + Pass { // 9: Copy with bilinear filter + ZWrite Off ZTest Always Cull Off + HLSLPROGRAM + #pragma vertex VertSSR + #pragma fragment FragCopy + #include "SSR_Blends.hlsl" + ENDHLSL + } + +} +FallBack Off +} diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR.shader.meta b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR.shader.meta new file mode 100644 index 00000000..17661941 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3dc251e8adb204285a24311c59c0dc71 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blends.hlsl b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blends.hlsl new file mode 100644 index 00000000..ecad59bf --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blends.hlsl @@ -0,0 +1,115 @@ +#ifndef SSR_BLENDS +#define SSR_BLENDS + + // Copyright 2021 Kronnect - All Rights Reserved. + + #include "SSR_Common.hlsl" + + UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex); + float4 _MainTex_ST; + float4 _MainTex_TexelSize; + float4 _SSRSettings4; + #define SEPARATION_POS _SSRSettings4.x + float _MinimumBlur; + + UNITY_DECLARE_SCREENSPACE_TEXTURE(_RayCastRT); + UNITY_DECLARE_SCREENSPACE_TEXTURE(_ReflectionsRT); + UNITY_DECLARE_SCREENSPACE_TEXTURE(_BlurRTMip0); + UNITY_DECLARE_SCREENSPACE_TEXTURE(_BlurRTMip1); + UNITY_DECLARE_SCREENSPACE_TEXTURE(_BlurRTMip2); + UNITY_DECLARE_SCREENSPACE_TEXTURE(_BlurRTMip3); + UNITY_DECLARE_SCREENSPACE_TEXTURE(_BlurRTMip4); + + + struct Attributes { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsSSR { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + + + VaryingsSSR VertSSR(Attributes input) { + VaryingsSSR output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + output.positionCS = UnityObjectToClipPos(input.vertex); + output.uv = UnityStereoScreenSpaceUVAdjust(input.uv, _MainTex_ST); + return output; + } + + half4 FragCopy (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + half4 pixel = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, i.uv); + return pixel; + } + + half4 FragCopyExact (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + half4 pixel = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, i.uv); + pixel = max(pixel, 0.0); + return pixel; + } + + + half4 Combine (VaryingsSSR i) : SV_Target { + + // exclude skybox from blur bleed + float depth01 = GetDepth01(i.uv); + if (depth01 >= 1) return half4(0,0,0,0); + + half4 mip0 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_ReflectionsRT, i.uv); + half4 mip1 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_BlurRTMip0, i.uv); + half4 mip2 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_BlurRTMip1, i.uv); + half4 mip3 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_BlurRTMip2, i.uv); + half4 mip4 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_BlurRTMip3, i.uv); + half4 mip5 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_BlurRTMip4, i.uv); + + half r = mip5.a; + half4 reflData = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_RayCastRT, i.uv); + if (reflData.z > 0) { + r = min(reflData.z, r); + } + + half roughness = clamp(r + _MinimumBlur, 0, 5); + + half w0 = max(0, 1.0 - roughness); + half w1 = max(0, 1.0 - abs(roughness - 1.0)); + half w2 = max(0, 1.0 - abs(roughness - 2.0)); + half w3 = max(0, 1.0 - abs(roughness - 3.0)); + half w4 = max(0, 1.0 - abs(roughness - 4.0)); + half w5 = max(0, 1.0 - abs(roughness - 5.0)); + + half4 refl = mip0 * w0 + mip1 * w1 + mip2 * w2 + mip3 * w3 + mip4 * w4 + mip5 * w5; + return refl; + } + + + half4 FragCombine (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + return Combine(i); + } + + + half4 FragCombineWithCompare (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + if (i.uv.x < SEPARATION_POS - _MainTex_TexelSize.x * 3) { + return 0; + } else if (i.uv.x < SEPARATION_POS + _MainTex_TexelSize.x * 3) { + return 1.0; + } else { + return Combine(i); + } + } + +#endif // SSR_BLENDS \ No newline at end of file diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blends.hlsl.meta b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blends.hlsl.meta new file mode 100644 index 00000000..9ca423ed --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blends.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 744b9a39168214ae0a406965afb5f3d5 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blur.hlsl b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blur.hlsl new file mode 100644 index 00000000..d52fd9de --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blur.hlsl @@ -0,0 +1,98 @@ +#ifndef SSR_BLUR +#define SSR_BLUR + + // Copyright 2021 Kronnect - All Rights Reserved. + UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex); + float4 _MainTex_ST; + float4 _MainTex_TexelSize; + UNITY_DECLARE_SCREENSPACE_TEXTURE(_RayCastRT); + float4 _SSRSettings4; + #define DENOISE_POWER _SSRSettings4.w + float2 _SSRBlurStrength; + #define BLUR_STRENGTH_HORIZ _SSRBlurStrength.x + #define BLUR_STRENGTH_VERT _SSRBlurStrength.y + +#if defined(UNITY_SINGLE_PASS_STEREO) + #define SSR_VERTEX_CROSS_DATA + #define SSR_VERTEX_OUTPUT_GAUSSIAN_UV(o) + #if defined(SSR_BLUR_HORIZ) + #define SSR_FRAG_SETUP_GAUSSIAN_UV(i) float2 offset1 = float2(_MainTex_TexelSize.x * 1.3846153846 * BLUR_STRENGTH_HORIZ, 0); float2 offset2 = float2(_MainTex_TexelSize.x * 3.2307692308 * BLUR_STRENGTH_HORIZ, 0); + #else + #define SSR_FRAG_SETUP_GAUSSIAN_UV(i) float2 offset1 = float2(0, _MainTex_TexelSize.y * 1.3846153846 * BLUR_STRENGTH_VERT); float2 offset2 = float2(0, _MainTex_TexelSize.y * 3.2307692308 * BLUR_STRENGTH_VERT); + #endif + +#else + #define SSR_VERTEX_CROSS_DATA float2 offset1 : TEXCOORD1; float2 offset2 : TEXCOORD2; + #if defined(SSR_BLUR_HORIZ) + #define SSR_VERTEX_OUTPUT_GAUSSIAN_UV(o) o.offset1 = float2(_MainTex_TexelSize.x * 1.3846153846 * BLUR_STRENGTH_HORIZ, 0); o.offset2 = float2(_MainTex_TexelSize.x * 3.2307692308 * BLUR_STRENGTH_HORIZ, 0); + #else + #define SSR_VERTEX_OUTPUT_GAUSSIAN_UV(o) o.offset1 = float2(0, _MainTex_TexelSize.y * 1.3846153846 * BLUR_STRENGTH_VERT); o.offset2 = float2(0, _MainTex_TexelSize.y * 3.2307692308 * BLUR_STRENGTH_VERT); + #endif + #define SSR_FRAG_SETUP_GAUSSIAN_UV(i) float2 offset1 = i.offset1; float2 offset2 = i.offset2; + +#endif + + + struct Attributes { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsCross { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + SSR_VERTEX_CROSS_DATA + UNITY_VERTEX_OUTPUT_STEREO + }; + + + VaryingsCross VertBlur(Attributes input) { + VaryingsCross output; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + output.positionCS = UnityObjectToClipPos(input.vertex); + output.uv = UnityStereoScreenSpaceUVAdjust(input.uv, _MainTex_ST); + SSR_VERTEX_OUTPUT_GAUSSIAN_UV(output) + return output; + } + + + inline half getLuma(float3 rgb) { + const half3 lum = float3(0.299, 0.587, 0.114); + return dot(rgb, lum); + } + + half4 FragBlur (VaryingsCross i): SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + SSR_FRAG_SETUP_GAUSSIAN_UV(i) + + float2 uv = i.uv; + half4 c0 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, uv); + half4 c1 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, uv + offset1); + half4 c2 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, uv - offset1); + half4 c3 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, uv + offset2); + half4 c4 = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, uv - offset2); + + #if SSR_DENOISE + half l0 = abs(getLuma(c0.rgb)); + half l1 = abs(getLuma(c1.rgb)); + half l2 = abs(getLuma(c2.rgb)); + half l3 = abs(getLuma(c3.rgb)); + half l4 = abs(getLuma(c4.rgb)); + + half ml = (l0+l1+l2+l3+l4) * 0.2; + c0.rgb *= pow( (1.0 + min(ml, l0)) / (1.0 + l0) , DENOISE_POWER); + c1.rgb *= pow( (1.0 + min(ml, l1)) / (1.0 + l1) , DENOISE_POWER); + c2.rgb *= pow( (1.0 + min(ml, l2)) / (1.0 + l2) , DENOISE_POWER); + c3.rgb *= pow( (1.0 + min(ml, l3)) / (1.0 + l3) , DENOISE_POWER); + c4.rgb *= pow( (1.0 + min(ml, l4)) / (1.0 + l4) , DENOISE_POWER); + #endif + + half4 blurred = c0 * 0.2270270270 + (c1 + c2) * 0.3162162162 + (c3 + c4) * 0.0702702703; + return blurred; + } + +#endif // SSR_BLUR \ No newline at end of file diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blur.hlsl.meta b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blur.hlsl.meta new file mode 100644 index 00000000..d3264be8 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Blur.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 22f6b60d67e3646a5af5737d10b8b4d8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Common.hlsl b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Common.hlsl new file mode 100644 index 00000000..ff723880 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Common.hlsl @@ -0,0 +1,177 @@ +#ifndef SSR_COMMON +#define SSR_COMMON + +struct VertexPositionInputs +{ + float3 positionWS; // World space position + float3 positionVS; // View space position + float4 positionCS; // Homogeneous clip space position + float4 positionNDC;// Homogeneous normalized device coordinates +}; + +struct VertexNormalInputs +{ + float3 tangentWS; + float3 bitangentWS; + float3 normalWS; +}; + + +#define FLT_MIN 1.175494351e-38 // Minimum normalized positive floating-point number + +// Normalize that account for vectors with zero length +float3 SafeNormalize(float3 inVec) +{ + float dp3 = max(FLT_MIN, dot(inVec, inVec)); + return inVec * rsqrt(dp3); +} + + +float4x4 GetObjectToWorldMatrix() +{ + return UNITY_MATRIX_M; +} + +float4x4 GetWorldToObjectMatrix() +{ + return unity_WorldToObject; +} + +float4x4 GetWorldToViewMatrix() +{ + return UNITY_MATRIX_V; +} + +float4x4 GetWorldToHClipMatrix() +{ + return UNITY_MATRIX_VP; +} + +float3 GetCameraPositionWS() +{ + return _WorldSpaceCameraPos; +} + + +float3 TransformObjectToWorld(float3 positionOS) +{ + return mul(GetObjectToWorldMatrix(), float4(positionOS, 1.0)).xyz; +} + +float3 TransformWorldToView(float3 positionWS) +{ + return mul(GetWorldToViewMatrix(), float4(positionWS, 1.0)).xyz; +} + +float3 TransformObjectToWorldDir(float3 dirOS) +{ + // Normalize to support uniform scaling + return SafeNormalize(mul((float3x3)GetObjectToWorldMatrix(), dirOS)); +} + +float3 TransformWorldToViewDir(float3 dirWS) +{ + return mul((float3x3)GetWorldToViewMatrix(), dirWS).xyz; +} + +float4 TransformObjectToHClip(float3 positionOS) +{ + // More efficient than computing M*VP matrix product + return mul(GetWorldToHClipMatrix(), mul(GetObjectToWorldMatrix(), float4(positionOS, 1.0))); +} + +float4 TransformWorldToHClip(float3 positionWS) +{ + return mul(GetWorldToHClipMatrix(), float4(positionWS, 1.0)); +} + +float3 TransformTangentToWorld(float3 dirTS, float3x3 tangentToWorld) +{ + // Note matrix is in row major convention with left multiplication as it is build on the fly + return mul(dirTS, tangentToWorld); +} + + +float3 TransformObjectToWorldNormal(float3 normalOS) +{ +#ifdef UNITY_ASSUME_UNIFORM_SCALING + return TransformObjectToWorldDir(normalOS); +#else + // Normal need to be multiply by inverse transpose + return SafeNormalize(mul(normalOS, (float3x3)GetWorldToObjectMatrix())); +#endif +} + + +VertexPositionInputs GetVertexPositionInputs(float3 positionOS) +{ + VertexPositionInputs input; + input.positionWS = TransformObjectToWorld(positionOS); + input.positionVS = TransformWorldToView(input.positionWS); + input.positionCS = TransformWorldToHClip(input.positionWS); + + float4 ndc = input.positionCS * 0.5f; + input.positionNDC.xy = float2(ndc.x, ndc.y * _ProjectionParams.x) + ndc.w; + input.positionNDC.zw = input.positionCS.zw; + + return input; +} + +float GetOddNegativeScale() +{ + return unity_WorldTransformParams.w; +} + + +VertexNormalInputs GetVertexNormalInputs(float3 normalOS, float4 tangentOS) +{ + VertexNormalInputs tbn; + + // mikkts space compliant. only normalize when extracting normal at frag. + float sign = tangentOS.w * GetOddNegativeScale(); + tbn.normalWS = TransformObjectToWorldNormal(normalOS); + tbn.tangentWS = TransformObjectToWorldDir(tangentOS.xyz); + tbn.bitangentWS = cross(tbn.normalWS, tbn.tangentWS) * sign; + return tbn; +} + +float4 ComputeClipSpacePosition(float2 positionNDC, float deviceDepth) +{ + float4 positionCS = float4(positionNDC * 2.0 - 1.0, deviceDepth, 1.0); + +#if UNITY_UV_STARTS_AT_TOP + // Our world space, view space, screen space and NDC space are Y-up. + // Our clip space is flipped upside-down due to poor legacy Unity design. + // The flip is baked into the projection matrix, so we only have to flip + // manually when going from CS to NDC and back. + positionCS.y = -positionCS.y; +#endif + + return positionCS; +} + +float3 ComputeViewSpacePosition(float2 positionNDC, float deviceDepth, float4x4 invProjMatrix) +{ + float4 positionCS = ComputeClipSpacePosition(positionNDC, deviceDepth); + float4 positionVS = mul(invProjMatrix, positionCS); + // The view space uses a right-handed coordinate system. + positionVS.z = -positionVS.z; + return positionVS.xyz / positionVS.w; +} + + +UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); +float4 _CameraDepthTexture_TexelSize; + +inline float GetDepth01(float2 uv) { + float rawDepth = SAMPLE_DEPTH_TEXTURE_LOD(_CameraDepthTexture, float4(uv, 0, 0)).r; + return Linear01Depth(rawDepth); +} + +inline float GetLinearDepth(float2 uv) { + float rawDepth = SAMPLE_DEPTH_TEXTURE_LOD(_CameraDepthTexture, float4(uv, 0, 0)).r; + return LinearEyeDepth(rawDepth); +} + + +#endif // SSR_COMMON \ No newline at end of file diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Common.hlsl.meta b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Common.hlsl.meta new file mode 100644 index 00000000..23c41c8f --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Common.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fe624f91c6d944cbd9575730aae2653d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl new file mode 100644 index 00000000..88bacfb2 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl @@ -0,0 +1,201 @@ +#ifndef SSR_GBUF_PASS +#define SSR_GBUF_PASS + + // Copyright 2021 Kronnect - All Rights Reserved. + sampler2D _NoiseTex; + float4 _NoiseTex_TexelSize; + + float4 _MaterialData; + #define SMOOTHNESS _MaterialData.x + #define FRESNEL _MaterialData.y + #define FUZZYNESS _MaterialData.z + #define DECAY _MaterialData.w + + float4 _SSRSettings; + #define THICKNESS _SSRSettings.x + #define SAMPLES _SSRSettings.y + #define BINARY_SEARCH_ITERATIONS _SSRSettings.z + #define MAX_RAY_LENGTH _SSRSettings.w + + float2 _SSRSettings5; + #define REFLECTIONS_THRESHOLD _SSRSettings5.y + +#if SSR_THICKNESS_FINE + #define THICKNESS_FINE _SSRSettings5.x +#else + #define THICKNESS_FINE THICKNESS +#endif + + float4 _SSRSettings2; + #define JITTER _SSRSettings2.x + #define CONTACT_HARDENING _SSRSettings2.y + + float4 _SSRSettings3; + #define INPUT_SIZE _SSRSettings3.xy + #define GOLDEN_RATIO_ACUM _SSRSettings3.z + #define DEPTH_BIAS _SSRSettings3.w + + float4x4 _WorldToViewDir; + + UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraGBufferTexture1); + UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraGBufferTexture2); + + #define dot2(x) dot(x, x) + + + struct Attributes { + float4 positionOS : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsSSR { + float4 positionCS : SV_POSITION; + float4 uv : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + + + VaryingsSSR VertSSR(Attributes input) { + VaryingsSSR output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + output.positionCS = TransformObjectToHClip(input.positionOS.xyz); + output.uv.xy = input.uv; + float4 projPos = output.positionCS * 0.5; + projPos.xy = projPos.xy + projPos.w; + output.uv.zw = projPos.xy; + return output; + } + + + float4 SSR_Pass(float2 uv, float3 normalVS, float3 rayStart, float smoothness) { + + float3 viewDirVS = normalize(rayStart); + float3 rayDir = reflect( viewDirVS, normalVS ); + + // if ray is toward the camera, early exit (optional) + //if (rayDir.z < 0) return 0.0.xxxx; + + float rayLength = MAX_RAY_LENGTH; + + float3 rayEnd = rayStart + rayDir * rayLength; + if (rayEnd.z < _ProjectionParams.y) { + rayLength = (rayStart.z - _ProjectionParams.y) / rayDir.z; + } + rayEnd = rayStart + rayDir * rayLength; + + float4 sposStart = mul(unity_CameraProjection, float4(rayStart, 1.0)); + float4 sposEnd = mul(unity_CameraProjection, float4(rayEnd, 1.0)); + float k0 = rcp(sposStart.w); + float q0 = rayStart.z * k0; + float k1 = rcp(sposEnd.w); + float q1 = rayEnd.z * k1; + float4 p = float4(uv, q0, k0); + + // length in pixels + float2 uv1 = (sposEnd.xy * rcp(rayEnd.z) + 1.0) * 0.5; + float2 duv = uv1 - uv; + float2 duvPixel = abs(duv * INPUT_SIZE); + float pixelDistance = max(duvPixel.x, duvPixel.y); + pixelDistance = max(1, pixelDistance); + int sampleCount = (int)SAMPLES; + float scale = max(1, SAMPLES * rcp(pixelDistance)); + sampleCount = (int)(sampleCount * rcp(scale)); + float4 pincr = float4(duv, q1-q0, k1-k0) * rcp(sampleCount); + + #if SSR_JITTER + float jitter = tex2D(_NoiseTex, uv * INPUT_SIZE * _NoiseTex_TexelSize.xy + GOLDEN_RATIO_ACUM).r; + //pincr *= 1.0 + jitter * JITTER; + p += pincr * (jitter * JITTER); + #endif + + float collision = 0; + float dist = 0; + float zdist = 0; + + UNITY_LOOP + for (int k = 0; k < sampleCount; k++) { + p += pincr; + if (any(floor(p.xy)!=0)) return 0.0.xxxx; // exit if out of screen space + float sceneDepth = GetLinearDepth(p.xy); + float pz = p.z / p.w; + float depthDiff = pz - sceneDepth; + if (depthDiff > 0 && depthDiff < THICKNESS) { + float4 origPincr = pincr; + p -= pincr; + float reduction = 1.0; + UNITY_LOOP + for (int j = 0; j < BINARY_SEARCH_ITERATIONS; j++) { + reduction *= 0.5; + p += pincr * reduction; + sceneDepth = GetLinearDepth(p.xy); + pz = p.z / p.w; + depthDiff = sceneDepth - pz; + pincr = sign(depthDiff) * origPincr; + } +#if SSR_THICKNESS_FINE + if (abs(depthDiff) < THICKNESS_FINE) +#endif + { + float hitAccuracy = 1.0 - abs(depthDiff) / THICKNESS_FINE; + zdist = (pz - rayStart.z) / (0.0001 + rayEnd.z - rayStart.z); + float rayFade = 1.0 - saturate(zdist); + collision = hitAccuracy * rayFade; + break; + } + pincr = origPincr; + p += pincr; + } + } + + if (collision > 0) { + + // intersection found + float reflectionIntensity = smoothness * pow(collision, DECAY); + + // compute fresnel + float fresnel = 1.0 - FRESNEL * abs(dot(normalVS, viewDirVS)); + float reflectionAmount = reflectionIntensity * fresnel; + + // compute blur amount + float wdist = rayLength * zdist; + float blurAmount = max(0, wdist - CONTACT_HARDENING) * FUZZYNESS * (1 - smoothness); + + // return hit pixel + return float4(p.xy, blurAmount + 0.001, reflectionAmount); + } + + return float4(0,0,0,0); + } + + + float4 FragSSR (VaryingsSSR input) : SV_Target { + + UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, input.uv.xy).r; + #if UNITY_REVERSED_Z + depth = 1.0 - depth; + #endif + if (depth >= 1.0) return float4(0,0,0,0); + + depth = 2.0 * depth - 1.0; + float3 positionVS = ComputeViewSpacePosition(input.uv.zw, depth, unity_CameraInvProjection); + + float4 normals = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraGBufferTexture2, input.uv.xy); + float3 normalWS = normals.xyz * 2.0 - 1.0; + float3 normalVS = mul((float3x3)_WorldToViewDir, normalWS); + normalVS.z *= -1.0; + + float smoothness = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraGBufferTexture1, input.uv.xy).a; + smoothness = max(0, smoothness - REFLECTIONS_THRESHOLD); + + float4 reflection = SSR_Pass(input.uv.xy, normalVS, positionVS, smoothness); + return reflection; + } + + +#endif // SSR_GBUF_PASS \ No newline at end of file diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl.meta b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl.meta new file mode 100644 index 00000000..7731004d --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_GBuf_Pass.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 60e6293b2213646e387fe487ef2adfcf +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Solve.hlsl b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Solve.hlsl new file mode 100644 index 00000000..d1ae1ebc --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Solve.hlsl @@ -0,0 +1,69 @@ +#ifndef SSR_SOLVE +#define SSR_SOLVE + + // Copyright 2021 Kronnect - All Rights Reserved. + UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex); + float4 _MainTex_ST; + float4 _MainTex_TexelSize; + UNITY_DECLARE_SCREENSPACE_TEXTURE(_RayCastRT); + float4 _SSRSettings2; + #define REFLECTIONS_MULTIPLIER _SSRSettings2.z + float4 _SSRSettings4; + #define REFLECTIONS_MIN_INTENSITY _SSRSettings4.y + #define REFLECTIONS_MAX_INTENSITY _SSRSettings4.z + #define VIGNETTE_SIZE _SSRSettings2.w + + #define dot2(x) dot(x, x) + + struct Attributes { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsSSR { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + + VaryingsSSR VertSSR(Attributes input) { + VaryingsSSR output; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + output.positionCS = UnityObjectToClipPos(input.vertex); + output.uv = UnityStereoScreenSpaceUVAdjust(input.uv, _MainTex_ST); + return output; + } + + half4 FragResolve (VaryingsSSR i) : SV_Target { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + + half4 reflData = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_RayCastRT, i.uv); + half4 reflection = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, reflData.xy); + + reflection.rgb = min(reflection.rgb, 1.0); // stop NAN pixels + + half vd = dot2( (reflData.xy - 0.5) * 2.0 ); + half vignette = saturate( VIGNETTE_SIZE - vd * vd ); + + half reflectionIntensity = clamp(reflData.a * REFLECTIONS_MULTIPLIER, REFLECTIONS_MIN_INTENSITY, REFLECTIONS_MAX_INTENSITY) * vignette; + reflection.rgb *= reflectionIntensity; + + reflection.rgb = min(reflection.rgb, 1.2); // clamp max brightness + + // conserve energy + half4 pixel = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, i.uv); + reflection.rgb -= pixel.rgb * reflectionIntensity; + + // keep blur factor in alpha channel + reflection.a = reflData.z; + + return reflection; + } + + + +#endif // SSR_SOLVE \ No newline at end of file diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Solve.hlsl.meta b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Solve.hlsl.meta new file mode 100644 index 00000000..db56f116 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Solve.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a40b0a3683e1a478ab7da6e74a644e00 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl new file mode 100644 index 00000000..7d31744d --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl @@ -0,0 +1,240 @@ +#ifndef SSR_SURF_FX +#define SSR_SURF_FX + + // Copyright 2021 Kronnect - All Rights Reserved. + sampler2D _NoiseTex; + sampler2D _BumpMap; + sampler2D _SmoothnessMap; + float4 _BumpMap_ST; + float4 _NoiseTex_TexelSize; + + float4 _MaterialData; + #define SMOOTHNESS _MaterialData.x + #define FRESNEL _MaterialData.y + #define FUZZYNESS _MaterialData.z + #define DECAY _MaterialData.w + + float4 _SSRSettings; + #define THICKNESS _SSRSettings.x + #define SAMPLES _SSRSettings.y + #define BINARY_SEARCH_ITERATIONS _SSRSettings.z + #define MAX_RAY_LENGTH _SSRSettings.w + + float2 _SSRSettings5; + #define REFLECTIONS_THRESHOLD _SSRSettings5.y + +#if SSR_THICKNESS_FINE + #define THICKNESS_FINE _SSRSettings5.x +#else + #define THICKNESS_FINE THICKNESS +#endif + + float4 _SSRSettings2; + #define JITTER _SSRSettings2.x + #define CONTACT_HARDENING _SSRSettings2.y + + float4 _SSRSettings3; + #define INPUT_SIZE _SSRSettings3.xy + #define GOLDEN_RATIO_ACUM _SSRSettings3.z + #define DEPTH_BIAS _SSRSettings3.w + + + #define dot2(x) dot(x, x) + + struct AttributesSurf { + float4 positionOS : POSITION; + float2 texcoord : TEXCOORD0; + float3 normalOS : NORMAL; + float4 tangentOS : TANGENT; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VaryingsSSRSurf { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + float4 scrPos : TEXCOORD1; + float3 positionVS : TEXCOORD2; + #if SSR_NORMALMAP + float4 normal : TEXCOORD3; // xyz: normal, w: viewDir.x + float4 tangent : TEXCOORD4; // xyz: tangent, w: viewDir.y + float4 bitangent : TEXCOORD5; // xyz: bitangent, w: viewDir.z + #else + float3 normal : TEXCOORD3; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + VaryingsSSRSurf VertSSRSurf(AttributesSurf input) { + + VaryingsSSRSurf output = (VaryingsSSRSurf)0; + + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input, output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + VertexPositionInputs positions = GetVertexPositionInputs(input.positionOS.xyz); + VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS); + + output.positionCS = positions.positionCS; + output.positionVS = positions.positionVS * float3(1,1,-1); + output.scrPos = ComputeScreenPos(positions.positionCS); + output.uv = TRANSFORM_TEX(input.texcoord, _BumpMap); + + #if SSR_NORMALMAP + half3 viewDirWS = GetCameraPositionWS() - positions.positionWS; + output.normal = half4(normalInput.normalWS, viewDirWS.x); + output.tangent = half4(normalInput.tangentWS, viewDirWS.y); + output.bitangent = half4(normalInput.bitangentWS, viewDirWS.z); + #else + output.normal = TransformWorldToViewDir(normalInput.normalWS) * float3(1,1,-1); + #endif + + #if UNITY_REVERSED_Z + output.positionCS.z += 0.001; + #else + output.positionCS.z -= 0.001; + #endif + + return output; + } + + + float4 SSR_Pass(float2 uv, float3 normalVS, float3 rayStart, float smoothness) { + + float3 viewDirVS = normalize(rayStart); + float3 rayDir = reflect( viewDirVS, normalVS ); + + // if ray is toward the camera, early exit (optional) + //if (rayDir.z < 0) return 0.0.xxxx; + + float rayLength = MAX_RAY_LENGTH; + + float3 rayEnd = rayStart + rayDir * rayLength; + if (rayEnd.z < _ProjectionParams.y) { + rayLength = (rayStart.z - _ProjectionParams.y) / rayDir.z; + } + rayEnd = rayStart + rayDir * rayLength; + + float4 sposStart = mul(unity_CameraProjection, float4(rayStart, 1.0)); + float4 sposEnd = mul(unity_CameraProjection, float4(rayEnd, 1.0)); + float k0 = rcp(sposStart.w); + float q0 = rayStart.z * k0; + float k1 = rcp(sposEnd.w); + float q1 = rayEnd.z * k1; + float4 p = float4(uv, q0, k0); + + // depth clip check + float sceneDepth = GetLinearDepth(p.xy); + float pz = p.z / p.w; + if (sceneDepth < pz - DEPTH_BIAS) return 0; + + // length in pixels + float2 uv1 = (sposEnd.xy * rcp(rayEnd.z) + 1.0) * 0.5; + float2 duv = uv1 - uv; + float2 duvPixel = abs(duv * INPUT_SIZE); + float pixelDistance = max(duvPixel.x, duvPixel.y); + pixelDistance = max(1, pixelDistance); + int sampleCount = (int)SAMPLES; + float scale = max(1, SAMPLES * rcp(pixelDistance)); + sampleCount = (int)(sampleCount * rcp(scale)); + float4 pincr = float4(duv, q1-q0, k1-k0) * rcp(sampleCount); + + #if SSR_JITTER + float jitter = tex2D(_NoiseTex, uv * INPUT_SIZE * _NoiseTex_TexelSize.xy + GOLDEN_RATIO_ACUM).r; + //pincr *= 1.0 + jitter * JITTER; + p += pincr * (jitter * JITTER); + #endif + + float collision = 0; + float dist = 0; + float zdist = 0; + + UNITY_LOOP + for (int k = 0; k < sampleCount; k++) { + p += pincr; + if (any(floor(p.xy)!=0)) return 0.0.xxxx; // exit if out of screen space + sceneDepth = GetLinearDepth(p.xy); + pz = p.z / p.w; + float depthDiff = pz - sceneDepth; + if (depthDiff > 0 && depthDiff < THICKNESS) { + float4 origPincr = pincr; + p -= pincr; + float reduction = 1.0; + UNITY_LOOP + for (int j = 0; j < BINARY_SEARCH_ITERATIONS; j++) { + reduction *= 0.5; + p += pincr * reduction; + sceneDepth = GetLinearDepth(p.xy); + pz = p.z / p.w; + depthDiff = sceneDepth - pz; + pincr = sign(depthDiff) * origPincr; + } +#if SSR_THICKNESS_FINE + if (abs(depthDiff) < THICKNESS_FINE) + { +#endif + float hitAccuracy = 1.0 - abs(depthDiff) / THICKNESS_FINE; + zdist = (pz - rayStart.z) / (0.0001 + rayEnd.z - rayStart.z); + float rayFade = 1.0 - saturate(zdist); + collision = hitAccuracy * rayFade; + break; +#if SSR_THICKNESS_FINE + } + pincr = origPincr; + p += pincr; +#endif + } + } + + if (collision > 0) { + + // intersection found + float reflectionIntensity = smoothness * pow(collision, DECAY); + + // compute fresnel + float fresnel = 1.0 - FRESNEL * abs(dot(normalVS, viewDirVS)); + float reflectionAmount = reflectionIntensity * fresnel; + + // compute blur amount + float wdist = rayLength * zdist; + float blurAmount = max(0, wdist - CONTACT_HARDENING) * FUZZYNESS * (1 - smoothness); + + // return hit pixel + return float4(p.xy, blurAmount + 0.001, reflectionAmount); + } + + return float4(0,0,0,0); + } + + + float4 FragSSRSurf (VaryingsSSRSurf input) : SV_Target { + UNITY_SETUP_INSTANCE_ID(input); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + input.scrPos.xy /= input.scrPos.w; + input.scrPos = UnityStereoTransformScreenSpaceTex(input.scrPos); + #if SSR_NORMALMAP + float4 packedNormal = tex2D(_BumpMap, input.uv); + float3 normalTS = UnpackNormal(packedNormal); + half3 viewDirWS = half3(input.normal.w, input.tangent.w, input.bitangent.w); + float3 normalWS = TransformTangentToWorld(normalTS, half3x3(input.tangent.xyz, input.bitangent.xyz, input.normal.xyz)); + float3 normalVS = TransformWorldToViewDir(normalWS); + normalVS.z *= -1; + #else + float3 normalVS = input.normal; + #endif + + #if SSR_SMOOTHNESSMAP + float smoothness = SMOOTHNESS * tex2D(_SmoothnessMap, input.uv).a; + #else + float smoothness = SMOOTHNESS; + #endif + + smoothness = max(0, smoothness - REFLECTIONS_THRESHOLD); + float4 reflection = SSR_Pass(input.scrPos.xy, normalVS, input.positionVS, smoothness); + + return reflection; + } + + +#endif // SSR_SURF_FX \ No newline at end of file diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl.meta b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl.meta new file mode 100644 index 00000000..1a361ea4 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/SSR_Surface_Pass.hlsl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4e563a51a6e3e4c53bb04c621a65ff93 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/blueNoiseSSR64.png b/Assets/ShinySSRR/Runtime/Resources/SSR/blueNoiseSSR64.png new file mode 100644 index 00000000..81cdc3d5 Binary files /dev/null and b/Assets/ShinySSRR/Runtime/Resources/SSR/blueNoiseSSR64.png differ diff --git a/Assets/ShinySSRR/Runtime/Resources/SSR/blueNoiseSSR64.png.meta b/Assets/ShinySSRR/Runtime/Resources/SSR/blueNoiseSSR64.png.meta new file mode 100644 index 00000000..f0ec56c9 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Resources/SSR/blueNoiseSSR64.png.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: 61cdb903ff6ea425583a56231df1cd06 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + 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 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + 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: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + 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: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Scripts.meta b/Assets/ShinySSRR/Runtime/Scripts.meta new file mode 100644 index 00000000..2952171e --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 65b2a3467f08e49a0b54b38f4418a07b +folderAsset: yes +timeCreated: 1542876305 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Scripts/Reflections.cs b/Assets/ShinySSRR/Runtime/Scripts/Reflections.cs new file mode 100644 index 00000000..41c571df --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Scripts/Reflections.cs @@ -0,0 +1,414 @@ +/// +/// Shiny SSRR - Screen Space Raytraced Reflections - (c) 2021 Kronnect +/// + +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace ShinySSRR { + + public enum Scope { + OnlyThisObject = 0, + IncludeChildren = 10 + } + + + [Serializable] + public struct SubMeshSettingsData { + [Range(0, 1)] + public float smoothness; + } + + [ExecuteInEditMode] + public partial class Reflections : MonoBehaviour { + + + [Tooltip("Prevent this object from receiving reflections")] + public bool ignore; + + [Tooltip("On which objects should reflections apply")] + public Scope scope; + + [Tooltip("Include only objects matching this layer mask")] + public LayerMask layerMask = -1; + + [Tooltip("Include only objects including this text")] + public string nameFilter; + + [Tooltip("Optionally specify which submeshes can receive reflections. Set this to 0 to apply reflections to all submeshes.")] + public int subMeshMask; + + [Header("Material Features")] + [Tooltip("Use smoothness from object material (ignored if material doesn't have a smoothness property)")] + public bool useMaterialSmoothness = true; + + [Tooltip("Custom material property name for the smoothness map")] + public string materialSmoothnessMapPropertyName = "_MetallicGlossMap"; + + [Tooltip("Custom material property name for the smoothness intensity")] + public string materialSmoothnessIntensityPropertyName = "_Glossiness"; + + [Tooltip("Smoothness value used if material has no smoothness property.")] + [Range(0, 1)] + public float smoothness = 0.75f; + + [Tooltip("Apply a different smoothness multiplier per submesh")] + public bool perSubMeshSmoothness; + + [Tooltip("Smoothness values per each submesh")] + public SubMeshSettingsData[] subMeshSettings; + + [Tooltip("Use normal map from object material (ignored if material doesn't have a smoothness property)")] + public bool useMaterialNormalMap = true; + + [Tooltip("Custom material property name for the normal map")] + public string materialNormalMapPropertyName = "_BumpMap"; + + [Header("Raytracing Settings")] + public bool overrideGlobalSettings; + + [Tooltip("Max number of samples used during the raymarch loop")] + [Range(4, 128)] public int sampleCount = 16; + + [HideInInspector] + public float stepSize; // no longer used; kept for backward compatibility during upgrade + + [Tooltip("Maximum reflection distance")] + public float maxRayLength; + + [Tooltip("Assumed thickness of geometry in the depth buffer before binary search")] + public float thickness = 0.2f; + + [Tooltip("Number of refinements steps when a reflection hit is found")] + [Range(0, 16)] public int binarySearchIterations = 6; + + [Tooltip("Increase accuracy of reflection hit after binary search by discarding points further than a reduced thickness.")] + public bool refineThickness; + + [Tooltip("Assumed thickness of geometry in the depth buffer after binary search")] + [Range(0.005f, 1f)] + public float thicknessFine = 0.05f; + + [Tooltip("Reflection decay with distance to reflective point")] + public float decay = 2f; + + [Range(0, 1)] + [Tooltip("Reduces reflection based on view angle")] + public float fresnel = 0.75f; + + [Min(0)] + [Tooltip("Ray dispersion with distance")] + public float fuzzyness; + + [Tooltip("Makes sharpen reflections near objects")] + public float contactHardening; + + + [Tooltip("Jitter helps smoothing edges")] + [Range(0, 1f)] public float jitter = 0.3f; + + + [NonSerialized] + public readonly static List instances = new List(); + + [NonSerialized] + public readonly List ssrRenderers = new List(); + + [NonSerialized] + public readonly List renderers = new List(); + + void OnEnable() { + if (maxRayLength == 0) { + maxRayLength = Mathf.Max(0.1f, stepSize * sampleCount); + } + Refresh(); + instances.Add(this); + } + + void OnDisable() { + if (instances != null) { + int k = instances.IndexOf(this); + if (k >= 0) { + instances.RemoveAt(k); + } + } + } + + private void OnValidate() { + fuzzyness = Mathf.Max(0, fuzzyness); + thickness = Mathf.Max(0.01f, thickness); + thicknessFine = Mathf.Max(0.01f, thicknessFine); + contactHardening = Mathf.Max(0, contactHardening); + decay = Mathf.Max(1f, decay); + if (maxRayLength == 0) { + maxRayLength = stepSize * sampleCount; + } + maxRayLength = Mathf.Max(0.1f, maxRayLength); + Refresh(); + } + + private void OnDestroy() { + if (ssrRenderers == null) return; + for (int k = 0; k < ssrRenderers.Count; k++) { + Material[] mats = ssrRenderers[k].ssrMaterials; + if (mats != null) { + for (int j = 0; j < mats.Length; j++) { + if (mats[j] != null) DestroyImmediate(mats[j]); + } + } + } + } + + /// + /// Updates the list of included renderers to receive reflections + /// + public void Refresh() { + + switch (scope) { + case Scope.OnlyThisObject: { + renderers.Clear(); + Renderer r = GetComponent(); + if (r != null) { + renderers.Add(r); + } + } + break; + case Scope.IncludeChildren: + GetComponentsInChildren(true, renderers); + // Check if some children has an exclusive reflections component + int rCount = renderers.Count; + bool usesNameFilter = !string.IsNullOrEmpty(nameFilter); + for (int k = 0; k < rCount; k++) { + Renderer r = renderers[k]; + if (((1 << r.gameObject.layer) & layerMask) == 0) { + renderers[k] = null; + continue; + } + if (usesNameFilter) { + if (!r.name.Contains(nameFilter)) { + renderers[k] = null; + continue; + } + } + Reflections refl = r.GetComponent(); + if (refl != null && refl != this) { + renderers[k] = null; + } + } + break; + } + + // Prepare required ssr materials slots + int renderersCount = renderers.Count; + ssrRenderers.Clear(); + if (ignore) return; + + for (int k = 0; k < renderersCount; k++) { + Renderer r = renderers[k]; + if (r == null) continue; + Reflections refl = r.GetComponent(); + if (refl != null && refl.ignore) { + continue; + } + SSR_Renderer ssr = new SSR_Renderer { + renderer = r + }; + ssrRenderers.Add(ssr); + } + } + + + + public class SSR_Renderer { + public Renderer renderer; + public Material[] ssrMaterials; + public List originalMaterials; + public bool isInitialized; + public bool exclude; + public Collider collider; + public bool hasStaticBounds; + public Bounds staticBounds; + + public void Init(Material ssrMat) { + isInitialized = true; + originalMaterials = new List(); + renderer.GetSharedMaterials(originalMaterials); + collider = renderer.GetComponent(); + hasStaticBounds = false; + if (renderer.isPartOfStaticBatch && collider == null) { + MeshFilter mf = renderer.GetComponent(); + if (mf != null) { + Mesh mesh = mf.sharedMesh; + if (mesh != null) { + int subMeshStartIndex = ((MeshRenderer)renderer).subMeshStartIndex; + staticBounds = mesh.GetSubMesh(subMeshStartIndex).bounds; + int subMeshesCount = originalMaterials.Count; + for (int k = 1; k < subMeshesCount; k++) { + staticBounds.Encapsulate(mesh.GetSubMesh(subMeshStartIndex + k).bounds); + } + hasStaticBounds = true; + } + } + } + ssrMaterials = new Material[originalMaterials.Count]; + for (int k = 0; k < ssrMaterials.Length; k++) { + ssrMaterials[k] = Instantiate(ssrMat); + } + } + + public void UpdateMaterialProperties(Reflections go, ShinySSRR globalSettings) { + if (go.subMeshSettings == null) { + go.subMeshSettings = new SubMeshSettingsData[0]; + } + float totalSmoothness = 0; + for (int s = 0; s < ssrMaterials.Length; s++) { + Material ssrMat = ssrMaterials[s]; + Material originalMaterial = originalMaterials[s]; + + float smoothness = go.smoothness; + if (go.perSubMeshSmoothness) { + if (s < go.subMeshSettings.Length) { + smoothness = go.subMeshSettings[s].smoothness; + } + } + bool hasSmoothnessMap = false; + bool hasNormalMap = false; + if (originalMaterial != null) { + if (go.useMaterialSmoothness) { + if (!string.IsNullOrEmpty(go.materialSmoothnessIntensityPropertyName) && originalMaterial.HasProperty(go.materialSmoothnessIntensityPropertyName)) { + smoothness = originalMaterial.GetFloat(go.materialSmoothnessIntensityPropertyName); + } else if (originalMaterial.HasProperty(ShaderParams.Smoothness)) { + smoothness = originalMaterial.GetFloat(ShaderParams.Smoothness); + } + Texture metallicGlossMap = null; + if (!string.IsNullOrEmpty(go.materialSmoothnessMapPropertyName) && originalMaterial.HasProperty(go.materialSmoothnessMapPropertyName)) { + metallicGlossMap = originalMaterial.GetTexture(go.materialSmoothnessMapPropertyName); + } else if (originalMaterial.HasProperty(ShaderParams.MetallicGlossMap)) { + metallicGlossMap = originalMaterial.GetTexture(ShaderParams.MetallicGlossMap); + } + if (metallicGlossMap != null) { + ssrMat.SetTexture(ShaderParams.SmoothnessMap, metallicGlossMap); + ssrMat.EnableKeyword(ShaderParams.SKW_SMOOTHNESSMAP); + hasSmoothnessMap = true; + } + } else { + // color alpha can also influence smoothness + if (originalMaterial.HasProperty(ShaderParams.Color)) { + smoothness *= originalMaterial.color.a; + } else if (originalMaterial.HasProperty(ShaderParams.BaseColor)) { + smoothness *= originalMaterial.GetColor(ShaderParams.BaseColor).a; + } + } + if (go.useMaterialNormalMap) { + Texture bumpMap = null; + if (!string.IsNullOrEmpty(go.materialNormalMapPropertyName) && originalMaterial.HasProperty(go.materialNormalMapPropertyName)) { + bumpMap = originalMaterial.GetTexture(go.materialNormalMapPropertyName); + } else if (originalMaterial.HasProperty(ShaderParams.BumpMap)) { + bumpMap = originalMaterial.GetTexture(ShaderParams.BumpMap); + } + if (bumpMap != null) { + ssrMat.SetTexture(ShaderParams.BumpMap, bumpMap); + ssrMat.SetVector(ShaderParams.BumpMap_ST, originalMaterial.GetVector(ShaderParams.MainTex_ST)); + ssrMat.EnableKeyword(ShaderParams.SKW_NORMALMAP); + hasNormalMap = true; + } + } + } + if (!hasSmoothnessMap) { + ssrMat.DisableKeyword(ShaderParams.SKW_SMOOTHNESSMAP); + } + if (!hasNormalMap) { + ssrMat.DisableKeyword(ShaderParams.SKW_NORMALMAP); + } + + totalSmoothness += smoothness; + if (go.overrideGlobalSettings) { + if (go.jitter > 0) { + ssrMat.EnableKeyword(ShaderParams.SKW_JITTER); + } else { + ssrMat.DisableKeyword(ShaderParams.SKW_JITTER); + } + if (go.refineThickness) { + ssrMat.EnableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + ssrMat.SetFloat(ShaderParams.SSRSettings5, go.thicknessFine * go.thickness); + } else { + ssrMat.DisableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } + ssrMat.SetVector(ShaderParams.SSRSettings5, new Vector4(go.thicknessFine * go.thickness, globalSettings.smoothnessThreshold, 0, 0)); + ssrMat.SetVector(ShaderParams.SSRSettings2, new Vector4(go.jitter, go.contactHardening, globalSettings.reflectionsMultiplier, globalSettings.vignetteSize)); + ssrMat.SetVector(ShaderParams.SSRSettings, new Vector4(go.thickness, go.sampleCount, go.binarySearchIterations, go.maxRayLength)); + ssrMat.SetVector(ShaderParams.MaterialData, new Vector4(smoothness, go.fresnel, go.fuzzyness, go.decay)); + } else { + if (globalSettings.jitter > 0) { + ssrMat.EnableKeyword(ShaderParams.SKW_JITTER); + } else { + ssrMat.DisableKeyword(ShaderParams.SKW_JITTER); + } + if (globalSettings.refineThickness) { + ssrMat.EnableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } else { + ssrMat.DisableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } + ssrMat.SetVector(ShaderParams.SSRSettings5, new Vector4(globalSettings.thicknessFine * globalSettings.thickness, globalSettings.smoothnessThreshold, 0, 0)); + ssrMat.SetVector(ShaderParams.SSRSettings2, new Vector4(globalSettings.jitter, globalSettings.contactHardening, globalSettings.reflectionsMultiplier, globalSettings.vignetteSize)); + ssrMat.SetVector(ShaderParams.SSRSettings, new Vector4(globalSettings.thickness, globalSettings.sampleCount, globalSettings.binarySearchIterations, globalSettings.maxRayLength)); + ssrMat.SetVector(ShaderParams.MaterialData, new Vector4(smoothness, globalSettings.fresnel, globalSettings.fuzzyness, globalSettings.decay)); + } + } + exclude = (totalSmoothness == 0); + } + } + + private void OnDrawGizmos() { + for (int k = 0; k < ssrRenderers.Count; k++) { + Bounds bounds = ssrRenderers[k].staticBounds; + Gizmos.DrawWireCube(bounds.center, bounds.size); + } + + } + + + public void ApplyRaytracingPreset(RaytracingPreset preset) { + switch (preset) { + case RaytracingPreset.Fast: + sampleCount = 16; + maxRayLength = 6; + binarySearchIterations = 4; + thickness = 0.5f; + refineThickness = false; + jitter = 0.3f; + break; + case RaytracingPreset.Medium: + sampleCount = 24; + maxRayLength = 12; + binarySearchIterations = 5; + refineThickness = false; + break; + case RaytracingPreset.High: + sampleCount = 48; + maxRayLength = 24; + binarySearchIterations = 6; + refineThickness = false; + thicknessFine = 0.05f; + break; + case RaytracingPreset.Superb: + sampleCount = 88; + maxRayLength = 48; + binarySearchIterations = 7; + refineThickness = true; + thicknessFine = 0.02f; + break; + case RaytracingPreset.Ultra: + sampleCount = 128; + maxRayLength = 64; + binarySearchIterations = 8; + refineThickness = true; + thicknessFine = 0.02f; + break; + } + } + } +} + + diff --git a/Assets/ShinySSRR/Runtime/Scripts/Reflections.cs.meta b/Assets/ShinySSRR/Runtime/Scripts/Reflections.cs.meta new file mode 100644 index 00000000..0478bc15 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Scripts/Reflections.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 75f82f03739e4499282c234601d0b1ad +timeCreated: 1545593776 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 900 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Scripts/ShaderParams.cs b/Assets/ShinySSRR/Runtime/Scripts/ShaderParams.cs new file mode 100644 index 00000000..81a69c20 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Scripts/ShaderParams.cs @@ -0,0 +1,49 @@ +/// +/// Shiny SSRR - Screen Space Raytraced Reflections - (c) 2021 Kronnect +/// + +using UnityEngine; + +namespace ShinySSRR { + + public static class ShaderParams { + + // input textures + public static int NoiseTex = Shader.PropertyToID("_NoiseTex"); + public static int BumpMap = Shader.PropertyToID("_BumpMap"); + public static int BumpMap_ST = Shader.PropertyToID("_BumpMap_ST"); + public static int MainTex_ST = Shader.PropertyToID("_MainTex_ST"); + + // shader uniforms + public static int Color = Shader.PropertyToID("_Color"); + public static int BaseColor = Shader.PropertyToID("_BaseColor"); + public static int Smoothness = Shader.PropertyToID("_Glossiness"); + public static int SmoothnessMap = Shader.PropertyToID("_SmoothnessMap"); + public static int MetallicGlossMap = Shader.PropertyToID("_MetallicGlossMap"); + public static int GlossMapScale = Shader.PropertyToID("_GlossMapScale"); + public static int MaterialData = Shader.PropertyToID("_MaterialData"); + public static int SSRSettings = Shader.PropertyToID("_SSRSettings"); + public static int SSRSettings2 = Shader.PropertyToID("_SSRSettings2"); + public static int SSRSettings3 = Shader.PropertyToID("_SSRSettings3"); + public static int SSRSettings4 = Shader.PropertyToID("_SSRSettings4"); + public static int SSRSettings5 = Shader.PropertyToID("_SSRSettings5"); + public static int SSRBlurStrength = Shader.PropertyToID("_SSRBlurStrength"); + public static int WorldToViewDir = Shader.PropertyToID("_WorldToViewDir"); + public static int MinimumBlur = Shader.PropertyToID("_MinimumBlur"); + + // targets + public static int ColorTex = Shader.PropertyToID("_ColorTex"); + public static int RayCast = Shader.PropertyToID("_RayCastRT"); + public static int BlurRT = Shader.PropertyToID("_BlurRT"); + public static int ReflectionsTex = Shader.PropertyToID("_ReflectionsRT"); + public static int NaNBuffer = Shader.PropertyToID("_NaNBuffer"); + + // shader keywords + public const string SKW_JITTER = "SSR_JITTER"; + public const string SKW_NORMALMAP = "SSR_NORMALMAP"; + public const string SKW_DENOISE = "SSR_DENOISE"; + public const string SKW_SMOOTHNESSMAP = "SSR_SMOOTHNESSMAP"; + public const string SKW_REFINE_THICKNESS = "SSR_THICKNESS_FINE"; + } + +} \ No newline at end of file diff --git a/Assets/ShinySSRR/Runtime/Scripts/ShaderParams.cs.meta b/Assets/ShinySSRR/Runtime/Scripts/ShaderParams.cs.meta new file mode 100644 index 00000000..cfbef258 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Scripts/ShaderParams.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81cb18e4990a74f1cbee86972646d4db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/Scripts/ShinySSRR.cs b/Assets/ShinySSRR/Runtime/Scripts/ShinySSRR.cs new file mode 100644 index 00000000..2c7e500c --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Scripts/ShinySSRR.cs @@ -0,0 +1,473 @@ +/// +/// Shiny SSRR - Screen Space Raytraced Reflections - (c) 2021 Kronnect +/// + +using UnityEngine; +using UnityEngine.Rendering; + +namespace ShinySSRR { + + public enum OutputMode { + Final, + OnlyReflections, + SideBySideComparison + } + + public enum RaytracingPreset { + Fast = 10, + Medium = 20, + High = 30, + Superb = 35, + Ultra = 40 + } + + [ExecuteInEditMode] + [RequireComponent(typeof(Camera))] + [ImageEffectAllowedInSceneView] + public class ShinySSRR : MonoBehaviour { + + class SSRPass { + + enum Pass { + CopyExact = 0, + SSRSurf = 1, + Resolve = 2, + BlurHoriz = 3, + BlurVert = 4, + Debug = 5, + Combine = 6, + CombineWithCompare = 7, + GBuffPass = 8, + Copy = 9 + } + + const string SHINY_CBUFNAME = "Shiny_SSRR"; + const float GOLDEN_RATIO = 0.618033989f; + const int MIP_COUNT = 5; + Material sMat; + Texture noiseTex; + ShinySSRR settings; + readonly Plane[] frustumPlanes = new Plane[6]; + CommandBuffer cmd; + int[] rtPyramid; + + public void Setup(ShinySSRR settings, bool deferred) { + this.settings = settings; + if (cmd == null) { + cmd = new CommandBuffer { + name = SHINY_CBUFNAME + }; + } + if (sMat == null) { + Shader shader = Shader.Find("Hidden/Kronnect/SSR"); + sMat = new Material(shader); + } + if (noiseTex == null) { + noiseTex = Resources.Load("SSR/blueNoiseSSR64"); + } + sMat.SetTexture(ShaderParams.NoiseTex, noiseTex); + + // set global settings + sMat.SetVector(ShaderParams.SSRSettings2, new Vector4(settings.jitter, settings.contactHardening, settings.reflectionsMultiplier, settings.vignetteSize)); + sMat.SetVector(ShaderParams.SSRSettings4, new Vector4(settings.separationPos, settings.reflectionsMinIntensity, settings.reflectionsMaxIntensity, settings.specularSoftenPower)); + sMat.SetVector(ShaderParams.SSRBlurStrength, new Vector4(settings.blurStrength.x, settings.blurStrength.y, 0, 0)); + sMat.SetVector(ShaderParams.SSRSettings5, new Vector4(settings.thicknessFine * settings.thickness, settings.smoothnessThreshold, 0, 0)); + if (settings.specularControl) { + sMat.EnableKeyword(ShaderParams.SKW_DENOISE); + } else { + sMat.DisableKeyword(ShaderParams.SKW_DENOISE); + } + sMat.SetFloat(ShaderParams.MinimumBlur, settings.minimumBlur); + + if (deferred) { + if (settings.jitter > 0) { + sMat.EnableKeyword(ShaderParams.SKW_JITTER); + } else { + sMat.DisableKeyword(ShaderParams.SKW_JITTER); + } + if (settings.refineThickness) { + sMat.EnableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } else { + sMat.DisableKeyword(ShaderParams.SKW_REFINE_THICKNESS); + } + sMat.SetVector(ShaderParams.SSRSettings, new Vector4(settings.thickness, settings.sampleCount, settings.binarySearchIterations, settings.maxRayLength)); + sMat.SetVector(ShaderParams.MaterialData, new Vector4(0, settings.fresnel, settings.fuzzyness, settings.decay)); + } + + if (rtPyramid == null || rtPyramid.Length != MIP_COUNT) { + rtPyramid = new int[MIP_COUNT]; + } + for (int k = 0; k < rtPyramid.Length; k++) { + rtPyramid[k] = Shader.PropertyToID("_BlurRTMip" + k); + } + } + + public void Execute(RenderTexture source, RenderTexture destination, Camera cam) { + ExecuteInternal(source, destination, cam); + Graphics.Blit(source, destination, sMat, (int)Pass.CopyExact); + } + + void ExecuteInternal(RenderTexture source, RenderTexture renderTexture, Camera cam) { + // ignore SceneView depending on setting + if (cam.cameraType == CameraType.SceneView) { + if (!settings.showInSceneView) return; + } else { + // ignore any camera other than GameView + if (cam.cameraType != CameraType.Game) return; + } + + RenderTextureDescriptor sourceDesc = source.descriptor; + sourceDesc.colorFormat = settings.lowPrecision ? RenderTextureFormat.ARGB32 : RenderTextureFormat.ARGBHalf; + sourceDesc.width /= settings.downsampling; + sourceDesc.height /= settings.downsampling; + sourceDesc.msaaSamples = 1; + + float goldenFactor = GOLDEN_RATIO; + if (settings.animatedJitter) { + goldenFactor *= (Time.frameCount % 480); + } + Shader.SetGlobalVector(ShaderParams.SSRSettings3, new Vector4(sourceDesc.width, sourceDesc.height, goldenFactor, settings.depthBias)); + + if (settings.isDeferredActive) { + // init command buffer + cmd.Clear(); + + // pass UNITY_MATRIX_V + sMat.SetMatrix(ShaderParams.WorldToViewDir, cam.worldToCameraMatrix); + + // prepare ssr target + cmd.GetTemporaryRT(ShaderParams.RayCast, sourceDesc, FilterMode.Point); + + // raytrace using gbuffers + cmd.Blit(source, ShaderParams.RayCast, sMat, (int)Pass.GBuffPass); + + } else { + + // early exit if no reflection objects + int count = Reflections.instances.Count; + if (count == 0) return; + + bool firstSSR = true; + + GeometryUtility.CalculateFrustumPlanes(cam, frustumPlanes); + + for (int k = 0; k < count; k++) { + Reflections go = Reflections.instances[k]; + if (go == null) continue; + int rendererCount = go.ssrRenderers.Count; + for (int j = 0; j < rendererCount; j++) { + Reflections.SSR_Renderer ssrRenderer = go.ssrRenderers[j]; + Renderer goRenderer = ssrRenderer.renderer; + + if (goRenderer == null || !goRenderer.isVisible) continue; + + // if object is part of static batch, check collider bounds (if existing) + if (goRenderer.isPartOfStaticBatch) { + if (ssrRenderer.hasStaticBounds) { + // check artifically computed bounds + if (!GeometryUtility.TestPlanesAABB(frustumPlanes, ssrRenderer.staticBounds)) continue; + } else if (ssrRenderer.collider != null) { + // check if object is visible by current camera using collider bounds + if (!GeometryUtility.TestPlanesAABB(frustumPlanes, ssrRenderer.collider.bounds)) continue; + } + } else { + // check if object is visible by current camera using renderer bounds + if (!GeometryUtility.TestPlanesAABB(frustumPlanes, goRenderer.bounds)) continue; + } + + if (!ssrRenderer.isInitialized) { + ssrRenderer.Init(sMat); + ssrRenderer.UpdateMaterialProperties(go, settings); + } +#if UNITY_EDITOR + else if (!Application.isPlaying) { + ssrRenderer.UpdateMaterialProperties(go, settings); + } +#endif + if (ssrRenderer.exclude) continue; + + if (firstSSR) { + firstSSR = false; + + // init command buffer + cmd.Clear(); + + // prepare ssr target + cmd.GetTemporaryRT(ShaderParams.RayCast, sourceDesc, FilterMode.Point); + cmd.SetRenderTarget(ShaderParams.RayCast); + cmd.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); + } + for (int s = 0; s < ssrRenderer.ssrMaterials.Length; s++) { + if (go.subMeshMask <= 0 || ((1 << s) & go.subMeshMask) != 0) { + Material ssrMat = ssrRenderer.ssrMaterials[s]; + cmd.DrawRenderer(goRenderer, ssrMat, s, (int)Pass.SSRSurf); + } + } + } + } + + if (firstSSR) return; + } + + // Resolve reflections + RenderTextureDescriptor copyDesc = sourceDesc; + copyDesc.depthBufferBits = 0; + + cmd.GetTemporaryRT(ShaderParams.ReflectionsTex, copyDesc); + cmd.Blit(source, ShaderParams.ReflectionsTex, sMat, (int)Pass.Resolve); + RenderTargetIdentifier input = ShaderParams.ReflectionsTex; + + // Pyramid blur + copyDesc.width /= settings.blurDownsampling; + copyDesc.height /= settings.blurDownsampling; + for (int k = 0; k < MIP_COUNT; k++) { + copyDesc.width = Mathf.Max(2, copyDesc.width / 2); + copyDesc.height = Mathf.Max(2, copyDesc.height / 2); + cmd.GetTemporaryRT(rtPyramid[k], copyDesc, FilterMode.Bilinear); + cmd.GetTemporaryRT(ShaderParams.BlurRT, copyDesc, FilterMode.Bilinear); + cmd.Blit(input, ShaderParams.BlurRT, sMat, (int)Pass.BlurHoriz); + cmd.Blit(ShaderParams.BlurRT, rtPyramid[k], sMat, (int)Pass.BlurVert); + cmd.ReleaseTemporaryRT(ShaderParams.BlurRT); + input = rtPyramid[k]; + } + + // Output + int finalPass; + if (settings.outputMode == OutputMode.Final) { + finalPass = (int)Pass.Combine; + } else if (settings.outputMode == OutputMode.SideBySideComparison) { + finalPass = (int)Pass.CombineWithCompare; + } else { + finalPass = (int)Pass.Debug; + } + cmd.Blit(ShaderParams.ReflectionsTex, source, sMat, finalPass); + + if (settings.stopNaN) { + RenderTextureDescriptor nanDesc = source.descriptor; + nanDesc.depthBufferBits = 0; + nanDesc.msaaSamples = 1; + cmd.GetTemporaryRT(ShaderParams.NaNBuffer, nanDesc); + cmd.Blit(source, ShaderParams.NaNBuffer, sMat, (int)Pass.CopyExact); + cmd.Blit(ShaderParams.NaNBuffer, source, sMat, (int)Pass.CopyExact); + } + + // Clean up + for (int k = 0; k < rtPyramid.Length; k++) { + cmd.ReleaseTemporaryRT(rtPyramid[k]); + } + cmd.ReleaseTemporaryRT(ShaderParams.RayCast); + + Graphics.ExecuteCommandBuffer(cmd); + + } + + public void Cleanup() { + if (sMat != null) { + DestroyImmediate(sMat); + } + } + } + + [Header("General Settings")] + + [Tooltip("Show reflections in SceneView window")] + public bool showInSceneView = true; + + [Tooltip("Downsampling multiplier applied to the final blurred reflections")] + [Range(1, 8)] public int downsampling = 1; + + [Tooltip("Bias applied to depth checking. Increase if reflections desappear at the distance when downsampling is used")] + [Min(0)] public float depthBias = 0.01f; + + [Tooltip("Show final result / debug view or compare view")] + public OutputMode outputMode = OutputMode.Final; + + [Tooltip("Position of the dividing line")] + [Range(-0.01f, 1.01f)] public float separationPos = 0.5f; + + [Tooltip("HDR reflections")] + public bool lowPrecision; + + [Tooltip("Prevents out of range colors when composing reflections in the destination buffer. This operation performs a ping-pong copy of the frame buffer which can be expensive. Use only if required.")] + public bool stopNaN; + + [Tooltip("Max number of samples used during the raymarch loop")] + [Range(4, 128)] public int sampleCount = 16; + + [HideInInspector] + public float stepSize; // no longer used; kept for backward compatibility during upgrade + + [Tooltip("Maximum reflection distance")] + public float maxRayLength; + + [Tooltip("Assumed thickness of geometry in the depth buffer before binary search")] + public float thickness = 0.2f; + + [Tooltip("Number of refinements steps when a reflection hit is found")] + [Range(0, 16)] public int binarySearchIterations = 6; + + [Tooltip("Increase accuracy of reflection hit after binary search by discarding points further than a reduced thickness.")] + public bool refineThickness; + + [Tooltip("Assumed thickness of geometry in the depth buffer after binary search")] + [Range(0.005f, 1f)] + public float thicknessFine = 0.05f; + + [Tooltip("Jitter helps smoothing edges")] + [Range(0, 1f)] public float jitter = 0.3f; + + [Tooltip("Animates jitter every frame")] + public bool animatedJitter = true; + + [Header("Reflection Intensity")] + + [Tooltip("Minimum smoothness to receive reflections")] + [Range(0,1)] + public float smoothnessThreshold; + + [Tooltip("Reflection multiplier")] + [Range(0, 2)] + public float reflectionsMultiplier = 1f; + + [Tooltip("Reflection min intensity")] + [Range(0, 1)] + public float reflectionsMinIntensity; + + [Tooltip("Reflection max intensity")] + [Range(0, 1)] + public float reflectionsMaxIntensity = 1f; + + [Range(0, 1)] + [Tooltip("Reduces reflection based on view angle")] + public float fresnel = 0.75f; + + [Tooltip("Reflection decay with distance to reflective point")] + public float decay = 2f; + + [Tooltip("Reduces intensity of specular reflections")] + public bool specularControl; + + [Min(0), Tooltip("Power of the specular filter")] + public float specularSoftenPower = 15f; + + [Tooltip("Controls the attenuation range of effect on screen borders")] + [Range(0.5f, 2f)] + public float vignetteSize = 1.1f; + + [Header("Reflection Sharpness")] + + [Min(0)] + [Tooltip("Ray dispersion with distance")] + public float fuzzyness; + + [Tooltip("Makes sharpen reflections near objects")] + public float contactHardening; + + [Range(0, 4f)] + [Tooltip("Produces sharper reflections based on distance")] + public float minimumBlur = 0.25f; + + [Tooltip("Downsampling multiplier applied to the blur")] + [Range(1, 8)] public int blurDownsampling = 1; + + [Tooltip("Custom directional blur strength")] + public Vector2 blurStrength = Vector2.one; + + SSRPass renderPass; + + Camera cam; + + public bool isDeferredActive { + get { + if (cam != null) { + return cam.renderingPath != RenderingPath.Forward; + } + return false; + } + } + + void OnDisable() { + if (renderPass != null) { + renderPass.Cleanup(); + } + } + + void OnEnable() { + if (maxRayLength == 0) { + maxRayLength = Mathf.Max(0.1f, stepSize * sampleCount); + } + if (renderPass == null) { + renderPass = new SSRPass(); + } + cam = GetComponent(); + cam.depthTextureMode |= DepthTextureMode.Depth; + } + + void OnValidate() { + decay = Mathf.Max(1f, decay); + if (maxRayLength == 0) { + maxRayLength = stepSize * sampleCount; + } + maxRayLength = Mathf.Max(0.1f, maxRayLength); + fuzzyness = Mathf.Max(0, fuzzyness); + thickness = Mathf.Max(0.01f, thickness); + thicknessFine = Mathf.Max(0.01f, thicknessFine); + contactHardening = Mathf.Max(0, contactHardening); + reflectionsMaxIntensity = Mathf.Max(reflectionsMinIntensity, reflectionsMaxIntensity); + blurStrength.x = Mathf.Max(blurStrength.x, 0f); + blurStrength.y = Mathf.Max(blurStrength.y, 0f); + } + + void OnRenderImage(RenderTexture source, RenderTexture destination) { + renderPass.Setup(this, isDeferredActive); + renderPass.Execute(source, destination, cam); + } + + public void ApplyRaytracingPreset(RaytracingPreset preset) { + switch (preset) { + case RaytracingPreset.Fast: + sampleCount = 16; + maxRayLength = 6; + binarySearchIterations = 4; + downsampling = 3; + thickness = 0.5f; + refineThickness = false; + jitter = 0.3f; + break; + case RaytracingPreset.Medium: + sampleCount = 24; + maxRayLength = 12; + binarySearchIterations = 5; + downsampling = 2; + refineThickness = false; + break; + case RaytracingPreset.High: + sampleCount = 48; + maxRayLength = 24; + binarySearchIterations = 6; + downsampling = 1; + refineThickness = false; + thicknessFine = 0.05f; + break; + case RaytracingPreset.Superb: + sampleCount = 88; + maxRayLength = 48; + binarySearchIterations = 7; + downsampling = 1; + refineThickness = true; + thicknessFine = 0.02f; + break; + case RaytracingPreset.Ultra: + sampleCount = 128; + maxRayLength = 64; + binarySearchIterations = 8; + downsampling = 1; + refineThickness = true; + thicknessFine = 0.02f; + break; + } + } + + } + +} diff --git a/Assets/ShinySSRR/Runtime/Scripts/ShinySSRR.cs.meta b/Assets/ShinySSRR/Runtime/Scripts/ShinySSRR.cs.meta new file mode 100644 index 00000000..47c2efae --- /dev/null +++ b/Assets/ShinySSRR/Runtime/Scripts/ShinySSRR.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf716a1be50b448e7b1d1968ab734946 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ShinySSRR/Runtime/ShinySSRR.asmdef b/Assets/ShinySSRR/Runtime/ShinySSRR.asmdef new file mode 100644 index 00000000..0e68c7be --- /dev/null +++ b/Assets/ShinySSRR/Runtime/ShinySSRR.asmdef @@ -0,0 +1,16 @@ +{ + "name": "ScreenSpaceReflections", + "references": [ + "GUID:15fc0a57446b3144c949da3e2b9737a9", + "GUID:df380645f10b7bc4b97d4f5eb6303d95" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/ShinySSRR/Runtime/ShinySSRR.asmdef.meta b/Assets/ShinySSRR/Runtime/ShinySSRR.asmdef.meta new file mode 100644 index 00000000..7eb5f0c3 --- /dev/null +++ b/Assets/ShinySSRR/Runtime/ShinySSRR.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9e8d8d01326844c7b962a38be41a11b0 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: