From eb84bb298d2b95aec7b2ae12cbf25ac64f25379a Mon Sep 17 00:00:00 2001 From: tylermurphy534 Date: Sun, 6 Nov 2022 15:12:42 -0500 Subject: move to self host --- VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs | 6 + .../Assets/Bakery/BakeryAlwaysRender.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs | 107 + .../Assets/Bakery/BakeryDirectLight.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs | 83 + .../Assets/Bakery/BakeryLightMesh.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs | 179 + .../Assets/Bakery/BakeryLightmapGroup.cs.meta | 12 + .../Assets/Bakery/BakeryLightmapGroupSelector.cs | 9 + .../Bakery/BakeryLightmapGroupSelector.cs.meta | 12 + .../Assets/Bakery/BakeryLightmappedPrefab.cs | 130 + .../Assets/Bakery/BakeryLightmappedPrefab.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/BakeryMetaPass.cginc | 69 + .../Assets/Bakery/BakeryMetaPass.cginc.meta | 9 + .../Assets/Bakery/BakeryPackAsSingleSquare.cs | 6 + .../Assets/Bakery/BakeryPackAsSingleSquare.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/BakeryPointLight.cs | 191 + .../Assets/Bakery/BakeryPointLight.cs.meta | 12 + .../Assets/Bakery/BakeryProjectSettings.cs | 60 + .../Assets/Bakery/BakeryProjectSettings.cs.meta | 12 + .../Assets/Bakery/BakeryRuntimeAssembly.asmdef | 3 + .../Bakery/BakeryRuntimeAssembly.asmdef.meta | 8 + VRCSDK3Worlds/Assets/Bakery/BakerySector.cs | 36 + VRCSDK3Worlds/Assets/Bakery/BakerySector.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/BakerySectorCapture.cs | 27 + .../Assets/Bakery/BakerySectorCapture.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/BakerySkyLight.cs | 120 + VRCSDK3Worlds/Assets/Bakery/BakerySkyLight.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/BakeryVolume.cs | 102 + VRCSDK3Worlds/Assets/Bakery/BakeryVolume.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/docs.meta | 9 + VRCSDK3Worlds/Assets/Bakery/docs/Bakery_manual.pdf | Bin 0 -> 2794548 bytes .../Assets/Bakery/docs/Bakery_manual.pdf.meta | 8 + VRCSDK3Worlds/Assets/Bakery/emptyDirection.tga | Bin 0 -> 48 bytes .../Assets/Bakery/emptyDirection.tga.meta | 100 + .../Assets/Bakery/emptyLightingData.asset | Bin 0 -> 13396 bytes .../Assets/Bakery/emptyLightingData.asset.meta | 9 + VRCSDK3Worlds/Assets/Bakery/examples.meta | 9 + .../Assets/Bakery/examples/LMGroup_Plane_RNM.asset | 43 + .../Bakery/examples/LMGroup_Plane_RNM.asset.meta | 9 + .../Assets/Bakery/examples/LMGroup_Plane_SH.asset | 43 + .../Bakery/examples/LMGroup_Plane_SH.asset.meta | 9 + .../examples/LMGroup_Plane_baked_normal.asset | 43 + .../examples/LMGroup_Plane_baked_normal.asset.meta | 9 + .../examples/LMGroup_Plane_directional.asset | 43 + .../examples/LMGroup_Plane_directional.asset.meta | 9 + .../Bakery/examples/LMGroup_Sphere_VertexDir.asset | 43 + .../examples/LMGroup_Sphere_VertexDir.asset.meta | 9 + .../Bakery/examples/LMGroup_Sphere_VertexLM.asset | 43 + .../examples/LMGroup_Sphere_VertexLM.asset.meta | 9 + .../Bakery/examples/LMGroup_Sphere_VertexSH.asset | 43 + .../examples/LMGroup_Sphere_VertexSH.asset.meta | 9 + .../Bakery/examples/LMGroup_example_bush_day.asset | 43 + .../examples/LMGroup_example_bush_day.asset.meta | 9 + .../examples/LMGroup_example_bush_evening.asset | 43 + .../LMGroup_example_bush_evening.asset.meta | 9 + VRCSDK3Worlds/Assets/Bakery/examples/content.meta | 9 + .../Assets/Bakery/examples/content/AreaLight.ies | 83 + .../Bakery/examples/content/AreaLight.ies.meta | 8 + .../Bakery/examples/content/ColoredAreaLight.mat | 78 + .../examples/content/ColoredAreaLight.mat.meta | 9 + .../Assets/Bakery/examples/content/Materials.meta | 9 + .../examples/content/Materials/01 - Default.mat | 77 + .../content/Materials/01 - Default.mat.meta | 9 + .../Bakery/examples/content/Materials/Light.mat | 77 + .../examples/content/Materials/Light.mat.meta | 9 + .../Bakery/examples/content/Materials/ftlogo.mat | 77 + .../examples/content/Materials/ftlogo.mat.meta | 9 + .../Bakery/examples/content/SkyboxNormal.mat | 84 + .../Bakery/examples/content/SkyboxNormal.mat.meta | 9 + .../Bakery/examples/content/StoneBeach_Normal.png | Bin 0 -> 3546986 bytes .../examples/content/StoneBeach_Normal.png.meta | 100 + .../Bakery/examples/content/UnityEmissive 1.mat | 77 + .../examples/content/UnityEmissive 1.mat.meta | 9 + .../Assets/Bakery/examples/content/black.mat | 77 + .../Assets/Bakery/examples/content/black.mat.meta | 9 + .../Assets/Bakery/examples/content/cityblock.FBX | Bin 0 -> 1756720 bytes .../Bakery/examples/content/cityblock.FBX.meta | 83 + .../Assets/Bakery/examples/content/demoacid.mat | 35 + .../Bakery/examples/content/demoacid.mat.meta | 4 + .../Assets/Bakery/examples/content/demoblack.mat | 116 + .../Bakery/examples/content/demoblack.mat.meta | 9 + .../Assets/Bakery/examples/content/democliffs.mat | 116 + .../Bakery/examples/content/democliffs.mat.meta | 9 + .../Assets/Bakery/examples/content/demogray.mat | 116 + .../Bakery/examples/content/demogray.mat.meta | 9 + .../Assets/Bakery/examples/content/demogreen.mat | 116 + .../Bakery/examples/content/demogreen.mat.meta | 9 + .../Assets/Bakery/examples/content/demolava.mat | 35 + .../Bakery/examples/content/demolava.mat.meta | 4 + .../Bakery/examples/content/demonormal blue.mat | 118 + .../examples/content/demonormal blue.mat.meta | 9 + .../Bakery/examples/content/demonormal green.mat | 86 + .../examples/content/demonormal green.mat.meta | 9 + .../Bakery/examples/content/demonormal red.mat | 97 + .../examples/content/demonormal red.mat.meta | 9 + .../content/demonormal white vertex SH.mat | 89 + .../content/demonormal white vertex SH.mat.meta | 9 + .../content/demonormal white vertex dir.mat | 87 + .../content/demonormal white vertex dir.mat.meta | 9 + .../Bakery/examples/content/demonormal white.mat | 117 + .../examples/content/demonormal white.mat.meta | 9 + .../Assets/Bakery/examples/content/demonormal.mat | 118 + .../Bakery/examples/content/demonormal.mat.meta | 9 + .../Assets/Bakery/examples/content/demored.mat | 116 + .../Bakery/examples/content/demored.mat.meta | 9 + .../Assets/Bakery/examples/content/demotrain.mat | 117 + .../Bakery/examples/content/demotrain.mat.meta | 9 + .../Assets/Bakery/examples/content/demowhite.mat | 116 + .../Bakery/examples/content/demowhite.mat.meta | 9 + .../content/example_prefabs_bake_skybox.asset | 34 + .../content/example_prefabs_bake_skybox.asset.meta | 9 + .../content/example_volumes_global_skybox.asset | 34 + .../example_volumes_global_skybox.asset.meta | 9 + .../Assets/Bakery/examples/content/floor_lamp.FBX | Bin 0 -> 31936 bytes .../Bakery/examples/content/floor_lamp.FBX.meta | 84 + .../Assets/Bakery/examples/content/ftlogo.mat | 78 + .../Assets/Bakery/examples/content/ftlogo.mat.meta | 9 + .../Assets/Bakery/examples/content/ftlogo.png | Bin 0 -> 39929 bytes .../Assets/Bakery/examples/content/ftlogo.png.meta | 76 + .../Assets/Bakery/examples/content/gray.mat | 77 + .../Assets/Bakery/examples/content/gray.mat.meta | 9 + .../Assets/Bakery/examples/content/light.mat | 26 + .../Assets/Bakery/examples/content/light.mat.meta | 4 + .../Assets/Bakery/examples/content/logolight.FBX | Bin 0 -> 100608 bytes .../Bakery/examples/content/logolight.FBX.meta | 84 + .../Bakery/examples/content/logolight.fbm.meta | 9 + .../examples/content/logolight.fbm/ftlogo.psd | Bin 0 -> 77120 bytes .../examples/content/logolight.fbm/ftlogo.psd.meta | 76 + .../Bakery/examples/content/logolightPrefab.prefab | 126 + .../examples/content/logolightPrefab.prefab.meta | 9 + .../Assets/Bakery/examples/content/readmeFont.mat | 84 + .../Bakery/examples/content/readmeFont.mat.meta | 9 + .../Bakery/examples/content/semiEmissive.bmp | Bin 0 -> 3145784 bytes .../Bakery/examples/content/semiEmissive.bmp.meta | 76 + .../Bakery/examples/content/semiEmissive.mat | 77 + .../Bakery/examples/content/semiEmissive.mat.meta | 9 + .../Assets/Bakery/examples/content/shiny_floor.mat | 77 + .../Bakery/examples/content/shiny_floor.mat.meta | 9 + .../Assets/Bakery/examples/content/skies64.exr | Bin 0 -> 8347 bytes .../Bakery/examples/content/skies64.exr.meta | 101 + .../Assets/Bakery/examples/content/sky.exr | Bin 0 -> 105059 bytes .../Assets/Bakery/examples/content/sky.exr.meta | 77 + .../Assets/Bakery/examples/content/sponza.meta | 9 + .../Bakery/examples/content/sponza/Materials.meta | 9 + .../content/sponza/Materials/Material__47.mat | 77 + .../content/sponza/Materials/Material__47.mat.meta | 9 + .../content/sponza/Materials/background.mat | 77 + .../content/sponza/Materials/background.mat.meta | 9 + .../content/sponza/Materials/chain_texture.mat | 77 + .../sponza/Materials/chain_texture.mat.meta | 9 + .../examples/content/sponza/Materials/kust.mat | 89 + .../content/sponza/Materials/kust.mat.meta | 9 + .../examples/content/sponza/Materials/lion.mat | 77 + .../content/sponza/Materials/lion.mat.meta | 9 + .../sponza/Materials/spnza_bricks_a_diff.mat | 77 + .../sponza/Materials/spnza_bricks_a_diff.mat.meta | 9 + .../content/sponza/Materials/sponza_arch_diff.mat | 77 + .../sponza/Materials/sponza_arch_diff.mat.meta | 9 + .../sponza/Materials/sponza_ceiling_a_diff.mat | 77 + .../Materials/sponza_ceiling_a_diff.mat.meta | 9 + .../sponza/Materials/sponza_column_a_diff.mat | 77 + .../sponza/Materials/sponza_column_a_diff.mat.meta | 9 + .../sponza/Materials/sponza_column_b_diff.mat | 77 + .../sponza/Materials/sponza_column_b_diff.mat.meta | 9 + .../sponza/Materials/sponza_column_c_diff.mat | 77 + .../sponza/Materials/sponza_column_c_diff.mat.meta | 9 + .../sponza/Materials/sponza_curtain_blue_diff.mat | 77 + .../Materials/sponza_curtain_blue_diff.mat.meta | 9 + .../sponza/Materials/sponza_curtain_diff.mat | 77 + .../sponza/Materials/sponza_curtain_diff.mat.meta | 9 + .../sponza/Materials/sponza_curtain_green_diff.mat | 77 + .../Materials/sponza_curtain_green_diff.mat.meta | 9 + .../sponza/Materials/sponza_details_diff.mat | 96 + .../sponza/Materials/sponza_details_diff.mat.meta | 9 + .../sponza/Materials/sponza_fabric_blue_diff.mat | 77 + .../Materials/sponza_fabric_blue_diff.mat.meta | 9 + .../sponza/Materials/sponza_fabric_diff.mat | 77 + .../sponza/Materials/sponza_fabric_diff.mat.meta | 9 + .../sponza/Materials/sponza_fabric_green_diff.mat | 77 + .../Materials/sponza_fabric_green_diff.mat.meta | 9 + .../sponza/Materials/sponza_flagpole_diff.mat | 77 + .../sponza/Materials/sponza_flagpole_diff.mat.meta | 9 + .../sponza/Materials/sponza_floor_a_diff.mat | 85 + .../sponza/Materials/sponza_floor_a_diff.mat.meta | 9 + .../content/sponza/Materials/sponza_green.mat | 77 + .../content/sponza/Materials/sponza_green.mat.meta | 9 + .../content/sponza/Materials/sponza_roof_diff.mat | 77 + .../sponza/Materials/sponza_roof_diff.mat.meta | 9 + .../content/sponza/Materials/sponza_thorn_diff.mat | 78 + .../sponza/Materials/sponza_thorn_diff.mat.meta | 9 + .../examples/content/sponza/Materials/vase_dif.mat | 77 + .../content/sponza/Materials/vase_dif.mat.meta | 9 + .../content/sponza/Materials/vase_hanging.mat | 77 + .../content/sponza/Materials/vase_hanging.mat.meta | 9 + .../content/sponza/Materials/vase_plant.mat | 78 + .../content/sponza/Materials/vase_plant.mat.meta | 9 + .../content/sponza/Materials/vase_round.mat | 77 + .../content/sponza/Materials/vase_round.mat.meta | 9 + .../Assets/Bakery/examples/content/sponza/bush.FBX | Bin 0 -> 284480 bytes .../Bakery/examples/content/sponza/bush.FBX.meta | 83 + .../Bakery/examples/content/sponza/bush.fbm.meta | 9 + .../examples/content/sponza/bush.fbm/kust.png | Bin 0 -> 240340 bytes .../examples/content/sponza/bush.fbm/kust.png.meta | 68 + .../Bakery/examples/content/sponza/sponza.FBX | Bin 0 -> 13473008 bytes .../Bakery/examples/content/sponza/sponza.FBX.meta | 1965 +++ .../Bakery/examples/content/sponza/sponza.fbm.meta | 9 + .../content/sponza/sponza.fbm/background.png | Bin 0 -> 1279899 bytes .../content/sponza/sponza.fbm/background.png.meta | 68 + .../content/sponza/sponza.fbm/background_bump.png | Bin 0 -> 211001 bytes .../sponza/sponza.fbm/background_bump.png.meta | 68 + .../content/sponza/sponza.fbm/chain_texture.png | Bin 0 -> 374829 bytes .../sponza/sponza.fbm/chain_texture.png.meta | 100 + .../sponza/sponza.fbm/chain_texture_bump.png | Bin 0 -> 37014 bytes .../sponza/sponza.fbm/chain_texture_bump.png.meta | 68 + .../sponza/sponza.fbm/chain_texture_mask.png | Bin 0 -> 1150 bytes .../sponza/sponza.fbm/chain_texture_mask.png.meta | 68 + .../examples/content/sponza/sponza.fbm/lion.png | Bin 0 -> 1685074 bytes .../content/sponza/sponza.fbm/lion.png.meta | 68 + .../content/sponza/sponza.fbm/lion_bump.png | Bin 0 -> 283932 bytes .../content/sponza/sponza.fbm/lion_bump.png.meta | 68 + .../sponza/sponza.fbm/spnza_bricks_a_bump.png | Bin 0 -> 613084 bytes .../sponza/sponza.fbm/spnza_bricks_a_bump.png.meta | 68 + .../sponza/sponza.fbm/spnza_bricks_a_diff.png | Bin 0 -> 1850821 bytes .../sponza/sponza.fbm/spnza_bricks_a_diff.png.meta | 68 + .../sponza/sponza.fbm/spnza_bricks_a_spec.png | Bin 0 -> 789292 bytes .../sponza/sponza.fbm/spnza_bricks_a_spec.png.meta | 68 + .../content/sponza/sponza.fbm/sponza_arch_diff.png | Bin 0 -> 1545689 bytes .../sponza/sponza.fbm/sponza_arch_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_ceiling_a_diff.png | Bin 0 -> 1748205 bytes .../sponza.fbm/sponza_ceiling_a_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_column_a_bump.png | Bin 0 -> 314193 bytes .../sponza.fbm/sponza_column_a_bump.png.meta | 68 + .../sponza/sponza.fbm/sponza_column_a_diff.png | Bin 0 -> 1743092 bytes .../sponza.fbm/sponza_column_a_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_column_b_bump.png | Bin 0 -> 306062 bytes .../sponza.fbm/sponza_column_b_bump.png.meta | 68 + .../sponza/sponza.fbm/sponza_column_b_diff.png | Bin 0 -> 2127842 bytes .../sponza.fbm/sponza_column_b_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_column_c_bump.png | Bin 0 -> 322713 bytes .../sponza.fbm/sponza_column_c_bump.png.meta | 68 + .../sponza/sponza.fbm/sponza_column_c_diff.png | Bin 0 -> 2021589 bytes .../sponza.fbm/sponza_column_c_diff.png.meta | 76 + .../sponza/sponza.fbm/sponza_curtain_blue_diff.png | Bin 0 -> 9202020 bytes .../sponza.fbm/sponza_curtain_blue_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_curtain_diff.png | Bin 0 -> 8834304 bytes .../sponza/sponza.fbm/sponza_curtain_diff.png.meta | 68 + .../sponza.fbm/sponza_curtain_green_diff.png | Bin 0 -> 8325274 bytes .../sponza.fbm/sponza_curtain_green_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_details_diff.png | Bin 0 -> 1342967 bytes .../sponza/sponza.fbm/sponza_details_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_fabric_blue_diff.png | Bin 0 -> 2097497 bytes .../sponza.fbm/sponza_fabric_blue_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_fabric_diff.png | Bin 0 -> 2208126 bytes .../sponza/sponza.fbm/sponza_fabric_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_fabric_green_diff.png | Bin 0 -> 2162350 bytes .../sponza.fbm/sponza_fabric_green_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_flagpole_diff.png | Bin 0 -> 1314735 bytes .../sponza.fbm/sponza_flagpole_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_floor_a_diff.png | Bin 0 -> 1881715 bytes .../sponza/sponza.fbm/sponza_floor_a_diff.png.meta | 100 + .../content/sponza/sponza.fbm/sponza_roof_diff.png | Bin 0 -> 2280888 bytes .../sponza/sponza.fbm/sponza_roof_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_thorn_bump.png | Bin 0 -> 35900 bytes .../sponza/sponza.fbm/sponza_thorn_bump.png.meta | 68 + .../sponza/sponza.fbm/sponza_thorn_diff.png | Bin 0 -> 450994 bytes .../sponza/sponza.fbm/sponza_thorn_diff.png.meta | 68 + .../sponza/sponza.fbm/sponza_thorn_mask.png | Bin 0 -> 68251 bytes .../sponza/sponza.fbm/sponza_thorn_mask.png.meta | 68 + .../content/sponza/sponza.fbm/vase_bump.png | Bin 0 -> 431658 bytes .../content/sponza/sponza.fbm/vase_bump.png.meta | 68 + .../content/sponza/sponza.fbm/vase_dif.png | Bin 0 -> 1739865 bytes .../content/sponza/sponza.fbm/vase_dif.png.meta | 68 + .../content/sponza/sponza.fbm/vase_hanging.png | Bin 0 -> 1240906 bytes .../sponza/sponza.fbm/vase_hanging.png.meta | 68 + .../content/sponza/sponza.fbm/vase_plant.png | Bin 0 -> 817124 bytes .../content/sponza/sponza.fbm/vase_plant.png.meta | 68 + .../content/sponza/sponza.fbm/vase_plant_mask.png | Bin 0 -> 85746 bytes .../sponza/sponza.fbm/vase_plant_mask.png.meta | 68 + .../content/sponza/sponza.fbm/vase_round.png | Bin 0 -> 1798469 bytes .../content/sponza/sponza.fbm/vase_round.png.meta | 68 + .../content/sponza/sponza.fbm/vase_round_bump.png | Bin 0 -> 77501 bytes .../sponza/sponza.fbm/vase_round_bump.png.meta | 68 + .../examples/content/sponza_day_skybox.asset | 33 + .../examples/content/sponza_day_skybox.asset.meta | 9 + .../examples/content/sponza_evening_skybox.asset | 33 + .../content/sponza_evening_skybox.asset.meta | 9 + .../Bakery/examples/content/stainedglass.mat | 75 + .../Bakery/examples/content/stainedglass.mat.meta | 9 + .../Bakery/examples/content/stainedglass.png | Bin 0 -> 83515 bytes .../Bakery/examples/content/stainedglass.png.meta | 76 + .../Bakery/examples/content/stainedglasscross.png | Bin 0 -> 157796 bytes .../examples/content/stainedglasscross.png.meta | 77 + .../Assets/Bakery/examples/content/testColors.png | Bin 0 -> 170929 bytes .../Bakery/examples/content/testColors.png.meta | 68 + .../Bakery/examples/content/vertexLM_text.mat | 77 + .../Bakery/examples/content/vertexLM_text.mat.meta | 9 + .../Bakery/examples/content/vertexLM_text.png | Bin 0 -> 23345 bytes .../Bakery/examples/content/vertexLM_text.png.meta | 100 + .../Bakery/examples/content/volume_test_scene.FBX | Bin 0 -> 282656 bytes .../examples/content/volume_test_scene.FBX.meta | 166 + .../Bakery/examples/content/volume_test_scene2.FBX | Bin 0 -> 230320 bytes .../examples/content/volume_test_scene2.FBX.meta | 242 + .../Assets/Bakery/examples/content/yellowlight.mat | 35 + .../Bakery/examples/content/yellowlight.mat.meta | 4 + .../Bakery/examples/example_directional.unity | 1183 ++ .../Bakery/examples/example_directional.unity.meta | 8 + .../Bakery/examples/example_directional_RNM.unity | 1766 +++ .../examples/example_directional_RNM.unity.meta | 8 + .../Bakery/examples/example_directional_SH.unity | 1782 +++ .../examples/example_directional_SH.unity.meta | 8 + .../Assets/Bakery/examples/example_lights.unity | 2768 +++++ .../Bakery/examples/example_lights.unity.meta | 8 + .../examples/example_mixed_directional_mode.unity | 3107 +++++ .../example_mixed_directional_mode.unity.meta | 8 + .../Bakery/examples/example_prefab_corner.prefab | 2061 ++++ .../examples/example_prefab_corner.prefab.meta | 9 + .../Bakery/examples/example_prefab_straight.prefab | 1257 ++ .../examples/example_prefab_straight.prefab.meta | 9 + .../examples/example_prefabs_assembled.unity | 1218 ++ .../examples/example_prefabs_assembled.unity.meta | 8 + .../Bakery/examples/example_prefabs_bake.unity | 3865 ++++++ .../examples/example_prefabs_bake.unity.meta | 8 + .../Assets/Bakery/examples/example_sectors.unity | 1598 +++ .../Bakery/examples/example_sectors.unity.meta | 8 + .../Bakery/examples/example_shadowmask.unity | 2462 ++++ .../Bakery/examples/example_shadowmask.unity.meta | 8 + .../Bakery/examples/example_sponza_day.unity | 12000 +++++++++++++++++++ .../Bakery/examples/example_sponza_day.unity.meta | 8 + .../Bakery/examples/example_sponza_evening2.unity | 11365 ++++++++++++++++++ .../examples/example_sponza_evening2.unity.meta | 8 + .../Bakery/examples/example_subtractive.unity | 2660 ++++ .../Bakery/examples/example_subtractive.unity.meta | 8 + .../Bakery/examples/example_volumes_advanced.unity | 4143 +++++++ .../examples/example_volumes_advanced.unity.meta | 8 + .../Bakery/examples/example_volumes_simple.unity | 953 ++ .../examples/example_volumes_simple.unity.meta | 8 + .../example_volumes_simple_shadowmask.unity | 1027 ++ .../example_volumes_simple_shadowmask.unity.meta | 8 + .../Assets/Bakery/examples/lightmaps.meta | 9 + .../examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr | Bin 0 -> 140981 bytes .../lightmaps/LMGroup_Plane_RNM_RNM0.hdr.meta | 68 + .../examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr | Bin 0 -> 133302 bytes .../lightmaps/LMGroup_Plane_RNM_RNM1.hdr.meta | 68 + .../examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr | Bin 0 -> 146898 bytes .../lightmaps/LMGroup_Plane_RNM_RNM2.hdr.meta | 68 + .../examples/lightmaps/LMGroup_Plane_SH_L0.hdr | Bin 0 -> 172024 bytes .../lightmaps/LMGroup_Plane_SH_L0.hdr.meta | 68 + .../examples/lightmaps/LMGroup_Plane_SH_L1x.tga | Bin 0 -> 262162 bytes .../lightmaps/LMGroup_Plane_SH_L1x.tga.meta | 68 + .../examples/lightmaps/LMGroup_Plane_SH_L1y.tga | Bin 0 -> 262162 bytes .../lightmaps/LMGroup_Plane_SH_L1y.tga.meta | 68 + .../examples/lightmaps/LMGroup_Plane_SH_L1z.tga | Bin 0 -> 262162 bytes .../lightmaps/LMGroup_Plane_SH_L1z.tga.meta | 68 + .../lightmaps/LMGroup_Plane_baked_normal_final.hdr | Bin 0 -> 262181 bytes .../LMGroup_Plane_baked_normal_final.hdr.meta | 68 + .../lightmaps/LMGroup_Plane_directional_dir.tga | Bin 0 -> 262162 bytes .../LMGroup_Plane_directional_dir.tga.meta | 68 + .../lightmaps/LMGroup_Plane_directional_final.hdr | Bin 0 -> 175560 bytes .../LMGroup_Plane_directional_final.hdr.meta | 68 + .../lightmaps/LMGroup_Sphere_VertexDir0.asset | 165 + .../lightmaps/LMGroup_Sphere_VertexDir0.asset.meta | 9 + .../lightmaps/LMGroup_Sphere_VertexLM1.asset | 165 + .../lightmaps/LMGroup_Sphere_VertexLM1.asset.meta | 9 + .../lightmaps/LMGroup_Sphere_VertexSH0.asset | 165 + .../lightmaps/LMGroup_Sphere_VertexSH0.asset.meta | 9 + .../lightmaps/example_directional_LM0_dir.tga | Bin 0 -> 1048594 bytes .../lightmaps/example_directional_LM0_dir.tga.meta | 100 + .../lightmaps/example_directional_LM0_final.hdr | Bin 0 -> 333171 bytes .../example_directional_LM0_final.hdr.meta | 100 + .../lightmaps/example_directional_LMA1_dir.tga | Bin 0 -> 1048594 bytes .../example_directional_LMA1_dir.tga.meta | 100 + .../lightmaps/example_directional_LMA1_final.hdr | Bin 0 -> 397154 bytes .../example_directional_LMA1_final.hdr.meta | 68 + .../lightmaps/example_directional_RNM_LM0_RNM0.hdr | Bin 0 -> 487634 bytes .../example_directional_RNM_LM0_RNM0.hdr.meta | 68 + .../lightmaps/example_directional_RNM_LM0_RNM1.hdr | Bin 0 -> 518321 bytes .../example_directional_RNM_LM0_RNM1.hdr.meta | 68 + .../lightmaps/example_directional_RNM_LM0_RNM2.hdr | Bin 0 -> 507067 bytes .../example_directional_RNM_LM0_RNM2.hdr.meta | 68 + .../example_directional_RNM_LMA1_RNM0.hdr | Bin 0 -> 462363 bytes .../example_directional_RNM_LMA1_RNM0.hdr.meta | 68 + .../example_directional_RNM_LMA1_RNM1.hdr | Bin 0 -> 383027 bytes .../example_directional_RNM_LMA1_RNM1.hdr.meta | 68 + .../example_directional_RNM_LMA1_RNM2.hdr | Bin 0 -> 453369 bytes .../example_directional_RNM_LMA1_RNM2.hdr.meta | 68 + .../lightmaps/example_directional_SH_LM0_L0.hdr | Bin 0 -> 367819 bytes .../example_directional_SH_LM0_L0.hdr.meta | 100 + .../lightmaps/example_directional_SH_LM0_L1x.tga | Bin 0 -> 1048594 bytes .../example_directional_SH_LM0_L1x.tga.meta | 100 + .../lightmaps/example_directional_SH_LM0_L1y.tga | Bin 0 -> 1048594 bytes .../example_directional_SH_LM0_L1y.tga.meta | 100 + .../lightmaps/example_directional_SH_LM0_L1z.tga | Bin 0 -> 1048594 bytes .../example_directional_SH_LM0_L1z.tga.meta | 100 + .../lightmaps/example_directional_SH_LMA1_L0.hdr | Bin 0 -> 352046 bytes .../example_directional_SH_LMA1_L0.hdr.meta | 100 + .../lightmaps/example_directional_SH_LMA1_L1x.tga | Bin 0 -> 1048594 bytes .../example_directional_SH_LMA1_L1x.tga.meta | 100 + .../lightmaps/example_directional_SH_LMA1_L1y.tga | Bin 0 -> 1048594 bytes .../example_directional_SH_LMA1_L1y.tga.meta | 100 + .../lightmaps/example_directional_SH_LMA1_L1z.tga | Bin 0 -> 1048594 bytes .../example_directional_SH_LMA1_L1z.tga.meta | 100 + .../lightmaps/example_lights_LM0_final.hdr | Bin 0 -> 512877 bytes .../lightmaps/example_lights_LM0_final.hdr.meta | 68 + .../lightmaps/example_lights_LMA1_final.hdr | Bin 0 -> 335583 bytes .../lightmaps/example_lights_LMA1_final.hdr.meta | 68 + .../example_mixed_directional_mode_LM0_final.hdr | Bin 0 -> 175561 bytes ...ample_mixed_directional_mode_LM0_final.hdr.meta | 68 + .../lightmaps/example_prefabs_bake_LM0_final.hdr | Bin 0 -> 579767 bytes .../example_prefabs_bake_LM0_final.hdr.meta | 68 + .../lightmaps/example_prefabs_bake_LMA1_final.hdr | Bin 0 -> 528008 bytes .../example_prefabs_bake_LMA1_final.hdr.meta | 68 + .../lightmaps/example_shadowmask_0_probes.asset | Bin 0 -> 88896 bytes .../example_shadowmask_0_probes.asset.meta | 9 + .../lightmaps/example_shadowmask_LM0_dir.tga | Bin 0 -> 1048594 bytes .../lightmaps/example_shadowmask_LM0_dir.tga.meta | 68 + .../lightmaps/example_shadowmask_LM0_final.hdr | Bin 0 -> 270012 bytes .../example_shadowmask_LM0_final.hdr.meta | 68 + .../lightmaps/example_shadowmask_LM0_mask.tga | Bin 0 -> 1048594 bytes .../lightmaps/example_shadowmask_LM0_mask.tga.meta | 68 + .../lightmaps/example_shadowmask_LMA1_dir.tga | Bin 0 -> 1048594 bytes .../lightmaps/example_shadowmask_LMA1_dir.tga.meta | 100 + .../lightmaps/example_shadowmask_LMA1_final.hdr | Bin 0 -> 287058 bytes .../example_shadowmask_LMA1_final.hdr.meta | 68 + .../lightmaps/example_shadowmask_LMA1_mask.tga | Bin 0 -> 1048594 bytes .../example_shadowmask_LMA1_mask.tga.meta | 68 + .../lightmaps/example_sponza_day_0_probes.asset | Bin 0 -> 94804 bytes .../example_sponza_day_0_probes.asset.meta | 9 + .../example_sponza_evening2_0_probes.asset | Bin 0 -> 124692 bytes .../example_sponza_evening2_0_probes.asset.meta | 9 + .../lightmaps/example_subtractive_0_probes.asset | Bin 0 -> 21940 bytes .../example_subtractive_0_probes.asset.meta | 9 + .../lightmaps/example_subtractive_LM0_final.hdr | Bin 0 -> 349521 bytes .../example_subtractive_LM0_final.hdr.meta | 68 + .../lightmaps/example_subtractive_LMA1_final.hdr | Bin 0 -> 267843 bytes .../example_subtractive_LMA1_final.hdr.meta | 68 + .../lightmaps/example_volumes_advanced_0.asset | Bin 0 -> 13204 bytes .../example_volumes_advanced_0.asset.meta | 9 + .../lightmaps/example_volumes_simple_0.asset | Bin 0 -> 13200 bytes .../lightmaps/example_volumes_simple_0.asset.meta | 9 + .../example_volumes_simple_shadowmask_0.asset | Bin 0 -> 13240 bytes .../example_volumes_simple_shadowmask_0.asset.meta | 9 + VRCSDK3Worlds/Assets/Bakery/examples/scripts.meta | 9 + .../examples/scripts/BakeryVolumeReceiver.cs | 48 + .../examples/scripts/BakeryVolumeReceiver.cs.meta | 12 + .../Bakery/examples/scripts/BakeryVolumeTrigger.cs | 78 + .../examples/scripts/BakeryVolumeTrigger.cs.meta | 12 + .../Bakery/examples/scripts/VolumeTestScene2.cs | 52 + .../examples/scripts/VolumeTestScene2.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/examples/shaders.meta | 9 + .../examples/shaders/Baked_Alpha_meta.shader | 91 + .../examples/shaders/Baked_Alpha_meta.shader.meta | 9 + .../examples/shaders/Baked_Normal_Maps_meta.shader | 83 + .../shaders/Baked_Normal_Maps_meta.shader.meta | 9 + .../shaders/Baked_Normal_Maps_terrain_meta.shader | 84 + .../Baked_Normal_Maps_terrain_meta.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftBlack.shader | 42 + VRCSDK3Worlds/Assets/Bakery/ftBlack.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftCubemap2Strip.shader | 80 + .../Assets/Bakery/ftCubemap2Strip.shader.meta | 9 + .../Assets/Bakery/ftCubemap2StripExport.shader | 78 + .../Bakery/ftCubemap2StripExport.shader.meta | 9 + .../Assets/Bakery/ftDefaultAreaLightMat.mat | 78 + .../Assets/Bakery/ftDefaultAreaLightMat.mat.meta | 9 + .../Assets/Bakery/ftDefaultGlobalStorage.asset | 490 + .../Bakery/ftDefaultGlobalStorage.asset.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftDilate.shader | 106 + VRCSDK3Worlds/Assets/Bakery/ftDilate.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader | 59 + .../Assets/Bakery/ftFarSphere.shader.meta | 9 + .../Assets/Bakery/ftFarSphereDilate.shader | 68 + .../Assets/Bakery/ftFarSphereDilate.shader.meta | 9 + .../Assets/Bakery/ftFarSphereProjClip.shader | 106 + .../Assets/Bakery/ftFarSphereProjClip.shader.meta | 9 + .../Assets/Bakery/ftFarSphereRender.shader | 90 + .../Assets/Bakery/ftFarSphereRender.shader.meta | 9 + .../Assets/Bakery/ftFarSphereRenderBase.cginc | 70 + .../Assets/Bakery/ftFarSphereRenderBase.cginc.meta | 9 + .../Assets/Bakery/ftFarSphereRenderOccluder.shader | 67 + .../Bakery/ftFarSphereRenderOccluder.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset | 513 + .../Assets/Bakery/ftGlobalStorage.asset.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.cs | 399 + .../Assets/Bakery/ftGlobalStorage.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/ftLight.shader | 50 + VRCSDK3Worlds/Assets/Bakery/ftLight.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftLightmaps.cs | 936 ++ VRCSDK3Worlds/Assets/Bakery/ftLightmaps.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs | 506 + .../Assets/Bakery/ftLightmapsStorage.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset | 17 + .../Assets/Bakery/ftLocalStorage.asset.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs | 16 + VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader | 54 + VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader | 49 + .../Assets/Bakery/ftOverlapTest.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader | 51 + .../Assets/Bakery/ftRGBM2Half.shader.meta | 9 + .../Assets/Bakery/ftSimpleVertexLM.shader | 92 + .../Assets/Bakery/ftSimpleVertexLM.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader | 78 + VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader | 89 + .../Assets/Bakery/ftUVNormalMap.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs | 46 + .../Assets/Bakery/ftUniqueIDRegistry.cs.meta | 12 + VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp | Bin 0 -> 49208 bytes .../Assets/Bakery/ftUnitySpotTexture.bmp.meta | 76 + VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader | 81 + .../Assets/Bakery/ftUnlitTerrain.shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/shader.meta | 9 + VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc | 1240 ++ .../Assets/Bakery/shader/Bakery.cginc.meta | 9 + .../Assets/Bakery/shader/BakeryStandard.shader | 417 + .../Bakery/shader/BakeryStandard.shader.meta | 9 + .../Bakery/shader/BakeryStandardSpecular.shader | 410 + .../shader/BakeryStandardSpecular.shader.meta | 9 + .../shader/Bakery_ShaderGraphHDRP.unitypackage | Bin 0 -> 5492051 bytes .../Bakery_ShaderGraphHDRP.unitypackage.meta | 8 + .../shader/Bakery_ShaderGraphURP.unitypackage | Bin 0 -> 7412902 bytes .../shader/Bakery_ShaderGraphURP.unitypackage.meta | 8 + VRCSDK3Worlds/Assets/Bakery/shader/Editor.meta | 9 + .../Assets/Bakery/shader/Editor/BakeryShaderGUI.cs | 598 + .../Bakery/shader/Editor/BakeryShaderGUI.cs.meta | 12 + 526 files changed, 81019 insertions(+) create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroupSelector.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroupSelector.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryLightmappedPrefab.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryLightmappedPrefab.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryMetaPass.cginc create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryMetaPass.cginc.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryPackAsSingleSquare.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryPackAsSingleSquare.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryPointLight.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryPointLight.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryProjectSettings.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryProjectSettings.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryRuntimeAssembly.asmdef create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryRuntimeAssembly.asmdef.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakerySector.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakerySector.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakerySectorCapture.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakerySectorCapture.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakerySkyLight.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakerySkyLight.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryVolume.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/BakeryVolume.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/docs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/docs/Bakery_manual.pdf create mode 100644 VRCSDK3Worlds/Assets/Bakery/docs/Bakery_manual.pdf.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/emptyDirection.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/emptyDirection.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/emptyLightingData.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/emptyLightingData.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Plane_RNM.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Plane_RNM.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Plane_SH.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Plane_SH.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Plane_baked_normal.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Plane_baked_normal.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Plane_directional.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Plane_directional.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Sphere_VertexDir.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Sphere_VertexDir.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Sphere_VertexLM.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Sphere_VertexLM.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Sphere_VertexSH.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_Sphere_VertexSH.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_example_bush_day.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_example_bush_day.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_example_bush_evening.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/LMGroup_example_bush_evening.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/AreaLight.ies create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/AreaLight.ies.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/ColoredAreaLight.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/ColoredAreaLight.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/Materials.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/Materials/01 - Default.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/Materials/01 - Default.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/Materials/Light.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/Materials/Light.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/Materials/ftlogo.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/Materials/ftlogo.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/SkyboxNormal.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/SkyboxNormal.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/StoneBeach_Normal.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/StoneBeach_Normal.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/UnityEmissive 1.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/UnityEmissive 1.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/black.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/black.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/cityblock.FBX create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/cityblock.FBX.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demoacid.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demoacid.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demoblack.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demoblack.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/democliffs.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/democliffs.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demogray.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demogray.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demogreen.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demogreen.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demolava.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demolava.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal blue.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal blue.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal green.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal green.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal red.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal red.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal white vertex SH.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal white vertex SH.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal white vertex dir.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal white vertex dir.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal white.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal white.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demonormal.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demored.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demored.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demotrain.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demotrain.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demowhite.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/demowhite.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/example_prefabs_bake_skybox.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/example_prefabs_bake_skybox.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/example_volumes_global_skybox.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/example_volumes_global_skybox.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/floor_lamp.FBX create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/floor_lamp.FBX.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/ftlogo.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/ftlogo.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/ftlogo.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/ftlogo.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/gray.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/gray.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/light.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/light.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/logolight.FBX create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/logolight.FBX.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/logolight.fbm.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/logolight.fbm/ftlogo.psd create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/logolight.fbm/ftlogo.psd.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/logolightPrefab.prefab create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/logolightPrefab.prefab.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/readmeFont.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/readmeFont.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/semiEmissive.bmp create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/semiEmissive.bmp.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/semiEmissive.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/semiEmissive.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/shiny_floor.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/shiny_floor.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/skies64.exr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/skies64.exr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sky.exr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sky.exr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/Material__47.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/Material__47.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/background.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/background.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/chain_texture.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/chain_texture.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/kust.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/kust.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/lion.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/lion.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/spnza_bricks_a_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/spnza_bricks_a_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_arch_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_arch_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_ceiling_a_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_ceiling_a_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_column_a_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_column_a_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_column_b_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_column_b_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_column_c_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_column_c_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_curtain_blue_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_curtain_blue_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_curtain_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_curtain_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_curtain_green_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_curtain_green_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_details_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_details_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_fabric_blue_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_fabric_blue_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_fabric_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_fabric_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_fabric_green_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_fabric_green_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_flagpole_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_flagpole_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_floor_a_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_floor_a_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_green.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_green.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_roof_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_roof_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_thorn_diff.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/sponza_thorn_diff.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/vase_dif.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/vase_dif.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/vase_hanging.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/vase_hanging.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/vase_plant.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/vase_plant.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/vase_round.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/Materials/vase_round.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/bush.FBX create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/bush.FBX.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/bush.fbm.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/bush.fbm/kust.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/bush.fbm/kust.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.FBX create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.FBX.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/background.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/background.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/background_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/background_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/chain_texture.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/chain_texture.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/chain_texture_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/chain_texture_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/chain_texture_mask.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/chain_texture_mask.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/lion.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/lion.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/lion_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/lion_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/spnza_bricks_a_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/spnza_bricks_a_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/spnza_bricks_a_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/spnza_bricks_a_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/spnza_bricks_a_spec.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/spnza_bricks_a_spec.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_arch_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_arch_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_ceiling_a_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_ceiling_a_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_a_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_a_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_a_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_a_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_b_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_b_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_b_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_b_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_c_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_c_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_c_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_column_c_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_curtain_blue_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_curtain_blue_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_curtain_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_curtain_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_curtain_green_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_curtain_green_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_details_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_details_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_fabric_blue_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_fabric_blue_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_fabric_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_fabric_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_fabric_green_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_fabric_green_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_flagpole_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_flagpole_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_floor_a_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_floor_a_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_roof_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_roof_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_thorn_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_thorn_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_thorn_diff.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_thorn_diff.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_thorn_mask.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/sponza_thorn_mask.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_dif.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_dif.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_hanging.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_hanging.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_plant.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_plant.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_plant_mask.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_plant_mask.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_round.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_round.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_round_bump.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza/sponza.fbm/vase_round_bump.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza_day_skybox.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza_day_skybox.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza_evening_skybox.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/sponza_evening_skybox.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/stainedglass.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/stainedglass.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/stainedglass.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/stainedglass.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/stainedglasscross.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/stainedglasscross.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/testColors.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/testColors.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/vertexLM_text.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/vertexLM_text.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/vertexLM_text.png create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/vertexLM_text.png.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/volume_test_scene.FBX create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/volume_test_scene.FBX.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/volume_test_scene2.FBX create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/volume_test_scene2.FBX.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/yellowlight.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/content/yellowlight.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_directional.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_directional.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_directional_RNM.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_directional_RNM.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_directional_SH.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_directional_SH.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_lights.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_lights.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_mixed_directional_mode.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_mixed_directional_mode.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_prefab_corner.prefab create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_prefab_corner.prefab.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_prefab_straight.prefab create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_prefab_straight.prefab.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_prefabs_assembled.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_prefabs_assembled.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_prefabs_bake.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_prefabs_bake.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_sectors.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_sectors.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_shadowmask.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_shadowmask.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_sponza_day.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_sponza_day.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_sponza_evening2.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_sponza_evening2.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_subtractive.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_subtractive.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_advanced.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_advanced.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_simple.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_simple.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_simple_shadowmask.unity create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_simple_shadowmask.unity.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L0.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L0.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1x.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1x.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1y.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1y.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1z.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1z.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_baked_normal_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_baked_normal_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_dir.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_dir.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexDir0.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexDir0.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexLM1.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexLM1.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexSH0.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexSH0.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_dir.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_dir.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_dir.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_dir.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM0.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM0.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM1.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM1.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM2.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM2.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM0.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM0.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM1.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM1.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM2.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM2.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L0.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L0.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1x.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1x.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1y.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1y.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1z.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1z.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L0.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L0.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1x.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1x.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1y.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1y.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1z.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1z.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LM0_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LM0_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LMA1_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LMA1_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_mixed_directional_mode_LM0_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_mixed_directional_mode_LM0_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LM0_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LM0_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LMA1_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LMA1_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_0_probes.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_0_probes.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_dir.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_dir.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_mask.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_mask.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_dir.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_dir.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_mask.tga create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_mask.tga.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_day_0_probes.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_day_0_probes.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_evening2_0_probes.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_evening2_0_probes.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_0_probes.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_0_probes.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LM0_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LM0_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LMA1_final.hdr create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LMA1_final.hdr.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_advanced_0.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_advanced_0.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_0.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_0.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_shadowmask_0.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_shadowmask_0.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/scripts.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeTrigger.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeTrigger.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/scripts/VolumeTestScene2.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/scripts/VolumeTestScene2.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/shaders.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/shaders/Baked_Alpha_meta.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/shaders/Baked_Alpha_meta.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/shaders/Baked_Normal_Maps_meta.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/shaders/Baked_Normal_Maps_meta.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/shaders/Baked_Normal_Maps_terrain_meta.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/examples/shaders/Baked_Normal_Maps_terrain_meta.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftBlack.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftBlack.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftCubemap2Strip.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftCubemap2Strip.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftCubemap2StripExport.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftCubemap2StripExport.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftDefaultAreaLightMat.mat create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftDefaultAreaLightMat.mat.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftDefaultGlobalStorage.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftDefaultGlobalStorage.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftDilate.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftDilate.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereDilate.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereDilate.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereProjClip.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereProjClip.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereRender.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereRender.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderBase.cginc create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderBase.cginc.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderOccluder.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderOccluder.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLight.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLight.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLightmaps.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLightmaps.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftSimpleVertexLM.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftSimpleVertexLM.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandard.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandard.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandardSpecular.shader create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandardSpecular.shader.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphHDRP.unitypackage create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphHDRP.unitypackage.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphURP.unitypackage create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphURP.unitypackage.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Editor.meta create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Editor/BakeryShaderGUI.cs create mode 100644 VRCSDK3Worlds/Assets/Bakery/shader/Editor/BakeryShaderGUI.cs.meta (limited to 'VRCSDK3Worlds/Assets/Bakery') diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs b/VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs new file mode 100644 index 00000000..6e49085f --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs @@ -0,0 +1,6 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class BakeryAlwaysRender : MonoBehaviour { +} diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs.meta b/VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs.meta new file mode 100644 index 00000000..eb1c2185 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryAlwaysRender.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e2d6e02e134906942bad71c1434453fa +timeCreated: 1561146394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs b/VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs new file mode 100644 index 00000000..be807fc3 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs @@ -0,0 +1,107 @@ +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +using System; +using System.Collections; +using System.Collections.Generic; + +[ExecuteInEditMode] +[DisallowMultipleComponent] +public class BakeryDirectLight : MonoBehaviour +{ + public Color color = Color.white; + public float intensity = 1.0f; + public float shadowSpread = 0.01f;//0.05f; + public int samples = 16; + //public uint bitmask = 1; + public int bitmask = 1; + public bool bakeToIndirect = false; + public bool shadowmask = false; + public bool shadowmaskDenoise = false; + public float indirectIntensity = 1.0f; + public Texture2D cloudShadow; + public float cloudShadowTilingX = 0.01f; + public float cloudShadowTilingY = 0.01f; + public float cloudShadowOffsetX, cloudShadowOffsetY; + + public int UID; + + public static int lightsChanged = 0; // 1 = const, 2 = full + +#if UNITY_EDITOR + void OnValidate() + { + if (lightsChanged == 0) lightsChanged = 1; + } + void OnEnable() + { + lightsChanged = 2; + } + void OnDisable() + { + lightsChanged = 2; + } + + public void Start() + { + if (gameObject.GetComponent() != null || + gameObject.GetComponent() != null || + gameObject.GetComponent() != null) + { + EditorUtility.DisplayDialog("Bakery", "Can't have more than one Bakery light on one object", "OK"); + DestroyImmediate(this); + return; + } + + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + if (UID == 0) UID = Guid.NewGuid().GetHashCode(); + ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + } + + void OnDestroy() + { + if (UID == 0) return; + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + ftUniqueIDRegistry.Deregister(UID); + } + + void Update() + { + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + if (!ftUniqueIDRegistry.Mapping.ContainsKey(UID)) ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + if (gameObject.GetInstanceID() != ftUniqueIDRegistry.GetInstanceId(UID)) + { + UID = Guid.NewGuid().GetHashCode(); + ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + } + } + + void OnDrawGizmos() + { + Gizmos.color = Color.yellow; + Gizmos.DrawSphere(transform.position, 0.1f); + + //Gizmos.DrawWireSphere(transform.position, 0.5f); + } + + void OnDrawGizmosSelected() + { + Gizmos.color = Color.yellow; + var endPoint = transform.position + transform.forward * 2; + Gizmos.DrawLine(transform.position, endPoint); + + //Gizmos.color = Color.blue; + Gizmos.DrawWireSphere(transform.position, 0.2f); + + Gizmos.DrawLine(endPoint, endPoint + (transform.position + transform.right - endPoint).normalized * 0.5f); + Gizmos.DrawLine(endPoint, endPoint + (transform.position - transform.right - endPoint).normalized * 0.5f); + Gizmos.DrawLine(endPoint, endPoint + (transform.position + transform.up - endPoint).normalized * 0.5f); + Gizmos.DrawLine(endPoint, endPoint + (transform.position - transform.up - endPoint).normalized * 0.5f); + } + +#endif +} + diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs.meta b/VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs.meta new file mode 100644 index 00000000..be67cf1e --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryDirectLight.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c74ce2158ae608549902afb4112fd042 +timeCreated: 1526382158 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs b/VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs new file mode 100644 index 00000000..77c2ed42 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs @@ -0,0 +1,83 @@ +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +using System; +using System.Collections; +using System.Collections.Generic; + +[ExecuteInEditMode] +[DisallowMultipleComponent] +public class BakeryLightMesh : MonoBehaviour +{ + public int UID; + + public Color color = Color.white; + public float intensity = 1.0f; + public Texture2D texture = null; + public float cutoff = 100; + public int samples = 256; + public int samples2 = 16; + public int bitmask = 1; + public bool selfShadow = true; + public bool bakeToIndirect = true; + public float indirectIntensity = 1.0f; + + public int lmid = -2; + + public static int lightsChanged = 0; + +#if UNITY_EDITOR + void OnValidate() + { + if (lightsChanged == 0) lightsChanged = 1; + } + + public void Start() + { + if (gameObject.GetComponent() != null || + gameObject.GetComponent() != null || + gameObject.GetComponent() != null) + { + EditorUtility.DisplayDialog("Bakery", "Can't have more than one Bakery light on one object", "OK"); + DestroyImmediate(this); + return; + } + + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + + if (UID == 0) UID = Guid.NewGuid().GetHashCode(); + ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + } + + void OnDestroy() + { + if (UID == 0) return; + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + ftUniqueIDRegistry.Deregister(UID); + } + + void Update() + { + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + if (!ftUniqueIDRegistry.Mapping.ContainsKey(UID)) ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + if (gameObject.GetInstanceID() != ftUniqueIDRegistry.GetInstanceId(UID)) + { + UID = Guid.NewGuid().GetHashCode(); + ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + } + } +#endif + + void OnDrawGizmosSelected() + { + Gizmos.color = Color.yellow; + var mr = gameObject.GetComponent(); + if (mr!=null) Gizmos.DrawWireSphere(mr.bounds.center, cutoff); + } +} + + + diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs.meta b/VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs.meta new file mode 100644 index 00000000..ee2a563d --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryLightMesh.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a28e27cacfc7e70479097f0a63c37217 +timeCreated: 1526382158 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs new file mode 100644 index 00000000..f10c8067 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs @@ -0,0 +1,179 @@ +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +public struct BakeryLightmapGroupPlain +{ + public string name; + public int resolution, id, renderMode, renderDirMode, atlasPacker; + public bool vertexBake; + public bool containsTerrains; + public bool probes; + public bool isImplicit; + public bool computeSSS; + public int sssSamples; + public float sssDensity; + public float sssR, sssG, sssB; + public float fakeShadowBias; + public bool transparentSelfShadow; + public bool flipNormal; + public string parentName; + public int sceneLodLevel; +}; + +[CreateAssetMenu(menuName = "Bakery lightmap group")] +public class BakeryLightmapGroup : ScriptableObject +{ + public enum ftLMGroupMode + { + OriginalUV = 0, + PackAtlas = 1, + Vertex = 2 + }; + + public enum RenderMode + { + FullLighting = 0, + Indirect = 1, + Shadowmask = 2, + Subtractive = 3, + AmbientOcclusionOnly = 4, + Auto = 1000 + }; + + public enum RenderDirMode + { + None = 0, + BakedNormalMaps = 1, + DominantDirection = 2, + RNM = 3, + SH = 4, + ProbeSH = 5, + Auto = 1000 + }; + + public enum AtlasPacker + { + Default = 0, + xatlas = 1, + Auto = 1000 + }; + + [SerializeField, Range(1, 8192)] + public int resolution = 512; + + [SerializeField] + public int bitmask = 1; + + [SerializeField] + public int id = -1; + + public int sortingID = -1; + + [SerializeField] + public bool isImplicit = false; + + [SerializeField] + public float area = 0.0f; + + [SerializeField] + public int totalVertexCount = 0; + + [SerializeField] + public int vertexCounter = 0; + + [SerializeField] + public int sceneLodLevel = -1; + + [SerializeField] + public string sceneName; + + [SerializeField] + public bool containsTerrains; + + [SerializeField] + public bool probes; + + [SerializeField] + public ftLMGroupMode mode = ftLMGroupMode.PackAtlas; + + [SerializeField] + public RenderMode renderMode = RenderMode.Auto; + + [SerializeField] + public RenderDirMode renderDirMode = RenderDirMode.Auto; + + [SerializeField] + public AtlasPacker atlasPacker = AtlasPacker.Auto; + + //[SerializeField] + //public bool aoIsThickness = false; + + [SerializeField] + public bool computeSSS = false; + + [SerializeField] + public int sssSamples = 16; + + [SerializeField] + public float sssDensity = 10; + + [SerializeField] + public Color sssColor = Color.white; + + [SerializeField] + public float sssScale = 1.0f; + + [SerializeField] + public float fakeShadowBias = 0.0f; + + [SerializeField] + public bool transparentSelfShadow = false; + + [SerializeField] + public bool flipNormal = false; + + [SerializeField] + public string parentName; + + [SerializeField] + public string overridePath = ""; + + [SerializeField] + public bool fixPos3D = false; + + [SerializeField] + public Vector3 voxelSize = Vector3.one; + + public int passedFilter; + + public BakeryLightmapGroupPlain GetPlainStruct() + { + BakeryLightmapGroupPlain str; + str.name = name; + str.id = id; + str.resolution = resolution; + str.vertexBake = mode == ftLMGroupMode.Vertex; + str.isImplicit = isImplicit; + str.renderMode = (int)renderMode; + str.renderDirMode = (int)renderDirMode; + str.atlasPacker = (int)atlasPacker; + str.computeSSS = computeSSS; + str.sssSamples = sssSamples; + str.sssDensity = sssDensity; + str.sssR = sssColor.r * sssScale; + str.sssG = sssColor.g * sssScale; + str.sssB = sssColor.b * sssScale; + str.containsTerrains = containsTerrains; + str.probes = probes; + str.fakeShadowBias = fakeShadowBias; + str.transparentSelfShadow = transparentSelfShadow; + str.flipNormal = flipNormal; + str.parentName = parentName; + str.sceneLodLevel = sceneLodLevel; + return str; + } +} + diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs.meta b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs.meta new file mode 100644 index 00000000..b7e5693b --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroup.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ec0b4dd729a12d046982652f834580a2 +timeCreated: 1526381368 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroupSelector.cs b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroupSelector.cs new file mode 100644 index 00000000..24c35c6b --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroupSelector.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +public class BakeryLightmapGroupSelector : MonoBehaviour +{ + public Object lmgroupAsset; + public bool instanceResolutionOverride = false; + public int instanceResolution = 256; +} + diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroupSelector.cs.meta b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroupSelector.cs.meta new file mode 100644 index 00000000..3a1cb080 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmapGroupSelector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0a747f33c53bd3042af4ac90fc2a1fd3 +timeCreated: 1526383988 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/BakeryLightmappedPrefab.cs b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmappedPrefab.cs new file mode 100644 index 00000000..9359b86c --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakeryLightmappedPrefab.cs @@ -0,0 +1,130 @@ +#if UNITY_EDITOR +using UnityEditor; +#endif +using UnityEngine; + +// Disable 'obsolete' warnings +#pragma warning disable 0618 + +[DisallowMultipleComponent] +public class BakeryLightmappedPrefab : MonoBehaviour +{ +#if UNITY_EDITOR + public bool enableBaking = true; + public string errorMessage; + + public bool IsValid() + { + errorMessage = ""; + + if (!enableBaking) + { + return false; + } + + bool isPartOfPrefab = PrefabUtility.GetPrefabType(gameObject) == PrefabType.PrefabInstance; + if (!isPartOfPrefab) + { + errorMessage = "this GameObject is not a prefab"; + return false; + } + + bool prefabIsRoot = PrefabUtility.FindPrefabRoot(gameObject) == gameObject; + if (!prefabIsRoot) + { + errorMessage = "this GameObject is not a root prefab object"; + return false; + } + + var transforms = GetComponentsInChildren(); + for(int i=0; i= 0) continue; + if (mods[i].target != null && mods[i].target.name == gameObject.name) + { + if (mods[i].propertyPath.Contains("m_LocalPosition")) continue; + if (mods[i].propertyPath.Contains("m_LocalRotation")) continue; + if (mods[i].propertyPath.Contains("m_LocalScale")) continue; + } + + errorMessage = "prefab contains unapplied data (" + mods[i].target+"."+mods[i].propertyPath + ")"; + return false; + } + } + + var comps = gameObject.GetComponents(); + var comps2 = gameObject.GetComponentsInChildren(); + + for(int t=0; t<2; t++) + { + var comps3 = t == 0 ? comps : comps2; + for(int c=0; c() != null || + gameObject.GetComponent() != null || + gameObject.GetComponent() != null) + { + EditorUtility.DisplayDialog("Bakery", "Can't have more than one Bakery light on one object", "OK"); + DestroyImmediate(this); + return; + } + + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + if (UID == 0) UID = Guid.NewGuid().GetHashCode(); + ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + } + + void OnDestroy() + { + if (UID == 0) return; + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + ftUniqueIDRegistry.Deregister(UID); + } + + void Update() + { + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + if (!ftUniqueIDRegistry.Mapping.ContainsKey(UID)) ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + if (gameObject.GetInstanceID() != ftUniqueIDRegistry.GetInstanceId(UID)) + { + UID = Guid.NewGuid().GetHashCode(); + ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + } + } + + void OnDrawGizmos() + { + Gizmos.color = color; + var curCam = Camera.current; + if (curCam != null) + { + screenRadius = Mathf.Min((transform.position - curCam.transform.position).magnitude * GIZMO_SCALE, GIZMO_MAXSIZE); + } + Gizmos.DrawSphere(transform.position, screenRadius); + } + + void DrawArrow(Vector3 a, Vector3 b) + { + //const float len = 0.125f; + + b = a + b * (shadowSpread + 0.05f); + Gizmos.DrawLine(a, b); + } + + void OnDrawGizmosSelected() + { + Gizmos.color = color;//Color.yellow; + Gizmos.DrawWireSphere(transform.position, shadowSpread); + + Gizmos.color = new Color(color.r, color.g, color.b, 0.25f);//Color.gray; + if (projMode != ftLightProjectionMode.Cookie && projMode != ftLightProjectionMode.Cone) Gizmos.DrawWireSphere(transform.position, cutoff); + + if (projMode != 0) + { + Gizmos.color = color;//Color.yellow; + Vector3 endPoint; + if (projMode == ftLightProjectionMode.Cookie || projMode == ftLightProjectionMode.Cone) + { + endPoint = transform.forward * 2; + Gizmos.DrawRay(transform.position, endPoint); + + float angle2 = (180 - angle) * Mathf.Deg2Rad * 0.5f; + //float x = Mathf.Cos(angle2); + //float radius = x * cutoff; + + float x = 1 / Mathf.Sin(angle2); + x = Mathf.Sqrt(x * x - 1); + float radius = x * cutoff; + + const int segments = 16; + for(int i=0; i tforms = new List(); + public List cpoints = new List(); + +#if UNITY_EDITOR + public List previewDisabledRenderers; + public List previewTempObjects; + public bool previewEnabled = false; +#endif + + void OnDrawGizmosSelected() + { + Gizmos.color = Color.green; + for(int i=0; i meshes; + + [SerializeField] + public List positions; + + [SerializeField] + public List textures; + + public List outsideRenderers; + public bool write = false; + +#endif +} + diff --git a/VRCSDK3Worlds/Assets/Bakery/BakerySectorCapture.cs.meta b/VRCSDK3Worlds/Assets/Bakery/BakerySectorCapture.cs.meta new file mode 100644 index 00000000..dbf6e0e2 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakerySectorCapture.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6f1a86d43dd48934fb3a04c088307681 +timeCreated: 1526381368 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/BakerySkyLight.cs b/VRCSDK3Worlds/Assets/Bakery/BakerySkyLight.cs new file mode 100644 index 00000000..fddd6cbb --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/BakerySkyLight.cs @@ -0,0 +1,120 @@ +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +using System; +using System.Collections; +using System.Collections.Generic; + +[ExecuteInEditMode] +[DisallowMultipleComponent] +public class BakerySkyLight : MonoBehaviour +{ + public string texName = "sky.dds"; + public Color color = Color.white; + public float intensity = 1.0f; + public int samples = 32; + public bool hemispherical = false; + public int bitmask = 1; + public bool bakeToIndirect = true; + public float indirectIntensity = 1.0f; + public bool tangentSH = false; + public bool correctRotation = false; + + public Cubemap cubemap; + + public int UID; + + public static int lightsChanged = 0; // 1 = const, 2 = full + +#if UNITY_EDITOR + void OnValidate() + { + if (lightsChanged == 0) lightsChanged = 1; + } + void OnEnable() + { + lightsChanged = 2; + } + void OnDisable() + { + lightsChanged = 2; + } + + public void Start() + { + if (gameObject.GetComponent() != null || + gameObject.GetComponent() != null || + gameObject.GetComponent() != null) + { + EditorUtility.DisplayDialog("Bakery", "Can't have more than one Bakery light on one object", "OK"); + DestroyImmediate(this); + return; + } + + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + if (UID == 0) UID = Guid.NewGuid().GetHashCode(); + ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + } + + void OnDestroy() + { + if (UID == 0) return; + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + ftUniqueIDRegistry.Deregister(UID); + } + + void Update() + { + if (EditorApplication.isPlayingOrWillChangePlaymode) return; + if (!ftUniqueIDRegistry.Mapping.ContainsKey(UID)) ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + if (gameObject.GetInstanceID() != ftUniqueIDRegistry.GetInstanceId(UID)) + { + UID = Guid.NewGuid().GetHashCode(); + ftUniqueIDRegistry.Register(UID, gameObject.GetInstanceID()); + } + } + + void OnDrawGizmos() + { + Gizmos.color = new Color(49/255.0f, 91/255.0f, 191/255.0f); + Gizmos.DrawSphere(transform.position, 0.1f); + } + + void OnDrawGizmosSelected() + { + Gizmos.color = new Color(49/255.0f, 91/255.0f, 191/255.0f); + Vector3 origin = transform.position; + const int segments = 16; + for(int i=0; i + Scene shadow is real-time, but + + Scene -> Train shadow is baked into volume. + + + Press + Play to see it in motion. + + + (bake it first)' + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 4 + m_FontSize: 0 + m_FontStyle: 0 + m_RichText: 0 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1755572501 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755572499} + 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: 10100, guid: 0000000000000000e000000000000000, type: 0} + 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!4 &1755572502 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755572499} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 5.24, y: 14.7, z: -28.1} + m_LocalScale: {x: 1.2797692, y: 1.2797688, z: 1.2797688} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!1 &2058759529 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2058759534} + - component: {fileID: 2058759533} + - component: {fileID: 2058759531} + - component: {fileID: 2058759530} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2058759530 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058759529} + m_Enabled: 1 +--- !u!124 &2058759531 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058759529} + m_Enabled: 1 +--- !u!20 &2058759533 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058759529} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + 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.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2058759534 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058759529} + m_LocalRotation: {x: -0.10722363, y: 0.8548478, z: -0.19566, w: -0.4684609} + m_LocalPosition: {x: 35.694813, y: 25.856583, z: 36.533764} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_simple_shadowmask.unity.meta b/VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_simple_shadowmask.unity.meta new file mode 100644 index 00000000..9574473a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/example_volumes_simple_shadowmask.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d4c1b419571ced4fb22590daa0a4df4 +timeCreated: 1605874505 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps.meta new file mode 100644 index 00000000..e60f5e3f --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a1e3a8def939d8d4dba9e54916330ef2 +folderAsset: yes +timeCreated: 1622807246 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr new file mode 100644 index 00000000..af32daac Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr.meta new file mode 100644 index 00000000..923a4692 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM0.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 86d8396daec28924c86305104af65700 +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr new file mode 100644 index 00000000..b7e5baaf Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr.meta new file mode 100644 index 00000000..2b7fda07 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM1.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: ab8844fa5f817a349ba780e291a11bff +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr new file mode 100644 index 00000000..ec4de8bc Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr.meta new file mode 100644 index 00000000..12e72da2 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_RNM_RNM2.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 3caf77d131f85c549828ba91e93e2536 +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L0.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L0.hdr new file mode 100644 index 00000000..4aba1c28 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L0.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L0.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L0.hdr.meta new file mode 100644 index 00000000..ba1b7d12 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L0.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: dacd01d1b375b924db94a6edaffa61d6 +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1x.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1x.tga new file mode 100644 index 00000000..4baa2def Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1x.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1x.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1x.tga.meta new file mode 100644 index 00000000..b4fca554 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1x.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 61ada9a487270c54f9a39b10d5625a2d +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1y.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1y.tga new file mode 100644 index 00000000..29e643dc Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1y.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1y.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1y.tga.meta new file mode 100644 index 00000000..7cadd246 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1y.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: a90c09ec844e8a5419de078ea3c8340e +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1z.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1z.tga new file mode 100644 index 00000000..7940483f Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1z.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1z.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1z.tga.meta new file mode 100644 index 00000000..55c92486 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_SH_L1z.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 283e4ac691381b542a0492f9af55743e +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_baked_normal_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_baked_normal_final.hdr new file mode 100644 index 00000000..a2df0ae0 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_baked_normal_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_baked_normal_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_baked_normal_final.hdr.meta new file mode 100644 index 00000000..1ac7c884 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_baked_normal_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 775379b32f78f954ba8062f829ae2572 +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_dir.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_dir.tga new file mode 100644 index 00000000..5add20a2 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_dir.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_dir.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_dir.tga.meta new file mode 100644 index 00000000..d9d1b928 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_dir.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: f561cf2fcb98a6e4ebdc9a6fd80c6ef1 +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_final.hdr new file mode 100644 index 00000000..95673281 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_final.hdr.meta new file mode 100644 index 00000000..c88d1e5f --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Plane_directional_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 525305ab7b71c2943aa0402f6c9d4ad0 +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexDir0.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexDir0.asset new file mode 100644 index 00000000..6e2c0e7c --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexDir0.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: LMGroup_Sphere_VertexDir0 + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 0 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 0 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + 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: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: + m_VertexData: + serializedVersion: 3 + m_VertexCount: 515 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 2 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 16 + 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 + m_DataSize: 12360 + _typelessdata: 145e933e145e93be145e93be89a1fb1500000000f670293f52289e3e52289ebe1ef575be8ba3fd1500000000f970213fae777e3e4709b5beae777ebe7b91f51400000000f667263f1ef5753e52289ebe52289ebe8197f91400000000f06c373f3313333ec23dc5becd0487be6e85fd1200000000eb5c383f99392e3e66a6a9be66a6a9be788cf31300000000ea69413f47c1b83d52a8cfbec20d8dbe5b6ff51100000000d54d4f3ff558b43d14a6b1be14a6b1be6a7ffb1100000000d661573fc2a59bb24721d3bef6708fbe495cf01000000000b345633f006065b3cd7cb4becd7cb4be6172fd0f00000000b75e6d3fcd04873ec23dc5be331333be7e92f91400000000f9671b3f66a6a93e66a6a9be99392ebe8aa0f91500000000fb721a3f855b3c3e14bed9be855b3cbe6377f31300000000ed502b3f1e8dc13df588e6be859b44be495ff31200000000cf35423faeef27b3aec7eabecd4c48be384bf61000000000a024523fc20d8d3e52a8cfbe47c1b8bd758af61400000000fb620a3f14a6b13e14a6b1bef558b4bd879df61500000000fd720f3f859b443ef588e6be1e8dc1bd6477fc1300000000f148103fb83eca3d0a07f5beb83ecabd4356fb1200000000cb1d1d3f47294bb299f9f9be706dcebd263bfd10000000009a0d323ff6708f3e4721d3be0ad723337a8df91400000000fc65033fcd7cb43ecd7cb4be0ad72333879cf31500000000fe73013fcd4c483eaec7eabec21da7326072f91300000000f249023f706dce3d99f9f9be0ad723b23e50fb1100000000cd1a093f706dce3d99f9f9be0ad723b23f51fc1100000000cf1c073f00000000000000bf00000000182cef0f000000009804163f00000000000000bf00000000182cef0f000000009e05123fb83ecabd0a07f5beb83ecabd2830f10e000000007616473f1e8dc1bdf588e6be859b44be3a47fb0e000000008731643f859b44bef588e6be1e8dc1bd4038f60c000000004d30563f855b3cbe14bed9be855b3cbe4a46f10d00000000633f693fc20d8dbe52a8cfbe47c1b8bd5b40fe0b000000003242503fcd0487bec23dc5be331333be5f49f30c000000004950693f14a6b1be14a6b1bef558b4bd7446f60b00000000215c4e3f66a6a9be66a6a9be99392ebe7d52fe0b000000003566643fae777ebe4709b5beae777ebe6a58fe0c000000005e5d753f52289ebe52289ebe1ef575be7a58f20c000000004b6f723f1ef575be52289ebe52289ebe705eef0d00000000676f7b3f145e93be145e93be145e93be8260f80c000000005973783fcd7cb4becd7cb4be000000006e3ef30b000000000d56253ff6708fbe4721d3be0ad7a3325536f60b000000001a3a213f99392ebe66a6a9be66a6a9be6d66fb0d000000007c6a7d3f331333bec23dc5becd0487be5956f90d000000007452763fcd4c48beaec7eabe0ab7d1af3d2bfa0b00000000301f1b3ff558b4bd14a6b1be14a6b1be5d65f80e0000000091617a3f47c1b8bd52a8cfbec20d8dbe4b57fb0e000000008948723fc26dcebd99f9f9be000000002123f80c000000006105163f00000000000000bf00000000182cef0f000000009804173f145e93be145e93be145e933e5c43fd0c0000000030aaaa3d52289ebe52289ebe1ef5753e5b3ff60c00000000d4201d3eae777ebe4709b5beae777e3e4e3bee0d00000000a0d2e93d1ef575be52289ebe52289e3e5141f40d00000000d8528a3d331333bec23dc5becd04873e3d3cef0e00000000c093c93d99392ebe66a6a9be66a6a93e4143f40e000000001068543d47c1b8bd52a8cfbec20d8d3e313def0f000000005084e13df558b4bd14a6b1be14a6b13e3a48f60f00000000c8248a3dcccc4c334721d3bef6708f3e3349f61000000000a0ce043e8fc27533cd7cb4becd7cb43e3f53f71000000000e055e23dcd0487bec23dc5be3313333e4f38f60c00000000ccc4703e66a6a9be66a6a9be99392e3e6239eb0c000000003090963e855b3cbe14bed9be855b3c3e3835f20d000000009c91243e1e8dc1bdf588e6be859b443e2b37f60e000000001882283e5208acb2aec7eabecd4c483e283cef10000000009c8a443ec20d8dbe52a8cfbe47c1b83d5336fe0b000000003a66c63e14a6b1be14a6b1bef558b43d683bf80b000000001896d63e859b44bef588e6be1e8dc13d382bee0c000000007c36a43eb83ecabd0a07f5beb83eca3d262bfc0c00000000d4208a3e5280b7b299f9f9be706dce3d2035f90e0000000036238c3ef6708fbe4721d3be0ad7a3325535f60b0000000019381d3fcd7cb4becd7cb4be00000000713df20b000000000c56253fcd4c48beaec7eabe0ab7d1af3f2bf90b000000002f22233fc26dcebd99f9f9be000000002223f90c000000005f071d3f00000000000000bf00000000182cee0f000000009c04123f00000000000000bf00000000182cef0f000000009804163fb83eca3d0a07f5beb83eca3d3c4df11100000000ae55b43e1e8dc13df588e6be859b443e4255f81100000000a467863e859b443ef588e6be1e8dc13d6070f21300000000eaa1e23e855b3c3e14bed9be855b3c3e5c6ef31300000000e0aba83ec20d8d3e52a8cfbe47c1b83d7789f61400000000f8cfe63ecd04873ec23dc5be3313333e7486f21400000000f2d5c43e14a6b13e14a6b1bef558b43d8b9ffe1400000000fcebea3e66a6a93e66a6a9be99392e3e7f94f51500000000f8ebd03eae777e3e4709b5beae777e3e7186f71400000000eed9b03e52289e3e52289ebe1ef5753e7d91f41500000000f6edc43e1ef5753e52289ebe52289e3e7388f81400000000eae3a23e145e933e145e93be145e933e7e94fe1400000000f0edb03e99392e3e66a6a9be66a6a93e6177f71300000000dacb863e3313333ec23dc5becd04873e5d73fe1200000000d2b5883ef558b43d14a6b1be14a6b13e4d63f112000000005467253e47c1b83d52a8cfbec20d8d3e4960fe110000000058274d3e00000000000000bf00000000182cef0f000000009d04113f706dce3d99f9f9be0ad723b23f51fc1100000000cb1a0f3f3de2933eae67933e3de293bee3ecf61500000000b3f01c3f00b0763ef6409e3eebb19ebeeff4f7160000000079fa213fae377f3e1e2db53eae377fbef1f4f2170000000073fa1d3febb19e3ef6409e3e00b076bedee9f31500000000b9ee173f5c7f873e3d72c53ee1aa33bef3f7f417000000007afc1a3feb39aa3e85c3a93e5ccf2ebee5f2fc1400000000c5e8143f148e8d3e99e9cf3e3d62b9bdf0f5f317000000007efc173fc23db23eaec7b13e33f3b4bde0effa1400000000d3de0f3fe1f28f3e8f62d33e5c8fc2b3f4fafb160000000085fc153f0a17b53ea4a0b43e8fc2f5b3d7e8f71400000000e0d1093fe1aa333e3d72c53e5c7f87befaf9f0190000000056f41d3f5ccf2e3e85c3a93eeb39aabef7f5f0180000000056f3203f0aff3c3e0000da3e0aff3cbef6f5eb1a0000000057f51b3f3d42453ea4d0e63e9931c2bdf5f5ea1a0000000057f5193f7bfc483e5c0feb3eb81e85b3fafbf419000000005bf7173f3d62b93d99e9cf3e148e8dbefdf8ea1b0000000044ec1c3f33f3b43daec7b13ec23db2befbf6eb1a0000000044eb1f3f9931c23da4d0e63e3d4245befaf5e61c0000000044ed193f66eeca3d9959f53e66eecabdfbf6e71c0000000046ee183fa420cf3d854bfa3e703d0ab3f7f3e61c0000000046ef173fb81e05b48f62d33ee1f28fbefcf4e21d000000003be71c3fc2f528b4a4a0b43e0a17b5befbf2e41c000000003be61f3feb51b8b35c0feb3e7bfc48bef9f1de1e000000003ae71a3fa4703db3854bfa3e5220cfbdfbf3e01e000000003be7193f33b3a3310000003f0ad7a3b1f8f0de1e000000003ae8163f33b3a3310000003f0ad7a3b1f8f0de1e000000003ae8163f66eeca3d9959f53e66eeca3df7f4ea1b0000000047f0143f3d42453ea4d0e63e9931c23dfbfcf918000000005ef8153f9931c23da4d0e63e3d42453efcf9f5190000000046f0123f0aff3c3e0000da3e0aff3c3ef5f8fc17000000005ff9123f3d62b93d99e9cf3e148e8d3ef0eff4180000000048f10f3fe1aa333e3d72c53e5c7f873ee0e4f4170000000069fb0f3f33f3b43daec7b13ec23db23ee4e5f916000000004cf30a3f5ccf2e3e85c3a93eeb39aa3ecfd8fa15000000007dfe083fae377f3e1e2db53eae377f3ed1ddfa1500000000adf60a3f00b0763ef6409e3eebb19e3eb4c6f81400000000aeb7f33eebb19e3ef6409e3e00b0763eadc7fc1300000000ee53e53e3de2933eae67933e3de2933ea0bbfa1300000000f23bd53e8fc27533a4a0b43e0a17b53ef5f0fa17000000003bea0b3fcccc4c338f62d33ee1f28f3efdf7f619000000003bea0e3feb39aa3e85c3a93e5ccf2e3ebfd5fa1300000000e075f73e5c7f873e3d72c53ee1aa333ed9e3f4160000000099fb0d3fb81e05335c0feb3e7bfc483efdf6ec1b000000003ae8123fc23db23eaec7b13e33f3b43dc9dcf51400000000e8c7023f148e8d3e99e9cf3e3d62b93de9f2f9160000000090fc133f33f3b4bdaec7b13ec23db23ef8edee190000000034e60c3f3d62b9bd99e9cf3e148e8d3efcf1ea1b0000000034e50f3f5ccf2ebe85c3a93eeb39aa3ef6e8e41b0000000032e30e3fe1aa33be3d72c53e5c7f873ef8eade1d0000000031e3103f00b076bef6409e3eebb19e3ef9e9e11c0000000030e20f3fae377fbe1e2db53eae377f3ef7e8d91e0000000030e2113f3de293beae67933e3de2933ee3c0fd0e0000000066caeb3eebb19ebef6409e3e00b0763ee6b6fc0d0000000062c6e93e5c7f87be3d72c53ee1aa333efeeddc1f0000000030e1123feb39aabe85c3a93e5ccf2e3ee9aaf90c0000000066caf33e148e8dbe99e9cf3e3d62b93df9e7d3210000000030e1143fc23db2beaec7b13e33f3b43df3b2f30c0000000032e4093fe1f28fbe8f62d33e00000000feedd7210000000030e1153f0a17b5bea4a0b43e00000000fdc7e90e0000000031e1173f0aff3cbe0000da3e0aff3c3efef0df1e0000000031e2123f3d4245bea4d0e63e9931c23df9ebd8200000000032e2133f7bfc48be5c0feb3e00000000f8e9d4210000000032e2153f9931c2bda4d0e63e3d42453efbf0e21d0000000034e4113f66eecabd9959f53e66eeca3dfef3e11e0000000034e4133f5220cfbd854bfa3e00000000fdf1dc1f0000000034e4163fb81e8532854bfa3e5220cf3df8f0e11d000000003ae8143f33b3a3310000003f0ad7a3b1f8f0de1e000000003ae8163f33b3a3310000003f0ad7a3b1f8f0de1e000000003ae7163f33b3a3310000003f0ad7a3b1f8efde1e000000003ae8163febb19ebef6409e3e00b076bef7e2d41b0000000031df1c3fae377fbe1e2db53eae377fbef9e8d3210000000031e0193f00b076bef6409e3eebb19ebef9e8d5200000000032e01c3f3de293beae67933e3de293befbe8d71d0000000030df1c3f5ccf2ebe85c3a93eeb39aabefaebd81f0000000033e11c3fe1aa33be3d72c53e5c7f87befbecd8200000000032e11a3f33f3b4bdaec7b13ec23db2bef7ebda1e0000000035e21e3feb61b9bd99e9cf3e148e8dbef9edda1f0000000035e21c3feb39aabe85c3a93e5ccf2ebefae0d7170000000031e01c3f5c7f87be3d72c53ee1aa33befeedd6210000000031e1183f0aff3cbe0000da3e0aff3cbef8ead5210000000033e2193f9931c2bda4d0e63e3d4245befef2dd1f0000000034e3193fc23db2beaec7b13e33f3b4bdfdd7df120000000031e01c3f148e8dbe99e9cf3e3d62b9bdf8e7d1220000000031e1163f3d4245bea4d0e63e9931c2bdfaebd5210000000032e2163f66eecabd9959f53e66eecabdf8ecd7200000000034e3183f0a17b5bea4a0b43e00000000f0bddb0f0000000032e1183fe1f28fbe8f62d33e00000000feedd7210000000030e1153f7bfc48be5c0feb3e00000000f8ead4210000000032e2153f5220cfbd854bfa3e00000000fdf1dd1f0000000034e4163f33b3a3310000003f0ad7a3b1f8f0de1e000000003ae8163f145e933e145e93be145e93be869ef91500000000f66e283f52289e3e1ef575be52289ebe8ca3f71600000000f6712a3f4709b53eae777ebeae777ebe93a9f61600000000fa77203f52289e3e52289ebe1ef575be879ffb1500000000f96f223fc23dc53ecd0487be331333be94a9f41600000000fc79173f66a6a93e66a6a9be99392ebe8ba1f81500000000fb721a3f52a8cf3ec20d8dbe47c1b8bd9ab0fc1500000000fe7c0c3f14a6b13e14a6b1bef558b4bd879cf41500000000fd720a3f4721d33ef6708fbe0ad723b397adf71500000000fe7d023fcd7cb43ecd7cb4be0ad72333899df51500000000fe74013fc23dc53e851333becd0487be9db3f81600000000fb7b1b3f66a6a93e99392ebe66a6a9be93acf91600000000f775293f14bed93e855b3cbe855b3cbe9cb4f71600000000fd7d153ff588e63e859b44be1e8dc1bda0b6f61600000000fe810b3faec7ea3ecd4c48bea4a8a4b39fb6f61600000000fe82003f52a8cf3e47c1b8bdc20d8dbea2baf91600000000fc7f183f14a6b13ef558b4bd14a6b1be9fb7fb1500000000f87c263ff588e63e1e8dc1bd859b44bea1bbf61600000000fd83153f0a07f53eb83ecabdb83ecabda4befb1600000000fe830b3f99f9f93ec26dcebd0ad723b3a5bdf81600000000fe86023fb8d6d33e8fa467bae1f28fbeabc3fa1500000000fd86133f0a17b53e85a467ba0a17b5bea2bbf81500000000fa81203fa370eb3e82a467ba7bfc48beb1cafe1500000000fd8a103f7bb4fa3ecea467ba5220cfbdb0c8f91500000000fd8d073f0000003f33b3a3b1000030b4b1c9fa1500000000fc1bff3e0a07f53eb83ecabdb83eca3da3bcfc1600000000fc0bf53ef588e63e859b44be1e8dc13d99aff31600000000fc05f13ef588e63e1e8dc1bd859b443e9fb8fe1600000000fc0be33e14bed93e855b3cbe855b3c3e96aefb1600000000fc03e33e52a8cf3e47c1b8bdc20d8d3e94aefe1600000000f807cb3ec23dc53e851333becd04873e91a9fd1600000000f8fdca3e14a6b13ef558b4bd14a6b13e86a0fa1600000000f201b33e66a6a93e99392ebe66a6a93e8499f41600000000f2f9b43e4709b53eae777ebeae777e3e879df31600000000f6f9c63e52289e3e1ef575be52289e3e8096f91500000000f2f7b43e52289e3e52289ebe1ef5753e8196f51500000000f4f3be3e145e933e145e93be145e933e788ef31500000000f2edb83ecd04b53e999909aecd04b53e8ea5f51600000000f20bb93e33dbd43e14aec72deb398e3e99b1f61600000000f815d13e66a6a93e66a6a9be99392e3e849bfd1400000000f8e9d43ec23dc53ecd0487be3313333e8da2f41600000000faf9d83e3383ec3e9999192e0aef433ea4befe1500000000fa19dd3e14a6b13e14a6b1bef558b43d899efd1400000000fce9fa3e52a8cf3ec20d8dbe47c1b83d91a6f51600000000fcf7ec3ec23db23eb836b33dc23db23e95affc1500000000f41dbf3e145ed03ea4a8b73d148e8d3ea4bcfe1500000000f821d73eeb39aa3e52f82d3eeb39aa3e93b0fa1400000000f22dc53e7be4c53e00d8323e5c7f873e9eb7f21500000000f62ddb3eebb19e3e00f0753eebb19e3e9fbafd1300000000f433cf3eeba1b53eae777e3eae377f3ea4bef61400000000f635e13e3de2933eae67933e3de2933ea1bbf81300000000f23bd93eebb19e3ef6409e3e00b0763ea9c3f61300000000ee51e93e7be4c53eeb09873ee1aa333eb6d0fe1300000000f43ded3eeb39aa3e85c3a93e5ccf2e3ec0d7fe1300000000e073f73e145ed03e1f158d3e3d62b93db3cff71300000000f43ff73ec23db23eaec7b13e33f3b43dc7dbf51400000000e7c9023fb8d6d33e47798f3e295c0fb4bcd7fa1300000000fa9f013f0a17b53ea4a0b43e8fc2f5b3d7e8f71400000000dfd20a3fb85eda3e0a273c3e0aff3c3eacc3f41500000000f82ded3eeb31e73e3d72443e9931c23db7d0f91400000000f831f73ea370eb3e6626483e0ad723b4b8d3f81400000000f833ff3eeb31e73eeb79c03d3d42453eaac2f91500000000f825e93eccbcf53ef530c93d66eeca3db1c8f61500000000fa27f73e7bb4fa3e5268cd3d7b142eb4b5cef71500000000fd93003f7b14fb3e0000002dc2c5c73da5bef51600000000fc19ed3e145ed03e1f158d3eeb61b9bdc0d9f71300000000fa9e073fc23db23eaec7b13e33f3b4bddfeefa1400000000d3de0f3f7be4c53eeb09873ee1aa33bebcd5f11300000000fa9e083feb39aa3e85c3a93e5ccf2ebee6f2fb1400000000c6e6153feba1b53eae777e3eae377fbec4daf81300000000f9a1103febb19e3ef6409e3e00b076bedfeaf31500000000baed193febb19e3e00f0753eebb19ebecddcf31400000000e6c6183f3de2933eae67933e3de293bee1ebf51500000000aff11c3feb39aa3e52f82d3eeb39aabeb5ccf51300000000fa94183f7be4c53e00d8323e5c7f87bebad2f91300000000fb970f3fc23db23eb836b33dc23db2beb4cbfd1300000000fa8b1c3f145ed03ea4a8b73d148e8dbeb5ccf91400000000fc8f143fb85eda3e0a273c3e0aff3cbec1d9fd1300000000fc97073feb31e73eeb79c03d3d4245bebad2fc1400000000fd910a3feb31e73e3d72443e9931c2bdc3dcfe1300000000fc99063fccbcf53ef530c93d66eecabdb2caf31500000000fd93063f145e933e145e93be145e933e768ef31500000000f0ebae3e52289e3e1ef575be52289e3e8098fd1500000000f2f1b43eae777e3eae777ebe4709b53e7289f61500000000e2eb8e3e1ef5753e52289ebe52289e3e7387f81400000000eae3a03e8513333ecd0487bec23dc53e627af41400000000a0bb653e99392e3e66a6a9be66a6a93e6177f61300000000aca37d3ef5c0b83dc20d8dbe52a8cf3e546bf51200000000649f213ef558b43d14a6b1be14a6b13e5066fd11000000004c5b253e295c8f33f6708fbe4721d33e495ffe100000000018f6c23d8fc27533cd7cb4becd7cb43e4058fe1000000000f875e23dcd04873e851333bec23dc53e758ffc1500000000e8ef9a3e66a6a93e99392ebe66a6a93e879ffe1600000000f2f7b43e855b3c3e855b3cbe14bed93e6a83fa1400000000b0cb793e1e8dc13d859b44bef588e63e5c76fe120000000068c31d3e3d9aa233cd4c48beaec7ea3e4960f41100000000e8758b3dc20d8d3e47c1b8bd52a8cf3e7992f41600000000e8fb983e14a6b13ef558b4bd14a6b13e8ba3fa1600000000f007b13e859b443e1e8dc1bdf588e63e6f89fc1400000000a4e3653eb83eca3db83ecabd0a07f53e5d77f7130000000074cb293e429eac33c26dcebd99f9f93e5166f7110000000008a6933deb398e3e703d0aae33dbd43e849ffd1500000000ec07a33ecd04b53e999909aecd04b53e8ea7f81600000000f40dbf3e0aef433e7b140e2d3383ec3e748efb1400000000b4037e3ec2c5c73d5c8f1eae7b14fb3e6179f313000000006cf31d3eaeffaf337bd823b20000003f576df7110000000038deb33db83ecabdb83ecabd0a07f53e525cfc0f000000004014af3c1e8dc1bd859b44bef588e63e4653ef100000000060b4cd3c859b44be1e8dc1bdf588e63e5e52f60e000000000084033b855b3cbe855b3cbe14bed93e544cf40e0000000000c4b83bc20d8dbe47c1b8bd52a8cf3e6f4ef10d000000008058613ccd0487be331333bec23dc53e6649f20d00000000c0591d3c14a6b1bef558b4bd14a6b13e884bf00c00000000b091cc3d66a6a9be99392ebe66a6a93e7547f50c00000000e0d19b3dae777ebeae777ebe4709b53e5746f50d00000000004dac3c52289ebe1ef575be52289e3e6f44f70c00000000f031a33d1ef575be52289ebe52289e3e5141f40d00000000d862823d145e93be145e93be145e933e6442fa0c0000000028b2aa3dcd04b5be9999092ecd04b53e9951ef0c00000000a0f9ec3deb398ebe703d0a2e33dbd43e7d56f30d00000000404cd33c99392ebe66a6a9be66a6a93e4143f40e000000005078543d331333becd0487bec23dc53e4849f60e000000004091ab3c0aef43be7b140ead3383ec3e695af80e0000000000860c3bf558b4bd14a6b1be14a6b13e3a47f50f000000009089743df5c0b8bdc20d8dbe52a8cf3e414ef80f00000000f0e9053dc23db2beb836b33dc23db23ea759ef0c00000000e0cc0e3e148e8dbea4a8b73d145ed03e895cf00d0000000090955a3deb39aabe52f82d3eeb39aa3eab64f00c00000000e4f0223e5c7f87be52d8323e7be4c53e8c62ec0d00000000b0dab53debb19ebe00f0753eebb19e3eac6cf10c000000001435373eae377fbeae777e3eeba1b53edec7f0110000000064cafb3e3de293beae67933e3de2933ee6c1fb0e0000000064c8ef3e00b076bef6409e3eebb19e3ef9e9e01c0000000030e20f3fe1aa33beeb09873e7be4c53efaecef180000000031e30c3f5ccf2ebe85c3a93eeb39aa3ef6e8e31b0000000032e30e3f3d62b9bd1f158d3e145ed03ef7edfb160000000035e6083f33f3b4bdaec7b13ec23db23ef8eef1190000000035e60c3f295c8f3347798f3eb8d6d33ed9d7f316000000003fed043f8fc27533a4a0b43e0a17b53ef6f0fb17000000003bea0b3f0aff3cbe0a273c3eb85eda3edccef9120000000066cafb3e9931c2bd3d72443eeb31e73ee0d9fd140000000036e7013f0ad7a3336626483ea370eb3eb5b7f2140000000098e6e53e3d4245beeb79c03deb31e73e7160f50e00000000e04f943c66eecabdf530c93dccbcf53eaaa5f212000000007cd2c53e0ad7a333a468cd3d7bb4fa3e6476f31100000000503ec43dc2c5c7bd0ad71d2e7b14fb3e5b64fe0f00000000e054d03c3d62b93d1f158d3e145ed03ecad0fe1400000000c2f6ff3e33f3b43daec7b13ec23db23ee5e5f916000000004df40b3fe1aa333eeb09873e7be4c53ea0b1f31400000000a8b9d93e5ccf2e3e85c3a93eeb39aa3ed1d9fa150000000080fe073fae377f3eae777e3eeba1b53e93adf91300000000ec35b93e00b0763ef6409e3eebb19e3eb2c3f41400000000a8bdf13eebb19e3e00f0753eebb19e3ea0bbfc1300000000f435d33e3de2933eae67933e3de2933ea0bbf81300000000f23dd73eeb39aa3e52f82d3eeb39aa3e9db5fd1400000000f427cb3e5c7f873e52d8323e7be4c53e8aa4f51400000000f021b53ec23db23eb836b33dc23db23e94aefb1500000000f417bf3e148e8d3ea4a8b73d145ed03e87a3fe1400000000ec17a53e0aff3c3e0a273c3eb85eda3e7f9bf91300000000e425953e3d42453eeb79c03deb31e73e7992f41400000000e2118d3e9931c23d3d72443eeb31e73e8b9ffd1200000000b48f973e66eeca3df530c93dccbcf53e6e88fe12000000008017363e145e93be145e93be145e933e6343fc0c0000000058aa9a3d52289ebe1ef575be52289e3e6e43f60c00000000f829a33d4709b5beae777ebeae777e3e703eeb0c000000008ca4253e52289ebe52289ebe1ef5753e613ef40c00000000b82c2d3ec23dc5becd0487be8513333e803ff60b0000000014c6a83e66a6a9be66a6a9be99392e3e6139ea0c000000003290943e52a8cfbec20d8dbe47c1b83d863dee0b0000000004d0fa3e14a6b1be14a6b1bef558b43d693bf80b000000001896de3e4721d3bef6708fbe0ad723338b40eb0b00000000076d263fcd7cb4becd7cb4be000000006d3cf30b000000000d52203fc23dc5be331333becd04873e8f45f90b000000006c00423e66a6a9be99392ebe66a6a93e7b47f50c00000000f8c98b3d14bed9be855b3cbe855b3c3e9740ed0b000000000cf4b03ef588e6be859b44be1e8dc13db145fa0a00000000007d033faec7eabecd4c48be8f7a2533b549fa0a000000000686273f52a8cfbe47c1b8bdc20d8d3ea549f40b000000006854563e14a6b1bef558b4bd14a6b13e8b49ed0c00000000a889cc3df588e6be1e8dc1bd859b443ec348fa0a000000000e28b33e0a07f5beb83ecabdb83eca3dcb46f20a000000000190043f99f9f9be706dcebd0ad72333d04df10a000000000793263f33dbd4be1e85cbadeb398e3eb44fef0b000000006c805e3ecd04b5be9999092ecd04b53e9651ee0c00000000a8f9e43d3383ecbe999919ae0aef433ed851f80a000000001446b93e7b14fbbe000000adc2c5c73de64eea0a0000000005a10a3f000000bf33b3a33100000000ea54e90a000000000c9f2b3f145ed0bea4a8b73d148e8d3ec859f10b0000000080d87e3ec23db2beb836b33dc23db23ea359ee0c00000000dcc80e3e7be4c5be52d8323e5c7f873eca66f60b000000005088833eeb39aabe52f82d3eeb39aa3eab62ee0c00000000f8001f3eeba1b5beae777e3eae377f3eca71f90b0000000062a0893eebb19ebe00f0753eebb19e3eb26df50c0000000008313b3eebb19ebef6409e3e00b0763ee7b6fd0d0000000064c8e73e3de293beae67933e3de2933edbbbef0f0000000062c8f33eeb39aabe85c3a93e5ccf2e3eecaefd0c0000000066caed3e7be4c5beeb09873ee1aa333ed86feb0b000000004aa6bd3eb85edabe0a273c3e0aff3c3ef26cfc0a00000000328cc33eeb31e7beeb79c03d3d42453ee85df60a000000001c66cb3ec23db2beaec7b13e33f3b43dfcb7f70c0000000031e30c3f145ed0be1f158d3e3d62b93de772e70b0000000020d4013feb31e7be3d72443e9931c23de862dc0b0000000014c30d3fccbcf5bef530c93d66eeca3df75ef00a000000000cb7003f0a17b5bea4a0b43e00000000f0bfdd0f0000000031e1173fb8d6d3be47798f3e00000000f174e00b0000000025d3223fa370ebbe6626483e00000000ed68db0b000000001ac3253f7bb4fabea468cd3d00000000fc61e90a0000000012b5273f52289ebe52289ebe1ef575be7856f20c000000004e6d733f4709b5beae777ebeae777ebe8b5aec0c00000000437d6f3f52289ebe1ef575be52289ebe9067f60c00000000567e783f145e93be145e93be145e93be7f5ff80c000000005474763f66a6a9be99392ebe66a6a9bea36ef20c00000000598e783fc23dc5be331333becd0487beb267f90b000000003f876d3f14a6b1bef558b4bd14a6b1beb574ee0c000000005691763f52a8cfbe47c1b8bdc20d8dbec86ff50b0000000041946c3f0a17b5be2ba267ba0a17b5bec57deb0c000000005599753fb8d6d3be0ca267bae1f28fbedc73ef0b00000000429c6b3f66a6a9be66a6a9be99392ebe7c51fe0b000000003662643fc23dc5becd0487be331333be9553f60b000000002d79603f14bed9be855b3cbe855b3cbeaf54ec0b0000000027895b3ff588e6be1e8dc1bd859b44bec760e90b000000002b965c3fa370ebbec7a167ba7bfc48bef371fa0a000000002e9e5c3f14a6b1be14a6b1bef558b4bd7545f60b000000001f5c4b3f52a8cfbec20d8dbe47c1b8bd9048ee0b000000001774483ff588e6be859b44be1e8dc1bdbc54fd0a0000000018854a3f0a07f5beb83ecabdb83ecabdda59f50a000000001997473f7bb4fabecba167ba5220cfbdf05fee0a000000001b9e483fcd7cb4becd7cb4be000000006b3cf30b000000000d50213f4721d3bef6708fbe0ad723338b40eb0b00000000076d263faec7eabecd4c48be8f7a2533b948f90a000000000787293f99f9f9be706dcebd0ad72333d54aee0a00000000078f263f000000bf33b3a33100000000ec55e90a000000000ca3293f145ed0bea4a8b73d148e8dbee67fee0b0000000044a36a3fc23db2beb836b33dc23db2bed184eb0c0000000054a5713feb39aabe52f82d3eeb39aabee998fe0b0000000057ad6f3f7be4c5be52d8323e5c7f87bef289f10b0000000048b5653febb19ebe00f0753eebb19ebee89afa0b0000000058b66c3feba1b5beae777e3eae377fbef092f30b000000004bbb633f3de293beae67933e3de293bef9e6d51d0000000031df1c3febb19ebef6409e3e00b076bef5e1d31b0000000031df1c3f7be4c5beeb09873ee1aa33bef084e50b000000003cc1563feb39aabe85c3a93e5ccf2ebef9dfd6170000000031e01c3f145ed0be1f158d3e3d62b9bdf37ce00b000000002dca3e3fc23db2beaec7b13e33f3b4bdf6d0d8120000000031df1c3fb8d6d3be47798f3e00000000ed76e30b0000000023d21d3f0a17b5bea4a0b43e00000000fac5e70e0000000032e1183fb85edabe0a273c3e0aff3cbef079e10b0000000038b7583feb31e7be3d72443e9931c2bdf170db0b0000000025bd413fa370ebbe6626483e00000000f166d80b0000000019c3223feb31e7beeb79c03d3d4245beeb72e50b0000000031ab5a3fccbcf5bef530c93d66eecabdee63d90b0000000020af463f7bb4fabea468cd3d00000000ea5bd70b0000000014b8263f145e93be145e93be145e93be8063f90c000000005b74793f52289ebe1ef575be52289ebe8d66f60c00000000577f783fae777ebeae777ebe4709b5be8268ee0d000000006e7d7d3f1ef575be52289ebe52289ebe725def0d000000006b6d7c3f851333becd0487bec23dc5be7a72fe0d0000000084777e3f99392ebe66a6a9be66a6a9be6763fc0d0000000077677c3f47c1b8bdc20d8dbe52a8cfbe7378fa0e000000009c727b3ff558b4bd14a6b1be14a6b1be5f66f90e0000000091617a3f8fd2de32f6708fbe4721d3be707ef21000000000bf6e6c3f006065b3cd7cb4becd7cb4be6274fd0f00000000b55f6e3fcd0487be331333bec23dc5be9170ec0d000000006d847d3f66a6a9be99392ebe66a6a9bea16ef20c00000000568c773f855b3cbe855b3cbe14bed9be8f7cfa0d000000007a837e3f1e8dc1bd859b44bef588e6be8683fc0e00000000a277793fc22d10b2cd4c48beaec7eabe838efe0f00000000b876713fc20d8dbe47c1b8bd52a8cfbeb184fe0c00000000718e7d3f14a6b1bef558b4bd14a6b1beb374ef0c000000005597753f859b44be1e8dc1bdf588e6bea088fa0d0000000083897e3fb83ecabdb83ecabd0a07f5be938cf90e0000000097807c3fc22d1033c26dcebd99f9f9be8b92ef1000000000bc7e6f3fe1f28fbe61a267bab8d6d3bec08afa0c000000006a947b3f0a17b5be2ba267ba0a17b5bec67cec0c00000000559c743f7bfc48bea0a267baa370ebbeaa8df40d00000000798e7d3f5220cfbd14a367ba7bb4fabea098f60e00000000978e7b3f000070b4eb51b82a000000bfd1cef2130000000057e1463fb83eca3db83ecabd0a07f5be93a6fe1100000000db7a583f1e8dc13d859b44bef588e6be8698fb1100000000d8745a3f859b443e1e8dc1bdf588e6be94a8f71300000000ea77443f855b3c3e855b3cbe14bed9be8ea3fa1300000000eb73413fc20d8d3e47c1b8bd52a8cfbe97affb1400000000f377333fcd04873e851333bec23dc5be92a6f61500000000f373333f14a6b13ef558b4bd14a6b1be9cb4fa1500000000f87b283f66a6a93e99392ebe66a6a9be97aef91600000000f776293fae777e3eae777ebe4709b5be89a0f71500000000f272353f52289e3e1ef575be52289ebe8ba2f31600000000f773283f1ef5753e52289ebe52289ebe839afa1400000000f36e323f145e933e145e93be145e93be8ba2fa1500000000f5702c3f0a17b53e85a467ba0a17b5bea5bbf31500000000fa841f3fe1f28f3eb0a367bab8d6d3be9fb3f31400000000f57f303f99392e3e66a6a9be66a6a9be7a8ff81300000000eb673f3f3313333ecd0487bec23dc5be7f96f81300000000e96f443f7bfc483eefa367baa370ebbea3b6fa1200000000ee7e3e3ff558b43d14a6b1be14a6b1be677df71100000000d861553f47c1b83dc20d8dbe52a8cfbe798efd1100000000d76f5a3fc23db23eb836b33dc23db2beb3cbfe1300000000fb8b1c3f148e8d3ea4a8b73d145ed0beadc1f61300000000f7892a3feb39aa3e52f82d3eeb39aabeb5ccf61300000000f9941b3f5c7f873e52d8323e7be4c5bec8d6f91300000000e5c1253febb19e3e00f0753eebb19ebecbdbf21400000000e5c8173fae377f3eae777e3eeba1b5bee5ecf81500000000a3f3243f3de2933eae67933e3de293bedfe9f31500000000aff21c3f00b0763ef6409e3eebb19ebef1f5f716000000007afa213fe1aa333eeb09873e7be4c5bef6f6f9160000000063f5273f5ccf2e3e85c3a93eeb39aabef6f5ef180000000054f3203feb61b93d1f158d3e145ed0befcf7f2180000000048ec253f33f3b43daec7b13ec23db2befbf6eb1a0000000045ec203f5c8f42b447798f3eb8d6d3befef5eb1a000000003ce6233fc2f528b4a4a0b43e0a17b5befbf2e31c000000003ae61f3f0aff3c3e0a273c3eb85edabee0e5f715000000008ff42f3f9931c23d3d72443eeb31e7bef3f0f6160000000051ed2d3fae4761b46626483ea370ebbef9f1ee18000000003fe5283f3d42453eeb79c03deb31e7beb6c4f21300000000dfbc393f66eeca3df530c93dccbcf5bedcddf7140000000068ec3d3f1e856bb4a468cd3d7bb4fabef6eff9150000000045e5313f5220cf3d54a367ba7bb4fabeabb7fe1100000000d99b553feb61b9bd1f158d3e145ed0befbefe11c0000000035e2203f33f3b4bdaec7b13ec23db2bef7ecdb1e0000000035e21e3fe1aa33beeb09873e7be4c5bef6e8d81e0000000032e01e3f5ccf2ebe85c3a93eeb39aabefaebd91f0000000033e11c3fae377fbeae777e3eeba1b5befeeddc1e0000000031df1d3f00b076bef6409e3eebb19ebef9e8d5200000000032e01c3febb19ebe00f0753eebb19ebeea9dfd0b0000000057b46c3f3de293beae67933e3de293befbe8d71d0000000031df1c3feb39aabe52f82d3eeb39aabee798fd0b0000000055a9703f5c7f87be52d8323e7be4c5becf97f40c0000000068a7763fc23db2beb836b33dc23db2bee390fd0b0000000055a1733f148e8dbea4a8b73d145ed0becb91f70c00000000629f773f0aff3cbe0a273c3eb85edabef8e9dd1c0000000033df213f3d4245beeb79c03deb31e7beb795f30d00000000779b7b3f9931c2bd3d72443eeb31e7befbeee61a0000000036e1243f66eecabdf530c93dccbcf5befcefef170000000037e0283f + 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: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + 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/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexDir0.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexDir0.asset.meta new file mode 100644 index 00000000..dd67c88b --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexDir0.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d64b36c452cf738409b8c6ac605ed918 +timeCreated: 1621378738 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexLM1.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexLM1.asset new file mode 100644 index 00000000..4a8f10fa --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexLM1.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: LMGroup_Sphere_VertexLM1 + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 0 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 0 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + 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: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: + m_VertexData: + serializedVersion: 3 + m_VertexCount: 515 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 2 + dimension: 4 + - 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 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 8240 + _typelessdata: 145e933e145e93be145e93beb6d4fa0452289e3e52289ebe1ef575be95aecc05ae777e3e4709b5beae777ebe96afcd051ef5753e52289ebe52289ebe94adcc053313333ec23dc5becd0487be99b3d30599392e3e66a6a9be66a6a9be93adcd0547c1b83d52a8cfbec20d8dbe93adcd05f558b43d14a6b1be14a6b1beb2d3fb04c2a59bb24721d3bef6708fbe92adce05006065b3cd7cb4becd7cb4be95b0d105cd04873ec23dc5be331333be9ab4d20566a6a93e66a6a9be99392ebe98b1d005855b3c3e14bed9be855b3cbe95afce051e8dc13df588e6be859b44be94adcc05aeef27b3aec7eabecd4c48beb3d5fe04c20d8d3e52a8cfbe47c1b8bd9ab3d10514a6b13e14a6b1bef558b4bd9bb3d205859b443ef588e6be1e8dc1bd98b1cf05b83eca3d0a07f5beb83ecabdb8d8fe0447294bb299f9f9be706dcebdb1d2fa04f6708f3e4721d3be0ad723339fb7d505cd7cb43ecd7cb4be0ad723339cb5d205cd4c483eaec7eabec21da73298b1cf05706dce3d99f9f9be0ad723b2b9d8fd04706dce3d99f9f9be0ad723b2b9d9fe0400000000000000bf00000000b2d3fa0400000000000000bf00000000b2d3fa04b83ecabd0a07f5beb83ecabdafd2fc041e8dc1bdf588e6be859b44beaed1fb04859b44bef588e6be1e8dc1bd8dabce05855b3cbe14bed9be855b3cbe91aed005c20d8dbe52a8cfbe47c1b8bdabd0fd04cd0487bec23dc5be331333be92afd20514a6b1be14a6b1bef558b4bd88a7cc0566a6a9be66a6a9be99392ebea8cffd04ae777ebe4709b5beae777ebe8daacd0552289ebe52289ebe1ef575be8ba9cd051ef575be52289ebe52289ebea6cbf804145e93be145e93be145e93beacd0fc04cd7cb4becd7cb4be000000008eadd305f6708fbe4721d3be0ad7a3328aa8cd0599392ebe66a6a9be66a6a9beabcffb04331333bec23dc5becd0487be8fabcd05cd4c48beaec7eabe0ab7d1af8ca9cc05f558b4bd14a6b1be14a6b1bea9cdf90447c1b8bd52a8cfbec20d8dbeaed2fd04c26dcebd99f9f9be00000000afd2fb0400000000000000bf00000000b2d3f904145e93be145e93be145e933ea8cffd0452289ebe52289ebe1ef5753e89a8ce05ae777ebe4709b5beae777e3e89a8cc051ef575be52289ebe52289e3ea9cffe04331333bec23dc5becd04873e8aa9cd0599392ebe66a6a9be66a6a93eaad0fd0447c1b8bd52a8cfbec20d8d3e8dabcd05f558b4bd14a6b1be14a6b13eabd0fc04cccc4c334721d3bef6708f3e8fabcc058fc27533cd7cb4becd7cb43e8daacc05cd0487bec23dc5be3313333e8aa9ce0566a6a9be66a6a9be99392e3e88a8ce05855b3cbe14bed9be855b3c3e8caace051e8dc1bdf588e6be859b443e8daacc055208acb2aec7eabecd4c483eb3d6fe04c20d8dbe52a8cfbe47c1b83d8baacf0514a6b1be14a6b1bef558b43d92b0d505859b44bef588e6be1e8dc13d8ba9cc05b83ecabd0a07f5beb83eca3dafd2fc045280b7b299f9f9be706dce3db3d5fc04f6708fbe4721d3be0ad7a3328aa9cd05cd7cb4becd7cb4be0000000089a8ce05cd4c48beaec7eabe0ab7d1af8ba9cc05c26dcebd99f9f9be0000000090abcc0500000000000000bf00000000b2d3fa0400000000000000bf00000000b2d3fa04b83eca3d0a07f5beb83eca3d93adcc051e8dc13df588e6be859b443e94afce05859b443ef588e6be1e8dc13d97b1cf05855b3c3e14bed9be855b3c3e97b1d005c20d8d3e52a8cfbe47c1b83d9db6d405cd04873ec23dc5be3313333e9ab4d30514a6b13e14a6b1bef558b43d9eb6d40566a6a93e66a6a9be99392e3e98b0ce05ae777e3e4709b5beae777e3e96b0cf0552289e3e52289ebe1ef5753e98b1d0051ef5753e52289ebe52289e3e93adcc05145e933e145e93be145e933eb9d8fe0499392e3e66a6a9be66a6a93eb5d7fe043313333ec23dc5becd04873e98b2d105f558b43d14a6b1be14a6b13e91acce0547c1b83d52a8cfbec20d8d3e92adcd0500000000000000bf00000000b3d4fa04706dce3d99f9f9be0ad723b2b7d7fd043de2933eae67933e3de293be97b9f00c00b0763ef6409e3eebb19ebe99bbf20cae377f3e1e2db53eae377fbe95b9f20cebb19e3ef6409e3e00b076be98bbf20c5c7f873e3d72c53ee1aa33be94b8f20ceb39aa3e85c3a93e5ccf2ebe99bbf20c148e8d3e99e9cf3e3d62b9bd97bbf40cc23db23eaec7b13e33f3b4bd99bbf10ce1f28f3e8f62d33e5c8fc2b394b8f10c0a17b53ea4a0b43e8fc2f5b39abbf10ce1aa333e3d72c53e5c7f87be95baf30c5ccf2e3e85c3a93eeb39aabe99bcf30c0aff3c3e0000da3e0aff3cbe90b7f20c3d42453ea4d0e63e9931c2bd8fb5f10c7bfc483e5c0feb3eb81e85b38eb5f00c3d62b93d99e9cf3e148e8dbec9d7fc0d33f3b43daec7b13ec23db2bec8d6fb0d9931c23da4d0e63e3d4245bebccef70d66eeca3d9959f53e66eecabda4bdeb0da420cf3d854bfa3e703d0ab391b7f20cb81e05b48f62d33ee1f28fbef7ecf211c2f528b4a4a0b43e0a17b5bef5eaf011eb51b8b35c0feb3e7bfc48bef5eaf111a4703db3854bfa3e5220cfbdfcf2fb1033b3a3310000003f0ad7a3b1f1e8f31033b3a3310000003f0ad7a3b1f2e9f41066eeca3d9959f53e66eeca3d88b1ec0c3d42453ea4d0e63e9931c23d8eb3ed0c9931c23da4d0e63e3d42453e90bbfa0b0aff3c3e0000da3e0aff3c3e98c0fe0b3d62b93d99e9cf3e148e8d3e90baf60be1aa333e3d72c53e5c7f873e95bcf70b33f3b43daec7b13ec23db23e8eb5ef0b5ccf2e3e85c3a93eeb39aa3e93b9f10bae377f3e1e2db53eae377f3e99bff90b00b0763ef6409e3eebb19e3e98bcf40bebb19e3ef6409e3e00b0763e9fc2f90b3de2933eae67933e3de2933e98bcf30b8fc27533a4a0b43e0a17b53ec7d3f50ccccc4c338f62d33ee1f28f3ee1e3fb0deb39aa3e85c3a93e5ccf2e3ea1c5fd0b5c7f873e3d72c53ee1aa333e92b4ea0cb81e05335c0feb3e7bfc483eece9fb0ec23db23eaec7b13e33f3b43d96b7ec0c148e8d3e99e9cf3e3d62b93d94b7ee0c33f3b4bdaec7b13ec23db23efef1f60f3d62b9bd99e9cf3e148e8d3efdeded115ccf2ebe85c3a93eeb39aa3ef3e1dc13e1aa33be3d72c53e5c7f873ef6e1d91500b076bef6409e3eebb19e3ef8e3db14ae377fbe1e2db53eae377f3efde6da163de293beae67933e3de2933ef2ded415ebb19ebef6409e3e00b0763ef4ddd0175c7f87be3d72c53ee1aa333efbe3d618eb39aabe85c3a93e5ccf2e3efee6d818148e8dbe99e9cf3e3d62b93df9e1d21ac23db2beaec7b13e33f3b43df9e3d11ae1f28fbe8f62d33e00000000fbe1d11b0a17b5bea4a0b43e00000000fae1d11b0aff3cbe0000da3e0aff3c3efee8dd163d4245bea4d0e63e9931c23df4ded3187bfc48be5c0feb3e00000000fce5d9189931c2bda4d0e63e3d42453ef4e3e11366eecabd9959f53e66eeca3df5e3df145220cfbd854bfa3e00000000f4e2dd15b81e8532854bfa3e5220cf3df1eaf80f33b3a3310000003f0ad7a3b1f1e8f31033b3a3310000003f0ad7a3b1f1e8f31033b3a3310000003f0ad7a3b1f1e8f310ebb19ebef6409e3e00b076bef6ddce1cae377fbe1e2db53eae377fbef6dfd11b00b076bef6409e3eebb19ebefde5d61a3de293beae67933e3de293befde4d41b5ccf2ebe85c3a93eeb39aabefce6db18e1aa33be3d72c53e5c7f87befee7dc1833f3b4bdaec7b13ec23db2befae7e215eb61b9bd99e9cf3e148e8dbefbe8e315eb39aabe85c3a93e5ccf2ebef7dfcf1c5c7f87be3d72c53ee1aa33bef9e1d21b0aff3cbe0000da3e0aff3cbef6e0d5199931c2bda4d0e63e3d4245befde9e415c23db2beaec7b13e33f3b4bdfee4d41b148e8dbe99e9cf3e3d62b9bdfbe3d31b3d4245bea4d0e63e9931c2bdf6e1d41966eecabd9959f53e66eecabdfae7e2150a17b5bea4a0b43e00000000fbe2d21be1f28fbe8f62d33e00000000f8e0d11b7bfc48be5c0feb3e00000000fce5d9185220cfbd854bfa3e00000000f5e2dd1533b3a3310000003f0ad7a3b1f1e8f210145e933e145e93be145e93be96afce0552289e3e1ef575be52289ebeb4d2f8044709b53eae777ebeae777ebeb6d4fa0452289e3e52289ebe1ef575beb9d8fe04c23dc53ecd0487be331333be97afcc0566a6a93e66a6a9be99392ebe9ab2cf0552a8cf3ec20d8dbe47c1b8bd97afcc0514a6b13e14a6b1bef558b4bd9db5d3054721d33ef6708fbe0ad723b3bcdafe04cd7cb43ecd7cb4be0ad723339cb4d105c23dc53e851333becd0487be9bb9ea0a66a6a93e99392ebe66a6a9bea2beee0a14bed93e855b3cbe855b3cbe98b6e60af588e63e859b44be1e8dc1bda3c5fa09aec7ea3ecd4c48bea4a8a4b39fbdec0952a8cf3e47c1b8bdc20d8dbea1bcea0b14a6b13ef558b4bd14a6b1beacc4f10bf588e63e1e8dc1bd859b44be9ebae90b0a07f53eb83ecabdb83ecabdaccbfe0a99f9f93ec26dcebd0ad723b3a2c2f50ab8d6d33e8fa467bae1f28fbeabc7f80b0a17b53e85a467ba0a17b5beaec9f90ba370eb3e82a467ba7bfc48bea7c4f60b7bb4fa3ecea467ba5220cfbda6c3f30b0000003f33b3a3b1000030b4a2bff00b0a07f53eb83ecabdb83eca3da2c1f30af588e63e859b44be1e8dc13da0c1f409f588e63e1e8dc1bd859b443e9cbcee0a14bed93e855b3cbe855b3c3e9dbef00952a8cf3e47c1b8bdc20d8d3e99b9ea0ac23dc53e851333becd04873e9bbcee0914a6b13ef558b4bd14a6b13ea2c6fe0966a6a93e99392ebe66a6a93e93b5e7094709b53eae777ebeae777e3e97afcd0552289e3e1ef575be52289e3eb8d7fd0452289e3e52289ebe1ef5753e98b1cf05145e933e145e93be145e933e96afcd05cd04b53e999909aecd04b53e9dbff30a33dbd43e14aec72deb398e3ea5c5f90a66a6a93e66a6a9be99392e3e9ab2d005c23dc53ecd0487be3313333ebbd9fe043383ec3e9999192e0aef433ea7c8fd0a14a6b13e14a6b1bef558b43d9ab2d00552a8cf3ec20d8dbe47c1b83d9ab2d005c23db23eb836b33dc23db23ea3c5fb0a145ed03ea4a8b73d148e8d3e9bbaeb0beb39aa3e52f82d3eeb39aa3e9abaec0b7be4c53e00d8323e5c7f873e9cbdf00bebb19e3e00f0753eebb19e3e99bbf00beba1b53eae777e3eae377f3e9fc1f70b3de2933eae67933e3de2933e9cbff60bebb19e3ef6409e3e00b0763e9abef60b7be4c53eeb09873ee1aa333ea2c4fb0beb39aa3e85c3a93e5ccf2e3ea1c4fd0b145ed03e1f158d3e3d62b93d9bbaec0cc23db23eaec7b13e33f3b43d96b7ed0cb8d6d33e47798f3e295c0fb498b8ec0c0a17b53ea4a0b43e8fc2f5b397b9ef0cb85eda3e0a273c3e0aff3c3ea5c4f80beb31e73e3d72443e9931c23da8c8fc0ba370eb3e6626483e0ad723b49bb9ea0ceb31e73eeb79c03d3d42453ea1bff10bccbcf53ef530c93d66eeca3da3c2f40b7bb4fa3e5268cd3d7b142eb4abc9fb0b7b14fb3e0000002dc2c5c73d9dbbec0b145ed03e1f158d3eeb61b9bd9bbbef0cc23db23eaec7b13e33f3b4bd99bbf10c7be4c53eeb09873ee1aa33be9ebef20ceb39aa3e85c3a93e5ccf2ebe99bbf20ceba1b53eae777e3eae377fbe9abbf00cebb19e3ef6409e3e00b076be98bbf20cebb19e3e00f0753eebb19ebe99baef0c3de2933eae67933e3de293be98baf00ceb39aa3e52f82d3eeb39aabe9bb9ec0c7be4c53e00d8323e5c7f87be9cbbed0cc23db23eb836b33dc23db2be9ebaea0c145ed03ea4a8b73d148e8dbeaac9fe0bb85eda3e0a273c3e0aff3cbe9fbdef0ceb31e73eeb79c03d3d4245beaccafe0beb31e73e3d72443e9931c2bd9dbbed0cccbcf53ef530c93d66eecabda8c7fa0b145e933e145e93be145e933eb9d8fe0452289e3e1ef575be52289e3eb2d1f704ae777e3eae777ebe4709b53eb3d3fa041ef5753e52289ebe52289e3e93adcc058513333ecd0487bec23dc53eafcff60499392e3e66a6a9be66a6a93e91accc05f5c0b83dc20d8dbe52a8cf3eadd0f804f558b43d14a6b1be14a6b13e90accc05295c8f33f6708fbe4721d33eacd1fd048fc27533cd7cb4becd7cb43eafd3fd04cd04873e851333bec23dc53e8eb1e30966a6a93e99392ebe66a6a93e98b9eb09855b3c3e855b3cbe14bed93e99bff6081e8dc13d859b44bef588e63e92b9f0083d9aa233cd4c48beaec7ea3e97c3fe07c20d8d3e47c1b8bd52a8cf3e9bc0f80914a6b13ef558b4bd14a6b13e96b6e80a859b443e1e8dc1bdf588e63e94bbf409b83eca3db83ecabd0a07f53e8cb4ec09429eac33c26dcebd99f9f93e8bb4ec09eb398e3e703d0aae33dbd43e90b4e90acd04b53e999909aecd04b53ea0c1f50a0aef433e7b140e2d3383ec3e8eb2e70ac2c5c73d5c8f1eae7b14fb3e99c3fe09aeffaf337bd823b20000003f95bffa09b83ecabdb83ecabd0a07f53e8cb6ed091e8dc1bd859b44bef588e63e8bb5e808859b44be1e8dc1bdf588e63e8cb6ee09855b3cbe855b3cbe14bed93e8bb6ec08c20d8dbe47c1b8bd52a8cf3e90baf109cd0487be331333bec23dc53e95c0f70814a6b1bef558b4bd14a6b13e94c1f30966a6a9be99392ebe66a6a93e9bd6fb08ae777ebeae777ebe4709b53ea6d9fa0452289ebe1ef575be52289e3ea8cefe041ef575be52289ebe52289e3ea8cffd04145e93be145e93be145e933e89a8ce05cd04b5be9999092ecd04b53e97c4fd09eb398ebe703d0a2e33dbd43e96c3fc0999392ebe66a6a9be66a6a93e89a9ce05331333becd0487bec23dc53ea7cdfa040aef43be7b140ead3383ec3e8cb2e50af558b4bd14a6b1be14a6b13e8aa8cc05f5c0b8bdc20d8dbe52a8cf3ea9cefa04c23db2beb836b33dc23db23ed7d7ea0c148e8dbea4a8b73d145ed03ecbd1ea0ceb39aabe52f82d3eeb39aa3ef7eaec0f5c7f87be52d8323e7be4c53efcf1f70eebb19ebe00f0753eebb19e3ef4e1da13ae377fbeae777e3eeba1b53ef4e2de123de293beae67933e3de2933ef4dfd61500b076bef6409e3eebb19e3ef9e4dc14e1aa33beeb09873e7be4c53efce9e9105ccf2ebe85c3a93eeb39aa3ef2e0db133d62b9bd1f158d3e145ed03ef4effd0d33f3b4bdaec7b13ec23db23efef1f60f295c8f3347798f3eb8d6d33e99b9ec0b8fc27533a4a0b43e0a17b53ec7d3f60c0aff3cbe0a273c3eb85eda3ef5effa0d9931c2bd3d72443eeb31e73ed5dbf30c0ad7a3336626483ea370eb3e90baf50a3d4245beeb79c03deb31e73ecad6f50b66eecabdf530c93dccbcf53ebbd3fe0a0ad7a333a468cd3d7bb4fa3e8bb3eb0ac2c5c7bd0ad71d2e7b14fb3e98c2fc093d62b93d1f158d3e145ed03e8ab1e80b33f3b43daec7b13ec23db23e8eb6ef0be1aa333eeb09873e7be4c53e91b5eb0b5ccf2e3e85c3a93eeb39aa3e91b8f00bae377f3eae777e3eeba1b53e95b8ed0b00b0763ef6409e3eebb19e3e96baf20bebb19e3e00f0753eebb19e3e98bbf00b3de2933eae67933e3de2933e9cbff50beb39aa3e52f82d3eeb39aa3e99b9ec0b5c7f873e52d8323e7be4c53e93b4e70bc23db23eb836b33dc23db23e9bb9e90b148e8d3ea4a8b73d145ed03e99bdf30a0aff3c3e0a273c3eb85eda3e9ac1fb0a3d42453eeb79c03deb31e73e96bbf20a9931c23d3d72443eeb31e73e92bbf50a66eeca3df530c93dccbcf53e91b7ee0a145e93be145e93be145e933e8aa8cd0552289ebe1ef575be52289e3ea5ccfb044709b5beae777ebeae777e3ea4cbfa0452289ebe52289ebe1ef5753ea8cffd04c23dc5becd0487be8513333e87a6cc0566a6a9be66a6a9be99392e3e89a8cd0552a8cfbec20d8dbe47c1b83d8fadd30514a6b1be14a6b1bef558b43d88a8ce054721d3bef6708fbe0ad723338eadd205cd7cb4becd7cb4be0000000088a7cd05c23dc5be331333becd04873ea1cafe0866a6a9be99392ebe66a6a93e99c4fa0814bed9be855b3cbe855b3c3ea2c2ec09f588e6be859b44be1e8dc13db0cef509aec7eabecd4c48be8f7a2533bcd4f60952a8cfbe47c1b8bdc20d8d3e9cc4f70914a6b1bef558b4bd14a6b13e93bdf309f588e6be1e8dc1bd859b443e9cbde80a0a07f5beb83ecabdb83eca3db0ccf40a99f9f9be706dcebd0ad72333b3c9eb0b33dbd4be1e85cbadeb398e3e95d0e90acd04b5be9999092ecd04b53e96c3fd093383ecbe999919ae0aef433ea6c8f70a7b14fbbe000000adc2c5c73da7c3ea0b000000bf33b3a33100000000b8d0f50b145ed0bea4a8b73d148e8d3edee2f70cc23db2beb836b33dc23db23ecbd2ea0c7be4c5be52d8323e5c7f873ef0e5dd11eb39aabe52f82d3eeb39aa3efaedef0feba1b5beae777e3eae377f3efee9df14ebb19ebe00f0753eebb19e3ef5e1da13ebb19ebef6409e3e00b0763efce5d9163de293beae67933e3de2933efee9df14eb39aabe85c3a93e5ccf2e3ef6dacd197be4c5beeb09873ee1aa333efde6da16b85edabe0a273c3e0aff3c3ef4e4e012eb31e7beeb79c03d3d42453ef1dfef0dc23db2beaec7b13e33f3b43dfde4d31a145ed0be1f158d3e3d62b93df9e2d418eb31e7be3d72443e9931c23dfceae313ccbcf5bef530c93d66eeca3df4f1fd0d0a17b5bea4a0b43e00000000fae1d11bb8d6d3be47798f3e00000000f6dfd219a370ebbe6626483e00000000f3e1d7157bb4fabea468cd3d00000000fef9fb0e52289ebe52289ebe1ef575be8daacf054709b5beae777ebeae777ebea1c6f40452289ebe1ef575be52289ebeaed1fe04145e93be145e93be145e93bea4c9f70466a6a9be99392ebe66a6a9befce2d019c23dc5be331333becd0487bef7decd1814a6b1bef558b4bd14a6b1befce3d11a52a8cfbe47c1b8bdc20d8dbef7dfce190a17b5be2ba267ba0a17b5befbe2d01bb8d6d3be0ca267bae1f28fbefde5d41966a6a9be66a6a9be99392ebe8eabcf05c23dc5becd0487be331333bea6ccfb0414bed9be855b3cbe855b3cbef3ded114f588e6be1e8dc1bd859b44bef9e8d715a370ebbec7a167ba7bfc48befbe6da1514a6b1be14a6b1bef558b4bd88a7cd0552a8cfbec20d8dbe47c1b8bda7cdfd04f588e6be859b44be1e8dc1bdf1eae20e0a07f5beb83ecabdb83ecabdf2f0e90f7bb4fabecba167ba5220cfbdf8eef00fcd7cb4becd7cb4be0000000088a8cd054721d3bef6708fbe0ad7233388a8ce05aec7eabecd4c48be8f7a2533bcd5f60999f9f9be706dcebd0ad72333b6dbe90b000000bf33b3a33100000000bad2f60b145ed0bea4a8b73d148e8dbefce4d41ac23db2beb836b33dc23db2befce3d31beb39aabe52f82d3eeb39aabefde4d31b7be4c5be52d8323e5c7f87befce0d01bebb19ebe00f0753eebb19ebefee5d51beba1b5beae777e3eae377fbefee4d41b3de293beae67933e3de293befce3d41bebb19ebef6409e3e00b076bef7decf1c7be4c5beeb09873ee1aa33befae1d11beb39aabe85c3a93e5ccf2ebef6dece1c145ed0be1f158d3e3d62b9bdfbe3d31ac23db2beaec7b13e33f3b4bdfde4d41bb8d6d3be47798f3e00000000f7e0d2190a17b5bea4a0b43e00000000fbe2d21bb85edabe0a273c3e0aff3cbefee7d719eb31e7be3d72443e9931c2bdf6e1d517a370ebbe6626483e00000000feeae114eb31e7beeb79c03d3d4245befde7d917ccbcf5bef530c93d66eecabdf6e5de137bb4fabea468cd3d00000000faf3fb0e145e93be145e93be145e93be8da9cc0552289ebe1ef575be52289ebea3c8f504ae777ebeae777ebe4709b5beaacdf9041ef575be52289ebe52289ebe8eaace05851333becd0487bec23dc5beb1d3fd0499392ebe66a6a9be66a6a9bea7ccf80447c1b8bdc20d8dbe52a8cfbea4c7f204f558b4bd14a6b1be14a6b1beb0d2fc048fd2de32f6708fbe4721d3beaaccf504006065b3cd7cb4becd7cb4be8fabcc05cd0487be331333bec23dc5bef7decc1966a6a9be99392ebe66a6a9befbe1cf19855b3cbe855b3cbe14bed9bef8e4d0161e8dc1bd859b44bef588e6befde9e011c22d10b2cd4c48beaec7eabef0eaf40cc20d8dbe47c1b8bd52a8cfbef5ddcd1a14a6b1bef558b4bd14a6b1befce3d11a859b44be1e8dc1bdf588e6bef9e7d516b83ecabdb83ecabd0a07f5befeede911c22d1033c26dcebd99f9f9bee3e2f20de1f28fbe61a267bab8d6d3befbe2d21a0a17b5be2ba267ba0a17b5bef8e1cf1b7bfc48bea0a267baa370ebbef7e1d5175220cfbd14a367ba7bb4fabef3e2dd13000070b4eb51b82a000000bfe7e3f20eb83eca3db83ecabd0a07f5bec6d7fb0b1e8dc13d859b44bef588e6bed8ddf50b859b443e1e8dc1bdf588e6bebed1f80b855b3c3e855b3cbe14bed9bec6d0ef0bc20d8d3e47c1b8bd52a8cfbeb2c7f10bcd04873e851333bec23dc5bea8c1ee0a14a6b13ef558b4bd14a6b1bea8c0ee0b66a6a93e99392ebe66a6a9be9fbdee0aae777e3eae777ebe4709b5beb2d1f70452289e3e1ef575be52289ebeb5d3f9041ef5753e52289ebe52289ebe93accc05145e933e145e93be145e93beb8d7fd040a17b53e85a467ba0a17b5beabc6f70be1f28f3eb0a367bab8d6d3beb0cafa0b99392e3e66a6a9be66a6a9be91accc053313333ecd0487bec23dc5beb1d0f7047bfc483eefa367baa370ebbeb2ccfa0bf558b43d14a6b1be14a6b1beb4d5fe0447c1b83dc20d8dbe52a8cfbeabccf404c23db23eb836b33dc23db2beaac9fd0b148e8d3ea4a8b73d145ed0beaccafe0beb39aa3e52f82d3eeb39aabe99b8eb0c5c7f873e52d8323e7be4c5be9ab9ec0cebb19e3e00f0753eebb19ebe98baef0cae377f3eae777e3eeba1b5be96b8ed0c3de2933eae67933e3de293be98baf00c00b0763ef6409e3eebb19ebe93b6ee0ce1aa333eeb09873e7be4c5be9dbef30c5ccf2e3e85c3a93eeb39aabe9abdf50ceb61b93d1f158d3e145ed0bebbccf20d33f3b43daec7b13ec23db2bec9d7fb0d5c8f42b447798f3eb8d6d3bef0e5eb11c2f528b4a4a0b43e0a17b5bef5eaf0110aff3c3e0a273c3eb85edabe9cbbee0c9931c23d3d72443eeb31e7bea6c4f40cae4761b46626483ea370ebbef4eaf1103d42453eeb79c03deb31e7bea0bceb0c66eeca3df530c93dccbcf5bea4bfed0c1e856bb4a468cd3d7bb4fabef1eaf40f5220cf3d54a367ba7bb4fabeb6d0fd0beb61b9bd1f158d3e145ed0bef8e6e01533f3b4bdaec7b13ec23db2befbe8e115e1aa33beeb09873e7be4c5befbe5d9185ccf2ebe85c3a93eeb39aabefde6db18ae377fbeae777e3eeba1b5befde5d61a00b076bef6409e3eebb19ebefde5d71aebb19ebe00f0753eebb19ebef6dece1c3de293beae67933e3de293befde4d51beb39aabe52f82d3eeb39aabefee5d41b5c7f87be52d8323e7be4c5bef6decf1bc23db2beb836b33dc23db2befce3d31b148e8dbea4a8b73d145ed0bef5ddce1b0aff3cbe0a273c3eb85edabefce5d8183d4245beeb79c03deb31e7bef7e1d4189931c2bd3d72443eeb31e7bef4e2dc1566eecabdf530c93dccbcf5bef6e4de14 + 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: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + 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/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexLM1.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexLM1.asset.meta new file mode 100644 index 00000000..00ea8748 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexLM1.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1a1dbb7295fa04a47864d23f46734976 +timeCreated: 1622046790 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexSH0.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexSH0.asset new file mode 100644 index 00000000..e4ec66e9 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexSH0.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: LMGroup_Sphere_VertexSH0 + serializedVersion: 10 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 0 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 0 + localAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + 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: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: + m_VertexData: + serializedVersion: 3 + m_VertexCount: 515 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 2 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 16 + format: 0 + dimension: 2 + - stream: 0 + offset: 24 + 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 + m_DataSize: 16480 + _typelessdata: 145e933e145e93be145e93be8ea4f20e000000009d94113f5f830a3fc4e1673f52289e3e52289ebe1ef575be8ea5f60e0000000097910f3f5f840b3fc4e2693fae777e3e4709b5beae777ebe8fa4fd0d0000000096910e3f5b830a3fbde36b3f1ef5753e52289ebe52289ebe90a5fa0d00000000a19a183f5d830b3fbede643f3313333ec23dc5becd0487be7e91f00d000000009c9c1a3f5681093fb3de663f99392e3e66a6a9be66a6a9be8a9bef0d00000000a49f1d3f5c820a3fb8de643f47c1b83d52a8cfbec20d8dbe7181ef0c000000009fa8293f4e7b053fa5d35a3ff558b43d14a6b1be14a6b1be7a8bf10c00000000aaaf313f577e083fadd14f3fc2a59bb24721d3bef6708fbe5967eb0b00000000a3b9403f8cdcfc3e94b52f3f006065b3cd7cb4becd7cb4be6c77eb0b00000000aebd413f5179063f9bba283fcd04873ec23dc5be331333be899df20e00000000908b093f5a840b3fbce56d3f66a6a93e66a6a9be99392ebe8da3f50e00000000928b093f5f850c3fc2e46b3f855b3c3e14bed9be855b3cbe7d8ff50d000000009394123f5080093fafe16b3f1e8dc13df588e6be859b44be6374f70c0000000096a3233f4573013f9fd15f3faeef27b3aec7eabecd4c48be4451ed0b0000000097b23f3f78bce63e8da71f3fc20d8d3e52a8cfbe47c1b8bd8397f20e000000008684033f57850c3fb9e56f3f14a6b13e14a6b1bef558b4bd8aa1f40e000000008986053f5e860c3fc2e56d3f859b443ef588e6be1e8dc1bd7989ee0e000000008889083f4f7f083fafe46f3fb83eca3d0a07f5beb83ecabd5c6bfe0c000000008992123f80dcfa3e99d4683f47294bb299f9f9be706dcebd2b3df20b000000008ca2313f7096be3e889c203ff6708f3e4721d3be0ad72333879bf70e000000007e82023f59850c3fbbe7703fcd7cb43ecd7cb4be0ad723338aa0f50e000000007c80013f5f870d3fc1e66f3fcd4c483eaec7eabec21da7327687ed0e00000000fefefe3e5080093fb0e6713f706dce3d99f9f9be0ad723b2515ef10c000000008581013f80dafa3e9ad66b3f706dce3d99f9f9be0ad723b25360f10c000000008482013f80dcfa3e9ad76c3f00000000000000bf00000000182ced0a00000000898a083fe0e4643e86900d3f00000000000000bf00000000182cee0a000000008a8b083fe0e4683e868f0d3fb83ecabd0a07f5beb83ecabd3435f7090000000090af393f7092d83efcfa903e1e8dc1bdf588e6be859b44be4147e80a000000009cbe463f78b0e23e000fbf3e859b44bef588e6be1e8dc1bd4e3cf3080000000096bf333f78b0f03ebc995d3e855b3cbe14bed9be855b3cbe5447e609000000009fc5413f7cbafa3ee8e0823ec20d8dbe52a8cfbe47c1b8bd613fe6080000000096bc213f3f5a013f8c79393ecd0487bec23dc5be331333be6c4df10800000000a3c8373f4260063fa4a95d3e14a6b1be14a6b1bef558b4bd7843df080000000095bb1e3f445f0d3f64592d3e66a6a9be66a6a9be99392ebe7e4fe70800000000a3c92f3f4868103f7885493eae777ebe4709b5beae777ebe765cfb0800000000aace403f46680b3fdce6823e52289ebe52289ebe1ef575be855df00800000000aed2383f4c70123f94ad693e1ef575be52289ebe52289ebe755fe50900000000b5d3453f4f74113fe2f2903e145e93be145e93be145e93be8a64f60800000000b3d33f3f4f72153fa8cd7d3ecd7cb4becd7cb4be000000008444fd0700000000809f0e3f435b0d3f58351d3ef6708fbe4721d3be0ad7a3325c34df0800000000819c0f3f3f57003f7841213e99392ebe66a6a9be66a6a9be7468f20900000000b5d2493f4e740a3ff806a73e331333bec23dc5becd0487be6258ee0900000000aacb463f4466023ff2fa983ecd4c48beaec7eabe0ab7d1af462ae408000000008291093f76a0ec3ea45d213ef558b4bd14a6b1be14a6b1be6568e90a00000000b2c94b3f4d74083f1035ef3e47c1b8bd52a8cfbec20d8dbe5258e80a00000000a8c64d3f86cafa3e061dd93ec26dcebd99f9f9be000000002924f60800000000878e083f7084d43ee0c95d3e00000000000000bf00000000182ced0a000000008a8c093fe0e4643e87900d3f145e93be145e93be145e933e6445fc0800000000967cc23e4f5d123fa0b5253e52289ebe52289ebe1ef5753e643ff40800000000a68edc3e49550d3f8c89113eae777ebe4709b5beae777e3e5139e30900000000a488ba3e4651033fb4bd253e1ef575be52289ebe52289e3e5541eb09000000009478aa3e4c5a0b3fc8e9393e331333bec23dc5becd04873e4741f80900000000a27ea23e8aa6f23eec116a3e99392ebe66a6a9be66a6a93e4a48fe090000000090749e3e9abcfa3ef8257e3e47c1b8bd52a8cfbec20d8d3e383fee0a00000000a484903e8aaae03e041d9d3ef558b4bd14a6b1be14a6b13e424cf70a0000000090768e3e9cc0ea3e123dc33ecccc4c334721d3bef6708f3e3b4fee0b00000000a686863e90cce63e8eb22f3f8fc27533cd7cb4becd7cb43e4d5df20b00000000948a903ea4e6fe3e96c2323fcd0487bec23dc5be3313333e5a38f20800000000ba9ed23e414d023f9c85193e66a6a9be66a6a9be99392e3e6d39e80800000000beace43e46510f3f705d0d3e855b3cbe14bed9be855b3c3e3c34e60900000000b890bc3e7e9ade3ec8d14d3e1e8dc1bdf588e6be859b443e343bfc0900000000b8949c3e7e98ce3efa10973e5208acb2aec7eabecd4c483e2f40e80b00000000b89a963e82b2d43e8ca9223fc20d8dbe52a8cfbe47c1b83d5733e50800000000d8d6f03e4051003f7c4d113e14a6b1be14a6b1bef558b43d6d37e10800000000dae0fe3e4451103f603d153e859b44bef588e6be1e8dc13d422dec0800000000d4b6da3e789ae63eb085293eb83ecabd0a07f5beb83eca3d2e2dfa0800000000d2acbc3e768aca3edcdd6d3e5280b7b299f9f9be706dce3d2033e70a00000000d0bab23e788ea63e8798133ff6708fbe4721d3be0ad7a3325d34df0800000000829a0e3f3f56013f7841213ecd7cb4becd7cb4be000000008543fb0700000000829e0d3f445a0d3f5435193ecd4c48beaec7eabe0ab7d1af482be3080000000083990f3f76a6ec3ea4591d3ec26dcebd99f9f9be000000002b25f708000000008891093f708ad43ee0c1493e00000000000000bf00000000182ced0a00000000898b083fe0e8683e868f0c3f00000000000000bf00000000182ced0a000000008b8c0a3fe0e4683e87900d3fb83eca3d0a07f5beb83eca3d5665fe0b00000000d4ced63e4572003f9dd86b3f1e8dc13df588e6be859b443e5565ef0c00000000c0b4bc3e4876013f9dd8693f859b443ef588e6be1e8dc13d7f8ef90d00000000e4ecf23e5282093fb1e8723f855b3c3e14bed9be855b3c3e7687f60d00000000c4d0dc3e5482093fafe5703fc20d8d3e52a8cfbe47c1b83d8498f50e00000000e2f2f83e5b860c3fbbe8713fcd04873ec23dc5be3313333e8294f00e00000000cee6f03e5d870c3fb9e8713f14a6b13e14a6b1bef558b43d899ef50e00000000e0f6fc3e60880e3fc0e66f3f66a6a93e66a6a9be99392e3e859bf50e00000000cae8f43e63880e3fc0e76f3fae777e3e4709b5beae777e3e7f91f00e00000000bad8e83e60870c3fbae7713f52289e3e52289ebe1ef5753e869af40e00000000bce2f23e65880d3fbee66f3f1ef5753e52289ebe52289e3e7c8fed0e00000000aacede3e64870c3fb9e6703f145e933e145e93be145e933e8297f10e00000000b2deec3e67890e3fbde7703f99392e3e66a6a9be66a6a93e7386f40d00000000a4bcca3e5f830a3fb2e26d3f3313333ec23dc5becd04873e6b7ff00d00000000b0bac63e57820a3fade16d3ff558b43d14a6b1be14a6b13e6376f50c0000000096a0ac3e5a7f073fa3d7613f47c1b83d52a8cfbec20d8d3e5c6ff50c00000000aaa6ae3e507a033fa2d8643f00000000000000bf00000000182cee0a000000008a8a083fe0e4643e868f0d3f706dce3d99f9f9be0ad723b2525ff10c000000008683023f80dafa3e99d66b3f3de2933eae67933e3de293bef8f9f610000000009994153fbcc84c3ffedac23e00b0763ef6409e3eebb19ebefcf9f012000000009a95163fc4cf523fdcb8a23eae377f3e1e2db53eae377fbefdfaee12000000009794153fc7cf523fdab8a63eebb19e3ef6409e3e00b076bef1f3f110000000009693143fbdc84c3f02ddc23e5c7f873e3d72c53ee1aa33befcfaee12000000009393143fc9d0523fdcbaa83eeb39aa3e85c3a93e5ccf2ebef7faf80f000000009291133fbec84c3f08e3ca3e148e8d3e99e9cf3e3d62b9bdfbf9ee12000000008d91133fcad0533fdcbaa63ec23db23eaec7b13e33f3b4bdeaeff00f000000008a8f113fbec6493f16f3d83ee1f28f3e8f62d33e5c8fc2b3fbf9ee12000000008991133fcad1533fdab8a63e0a17b53ea4a0b43e8fc2f5b3eaf1f80e00000000828c0f3fb9c2463f2a07ed3ee1aa333e3d72c53e5c7f87befefaee12000000009795163fc8cf523fd8baa63e5ccf2e3e85c3a93eeb39aabefdf8ed12000000009b96173fc6d0523fd2b4a23e0aff3c3e0000da3e0aff3cbefefbef12000000009393143fc9cf523fdcbca83e3d42453ea4d0e63e9931c2bdfdfaee12000000008f92143fcbd0533fdabaa63e7bfc483e5c0feb3eb81e85b3fcfaf112000000008890123fcad0533fdebca63e3d62b93d99e9cf3e148e8dbefcf6ea12000000009a96173fcad2533fccae9a3e33f3b43daec7b13ec23db2befbf5e912000000009e98193fc9d2533fc8aa983e9931c23da4d0e63e3d4245befdf8ec12000000009594163fcbd1533fd2b4a03e66eeca3d9959f53e66eecabdfefaef12000000008f92143fcbd1523fd8b8a43ea420cf3d854bfa3e703d0ab3fdf9f012000000008990123fcbd1533fd8b8a43eb81e05b48f62d33ee1f28fbef9f0e412000000009d99193fcdd5553fb89e8a3ec2f528b4a4a0b43e0a17b5bef9f0e41200000000a09a1a3fcbd4543fb89e8e3eeb51b8b35c0feb3e7bfc48bef8f0e412000000009897183fcfd5563fbaa08c3ea4703db3854bfa3e5220cfbdf9f2e712000000009295163fcfd5563fc0a28e3e33b3a3310000003f0ad7a3b1f7f0e612000000008b92143fd0d6573fbc9e8a3e33b3a3310000003f0ad7a3b1f7f0e612000000008b92143fd0d6573fbca08a3e66eeca3d9959f53e66eeca3dfcf8f11200000000838f113fcad1533fd8b8a23e3d42453ea4d0e63e9931c23dfcf9f212000000008490123fc9d1533fdcbaa63e9931c23da4d0e63e3d42453ef9f4ef12000000007e8e103fc9d3553fd0ae9a3e0aff3c3e0000da3e0aff3c3efaf8f312000000007e8e113fc7d1543fdab6a43e3d62b93d99e9cf3e148e8d3ef7f2f012000000007a8d103fc7d4563fceaa963ee1aa333e3d72c53e5c7f873efbf8f612000000007a8d103fc4d0533fdcb6a43e33f3b43daec7b13ec23db23ef3eff01200000000768d103fc5d5583fcaa08e3e5ccf2e3e85c3a93eeb39aa3eebebf31100000000718a0f3fbcce523fecc0aa3eae377f3e1e2db53eae377f3eeef0fa1000000000738a0f3fbaca4e3f02dbc23e00b0763ef6409e3eebb19e3ed3ddfe0e000000006382093fa9be433f2c11f53eebb19e3ef6409e3e00b0763ea9bef20d00000000b2f0fe3e9ba6263fb8c5443f3de2933eae67933e3de2933e97b0f00d00000000a4e2f03e929a173fbfdd673f8fc27533a4a0b43e0a17b53efef7f71100000000768d103fc8d8593f70217d3ecccc4c338f62d33ee1f28f3ef3ece91200000000798d103fcbd7593fba96823eeb39aa3e85c3a93e5ccf2e3ec4d4f60d000000006881073fa6b4373fada61b3f5c7f873e3d72c53ee1aa333ef7f7f711000000007c8d103fc3cf523feac4ae3eb81e05335c0feb3e7bfc483ef3ece712000000007e8e103fced8583fb898843ec23db23eaec7b13e33f3b43dd3def00e0000000074870c3fb2bd403fa091053f148e8d3e99e9cf3e3d62b93dfbf9f112000000008590123fc8d0533fdebaa63e33f3b4bdaec7b13ec23db23efbf0ee1100000000798f113fcddc5b3f3cf9583e3d62b9bd99e9cf3e148e8d3efcf1ed11000000007b8f113fd0dc5b3f3cfd5c3e5ccf2ebe85c3a93eeb39aa3efaece911000000007b91133fd0de5c3f20e1483ee1aa33be3d72c53e5c7f873efbece611000000007f92133fd3df5b3f18e1483e00b076bef6409e3eebb19e3efbeae611000000007d92133fd1df5c3f0cd5403eae377fbe1e2db53eae377f3efbeae211000000008293133fd4df5b3f04d9403e3de293beae67933e3de2933ed8b7fe09000000005581073fb7d9463f7c253d3eebb19ebef6409e3e00b0763ec89eea0900000000567d073fb7d83d3f743d353e5c7f87be3d72c53ee1aa333efdebe111000000008593143fd6e05a3f00d9403eeb39aabe85c3a93e5ccf2e3ed19bf508000000005c7d073fb8d7343f7465353e148e8dbe99e9cf3e3d62b93df0ded312000000008a94143fd8e05a3ff4d8403ec23db2beaec7b13e33f3b43dd79fed08000000006c870c3fbdd7323f6059393ee1f28fbe8f62d33e00000000f1ded212000000008f96153fd9df593ff0d8443e0a17b5bea4a0b43e00000000fbc3fc08000000008193113fc3d93b3f3c2d413e0aff3cbe0000da3e0aff3c3efcece311000000008493143fd6df5b3f08dd443e3d4245bea4d0e63e9931c23dfdece111000000008893143fd8df5b3f04dd443e7bfc48be5c0feb3e00000000feeddf11000000008f95153fd9df5a3f00e1483e9931c2bda4d0e63e3d42453efdf1ea11000000008090123fd3dd5b3f34f9583e66eecabd9959f53e66eeca3dfdf1e811000000008692143fd6dd5b3f2cf9583e5220cfbd854bfa3e00000000fef1e511000000008d94153fd7dd5b3f24f5583eb81e8532854bfa3e5220cf3df5eee612000000008490123fcfd7583fba9c863e33b3a3310000003f0ad7a3b1f6f0e612000000008a92143fd0d6573fbc9e8a3e33b3a3310000003f0ad7a3b1f7efe612000000008b92143fd0d7573fbc9e8a3e33b3a3310000003f0ad7a3b1f6efe612000000008a92143fd0d7573fbc9e883eebb19ebef6409e3e00b076beeed7d30f00000000a09b193fcfdc533f04e94c3eae377fbe1e2db53eae377fbef2e0d212000000009d99183fd5dd583ff8e04c3e00b076bef6409e3eebb19ebef2e1d41200000000a09a193fd2dc583f00e14c3e3de293beae67933e3de293bef7e3da1000000000a19b193fd0dc553f00e14c3e5ccf2ebe85c3a93eeb39aabef2e3d61200000000a19b1a3fd1db583f14ed583ee1aa33be3d72c53e5c7f87bef3e2d512000000009e9a193fd4dc583f0ce9543e33f3b4bdaec7b13ec23db2bef4e8dc1200000000a19b1b3fced8573f3c0d713eeb61b9bd99e9cf3e148e8dbef4e8dc12000000009f9a1a3fd1d9573f3c0d713eeb39aabe85c3a93e5ccf2ebeebd0d40d000000009d9b183fcddb4f3f0ced483e5c7f87be3d72c53ee1aa33bef2dfd112000000009a98173fd7de583ff4dc483e0aff3cbe0000da3e0aff3cbef2e2d412000000009a98183fd7dd593f08e9503e9931c2bda4d0e63e3d4245bef2e7da12000000009a98193fd4db593f3005653ec23db2beaec7b13e33f3b4bdf8cfe90a000000009399173fc9da463f2005453e148e8dbe99e9cf3e3d62b9bdf1dfd112000000009497173fd8df593ff0d8443e3d4245bea4d0e63e9931c2bdfeeedf11000000009497163fd9de5a3f00e1483e66eecabd9959f53e66eecabdf1e5d912000000009497173fd6dc5a3f28fd603e0a17b5bea4a0b43e00000000fec5fd08000000008294123fc3d93b3f38293d3ee1f28fbe8f62d33e00000000f1ded112000000008f95153fd9df593ff0d8443e7bfc48be5c0feb3e00000000feede011000000008f95153fd9df5a3f00e1483e5220cfbd854bfa3e00000000fef1e511000000008d94153fd7dd5b3f24f9583e33b3a3310000003f0ad7a3b1f7efe612000000008b92143fd0d7573fba9e883e145e933e145e93be145e93be8ba1f20e000000009c94113f5f830a3fc3e0663f52289e3e1ef575be52289ebe92a8f60e000000009f95123f6182093fc5df653f4709b53eae777ebeae777ebe93aaf50e0000000099900e3f62850b3fc6e2683f52289e3e52289ebe1ef575be8ba1f20e0000000099910e3f5e830b3fc3e2693fc23dc53ecd0487be331333be91a8f30e00000000948b083f62850c3fc7e36a3f66a6a93e66a6a9be99392ebe8da3f40e00000000928d0a3f5f850c3fc2e46c3f52a8cf3ec20d8dbe47c1b8bd8fa6f30e000000008886063f63870d3fc7e46c3f14a6b13e14a6b1bef558b4bd8aa0f30e000000008785043f5e860d3fc2e56d3f4721d33ef6708fbe0ad723b38ca3f00e000000007d82023f64880e3fc7e66d3fcd7cb43ecd7cb4be0ad723338ba1f70e000000007b80013f5f870d3fc1e76f3fc23dc53e851333becd0487be96adf20e000000009a8f0d3f64850b3fc9e1673f66a6a93e99392ebe66a6a9be94acf60e00000000a095133f64830b3fc7de623f14bed93e855b3cbe855b3cbe91aaf20e00000000948d0c3f64850b3fc9e1683ff588e63e859b44be1e8dc1bd91a9f10e000000008887073f67870c3fcce46b3faec7ea3ecd4c48bea4a8a4b391aaf40e000000007981023f69890d3fcbe56c3f52a8cf3e47c1b8bdc20d8dbe98b0f40e00000000998e0d3f67850b3fcbdf643f14a6b13ef558b4bd14a6b1be94abee0e00000000a195143f67850c3fc7dd613ff588e63e1e8dc1bd859b44be92acef0e00000000978e0d3f67860c3fcadf653f0a07f53eb83ecabdb83ecabd91acf40e000000008888083f69860c3fcee2683f99f9f93ec26dcebd0ad723b391abf30e000000007981043f6d880d3fcee36a3fb8d6d33e8fa467bae1f28fbe96afec0e000000009a8e0d3f6c880c3fccde633f0a17b53e85a467ba0a17b5be96aff00e00000000a094133f6c870d3fc8da5d3fa370eb3e82a467ba7bfc48bea0bcfe0d00000000938d0c3f6f8a0e3fcfe0663f7bb4fa3ecea467ba5220cfbd9cb8fa0d000000008687083f738c0f3fd0e2683f0000003f33b3a3b1000030b49cb7f90d000000007780033f758d0f3fd1e46a3f0a07f53eb83ecabdb83eca3d90abf70e000000006e7c003f6f890d3fcce46c3ff588e63e859b44be1e8dc13d8da6f40e000000006e7c003f6b890e3fc8e46c3ff588e63e1e8dc1bd859b443e91aaf90e00000000c2eef83e708a0d3fc9e46c3f14bed93e855b3cbe855b3c3e8da7f90e00000000caf0f83e6d8a0e3fc9e66e3f52a8cf3e47c1b8bdc20d8d3e8ba5f80e00000000acdeec3e718b0e3fc5e36c3fc23dc53e851333becd04873e8fa6fb0e00000000b6e4f43e6d880d3fc5e56e3f14a6b13ef558b4bd14a6b13e87a0f70e00000000a0d8ea3e728b0f3fc0e26b3f66a6a93e99392ebe66a6a93e899ef50e00000000a6daec3e6e890c3fc0e56e3f4709b53eae777ebeae777e3e8ba1f60e00000000b8e4f03e6a890e3fc3e76f3f52289e3e1ef575be52289e3e859bf40e00000000acdcec3e6c8a0e3fbfe66f3f52289e3e52289ebe1ef5753e8a9ff60e00000000bae2ee3e678a0e3fbfe8703f145e933e145e93be145e933e8297f20e00000000b2dae63e68890e3fbee66f3fcd04b53e999909aecd04b53e8ba2f20e000000009cd6e83e758b0e3fc0e16b3f33dbd43e14aec72deb398e3e8da5f10e00000000aae0f03e778d0f3fc5e36c3f66a6a93e66a6a9be99392e3e839af10e00000000cee6ee3e62890f3fbfe76f3fc23dc53ecd0487be3313333e8ca3f50e00000000c8eaf43e67890e3fc6e86f3f3383ec3e9999192e0aef433e8ba5ee0e00000000b8e6f23e748c0f3fc7e16a3f14a6b13e14a6b1bef558b43d879df40e00000000747e003f61890f3fc1e76f3f52a8cf3ec20d8dbe47c1b83d8da5f70e00000000dcf6fc3e66890e3fc9e86f3fc23db23eb836b33dc23db23e8ba3ef0e000000009ad8ea3e7d8f103fc0e06b3f145ed03ea4a8b73d148e8d3e90a8ee0e00000000a6e2f03e7c8f103fc5e26b3feb39aa3e52f82d3eeb39aa3e8eabf80d000000009adaea3e8495153fbedd673f7be4c53e00d8323e5c7f873e97b2f90d00000000a4e0ee3e8494133fc3df693febb19e3e00f0753eebb19e3e93adf10d000000009edcea3e8997143fbedd683feba1b53eae777e3eae377f3e97b2f30d00000000aae4f03e8a97153fc5df693f3de2933eae67933e3de2933e97afec0d00000000a4e2f03e919a163fc2df693febb19e3ef6409e3e00b0763ea5baed0d00000000b4f2fe3e9ba7273fb8c4423f7be4c53eeb09873ee1aa333e9bb4ec0d00000000baeef83e8f99153fc8e0693feb39aa3e85c3a93e5ccf2e3ec6d7fa0d000000006782083fa7b3373faca71c3f145ed03e1f158d3e3d62b93da1bef60c00000000687c003f939b183fcddf683fc23db23eaec7b13e33f3b43dd2ddef0e0000000075880c3fb4bd413f9f90033fb8d6d33e47798f3e295c0fb4a7c3f50c000000007581053f979c183fd0e0673f0a17b53ea4a0b43e8fc2f5b3e9f1f80e00000000818c0f3fbac2463f2a07ed3eb85eda3e0a273c3e0aff3c3e9eb8f90d00000000baeefa3e8392113fcae16b3feb31e73e3d72443e9931c23d9cb6f00d00000000cef6fe3e8695133fcfe26a3fa370eb3e6626483e0ad723b49bb7ed0d00000000737e013f8595143fd3e2693feb31e73eeb79c03d3d42453e9ab5fb0d00000000baecf83e7c8f103fcae26a3fccbcf53ef530c93d66eeca3d9cb7f80d00000000687b003f7b8f103fcfe36b3f7bb4fa3e5268cd3d7b142eb49ebaf80d000000007780033f7b90113fd3e36a3f7b14fb3e0000002dc2c5c73d8fa9f00e00000000cef2fa3e738b0f3fcde26a3f145ed03e1f158d3eeb61b9bdacc6f20c0000000085880a3f959b173fd2df663fc23db23eaec7b13e33f3b4bdeaeff00f000000008b8f113fbec64a3f16f1d63e7be4c53eeb09873ee1aa33beabc5ee0c000000008f890b3f939a173fd2de643feb39aa3e85c3a93e5ccf2ebef8faf80f000000009291133fbec74b3f0ae5cc3eeba1b53eae777e3eae377fbec2d7fe0c00000000978e103f94a0213fc5c8453febb19e3ef6409e3e00b076bef1f3f010000000009693143fbdc94c3f02ddc43eebb19e3e00f0753eebb19ebedde5f60e000000009b93143fa6b83d3f9f8f023f3de2933eae67933e3de293bef7f8f610000000009994153fbcc94c3ffcd6c03eeb39aa3e52f82d3eeb39aabeb0c9fe0c000000009e92133f8293133fcad95c3f7be4c53e00d8323e5c7f87beacc7fd0c00000000978d0e3f8293133fcedc613fc23db23eb836b33dc23db2bea1b9f20d000000009f94143f768c0f3fc9da5d3f145ed03ea4a8b73d148e8dbea2bbf40d000000009b90103f768d0f3fccdc613fb85eda3e0a273c3e0aff3cbea0b9eb0d000000008d880a3f8393133fd1de643feb31e73eeb79c03d3d4245bea1baf40d000000008f890a3f788d0f3fd0df653feb31e73e3d72443e9931c2bdaac6fc0c000000008386083f8594133fd3e1673fccbcf53ef530c93d66eecabd9db8f40d000000008586073f7a8f103fd3e1683f145e933e145e93be145e933e8096f20e00000000b2d8e63e67890e3fbde66f3f52289e3e1ef575be52289e3e859cf60e00000000acdaea3e6b890e3fbfe66e3fae777e3eae777ebe4709b53e7a8fee0e0000000098c2d43e69870c3fb9e36d3f1ef5753e52289ebe52289e3e7e90ee0e00000000aad2e43e65870b3fb9e6703f8513333ecd0487bec23dc53e748af80d0000000092b4c43e67850b3fb3df6a3f99392e3e66a6a9be66a6a93e7386f30d000000009eb8c43e60850b3fb0e26c3ff5c0b83dc20d8dbe52a8cf3e6a7df70c000000008aa2ae3e6383083fa7d95f3ff558b43d14a6b1be14a6b13e6274f20c000000009aa4b03e587f073fa2d7633f295c8f33f6708fbe4721d33e586afa0b000000008488923e5e79023f9dc8363f8fc27533cd7cb4becd7cb43e4e62f90b0000000092868e3ea8e6fc3e98c33f3fcd04873e851333bec23dc53e7d94f30e000000009ccee03e6e880d3fbde36c3f66a6a93e99392ebe66a6a93e8ba2fd0e00000000a8daea3e6e880c3fc3e66e3f855b3c3e855b3cbe14bed93e7c91fb0d000000008ebacc3e6c860a3fb6e06a3f1e8dc13d859b44bef588e63e6d84fc0c00000000809eaa3e6b860b3fabd85b3f3d9aa233cd4c48beaec7ea3e5d70fd0b000000007686963e6a81083f9ec6373fc20d8d3e47c1b8bd52a8cf3e839af40e0000000096cee03e738b0e3fbde26c3f14a6b13ef558b4bd14a6b13e8aa2f60e000000009ed6e63e748b0f3fc1e36c3f859b443e1e8dc1bdf588e63e7e94f90d0000000084b8cc3e72890d3fb4de683fb83eca3db83ecabd0a07f53e6a7fed0d000000007ca2b03e71870c3fafd7563f429eac33c26dcebd99f9f93e5e6de90c0000000070889a3e72880e3fa1c72b3feb398e3e703d0aae33dbd43e869ff40e0000000096d0e03e788d103fbee16b3fcd04b53e999909aecd04b53e8da6f60e00000000a2dcec3e768c0f3fc1e26b3f0aef433e7b140e2d3383ec3e8299f80d0000000084bcce3e788d0e3fb6dd673fc2c5c73d5c8f1eae7b14fb3e788dfb0c0000000078a4b43e798c0e3fadd5513faeffaf337bd823b20000003f6e7ffd0b000000006e8ea23e798e143fa2c82f3fb83ecabdb83ecabd0a07f53e555be70b000000006a6e963e7287113f2255d33e1e8dc1bd859b44bef588e63e4d56ea0b00000000706c8a3e67780b3f2457e13e859b44be1e8dc1bdf588e63e5e51ea0a000000006862ac3e738b1c3f0c3a6a3e855b3cbe855b3cbe14bed93e554de90a000000007266a03e667a123f083e723ec20d8dbe47c1b8bd52a8cf3e6f52ef09000000007066c03e728d1f3fccf5393ecd0487be331333bec23dc53e674cef09000000007866ba3e657c183fccf9353e14a6b1bef558b4bd14a6b13e8952f808000000007c72d83e7291243f90b1193e66a6a9be99392ebe66a6a93e784dfb08000000008676d03e627b1e3f94ad1d3eae777ebeae777ebe4709b53e5c48f00900000000826cb43e596a133fd0fd453e52289ebe1ef575be52289e3e7547fa08000000008e76c63e5666163fa0bd193e1ef575be52289ebe52289e3e5640eb0900000000947aae3e4d5b0e3fc8e1353e145e93be145e93be145e933e6b43fa08000000009880bc3e4d5b133fa4b51d3ecd04b5be9999092ecd04b53e9558f708000000007878e03e7da2263f90b5213eeb398ebe703d0a2e33dbd43e7859f009000000006868c43e7f9d243fd8013e3e99392ebe66a6a9be66a6a93e4442e60a000000008e749c3e4e5e013ffe16813e331333becd0487bec23dc53e4a49ea0a00000000806a9c3e596b073f0425893e0aef43be7b140ead3383ec3e6859ec0a000000006468b63e7d961e3f18466a3ef558b4bd14a6b1be14a6b13e434cf70a000000009078883ea0caf43e123fcb3ef5c0b8bdc20d8dbe52a8cf3e4b55fb0a000000007e708a3e5c70023f1847d33ec23db2beb836b33dc23db23e9f60f608000000007684e63e8db4293f98c9253e148e8dbea4a8b73d145ed03e845de909000000006676d83e89ac293fd0f9353eeb39aabe52f82d3eeb39aa3ea068f108000000007492e63e99c1253f98cd253e5c7f87be52d8323e7be4c53e8562e409000000006886dc3e95b9263fd401363eebb19ebe00f0753eebb19e3ea570f508000000007a9cee3ea4c7243fb8f1313eae377fbeae777e3eeba1b53ee1cbf50b0000000060890c3fbbdb523f60fd403e3de293beae67933e3de2933edbb9fe09000000005782073fb7d9463f78253d3e00b076bef6409e3eebb19e3efaeae511000000007e92133fd1df5b3f08d5403ee1aa33beeb09873e7be4c53ef9ebe911000000007991123fcdde5c3f20dd483e5ccf2ebe85c3a93eeb39aa3efaece811000000007b91123fd0de5c3f20e1483e3d62b9bd1f158d3e145ed03efaeff01100000000768f113fc9dc5b3f48f5583e33f3b4bdaec7b13ec23db23efbf0ef1100000000778f113fcddc5b3f40f9583e295c8f3347798f3eb8d6d33efdf6fa1100000000728c103fc3d8593f781d7d3e8fc27533a4a0b43e0a17b53efef7f71100000000768d103fc8d8593f70217d3e0aff3cbe0a273c3eb85eda3ef3e4fd0d00000000688d103fbedc593f58ed483e9931c2bd3d72443eeb31e73ef9eef31100000000738f113fc4db5b3f50f1583e0ad7a3336626483ea370eb3ee6e2fb0f0000000064870c3fb4d3563fdaa0883e3d4245beeb79c03deb31e73e7967fd09000000006072be3e8baa283f0c366a3e66eecabdf530c93dccbcf53eded4fe0d000000005d870c3faed5573fa015653e0ad7a333a468cd3d7bb4fa3e7c8afa0b000000006c96a63e8396153fa4ca2d3fc2c5c7bd0ad71d2e7b14fb3e5f64e80b0000000064769e3e7c931a3f285ddf3e3d62b93d1f158d3e145ed03eeeecfa10000000006b880d3fb9d0543fe0b29a3e33f3b43daec7b13ec23db23ef4eff01200000000768c0f3fc4d4573fcaa2903ee1aa333eeb09873e7be4c53ec4cdf90e000000005b7e053fa2bb403f321bfd3e5ccf2e3e85c3a93eeb39aa3eececf41100000000718a0e3fbcce523fecc4ac3eae377f3eae777e3eeba1b53e92a9ee0d0000000096d6e43e8d99163fbbdc663f00b0763ef6409e3eebb19e3ed2dbfb0e000000006382093fabbf443f280df33eebb19e3e00f0753eebb19e3e95aeef0d00000000a2e0f03e8c98153fbfde683f3de2933eae67933e3de2933e97afec0d00000000a4e2f03e939b173fc0dd683feb39aa3e52f82d3eeb39aa3e98b1fb0d000000009edeee3e8192113fc1df6a3f5c7f873e52d8323e7be4c53e90a9f70d0000000094d4e43e8393133fbcdd673fc23db23eb836b33dc23db23e8aa3f00e000000009ed8e83e7b8e0f3fc0df693f148e8d3ea4a8b73d145ed03e8ba6fc0d0000000092cede3e7d90113fbadd673f0aff3c3e0a273c3eb85eda3e88a0f20d000000008ac8d83e8696153fb7da633f3d42453eeb79c03deb31e73e889ff50d0000000088c4d43e7e90113fb9de653f9931c23d3d72443eeb31e73ea6b2f20d0000000096e0f43e97b3393f9c99083f66eeca3df530c93dccbcf53e7f94f90c0000000076a8b63e7f91123faed3503f145e93be145e93be145e933e6a45fd0800000000987cbc3e4f5d123fa8c5213e52289ebe1ef575be52289e3e7346f90800000000907ac63e5667173f98ad193e4709b5beae777ebeae777e3e7740ed0800000000a28eda3e52601a3f7475113e52289ebe52289ebe1ef5753e6a3ef20800000000a892d43e48530f3f8c890d3ec23dc5becd0487be8513333e7e3ae20800000000c0b6ee3e4c561c3f54490d3e66a6a9be66a6a9be99392e3e6a39e80800000000bcace43e45500e3f74610d3e52a8cfbec20d8dbe47c1b83d9842f907000000006d74073f4b58183f402d113e14a6b1be14a6b1bef558b43d6d37e10800000000d8defe3e44530f3f5c39113e4721d3bef6708fbe0ad72333a047f70700000000839f0e3f4b5e1a3f3c39213ecd7cb4becd7cb4be000000008141fc07000000008196103f43550e3f583d153ec23dc5be331333becd04873e8843e908000000009c8ae83e5d72233f606d153e66a6a9be99392ebe66a6a93e7d4dfb08000000008472c63e62781f3f98b9213e14bed9be855b3cbe855b3c3ea346fd0700000000b4b0fe3e5865213f4041153ef588e6be859b44be1e8dc13dae46f407000000006f81013f5664233f28251d3eaec7eabecd4c48be8f7a2533b44bf3070000000082a1103f5668253f202d293e52a8cfbe47c1b8bdc20d8d3e954ae90800000000948aea3e6e8e273f5c75193e14a6b1bef558b4bd14a6b13e8950f408000000007c72d63e708f233f8cb1153ef588e6be1e8dc1bd859b443eb74cf807000000005956013f6987263f30411d3e0a07f5beb83ecabdb83eca3dbf4bf107000000006b750a3f6680263f1829293e99f9f9be706dcebd0ad72333c353ef070000000084a30d3f6684283f0c292d3e33dbd4be1e85cbadeb398e3e9c50e508000000008a88f43e7ba2243f5c89153ecd04b5be9999092ecd04b53e9258f608000000007676e03e7da2243f94b91d3e3383ecbe999919ae0aef433ec258f907000000005457043f7da6253f345d213e7b14fbbe000000adc2c5c73dcb58ec07000000006d7d0c3f7aa3243f0c3d253e000000bf33b3a33100000000cd60eb070000000084a20f3f779f243f0849313e145ed0bea4a8b73d148e8d3eaa5be608000000008c9af83e8fb9283f64a1213ec23db2beb836b33dc23db23e9d60f408000000007686ec3e8eb6273f94c5213e7be4c5be52d8323e5c7f873eab64e808000000008aa6fe3e9dc5263f78b5213eeb39aabe52f82d3eeb39aa3ea168f308000000007692e83e98bf283fa4dd293eeba1b5beae777e3eae377f3eab6be808000000008cb2fc3ea6cb273f84c9253eebb19ebe00f0753eebb19e3eaa70f708000000007a9cee3ea2c5293fb0e9313eebb19ebef6409e3e00b0763ec99feb0900000000567d063fb7d83e3f703d393e3de293beae67933e3de2933ec9ace60a0000000059830a3fb8da483f6c193d3eeb39aabe85c3a93e5ccf2e3ed29df70800000000587a063fbad8343f7861313e7be4c5beeb09873ee1aa333ecf79fc07000000005467043faacf213f64b9213eb85edabe0a273c3e0aff3c3ed271fb07000000005566063fa0c9243f509d253eeb31e7beeb79c03d3d42453ec964f607000000005763053f8ebd243f3475213ec23db2beaec7b13e33f3b43ddea2f008000000006e890c3fbdd8333f5855353e145ed0be1f158d3e3d62b93dda7ef80700000000667a0c3faecf223f48a5293eeb31e7be3d72443e9931c23ddb73f207000000006d830c3fa1c8223f2c852d3eccbcf5bef530c93d66eeca3dd468f30700000000687c0a3f93bd253f2065293e0a17b5bea4a0b43e00000000e1b1e209000000008293143fc3d93c3f38253d3eb8d6d3be47798f3e00000000e482f107000000007c91113fb0cc223f40a9393ea370ebbe6626483e00000000dd7af207000000008096113fa2c5223f2889313e7bb4fabea468cd3d00000000d66cec0700000000829a0f3f8eb8253f1065313e52289ebe52289ebe1ef575be835bf10800000000add0393f4c6f123f94b5693e4709b5beae777ebeae777ebe925feb0800000000b1d3333f54781b3f7ca5613e52289ebe1ef575be52289ebe966af50800000000b8d63c3f567a193fcee6803e145e93be145e93be145e93be8864f70800000000b3d23d3f5076153fa4bd753e66a6a9be99392ebe66a6a9bea571f30800000000bdd8393f6388203fcae8823ec23dc5be331333becd0487bea463e50800000000b5d52e3f5d801e3f6ca95d3e14a6b1bef558b4bd14a6b1beaf76ef0800000000c1d8343f6c8f1f3f90d97d3e52a8cfbe47c1b8bdc20d8dbeb26be50800000000b9d62a3f6b8f213f64b1613e0a17b5be2ba267ba0a17b5beb97ded0800000000c4d6323f799a1f3f90dd7d3eb8d6d3be0ca267bae1f28fbebd70e00800000000bad2263f799a203f60c1613e66a6a9be66a6a9be99392ebe7d4ee80800000000a4c92d3f4766103f8091453ec23dc5becd0487be331333be9151e20800000000a4ca263f4f6f1a3f5c81413e14bed9be855b3cbe855b3cbeba5ffb0700000000a7ca213f5a7a213f44793d3ef588e6be1e8dc1bd859b44becc6efa0700000000accf1d3f6a8e223f3881493ea370ebbec7a167ba7bfc48bed876f70700000000aecb1e3f789d223f348d4d3e14a6b1be14a6b1bef558b4bd7943df080000000093b9203f45600f3f60592d3e52a8cfbec20d8dbe47c1b8bda351fb070000000094ba1c3f4c68193f44592d3ef588e6be859b44be1e8dc1bdb858f6070000000097c01b3f5974223f2c55353e0a07f5beb83ecabdb83ecabdcc60f207000000009bc1123f678a253f1c593d3e7bb4fabecba167ba5220cfbdd469ee07000000009cbb163f779d233f18693d3ecd7cb4becd7cb4be000000007f41fc070000000081960f3f42540f3f5c3d193e4721d3bef6708fbe0ad723339f48f70700000000829f103f4a5e193f3c39213eaec7eabecd4c48be8f7a2533b74cf3070000000083a30e3f576c253f2031293e99f9f9be706dcebd0ad72333c651ed070000000084a0103f6483273f10312d3e000000bf33b3a33100000000d161ed070000000085a10e3f7aa2253f0849353e145ed0bea4a8b73d148e8dbedd8bfe0700000000bcce263f87a51d3f64c5653ec23db2beb836b33dc23db2bec284ec0800000000c3d12e3f88a4223fc8f2803eeb39aabe52f82d3eeb39aabec68beb0800000000c2cd2c3f94aa203fccf8823e7be4c5be52d8323e5c7f87becb82e10800000000bac7243f99b2223f74d96d3eebb19ebe00f0753eebb19ebec78ce60800000000c0c72a3f9db01f3fa0f97d3eeba1b5beae777e3eae377fbecd88e00800000000b7c2233fa2b5203f7cd96d3e3de293beae67933e3de293bef5e1d81000000000a19b193fd0dc563f04e14c3eebb19ebef6409e3e00b076befde6e10e00000000a09b193fcfdc533f04e54c3e7be4c5beeb09873ee1aa33bee991f50700000000abb91b3fa6bc1e3f60c9593eeb39aabe85c3a93e5ccf2ebefee0e50c000000009c9a183fcddb4e3f0ced483e145ed0be1f158d3e3d62b9bde889f0070000000097a8143fadc51e3f48b1413ec23db2beaec7b13e33f3b4bdf2c8e10a00000000959a163fc8da453f2009453eb8d6d3be47798f3e00000000e184f507000000007b90103fb0cb203f44a5353e0a17b5bea4a0b43e00000000f9c1fa08000000008394133fc3d93a3f402d413eb85edabe0a273c3e0aff3cbee689f40700000000adbe1b3f9bb61f3f50b9553eeb31e7be3d72443e9931c2bde381ef070000000098ac163f9fbe203f3095413ea370ebbe6626483e00000000e178ed070000000081980e3fa0c3223f2489353eeb31e7beeb79c03d3d4245bee182f80700000000afc41b3f8bab233f3c9d553eccbcf5bef530c93d66eecabde278f007000000009cb5163f8fb2223f2081413e7bb4fabea468cd3d00000000dc6ff00700000000819a0f3f92b9263f1469353e145e93be145e93be145e93be8967f80800000000b4d43e3f5076133fd2e2843e52289ebe1ef575be52289ebe946af50800000000b8d43b3f567c1a3fcee4803eae777ebeae777ebe4709b5be8367e50900000000bdd6443f587e173fe6fc923e1ef575be52289ebe52289ebe765fe60900000000b5d2443f4e72103fe8fc8e3e851333becd0487bec23dc5be8073f70900000000bdd24a3f577b153f0219bb3e99392ebe66a6a9be66a6a9be6f64f10900000000b4d04b3f4c710d3ff404a93e47c1b8bdc20d8dbe52a8cfbe7a7bed0a00000000bac9493f587d0e3f8fa6053ff558b4bd14a6b1be14a6b1be6667e90a00000000b2cb4d3f4c73073f1031e73e8fd2de32f6708fbe4721d3be818bf30b00000000b5bb3e3f5c7f0b3fa4c2333f006065b3cd7cb4becd7cb4be6c79ea0b00000000aebe423f5079063f9abb333fcd0487be331333bec23dc5be8d6de50900000000c1d7413f61851a3fe6fe923e66a6a9be99392ebe66a6a9bea271f30800000000bed8383f63871d3fcae6803e855b3cbe855b3cbe14bed9be8d79f10900000000c3d5473f6287183ffc16b33e1e8dc1bd859b44bef588e6be8782ef0a00000000c0ca473f6183133f2851fb3ec22d10b2cd4c48beaec7eabe858ded0b00000000bbbe403f6587113fa3bc213fc20d8dbe47c1b8bd52a8cfbeab84fe0800000000c7d83f3f6e911b3fe802953e14a6b1bef558b4bd14a6b1beaf77f10800000000c1d7343f6e93213f90d57d3e859b44be1e8dc1bdf588e6be9983f10900000000c8d4443f6d8d193f0223b73eb83ecabdb83ecabd0a07f5be8f89eb0a00000000c4c9453f6c8b153f2651f73ec22d1033c26dcebd99f9f9be949aee0b00000000bebb3b3f6d8b133fa7c1293fe1f28fbe61a267bab8d6d3beb687f80800000000c9d73a3f78961f3fe002913e0a17b5be2ba267ba0a17b5bebb7eee0800000000c3d5313f7a9a213fc8f0803e7bfc48bea0a267baa370ebbe9f85e80900000000cbd3403f78961b3ffa20b33e5220cfbd14a367ba7bb4fabe9892e70a00000000c8c8423f7a96193f93ac013f000070b4eb51b82a000000bff0eaf50f00000000ab9f1e3faccc4f3fdcb09a3eb83eca3db83ecabd0a07f5be97a9f60c00000000b4ad303f6d8b123fb7cf463f1e8dc13d859b44bef588e6be8e9df20c00000000b2ae2f3f65860f3fb4d0483f859b443e1e8dc1bdf588e6be96a8f00d00000000aca3243f6a870e3fbed5533f855b3c3e855b3cbe14bed9be96a8f30d00000000aaa1213f65850d3fbed95a3fc20d8d3e47c1b8bd52a8cfbe9ab2fb0d00000000a59a1a3f68850c3fc4d95b3fcd04873e851333bec23dc5be94a7ee0e00000000a39a183f63820a3fc3dc5f3f14a6b13ef558b4bd14a6b1be92a9ee0e00000000a196163f67850b3fc6da5f3f66a6a93e99392ebe66a6a9be97adf50e00000000a196133f64830a3fc6de633fae777e3eae777ebe4709b5be8fa4ef0e00000000a59c1a3f62840b3fc2de633f52289e3e1ef575be52289ebe91a7f30e000000009f94113f62830a3fc5e0663f1ef5753e52289ebe52289ebe93a8fc0d00000000a098153f5f840b3fc0e1673f145e933e145e93be145e93be8fa4f10e000000009e96133f5e830a3fc2e1673f0a17b53e85a467ba0a17b5bea4bdfd0d00000000a094133f6e880d3fc8db5e3fe1f28f3eb0a367bab8d6d3be9fb4f50d00000000a79a193f6c870c3fc3d75a3f99392e3e66a6a9be66a6a9be8b9cf30d00000000a4a11f3f5b81093fbadd623f3313333ecd0487bec23dc5be8b9ff10d00000000a8a3233f61840c3fbdda5c3f7bfc483eefa367baa370ebbea8bbfe0c00000000aca0203f718a0f3fbfd6553ff558b43d14a6b1be14a6b1be788af00c00000000a8ae303f567f0a3fadd1513f47c1b83dc20d8dbe52a8cfbe8696f20c00000000b0af303f5f820b3fb2d14d3fc23db23eb836b33dc23db2bea1b9f30d000000009f93133f758c0f3fc9d95d3f148e8d3ea4a8b73d145ed0bea3b8f00d00000000a698183f798e103fc5d7593feb39aa3e52f82d3eeb39aabeafc7fc0c00000000a195153f8293133fcad95c3f5c7f873e52d8323e7be4c5becfd8f20e00000000a297173f99b2383fa294083febb19e3e00f0753eebb19ebedce5f50e000000009b93143fa6b93e3f9f8f013fae377f3eae777e3eeba1b5bef1f0ee11000000009d96163fb9c84c3ffad4c03e3de2933eae67933e3de293bef7f7f510000000009994153fbcc94d3ffcd6be3e00b0763ef6409e3eebb19ebefdfaef12000000009a95163fc5cf523fdab8a63ee1aa333eeb09873e7be4c5befdf8ef12000000009e98183fc1cf523fd6b4a03e5ccf2e3e85c3a93eeb39aabefbf7ec12000000009b96173fc7d1533fd0b09e3eeb61b93d1f158d3e145ed0befbf4eb1200000000a19a1a3fc5d1533fc8a8983e33f3b43daec7b13ec23db2befcf5ea12000000009e98193fc8d1533fcaac9a3e5c8f42b447798f3eb8d6d3bef9f0e61200000000a39b1b3fc8d3543fb89e8c3ec2f528b4a4a0b43e0a17b5bef8efe41200000000a09a1b3fcbd4553fb69a8a3e0aff3c3e0a273c3eb85edabef1eff11100000000a199193fb3c84c3ff6ceb83e9931c23d3d72443eeb31e7befaf4ed1200000000a39a1a3fc0d1533fcaa8963eae4761b46626483ea370ebbef7eee61200000000a59c1b3fc4d4543fb8988a3e3d42453eeb79c03deb31e7bed0d9fd0d00000000a99d1c3f92af363fa297083f66eeca3df530c93dccbcf5bef6f1f71000000000a79c1c3fb1ca4e3fe4baa63e1e856bb4a468cd3d7bb4fabef7eee91200000000a69c1c3fbfd3543fba988a3e5220cf3d54a367ba7bb4fabebac2fc0c00000000b3a7273f7ea0273fa8a7173feb61b9bd1f158d3e145ed0bef5e8de1200000000a49c1b3fcbd8563f4011753e33f3b4bdaec7b13ec23db2bef4e9dd1200000000a29b1b3fced8573f4011713ee1aa33beeb09873e7be4c5bef2e3d81200000000a39b1a3fcedb583f18ed583e5ccf2ebe85c3a93eeb39aabef2e3d71200000000a19b1a3fd1db583f14f1583eae377fbeae777e3eeba1b5bef1e0d41200000000a29b1a3fcfdc583f04e1503e00b076bef6409e3eebb19ebef2e1d41200000000a09a193fd2dc583f00e14c3eebb19ebe00f0753eebb19ebec98fe70800000000c0c72b3f9eb01d3fd0f8803e3de293beae67933e3de293bef7e2d91000000000a19b1a3fd0dc563f00e14c3eeb39aabe52f82d3eeb39aabec48ae80800000000c3cd2d3f93a91d3f94e57d3e5c7f87be52d8323e7be4c5bec393f10800000000c8ce333f92a71d3fe0048d3ec23db2beb836b33dc23db2bec083e90800000000c4d12f3f88a31e3f90e17d3e148e8dbea4a8b73d145ed0bebf8cf50800000000c9d3353f859f1f3fdc008b3e0aff3cbe0a273c3eb85edabef2e3da1200000000a59c1b3fcada573f20f1583e3d4245beeb79c03deb31e7beab8be60900000000cbcf3a3f879f203ffa1ead3e9931c2bd3d72443eeb31e7bef5e9e01200000000a69d1c3fc8d7563f4811753e66eecabdf530c93dccbcf5bef3e7e01200000000a69c1c3fc5d7573f4009713e + 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: 0, y: 0, z: 0} + m_Extent: {x: 0.5, y: 0.5, z: 0.5} + 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/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexSH0.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexSH0.asset.meta new file mode 100644 index 00000000..af0b0066 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/LMGroup_Sphere_VertexSH0.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c131d839dc7bb0049a7ab1c9cef73ac7 +timeCreated: 1605984215 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_dir.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_dir.tga new file mode 100644 index 00000000..0583b312 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_dir.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_dir.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_dir.tga.meta new file mode 100644 index 00000000..2c71a27a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_dir.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: e88c4b29fe1d1ef48890fbaf39d1a5ca +timeCreated: 1605721938 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_final.hdr new file mode 100644 index 00000000..21ff3070 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_final.hdr.meta new file mode 100644 index 00000000..87443048 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LM0_final.hdr.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: e04cfaceb2759dc43a1d4182c8fc1b38 +timeCreated: 1605721938 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_dir.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_dir.tga new file mode 100644 index 00000000..ef2eb838 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_dir.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_dir.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_dir.tga.meta new file mode 100644 index 00000000..27155ca3 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_dir.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: ebd57ad4d9d87ae4cbde2a489ccb31c4 +timeCreated: 1605721938 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_final.hdr new file mode 100644 index 00000000..81b201c3 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_final.hdr.meta new file mode 100644 index 00000000..cd3832c9 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_LMA1_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 6de1e75e5cd8ba34d871d025929c0054 +timeCreated: 1583668408 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM0.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM0.hdr new file mode 100644 index 00000000..13ec9731 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM0.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM0.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM0.hdr.meta new file mode 100644 index 00000000..7d2f54f4 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM0.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 03d3d94ad78ae0d4dbb9c715f36e3046 +timeCreated: 1583668484 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM1.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM1.hdr new file mode 100644 index 00000000..e21b50a4 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM1.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM1.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM1.hdr.meta new file mode 100644 index 00000000..0d1fc8b7 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM1.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: ca47bffdc07bdde47aecd8042dc33996 +timeCreated: 1583668484 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM2.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM2.hdr new file mode 100644 index 00000000..c5f7735c Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM2.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM2.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM2.hdr.meta new file mode 100644 index 00000000..7a36dee4 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LM0_RNM2.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 8be93d1111ee5384f9f611bd14e8bb45 +timeCreated: 1583668484 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM0.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM0.hdr new file mode 100644 index 00000000..00d9cc20 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM0.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM0.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM0.hdr.meta new file mode 100644 index 00000000..cf4459f2 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM0.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 582f785fea33366439a65f282366fba9 +timeCreated: 1583668484 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM1.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM1.hdr new file mode 100644 index 00000000..54ebb89e Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM1.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM1.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM1.hdr.meta new file mode 100644 index 00000000..11175625 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM1.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 83583286affd2484a9ad1adff12f7b91 +timeCreated: 1583668484 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM2.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM2.hdr new file mode 100644 index 00000000..db5afac2 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM2.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM2.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM2.hdr.meta new file mode 100644 index 00000000..7d72ef3a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_RNM_LMA1_RNM2.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 043f8a624d9a4324da435fc2f711649e +timeCreated: 1583668484 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L0.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L0.hdr new file mode 100644 index 00000000..c9528a35 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L0.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L0.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L0.hdr.meta new file mode 100644 index 00000000..3ba80ed2 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L0.hdr.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: 457d2861877bc034d8a2a74499e6d0cf +timeCreated: 1605719707 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1x.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1x.tga new file mode 100644 index 00000000..5958a402 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1x.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1x.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1x.tga.meta new file mode 100644 index 00000000..98de427b --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1x.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: e633e4a3ddd70f449850b81654a8f872 +timeCreated: 1605719708 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1y.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1y.tga new file mode 100644 index 00000000..c28f60e3 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1y.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1y.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1y.tga.meta new file mode 100644 index 00000000..1928b090 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1y.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: 4d8533fd89561ed428ab72f0e23e3b2a +timeCreated: 1605719707 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1z.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1z.tga new file mode 100644 index 00000000..9c2f746f Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1z.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1z.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1z.tga.meta new file mode 100644 index 00000000..513f875e --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LM0_L1z.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: b3b3f060fbefd7942abe7e4a60893072 +timeCreated: 1605719708 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L0.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L0.hdr new file mode 100644 index 00000000..8756cb90 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L0.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L0.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L0.hdr.meta new file mode 100644 index 00000000..a08d20cf --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L0.hdr.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: e134ce807c66b0f449fd05e446efaf1a +timeCreated: 1599898702 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1x.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1x.tga new file mode 100644 index 00000000..5a1ab25b Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1x.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1x.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1x.tga.meta new file mode 100644 index 00000000..d133e359 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1x.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: d8d237fd3bb7979478fb222bbf08fa03 +timeCreated: 1599898702 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1y.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1y.tga new file mode 100644 index 00000000..cd59c546 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1y.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1y.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1y.tga.meta new file mode 100644 index 00000000..6f22a4fb --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1y.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: 6b863795a72f6304ab5384aef2e1158e +timeCreated: 1599898918 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1z.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1z.tga new file mode 100644 index 00000000..550bce24 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1z.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1z.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1z.tga.meta new file mode 100644 index 00000000..ad7ea4fc --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_directional_SH_LMA1_L1z.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: d294d04da8b0cea4b8e2145b37346477 +timeCreated: 1599898918 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LM0_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LM0_final.hdr new file mode 100644 index 00000000..c06fea00 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LM0_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LM0_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LM0_final.hdr.meta new file mode 100644 index 00000000..0edef87c --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LM0_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 3497fe217a7b81340b5a3fd0fcf0a31b +timeCreated: 1583668796 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LMA1_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LMA1_final.hdr new file mode 100644 index 00000000..5fec0b34 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LMA1_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LMA1_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LMA1_final.hdr.meta new file mode 100644 index 00000000..616edc74 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_lights_LMA1_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 46a6bb65bfdf3424fbde57e7ee988e0f +timeCreated: 1583668796 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_mixed_directional_mode_LM0_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_mixed_directional_mode_LM0_final.hdr new file mode 100644 index 00000000..b14f378a Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_mixed_directional_mode_LM0_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_mixed_directional_mode_LM0_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_mixed_directional_mode_LM0_final.hdr.meta new file mode 100644 index 00000000..52736c01 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_mixed_directional_mode_LM0_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: ce2b1533b3ad3fa4f804a3d0e391ee46 +timeCreated: 1583668907 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LM0_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LM0_final.hdr new file mode 100644 index 00000000..c9676312 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LM0_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LM0_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LM0_final.hdr.meta new file mode 100644 index 00000000..64b6e686 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LM0_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 5679d358d392b9044bb9cc02f954f0e2 +timeCreated: 1605984588 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LMA1_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LMA1_final.hdr new file mode 100644 index 00000000..5b3b1ced Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LMA1_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LMA1_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LMA1_final.hdr.meta new file mode 100644 index 00000000..d8d1bb0c --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_prefabs_bake_LMA1_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 3f63fa3954766c74dbe394566ed41fff +timeCreated: 1583669057 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_0_probes.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_0_probes.asset new file mode 100644 index 00000000..deb4cb6d Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_0_probes.asset differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_0_probes.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_0_probes.asset.meta new file mode 100644 index 00000000..45666c97 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_0_probes.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8829ae5b1e4ce4b41b1b54c5c2c3bc6e +timeCreated: 1605984905 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_dir.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_dir.tga new file mode 100644 index 00000000..4bfc0ec6 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_dir.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_dir.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_dir.tga.meta new file mode 100644 index 00000000..460aefca --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_dir.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: ed219786d4938ba48bcc59ee9d8cdfff +timeCreated: 1583669218 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_final.hdr new file mode 100644 index 00000000..056d6f20 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_final.hdr.meta new file mode 100644 index 00000000..a38b742c --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 99a4c4286c96be7409f20106976a37b2 +timeCreated: 1583669218 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_mask.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_mask.tga new file mode 100644 index 00000000..1855b68f Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_mask.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_mask.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_mask.tga.meta new file mode 100644 index 00000000..11c02476 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LM0_mask.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: d2ce8954375581b459de7b354d206f9b +timeCreated: 1583669214 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_dir.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_dir.tga new file mode 100644 index 00000000..277d1406 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_dir.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_dir.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_dir.tga.meta new file mode 100644 index 00000000..e0eec04e --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_dir.tga.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: 1c4d6e74b2d11694b9d25be271b58a44 +timeCreated: 1622051008 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_final.hdr new file mode 100644 index 00000000..31aa75fe Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_final.hdr.meta new file mode 100644 index 00000000..4a94e182 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 1f723b422002bd94a811653759f73495 +timeCreated: 1583669218 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_mask.tga b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_mask.tga new file mode 100644 index 00000000..2f54ebec Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_mask.tga differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_mask.tga.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_mask.tga.meta new file mode 100644 index 00000000..6970917f --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_shadowmask_LMA1_mask.tga.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 22e707c9cd2d10345ab1d6b95cb6b90d +timeCreated: 1583669218 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 512 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_day_0_probes.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_day_0_probes.asset new file mode 100644 index 00000000..7dc09390 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_day_0_probes.asset differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_day_0_probes.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_day_0_probes.asset.meta new file mode 100644 index 00000000..960a6fda --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_day_0_probes.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ae863f0139589a04db80a5d8df506433 +timeCreated: 1583672298 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_evening2_0_probes.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_evening2_0_probes.asset new file mode 100644 index 00000000..f1431867 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_evening2_0_probes.asset differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_evening2_0_probes.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_evening2_0_probes.asset.meta new file mode 100644 index 00000000..e6b1c8ac --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_sponza_evening2_0_probes.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c298ee15c0c187044b2d8eaff59a1757 +timeCreated: 1583673098 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_0_probes.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_0_probes.asset new file mode 100644 index 00000000..c048437a Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_0_probes.asset differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_0_probes.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_0_probes.asset.meta new file mode 100644 index 00000000..96bccc40 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_0_probes.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ea4b84cde5ca40d42a62c530b0e04175 +timeCreated: 1583673180 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LM0_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LM0_final.hdr new file mode 100644 index 00000000..8a743b41 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LM0_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LM0_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LM0_final.hdr.meta new file mode 100644 index 00000000..c530709a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LM0_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: d29b7ba4f74574249bf056f65a1e309b +timeCreated: 1583673205 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LMA1_final.hdr b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LMA1_final.hdr new file mode 100644 index 00000000..9df7fac2 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LMA1_final.hdr differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LMA1_final.hdr.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LMA1_final.hdr.meta new file mode 100644 index 00000000..aa9dafd9 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_subtractive_LMA1_final.hdr.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 909d43ad760ce1140980dc732e93397c +timeCreated: 1583673205 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_advanced_0.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_advanced_0.asset new file mode 100644 index 00000000..3d8006fe Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_advanced_0.asset differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_advanced_0.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_advanced_0.asset.meta new file mode 100644 index 00000000..c7ba4a52 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_advanced_0.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: aa3bd126528a55844ab95cfe67769ff6 +timeCreated: 1605969881 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_0.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_0.asset new file mode 100644 index 00000000..ed26c9ad Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_0.asset differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_0.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_0.asset.meta new file mode 100644 index 00000000..cb604629 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_0.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8c8300243c6196e4ba1bf74bc81df2f5 +timeCreated: 1605976583 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_shadowmask_0.asset b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_shadowmask_0.asset new file mode 100644 index 00000000..88a4d025 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_shadowmask_0.asset differ diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_shadowmask_0.asset.meta b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_shadowmask_0.asset.meta new file mode 100644 index 00000000..650064a3 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/lightmaps/example_volumes_simple_shadowmask_0.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 473f4b88df6e17246a938ecad2217d7f +timeCreated: 1605977032 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/scripts.meta b/VRCSDK3Worlds/Assets/Bakery/examples/scripts.meta new file mode 100644 index 00000000..d5448c30 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 08e82c658ef173d41a25e4a2cf7046d7 +folderAsset: yes +timeCreated: 1622807246 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs b/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs new file mode 100644 index 00000000..5ba2fb51 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +// Example script, a counterpart to BakeryVolumeTrigger.cs (see that script for more info) +// +public class BakeryVolumeReceiver : MonoBehaviour +{ + public bool forceUsage = false; + + // used by triggers + internal int enterCounter = 0; + internal BakeryVolumeTrigger movableTrigger = null; + + Renderer[] renderers; + MaterialPropertyBlock current; + + // Cache renderers affected by volumes + void Awake() + { + if (renderers == null) renderers = GetComponentsInChildren() as Renderer[]; + if (forceUsage) + { + // HDRP can sometimes (?) fail to use globally set volumes when SRP batching is enabled, so disable it for this object. + SetPropertyBlock(new MaterialPropertyBlock()); + } + } + + // Called by triggers + public void SetPropertyBlock(MaterialPropertyBlock mb) + { + if (renderers == null) renderers = GetComponentsInChildren() as Renderer[]; + for(int i=0; i(); + mb = new MaterialPropertyBlock(); + if (vol.bakedTexture0 != null) + { + mb.SetTexture("_Volume0", vol.bakedTexture0); + mb.SetTexture("_Volume1", vol.bakedTexture1); + mb.SetTexture("_Volume2", vol.bakedTexture2); + if (vol.bakedTexture3 != null) mb.SetTexture("_Volume3", vol.bakedTexture3); + } + if (vol.bakedMask != null) mb.SetTexture("_VolumeMask", vol.bakedMask); + if (mVolumeMin == 0) mVolumeMin = Shader.PropertyToID("_VolumeMin"); + if (mVolumeInvSize == 0) mVolumeInvSize = Shader.PropertyToID("_VolumeInvSize"); + mb.SetVector(mVolumeMin, vol.GetMin()); + mb.SetVector(mVolumeInvSize, vol.GetInvSize()); + if (vol.supportRotationAfterBake) mb.SetMatrix("_VolumeMatrix", vol.GetMatrix()); + } + + // Apply MaterialPropertyBlock to renderers entering the trigger + void OnTriggerEnter(Collider c) + { + var rcv = c.GetComponent(); + if (rcv == null) return; + + Debug.Log(c.name + " entered " + this.name); + + rcv.enterCounter++; + rcv.movableTrigger = movable ? this : null; + rcv.SetPropertyBlock(mb); + } + + // Handle exiting the trigger + void OnTriggerExit(Collider c) + { + var rcv = c.GetComponent(); + if (rcv == null) return; + + Debug.Log(c.name + " exited " + this.name); + + // Only set empty property block, if the counter is 0 (= exited ALL volumes) + rcv.enterCounter--; + if (rcv.enterCounter == 0) rcv.SetPropertyBlock(mbEmpty); + } + + public void UpdateBounds() + { + vol.UpdateBounds(); + mb.SetVector(mVolumeMin, vol.GetMin()); + mb.SetVector(mVolumeInvSize, vol.GetInvSize()); + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeTrigger.cs.meta b/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeTrigger.cs.meta new file mode 100644 index 00000000..3261b37d --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeTrigger.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 88131403915d92648ac25dbc4ffb0e1b +timeCreated: 1605889761 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/scripts/VolumeTestScene2.cs b/VRCSDK3Worlds/Assets/Bakery/examples/scripts/VolumeTestScene2.cs new file mode 100644 index 00000000..80d91b79 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/scripts/VolumeTestScene2.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VolumeTestScene2 : MonoBehaviour +{ + public Transform secondFloor; + public BakeryVolumeTrigger[] secondFloorVolumes; + public float secondFloorHeight; + public bool randomizeLastRoom; + public Transform baseRoom; + public Transform alternativeRoom; + + void SwapRooms() + { + var tmp = alternativeRoom.position; + alternativeRoom.position = baseRoom.position; + baseRoom.position = tmp; + } + + void UpdateRooms() + { + for(int i=0; i 0.5f) col.rgb = pow(col.rgb, 2.2f); + + return col; + } + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftCubemap2Strip.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftCubemap2Strip.shader.meta new file mode 100644 index 00000000..6137dbbe --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftCubemap2Strip.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c73e5686bbd8c334da43020465ac8360 +timeCreated: 1526836856 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftCubemap2StripExport.shader b/VRCSDK3Worlds/Assets/Bakery/ftCubemap2StripExport.shader new file mode 100644 index 00000000..5f5ec6ce --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftCubemap2StripExport.shader @@ -0,0 +1,78 @@ +Shader "Hidden/ftCubemap2StripExport" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + // No culling or depth + Cull Off ZWrite Off ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + #if UNITY_UV_STARTS_AT_TOP + o.uv.y = 1-o.uv.y; + #endif + return o; + } + + samplerCUBE _MainTex; + float4x4 transform; + float4 isLinear_isDoubleLDR; + + float4 frag (v2f i) : SV_Target + { + float face = floor(i.uv.y * 6.0f); + i.uv.y = frac(i.uv.y * 6.0f); + + float2 st = i.uv * 2.0f - 1.0f; + float3 vec; + if (face == 0.0f) { + vec = float3(1, -st.y, st.x); + } else if (face == 1.0f) { + vec = float3(-1, -st.y, -st.x); + } else if (face == 2.0f) { + vec = float3(-st.y, 1, -st.x); + } else if (face == 3.0f) { + vec = float3(-st.y, -1, st.x); + } else if (face == 4.0f) { + vec = float3(-st.x, -st.y, 1); + } else { + vec = float3(st.x, -st.y, -1); + } + + vec = mul((float3x3)transform, normalize(vec)); + + float4 color = texCUBE(_MainTex, vec); + if (isLinear_isDoubleLDR.x < 0.5f) color.rgb = pow(color.rgb, 2.2f); + if (isLinear_isDoubleLDR.y > 0.5f) color.rgb *= 4.59f; + return color; + } + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftCubemap2StripExport.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftCubemap2StripExport.shader.meta new file mode 100644 index 00000000..b6412825 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftCubemap2StripExport.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b7f2eeb31adcaf143a9455602daf4853 +timeCreated: 1526836856 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftDefaultAreaLightMat.mat b/VRCSDK3Worlds/Assets/Bakery/ftDefaultAreaLightMat.mat new file mode 100644 index 00000000..10dd5b8b --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftDefaultAreaLightMat.mat @@ -0,0 +1,78 @@ +%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: ftDefaultAreaLightMat + m_Shader: {fileID: 4800000, guid: 44078aff4de957844a86ead7ad169295, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _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} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + - intensity: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftDefaultAreaLightMat.mat.meta b/VRCSDK3Worlds/Assets/Bakery/ftDefaultAreaLightMat.mat.meta new file mode 100644 index 00000000..d2165768 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftDefaultAreaLightMat.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ea803d5e2c877f84e8ca6599c9cefb15 +timeCreated: 1527799464 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftDefaultGlobalStorage.asset b/VRCSDK3Worlds/Assets/Bakery/ftDefaultGlobalStorage.asset new file mode 100644 index 00000000..d9a1bf61 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftDefaultGlobalStorage.asset @@ -0,0 +1,490 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c789d55c4f1cff34799abba03737e8f7, type: 3} + m_Name: ftDefaultGlobalStorage + m_EditorClassIdentifier: + modifiedAssetPathList: + - Assets/Bakery/examples/content/sponza/sponza.FBX + modifiedAssetPaddingHash: + modifiedMeshList: [] + modifiedMeshPaddingList: + modifiedAssets: + - meshName: + - sponza_00 + - sponza_01 + - sponza_03 + - sponza_05 + - sponza_06 + - sponza_07 + - sponza_08 + - sponza_09 + - sponza_10 + - sponza_11 + - sponza_12 + - sponza_13 + - sponza_14 + - sponza_15 + - sponza_16 + - sponza_17 + - sponza_18 + - sponza_19 + - sponza_20 + - sponza_21 + - sponza_22 + - sponza_23 + - sponza_24 + - sponza_25 + - sponza_26 + - sponza_27 + - sponza_28 + - sponza_29 + - sponza_30 + - sponza_31 + - sponza_32 + - sponza_33 + - sponza_34 + - sponza_35 + - sponza_36 + - sponza_37 + - sponza_38 + - sponza_39 + - sponza_40 + - sponza_41 + - sponza_42 + - sponza_43 + - sponza_44 + - sponza_45 + - sponza_46 + - sponza_47 + - sponza_48 + - sponza_49 + - sponza_50 + - sponza_51 + - sponza_52 + - sponza_53 + - sponza_54 + - sponza_55 + - sponza_56 + - sponza_57 + - sponza_58 + - sponza_59 + - sponza_60 + - sponza_61 + - sponza_62 + - sponza_63 + - sponza_64 + - sponza_65 + - sponza_67 + - sponza_68 + - sponza_69 + - sponza_70 + - sponza_71 + - sponza_72 + - sponza_73 + - sponza_74 + - sponza_75 + - sponza_76 + - sponza_77 + - sponza_78 + - sponza_79 + - sponza_80 + - sponza_81 + - sponza_82 + - sponza_83 + - sponza_84 + - sponza_85 + - sponza_86 + - sponza_87 + - sponza_88 + - sponza_89 + - sponza_90 + - sponza_91 + - sponza_92 + - sponza_93 + - sponza_94 + - sponza_95 + - sponza_96 + - sponza_97 + - sponza_98 + - sponza_99 + - sponza_100 + - sponza_101 + - sponza_102 + - sponza_103 + - sponza_104 + - sponza_105 + - sponza_106 + - sponza_107 + - sponza_108 + - sponza_109 + - sponza_110 + - sponza_111 + - sponza_112 + - sponza_113 + - sponza_114 + - sponza_115 + - sponza_116 + - sponza_117 + - sponza_118 + - sponza_119 + - sponza_120 + - sponza_121 + - sponza_122 + - sponza_123 + - sponza_124 + - sponza_125 + - sponza_126 + - sponza_127 + - sponza_128 + - sponza_129 + - sponza_130 + - sponza_131 + - sponza_132 + - sponza_133 + - sponza_134 + - sponza_135 + - sponza_136 + - sponza_137 + - sponza_138 + - sponza_139 + - sponza_140 + - sponza_141 + - sponza_142 + - sponza_143 + - sponza_144 + - sponza_145 + - sponza_146 + - sponza_147 + - sponza_148 + - sponza_149 + - sponza_150 + - sponza_151 + - sponza_152 + - sponza_153 + - sponza_154 + - sponza_155 + - sponza_156 + - sponza_157 + - sponza_158 + - sponza_159 + - sponza_160 + - sponza_161 + - sponza_162 + - sponza_163 + - sponza_164 + - sponza_165 + - sponza_166 + - sponza_167 + - sponza_168 + - sponza_169 + - sponza_170 + - sponza_171 + - sponza_172 + - sponza_173 + - sponza_174 + - sponza_175 + - sponza_176 + - sponza_177 + - sponza_178 + - sponza_179 + - sponza_180 + - sponza_181 + - sponza_182 + - sponza_183 + - sponza_184 + - sponza_185 + - sponza_186 + - sponza_187 + - sponza_188 + - sponza_189 + - sponza_190 + - sponza_191 + - sponza_192 + - sponza_193 + - sponza_194 + - sponza_195 + - sponza_196 + - sponza_197 + - sponza_198 + - sponza_199 + - sponza_200 + - sponza_201 + - sponza_202 + - sponza_203 + - sponza_204 + - sponza_205 + - sponza_206 + - sponza_207 + - sponza_208 + - sponza_209 + - sponza_210 + - sponza_211 + - sponza_212 + - sponza_213 + - sponza_214 + - sponza_215 + - sponza_216 + - sponza_217 + - sponza_218 + - sponza_219 + - sponza_220 + - sponza_221 + - sponza_222 + - sponza_223 + - sponza_224 + - sponza_225 + - sponza_226 + - sponza_227 + - sponza_228 + - sponza_229 + - sponza_230 + - sponza_231 + - sponza_232 + - sponza_233 + - sponza_234 + - sponza_235 + - sponza_236 + - sponza_237 + - sponza_238 + - sponza_239 + - sponza_240 + - sponza_241 + - sponza_242 + - sponza_243 + - sponza_244 + - sponza_245 + - sponza_246 + - sponza_247 + - sponza_248 + - sponza_249 + - sponza_250 + - sponza_251 + - sponza_252 + - sponza_253 + - sponza_254 + - sponza_255 + - sponza_256 + - sponza_257 + - sponza_259 + - sponza_260 + - sponza_261 + - sponza_262 + - sponza_263 + - sponza_264 + - sponza_265 + - sponza_266 + - sponza_267 + - sponza_268 + - sponza_269 + - sponza_270 + - sponza_271 + - sponza_272 + - sponza_273 + - sponza_274 + - sponza_275 + - sponza_276 + - sponza_277 + - sponza_278 + - sponza_279 + - sponza_280 + - sponza_281 + - sponza_282 + - sponza_283 + - sponza_284 + - sponza_285 + - sponza_286 + - sponza_287 + - sponza_288 + - sponza_289 + - sponza_290 + - sponza_291 + - sponza_292 + - sponza_293 + - sponza_294 + - sponza_295 + - sponza_296 + - sponza_297 + - sponza_298 + - sponza_299 + - sponza_300 + - sponza_301 + - sponza_302 + - sponza_303 + - sponza_304 + - sponza_305 + - sponza_306 + - sponza_307 + - sponza_308 + - sponza_309 + - sponza_310 + - sponza_311 + - sponza_312 + - sponza_313 + - sponza_314 + - sponza_315 + - sponza_316 + - sponza_317 + - sponza_318 + - sponza_319 + - sponza_320 + - sponza_321 + - sponza_322 + - sponza_323 + - sponza_324 + - sponza_325 + - sponza_326 + - sponza_327 + - sponza_328 + - sponza_329 + - sponza_330 + - sponza_331 + - sponza_332 + - sponza_333 + - sponza_334 + - sponza_335 + - sponza_336 + - sponza_337 + - sponza_338 + - sponza_339 + - sponza_340 + - sponza_341 + - sponza_342 + - sponza_343 + - sponza_344 + - sponza_345 + - sponza_346 + - sponza_347 + - sponza_348 + - sponza_349 + - sponza_350 + - sponza_351 + - sponza_352 + - sponza_353 + - sponza_354 + - sponza_355 + - sponza_356 + - sponza_357 + - sponza_358 + - sponza_359 + - sponza_360 + - sponza_361 + - sponza_362 + - sponza_363 + - sponza_364 + - sponza_365 + - sponza_366 + - sponza_367 + - sponza_368 + - sponza_369 + - sponza_370 + - sponza_371 + - sponza_372 + - sponza_373 + - sponza_374 + - sponza_375 + - sponza_376 + - sponza_377 + - sponza_378 + - sponza_381 + padding: 2e000000460000002a000000110000000e0000000c0000000400000033000000330000003300000033000000330000003300000033000000330000000a00000007000000060000002b0000002b00000011000000140000001400000014000000140000002a0000001d000000320000003200000032000000320000002a000000080000000d0000000500000087000000fa00000087000000fa00000087000000fa00000087000000fa00000087000000fb00000087000000fb00000087000000fb00000087000000fb00000087000000fb00000051000000510000005100000051000000510000005100000051000000510000005100000051000000510000000c00000006000000060000002700000028000000390000002b000000150000002700000000010000ba0000009b0000009b000000b70000009d000000b7000000b7000000b70000009b000000b70000009d000000b7000000b7000000b70000009b0000009b0000009b00000083000000ba00000000010000ba0000009b0000009b000000b70000009d000000b7000000b7000000b70000009b000000b70000009d000000b7000000b7000000b70000009b0000009b0000009b00000083000000000100002700000006000000270000002700000027000000270000002d0000001000000010000000230000006a000000000100006a000000000100006a000000000100006a000000000100001e0000002c000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000230000006a000000000100006a000000000100006a000000000100006a000000000100001e0000002c000000630000004300000000010000000100004300000000010000430000000001000043000000430000009400000094000000430000009400000043000000940000004300000024000000270000004600000030000000360000002d000000360000001d0000001d0000001d0000001d0000001d0000001d0000001d0000001d00000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad000000000100001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b000000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c000000000100000001000000010000000100004600000046000000460000004900000049000000490000004900000024000000240000002400000024000000220000001800000004000000 + unwrapper: + assetList: + - Assets/Bakery/examples/content/sponza/bush.FBX + - Assets/Bakery/examples/content/floor_lamp.FBX + uvOverlapAssetList: 00000000ffffffff + xatlasWarningShown: 0 + foundCompatibleSetup: 0 + gpuName: + runsNonRTX: 1 + runsOptix5: 1 + runsOptix6: 1 + runsOptix7: 1 + runsOIDN: 1 + alwaysEnableRTX: 0 + checkerPreviewOn: 0 + rtSceneViewPreviewOn: 0 + renderSettingsBounces: 5 + renderSettingsGISamples: 16 + renderSettingsGIBackFaceWeight: 0 + renderSettingsTileSize: 512 + renderSettingsPriority: 2 + renderSettingsTexelsPerUnit: 20 + renderSettingsForceRefresh: 1 + renderSettingsForceRebuildGeometry: 1 + renderSettingsPerformRendering: 1 + renderSettingsUserRenderMode: 0 + renderSettingsDistanceShadowmask: 0 + renderSettingsSettingsMode: 0 + renderSettingsFixSeams: 1 + renderSettingsDenoise: 1 + renderSettingsDenoise2x: 0 + renderSettingsEncode: 1 + renderSettingsEncodeMode: 0 + renderSettingsOverwriteWarning: 0 + renderSettingsAutoAtlas: 1 + renderSettingsUnwrapUVs: 1 + renderSettingsForceDisableUnwrapUVs: 0 + renderSettingsMaxAutoResolution: 4096 + renderSettingsMinAutoResolution: 16 + renderSettingsUnloadScenes: 1 + renderSettingsAdjustSamples: 1 + renderSettingsGILODMode: 2 + renderSettingsGILODModeEnabled: 0 + renderSettingsCheckOverlaps: 0 + renderSettingsSkipOutOfBoundsUVs: 1 + renderSettingsHackEmissiveBoost: 1 + renderSettingsHackIndirectBoost: 1 + renderSettingsTempPath: + renderSettingsOutPath: + renderSettingsUseScenePath: 0 + renderSettingsHackAOIntensity: 0 + renderSettingsHackAOSamples: 16 + renderSettingsHackAORadius: 1 + renderSettingsShowAOSettings: 0 + renderSettingsShowTasks: 1 + renderSettingsShowTasks2: 0 + renderSettingsShowPaths: 1 + renderSettingsShowNet: 1 + renderSettingsOcclusionProbes: 0 + renderSettingsTexelsPerMap: 0 + renderSettingsTexelsColor: 1 + renderSettingsTexelsMask: 1 + renderSettingsTexelsDir: 1 + renderSettingsShowDirWarning: 1 + renderSettingsRenderDirMode: 0 + renderSettingsShowCheckerSettings: 0 + renderSettingsSamplesWarning: 1 + renderSettingsPrefabWarning: 1 + renderSettingsSplitByScene: 0 + renderSettingsUVPaddingMax: 0 + renderSettingsPostPacking: 1 + renderSettingsHoleFilling: 0 + renderSettingsBeepOnFinish: 0 + renderSettingsExportTerrainAsHeightmap: 1 + renderSettingsRTXMode: 0 + renderSettingsLightProbeMode: 1 + renderSettingsClientMode: 0 + renderSettingsServerAddress: 127.0.0.1 + renderSettingsUnwrapper: 0 + renderSettingsDenoiserType: 100 + renderSettingsExportTerrainTrees: 0 + renderSettingsShowPerf: 1 + renderSettingsSampleDiv: 1 + renderSettingsAtlasPacker: 0 + renderSettingsBatchPoints: 1 + renderSettingsCompressVolumes: 0 + renderSettingsRTPVExport: 1 + renderSettingsRTPVSceneView: 0 + renderSettingsRTPVWidth: 640 + renderSettingsRTPVHeight: 360 + modifiedMeshPaddingArray: + modifiedMeshUnwrapperArray: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftDefaultGlobalStorage.asset.meta b/VRCSDK3Worlds/Assets/Bakery/ftDefaultGlobalStorage.asset.meta new file mode 100644 index 00000000..fdf628ee --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftDefaultGlobalStorage.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f4b25053f1346cc4e8e1208e07ec0360 +timeCreated: 1536946135 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftDilate.shader b/VRCSDK3Worlds/Assets/Bakery/ftDilate.shader new file mode 100644 index 00000000..5324319e --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftDilate.shader @@ -0,0 +1,106 @@ +Shader "Hidden/ftDilate" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + // No culling or depth + Cull Off ZWrite Off ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + return o; + } + + UNITY_DECLARE_TEX2D(_MainTex); + + fixed4 frag (v2f i) : SV_Target + { + uint width, height; + _MainTex.GetDimensions(width, height); + int3 center = int3(i.vertex.xy, 0); + + float4 c = _MainTex.Load(center); + if (c.w > 0) return c; + + uint total = 0; + float4 c2 = _MainTex.Load(center, int2(-1,-1)); + if (c2.w>0) { + c += c2; + total++; + } + + c2 = _MainTex.Load(center, int2(0,-1)); + if (c2.w>0) { + c += c2; + total++; + } + + c2 = _MainTex.Load(center, int2(1,-1)); + if (c2.w>0) { + c += c2; + total++; + } + + c2 = _MainTex.Load(center, int2(-1,0)); + if (c2.w>0) { + c += c2; + total++; + } + + c2 = _MainTex.Load(center, int2(1,0)); + if (c2.w>0) { + c += c2; + total++; + } + + c2 = _MainTex.Load(center, int2(-1,1)); + if (c2.w>0) { + c += c2; + total++; + } + + c2 = _MainTex.Load(center, int2(1,1)); + if (c2.w>0) { + c += c2; + total++; + } + + if (total > 0) + { + c /= total; + return float4(c.rgb, 1.0f); + } + + return float4(0,0,0,0); + } + ENDCG + } + } +} + diff --git a/VRCSDK3Worlds/Assets/Bakery/ftDilate.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftDilate.shader.meta new file mode 100644 index 00000000..d82b1ad1 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftDilate.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 966cd9feaf442e64b9154c34e29787e1 +timeCreated: 1595076643 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader b/VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader new file mode 100644 index 00000000..a7fcf048 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader @@ -0,0 +1,59 @@ +// Used on temporary objects captured by BakerySector + +Shader "Hidden/ftFarSphere" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + Tags { "RenderType"="Transparent" "Queue"="Geometry" } + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + float3 normal : NORMAL0; + }; + + struct v2f + { + float3 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + float fade : TEXCOORD1; + }; + + sampler2D _MainTex;; + + v2f vert (appdata v, uint vertID : SV_VertexID) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = float3(v.uv, 0); + float3 wnormal = normalize(mul((float3x3)unity_ObjectToWorld, v.normal)); + float3 wpos = mul(unity_ObjectToWorld, v.vertex); + float3 viewDir = normalize(_WorldSpaceCameraPos - wpos); + o.fade = saturate(dot(viewDir, wnormal)); + return o; + } + + float4 frag (v2f i) : SV_Target + { + float4 color = tex2D(_MainTex, i.uv); + if (color.a < 0.9) discard; + color.rgb *= i.fade; + return color; + } + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader.meta new file mode 100644 index 00000000..6ba352fa --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphere.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7262ab0355c641041a3c02740ab77512 +timeCreated: 1617743762 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereDilate.shader b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereDilate.shader new file mode 100644 index 00000000..29a8d428 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereDilate.shader @@ -0,0 +1,68 @@ +// 1px dilate + +Shader "Hidden/ftFarSphereDilate" +{ + Properties + { + } + SubShader + { + // No culling or depth + Cull Off ZWrite Off ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct v2f + { + float4 vertex : SV_POSITION; + float2 uv : TEXCOORD0; + }; + + v2f vert (uint id : SV_VertexID) + { + v2f o; + float4 pos[6]; + pos[0] = float4(-1, -1, 0.5, 1); + pos[1] = float4(-1, 1, 0.5, 1); + pos[2] = float4(1, 1, 0.5, 1); + + pos[3] = float4(1, 1, 0.5, 1); + pos[4] = float4(1, -1, 0.5, 1); + pos[5] = float4(-1, -1, 0.5, 1); + + o.vertex = pos[id]; + o.uv = o.vertex.xy * 0.5f + 0.5f; + o.uv.y = 1.0f - o.uv.y; + return o; + } + + sampler2D _MainTex; + float _InvCubeSize; + + float4 frag (v2f i) : SV_Target + { + float4 c = tex2Dlod(_MainTex, float4(i.uv,0,0)); + if (c.a > 0) return c; + + int dilate = 1; + for(int y=-dilate; y<=dilate; y++) + { + for(int x=-dilate; x<=dilate; x++) + { + float4 c2 = tex2Dlod(_MainTex, float4(i.uv + float2(x,y) * _InvCubeSize,0,0)); + if (c2.a > 0) c = c2; + } + } + + return c; + } + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereDilate.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereDilate.shader.meta new file mode 100644 index 00000000..a473c0fb --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereDilate.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 95030fde9d087e447be39fccd8818c93 +timeCreated: 1526836856 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereProjClip.shader b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereProjClip.shader new file mode 100644 index 00000000..10040df7 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereProjClip.shader @@ -0,0 +1,106 @@ +// Overlaps two projections, prioritizes closer pixels + +Shader "Hidden/ftFarSphereProjClip" +{ + Properties + { + } + SubShader + { + // No culling or depth + Cull Off ZWrite Off ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct v2f + { + float4 vertex : SV_POSITION; + float2 uv : TEXCOORD0; + }; + + v2f vert (uint id : SV_VertexID) + { + v2f o; + float4 pos[6]; + pos[0] = float4(-1, -1, 0.5, 1); + pos[1] = float4(-1, 1, 0.5, 1); + pos[2] = float4(1, 1, 0.5, 1); + + pos[3] = float4(1, 1, 0.5, 1); + pos[4] = float4(1, -1, 0.5, 1); + pos[5] = float4(-1, -1, 0.5, 1); + + o.vertex = pos[id]; + o.uv = o.vertex.xy * 0.5f + 0.5f; + o.uv.y = 1.0f - o.uv.y; + return o; + } + + sampler2D _CurDepth, _ProjDepth, _CurNormal; + float4x4 _CurInvViewProj, _ProjViewProj; + float3 _CurPos, _ProjPos; + float _InvCubeSize; + + float4 ComputeClipSpacePosition(float2 positionNDC, float deviceDepth) + { + float4 positionCS = float4(positionNDC * 2.0 - 1.0, deviceDepth, 1.0); + positionCS.y = -positionCS.y; + return positionCS; + } + + float3 ComputeViewSpacePosition(float2 positionNDC, float deviceDepth, float4x4 invProjMatrix) + { + float4 positionCS = ComputeClipSpacePosition(positionNDC, deviceDepth); + float4 hpositionVS = mul(invProjMatrix, positionCS); + return hpositionVS.xyz / hpositionVS.w; + } + + float4 frag (v2f i) : SV_Target + { + float curDepth = tex2D(_CurDepth, i.uv).r; // closer is whiter + float3 curWPos = ComputeViewSpacePosition(i.uv, curDepth, _CurInvViewProj); // use different matrix to world + + float distToCur = distance(_CurPos, curWPos); + float distToProj = distance(_ProjPos, curWPos); + if (distToCur < distToProj) discard; // keep current if it's closer + + float texelOffset = _InvCubeSize; + + float3 curWNormal = tex2D(_CurNormal, i.uv).xyz * 2 - 1; + float3 dir = normalize(curWPos - _ProjPos); + if (dot(-dir, curWNormal) <= 0) discard; // keep backfacing + + float4 projPos = mul(_ProjViewProj, float4(curWPos, 1)); + projPos.xyz /= projPos.w; + if (projPos.x < -1 || projPos.y < -1 || projPos.x > 1 || projPos.y > 1 || projPos.z < 0) discard; // keep current outside of projection + projPos.y = -projPos.y; + + float2 projUV = projPos.xy * 0.5f + 0.5f; + float occlusion = 0; + int holeDilate = 2; + for(int y=-holeDilate; y<=holeDilate; y++) + { + for(int x=-holeDilate; x<=holeDilate; x++) + { + float projDepth = tex2D(_ProjDepth, projUV + float2(x,y) * texelOffset).r; + projDepth -= 0.0001f; + + bool occluded = projDepth > projPos.z; + if (occluded) occlusion += 1; + } + } + if (occlusion > 0) discard; + + // clear curDepth + return 0; + } + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereProjClip.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereProjClip.shader.meta new file mode 100644 index 00000000..9a964389 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereProjClip.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 931ec1b7cfa5bbd49a82f46676bdbbda +timeCreated: 1526836856 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRender.shader b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRender.shader new file mode 100644 index 00000000..6ae1d4ae --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRender.shader @@ -0,0 +1,90 @@ +// Used on the scene when capturing from BakerySectors +// Outputs albedo, normal and alpha + +// Shader replacement logic will select subshaders by RenderType +// In SRP we'll choose a pass instead + +Shader "Hidden/ftFarSphereRender" +{ + Properties + { + //_Color ("Color", Color) = (1,1,1,1) + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + // Used by SRP + Tags { "RenderType"="NotReally" } + Pass + { + // Opaque + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #define OPAQUE + #include "ftFarSphereRenderBase.cginc" + ENDCG + } + Pass + { + // Transparent + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "ftFarSphereRenderBase.cginc" + ENDCG + } + Pass + { + // TransparentCutout + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "ftFarSphereRenderBase.cginc" + ENDCG + } + } + SubShader + { + Tags { "RenderType"="Opaque" } + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #define OPAQUE + #include "ftFarSphereRenderBase.cginc" + ENDCG + } + } + SubShader + { + Tags { "RenderType"="Transparent" } + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "ftFarSphereRenderBase.cginc" + ENDCG + } + } + SubShader + { + Tags { "RenderType"="TransparentCutout" } + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "ftFarSphereRenderBase.cginc" + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRender.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRender.shader.meta new file mode 100644 index 00000000..243f46fb --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRender.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8b8960de8c514b94499d406b7caac809 +timeCreated: 1617733388 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderBase.cginc b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderBase.cginc new file mode 100644 index 00000000..2c12619f --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderBase.cginc @@ -0,0 +1,70 @@ +struct appdata +{ + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + float3 normal : NORMAL0; +}; + +struct v2f +{ + float4 vertex : SV_POSITION; + float2 uv : TEXCOORD0; + float3 normal : TEXCOORD1; + float3 worldPos : TEXCOORD2; +}; + +sampler2D _MainTex; +float4 _MainTex_ST; +//float4 _Color; +//float4x4 cullMatrices[64]; +//float cullMatricesCount; + +float2 texelOffset; + +v2f vert (appdata v) +{ + v2f o; + + o.vertex = mul(unity_ObjectToWorld, v.vertex); + o.worldPos = o.vertex.xyz; + + o.vertex = mul(UNITY_MATRIX_VP, float4(o.vertex.xyz,1)); + o.vertex.xy += texelOffset * o.vertex.w; + + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + + o.normal = normalize(mul((float3x3)unity_ObjectToWorld, v.normal)); + + return o; +} + +struct MRT +{ + float4 AlbedoAlpha : SV_Target0; + float4 Normal : SV_Target1; +}; + +MRT frag (v2f IN) +{ + /* + for(int i=0; i 1); + if (!outside) discard; + } + */ + + MRT mrt; + mrt.AlbedoAlpha = tex2D(_MainTex, IN.uv);// * _Color; +#ifdef OPAQUE + mrt.AlbedoAlpha.a = 1; +#else + mrt.AlbedoAlpha.a = max(mrt.AlbedoAlpha.a, 1.0f / 255.0f); // 0 is reserved for projClip +#endif + mrt.Normal = float4(IN.normal * 0.5 + 0.5, 1); + + return mrt; +} + diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderBase.cginc.meta b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderBase.cginc.meta new file mode 100644 index 00000000..fbefaa09 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderBase.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 39e1e2e9bb9edd249be122365cd7f27b +timeCreated: 1621331743 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderOccluder.shader b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderOccluder.shader new file mode 100644 index 00000000..00b744d2 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderOccluder.shader @@ -0,0 +1,67 @@ +// Use to cut holes in captured geometry, fills depth before the color shader + +Shader "Hidden/ftFarSphereRenderOccluder" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 + ColorMask 0 + //ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + struct MRT + { + float4 AlbedoAlpha : SV_Target0; + float4 Normal : SV_Target1; + }; + + v2f vert (appdata v) + { + v2f o; + + o.vertex = mul(unity_ObjectToWorld, v.vertex); + //o.vertex.xyz += normalize(_WorldSpaceCameraPos - o.vertex.xyz) * 0.01; + o.vertex = mul(UNITY_MATRIX_VP, float4(o.vertex.xyz,1)); + o.vertex.z += 0.001; + + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + return o; + } + + MRT frag (v2f i) + { + MRT mrt; + mrt.AlbedoAlpha = 0; + mrt.Normal = 0; + return mrt; + } + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderOccluder.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderOccluder.shader.meta new file mode 100644 index 00000000..5decee4a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftFarSphereRenderOccluder.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 44768c057cbc6084f8fcb220a2fafdc9 +timeCreated: 1618352381 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset b/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset new file mode 100644 index 00000000..f2905387 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset @@ -0,0 +1,513 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c789d55c4f1cff34799abba03737e8f7, type: 3} + m_Name: ftGlobalStorage + m_EditorClassIdentifier: + modifiedAssetPathList: + - Assets/Bakery/examples/content/sponza/sponza.FBX + modifiedAssetPaddingHash: aaf8cc2e + modifiedMeshList: [] + modifiedMeshPaddingList: + modifiedAssets: + - meshName: + - sponza_00 + - sponza_01 + - sponza_03 + - sponza_05 + - sponza_06 + - sponza_07 + - sponza_08 + - sponza_09 + - sponza_10 + - sponza_11 + - sponza_12 + - sponza_13 + - sponza_14 + - sponza_15 + - sponza_16 + - sponza_17 + - sponza_18 + - sponza_19 + - sponza_20 + - sponza_21 + - sponza_22 + - sponza_23 + - sponza_24 + - sponza_25 + - sponza_26 + - sponza_27 + - sponza_28 + - sponza_29 + - sponza_30 + - sponza_31 + - sponza_32 + - sponza_33 + - sponza_34 + - sponza_35 + - sponza_36 + - sponza_37 + - sponza_38 + - sponza_39 + - sponza_40 + - sponza_41 + - sponza_42 + - sponza_43 + - sponza_44 + - sponza_45 + - sponza_46 + - sponza_47 + - sponza_48 + - sponza_49 + - sponza_50 + - sponza_51 + - sponza_52 + - sponza_53 + - sponza_54 + - sponza_55 + - sponza_56 + - sponza_57 + - sponza_58 + - sponza_59 + - sponza_60 + - sponza_61 + - sponza_62 + - sponza_63 + - sponza_64 + - sponza_65 + - sponza_67 + - sponza_68 + - sponza_69 + - sponza_70 + - sponza_71 + - sponza_72 + - sponza_73 + - sponza_74 + - sponza_75 + - sponza_76 + - sponza_77 + - sponza_78 + - sponza_79 + - sponza_80 + - sponza_81 + - sponza_82 + - sponza_83 + - sponza_84 + - sponza_85 + - sponza_86 + - sponza_87 + - sponza_88 + - sponza_89 + - sponza_90 + - sponza_91 + - sponza_92 + - sponza_93 + - sponza_94 + - sponza_95 + - sponza_96 + - sponza_97 + - sponza_98 + - sponza_99 + - sponza_100 + - sponza_101 + - sponza_102 + - sponza_103 + - sponza_104 + - sponza_105 + - sponza_106 + - sponza_107 + - sponza_108 + - sponza_109 + - sponza_110 + - sponza_111 + - sponza_112 + - sponza_113 + - sponza_114 + - sponza_115 + - sponza_116 + - sponza_117 + - sponza_118 + - sponza_119 + - sponza_120 + - sponza_121 + - sponza_122 + - sponza_123 + - sponza_124 + - sponza_125 + - sponza_126 + - sponza_127 + - sponza_128 + - sponza_129 + - sponza_130 + - sponza_131 + - sponza_132 + - sponza_133 + - sponza_134 + - sponza_135 + - sponza_136 + - sponza_137 + - sponza_138 + - sponza_139 + - sponza_140 + - sponza_141 + - sponza_142 + - sponza_143 + - sponza_144 + - sponza_145 + - sponza_146 + - sponza_147 + - sponza_148 + - sponza_149 + - sponza_150 + - sponza_151 + - sponza_152 + - sponza_153 + - sponza_154 + - sponza_155 + - sponza_156 + - sponza_157 + - sponza_158 + - sponza_159 + - sponza_160 + - sponza_161 + - sponza_162 + - sponza_163 + - sponza_164 + - sponza_165 + - sponza_166 + - sponza_167 + - sponza_168 + - sponza_169 + - sponza_170 + - sponza_171 + - sponza_172 + - sponza_173 + - sponza_174 + - sponza_175 + - sponza_176 + - sponza_177 + - sponza_178 + - sponza_179 + - sponza_180 + - sponza_181 + - sponza_182 + - sponza_183 + - sponza_184 + - sponza_185 + - sponza_186 + - sponza_187 + - sponza_188 + - sponza_189 + - sponza_190 + - sponza_191 + - sponza_192 + - sponza_193 + - sponza_194 + - sponza_195 + - sponza_196 + - sponza_197 + - sponza_198 + - sponza_199 + - sponza_200 + - sponza_201 + - sponza_202 + - sponza_203 + - sponza_204 + - sponza_205 + - sponza_206 + - sponza_207 + - sponza_208 + - sponza_209 + - sponza_210 + - sponza_211 + - sponza_212 + - sponza_213 + - sponza_214 + - sponza_215 + - sponza_216 + - sponza_217 + - sponza_218 + - sponza_219 + - sponza_220 + - sponza_221 + - sponza_222 + - sponza_223 + - sponza_224 + - sponza_225 + - sponza_226 + - sponza_227 + - sponza_228 + - sponza_229 + - sponza_230 + - sponza_231 + - sponza_232 + - sponza_233 + - sponza_234 + - sponza_235 + - sponza_236 + - sponza_237 + - sponza_238 + - sponza_239 + - sponza_240 + - sponza_241 + - sponza_242 + - sponza_243 + - sponza_244 + - sponza_245 + - sponza_246 + - sponza_247 + - sponza_248 + - sponza_249 + - sponza_250 + - sponza_251 + - sponza_252 + - sponza_253 + - sponza_254 + - sponza_255 + - sponza_256 + - sponza_257 + - sponza_259 + - sponza_260 + - sponza_261 + - sponza_262 + - sponza_263 + - sponza_264 + - sponza_265 + - sponza_266 + - sponza_267 + - sponza_268 + - sponza_269 + - sponza_270 + - sponza_271 + - sponza_272 + - sponza_273 + - sponza_274 + - sponza_275 + - sponza_276 + - sponza_277 + - sponza_278 + - sponza_279 + - sponza_280 + - sponza_281 + - sponza_282 + - sponza_283 + - sponza_284 + - sponza_285 + - sponza_286 + - sponza_287 + - sponza_288 + - sponza_289 + - sponza_290 + - sponza_291 + - sponza_292 + - sponza_293 + - sponza_294 + - sponza_295 + - sponza_296 + - sponza_297 + - sponza_298 + - sponza_299 + - sponza_300 + - sponza_301 + - sponza_302 + - sponza_303 + - sponza_304 + - sponza_305 + - sponza_306 + - sponza_307 + - sponza_308 + - sponza_309 + - sponza_310 + - sponza_311 + - sponza_312 + - sponza_313 + - sponza_314 + - sponza_315 + - sponza_316 + - sponza_317 + - sponza_318 + - sponza_319 + - sponza_320 + - sponza_321 + - sponza_322 + - sponza_323 + - sponza_324 + - sponza_325 + - sponza_326 + - sponza_327 + - sponza_328 + - sponza_329 + - sponza_330 + - sponza_331 + - sponza_332 + - sponza_333 + - sponza_334 + - sponza_335 + - sponza_336 + - sponza_337 + - sponza_338 + - sponza_339 + - sponza_340 + - sponza_341 + - sponza_342 + - sponza_343 + - sponza_344 + - sponza_345 + - sponza_346 + - sponza_347 + - sponza_348 + - sponza_349 + - sponza_350 + - sponza_351 + - sponza_352 + - sponza_353 + - sponza_354 + - sponza_355 + - sponza_356 + - sponza_357 + - sponza_358 + - sponza_359 + - sponza_360 + - sponza_361 + - sponza_362 + - sponza_363 + - sponza_364 + - sponza_365 + - sponza_366 + - sponza_367 + - sponza_368 + - sponza_369 + - sponza_370 + - sponza_371 + - sponza_372 + - sponza_373 + - sponza_374 + - sponza_375 + - sponza_376 + - sponza_377 + - sponza_378 + - sponza_381 + padding: 2e000000460000002a000000110000000e0000000c0000000400000033000000330000003300000033000000330000003300000033000000330000000a00000007000000060000002b0000002b00000011000000140000001400000014000000140000002a0000001d000000320000003200000032000000320000002a000000080000000d0000000500000087000000fa00000087000000fa00000087000000fa00000087000000fa00000087000000fb00000087000000fb00000087000000fb00000087000000fb00000087000000fb00000051000000510000005100000051000000510000005100000051000000510000005100000051000000510000000c00000006000000060000002700000028000000390000002b000000150000002700000000010000ba0000009b0000009b000000b70000009d000000b7000000b7000000b70000009b000000b70000009d000000b7000000b7000000b70000009b0000009b0000009b00000083000000ba00000000010000ba0000009b0000009b000000b70000009d000000b7000000b7000000b70000009b000000b70000009d000000b7000000b7000000b70000009b0000009b0000009b00000083000000000100002700000006000000270000002700000027000000270000002d0000001000000010000000230000006a000000000100006a000000000100006a000000000100006a000000000100001e0000002c000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000230000006a000000000100006a000000000100006a000000000100006a000000000100001e0000002c000000630000004300000000010000000100004300000000010000430000000001000043000000430000009400000094000000430000009400000043000000940000004300000024000000270000004600000030000000360000002d000000360000001d0000001d0000001d0000001d0000001d0000001d0000001d0000001d00000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad000000000100001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b000000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c000000000100000001000000010000000100004600000046000000460000004900000049000000490000004900000024000000240000002400000024000000220000001800000004000000 + unwrapper: + assetList: + - Assets/Bakery/examples/content/sponza/bush.FBX + - Assets/Bakery/examples/content/floor_lamp.FBX + - Assets/MeshBaker/Examples/MultipleMaterials/house.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/fence.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/bigBridge.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/mediumPlatform.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/floatingPlatform.fbx + - Assets/MeshBaker/Examples/CharacterCustomization/paintwars_gameassets.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/hat.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/littleBridge.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/ConstructionDude/Worker.FBX + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/glasses.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/bigPlatform.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/wallJumpShort.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/wallJumpTall.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/crate.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/palm.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/sword.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/wallJumpSided.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/platformWallJump.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/lightPost.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/launchPad.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/tree.fbx + - Assets/MeshBaker/Examples/Assets/ModelPrefabs/stepPlatform.fbx + - Assets/Trista/Map/Trista Station/trista station.fbx + uvOverlapAssetList: 00000000ffffffff0101000001010000010100000101000001010000010100000000000001010000010100000101000001010000010100000101000001010000010100000101000001010000010100000101000001010000010100000101000000000000 + xatlasWarningShown: 0 + foundCompatibleSetup: 1 + gpuName: NVIDIA GeForce GTX 1660 SUPER + runsNonRTX: 1 + runsOptix5: 1 + runsOptix6: 1 + runsOptix7: 1 + runsOIDN: 1 + alwaysEnableRTX: 0 + checkerPreviewOn: 0 + rtSceneViewPreviewOn: 0 + renderSettingsBounces: 5 + renderSettingsGISamples: 16 + renderSettingsGIBackFaceWeight: 0 + renderSettingsTileSize: 512 + renderSettingsPriority: 2 + renderSettingsTexelsPerUnit: 20 + renderSettingsForceRefresh: 1 + renderSettingsForceRebuildGeometry: 1 + renderSettingsPerformRendering: 1 + renderSettingsUserRenderMode: 0 + renderSettingsDistanceShadowmask: 0 + renderSettingsSettingsMode: 0 + renderSettingsFixSeams: 1 + renderSettingsDenoise: 1 + renderSettingsDenoise2x: 0 + renderSettingsEncode: 1 + renderSettingsEncodeMode: 0 + renderSettingsOverwriteWarning: 0 + renderSettingsAutoAtlas: 1 + renderSettingsUnwrapUVs: 1 + renderSettingsForceDisableUnwrapUVs: 0 + renderSettingsMaxAutoResolution: 4096 + renderSettingsMinAutoResolution: 16 + renderSettingsUnloadScenes: 1 + renderSettingsAdjustSamples: 1 + renderSettingsGILODMode: 2 + renderSettingsGILODModeEnabled: 0 + renderSettingsCheckOverlaps: 0 + renderSettingsSkipOutOfBoundsUVs: 1 + renderSettingsHackEmissiveBoost: 1 + renderSettingsHackIndirectBoost: 1 + renderSettingsTempPath: E:/VRChat Unity/Temp/frender + renderSettingsOutPath: + renderSettingsUseScenePath: 0 + renderSettingsHackAOIntensity: 0 + renderSettingsHackAOSamples: 16 + renderSettingsHackAORadius: 1 + renderSettingsShowAOSettings: 0 + renderSettingsShowTasks: 1 + renderSettingsShowTasks2: 0 + renderSettingsShowPaths: 1 + renderSettingsShowNet: 1 + renderSettingsOcclusionProbes: 0 + renderSettingsTexelsPerMap: 0 + renderSettingsTexelsColor: 1 + renderSettingsTexelsMask: 1 + renderSettingsTexelsDir: 1 + renderSettingsShowDirWarning: 1 + renderSettingsRenderDirMode: 0 + renderSettingsShowCheckerSettings: 0 + renderSettingsSamplesWarning: 1 + renderSettingsPrefabWarning: 1 + renderSettingsSplitByScene: 0 + renderSettingsUVPaddingMax: 0 + renderSettingsPostPacking: 1 + renderSettingsHoleFilling: 0 + renderSettingsBeepOnFinish: 0 + renderSettingsExportTerrainAsHeightmap: 1 + renderSettingsRTXMode: 0 + renderSettingsLightProbeMode: 1 + renderSettingsClientMode: 0 + renderSettingsServerAddress: 127.0.0.1 + renderSettingsUnwrapper: 0 + renderSettingsDenoiserType: 5 + renderSettingsExportTerrainTrees: 0 + renderSettingsShowPerf: 1 + renderSettingsSampleDiv: 1 + renderSettingsAtlasPacker: 0 + renderSettingsBatchPoints: 1 + renderSettingsCompressVolumes: 0 + renderSettingsRTPVExport: 1 + renderSettingsRTPVSceneView: 0 + renderSettingsRTPVWidth: 640 + renderSettingsRTPVHeight: 360 + modifiedMeshPaddingArray: 2e000000460000002a000000110000000e0000000c0000000400000033000000330000003300000033000000330000003300000033000000330000000a00000007000000060000002b0000002b00000011000000140000001400000014000000140000002a0000001d000000320000003200000032000000320000002a000000080000000d0000000500000087000000fa00000087000000fa00000087000000fa00000087000000fa00000087000000fb00000087000000fb00000087000000fb00000087000000fb00000087000000fb00000051000000510000005100000051000000510000005100000051000000510000005100000051000000510000000c00000006000000060000002700000028000000390000002b000000150000002700000000010000ba0000009b0000009b000000b70000009d000000b7000000b7000000b70000009b000000b70000009d000000b7000000b7000000b70000009b0000009b0000009b00000083000000ba00000000010000ba0000009b0000009b000000b70000009d000000b7000000b7000000b70000009b000000b70000009d000000b7000000b7000000b70000009b0000009b0000009b00000083000000000100002700000006000000270000002700000027000000270000002d0000001000000010000000230000006a000000000100006a000000000100006a000000000100006a000000000100001e0000002c000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000210000005c000000000100005c000000000100005c000000000100005c000000000100001a00000026000000230000006a000000000100006a000000000100006a000000000100006a000000000100001e0000002c000000630000004300000000010000000100004300000000010000430000000001000043000000430000009400000094000000430000009400000043000000940000004300000024000000270000004600000030000000360000002d000000360000001d0000001d0000001d0000001d0000001d0000001d0000001d0000001d00000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad0000000001000000010000ad000000000100001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b0000001b000000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c00000000010000000100000001000000010000000100000001000000010000000100008c000000000100000001000000010000000100004600000046000000460000004900000049000000490000004900000024000000240000002400000024000000220000001800000004000000 + modifiedMeshUnwrapperArray: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset.meta b/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset.meta new file mode 100644 index 00000000..e46b990b --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 07a55e1b765904441bedee271539f6a4 +timeCreated: 1536946135 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.cs b/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.cs new file mode 100644 index 00000000..39a5c178 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftGlobalStorage.cs @@ -0,0 +1,399 @@ +using UnityEngine; +using System.Collections.Generic; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +public class ftGlobalStorage : ScriptableObject +{ + +#if UNITY_EDITOR + + [System.Serializable] + public struct AdjustedMesh + { + //[SerializeField] + //public string assetPath; + + [SerializeField] + public List meshName; + + [SerializeField] + public List padding; + + [SerializeField] + public List unwrapper; + }; + + [System.Serializable] + public enum Unwrapper + { + Default, + xatlas + }; + + [System.Serializable] + public enum AtlasPacker + { + Default, + xatlas + } + + [System.Serializable] + public enum DenoiserType + { + Optix5 = 5, // "Legacy denoiser" + Optix6 = 6, // Default denoiser + Optix7 = 7, // New denoiser + OpenImageDenoise = 100 + }; + + // UV adjustment + + [SerializeField] + public List modifiedAssetPathList = new List(); + + [SerializeField] + public List modifiedAssetPaddingHash = new List(); + + // Legacy + [SerializeField] + public List modifiedMeshList = new List(); + [SerializeField] + public List modifiedMeshPaddingList = new List(); + + [SerializeField] + public List modifiedAssets = new List(); + + // UV overlap marks + + [SerializeField] + public List assetList = new List(); + + [SerializeField] + public List uvOverlapAssetList = new List(); // -1 = no UV1, 0 = no overlap, 1 = overlap + + [SerializeField] + public bool xatlasWarningShown = false; + + [SerializeField] + public bool foundCompatibleSetup = false; + + [SerializeField] + public string gpuName = ""; + + [SerializeField] + public bool runsNonRTX = true; + + [SerializeField] + public bool runsOptix5 = true; + + [SerializeField] + public bool runsOptix6 = true; + + [SerializeField] + public bool runsOptix7 = true; + + [SerializeField] + public bool runsOIDN = true; + + [SerializeField] + public bool alwaysEnableRTX = false; + + [SerializeField] + public bool checkerPreviewOn = false; + + [SerializeField] + public bool rtSceneViewPreviewOn = false; + + // Defaults + [SerializeField] + public int renderSettingsBounces = 5; + [SerializeField] + public int renderSettingsGISamples = 16; + [SerializeField] + public float renderSettingsGIBackFaceWeight = 0; + [SerializeField] + public int renderSettingsTileSize = 512; + [SerializeField] + public float renderSettingsPriority = 2; + [SerializeField] + public float renderSettingsTexelsPerUnit = 20; + [SerializeField] + public bool renderSettingsForceRefresh = true; + [SerializeField] + public bool renderSettingsForceRebuildGeometry = true; + [SerializeField] + public bool renderSettingsPerformRendering = true; + [SerializeField] + public int renderSettingsUserRenderMode = 0; + [SerializeField] + public bool renderSettingsDistanceShadowmask = false; + [SerializeField] + public int renderSettingsSettingsMode = 0; + [SerializeField] + public bool renderSettingsFixSeams = true; + [SerializeField] + public bool renderSettingsDenoise = true; + [SerializeField] + public bool renderSettingsDenoise2x = false; + [SerializeField] + public bool renderSettingsEncode = true; + [SerializeField] + public int renderSettingsEncodeMode = 0; + [SerializeField] + public bool renderSettingsOverwriteWarning = false; + [SerializeField] + public bool renderSettingsAutoAtlas = true; + [SerializeField] + public bool renderSettingsUnwrapUVs = true; + [SerializeField] + public bool renderSettingsForceDisableUnwrapUVs = false; + [SerializeField] + public int renderSettingsMaxAutoResolution = 4096; + [SerializeField] + public int renderSettingsMinAutoResolution = 16; + [SerializeField] + public bool renderSettingsUnloadScenes = true; + [SerializeField] + public bool renderSettingsAdjustSamples = true; + [SerializeField] + public int renderSettingsGILODMode = 2; + [SerializeField] + public bool renderSettingsGILODModeEnabled = false; + [SerializeField] + public bool renderSettingsCheckOverlaps = false; + [SerializeField] + public bool renderSettingsSkipOutOfBoundsUVs = true; + [SerializeField] + public float renderSettingsHackEmissiveBoost = 1; + [SerializeField] + public float renderSettingsHackIndirectBoost = 1; + [SerializeField] + public string renderSettingsTempPath = ""; + [SerializeField] + public string renderSettingsOutPath = ""; + [SerializeField] + public bool renderSettingsUseScenePath = false; + [SerializeField] + public float renderSettingsHackAOIntensity = 0; + [SerializeField] + public int renderSettingsHackAOSamples = 16; + [SerializeField] + public float renderSettingsHackAORadius = 1; + [SerializeField] + public bool renderSettingsShowAOSettings = false; + [SerializeField] + public bool renderSettingsShowTasks = true; + [SerializeField] + public bool renderSettingsShowTasks2 = false; + [SerializeField] + public bool renderSettingsShowPaths = true; + [SerializeField] + public bool renderSettingsShowNet = true; + [SerializeField] + public bool renderSettingsOcclusionProbes = false; + [SerializeField] + public bool renderSettingsTexelsPerMap = false; + [SerializeField] + public float renderSettingsTexelsColor = 1; + [SerializeField] + public float renderSettingsTexelsMask = 1; + [SerializeField] + public float renderSettingsTexelsDir = 1; + [SerializeField] + public bool renderSettingsShowDirWarning = true; + [SerializeField] + public int renderSettingsRenderDirMode = 0; + [SerializeField] + public bool renderSettingsShowCheckerSettings = false; + [SerializeField] + public bool renderSettingsSamplesWarning = true; + [SerializeField] + public bool renderSettingsPrefabWarning = true; + [SerializeField] + public bool renderSettingsSplitByScene = false; + [SerializeField] + public bool renderSettingsUVPaddingMax = false; + [SerializeField] + public bool renderSettingsPostPacking = true; + [SerializeField] + public bool renderSettingsHoleFilling = false; + [SerializeField] + public bool renderSettingsBeepOnFinish = false; + [SerializeField] + public bool renderSettingsExportTerrainAsHeightmap = true; + [SerializeField] + public bool renderSettingsRTXMode = false; + [SerializeField] + public int renderSettingsLightProbeMode = 1; + [SerializeField] + public bool renderSettingsClientMode = false; + [SerializeField] + public string renderSettingsServerAddress = "127.0.0.1"; + [SerializeField] + public int renderSettingsUnwrapper = 0; + [SerializeField] + public int renderSettingsDenoiserType = (int)DenoiserType.OpenImageDenoise; + [SerializeField] + public bool renderSettingsExportTerrainTrees = false; + [SerializeField] + public bool renderSettingsShowPerf = true; + [SerializeField] + public int renderSettingsSampleDiv = 1; + //[SerializeField] + //public bool renderSettingsLegacyDenoiser = false; + [SerializeField] + public AtlasPacker renderSettingsAtlasPacker = AtlasPacker.Default; + [SerializeField] + public bool renderSettingsBatchPoints = true; + [SerializeField] + public bool renderSettingsCompressVolumes = false; + [SerializeField] + public bool renderSettingsRTPVExport = true; + [SerializeField] + public bool renderSettingsRTPVSceneView = false; + [SerializeField] + public int renderSettingsRTPVWidth = 640; + [SerializeField] + public int renderSettingsRTPVHeight = 360; + + // Temp + + public Dictionary modifiedMeshMap; + //public string modifiedMeshPaddingMapAssetName; + public List modifiedMeshPaddingArray; + public List modifiedMeshUnwrapperArray; + + public void InitModifiedMeshMap(string assetPath) { + + modifiedMeshMap = new Dictionary(); + + var index = modifiedAssetPathList.IndexOf(assetPath); + if (index < 0) return; + var m = modifiedAssets[index]; + for(int j=0; j(); + str.padding = new List(); + modifiedAssets.Add(str); + } + var assetPath = modifiedAssetPathList[a]; + for(int i=0; i(); + modifiedMeshPaddingList = new List(); + } + + public int CalculatePaddingHash(int id) + { + string s = ""; + var list = modifiedAssets[id].padding; + for(int i=0; i(); + for(int i=0; i lightmapRefCount; + static List globalMapsAdditional; + static int directionalMode; // -1 undefined, 0 off, 1 on + //static List loadedStorages; + +#if UNITY_EDITOR + public static bool mustReloadRenderSettings = false; + static ftGlobalStorage gstorage; + static ftLocalStorage lstorage; + static BakeryProjectSettings pstorage; + static bool editorUpdateCalled = false; + + public static string _bakeryRuntimePath = ""; + public static string _bakeryEditorPath = ""; + public static string GetRuntimePath() + { + if (_bakeryRuntimePath.Length == 0) + { + // Try default path + // (start with AssetDatabase assuming it's faster than GetFiles) + var a = AssetDatabase.LoadAssetAtPath("Assets/Bakery/ftDefaultAreaLightMat.mat", typeof(Texture2D)) as Texture2D; + if (a == null) + { + // Find elsewhere + var assetGUIDs = AssetDatabase.FindAssets("ftDefaultAreaLightMat", null); + if (assetGUIDs.Length == 0) + { + // No extra data present - find the script at least + var res = Directory.GetFiles(Application.dataPath, "ftLightmaps.cs", SearchOption.AllDirectories); + if (res.Length == 0) + { + Debug.LogError("Can't locate Bakery folder"); + return ""; + } + return "Assets" + res[0].Replace("ftLightmaps.cs", "").Replace("\\", "/").Replace(Application.dataPath, ""); + } + if (assetGUIDs.Length > 1) + { + Debug.LogError("ftDefaultAreaLightMat was found in more than one folder. Do you have multiple installations of Bakery?"); + } + var guid = assetGUIDs[0]; + _bakeryRuntimePath = System.IO.Path.GetDirectoryName(AssetDatabase.GUIDToAssetPath(guid)) + "/"; + return _bakeryRuntimePath; + } + _bakeryRuntimePath = "Assets/Bakery/"; + } + return _bakeryRuntimePath; + } + + public static string GetEditorPath() + { + if (_bakeryEditorPath.Length == 0) + { + // Try default path + var a = AssetDatabase.LoadAssetAtPath("Assets/Editor/x64/Bakery/NormalsFittingTexture_dds", typeof(Object)); + if (a == null) + { + // Find elsewhere + var assetGUIDs = AssetDatabase.FindAssets("NormalsFittingTexture_dds", null); + if (assetGUIDs.Length == 0) + { + // No extra data present - find ftModelPostProcessor at least (minimum required editor script) + var res = Directory.GetFiles(Application.dataPath, "ftModelPostProcessor.cs", SearchOption.AllDirectories); + if (res.Length == 0) + { + Debug.LogError("Can't locate Bakery folder"); + return ""; + } + return "Assets" + res[0].Replace("ftModelPostProcessor.cs", "").Replace("\\", "/").Replace(Application.dataPath, ""); + } + if (assetGUIDs.Length > 1) + { + Debug.LogError("NormalsFittingTexture_dds was found in more than one folder. Do you have multiple installations of Bakery?"); + } + var guid = assetGUIDs[0]; + _bakeryEditorPath = System.IO.Path.GetDirectoryName(AssetDatabase.GUIDToAssetPath(guid)) + "/"; + return _bakeryEditorPath; + } + _bakeryEditorPath = "Assets/Editor/x64/Bakery/"; + } + return _bakeryEditorPath; + } + + public static string GetProjectSettingsPath() + { + return "Assets/Settings/"; + } + + public static ftGlobalStorage GetGlobalStorage() + { + if (gstorage != null) return gstorage; + var bakeryRuntimePath = GetRuntimePath(); + gstorage = AssetDatabase.LoadAssetAtPath(bakeryRuntimePath + "ftGlobalStorage.asset", typeof(ftGlobalStorage)) as ftGlobalStorage; + if (gstorage == null && editorUpdateCalled) // if editorUpdateCalled==false, it may be not imported yet + { + var gstorageDefault = AssetDatabase.LoadAssetAtPath(bakeryRuntimePath + "ftDefaultGlobalStorage.asset", typeof(ftGlobalStorage)) as ftGlobalStorage; + + if (gstorageDefault != null) + { + if (AssetDatabase.CopyAsset(bakeryRuntimePath + "ftDefaultGlobalStorage.asset", bakeryRuntimePath + "ftGlobalStorage.asset")) + { + AssetDatabase.Refresh(); + gstorage = AssetDatabase.LoadAssetAtPath(bakeryRuntimePath + "ftGlobalStorage.asset", typeof(ftGlobalStorage)) as ftGlobalStorage; + } + } + + if (gstorage == null) + { + Debug.Log("Created Bakery GlobalStorage"); + gstorage = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(gstorage, bakeryRuntimePath + "ftGlobalStorage.asset"); + AssetDatabase.SaveAssets(); + } + else + { + Debug.Log("Created Bakery GlobalStorage from DefaultGlobalStorage"); + } + } + + if (gstorage != null) + { + if (gstorage.modifiedMeshList.Count > 0) + { + gstorage.ConvertFromLegacy(); + } + } + + return gstorage; + } + + static ftLocalStorage GetLocalStorage() + { + if (lstorage != null) return lstorage; + var bakeryRuntimePath = GetRuntimePath(); + lstorage = AssetDatabase.LoadAssetAtPath(bakeryRuntimePath + "ftLocalStorage.asset", typeof(ftLocalStorage)) as ftLocalStorage; + if (lstorage == null) + { + Debug.Log("Created Bakery LocalStorage"); + lstorage = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(lstorage, bakeryRuntimePath + "ftLocalStorage.asset"); + AssetDatabase.SaveAssets(); + } + return lstorage; + } + + public static BakeryProjectSettings GetProjectSettings() + { + if (pstorage != null) return pstorage; + var path = GetProjectSettingsPath(); + if (!Directory.Exists(path)) Directory.CreateDirectory(path); + pstorage = AssetDatabase.LoadAssetAtPath(path + "BakeryProjectSettings.asset", typeof(BakeryProjectSettings)) as BakeryProjectSettings; + if (pstorage == null) + { + Debug.Log("Created Bakery ProjectSettings"); + pstorage = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(pstorage, path + "BakeryProjectSettings.asset"); + AssetDatabase.SaveAssets(); + } + return pstorage; + } + + static void CreateGlobalStorageAsset() + { + if (gstorage == null) gstorage = GetGlobalStorage(); + if (lstorage == null) lstorage = GetLocalStorage(); + + if (Application.isPlaying) return; + + var listToProccess = gstorage.modifiedAssetPathList; + var listToProcessHash = gstorage.modifiedAssetPaddingHash; + var listProcessed = lstorage.modifiedAssetPathList; + var listProcessedHash = lstorage.modifiedAssetPaddingHash; + for(int i=0; i= 0) + { + if (listToProcessHash.Count > i) + { + int globalPaddingHash = listToProcessHash[i]; + if (listProcessedHash.Count > localID) + { + int localPaddingHash = listProcessedHash[localID]; + if (globalPaddingHash == localPaddingHash) + { + continue; + } + } + } + else + { + // Hash is not initialized = legacy + continue; + } + } + +#if UNITY_2017_1_OR_NEWER + var importer = AssetImporter.GetAtPath(listToProccess[i]) as ModelImporter; + if (importer != null) + { + var props = importer.extraUserProperties; + int propID = -1; + for(int p=0; p= 0) continue; // should be fine without additional reimport - metadata is always loaded with model + } +#endif + + var asset = AssetDatabase.LoadAssetAtPath(listToProccess[i], typeof(GameObject)) as GameObject; + if (asset == null) continue; + if (asset.tag == "BakeryProcessed") continue; // legacy + //if (asset.tag != "BakeryProcessed") AssetDatabase.ImportAsset(list[i], ImportAssetOptions.ForceUpdate); + Debug.Log("Reimporting to adjust UVs: " + listToProccess[i]); + AssetDatabase.ImportAsset(listToProccess[i], ImportAssetOptions.ForceUpdate); + } + } + + /*public static bool IsModelProcessed(string path) + { + if (lstorage == null) lstorage = GetLocalStorage(); + var listProcessed = lstorage.modifiedAssetPathList; + return listProcessed.Contains(path); + }*/ + + public static void MarkModelProcessed(string path, bool enabled) + { + if (lstorage == null) lstorage = GetLocalStorage(); + if (gstorage == null) gstorage = GetGlobalStorage(); + if (enabled) + { + int gid = gstorage.modifiedAssetPathList.IndexOf(path); + if (gid < 0) return; + int hash = gstorage.CalculatePaddingHash(gid); + while(gstorage.modifiedAssetPaddingHash.Count <= gid) gstorage.modifiedAssetPaddingHash.Add(0); + gstorage.modifiedAssetPaddingHash[gid] = hash; + + int id = lstorage.modifiedAssetPathList.IndexOf(path); + if (id < 0) + { + lstorage.modifiedAssetPathList.Add(path); + id = lstorage.modifiedAssetPathList.Count - 1; + } + while(lstorage.modifiedAssetPaddingHash.Count <= id) lstorage.modifiedAssetPaddingHash.Add(0); + lstorage.modifiedAssetPaddingHash[id] = hash; + EditorUtility.SetDirty(gstorage); + EditorSceneManager.MarkAllScenesDirty(); + } + else + { + int id = lstorage.modifiedAssetPathList.IndexOf(path); + if (id >= 0) + { + lstorage.modifiedAssetPathList.RemoveAt(id); + if (lstorage.modifiedAssetPaddingHash.Count > id) lstorage.modifiedAssetPaddingHash.RemoveAt(id); + } + } + EditorUtility.SetDirty(lstorage); + } + +#endif + + static ftLightmaps() { + +#if UNITY_EDITOR + EditorSceneManager.sceneOpening -= OnSceneOpening; // Andrew fix + EditorSceneManager.sceneOpening += OnSceneOpening; + + EditorApplication.update -= FirstUpdate; // Andrew fix + EditorApplication.update += FirstUpdate; + + EditorApplication.hierarchyWindowChanged -= OnSceneChangedEditor; + EditorApplication.hierarchyWindowChanged += OnSceneChangedEditor; +#endif + + SceneManager.activeSceneChanged -= OnSceneChangedPlay; + SceneManager.activeSceneChanged += OnSceneChangedPlay; + } + +#if UNITY_EDITOR + static void FirstUpdate() + { + editorUpdateCalled = true; + CreateGlobalStorageAsset(); + GetProjectSettings(); + EditorApplication.update -= FirstUpdate; + } +#endif + + static void SetDirectionalMode() + { + if (directionalMode >= 0) LightmapSettings.lightmapsMode = directionalMode==1 ? LightmapsMode.CombinedDirectional : LightmapsMode.NonDirectional; + } + + static void OnSceneChangedPlay(Scene prev, Scene next) { + //if (Lightmapping.lightingDataAsset == null) { + SetDirectionalMode(); + //} + } + +#if UNITY_EDITOR + static void OnSceneChangedEditor() { + // Unity can modify directional mode on scene change, have to force the correct one + // activeSceneChangedInEditMode isn't always available + //if (Lightmapping.lightingDataAsset == null) { + SetDirectionalMode(); + //} + } + + // using Opening instead of Opened because it's called before lightmap data is loaded and proper directional mode is set + //static void OnSceneOpened(Scene scene, OpenSceneMode mode) { + static void OnSceneOpening(string path, OpenSceneMode mode) { + //Refresh(); + //if (scene.name == "_tempScene") return; + if (Path.GetFileNameWithoutExtension(path) == "_tempScene") return; + mustReloadRenderSettings = true; + directionalMode = -1; + /*if (!finalInitDone) + { + CreateGlobalStorageAsset(); + finalInitDone = true; + }*/ + } +#endif + + public static void RefreshFull() { + var activeScene = SceneManager.GetActiveScene(); + var sceneCount = SceneManager.sceneCount; + + for(int i=0; i lmaps, int lmCounter) { + RefreshScene(scene); + }*/ + + static Texture2D GetEmptyDirectionTex(ftLightmapsStorage storage) + { +#if UNITY_EDITOR + if (storage.emptyDirectionTex == null) + { + var bakeryRuntimePath = GetRuntimePath(); + storage.emptyDirectionTex = AssetDatabase.LoadAssetAtPath(bakeryRuntimePath + "emptyDirection.tga", typeof(Texture2D)) as Texture2D; + } +#endif + return storage.emptyDirectionTex; + } + + public static void RefreshScene(Scene scene, ftLightmapsStorage storage = null, bool updateNonBaked = false) { + var sceneCount = SceneManager.sceneCount; + + if (globalMapsAdditional == null) globalMapsAdditional = new List(); + + var lmaps = new List(); + var lmapsAdditional = new List(); + var existingLmaps = LightmapSettings.lightmaps; + var existingLmapsAdditional = globalMapsAdditional; + + // Acquire storage + if (storage == null) + { + if (!scene.isLoaded) + { + //Debug.LogError("dbg: Scene not loaded"); + return; + } + SceneManager.SetActiveScene(scene); + + var go = FindInScene("!ftraceLightmaps", scene); + if (go==null) { + //Debug.LogError("dbg: no storage"); + return; + } + + storage = go.GetComponent(); + if (storage == null) { + //Debug.LogError("dbg: no storage 2"); + return; + } + } + if (storage.idremap == null || storage.idremap.Length != storage.maps.Count) + { + storage.idremap = new int[storage.maps.Count]; + } + + // Decide which global engine lightmapping mode to use + // TODO: allow mixing different modes + directionalMode = storage.dirMaps.Count != 0 ? 1 : 0; + bool patchedDirection = false; + SetDirectionalMode(); + + // Set dummy directional tex for non-directional lightmaps in directional mode + if (directionalMode == 1) + { + for(int i=0; i i && (existingLmapsAdditional.Count <= i || existingLmapsAdditional[i].rnm0 != storage.rnmMaps0[i])) + { + sameArray = false; + break; + } + } + } + + if (!sameArray) // create new lightmap array + { + if (sceneCount >= 1) + { + // first add old + for(int i=0; i i) lmapsAdditional.Add(existingLmapsAdditional[i]); + } + } + } + + for(int i=0; i i) texmask = storage.masks[i]; + if (storage.dirMaps.Count > i) texdir = storage.dirMaps[i]; + if (storage.rnmMaps0.Count > i) + { + texrnm0 = storage.rnmMaps0[i]; + texrnm1 = storage.rnmMaps1[i]; + texrnm2 = storage.rnmMaps2[i]; + mapMode = storage.mapsMode[i]; + } + + bool found = false; + int firstEmpty = -1; + for(int j=0; j= 0) + { + lm = lmaps[firstEmpty]; + } + else + { + lm = new LightmapData(); + } + + lm.lightmapColor = texlm; + if (storage.masks.Count > i) + { + lm.shadowMask = texmask; + } + if (storage.dirMaps.Count > i && texdir != null) + { + lm.lightmapDir = texdir; + } + else if (directionalMode == 1) + { + lm.lightmapDir = GetEmptyDirectionTex(storage); + } + + if (firstEmpty < 0) + { + lmaps.Add(lm); + storage.idremap[i] = lmaps.Count - 1; + } + else + { + lmaps[firstEmpty] = lm; + } + + if (storage.rnmMaps0.Count > i) + { + var l = new LightmapAdditionalData(); + l.rnm0 = texrnm0; + l.rnm1 = texrnm1; + l.rnm2 = texrnm2; + l.mode = mapMode; + + if (firstEmpty < 0) + { + //Debug.LogError("added "+(lmaps.Count-1)); + while(lmapsAdditional.Count < lmaps.Count-1) lmapsAdditional.Add(new LightmapAdditionalData()); + lmapsAdditional.Add(l); + } + else + { + //Debug.LogError("set " + firstEmpty); + while(lmapsAdditional.Count < firstEmpty+1) lmapsAdditional.Add(new LightmapAdditionalData()); + lmapsAdditional[firstEmpty] = l; + } + } + } + } + } + else // reuse existing lightmap array, only remap IDs + { + for(int i=0; i i) + { + var l = new LightmapAdditionalData(); + l.rnm0 = storage.rnmMaps0[i]; + l.rnm1 = storage.rnmMaps1[i]; + l.rnm2 = storage.rnmMaps2[i]; + l.mode = storage.mapsMode[i]; + lmapsAdditional.Add(l); + }*/ + } + } + +#if UNITY_EDITOR + // Set editor lighting mode + if (storage.bakedRenderers != null && storage.bakedRenderers.Count > 0) + { + Lightmapping.giWorkflowMode = Lightmapping.GIWorkflowMode.OnDemand; + Lightmapping.realtimeGI = storage.usesRealtimeGI; + //Lightmapping.bakedGI = true; // ? only used for enlighten ? makes editor laggy ? + } +#endif + + // Replace the lightmap array if needed + if (sameArray && patchedDirection) LightmapSettings.lightmaps = existingLmaps; + if (!sameArray) + { + LightmapSettings.lightmaps = lmaps.ToArray(); + globalMapsAdditional = lmapsAdditional; + } + + /* + // Debug + var lms = LightmapSettings.lightmaps; + for(int i=0; i i ?(globalMapsAdditional[i].rnm0==null?"x":globalMapsAdditional[i].rnm0.name) : "-"); + Debug.LogError(i+" "+name1+" "+name2); + } + */ + + // Attempt to update skybox probe + if (RenderSettings.ambientMode == UnityEngine.Rendering.AmbientMode.Skybox)// && Lightmapping.lightingDataAsset == null) + { + var probe = RenderSettings.ambientProbe ; + int isEmpty = -1; + for(int i=0; i<3; i++) + { + for(int j=0; j<9; j++) + { + // default bugged probes are [almost] black or 1302? + float a = Mathf.Abs(probe[i,j]); + if (a > 1000.0f || a < 0.000001f) + { + isEmpty = 1; + break; + } + if (probe[i,j] != 0) + { + isEmpty = 0; + break; + } + } + if (isEmpty >= 0) break; + } + if (isEmpty != 0) + { + DynamicGI.UpdateEnvironment(); + } + } + + // Set lightmap data on mesh renderers + var emptyVec4 = new Vector4(1,1,0,0); + for(int i=0; i= storage.idremap.Length) ? id : storage.idremap[id]; + r.lightmapIndex = globalID; + + if (!r.isPartOfStaticBatch) + { + // scaleOffset is baked on static batches already + var scaleOffset = id < 0 ? emptyVec4 : storage.bakedScaleOffset[i]; + r.lightmapScaleOffset = scaleOffset; + } + + if (r.lightmapIndex >= 0 && globalID < globalMapsAdditional.Count) + { + var lmap = globalMapsAdditional[globalID]; + if (lmap.rnm0 != null) + { + var prop = new MaterialPropertyBlock(); + prop.SetTexture("_RNM0", lmap.rnm0); + prop.SetTexture("_RNM1", lmap.rnm1); + prop.SetTexture("_RNM2", lmap.rnm2); + prop.SetFloat("bakeryLightmapMode", lmap.mode); + r.SetPropertyBlock(prop); + } + } + } + + // Set lightmap data on definitely-not-baked mesh renderers (can be possibly avoided) + if (updateNonBaked) + { + for(int i=0; i= storage.idremap.Length) ? id : storage.idremap[id]; + + var scaleOffset = id < 0 ? emptyVec4 : storage.bakedScaleOffsetTerrain[i]; + r.lightmapScaleOffset = scaleOffset; + + if (r.lightmapIndex >= 0 && r.lightmapIndex < globalMapsAdditional.Count) + { + var lmap = globalMapsAdditional[r.lightmapIndex]; + if (lmap.rnm0 != null) + { + var prop = new MaterialPropertyBlock(); + prop.SetTexture("_RNM0", lmap.rnm0); + prop.SetTexture("_RNM1", lmap.rnm1); + prop.SetTexture("_RNM2", lmap.rnm2); + prop.SetFloat("bakeryLightmapMode", lmap.mode); + r.SetSplatMaterialPropertyBlock(prop); + } + } + } + + // Set shadowmask parameters on lights + for(int i=0; i 100 ? MixedLightingMode.Subtractive : MixedLightingMode.Shadowmask; + output.occlusionMaskChannel = channel > 100 ? -1 : channel; + output.probeOcclusionLightIndex = storage.bakedLights[i].bakingOutput.probeOcclusionLightIndex; + } + storage.bakedLights[i].bakingOutput = output; +#endif + } + + // Increment lightmap refcounts + if (lightmapRefCount == null) lightmapRefCount = new List(); + for(int i=0; i(); + //if (loadedStorages.Contains(storage)) loadedStorages.Add(storage); + + //return appendOffset; + } + + public static void UnloadScene(ftLightmapsStorage storage) + { + if (lightmapRefCount == null) return; + if (storage.idremap == null) return; + + //int idx = loadedStorages.IndexOf(storage); + //if (idx >= 0) loadedStorages.RemoveAt(idx); + + LightmapData[] existingLmaps = null; + List existingLmapsAdditional = null; + //bool rebuild = false; + for(int i=0; i currentID) + { + existingLmaps[currentID].lightmapColor = null; + existingLmaps[currentID].lightmapDir = null; + existingLmaps[currentID].shadowMask = null; + + if (existingLmapsAdditional == null) existingLmapsAdditional = globalMapsAdditional; + if (existingLmapsAdditional != null && existingLmapsAdditional.Count > currentID) + { + var emptyEntry = new LightmapAdditionalData(); + existingLmapsAdditional[currentID] = emptyEntry; + } + } + //if (currentID == 0) rebuild = true; + } + } + + /* + // If the first lightmap was unloaded, we need to rebuild the lightmap array + // because Unity uses 1st lightmap to determine encoding + if (rebuild) + { + int newLength = 0; + for(int i=0; i= storage.idremap.Length) ? id : storage.idremap[id]; + } + + Terrain r2; + for(int i=0; i= storage.idremap.Length) ? id : storage.idremap[id]; + } + + if (storage.anyVolumes) + { + if (storage.compressedVolumes) + { + Shader.EnableKeyword("BAKERY_COMPRESSED_VOLUME"); + } + else + { + Shader.DisableKeyword("BAKERY_COMPRESSED_VOLUME"); + } + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftLightmaps.cs.meta b/VRCSDK3Worlds/Assets/Bakery/ftLightmaps.cs.meta new file mode 100644 index 00000000..a3527461 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftLightmaps.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7a45445dfd5b7b44cb9545da4e5ed41c +timeCreated: 1496213851 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs b/VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs new file mode 100644 index 00000000..2761b216 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs @@ -0,0 +1,506 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +public class ftLightmapsStorage : MonoBehaviour{ + +#if UNITY_EDITOR + [System.Serializable] + public class LightData + { + public Matrix4x4 tform; + public Color color; + public float intensity, range, radius; + public int samples, samples2; + public int bitmask; + public bool bakeToIndirect; + public bool selfShadow = false; + public bool realisticFalloff = false; + public int projMode; + public Object cookie; + public float angle = 30.0f; + } + + public class ImplicitLightmapData + { + public Dictionary implicitGroupMap = null; + } + + // Saved render settings + public int renderSettingsBounces = 5; + public int renderSettingsGISamples = 16; + public float renderSettingsGIBackFaceWeight = 0; + public int renderSettingsTileSize = 512; + public float renderSettingsPriority = 2; + public float renderSettingsTexelsPerUnit = 20; + public bool renderSettingsForceRefresh = true; + public bool renderSettingsForceRebuildGeometry = true; + public bool renderSettingsPerformRendering = true; + public int renderSettingsUserRenderMode = 0; + public bool renderSettingsDistanceShadowmask = false; + public int renderSettingsSettingsMode = 0; + public bool renderSettingsFixSeams = true; + public bool renderSettingsDenoise = true; + public bool renderSettingsDenoise2x = false; + public bool renderSettingsEncode = true; + public int renderSettingsEncodeMode = 0; + public bool renderSettingsOverwriteWarning = false; + public bool renderSettingsAutoAtlas = true; + public bool renderSettingsUnwrapUVs = true; + public bool renderSettingsForceDisableUnwrapUVs = false; + public int renderSettingsMaxAutoResolution = 4096; + public int renderSettingsMinAutoResolution = 16; + public bool renderSettingsUnloadScenes = true; + public bool renderSettingsAdjustSamples = true; + public int renderSettingsGILODMode = 2; + public bool renderSettingsGILODModeEnabled = false; + public bool renderSettingsCheckOverlaps = false; + public bool renderSettingsSkipOutOfBoundsUVs = true; + public float renderSettingsHackEmissiveBoost = 1; + public float renderSettingsHackIndirectBoost = 1; + public string renderSettingsTempPath = ""; + public string renderSettingsOutPath = ""; + public bool renderSettingsUseScenePath = false; + public float renderSettingsHackAOIntensity = 0; + public int renderSettingsHackAOSamples = 16; + public float renderSettingsHackAORadius = 1; + public bool renderSettingsShowAOSettings = false; + public bool renderSettingsShowTasks = true; + public bool renderSettingsShowTasks2 = false; + public bool renderSettingsShowPaths = true; + public bool renderSettingsShowNet = true; + public bool renderSettingsOcclusionProbes = false; + public bool renderSettingsTexelsPerMap = false; + public float renderSettingsTexelsColor = 1; + public float renderSettingsTexelsMask = 1; + public float renderSettingsTexelsDir = 1; + public bool renderSettingsShowDirWarning = true; + public int renderSettingsRenderDirMode = 0; + public bool renderSettingsShowCheckerSettings = false; + public bool renderSettingsSamplesWarning = true; + public bool renderSettingsPrefabWarning = true; + public bool renderSettingsSplitByScene = false; + public bool renderSettingsUVPaddingMax = false; + public bool renderSettingsPostPacking = true; + public bool renderSettingsHoleFilling = false; + public bool renderSettingsBeepOnFinish = false; + public bool renderSettingsExportTerrainAsHeightmap = true; + public bool renderSettingsRTXMode = false; + public int renderSettingsLightProbeMode = 1; + public bool renderSettingsClientMode = false; + public string renderSettingsServerAddress = "127.0.0.1"; + public int renderSettingsUnwrapper = 0; + public int renderSettingsDenoiserType = (int)ftGlobalStorage.DenoiserType.OpenImageDenoise; + public bool renderSettingsExportTerrainTrees = false; + public bool renderSettingsShowPerf = true; + public int renderSettingsSampleDiv = 1; + public ftGlobalStorage.AtlasPacker renderSettingsAtlasPacker = ftGlobalStorage.AtlasPacker.xatlas; + public bool renderSettingsBatchPoints = true; + public bool renderSettingsCompressVolumes = false; + public UnityEngine.Object renderSettingsSector = null; + public bool renderSettingsRTPVExport = true; + public bool renderSettingsRTPVSceneView = false; + public int renderSettingsRTPVWidth = 640; + public int renderSettingsRTPVHeight = 360; + public int lastBakeTime = 0; + + public bool enlightenWarningShown = false; + public bool enlightenWarningShown2 = false; + + // Light settings from the last bake + public List lightUIDs = new List(); + public List lights = new List(); + public Dictionary lightsDict; + + // List of implicit groups + //public List implicitGroups = new List(); + public List implicitGroups = new List(); + public List implicitGroupedObjects; + + //public List previouslyBakedGroups = new List(); + + // List of baked lightmap world-space bounds + public List bounds = new List(); + + // Per-lightmap flags + public List hasEmissive = new List(); + + //public float[][] uvSrc; + //public float[][] uvDest; + //public int[][] lmrIndices; + public int[] uvBuffOffsets; + public int[] uvBuffLengths; + public float[] uvSrcBuff; + public float[] uvDestBuff; + public int[] lmrIndicesOffsets; + public int[] lmrIndicesLengths; + public int[] lmrIndicesBuff; + + public int[] lmGroupLODResFlags; // bits which lods are needed for which LMGroups + public int[] lmGroupMinLOD; // minimum possible resolution for given LMGroup given UV island count + public int[] lmGroupLODMatrix; + + // Reuired for network bakes + public List serverGetFileList = new List(); + public List lightmapHasColor = new List(); + public List lightmapHasMask = new List(); + public List lightmapHasDir = new List(); + public List lightmapHasRNM = new List(); + + // Partial copy of GlobalStorage to recover UV padding if needed + public List modifiedAssetPathList = new List(); + public List modifiedAssets = new List(); + + //public Texture2D debugTex; + //public RenderTexture debugRT; + + public void Init(bool forceRefresh) + { + lightsDict = new Dictionary(); + if (forceRefresh) + { + lights = new List(); + lightUIDs = new List(); + } + else + { + for(int i=0; i maps = new List(); + public List masks = new List(); + public List dirMaps = new List(); + public List rnmMaps0 = new List(); + public List rnmMaps1 = new List(); + public List rnmMaps2 = new List(); + public List mapsMode = new List(); + + // new props + public List bakedRenderers = new List(); + public List bakedIDs = new List(); + public List bakedScaleOffset = new List(); +#if UNITY_EDITOR + public List bakedVertexOffset = new List(); +#endif + public List bakedVertexColorMesh = new List(); + + public List nonBakedRenderers = new List(); + + public List bakedLights = new List(); + public List bakedLightChannels = new List(); + + public List bakedRenderersTerrain = new List(); + public List bakedIDsTerrain = new List(); + public List bakedScaleOffsetTerrain = new List(); + + public List assetList = new List(); + public List uvOverlapAssetList = new List(); // -1 = no UV1, 0 = no overlap, 1 = overlap + + public int[] idremap; + + public bool usesRealtimeGI; + + public Texture2D emptyDirectionTex; + + public bool anyVolumes = false; + public bool compressedVolumes = false; + +#if UNITY_EDITOR + [System.Serializable] + public class SectorData + { + public string name; + + public List maps = new List(); + public List masks = new List(); + public List dirMaps = new List(); + public List rnmMaps0 = new List(); + public List rnmMaps1 = new List(); + public List rnmMaps2 = new List(); + public List mapsMode = new List(); + + public List bakedRenderers = new List(); + public List bakedRenderersTerrain = new List(); + public List bakedIDs = new List(); + public List bakedIDsTerrain = new List(); + public List bakedScaleOffset = new List(); + public List bakedScaleOffsetTerrain = new List(); + public List bakedVertexColorMesh = new List(); + + public List nonBakedRenderers = new List(); + } + + public List sectors = new List(); +#endif + + void Awake() + { + ftLightmaps.RefreshScene(gameObject.scene, this); + } + + void Start() + { + // Unity can for some reason alter lightmapIndex after the scene is loaded in a multi-scene setup, so fix that + ftLightmaps.RefreshScene2(gameObject.scene, this);//, appendOffset); + } + + void OnDestroy() + { + ftLightmaps.UnloadScene(this); + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs.meta b/VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs.meta new file mode 100644 index 00000000..7aa162c3 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftLightmapsStorage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b7fa80e7116296f4eb4f49ec1544ee22 +timeCreated: 1533932932 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset b/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset new file mode 100644 index 00000000..f39583eb --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 05ca84e725c7c764aa5ed097918d14b7, type: 3} + m_Name: ftLocalStorage + m_EditorClassIdentifier: + modifiedAssetPathList: + - Assets/Bakery/examples/content/sponza/sponza.FBX + modifiedAssetPaddingHash: aaf8cc2e diff --git a/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset.meta b/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset.meta new file mode 100644 index 00000000..9a3a3742 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3b84d046cecf6174fbb2a3d01abac3eb +timeCreated: 1622807317 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs b/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs new file mode 100644 index 00000000..f8310211 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using System.Collections.Generic; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +public class ftLocalStorage : ScriptableObject +{ + [SerializeField] + public List modifiedAssetPathList = new List(); // marks model as processed + + [SerializeField] + public List modifiedAssetPaddingHash = new List(); +} + diff --git a/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs.meta b/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs.meta new file mode 100644 index 00000000..9257672f --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftLocalStorage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 05ca84e725c7c764aa5ed097918d14b7 +timeCreated: 1536868109 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader b/VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader new file mode 100644 index 00000000..1d77b15d --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader @@ -0,0 +1,54 @@ +Shader "Hidden/ftMultiply" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + // No culling or depth + Cull Off ZWrite Off ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + return o; + } + + sampler2D _MainTex; + float multiplier; + + fixed4 frag (v2f i) : SV_Target + { + float4 color = tex2D(_MainTex, i.uv); + color.rgb *= multiplier; + + return color; + } + ENDCG + } + } +} + diff --git a/VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader.meta new file mode 100644 index 00000000..f05cad8c --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftMultiply.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ca0c6046e6cde2d4391e91bbffb3e915 +timeCreated: 1534245696 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader b/VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader new file mode 100644 index 00000000..dae86c60 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader @@ -0,0 +1,49 @@ +Shader "Hidden/ftOverlapTest" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + // No culling or depth + Cull Off ZWrite Off ZTest Always + Blend One One + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + float uvSet; + + struct appdata + { + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + float2 uv = uvSet > 0.0f ? v.uv1 : v.uv0; + o.vertex = float4(uv*2-1, 0.5, 1); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + return float4(1,1,1,1) * (1.0f / 255.0f); + } + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader.meta new file mode 100644 index 00000000..65f85f16 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftOverlapTest.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 20cf64477973022498e44b932e804288 +timeCreated: 1528974529 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader b/VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader new file mode 100644 index 00000000..466bfbab --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader @@ -0,0 +1,51 @@ +Shader "Hidden/ftRGBM2Half" +{ + SubShader + { + // No culling or depth + Cull Off ZWrite Off ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + #if UNITY_UV_STARTS_AT_TOP + o.uv = v.uv; + #else + o.uv = v.uv; + o.uv.y = 1-o.uv.y; + #endif + return o; + } + + sampler2D _MainTex; + + fixed4 frag (v2f i) : SV_Target + { + float4 c = tex2D(_MainTex, i.uv); + return float4(c.rgb * c.a * EMISSIVE_RGBM_SCALE, 1.0); + } + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader.meta new file mode 100644 index 00000000..2f58a6b4 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftRGBM2Half.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b7246420d3e29ae429fc3827a1abc1e6 +timeCreated: 1533755707 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftSimpleVertexLM.shader b/VRCSDK3Worlds/Assets/Bakery/ftSimpleVertexLM.shader new file mode 100644 index 00000000..bcae7fc5 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftSimpleVertexLM.shader @@ -0,0 +1,92 @@ +Shader "Bakery/Simple Vertex Lightmapped" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + _Color ("Color", Color) = (1,1,1,1) + } + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + // make fog work + #pragma multi_compile_fog + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + float4 color : COLOR0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + UNITY_FOG_COORDS(1) + float3 color : TEXCOORD2; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + float3 _Color; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + UNITY_TRANSFER_FOG(o,o.vertex); + + // Decode baked HDR vertex color (RGBM) + o.color = v.color.rgb * v.color.a * 8.0; + o.color *= o.color; + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + float4 color = tex2D(_MainTex, i.uv); + color.rgb *= _Color; + + // Apply vertex lightmap + color.rgb *= i.color; + + UNITY_APPLY_FOG(i.fogCoord, color); + return color; + } + ENDCG + } + + Pass + { + Name "META" + Tags {"LightMode"="Meta"} + Cull Off + CGPROGRAM + + #include"UnityStandardMeta.cginc" + + float4 frag_meta2 (v2f_meta i): SV_Target + { + UnityMetaInput o; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, o); + o.Albedo = tex2D(_MainTex, i.uv) * _Color; + return UnityMetaFragment(o); + } + + #pragma vertex vert_meta + #pragma fragment frag_meta2 + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftSimpleVertexLM.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftSimpleVertexLM.shader.meta new file mode 100644 index 00000000..27e8d31d --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftSimpleVertexLM.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 06b4ed554edfece43b570527a652d54e +timeCreated: 1533631323 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader b/VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader new file mode 100644 index 00000000..fbf2dbeb --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader @@ -0,0 +1,78 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Bakery/Skybox" { +Properties { + _Tint ("Tint Color", Color) = (.5, .5, .5, .5) + _Exposure ("Exposure", Float) = 1.0 + _MatrixRight ("Right", Vector) = (1, 0, 0, 0) + _MatrixUp ("Up", Vector) = (0, 1, 0, 0) + _MatrixForward ("Forward", Vector) = (0, 0, 1, 0) + [NoScaleOffset] _Tex ("Cubemap (HDR)", Cube) = "white" {} + _NoTexture ("No texture", Float) = 0.0 + _Hemispherical ("Hemispherical", Float) = 0.0 +} + +SubShader { + Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" } + Cull Off ZWrite Off + + Pass { + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + samplerCUBE _Tex; + half4 _Tex_HDR; + half4 _Tint; + half _Exposure; + float3 _MatrixRight, _MatrixUp, _MatrixForward; + float4x4 reflection2World; + float _NoTexture, _Hemispherical; + + struct appdata_t { + float4 vertex : POSITION; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f { + float4 vertex : SV_POSITION; + float3 texcoord : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert (appdata_t v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + float3x3 tform = float3x3(_MatrixRight, _MatrixUp, _MatrixForward); + float3 pos = mul(tform, v.vertex.xyz); + o.vertex = UnityObjectToClipPos(pos); + o.texcoord = mul((float3x3)reflection2World, v.vertex.xyz); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + half4 tex = _NoTexture < 0.5 ? texCUBE (_Tex, i.texcoord) : half4(1,1,1,1); + half3 c = DecodeHDR (tex, _Tex_HDR); + if (unity_ColorSpaceDouble.x < 3) c = pow(c, 2.2f); + c = c * _Tint.rgb; + c *= _Exposure; + + if (_Hemispherical > 0.0f) c *= i.texcoord.y < 0 ? 0 : 1; + if (unity_ColorSpaceDouble.x < 3) c = pow(c, 1/2.2f); + + return half4(c, 1); + } + ENDCG + } +} + + +Fallback Off + +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader.meta new file mode 100644 index 00000000..881f44eb --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8dd49cd8305cbae4f8c358c16965dbba +timeCreated: 1526849323 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader b/VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader new file mode 100644 index 00000000..738059d6 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader @@ -0,0 +1,89 @@ +Shader "Hidden/ftUVNormalMap" +{ + Properties + { + _BumpMap ("Normal map", 2D) = "bump" { } + bestFitNormalMap ("Best fit normals texture", 2D) = "white" { } + } + SubShader + { + Pass + { + //Name "META" + //Tags {"LightMode"="Meta"} + Cull Off + CGPROGRAM + + #define _TANGENT_TO_WORLD + #define UNITY_PASS_META + #include "UnityStandardMeta.cginc" + + Texture2D bestFitNormalMap; + //sampler2D _BumpMap; + float4 _BumpMap_scaleOffset; + float _IsTerrain, _IsPerPixel; + + struct v2f_meta2 + { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float3 normal : TEXCOORD1; + float4 tangent : TEXCOORD2; + float3 binormal : TEXCOORD3; + }; + + v2f_meta2 vert_meta2 (VertexInput v) + { + v2f_meta2 o; + o.pos = float4(((v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw)*2-1) * float2(1,-1), 0.5, 1); + // UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + o.uv = v.uv0 * _BumpMap_scaleOffset.xy + _BumpMap_scaleOffset.zw; + o.normal = normalize(mul((float3x3)unity_ObjectToWorld, v.normal).xyz); + + if (_IsTerrain == 0.0f) + { + o.tangent.xyz = normalize(mul((float3x3)unity_ObjectToWorld, v.tangent.xyz).xyz); + o.binormal = cross(o.normal, o.tangent.xyz) * v.tangent.w; + o.tangent.w = v.tangent.w; + } + else + { + o.tangent.xyz = cross(o.normal, float3(0,0,1)); + o.binormal = cross(o.normal, o.tangent.xyz) * -1; + o.tangent.w = -1; + } + return o; + } + + float3 EncodeNormalBestFit(float3 n) + { + float3 nU = abs(n); + float maxNAbs = max(nU.z, max(nU.x, nU.y)); + float2 TC = nU.z 0.0f) i.binormal = cross(i.normal, i.tangent) * i.tangent.w; + + float3 normalMap = UnpackNormal(tex2D(_BumpMap, i.uv)); + float3 normal = normalize(i.tangent.xyz * normalMap.x + i.binormal * normalMap.y + i.normal * normalMap.z); + return float4(EncodeNormalBestFit(normal),1); + } + + #pragma vertex vert_meta2 + #pragma fragment frag_meta2 + ENDCG + } + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader.meta new file mode 100644 index 00000000..ec4685f9 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftUVNormalMap.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 98e1b190bbdc3a740a9d358c3d446747 +timeCreated: 1537271568 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs b/VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs new file mode 100644 index 00000000..9faa1b43 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public static class ftUniqueIDRegistry +{ + public static Dictionary Mapping = new Dictionary(); + public static Dictionary MappingInv = new Dictionary(); + + public static void Deregister(Int32 id) + { + int instanceId = GetInstanceId(id); + if (instanceId < 0) return; + MappingInv.Remove(instanceId); + Mapping.Remove(id); + } + + public static void Register(Int32 id, Int32 value) + { + if (!Mapping.ContainsKey(id)) { + Mapping[id] = value; + MappingInv[value] = id; + } + } + + public static Int32 GetInstanceId(Int32 id) + { + Int32 instanceId; + if (!Mapping.TryGetValue(id, out instanceId)) + { + return -1; + } + else + { + return instanceId; + } + } + + public static Int32 GetUID(Int32 instanceId) + { + Int32 result; + if (MappingInv.TryGetValue(instanceId, out result)) return result; + return -1; + } +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs.meta b/VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs.meta new file mode 100644 index 00000000..361f4742 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftUniqueIDRegistry.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 823b71f76e7ce5a48a9db822489f7b5d +timeCreated: 1496221374 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp b/VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp new file mode 100644 index 00000000..9b7c8246 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp differ diff --git a/VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp.meta b/VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp.meta new file mode 100644 index 00000000..2ff873c7 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftUnitySpotTexture.bmp.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 3a66602b8cc7fdd4ab57d07b4176432b +timeCreated: 1527598735 +licenseType: Store +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: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader b/VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader new file mode 100644 index 00000000..4213211a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader @@ -0,0 +1,81 @@ +Shader "Hidden/ftUnlitTerrain" +{ + Properties + { + _MainTex ("Albedo", 2D) = "white" { } + _TerrainHolesTexture("Holes Map (RGB)", 2D) = "white" {} + } + SubShader + { + Pass + { + Name "META" + Tags {"LightMode"="Meta"} + Cull Off + CGPROGRAM + + #include"UnityStandardMeta.cginc" + + float4 frag_meta2 (v2f_meta i): SV_Target + { + UnityMetaInput o; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, o); + o.Albedo = tex2D(_MainTex, i.uv); + return UnityMetaFragment(o); + } + + #pragma vertex vert_meta + #pragma fragment frag_meta2 + ENDCG + } + + Tags {"Queue" = "Overlay+1" "RenderType"="TransparentCutout"} + ZTest Always + Pass + { + CGPROGRAM + #pragma vertex vs + #pragma fragment ps + #include "UnityCG.cginc" + + #pragma multi_compile __ _ALPHATEST_ON + + sampler2D _MainTex; + +#ifdef _ALPHATEST_ON + sampler2D _TerrainHolesTexture; + + void ClipHoles(float2 uv) + { + float hole = tex2D(_TerrainHolesTexture, uv).r; + clip(hole == 0.0f ? -1 : 1); + } +#endif + + struct pi + { + float4 Position : SV_POSITION; + float2 TexCoords : TEXCOORD0; + }; + + void vs(in appdata_full IN, out pi OUT) + { + OUT.Position = UnityObjectToClipPos(IN.vertex); + OUT.TexCoords = IN.texcoord.xy; + } + + float4 ps( in pi IN ) : COLOR + { +#ifdef _ALPHATEST_ON + ClipHoles(IN.TexCoords); +#endif + float4 tex = tex2D(_MainTex, IN.TexCoords); + tex.a = 1; + return tex; + } + ENDCG + } + } + Dependency "BaseMapShader" = "Hidden/ftUnlitTerrain" + Dependency "BaseMapGenShader" = "Hidden/TerrainEngine/Splatmap/Diffuse-BaseGen" +} diff --git a/VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader.meta b/VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader.meta new file mode 100644 index 00000000..34d9064c --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/ftUnlitTerrain.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 20ea139dff8ced947aedd767ed4d773a +timeCreated: 1529086730 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/shader.meta b/VRCSDK3Worlds/Assets/Bakery/shader.meta new file mode 100644 index 00000000..6574fe46 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3be387fd488ac2c4b98568950b9b1833 +folderAsset: yes +timeCreated: 1622807246 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc new file mode 100644 index 00000000..8a6bd3ca --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc @@ -0,0 +1,1240 @@ +#ifndef BAKERY_INCLUDED +#define BAKERY_INCLUDED + +float bakeryLightmapMode; +//float2 bakeryLightmapSize; +#define BAKERYMODE_DEFAULT 0 +#define BAKERYMODE_VERTEXLM 1.0f +#define BAKERYMODE_RNM 2.0f +#define BAKERYMODE_SH 3.0f + +//#define BAKERY_SSBUMP + +//#define BAKERY_COMPRESSED_VOLUME_RGBM + +// can't fit vertexLM SH to sm3_0 interpolators +#ifndef SHADER_API_D3D11 + #undef BAKERY_VERTEXLMSH +#endif + +// can't do stuff on sm2_0 due to standard shader alrady taking up all instructions +#if SHADER_TARGET < 30 + #undef BAKERY_BICUBIC + #undef BAKERY_LMSPEC + + #undef BAKERY_RNM + #undef BAKERY_SH + #undef BAKERY_VERTEXLM +#endif + +#ifndef _NORMALMAP + #undef BAKERY_RNM + //#undef BAKERY_SH +#endif + +#ifndef UNITY_SHOULD_SAMPLE_SH + #undef BAKERY_PROBESHNONLINEAR +#endif + +#if defined(BAKERY_RNM) && defined(BAKERY_LMSPEC) +#define BAKERY_RNMSPEC +#endif + +#ifndef BAKERY_VERTEXLM + #undef BAKERY_VERTEXLMDIR + #undef BAKERY_VERTEXLMSH + #undef BAKERY_VERTEXLMMASK +#endif + +#define lumaConv float3(0.2125f, 0.7154f, 0.0721f) + +#if defined(BAKERY_SH) || defined(BAKERY_VERTEXLMSH) || defined(BAKERY_PROBESHNONLINEAR) || defined(BAKERY_VOLUME) +float shEvaluateDiffuseL1Geomerics(float L0, float3 L1, float3 n) +{ + // average energy + float R0 = L0; + + // avg direction of incoming light + float3 R1 = 0.5f * L1; + + // directional brightness + float lenR1 = length(R1); + + // linear angle between normal and direction 0-1 + //float q = 0.5f * (1.0f + dot(R1 / lenR1, n)); + //float q = dot(R1 / lenR1, n) * 0.5 + 0.5; + float q = dot(normalize(R1), n) * 0.5 + 0.5; + + // power for q + // lerps from 1 (linear) to 3 (cubic) based on directionality + float p = 1.0f + 2.0f * lenR1 / R0; + + // dynamic range constant + // should vary between 4 (highly directional) and 0 (ambient) + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); +} +#endif + +#ifdef BAKERY_VERTEXLM + float4 unpack4NFloats(float src) { + //return fmod(float4(src / 262144.0, src / 4096.0, src / 64.0, src), 64.0)/64.0; + return frac(float4(src / (262144.0*64), src / (4096.0*64), src / (64.0*64), src)); + } + float3 unpack3NFloats(float src) { + float r = frac(src); + float g = frac(src * 256.0); + float b = frac(src * 65536.0); + return float3(r, g, b); + } +#if defined(BAKERY_VERTEXLMDIR) + void BakeryVertexLMDirection(inout float3 diffuseColor, inout float3 specularColor, float3 lightDirection, float3 vertexNormalWorld, float3 normalWorld, float3 viewDir, float smoothness) + { + float3 dominantDir = Unity_SafeNormalize(lightDirection); + half halfLambert = dot(normalWorld, dominantDir) * 0.5 + 0.5; + half flatNormalHalfLambert = dot(vertexNormalWorld, dominantDir) * 0.5 + 0.5; + + #ifdef BAKERY_LMSPEC + half3 halfDir = Unity_SafeNormalize(normalize(dominantDir) - viewDir); + half nh = saturate(dot(normalWorld, halfDir)); + half perceptualRoughness = SmoothnessToPerceptualRoughness(smoothness); + half roughness = PerceptualRoughnessToRoughness(perceptualRoughness); + half spec = GGXTerm(nh, roughness); + specularColor = spec * diffuseColor; + #endif + + diffuseColor *= halfLambert / max(1e-4h, flatNormalHalfLambert); + } +#elif defined(BAKERY_VERTEXLMSH) + void BakeryVertexLMSH(inout float3 diffuseColor, inout float3 specularColor, float3 shL1x, float3 shL1y, float3 shL1z, float3 normalWorld, float3 viewDir, float smoothness) + { + float3 L0 = diffuseColor; + float3 nL1x = shL1x; + float3 nL1y = shL1y; + float3 nL1z = shL1z; + float3 L1x = nL1x * L0 * 2; + float3 L1y = nL1y * L0 * 2; + float3 L1z = nL1z * L0 * 2; + + float3 sh; + #if BAKERY_SHNONLINEAR + //sh.r = shEvaluateDiffuseL1Geomerics(L0.r, float3(L1x.r, L1y.r, L1z.r), normalWorld); + //sh.g = shEvaluateDiffuseL1Geomerics(L0.g, float3(L1x.g, L1y.g, L1z.g), normalWorld); + //sh.b = shEvaluateDiffuseL1Geomerics(L0.b, float3(L1x.b, L1y.b, L1z.b), normalWorld); + + float lumaL0 = dot(L0, 1); + float lumaL1x = dot(L1x, 1); + float lumaL1y = dot(L1y, 1); + float lumaL1z = dot(L1z, 1); + float lumaSH = shEvaluateDiffuseL1Geomerics(lumaL0, float3(lumaL1x, lumaL1y, lumaL1z), normalWorld); + + sh = L0 + normalWorld.x * L1x + normalWorld.y * L1y + normalWorld.z * L1z; + float regularLumaSH = dot(sh, 1); + //sh *= regularLumaSH < 0.001 ? 1 : (lumaSH / regularLumaSH); + sh *= lerp(1, lumaSH / regularLumaSH, saturate(regularLumaSH*16)); + + #else + sh = L0 + normalWorld.x * L1x + normalWorld.y * L1y + normalWorld.z * L1z; + #endif + + diffuseColor = max(sh, 0.0); + + #ifdef BAKERY_LMSPEC + float3 dominantDir = float3(dot(nL1x, lumaConv), dot(nL1y, lumaConv), dot(nL1z, lumaConv)); + float focus = saturate(length(dominantDir)); + half3 halfDir = Unity_SafeNormalize(normalize(dominantDir) - viewDir); + half nh = saturate(dot(normalWorld, halfDir)); + half perceptualRoughness = SmoothnessToPerceptualRoughness(smoothness );//* sqrt(focus)); + half roughness = PerceptualRoughnessToRoughness(perceptualRoughness); + half spec = GGXTerm(nh, roughness); + specularColor = max(spec * sh, 0.0); + #endif + } +#endif +#endif + +#ifdef BAKERY_BICUBIC +float BakeryBicubic_w0(float a) +{ + return (1.0f/6.0f)*(a*(a*(-a + 3.0f) - 3.0f) + 1.0f); +} + +float BakeryBicubic_w1(float a) +{ + return (1.0f/6.0f)*(a*a*(3.0f*a - 6.0f) + 4.0f); +} + +float BakeryBicubic_w2(float a) +{ + return (1.0f/6.0f)*(a*(a*(-3.0f*a + 3.0f) + 3.0f) + 1.0f); +} + +float BakeryBicubic_w3(float a) +{ + return (1.0f/6.0f)*(a*a*a); +} + +float BakeryBicubic_g0(float a) +{ + return BakeryBicubic_w0(a) + BakeryBicubic_w1(a); +} + +float BakeryBicubic_g1(float a) +{ + return BakeryBicubic_w2(a) + BakeryBicubic_w3(a); +} + +float BakeryBicubic_h0(float a) +{ + return -1.0f + BakeryBicubic_w1(a) / (BakeryBicubic_w0(a) + BakeryBicubic_w1(a)) + 0.5f; +} + +float BakeryBicubic_h1(float a) +{ + return 1.0f + BakeryBicubic_w3(a) / (BakeryBicubic_w2(a) + BakeryBicubic_w3(a)) + 0.5f; +} +#endif + +struct BakeryVertexInput +{ + float4 vertex : POSITION; +#ifdef BAKERY_VERTEXLM + fixed4 color : COLOR; + #ifdef BAKERY_VERTEXLMSH + float2 uv3 : TEXCOORD3; + #endif +#endif + half3 normal : NORMAL; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; +#if defined(DYNAMICLIGHTMAP_ON) || defined(UNITY_PASS_META) + float2 uv2 : TEXCOORD2; +#endif +#if defined(_TANGENT_TO_WORLD) || defined(BAKERY_RNMSPEC) + half4 tangent : TANGENT; +#endif + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +float4 BakeryTexCoords(BakeryVertexInput v) +{ + float4 texcoord; + texcoord.xy = TRANSFORM_TEX(v.uv0, _MainTex); // Always source from uv0 + texcoord.zw = TRANSFORM_TEX(((_UVSec == 0) ? v.uv0 : v.uv1), _DetailAlbedoMap); + return texcoord; +} + +inline half4 BakeryVertexGIForward(BakeryVertexInput v, float3 posWorld, half3 normalWorld) +{ + half4 ambientOrLightmapUV = 0; + // Static lightmaps +#ifndef LIGHTMAP_OFF + ambientOrLightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + ambientOrLightmapUV.zw = 0; + // Sample light probe for Dynamic objects only (no static or dynamic lightmaps) +#elif UNITY_SHOULD_SAMPLE_SH +#ifdef VERTEXLIGHT_ON + // Approximated illumination from non-important point lights + ambientOrLightmapUV.rgb = Shade4PointLights( + unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, + unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb, + unity_4LightAtten0, posWorld, normalWorld); +#endif + + ambientOrLightmapUV.rgb = ShadeSHPerVertex(normalWorld, ambientOrLightmapUV.rgb); +#endif + +#ifdef DYNAMICLIGHTMAP_ON + ambientOrLightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; +#endif + +#ifdef BAKERY_VERTEXLM + if (bakeryLightmapMode == BAKERYMODE_VERTEXLM) + { + #ifdef BAKERY_VERTEXLMMASK + ambientOrLightmapUV = unpack4NFloats(v.uv1.x); + #endif + } +#endif + + return ambientOrLightmapUV; +} + +//Forward Pass +struct BakeryVertexOutputForwardBase +{ + float4 pos : SV_POSITION; + float4 tex : TEXCOORD0; + half3 eyeVec : TEXCOORD1; + +#if UNITY_VERSION >= 201740 + float4 tangentToWorldAndPackedData[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax] +#else + half4 tangentToWorldAndPackedData[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax] +#endif + +#if defined(BAKERY_RNMSPEC) + half3 viewDirForParallax : TEXCOORD13; +#endif + + half4 ambientOrLightmapUV : TEXCOORD5; // SH or Lightmap UV + UNITY_SHADOW_COORDS(6) + UNITY_FOG_COORDS(7) + +#ifdef BAKERY_VERTEXLM + float4 color : COLOR_centroid; + #if defined(BAKERY_VERTEXLMDIR) + float3 lightDirection : TEXCOORD10_centroid; // is this even legal + #elif defined(BAKERY_VERTEXLMSH) + float3 shL1x : TEXCOORD10_centroid; + float3 shL1y : TEXCOORD11_centroid; + float3 shL1z : TEXCOORD12_centroid; + #endif +#endif + + // next ones would not fit into SM2.0 limits, but they are always for SM3.0+ +#if UNITY_SPECCUBE_BOX_PROJECTION || UNITY_LIGHT_PROBE_PROXY_VOLUME || (UNITY_REQUIRE_FRAG_WORLDPOS && !UNITY_PACK_WORLDPOS_WITH_TANGENT) + float3 posWorld : TEXCOORD8; +#endif + +#if UNITY_OPTIMIZE_TEXCUBELOD + #if UNITY_SPECCUBE_BOX_PROJECTION + half3 reflUVW : TEXCOORD9; + #else + half3 reflUVW : TEXCOORD8; + #endif +#endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO +}; + +BakeryVertexOutputForwardBase bakeryVertForwardBase(BakeryVertexInput v) +{ + UNITY_SETUP_INSTANCE_ID(v); + BakeryVertexOutputForwardBase o; + UNITY_INITIALIZE_OUTPUT(BakeryVertexOutputForwardBase, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + float4 posWorld = mul(unity_ObjectToWorld, v.vertex); + #if UNITY_REQUIRE_FRAG_WORLDPOS + #if UNITY_PACK_WORLDPOS_WITH_TANGENT + o.tangentToWorldAndPackedData[0].w = posWorld.x; + o.tangentToWorldAndPackedData[1].w = posWorld.y; + o.tangentToWorldAndPackedData[2].w = posWorld.z; + #else + o.posWorld = posWorld.xyz; + #endif + #endif + o.pos = UnityObjectToClipPos(v.vertex); + + float3 normalWorld = UnityObjectToWorldNormal(v.normal); + o.eyeVec = NormalizePerVertexNormal(posWorld.xyz - _WorldSpaceCameraPos); + + o.tex = BakeryTexCoords(v); +#ifdef _TANGENT_TO_WORLD + float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + float3x3 tangentToWorld = CreateTangentToWorldPerVertex(normalWorld, tangentWorld.xyz, tangentWorld.w); + o.tangentToWorldAndPackedData[0].xyz = tangentToWorld[0]; + o.tangentToWorldAndPackedData[1].xyz = tangentToWorld[1]; + o.tangentToWorldAndPackedData[2].xyz = tangentToWorld[2]; +#else + o.tangentToWorldAndPackedData[0].xyz = 0; + o.tangentToWorldAndPackedData[1].xyz = 0; + o.tangentToWorldAndPackedData[2].xyz = normalWorld; +#endif + //We need this for shadow receving + UNITY_TRANSFER_SHADOW(o, v.uv1); + + o.ambientOrLightmapUV = BakeryVertexGIForward(v, posWorld, normalWorld); + +#if defined(_PARALLAXMAP) || defined(BAKERY_RNMSPEC) + TANGENT_SPACE_ROTATION; +#endif + +#if defined(_PARALLAXMAP) + half3 viewDirForParallax = mul(rotation, ObjSpaceViewDir(v.vertex)); + o.tangentToWorldAndPackedData[0].w = viewDirForParallax.x; + o.tangentToWorldAndPackedData[1].w = viewDirForParallax.y; + o.tangentToWorldAndPackedData[2].w = viewDirForParallax.z; +#endif + +#if defined(BAKERY_RNMSPEC) + o.viewDirForParallax = mul(rotation, ObjSpaceViewDir(v.vertex)); +#endif + +#if UNITY_OPTIMIZE_TEXCUBELOD + o.reflUVW = reflect(o.eyeVec, normalWorld); +#endif + +#ifdef BAKERY_VERTEXLM + // Unpack from RGBM + o.color = v.color; + o.color.rgb *= o.color.a * 8.0f; + o.color.rgb *= o.color.rgb; + + #if defined(BAKERY_VERTEXLMDIR) + o.lightDirection = unpack3NFloats(v.uv1.y) * 2 - 1; + #elif defined(BAKERY_VERTEXLMSH) + o.shL1x = unpack3NFloats(v.uv1.y) * 2 - 1; + o.shL1y = unpack3NFloats(v.uv3.x) * 2 - 1; + o.shL1z = unpack3NFloats(v.uv3.y) * 2 - 1; + #endif +#endif + + UNITY_TRANSFER_FOG(o, o.pos); + return o; +} + +/* +inline UnityGI BakeryFragmentGI (FragmentCommonData s, half occlusion, half4 i_ambientOrLightmapUV, half atten, UnityLight light, bool reflections) +{ + UnityGIInput d; + d.light = light; + d.worldPos = s.posWorld; + d.worldViewDir = -s.eyeVec; + d.atten = atten; + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + d.ambient = 0; + d.lightmapUV = i_ambientOrLightmapUV; + #else + d.ambient = i_ambientOrLightmapUV.rgb; + d.lightmapUV = 0; + #endif + + d.probeHDR[0] = unity_SpecCube0_HDR; + d.probeHDR[1] = unity_SpecCube1_HDR; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) + d.boxMin[0] = unity_SpecCube0_BoxMin; // .w holds lerp value for blending + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + d.boxMax[0] = unity_SpecCube0_BoxMax; + d.probePosition[0] = unity_SpecCube0_ProbePosition; + d.boxMax[1] = unity_SpecCube1_BoxMax; + d.boxMin[1] = unity_SpecCube1_BoxMin; + d.probePosition[1] = unity_SpecCube1_ProbePosition; + #endif + + if(reflections) + { + Unity_GlossyEnvironmentData g = UnityGlossyEnvironmentSetup(s.smoothness, -s.eyeVec, s.normalWorld, s.specColor); + // Replace the reflUVW if it has been compute in Vertex shader. Note: the compiler will optimize the calcul in UnityGlossyEnvironmentSetup itself + #if UNITY_STANDARD_SIMPLE + g.reflUVW = s.reflUVW; + #endif + + return UnityGlobalIllumination (d, occlusion, s.normalWorld, g); + } + else + { + return UnityGlobalIllumination (d, occlusion, s.normalWorld); + } +} +*/ + +#if defined(BAKERY_RNM) || defined(BAKERY_SH) +sampler2D _RNM0, _RNM1, _RNM2; +float4 _RNM0_TexelSize; +#endif + +#ifdef BAKERY_VOLUME +Texture3D _Volume0, _Volume1, _Volume2, _VolumeMask; +SamplerState sampler_Volume0; +float3 _VolumeMin, _VolumeInvSize; +float3 _GlobalVolumeMin, _GlobalVolumeInvSize; + #ifdef BAKERY_COMPRESSED_VOLUME + Texture3D _Volume3; + #endif + #ifdef BAKERY_VOLROTATION + float4x4 _GlobalVolumeMatrix, _VolumeMatrix; + #endif +#endif + +#ifdef BAKERY_BICUBIC + // Bicubic + float4 BakeryTex2D(sampler2D tex, float2 uv, float4 texelSize) + { + float x = uv.x * texelSize.z; + float y = uv.y * texelSize.z; + + x -= 0.5f; + y -= 0.5f; + + float px = floor(x); + float py = floor(y); + + float fx = x - px; + float fy = y - py; + + float g0x = BakeryBicubic_g0(fx); + float g1x = BakeryBicubic_g1(fx); + float h0x = BakeryBicubic_h0(fx); + float h1x = BakeryBicubic_h1(fx); + float h0y = BakeryBicubic_h0(fy); + float h1y = BakeryBicubic_h1(fy); + + return BakeryBicubic_g0(fy) * ( g0x * tex2D(tex, (float2(px + h0x, py + h0y) * texelSize.x)) + + g1x * tex2D(tex, (float2(px + h1x, py + h0y) * texelSize.x))) + + + BakeryBicubic_g1(fy) * ( g0x * tex2D(tex, (float2(px + h0x, py + h1y) * texelSize.x)) + + g1x * tex2D(tex, (float2(px + h1x, py + h1y) * texelSize.x))); + } + float4 BakeryTex2D(Texture2D tex, SamplerState s, float2 uv, float4 texelSize) + { + float x = uv.x * texelSize.z; + float y = uv.y * texelSize.z; + + x -= 0.5f; + y -= 0.5f; + + float px = floor(x); + float py = floor(y); + + float fx = x - px; + float fy = y - py; + + float g0x = BakeryBicubic_g0(fx); + float g1x = BakeryBicubic_g1(fx); + float h0x = BakeryBicubic_h0(fx); + float h1x = BakeryBicubic_h1(fx); + float h0y = BakeryBicubic_h0(fy); + float h1y = BakeryBicubic_h1(fy); + + return BakeryBicubic_g0(fy) * ( g0x * tex.Sample(s, (float2(px + h0x, py + h0y) * texelSize.x)) + + g1x * tex.Sample(s, (float2(px + h1x, py + h0y) * texelSize.x))) + + + BakeryBicubic_g1(fy) * ( g0x * tex.Sample(s, (float2(px + h0x, py + h1y) * texelSize.x)) + + g1x * tex.Sample(s, (float2(px + h1x, py + h1y) * texelSize.x))); + } +#else + // Bilinear + float4 BakeryTex2D(sampler2D tex, float2 uv, float4 texelSize) + { + return tex2D(tex, uv); + } + float4 BakeryTex2D(Texture2D tex, SamplerState s, float2 uv, float4 texelSize) + { + return tex.Sample(s, uv); + } +#endif + +#ifdef DIRLIGHTMAP_COMBINED +#ifdef BAKERY_LMSPEC +float BakeryDirectionalLightmapSpecular(float2 lmUV, float3 normalWorld, float3 viewDir, float smoothness) +{ + float3 dominantDir = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, lmUV).xyz * 2 - 1; + half3 halfDir = Unity_SafeNormalize(normalize(dominantDir) - viewDir); + half nh = saturate(dot(normalWorld, halfDir)); + half perceptualRoughness = SmoothnessToPerceptualRoughness(smoothness); + half roughness = PerceptualRoughnessToRoughness(perceptualRoughness); + half spec = GGXTerm(nh, roughness); + return spec; +} +#endif +#endif + +#ifdef BAKERY_RNM +void BakeryRNM(inout float3 diffuseColor, inout float3 specularColor, float2 lmUV, float3 normalMap, float smoothness, float3 viewDirT) +{ + const float3 rnmBasis0 = float3(0.816496580927726f, 0, 0.5773502691896258f); + const float3 rnmBasis1 = float3(-0.4082482904638631f, 0.7071067811865475f, 0.5773502691896258f); + const float3 rnmBasis2 = float3(-0.4082482904638631f, -0.7071067811865475f, 0.5773502691896258f); + + float3 rnm0 = DecodeLightmap(BakeryTex2D(_RNM0, lmUV, _RNM0_TexelSize)); + float3 rnm1 = DecodeLightmap(BakeryTex2D(_RNM1, lmUV, _RNM0_TexelSize)); + float3 rnm2 = DecodeLightmap(BakeryTex2D(_RNM2, lmUV, _RNM0_TexelSize)); + + #ifdef BAKERY_SSBUMP + diffuseColor = normalMap.x * rnm0 + + normalMap.z * rnm1 + + normalMap.y * rnm2; + diffuseColor *= 2; + #else + diffuseColor = saturate(dot(rnmBasis0, normalMap)) * rnm0 + + saturate(dot(rnmBasis1, normalMap)) * rnm1 + + saturate(dot(rnmBasis2, normalMap)) * rnm2; + #endif + + #ifdef BAKERY_LMSPEC + float3 dominantDirT = rnmBasis0 * dot(rnm0, lumaConv) + + rnmBasis1 * dot(rnm1, lumaConv) + + rnmBasis2 * dot(rnm2, lumaConv); + + float3 dominantDirTN = NormalizePerPixelNormal(dominantDirT); + float3 specColor = saturate(dot(rnmBasis0, dominantDirTN)) * rnm0 + + saturate(dot(rnmBasis1, dominantDirTN)) * rnm1 + + saturate(dot(rnmBasis2, dominantDirTN)) * rnm2; + + half3 halfDir = Unity_SafeNormalize(dominantDirTN - viewDirT); + half nh = saturate(dot(normalMap, halfDir)); + half perceptualRoughness = SmoothnessToPerceptualRoughness(smoothness); + half roughness = PerceptualRoughnessToRoughness(perceptualRoughness); + half spec = GGXTerm(nh, roughness); + specularColor = spec * specColor; + #endif +} +#endif + +#ifdef BAKERY_SH +void BakerySH(inout float3 diffuseColor, inout float3 specularColor, float2 lmUV, float3 normalWorld, float3 viewDir, float smoothness) +{ +#ifdef SHADER_API_D3D11 + float3 L0 = DecodeLightmap(BakeryTex2D(unity_Lightmap, samplerunity_Lightmap, lmUV, _RNM0_TexelSize)); +#else + float3 L0 = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, lmUV)); +#endif + float3 nL1x = BakeryTex2D(_RNM0, lmUV, _RNM0_TexelSize) * 2 - 1; + float3 nL1y = BakeryTex2D(_RNM1, lmUV, _RNM0_TexelSize) * 2 - 1; + float3 nL1z = BakeryTex2D(_RNM2, lmUV, _RNM0_TexelSize) * 2 - 1; + float3 L1x = nL1x * L0 * 2; + float3 L1y = nL1y * L0 * 2; + float3 L1z = nL1z * L0 * 2; + + float3 sh; +#if BAKERY_SHNONLINEAR + float lumaL0 = dot(L0, 1); + float lumaL1x = dot(L1x, 1); + float lumaL1y = dot(L1y, 1); + float lumaL1z = dot(L1z, 1); + float lumaSH = shEvaluateDiffuseL1Geomerics(lumaL0, float3(lumaL1x, lumaL1y, lumaL1z), normalWorld); + + sh = L0 + normalWorld.x * L1x + normalWorld.y * L1y + normalWorld.z * L1z; + float regularLumaSH = dot(sh, 1); + //sh *= regularLumaSH < 0.001 ? 1 : (lumaSH / regularLumaSH); + sh *= lerp(1, lumaSH / regularLumaSH, saturate(regularLumaSH*16)); + + //sh.r = shEvaluateDiffuseL1Geomerics(L0.r, float3(L1x.r, L1y.r, L1z.r), normalWorld); + //sh.g = shEvaluateDiffuseL1Geomerics(L0.g, float3(L1x.g, L1y.g, L1z.g), normalWorld); + //sh.b = shEvaluateDiffuseL1Geomerics(L0.b, float3(L1x.b, L1y.b, L1z.b), normalWorld); + +#else + sh = L0 + normalWorld.x * L1x + normalWorld.y * L1y + normalWorld.z * L1z; +#endif + + diffuseColor = max(sh, 0.0); + + #ifdef BAKERY_LMSPEC + float3 dominantDir = float3(dot(nL1x, lumaConv), dot(nL1y, lumaConv), dot(nL1z, lumaConv)); + float focus = saturate(length(dominantDir)); + half3 halfDir = Unity_SafeNormalize(normalize(dominantDir) - viewDir); + half nh = saturate(dot(normalWorld, halfDir)); + half perceptualRoughness = SmoothnessToPerceptualRoughness(smoothness );//* sqrt(focus)); + half roughness = PerceptualRoughnessToRoughness(perceptualRoughness); + half spec = GGXTerm(nh, roughness); + + sh = L0 + dominantDir.x * L1x + dominantDir.y * L1y + dominantDir.z * L1z; + + specularColor = max(spec * sh, 0.0); + #endif +} +#endif + +half4 bakeryFragForwardBase(BakeryVertexOutputForwardBase i) : SV_Target +{ + FRAGMENT_SETUP(s) +#if UNITY_OPTIMIZE_TEXCUBELOD + s.reflUVW = i.reflUVW; +#endif + + UnityLight mainLight = MainLight (); + UNITY_LIGHT_ATTENUATION(atten, i, s.posWorld); + +#ifdef BAKERY_VOLUME + bool isGlobal = _VolumeInvSize.x > 1000000; // ~inf + float3 volViewDir = s.eyeVec; + #ifdef BAKERY_VOLROTATION + float4x4 volMatrix = (isGlobal ? _GlobalVolumeMatrix : _VolumeMatrix); + float3 volInvSize = (isGlobal ? _GlobalVolumeInvSize : _VolumeInvSize); + float3 lpUV = mul(volMatrix, float4(s.posWorld,1)).xyz * volInvSize + 0.5f; + float3 volNormal = mul((float3x3)volMatrix, s.normalWorld); + #ifdef BAKERY_LMSPEC + volViewDir = mul((float3x3)volMatrix, volViewDir); + #endif + #else + float3 lpUV = (s.posWorld - (isGlobal ? _GlobalVolumeMin : _VolumeMin)) * (isGlobal ? _GlobalVolumeInvSize : _VolumeInvSize); + float3 volNormal = s.normalWorld; + #endif +#endif + +#ifdef BAKERY_VOLUME + mainLight.color *= saturate(dot(_VolumeMask.Sample(sampler_Volume0, lpUV), unity_OcclusionMaskSelector)); +#elif BAKERY_VERTEXLMMASK + if (bakeryLightmapMode == BAKERYMODE_VERTEXLM) + { + mainLight.color *= saturate(dot(i.ambientOrLightmapUV, unity_OcclusionMaskSelector)); + } +#endif + + half occlusion = Occlusion(i.tex.xy); + UnityGI gi = FragmentGI(s, occlusion, i.ambientOrLightmapUV, atten, mainLight); + +#ifdef BAKERY_VOLUME + + #ifdef BAKERY_COMPRESSED_VOLUME + float4 tex0, tex1, tex2, tex3; + float3 L0, L1x, L1y, L1z; + tex0 = _Volume0.Sample(sampler_Volume0, lpUV); + tex1 = _Volume1.Sample(sampler_Volume0, lpUV) * 2 - 1; + tex2 = _Volume2.Sample(sampler_Volume0, lpUV) * 2 - 1; + tex3 = _Volume3.Sample(sampler_Volume0, lpUV) * 2 - 1; + #ifdef BAKERY_COMPRESSED_VOLUME_RGBM + L0 = tex0.xyz * (tex0.w * 8.0f); + L0 *= L0; + #else + L0 = tex0.xyz; + #endif + L1x = tex1.xyz * L0; + L1y = tex2.xyz * L0; + L1z = tex3.xyz * L0; + #else + float4 tex0, tex1, tex2; + float3 L0, L1x, L1y, L1z; + tex0 = _Volume0.Sample(sampler_Volume0, lpUV); + tex1 = _Volume1.Sample(sampler_Volume0, lpUV); + tex2 = _Volume2.Sample(sampler_Volume0, lpUV); + L0 = tex0.xyz; + L1x = tex1.xyz; + L1y = tex2.xyz; + L1z = float3(tex0.w, tex1.w, tex2.w); + #endif + gi.indirect.diffuse.r = shEvaluateDiffuseL1Geomerics(L0.r, float3(L1x.r, L1y.r, L1z.r), volNormal); + gi.indirect.diffuse.g = shEvaluateDiffuseL1Geomerics(L0.g, float3(L1x.g, L1y.g, L1z.g), volNormal); + gi.indirect.diffuse.b = shEvaluateDiffuseL1Geomerics(L0.b, float3(L1x.b, L1y.b, L1z.b), volNormal); + + #ifdef UNITY_COLORSPACE_GAMMA + gi.indirect.diffuse = pow(gi.indirect.diffuse, 1.0f / 2.2f); + #endif + + #ifdef BAKERY_LMSPEC + float3 nL1x = L1x / L0; + float3 nL1y = L1y / L0; + float3 nL1z = L1z / L0; + float3 dominantDir = float3(dot(nL1x, lumaConv), dot(nL1y, lumaConv), dot(nL1z, lumaConv)); + half3 halfDir = Unity_SafeNormalize(normalize(dominantDir) - volViewDir); + half nh = saturate(dot(volNormal, halfDir)); + half perceptualRoughness = SmoothnessToPerceptualRoughness(s.smoothness); + half roughness = PerceptualRoughnessToRoughness(perceptualRoughness); + half spec = GGXTerm(nh, roughness); + float3 sh = L0 + dominantDir.x * L1x + dominantDir.y * L1y + dominantDir.z * L1z; + gi.indirect.specular += max(spec * sh, 0.0); + #endif + +#elif BAKERY_PROBESHNONLINEAR + float3 L0 = float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + gi.indirect.diffuse.r = shEvaluateDiffuseL1Geomerics(L0.r, unity_SHAr.xyz, s.normalWorld); + gi.indirect.diffuse.g = shEvaluateDiffuseL1Geomerics(L0.g, unity_SHAg.xyz, s.normalWorld); + gi.indirect.diffuse.b = shEvaluateDiffuseL1Geomerics(L0.b, unity_SHAb.xyz, s.normalWorld); +#endif + +#ifdef DIRLIGHTMAP_COMBINED +#ifdef BAKERY_LMSPEC + if (bakeryLightmapMode == BAKERYMODE_DEFAULT) + { + gi.indirect.specular += BakeryDirectionalLightmapSpecular(i.ambientOrLightmapUV.xy, s.normalWorld, s.eyeVec, s.smoothness) * gi.indirect.diffuse; + } +#endif +#endif + +#ifdef BAKERY_VERTEXLM + if (bakeryLightmapMode == BAKERYMODE_VERTEXLM) + { + gi.indirect.diffuse = i.color.rgb; + float3 prevSpec = gi.indirect.specular; + + #if defined(BAKERY_VERTEXLMDIR) + BakeryVertexLMDirection(gi.indirect.diffuse, gi.indirect.specular, i.lightDirection, i.tangentToWorldAndPackedData[2].xyz, s.normalWorld, s.eyeVec, s.smoothness); + gi.indirect.specular += prevSpec; + #elif defined (BAKERY_VERTEXLMSH) + BakeryVertexLMSH(gi.indirect.diffuse, gi.indirect.specular, i.shL1x, i.shL1y, i.shL1z, s.normalWorld, s.eyeVec, s.smoothness); + gi.indirect.specular += prevSpec; + #endif + } +#endif + +#ifdef BAKERY_RNM + if (bakeryLightmapMode == BAKERYMODE_RNM) + { + #ifdef BAKERY_SSBUMP + float3 normalMap = tex2D(_BumpMap, i.tex.xy).xyz; + #else + float3 normalMap = NormalInTangentSpace(i.tex); + #endif + + float3 eyeVecT = 0; + #ifdef BAKERY_LMSPEC + eyeVecT = -NormalizePerPixelNormal(i.viewDirForParallax); + #endif + + float3 prevSpec = gi.indirect.specular; + BakeryRNM(gi.indirect.diffuse, gi.indirect.specular, i.ambientOrLightmapUV.xy, normalMap, s.smoothness, eyeVecT); + gi.indirect.specular += prevSpec; + } +#endif + +#ifdef BAKERY_SH + #if SHADER_TARGET >= 30 + if (bakeryLightmapMode == BAKERYMODE_SH) + #endif + { + float3 prevSpec = gi.indirect.specular; + BakerySH(gi.indirect.diffuse, gi.indirect.specular, i.ambientOrLightmapUV.xy, s.normalWorld, s.eyeVec, s.smoothness); + gi.indirect.specular += prevSpec; + } +#endif + + half4 c = UNITY_BRDF_PBS(s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, gi.light, gi.indirect); + + c.rgb += UNITY_BRDF_GI(s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, occlusion, gi); + c.rgb += Emission(i.tex.xy); + + UNITY_APPLY_FOG(i.fogCoord, c.rgb); + + return OutputForward(c, s.alpha); +} + + +// Additive forward pass (one light per pass) +struct BakeryVertexOutputForwardAdd +{ + float4 pos : SV_POSITION; + float4 tex : TEXCOORD0; + half3 eyeVec : TEXCOORD1; +#if UNITY_VERSION >= 201740 + float4 tangentToWorldAndLightDir[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax] +#else + half4 tangentToWorldAndLightDir[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax] +#endif + float3 posWorld : TEXCOORD5; + UNITY_SHADOW_COORDS(6) + UNITY_FOG_COORDS(7) + + // next ones would not fit into SM2.0 limits, but they are always for SM3.0+ +#if defined(_PARALLAXMAP) + half3 viewDirForParallax : TEXCOORD8; +#endif + +#ifdef BAKERY_VERTEXLMMASK + fixed4 shadowMask : COLOR; +#endif + + UNITY_VERTEX_OUTPUT_STEREO +}; + +BakeryVertexOutputForwardAdd bakeryVertForwardAdd(BakeryVertexInput v) +{ + UNITY_SETUP_INSTANCE_ID(v); + BakeryVertexOutputForwardAdd o; + UNITY_INITIALIZE_OUTPUT(BakeryVertexOutputForwardAdd, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + float4 posWorld = mul(unity_ObjectToWorld, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); + + o.tex = BakeryTexCoords(v); + o.eyeVec = NormalizePerVertexNormal(posWorld.xyz - _WorldSpaceCameraPos); + o.posWorld = posWorld.xyz; + float3 normalWorld = UnityObjectToWorldNormal(v.normal); +#ifdef _TANGENT_TO_WORLD + float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + float3x3 tangentToWorld = CreateTangentToWorldPerVertex(normalWorld, tangentWorld.xyz, tangentWorld.w); + o.tangentToWorldAndLightDir[0].xyz = tangentToWorld[0]; + o.tangentToWorldAndLightDir[1].xyz = tangentToWorld[1]; + o.tangentToWorldAndLightDir[2].xyz = tangentToWorld[2]; +#else + o.tangentToWorldAndLightDir[0].xyz = 0; + o.tangentToWorldAndLightDir[1].xyz = 0; + o.tangentToWorldAndLightDir[2].xyz = normalWorld; +#endif + //We need this for shadow receving + UNITY_TRANSFER_SHADOW(o, v.uv1); + + float3 lightDir = _WorldSpaceLightPos0.xyz - posWorld.xyz * _WorldSpaceLightPos0.w; +#ifndef USING_DIRECTIONAL_LIGHT + lightDir = NormalizePerVertexNormal(lightDir); +#endif + o.tangentToWorldAndLightDir[0].w = lightDir.x; + o.tangentToWorldAndLightDir[1].w = lightDir.y; + o.tangentToWorldAndLightDir[2].w = lightDir.z; + +#ifdef _PARALLAXMAP + TANGENT_SPACE_ROTATION; + o.viewDirForParallax = mul(rotation, ObjSpaceViewDir(v.vertex)); +#endif + +#ifdef BAKERY_VERTEXLMMASK + o.shadowMask = unpack4NFloats(v.uv1.x); +#endif + + UNITY_TRANSFER_FOG(o, o.pos); + return o; +} + +half4 bakeryFragForwardAdd(BakeryVertexOutputForwardAdd i) : SV_Target +{ + FRAGMENT_SETUP_FWDADD(s) + + UNITY_LIGHT_ATTENUATION(atten, i, s.posWorld) + UnityLight light = AdditiveLight (IN_LIGHTDIR_FWDADD(i), atten); + UnityIndirect noIndirect = ZeroIndirect (); + + half4 c = UNITY_BRDF_PBS(s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, light, noIndirect); + +#ifdef BAKERY_VOLUME + bool isGlobal = _VolumeInvSize.x > 1000000; // ~inf + + #ifdef BAKERY_VOLROTATION + float4x4 volMatrix = (isGlobal ? _GlobalVolumeMatrix : _VolumeMatrix); + float3 volInvSize = (isGlobal ? _GlobalVolumeInvSize : _VolumeInvSize); + float3 lpUV = mul(volMatrix, float4(s.posWorld,1)).xyz * volInvSize + 0.5f; + #else + float3 lpUV = (s.posWorld - (isGlobal ? _GlobalVolumeMin : _VolumeMin)) * (isGlobal ? _GlobalVolumeInvSize : _VolumeInvSize); + #endif + + c *= saturate(dot(_VolumeMask.Sample(sampler_Volume0, lpUV), unity_OcclusionMaskSelector)); + +#elif BAKERY_VERTEXLMMASK + if (bakeryLightmapMode == BAKERYMODE_VERTEXLM) + { + c *= saturate(dot(i.shadowMask, unity_OcclusionMaskSelector)); + } +#endif + + UNITY_APPLY_FOG_COLOR(i.fogCoord, c.rgb, half4(0,0,0,0)); // fog towards black in additive pass + + return OutputForward(c, s.alpha); +} + + +//Deferred Pass +struct BakeryVertexOutputDeferred +{ + float4 pos : SV_POSITION; + float4 tex : TEXCOORD0; + half3 eyeVec : TEXCOORD1; + +#if UNITY_VERSION >= 201740 + float4 tangentToWorldAndPackedData[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax] +#else + half4 tangentToWorldAndPackedData[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax] +#endif + +#if defined(BAKERY_RNMSPEC) + half3 viewDirForParallax : TEXCOORD9; +#endif + + half4 ambientOrLightmapUV : TEXCOORD5; // SH or Lightmap UVs + +#ifdef BAKERY_VERTEXLM + fixed4 color : COLOR; + #if defined(BAKERY_VERTEXLMDIR) + float3 lightDirection : TEXCOORD8; + #elif defined(BAKERY_VERTEXLMSH) + float3 shL1x : TEXCOORD8_centroid; + float3 shL1y : TEXCOORD10_centroid; + float3 shL1z : TEXCOORD11_centroid; + #endif +#endif + +#if UNITY_SPECCUBE_BOX_PROJECTION || UNITY_LIGHT_PROBE_PROXY_VOLUME || (UNITY_REQUIRE_FRAG_WORLDPOS && !UNITY_PACK_WORLDPOS_WITH_TANGENT) || BAKERY_VOLUME + float3 posWorld : TEXCOORD6; +#endif + +#if UNITY_OPTIMIZE_TEXCUBELOD +#if UNITY_SPECCUBE_BOX_PROJECTION + half3 reflUVW : TEXCOORD7; +#else + half3 reflUVW : TEXCOORD6; +#endif +#endif + + UNITY_VERTEX_OUTPUT_STEREO +}; + +BakeryVertexOutputDeferred bakeryVertDeferred(BakeryVertexInput v) +{ + UNITY_SETUP_INSTANCE_ID(v); + BakeryVertexOutputDeferred o; + UNITY_INITIALIZE_OUTPUT(BakeryVertexOutputDeferred, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + float4 posWorld = mul(unity_ObjectToWorld, v.vertex); +#if UNITY_SPECCUBE_BOX_PROJECTION || UNITY_LIGHT_PROBE_PROXY_VOLUME || BAKERY_VOLUME + o.posWorld = posWorld; +#endif + o.pos = UnityObjectToClipPos(v.vertex); + + o.tex = BakeryTexCoords(v); + o.eyeVec = NormalizePerVertexNormal(posWorld.xyz - _WorldSpaceCameraPos); + float3 normalWorld = UnityObjectToWorldNormal(v.normal); +#ifdef _TANGENT_TO_WORLD + float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + float3x3 tangentToWorld = CreateTangentToWorldPerVertex(normalWorld, tangentWorld.xyz, tangentWorld.w); + o.tangentToWorldAndPackedData[0].xyz = tangentToWorld[0]; + o.tangentToWorldAndPackedData[1].xyz = tangentToWorld[1]; + o.tangentToWorldAndPackedData[2].xyz = tangentToWorld[2]; +#else + o.tangentToWorldAndPackedData[0].xyz = 0; + o.tangentToWorldAndPackedData[1].xyz = 0; + o.tangentToWorldAndPackedData[2].xyz = normalWorld; +#endif + + o.ambientOrLightmapUV = 0; + +#ifndef LIGHTMAP_OFF + o.ambientOrLightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; +#elif UNITY_SHOULD_SAMPLE_SH + o.ambientOrLightmapUV.rgb = ShadeSHPerVertex(normalWorld, o.ambientOrLightmapUV.rgb); +#endif +#ifdef DYNAMICLIGHTMAP_ON + o.ambientOrLightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; +#endif + +#ifdef BAKERY_VERTEXLMMASK + if (bakeryLightmapMode == BAKERYMODE_VERTEXLM) + { + o.ambientOrLightmapUV = unpack4NFloats(v.uv1); + } +#endif + +#if defined(_PARALLAXMAP) || defined(BAKERY_RNMSPEC) + TANGENT_SPACE_ROTATION; +#endif + +#if defined(_PARALLAXMAP) + half3 viewDirForParallax = mul(rotation, ObjSpaceViewDir(v.vertex)); + o.tangentToWorldAndPackedData[0].w = viewDirForParallax.x; + o.tangentToWorldAndPackedData[1].w = viewDirForParallax.y; + o.tangentToWorldAndPackedData[2].w = viewDirForParallax.z; +#endif + +#if defined(BAKERY_RNMSPEC) + o.viewDirForParallax = mul(rotation, ObjSpaceViewDir(v.vertex)); +#endif + +#ifdef BAKERY_VERTEXLM + // Unpack from RGBM + o.color = v.color; + o.color.rgb *= o.color.a * 8.0f; + o.color.rgb *= o.color.rgb; + + #if defined(BAKERY_VERTEXLMDIR) + o.lightDirection = unpack3NFloats(v.uv1.y) * 2 - 1; + #elif defined(BAKERY_VERTEXLMSH) + o.shL1x = unpack3NFloats(v.uv1.y) * 2 - 1; + o.shL1y = unpack3NFloats(v.uv3.x) * 2 - 1; + o.shL1z = unpack3NFloats(v.uv3.y) * 2 - 1; + #endif +#endif + +#if UNITY_OPTIMIZE_TEXCUBELOD + o.reflUVW = reflect(o.eyeVec, normalWorld); +#endif + + return o; +} + +void bakeryFragDeferred( + BakeryVertexOutputDeferred i, + out half4 outDiffuse : SV_Target0, // RT0: diffuse color (rgb), occlusion (a) + out half4 outSpecSmoothness : SV_Target1, // RT1: spec color (rgb), smoothness (a) + out half4 outNormal : SV_Target2, // RT2: normal (rgb), --unused, very low precision-- (a) + out half4 outEmission : SV_Target3 // RT3: emission (rgb), --unused-- (a) +#if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) + ,out half4 outShadowMask : SV_Target4 // RT4: shadowmask (rgba) +#endif +) +{ +#if (SHADER_TARGET < 30) + outDiffuse = 1; + outSpecSmoothness = 1; + outNormal = 0; + outEmission = 0; + #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) + outShadowMask = 1; + #endif + return; +#endif + + FRAGMENT_SETUP(s) +#if UNITY_OPTIMIZE_TEXCUBELOD + s.reflUVW = i.reflUVW; +#endif + + // no analytic lights in this pass + UnityLight dummyLight = DummyLight(); + half atten = 1; + + // only GI + half occlusion = Occlusion(i.tex.xy); +#if UNITY_ENABLE_REFLECTION_BUFFERS + bool sampleReflectionsInDeferred = false; +#else + bool sampleReflectionsInDeferred = true; +#endif + + UnityGI gi = FragmentGI(s, occlusion, i.ambientOrLightmapUV, atten, dummyLight, sampleReflectionsInDeferred); + +#ifdef BAKERY_VOLUME + bool isGlobal = _VolumeInvSize.x > 1000000; // ~inf + float3 volViewDir = s.eyeVec; + + #ifdef BAKERY_VOLROTATION + float4x4 volMatrix = (isGlobal ? _GlobalVolumeMatrix : _VolumeMatrix); + float3 volInvSize = (isGlobal ? _GlobalVolumeInvSize : _VolumeInvSize); + float3 lpUV = mul(volMatrix, float4(i.posWorld,1)).xyz * volInvSize + 0.5f; + float3 volNormal = mul((float3x3)volMatrix, s.normalWorld); + #ifdef BAKERY_LMSPEC + volViewDir = mul((float3x3)volMatrix, volViewDir); + #endif + #else + float3 lpUV = (i.posWorld - (isGlobal ? _GlobalVolumeMin : _VolumeMin)) * (isGlobal ? _GlobalVolumeInvSize : _VolumeInvSize); + float3 volNormal = s.normalWorld; + #endif + + #ifdef BAKERY_COMPRESSED_VOLUME + float4 tex0, tex1, tex2, tex3; + float3 L0, L1x, L1y, L1z; + tex0 = _Volume0.Sample(sampler_Volume0, lpUV); + tex1 = _Volume1.Sample(sampler_Volume0, lpUV) * 2 - 1; + tex2 = _Volume2.Sample(sampler_Volume0, lpUV) * 2 - 1; + tex3 = _Volume3.Sample(sampler_Volume0, lpUV) * 2 - 1; + #ifdef BAKERY_COMPRESSED_VOLUME_RGBM + L0 = tex0.xyz * (tex0.w * 8.0f); + L0 *= L0; + #else + L0 = tex0.xyz; + #endif + L1x = tex1.xyz * L0; + L1y = tex2.xyz * L0; + L1z = tex3.xyz * L0; + #else + float4 tex0, tex1, tex2; + float3 L0, L1x, L1y, L1z; + tex0 = _Volume0.Sample(sampler_Volume0, lpUV); + tex1 = _Volume1.Sample(sampler_Volume0, lpUV); + tex2 = _Volume2.Sample(sampler_Volume0, lpUV); + L0 = tex0.xyz; + L1x = tex1.xyz; + L1y = tex2.xyz; + L1z = float3(tex0.w, tex1.w, tex2.w); + #endif + + gi.indirect.diffuse.r = shEvaluateDiffuseL1Geomerics(L0.r, float3(L1x.r, L1y.r, L1z.r), volNormal); + gi.indirect.diffuse.g = shEvaluateDiffuseL1Geomerics(L0.g, float3(L1x.g, L1y.g, L1z.g), volNormal); + gi.indirect.diffuse.b = shEvaluateDiffuseL1Geomerics(L0.b, float3(L1x.b, L1y.b, L1z.b), volNormal); + #ifdef UNITY_COLORSPACE_GAMMA + gi.indirect.diffuse = pow(gi.indirect.diffuse, 1.0f / 2.2f); + #endif + + #ifdef BAKERY_LMSPEC + float3 nL1x = L1x / L0; + float3 nL1y = L1y / L0; + float3 nL1z = L1z / L0; + float3 dominantDir = float3(dot(nL1x, lumaConv), dot(nL1y, lumaConv), dot(nL1z, lumaConv)); + half3 halfDir = Unity_SafeNormalize(normalize(dominantDir) - volViewDir); + half nh = saturate(dot(volNormal, halfDir)); + half perceptualRoughness = SmoothnessToPerceptualRoughness(s.smoothness); + half roughness = PerceptualRoughnessToRoughness(perceptualRoughness); + half spec = GGXTerm(nh, roughness); + float3 sh = L0 + dominantDir.x * L1x + dominantDir.y * L1y + dominantDir.z * L1z; + gi.indirect.specular += max(spec * sh, 0.0); + #endif + +#elif BAKERY_PROBESHNONLINEAR + float3 L0 = float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + gi.indirect.diffuse.r = shEvaluateDiffuseL1Geomerics(L0.r, unity_SHAr.xyz, s.normalWorld); + gi.indirect.diffuse.g = shEvaluateDiffuseL1Geomerics(L0.g, unity_SHAg.xyz, s.normalWorld); + gi.indirect.diffuse.b = shEvaluateDiffuseL1Geomerics(L0.b, unity_SHAb.xyz, s.normalWorld); +#endif + +#ifdef DIRLIGHTMAP_COMBINED +#ifdef BAKERY_LMSPEC + if (bakeryLightmapMode == BAKERYMODE_DEFAULT) + { + gi.indirect.specular += BakeryDirectionalLightmapSpecular(i.ambientOrLightmapUV.xy, s.normalWorld, s.eyeVec, s.smoothness) * gi.indirect.diffuse; + } +#endif +#endif + +#ifdef BAKERY_VERTEXLM + if (bakeryLightmapMode == BAKERYMODE_VERTEXLM) + { + gi.indirect.diffuse = i.color.rgb; + float3 prevSpec = gi.indirect.specular; + + #if defined(BAKERY_VERTEXLMDIR) + BakeryVertexLMDirection(gi.indirect.diffuse, gi.indirect.specular, i.lightDirection, i.tangentToWorldAndPackedData[2].xyz, s.normalWorld, s.eyeVec, s.smoothness); + gi.indirect.specular += prevSpec; + #elif defined (BAKERY_VERTEXLMSH) + BakeryVertexLMSH(gi.indirect.diffuse, gi.indirect.specular, i.shL1x, i.shL1y, i.shL1z, s.normalWorld, s.eyeVec, s.smoothness); + gi.indirect.specular += prevSpec; + #endif + } +#endif + +#ifdef BAKERY_RNM + if (bakeryLightmapMode == BAKERYMODE_RNM) + { + #ifdef BAKERY_SSBUMP + float3 normalMap = tex2D(_BumpMap, i.tex.xy).xyz; + #else + float3 normalMap = NormalInTangentSpace(i.tex); + #endif + + float3 eyeVecT = 0; + #ifdef BAKERY_LMSPEC + eyeVecT = -NormalizePerPixelNormal(i.viewDirForParallax); + #endif + + float3 prevSpec = gi.indirect.specular; + BakeryRNM(gi.indirect.diffuse, gi.indirect.specular, i.ambientOrLightmapUV.xy, normalMap, s.smoothness, eyeVecT); + gi.indirect.specular += prevSpec; + } +#endif + +#ifdef BAKERY_SH + #if SHADER_TARGET >= 30 + if (bakeryLightmapMode == BAKERYMODE_SH) + #endif + { + float3 prevSpec = gi.indirect.specular; + BakerySH(gi.indirect.diffuse, gi.indirect.specular, i.ambientOrLightmapUV.xy, s.normalWorld, s.eyeVec, s.smoothness); + gi.indirect.specular += prevSpec; + } +#endif + + half3 color = UNITY_BRDF_PBS(s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, gi.light, gi.indirect).rgb; + + color += UNITY_BRDF_GI(s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, occlusion, gi); + +#ifdef _EMISSION + color += Emission(i.tex.xy); +#endif + +#ifndef UNITY_HDR_ON + color.rgb = exp2(-color.rgb); +#endif + + outDiffuse = half4(s.diffColor, occlusion); + outSpecSmoothness = half4(s.specColor, s.smoothness); + outNormal = half4(s.normalWorld*0.5 + 0.5, 1); + outEmission = half4(color, 1); + +// Baked direct lighting occlusion if any +#if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) + #ifdef BAKERY_VOLUME + outShadowMask = _VolumeMask.Sample(sampler_Volume0, lpUV); + #elif BAKERY_VERTEXLMMASK + outShadowMask = i.ambientOrLightmapUV; + #else + outShadowMask = UnityGetRawBakedOcclusions(i.ambientOrLightmapUV.xy, IN_WORLDPOS(i)); + #endif +#endif +} + +#endif diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc.meta b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc.meta new file mode 100644 index 00000000..2dca2546 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1f45fcc349188584095300fd024e8f8b +timeCreated: 1538411299 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandard.shader b/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandard.shader new file mode 100644 index 00000000..3f4b35cf --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandard.shader @@ -0,0 +1,417 @@ +Shader "Bakery/Standard" +{ + Properties + { + _Color("Color", Color) = (1,1,1,1) + _MainTex("Albedo", 2D) = "white" {} + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 + _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0 + [Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel ("Smoothness texture channel", Float) = 0 + + [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 + _MetallicGlossMap("Metallic", 2D) = "white" {} + + [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0 + [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0 + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + _Parallax ("Height Scale", Range (0.005, 0.08)) = 0.02 + _ParallaxMap ("Height Map", 2D) = "black" {} + + _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0 + _OcclusionMap("Occlusion", 2D) = "white" {} + + _EmissionColor("Color", Color) = (0,0,0) + _EmissionMap("Emission", 2D) = "white" {} + + _DetailMask("Detail Mask", 2D) = "white" {} + + _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {} + _DetailNormalMapScale("Scale", Float) = 1.0 + _DetailNormalMap("Normal Map", 2D) = "bump" {} + + [Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0 + + // Blending state + [HideInInspector] _Mode ("__mode", Float) = 0.0 + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 + [HideInInspector] _DstBlend ("__dst", Float) = 0.0 + [HideInInspector] _ZWrite ("__zw", Float) = 1.0 + + _Volume0("Volume0", 3D) = "black" {} + _Volume1("Volume1", 3D) = "black" {} + _Volume2("Volume2", 3D) = "black" {} + _VolumeMask("Volume Mask", 3D) = "white" {} + _VolumeMin("Volume min", Vector) = (0,0,0) + _VolumeInvSize("Volume Inv Size", Vector) = (1000001, 1000001, 1000001) + + [HideInInspector] _BAKERY_2SIDED ("__2s", Float) = 2.0 + [Toggle(BAKERY_2SIDEDON)] _BAKERY_2SIDEDON ("Double-sided", Float) = 0 + [Toggle(BAKERY_VERTEXLM)] _BAKERY_VERTEXLM ("Enable vertex LM", Float) = 0 + [Toggle(BAKERY_VERTEXLMDIR)] _BAKERY_VERTEXLMDIR ("Enable directional vertex LM", Float) = 0 + [Toggle(BAKERY_VERTEXLMSH)] _BAKERY_VERTEXLMSH ("Enable SH vertex LM", Float) = 0 + [Toggle(BAKERY_VERTEXLMMASK)] _BAKERY_VERTEXLMMASK ("Enable shadowmask vertex LM", Float) = 0 + [Toggle(BAKERY_SH)] _BAKERY_SH ("Enable SH", Float) = 0 + [Toggle(BAKERY_SHNONLINEAR)] _BAKERY_SHNONLINEAR ("SH non-linear mode", Float) = 1 + [Toggle(BAKERY_RNM)] _BAKERY_RNM ("Enable RNM", Float) = 0 + [Toggle(BAKERY_LMSPEC)] _BAKERY_LMSPEC ("Enable Lightmap Specular", Float) = 0 + [Toggle(BAKERY_BICUBIC)] _BAKERY_BICUBIC ("Enable Bicubic Filter", Float) = 0 + [Toggle(BAKERY_PROBESHNONLINEAR)] _BAKERY_PROBESHNONLINEAR ("Use non-linear SH for light probes", Float) = 0 + [Toggle(BAKERY_VOLUME)] _BAKERY_VOLUME ("Use volumes", Float) = 0 + [Toggle(BAKERY_VOLROTATION)] _BAKERY_VOLROTATION ("Support volume rotation", Float) = 0 + } + + CGINCLUDE + #define UNITY_SETUP_BRDF_INPUT MetallicSetup + ENDCG + + SubShader + { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 300 + + + // ------------------------------------------------------------------ + // Base forward pass (directional light, emission, lightmaps, ...) + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + Cull [_BAKERY_2SIDED] + + CGPROGRAM + #pragma target 3.0 + + // ------------------------------------- + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + #pragma shader_feature _PARALLAXMAP + #pragma shader_feature UNITY_SPECCUBE_BOX_PROJECTION + + #pragma shader_feature BAKERY_VERTEXLM + #pragma shader_feature BAKERY_VERTEXLMDIR + #pragma shader_feature BAKERY_VERTEXLMSH + #pragma shader_feature BAKERY_VERTEXLMMASK + #pragma shader_feature BAKERY_SH + #pragma shader_feature BAKERY_SHNONLINEAR + #pragma shader_feature BAKERY_RNM + #pragma shader_feature BAKERY_LMSPEC + #pragma shader_feature BAKERY_BICUBIC + #pragma shader_feature BAKERY_PROBESHNONLINEAR + #pragma shader_feature BAKERY_VOLUME + #pragma shader_feature BAKERY_COMPRESSED_VOLUME + #pragma shader_feature BAKERY_VOLROTATION + + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma multi_compile_instancing + // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes. + //#pragma multi_compile _ LOD_FADE_CROSSFADE + + #pragma vertex bakeryVertForwardBase + #pragma fragment bakeryFragForwardBase + + #include "UnityStandardCoreForward.cginc" + #include "Bakery.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Additive forward pass (one light per pass) + Pass + { + Name "FORWARD_DELTA" + Tags { "LightMode" = "ForwardAdd" } + Blend [_SrcBlend] One + Fog { Color (0,0,0,0) } // in additive pass fog should be black + ZWrite Off + ZTest LEqual + + CGPROGRAM + #pragma target 3.0 + + // ------------------------------------- + + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _PARALLAXMAP + + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_fog + // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes. + //#pragma multi_compile _ LOD_FADE_CROSSFADE + + #pragma vertex bakeryVertForwardAdd + #pragma fragment bakeryFragForwardAdd + + #include "UnityStandardCoreForward.cginc" + #include "Bakery.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On ZTest LEqual + + CGPROGRAM + #pragma target 3.0 + + // ------------------------------------- + + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _PARALLAXMAP + #pragma multi_compile_shadowcaster + #pragma multi_compile_instancing + // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes. + //#pragma multi_compile _ LOD_FADE_CROSSFADE + + #pragma vertex vertShadowCaster + #pragma fragment fragShadowCaster + + #include "UnityStandardShadow.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Deferred pass + Pass + { + Name "DEFERRED" + Tags { "LightMode" = "Deferred" } + + Cull [_BAKERY_2SIDED] + + CGPROGRAM + #pragma target 3.0 + #pragma exclude_renderers nomrt + + + // ------------------------------------- + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _PARALLAXMAP + + #pragma shader_feature BAKERY_VERTEXLM + #pragma shader_feature BAKERY_VERTEXLMDIR + #pragma shader_feature BAKERY_VERTEXLMSH + #pragma shader_feature BAKERY_VERTEXLMMASK + #pragma shader_feature BAKERY_SH + #pragma shader_feature BAKERY_SHNONLINEAR + #pragma shader_feature BAKERY_RNM + #pragma shader_feature BAKERY_LMSPEC + #pragma shader_feature BAKERY_BICUBIC + #pragma shader_feature BAKERY_PROBESHNONLINEAR + #pragma shader_feature BAKERY_VOLUME + #pragma shader_feature BAKERY_COMPRESSED_VOLUME + #pragma shader_feature BAKERY_VOLROTATION + + #pragma multi_compile_prepassfinal + #pragma multi_compile_instancing + // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes. + //#pragma multi_compile _ LOD_FADE_CROSSFADE + + #pragma vertex bakeryVertDeferred + #pragma fragment bakeryFragDeferred + + #include "UnityStandardCore.cginc" + #include "Bakery.cginc" + + ENDCG + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags { "LightMode"="Meta" } + + Cull Off + + CGPROGRAM + #pragma vertex vert_meta + #pragma fragment frag_meta + + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature EDITOR_VISUALIZATION + + #include "UnityStandardMeta.cginc" + ENDCG + } + } + + SubShader + { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 150 + + // ------------------------------------------------------------------ + // Base forward pass (directional light, emission, lightmaps, ...) + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + Cull [_BAKERY_2SIDED] + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + + //#pragma shader_feature BAKERY_VERTEXLM + //#pragma shader_feature BAKERY_VERTEXLMDIR + //#pragma shader_feature BAKERY_VERTEXLMSH + //#pragma shader_feature BAKERY_VERTEXLMMASK + //#pragma shader_feature BAKERY_SH + //#pragma shader_feature BAKERY_SHNONLINEAR + //#pragma shader_feature BAKERY_RNM + //#pragma shader_feature BAKERY_LMSPEC + //#pragma shader_feature BAKERY_BICUBIC + + // SM2.0: NOT SUPPORTED shader_feature ___ _DETAIL_MULX2 + // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP + + #pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED + + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + + #pragma vertex bakeryVertForwardBase + #pragma fragment bakeryFragForwardBase + + #include "UnityStandardCoreForward.cginc" + #include "Bakery.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Additive forward pass (one light per pass) + Pass + { + Name "FORWARD_DELTA" + Tags { "LightMode" = "ForwardAdd" } + Blend [_SrcBlend] One + Fog { Color (0,0,0,0) } // in additive pass fog should be black + ZWrite Off + ZTest LEqual + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP + #pragma skip_variants SHADOWS_SOFT + + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_fog + + #pragma vertex bakeryVertForwardAdd + #pragma fragment bakeryFragForwardAdd + + #include "UnityStandardCoreForward.cginc" + #include "Bakery.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On ZTest LEqual + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _METALLICGLOSSMAP + #pragma skip_variants SHADOWS_SOFT + #pragma multi_compile_shadowcaster + + #pragma vertex vertShadowCaster + #pragma fragment fragShadowCaster + + #include "UnityStandardShadow.cginc" + + ENDCG + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags { "LightMode"="Meta" } + + Cull Off + + CGPROGRAM + #pragma vertex vert_meta + #pragma fragment frag_meta + + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature EDITOR_VISUALIZATION + + #include "UnityStandardMeta.cginc" + ENDCG + } + } + + + FallBack "VertexLit" + CustomEditor "BakeryShaderGUI" +} diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandard.shader.meta b/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandard.shader.meta new file mode 100644 index 00000000..6e78a210 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandard.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3334d0a534d2dac45b2c1a9a7e0a6c64 +timeCreated: 1538411300 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandardSpecular.shader b/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandardSpecular.shader new file mode 100644 index 00000000..fc861934 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandardSpecular.shader @@ -0,0 +1,410 @@ +Shader "Bakery/Standard Specular" +{ + Properties + { + _Color("Color", Color) = (1,1,1,1) + _MainTex("Albedo", 2D) = "white" {} + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 + _GlossMapScale("Smoothness Factor", Range(0.0, 1.0)) = 1.0 + [Enum(Specular Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0 + + _SpecColor("Specular", Color) = (0.2,0.2,0.2) + _SpecGlossMap("Specular", 2D) = "white" {} + [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0 + [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0 + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + _Parallax ("Height Scale", Range (0.005, 0.08)) = 0.02 + _ParallaxMap ("Height Map", 2D) = "black" {} + + _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0 + _OcclusionMap("Occlusion", 2D) = "white" {} + + _EmissionColor("Color", Color) = (0,0,0) + _EmissionMap("Emission", 2D) = "white" {} + + _DetailMask("Detail Mask", 2D) = "white" {} + + _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {} + _DetailNormalMapScale("Scale", Float) = 1.0 + _DetailNormalMap("Normal Map", 2D) = "bump" {} + + [Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0 + + + // Blending state + [HideInInspector] _Mode ("__mode", Float) = 0.0 + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 + [HideInInspector] _DstBlend ("__dst", Float) = 0.0 + [HideInInspector] _ZWrite ("__zw", Float) = 1.0 + + _Volume0("Volume0", 3D) = "black" {} + _Volume1("Volume1", 3D) = "black" {} + _Volume2("Volume2", 3D) = "black" {} + _VolumeMask("Volume Mask", 3D) = "white" {} + _VolumeMin("Volume min", Vector) = (0,0,0) + _VolumeInvSize("Volume Inv Size", Vector) = (1000001, 1000001, 1000001) + + [HideInInspector] _BAKERY_2SIDED ("__2s", Float) = 2.0 + [Toggle(BAKERY_2SIDEDON)] _BAKERY_2SIDEDON ("Double-sided", Float) = 0 + [Toggle(BAKERY_VERTEXLM)] _BAKERY_VERTEXLM ("Enable vertex LM", Float) = 0 + [Toggle(BAKERY_VERTEXLMDIR)] _BAKERY_VERTEXLMDIR ("Enable directional vertex LM", Float) = 0 + [Toggle(BAKERY_VERTEXLMSH)] _BAKERY_VERTEXLMSH ("Enable SH vertex LM", Float) = 0 + [Toggle(BAKERY_VERTEXLMMASK)] _BAKERY_VERTEXLMMASK ("Enable shadowmask vertex LM", Float) = 0 + [Toggle(BAKERY_SH)] _BAKERY_SH ("Enable SH", Float) = 0 + [Toggle(BAKERY_SHNONLINEAR)] _BAKERY_SHNONLINEAR ("SH non-linear mode", Float) = 1 + [Toggle(BAKERY_RNM)] _BAKERY_RNM ("Enable RNM", Float) = 0 + [Toggle(BAKERY_LMSPEC)] _BAKERY_LMSPEC ("Enable Lightmap Specular", Float) = 0 + [Toggle(BAKERY_BICUBIC)] _BAKERY_BICUBIC ("Enable Bicubic Filter", Float) = 0 + [Toggle(BAKERY_PROBESHNONLINEAR)] _BAKERY_PROBESHNONLINEAR ("Use non-linear SH for light probes", Float) = 0 + [Toggle(BAKERY_VOLUME)] _BAKERY_VOLUME ("Use volumes", Float) = 0 + [Toggle(BAKERY_VOLROTATION)] _BAKERY_VOLROTATION ("Support volume rotation", Float) = 0 + } + + CGINCLUDE + #define UNITY_SETUP_BRDF_INPUT SpecularSetup + ENDCG + + SubShader + { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 300 + + + // ------------------------------------------------------------------ + // Base forward pass (directional light, emission, lightmaps, ...) + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + Cull [_BAKERY_2SIDED] + + CGPROGRAM + #pragma target 3.0 + + // ------------------------------------- + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _SPECGLOSSMAP + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + #pragma shader_feature _PARALLAXMAP + + #pragma shader_feature BAKERY_VERTEXLM + #pragma shader_feature BAKERY_VERTEXLMDIR + #pragma shader_feature BAKERY_VERTEXLMSH + #pragma shader_feature BAKERY_VERTEXLMMASK + #pragma shader_feature BAKERY_SH + #pragma shader_feature BAKERY_SHNONLINEAR + #pragma shader_feature BAKERY_RNM + #pragma shader_feature BAKERY_LMSPEC + #pragma shader_feature BAKERY_BICUBIC + #pragma shader_feature BAKERY_PROBESHNONLINEAR + #pragma shader_feature BAKERY_VOLUME + #pragma shader_feature BAKERY_COMPRESSED_VOLUME + #pragma shader_feature BAKERY_VOLROTATION + + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma multi_compile_instancing + // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes. + //#pragma multi_compile _ LOD_FADE_CROSSFADE + + #pragma vertex bakeryVertForwardBase + #pragma fragment bakeryFragForwardBase + + #include "UnityStandardCore.cginc" + #include "Bakery.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Additive forward pass (one light per pass) + Pass + { + Name "FORWARD_DELTA" + Tags { "LightMode" = "ForwardAdd" } + Blend [_SrcBlend] One + Fog { Color (0,0,0,0) } // in additive pass fog should be black + ZWrite Off + ZTest LEqual + + CGPROGRAM + #pragma target 3.0 + + // ------------------------------------- + + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _SPECGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _PARALLAXMAP + + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_fog + // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes. + //#pragma multi_compile _ LOD_FADE_CROSSFADE + + #pragma vertex bakeryVertForwardAdd + #pragma fragment bakeryFragForwardAdd + + #include "UnityStandardCore.cginc" + #include "Bakery.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On ZTest LEqual + + CGPROGRAM + #pragma target 3.0 + + // ------------------------------------- + + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma multi_compile_shadowcaster + + #pragma vertex vertShadowCaster + #pragma fragment fragShadowCaster + + #include "UnityStandardShadow.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Deferred pass + Pass + { + Name "DEFERRED" + Tags { "LightMode" = "Deferred" } + + Cull [_BAKERY_2SIDED] + + CGPROGRAM + #pragma target 3.0 + #pragma exclude_renderers nomrt + + + // ------------------------------------- + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _SPECGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _PARALLAXMAP + + #pragma shader_feature BAKERY_VERTEXLM + #pragma shader_feature BAKERY_VERTEXLMDIR + #pragma shader_feature BAKERY_VERTEXLMSH + #pragma shader_feature BAKERY_VERTEXLMMASK + #pragma shader_feature BAKERY_SH + #pragma shader_feature BAKERY_SHNONLINEAR + #pragma shader_feature BAKERY_RNM + #pragma shader_feature BAKERY_LMSPEC + #pragma shader_feature BAKERY_BICUBIC + #pragma shader_feature BAKERY_PROBESHNONLINEAR + #pragma shader_feature BAKERY_VOLUME + #pragma shader_feature BAKERY_COMPRESSED_VOLUME + #pragma shader_feature BAKERY_VOLROTATION + + #pragma multi_compile_prepassfinal + #pragma multi_compile_instancing + // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes. + //#pragma multi_compile _ LOD_FADE_CROSSFADE + + #pragma vertex bakeryVertDeferred + #pragma fragment bakeryFragDeferred + + #include "UnityStandardCore.cginc" + #include "Bakery.cginc" + + ENDCG + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags { "LightMode"="Meta" } + + Cull Off + + CGPROGRAM + #pragma vertex vert_meta + #pragma fragment frag_meta + + #pragma shader_feature _EMISSION + #pragma shader_feature _SPECGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature ___ _DETAIL_MULX2 + + #include "UnityStandardMeta.cginc" + ENDCG + } + } + + SubShader + { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 150 + + // ------------------------------------------------------------------ + // Base forward pass (directional light, emission, lightmaps, ...) + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + Cull [_BAKERY_2SIDED] + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _SPECGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + + /* + #pragma shader_feature BAKERY_VERTEXLM + #pragma shader_feature BAKERY_VERTEXLMDIR + #pragma shader_feature BAKERY_VERTEXLMSH + #pragma shader_feature BAKERY_VERTEXLMMASK + #pragma shader_feature BAKERY_SH + #pragma shader_feature BAKERY_SHNONLINEAR + #pragma shader_feature BAKERY_RNM + #pragma shader_feature BAKERY_LMSPEC + #pragma shader_feature BAKERY_BICUBIC + */ + + // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP + + #pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED + + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + + #pragma vertex bakeryVertForwardBase + #pragma fragment bakeryFragForwardBase + + #include "UnityStandardCoreForward.cginc" + #include "Bakery.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Additive forward pass (one light per pass) + Pass + { + Name "FORWARD_DELTA" + Tags { "LightMode" = "ForwardAdd" } + Blend [_SrcBlend] One + Fog { Color (0,0,0,0) } // in additive pass fog should be black + ZWrite Off + ZTest LEqual + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _SPECGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP + #pragma skip_variants SHADOWS_SOFT + + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_fog + + #pragma vertex bakeryVertForwardAdd + #pragma fragment bakeryFragForwardAdd + + #include "UnityStandardCoreForward.cginc" + #include "Bakery.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On ZTest LEqual + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma skip_variants SHADOWS_SOFT + #pragma multi_compile_shadowcaster + + #pragma vertex vertShadowCaster + #pragma fragment fragShadowCaster + + #include "UnityStandardShadow.cginc" + + ENDCG + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags { "LightMode"="Meta" } + + Cull Off + + CGPROGRAM + #pragma vertex vert_meta + #pragma fragment frag_meta + + #pragma shader_feature _EMISSION + #pragma shader_feature _SPECGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature EDITOR_VISUALIZATION + + #include "UnityStandardMeta.cginc" + ENDCG + } + } + + FallBack "VertexLit" + CustomEditor "BakeryShaderGUI" +} diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandardSpecular.shader.meta b/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandardSpecular.shader.meta new file mode 100644 index 00000000..2307655a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/BakeryStandardSpecular.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2ad53c3d60baf17489980f3b010d040e +timeCreated: 1538413381 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphHDRP.unitypackage b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphHDRP.unitypackage new file mode 100644 index 00000000..85858672 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphHDRP.unitypackage differ diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphHDRP.unitypackage.meta b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphHDRP.unitypackage.meta new file mode 100644 index 00000000..a023a5e6 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphHDRP.unitypackage.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1b95168f2f925246bf670cb2bc2bf79 +timeCreated: 1573412449 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphURP.unitypackage b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphURP.unitypackage new file mode 100644 index 00000000..24818435 Binary files /dev/null and b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphURP.unitypackage differ diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphURP.unitypackage.meta b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphURP.unitypackage.meta new file mode 100644 index 00000000..c57a21cc --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/Bakery_ShaderGraphURP.unitypackage.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec3754b09ac1517429546e96e7b25708 +timeCreated: 1606124300 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Editor.meta b/VRCSDK3Worlds/Assets/Bakery/shader/Editor.meta new file mode 100644 index 00000000..8e7899c6 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1687b0c80b20fd04fa36532aa60c6a2d +folderAsset: yes +timeCreated: 1622807246 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Editor/BakeryShaderGUI.cs b/VRCSDK3Worlds/Assets/Bakery/shader/Editor/BakeryShaderGUI.cs new file mode 100644 index 00000000..b8efd093 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/Editor/BakeryShaderGUI.cs @@ -0,0 +1,598 @@ +#if UNITY_EDITOR + +// Disable 'obsolete' warnings +#pragma warning disable 0618 +#pragma warning disable 0612 + +using System; +using UnityEngine; + +namespace UnityEditor +{ + public class BakeryShaderGUI : ShaderGUI + { + private enum WorkflowMode + { + Specular, + Metallic, + Dielectric + } + + public enum BlendMode + { + Opaque, + Cutout, + Fade, // Old school alpha-blending mode, fresnel does not affect amount of transparency + Transparent // Physically plausible transparency mode, implemented as alpha pre-multiply + } + + public enum SmoothnessMapChannel + { + SpecularMetallicAlpha, + AlbedoAlpha, + } + + private static class Styles + { + public static GUIStyle optionsButton = "PaneOptions"; + public static GUIContent uvSetLabel = new GUIContent("UV Set"); + public static GUIContent[] uvSetOptions = new GUIContent[] { new GUIContent("UV channel 0"), new GUIContent("UV channel 1") }; + + public static string emptyTootip = ""; + public static GUIContent albedoText = new GUIContent("Albedo", "Albedo (RGB) and Transparency (A)"); + public static GUIContent alphaCutoffText = new GUIContent("Alpha Cutoff", "Threshold for alpha cutoff"); + public static GUIContent specularMapText = new GUIContent("Specular", "Specular (RGB) and Smoothness (A)"); + public static GUIContent metallicMapText = new GUIContent("Metallic", "Metallic (R) and Smoothness (A)"); + public static GUIContent smoothnessText = new GUIContent("Smoothness", "Smoothness value"); + public static GUIContent smoothnessScaleText = new GUIContent("Smoothness", "Smoothness scale factor"); + public static GUIContent smoothnessMapChannelText = new GUIContent("Source", "Smoothness texture and channel"); + public static GUIContent highlightsText = new GUIContent("Specular Highlights", "Specular Highlights"); + public static GUIContent reflectionsText = new GUIContent("Reflections", "Glossy Reflections"); + public static GUIContent normalMapText = new GUIContent("Normal Map", "Normal Map"); + public static GUIContent heightMapText = new GUIContent("Height Map", "Height Map (G)"); + public static GUIContent occlusionText = new GUIContent("Occlusion", "Occlusion (G)"); + public static GUIContent emissionText = new GUIContent("Emission", "Emission (RGB)"); + public static GUIContent detailMaskText = new GUIContent("Detail Mask", "Mask for Secondary Maps (A)"); + public static GUIContent detailAlbedoText = new GUIContent("Detail Albedo x2", "Albedo (RGB) multiplied by 2"); + public static GUIContent detailNormalMapText = new GUIContent("Normal Map", "Normal Map"); + + public static string whiteSpaceString = " "; + public static string primaryMapsText = "Main Maps"; + public static string secondaryMapsText = "Secondary Maps"; + public static string forwardText = "Forward Rendering Options"; + public static string renderingMode = "Rendering Mode"; + public static GUIContent emissiveWarning = new GUIContent("Emissive value is animated but the material has not been configured to support emissive. Please make sure the material itself has some amount of emissive."); + public static GUIContent emissiveColorWarning = new GUIContent("Ensure emissive color is non-black for emission to have effect."); + public static readonly string[] blendNames = Enum.GetNames(typeof(BlendMode)); + + public static string bakeryText = "Bakery Options"; + public static GUIContent doubleSidedLabel = new GUIContent("Double-sided", "Render both sides of triangles."); + public static GUIContent vertexLMLabel = new GUIContent("Allow Vertex Lightmaps", "Allows this material to use vertex lightmaps, if present."); + public static GUIContent vertexLMdirLabel = new GUIContent("Enable VertexLM directional", "Enables directional vertex lightmaps."); + public static GUIContent vertexLMSHLabel = new GUIContent("Enable VertexLM SH", "Enables SH vertex lightmaps."); + public static GUIContent vertexLMMaskLabel = new GUIContent("Enable VertexLM Shadowmask", "Enables per-vertex shadowmasks."); + public static GUIContent rnmLabel = new GUIContent("Allow RNM Lightmaps", "Allows this material to use RNM lightmaps, if present."); + public static GUIContent shLabel = new GUIContent("Allow SH Lightmaps", "Allows this material to use SH lightmaps, if present."); + public static GUIContent shnLabel = new GUIContent("Non-linear SH", "This option can enhance contrast (closer to ground truth), but it makes the shader a bit slower."); + public static GUIContent specLabel = new GUIContent("Enable Lightmap Specular", "Enables baked specular for all directional modes."); + public static GUIContent bicubicLabel = new GUIContent("Force Bicubic Filter", "Enables bicubic filtering for all lightmaps (color/shadowmask/direction/etc) used in the material."); + public static GUIContent pshnLabel = new GUIContent("Non-linear Light Probe SH", "Prevents negative values in light probes. This is recommended when baking probes in L1 mode. Can slow down the shader a bit."); + public static GUIContent volLabel = new GUIContent("Enable Volumes", "Enable usages of BakeryVolumes"); + public static GUIContent volLabelRot = new GUIContent("Support Volume Rotation", "Normally volumes can only be repositioned or rescaled at runtime. With this checkbox volume's rotation matrix will also be used. Volumes must have a similar checkbox enabled."); + public static GUIContent volLabel0 = new GUIContent("Volume 0"); + public static GUIContent volLabel1 = new GUIContent("Volume 1"); + public static GUIContent volLabel2 = new GUIContent("Volume 2"); + public static GUIContent volLabelMask = new GUIContent("Volume mask"); + } + + MaterialProperty blendMode = null; + MaterialProperty albedoMap = null; + MaterialProperty albedoColor = null; + MaterialProperty alphaCutoff = null; + MaterialProperty specularMap = null; + MaterialProperty specularColor = null; + MaterialProperty metallicMap = null; + MaterialProperty metallic = null; + MaterialProperty smoothness = null; + MaterialProperty smoothnessScale = null; + MaterialProperty smoothnessMapChannel = null; + MaterialProperty highlights = null; + MaterialProperty reflections = null; + MaterialProperty bumpScale = null; + MaterialProperty bumpMap = null; + MaterialProperty occlusionStrength = null; + MaterialProperty occlusionMap = null; + MaterialProperty heigtMapScale = null; + MaterialProperty heightMap = null; + MaterialProperty emissionColorForRendering = null; + MaterialProperty emissionMap = null; + MaterialProperty detailMask = null; + MaterialProperty detailAlbedoMap = null; + MaterialProperty detailNormalMapScale = null; + MaterialProperty detailNormalMap = null; + MaterialProperty uvSetSecondary = null; + MaterialProperty enableDoubleSided = null; + MaterialProperty enableDoubleSidedOn = null; + MaterialProperty enableVertexLM = null; + MaterialProperty enableVertexLMdir = null; + MaterialProperty enableVertexLMSH = null; + MaterialProperty enableVertexLMmask = null; + MaterialProperty enableSH = null; + MaterialProperty enableSHN = null; + MaterialProperty enableRNM = null; + MaterialProperty enableSpec = null; + MaterialProperty enableBicubic = null; + MaterialProperty enablePSHN = null; + MaterialProperty enableVolumes = null; + MaterialProperty enableVolumeRot = null; + MaterialProperty volume0 = null; + MaterialProperty volume1 = null; + MaterialProperty volume2 = null; + MaterialProperty volumeMask = null; + MaterialProperty volumeMin = null; + MaterialProperty volumeInvSize = null; + + BakeryVolume assignedVolume = null; + + MaterialEditor m_MaterialEditor; + WorkflowMode m_WorkflowMode = WorkflowMode.Specular; + ColorPickerHDRConfig m_ColorPickerHDRConfig = new ColorPickerHDRConfig(0f, 99f, 1 / 99f, 3f); + + bool m_FirstTimeApply = true; + + public void FindProperties(MaterialProperty[] props) + { + blendMode = FindProperty("_Mode", props); + albedoMap = FindProperty("_MainTex", props); + albedoColor = FindProperty("_Color", props); + alphaCutoff = FindProperty("_Cutoff", props); + specularMap = FindProperty("_SpecGlossMap", props, false); + specularColor = FindProperty("_SpecColor", props, false); + metallicMap = FindProperty("_MetallicGlossMap", props, false); + metallic = FindProperty("_Metallic", props, false); + if (specularMap != null && specularColor != null) + m_WorkflowMode = WorkflowMode.Specular; + else if (metallicMap != null && metallic != null) + m_WorkflowMode = WorkflowMode.Metallic; + else + m_WorkflowMode = WorkflowMode.Dielectric; + smoothness = FindProperty("_Glossiness", props); + smoothnessScale = FindProperty("_GlossMapScale", props, false); + smoothnessMapChannel = FindProperty("_SmoothnessTextureChannel", props, false); + highlights = FindProperty("_SpecularHighlights", props, false); + reflections = FindProperty("_GlossyReflections", props, false); + bumpScale = FindProperty("_BumpScale", props); + bumpMap = FindProperty("_BumpMap", props); + heigtMapScale = FindProperty("_Parallax", props); + heightMap = FindProperty("_ParallaxMap", props); + occlusionStrength = FindProperty("_OcclusionStrength", props); + occlusionMap = FindProperty("_OcclusionMap", props); + emissionColorForRendering = FindProperty("_EmissionColor", props); + emissionMap = FindProperty("_EmissionMap", props); + detailMask = FindProperty("_DetailMask", props); + detailAlbedoMap = FindProperty("_DetailAlbedoMap", props); + detailNormalMapScale = FindProperty("_DetailNormalMapScale", props); + detailNormalMap = FindProperty("_DetailNormalMap", props); + uvSetSecondary = FindProperty("_UVSec", props); + enableDoubleSided = FindProperty("_BAKERY_2SIDED", props); + enableDoubleSidedOn = FindProperty("_BAKERY_2SIDEDON", props); + enableVertexLM = FindProperty("_BAKERY_VERTEXLM", props); + enableVertexLMdir = FindProperty("_BAKERY_VERTEXLMDIR", props); + enableVertexLMSH = FindProperty("_BAKERY_VERTEXLMSH", props); + enableVertexLMmask = FindProperty("_BAKERY_VERTEXLMMASK", props); + enableSH = FindProperty("_BAKERY_SH", props); + enableSHN = FindProperty("_BAKERY_SHNONLINEAR", props); + enableRNM = FindProperty("_BAKERY_RNM", props); + enableSpec = FindProperty("_BAKERY_LMSPEC", props); + enableBicubic = FindProperty("_BAKERY_BICUBIC", props); + enablePSHN = FindProperty("_BAKERY_PROBESHNONLINEAR", props); + try + { + enableVolumes = FindProperty("_BAKERY_VOLUME", props); + enableVolumeRot = FindProperty("_BAKERY_VOLROTATION", props); + volume0 = FindProperty("_Volume0", props); + volume1 = FindProperty("_Volume1", props); + volume2 = FindProperty("_Volume2", props); + volumeMask = FindProperty("_VolumeMask", props); + volumeMin = FindProperty("_VolumeMin", props); + volumeInvSize = FindProperty("_VolumeInvSize", props); + } + catch + { + + } + } + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) + { + FindProperties(props); // MaterialProperties can be animated so we do not cache them but fetch them every event to ensure animated values are updated correctly + m_MaterialEditor = materialEditor; + Material material = materialEditor.target as Material; + + // Make sure that needed keywords are set up if we're switching some existing + // material to a standard shader. + if (m_FirstTimeApply) + { + SetMaterialKeywords(material, m_WorkflowMode); + m_FirstTimeApply = false; + } + + ShaderPropertiesGUI(material); + } + + public void ShaderPropertiesGUI(Material material) + { + // Use default labelWidth + EditorGUIUtility.labelWidth = 0f; + + // Detect any changes to the material + EditorGUI.BeginChangeCheck(); + { + BlendModePopup(); + + // Primary properties + GUILayout.Label(Styles.primaryMapsText, EditorStyles.boldLabel); + DoAlbedoArea(material); + DoSpecularMetallicArea(); + m_MaterialEditor.TexturePropertySingleLine(Styles.normalMapText, bumpMap, bumpMap.textureValue != null ? bumpScale : null); + m_MaterialEditor.TexturePropertySingleLine(Styles.heightMapText, heightMap, heightMap.textureValue != null ? heigtMapScale : null); + m_MaterialEditor.TexturePropertySingleLine(Styles.occlusionText, occlusionMap, occlusionMap.textureValue != null ? occlusionStrength : null); + DoEmissionArea(material); + m_MaterialEditor.TexturePropertySingleLine(Styles.detailMaskText, detailMask); + EditorGUI.BeginChangeCheck(); + m_MaterialEditor.TextureScaleOffsetProperty(albedoMap); + if (EditorGUI.EndChangeCheck()) + { + emissionMap.textureScaleAndOffset = albedoMap.textureScaleAndOffset; // Apply the main texture scale and offset to the emission texture as well, for Enlighten's sake + } + + EditorGUILayout.Space(); + + // Secondary properties + GUILayout.Label(Styles.secondaryMapsText, EditorStyles.boldLabel); + m_MaterialEditor.TexturePropertySingleLine(Styles.detailAlbedoText, detailAlbedoMap); + m_MaterialEditor.TexturePropertySingleLine(Styles.detailNormalMapText, detailNormalMap, detailNormalMapScale); + m_MaterialEditor.TextureScaleOffsetProperty(detailAlbedoMap); + m_MaterialEditor.ShaderProperty(uvSetSecondary, Styles.uvSetLabel.text); + + // Third properties + GUILayout.Label(Styles.forwardText, EditorStyles.boldLabel); + if (highlights != null) + m_MaterialEditor.ShaderProperty(highlights, Styles.highlightsText); + if (reflections != null) + m_MaterialEditor.ShaderProperty(reflections, Styles.reflectionsText); + + GUILayout.Label(Styles.bakeryText, EditorStyles.boldLabel); + + m_MaterialEditor.ShaderProperty(enableDoubleSidedOn, Styles.doubleSidedLabel); + enableDoubleSided.floatValue = enableDoubleSidedOn.floatValue > 0 ? 0 : 2; + + m_MaterialEditor.ShaderProperty(enableVertexLM, Styles.vertexLMLabel); + if (enableVertexLM.floatValue > 0) + { + m_MaterialEditor.ShaderProperty(enableVertexLMdir, Styles.vertexLMdirLabel); + //if (enableVertexLMdir.floatValue > 0) enableVertexLMSH.floatValue = 0; + } + if (enableVertexLM.floatValue > 0) + { + m_MaterialEditor.ShaderProperty(enableVertexLMSH, Styles.vertexLMSHLabel); + //if (enableVertexLMSH.floatValue > 0) enableVertexLMdir.floatValue = 0; + } + if (enableVertexLM.floatValue > 0) + { + m_MaterialEditor.ShaderProperty(enableVertexLMmask, Styles.vertexLMMaskLabel); + } + m_MaterialEditor.ShaderProperty(enableRNM, Styles.rnmLabel); + m_MaterialEditor.ShaderProperty(enableSH, Styles.shLabel); + if (enableSH.floatValue > 0 || enableVertexLMSH.floatValue > 0) + m_MaterialEditor.ShaderProperty(enableSHN, Styles.shnLabel); + m_MaterialEditor.ShaderProperty(enableSpec, Styles.specLabel); + m_MaterialEditor.ShaderProperty(enableBicubic, Styles.bicubicLabel); + m_MaterialEditor.ShaderProperty(enablePSHN, Styles.pshnLabel); + + try + { + m_MaterialEditor.ShaderProperty(enableVolumes, Styles.volLabel); + if (enableVolumes.floatValue > 0) + { + var prevAssignedVolume = assignedVolume; + assignedVolume = EditorGUILayout.ObjectField(volume0.textureValue == null ? "Assign volume" : "Assign different volume", assignedVolume, typeof(BakeryVolume), true) as BakeryVolume; + if (prevAssignedVolume != assignedVolume) + { + volume0.textureValue = assignedVolume.bakedTexture0; + volume1.textureValue = assignedVolume.bakedTexture1; + volume2.textureValue = assignedVolume.bakedTexture2; + volumeMask.textureValue = assignedVolume.bakedMask; + var b = assignedVolume.bounds; + volumeMin.vectorValue = b.min; + volumeInvSize.vectorValue = new Vector3(1.0f/b.size.x, 1.0f/b.size.y, 1.0f/b.size.z); + assignedVolume = null; + } + if (volume0.textureValue != null) + { + if (GUILayout.Button("Unset volume")) + { + volume0.textureValue = null; + volume1.textureValue = null; + volume2.textureValue = null; + volumeMask.textureValue = null; + volumeMin.vectorValue = Vector3.zero; + volumeInvSize.vectorValue = Vector3.one * 1000001; + } + } + EditorGUILayout.LabelField("Current Volume: " + (volume0.textureValue == null ? "" : volume0.textureValue.name.Substring(0, volume0.textureValue.name.Length-1))); + EditorGUI.BeginDisabledGroup(true); + m_MaterialEditor.TexturePropertySingleLine(Styles.volLabel0, volume0); + m_MaterialEditor.TexturePropertySingleLine(Styles.volLabel1, volume1); + m_MaterialEditor.TexturePropertySingleLine(Styles.volLabel2, volume2); + m_MaterialEditor.TexturePropertySingleLine(Styles.volLabelMask, volumeMask); + var bmin4 = volumeMin.vectorValue; + var bmin = new Vector3(bmin4.x, bmin4.y, bmin4.z); + var invSize = volumeInvSize.vectorValue; + var bmax = new Vector3(1.0f/invSize.x + bmin.x, 1.0f/invSize.y + bmin.y, 1.0f/invSize.z + bmin.z); + EditorGUILayout.LabelField("Min: " + bmin); + EditorGUILayout.LabelField("Max: " + bmax); + EditorGUI.EndDisabledGroup(); + m_MaterialEditor.ShaderProperty(enableVolumeRot, Styles.volLabelRot); + } + } + catch + { + + } + + EditorGUILayout.Space(); + } + if (EditorGUI.EndChangeCheck()) + { + foreach (var obj in blendMode.targets) + MaterialChanged((Material)obj, m_WorkflowMode); + } + } + + internal void DetermineWorkflow(MaterialProperty[] props) + { + if (FindProperty("_SpecGlossMap", props, false) != null && FindProperty("_SpecColor", props, false) != null) + m_WorkflowMode = WorkflowMode.Specular; + else if (FindProperty("_MetallicGlossMap", props, false) != null && FindProperty("_Metallic", props, false) != null) + m_WorkflowMode = WorkflowMode.Metallic; + else + m_WorkflowMode = WorkflowMode.Dielectric; + } + + public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) + { + // _Emission property is lost after assigning Standard shader to the material + // thus transfer it before assigning the new shader + if (material.HasProperty("_Emission")) + { + material.SetColor("_EmissionColor", material.GetColor("_Emission")); + } + + base.AssignNewShaderToMaterial(material, oldShader, newShader); + + if (oldShader == null || !oldShader.name.Contains("Legacy Shaders/")) + { + SetupMaterialWithBlendMode(material, (BlendMode)material.GetFloat("_Mode")); + return; + } + + BlendMode blendMode = BlendMode.Opaque; + if (oldShader.name.Contains("/Transparent/Cutout/")) + { + blendMode = BlendMode.Cutout; + } + else if (oldShader.name.Contains("/Transparent/")) + { + // NOTE: legacy shaders did not provide physically based transparency + // therefore Fade mode + blendMode = BlendMode.Fade; + } + material.SetFloat("_Mode", (float)blendMode); + + DetermineWorkflow(MaterialEditor.GetMaterialProperties(new Material[] { material })); + MaterialChanged(material, m_WorkflowMode); + } + + void BlendModePopup() + { + EditorGUI.showMixedValue = blendMode.hasMixedValue; + var mode = (BlendMode)blendMode.floatValue; + + EditorGUI.BeginChangeCheck(); + mode = (BlendMode)EditorGUILayout.Popup(Styles.renderingMode, (int)mode, Styles.blendNames); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialEditor.RegisterPropertyChangeUndo("Rendering Mode"); + blendMode.floatValue = (float)mode; + } + + EditorGUI.showMixedValue = false; + } + + void DoAlbedoArea(Material material) + { + m_MaterialEditor.TexturePropertySingleLine(Styles.albedoText, albedoMap, albedoColor); + if (((BlendMode)material.GetFloat("_Mode") == BlendMode.Cutout)) + { + m_MaterialEditor.ShaderProperty(alphaCutoff, Styles.alphaCutoffText.text, MaterialEditor.kMiniTextureFieldLabelIndentLevel + 1); + } + } + + void DoEmissionArea(Material material) + { + bool showHelpBox = !HasValidEmissiveKeyword(material); + + bool hadEmissionTexture = emissionMap.textureValue != null; + + // Texture and HDR color controls + m_MaterialEditor.TexturePropertyWithHDRColor(Styles.emissionText, emissionMap, emissionColorForRendering, m_ColorPickerHDRConfig, false); + + // If texture was assigned and color was black set color to white + float brightness = emissionColorForRendering.colorValue.maxColorComponent; + if (emissionMap.textureValue != null && !hadEmissionTexture && brightness <= 0f) + emissionColorForRendering.colorValue = Color.white; + + // Emission for GI? + m_MaterialEditor.LightmapEmissionProperty(MaterialEditor.kMiniTextureFieldLabelIndentLevel + 1); + + if (showHelpBox) + { + EditorGUILayout.HelpBox(Styles.emissiveWarning.text, MessageType.Warning); + } + } + + void DoSpecularMetallicArea() + { + bool hasGlossMap = false; + if (m_WorkflowMode == WorkflowMode.Specular) + { + hasGlossMap = specularMap.textureValue != null; + m_MaterialEditor.TexturePropertySingleLine(Styles.specularMapText, specularMap, hasGlossMap ? null : specularColor); + } + else if (m_WorkflowMode == WorkflowMode.Metallic) + { + hasGlossMap = metallicMap.textureValue != null; + m_MaterialEditor.TexturePropertySingleLine(Styles.metallicMapText, metallicMap, hasGlossMap ? null : metallic); + } + + bool showSmoothnessScale = hasGlossMap; + if (smoothnessMapChannel != null) + { + int smoothnessChannel = (int)smoothnessMapChannel.floatValue; + if (smoothnessChannel == (int)SmoothnessMapChannel.AlbedoAlpha) + showSmoothnessScale = true; + } + + int indentation = 2; // align with labels of texture properties + m_MaterialEditor.ShaderProperty(showSmoothnessScale ? smoothnessScale : smoothness, showSmoothnessScale ? Styles.smoothnessScaleText : Styles.smoothnessText, indentation); + + ++indentation; + if (smoothnessMapChannel != null) + m_MaterialEditor.ShaderProperty(smoothnessMapChannel, Styles.smoothnessMapChannelText, indentation); + } + + public static void SetupMaterialWithBlendMode(Material material, BlendMode blendMode) + { + switch (blendMode) + { + case BlendMode.Opaque: + material.SetOverrideTag("RenderType", "Opaque"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + material.SetInt("_ZWrite", 1); + material.DisableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = -1; + break; + case BlendMode.Cutout: + material.SetOverrideTag("RenderType", "TransparentCutout"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + material.SetInt("_ZWrite", 1); + material.EnableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest; + break; + case BlendMode.Fade: + material.SetOverrideTag("RenderType", "Transparent"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + material.SetInt("_ZWrite", 0); + material.DisableKeyword("_ALPHATEST_ON"); + material.EnableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent; + break; + case BlendMode.Transparent: + material.SetOverrideTag("RenderType", "Transparent"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + material.SetInt("_ZWrite", 0); + material.DisableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent; + break; + } + } + + static SmoothnessMapChannel GetSmoothnessMapChannel(Material material) + { + int ch = (int)material.GetFloat("_SmoothnessTextureChannel"); + if (ch == (int)SmoothnessMapChannel.AlbedoAlpha) + return SmoothnessMapChannel.AlbedoAlpha; + else + return SmoothnessMapChannel.SpecularMetallicAlpha; + } + + static bool ShouldEmissionBeEnabled(Material mat, Color color) + { + var realtimeEmission = (mat.globalIlluminationFlags & MaterialGlobalIlluminationFlags.RealtimeEmissive) > 0; + return color.maxColorComponent > 0.1f / 255.0f || realtimeEmission; + } + + static void SetMaterialKeywords(Material material, WorkflowMode workflowMode) + { + // Note: keywords must be based on Material value not on MaterialProperty due to multi-edit & material animation + // (MaterialProperty value might come from renderer material property block) + SetKeyword(material, "_NORMALMAP", material.GetTexture("_BumpMap") || material.GetTexture("_DetailNormalMap")); + if (workflowMode == WorkflowMode.Specular) + SetKeyword(material, "_SPECGLOSSMAP", material.GetTexture("_SpecGlossMap")); + else if (workflowMode == WorkflowMode.Metallic) + SetKeyword(material, "_METALLICGLOSSMAP", material.GetTexture("_MetallicGlossMap")); + SetKeyword(material, "_PARALLAXMAP", material.GetTexture("_ParallaxMap")); + SetKeyword(material, "_DETAIL_MULX2", material.GetTexture("_DetailAlbedoMap") || material.GetTexture("_DetailNormalMap")); + + bool shouldEmissionBeEnabled = ShouldEmissionBeEnabled(material, material.GetColor("_EmissionColor")); + SetKeyword(material, "_EMISSION", shouldEmissionBeEnabled); + + if (material.HasProperty("_SmoothnessTextureChannel")) + { + SetKeyword(material, "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A", GetSmoothnessMapChannel(material) == SmoothnessMapChannel.AlbedoAlpha); + } + + // Setup lightmap emissive flags + MaterialGlobalIlluminationFlags flags = material.globalIlluminationFlags; + if ((flags & (MaterialGlobalIlluminationFlags.BakedEmissive | MaterialGlobalIlluminationFlags.RealtimeEmissive)) != 0) + { + flags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; + if (!shouldEmissionBeEnabled) + flags |= MaterialGlobalIlluminationFlags.EmissiveIsBlack; + + material.globalIlluminationFlags = flags; + } + } + + bool HasValidEmissiveKeyword(Material material) + { + // Material animation might be out of sync with the material keyword. + // So if the emission support is disabled on the material, but the property blocks have a value that requires it, then we need to show a warning. + // (note: (Renderer MaterialPropertyBlock applies its values to emissionColorForRendering)) + bool hasEmissionKeyword = material.IsKeywordEnabled("_EMISSION"); + if (!hasEmissionKeyword && ShouldEmissionBeEnabled(material, emissionColorForRendering.colorValue)) + return false; + else + return true; + } + + static void MaterialChanged(Material material, WorkflowMode workflowMode) + { + SetupMaterialWithBlendMode(material, (BlendMode)material.GetFloat("_Mode")); + + SetMaterialKeywords(material, workflowMode); + } + + static void SetKeyword(Material m, string keyword, bool state) + { + if (state) + m.EnableKeyword(keyword); + else + m.DisableKeyword(keyword); + } + } +} + +#endif diff --git a/VRCSDK3Worlds/Assets/Bakery/shader/Editor/BakeryShaderGUI.cs.meta b/VRCSDK3Worlds/Assets/Bakery/shader/Editor/BakeryShaderGUI.cs.meta new file mode 100644 index 00000000..6c58ef8a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/shader/Editor/BakeryShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0465c9a9a7404f34fadd23fd32de6557 +timeCreated: 1538411297 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- cgit v1.2.3-freya