using UnityEngine.Serialization; #if UNITY_EDITOR using UnityEditor; #endif namespace UnityEngine.Experimental.Rendering.HDPipeline { public class RenderPipelineResources : ScriptableObject { const int currentVersion = 3; [SerializeField] [FormerlySerializedAs("version")] int m_Version = 1; // Default Material / Shader public Material defaultDiffuseMaterial; public Material defaultMirrorMaterial; public Material defaultDecalMaterial; public Material defaultTerrainMaterial; public Shader defaultShader; // Debug public Texture2D debugFontTexture; public Shader debugDisplayLatlongShader; public Shader debugViewMaterialGBufferShader; public Shader debugViewTilesShader; public Shader debugFullScreenShader; public Shader debugColorPickerShader; public Shader debugLightVolumeShader; // Lighting resources public Shader deferredShader; public ComputeShader colorPyramidCS; public ComputeShader depthPyramidCS; public ComputeShader copyChannelCS; public ComputeShader texturePaddingCS; public ComputeShader applyDistortionCS; // Lighting tile pass resources public ComputeShader clearDispatchIndirectShader; public ComputeShader buildDispatchIndirectShader; public ComputeShader buildScreenAABBShader; public ComputeShader buildPerTileLightListShader; // FPTL public ComputeShader buildPerBigTileLightListShader; public ComputeShader buildPerVoxelLightListShader; // clustered public ComputeShader buildMaterialFlagsShader; public ComputeShader deferredComputeShader; public ComputeShader screenSpaceShadowComputeShader; public ComputeShader volumeVoxelizationCS; public ComputeShader volumetricLightingCS; public ComputeShader subsurfaceScatteringCS; // Disney SSS public Shader subsurfaceScattering; // Jimenez SSS public Shader combineLighting; // General public Shader cameraMotionVectors; public Shader copyStencilBuffer; public Shader copyDepthBuffer; public Shader blit; // Sky public Shader blitCubemap; public ComputeShader buildProbabilityTables; public ComputeShader computeGgxIblSampleData; public Shader GGXConvolve; public Shader opaqueAtmosphericScattering; public Shader hdriSky; public Shader integrateHdriSky; public Shader proceduralSky; public Shader skyboxCubemap; public Shader gradientSky; // Material public Shader preIntegratedFGD_GGXDisneyDiffuse; public Shader preIntegratedFGD_CharlieFabricLambert; // Utilities / Core public ComputeShader encodeBC6HCS; public Shader cubeToPanoShader; public Shader blitCubeTextureFace; // Shadow public Shader shadowClearShader; public ComputeShader shadowBlurMoments; public Shader debugShadowMapShader; #if UNITY_EDITOR public void UpgradeIfNeeded() { if (m_Version != currentVersion) { Init(); m_Version = currentVersion; } } // Note: move this to a static using once we can target C#6+ T Load(string path) where T : UnityEngine.Object { return AssetDatabase.LoadAssetAtPath(path); } public void Init() { // Load default renderPipelineResources / Material / Shader string HDRenderPipelinePath = HDUtils.GetHDRenderPipelinePath(); string CorePath = HDUtils.GetCorePath(); defaultDiffuseMaterial = Load(HDRenderPipelinePath + "RenderPipelineResources/DefaultHDMaterial.mat"); defaultMirrorMaterial = Load(HDRenderPipelinePath + "RenderPipelineResources/DefaultHDMirrorMaterial.mat"); defaultDecalMaterial = Load(HDRenderPipelinePath + "RenderPipelineResources/DefaultHDDecalMaterial.mat"); defaultShader = Load(HDRenderPipelinePath + "Material/Lit/Lit.shader"); debugFontTexture = Load(HDRenderPipelinePath + "RenderPipelineResources/DebugFont.tga"); debugDisplayLatlongShader = Load(HDRenderPipelinePath + "Debug/DebugDisplayLatlong.Shader"); debugViewMaterialGBufferShader = Load(HDRenderPipelinePath + "Debug/DebugViewMaterialGBuffer.Shader"); debugViewTilesShader = Load(HDRenderPipelinePath + "Debug/DebugViewTiles.Shader"); debugFullScreenShader = Load(HDRenderPipelinePath + "Debug/DebugFullScreen.Shader"); debugColorPickerShader = Load(HDRenderPipelinePath + "Debug/DebugColorPicker.Shader"); debugLightVolumeShader = Load(HDRenderPipelinePath + "Debug/DebugLightVolume.Shader"); deferredShader = Load(HDRenderPipelinePath + "Lighting/Deferred.Shader"); colorPyramidCS = Load(HDRenderPipelinePath + "RenderPipelineResources/ColorPyramid.compute"); depthPyramidCS = Load(HDRenderPipelinePath + "RenderPipelineResources/DepthPyramid.compute"); copyChannelCS = Load(CorePath + "CoreResources/GPUCopy.compute"); texturePaddingCS = Load(CorePath + "CoreResources/TexturePadding.compute"); applyDistortionCS = Load(HDRenderPipelinePath + "RenderPipelineResources/ApplyDistorsion.compute"); clearDispatchIndirectShader = Load(HDRenderPipelinePath + "Lighting/LightLoop/cleardispatchindirect.compute"); buildDispatchIndirectShader = Load(HDRenderPipelinePath + "Lighting/LightLoop/builddispatchindirect.compute"); buildScreenAABBShader = Load(HDRenderPipelinePath + "Lighting/LightLoop/scrbound.compute"); buildPerTileLightListShader = Load(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild.compute"); buildPerBigTileLightListShader = Load(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild-bigtile.compute"); buildPerVoxelLightListShader = Load(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild-clustered.compute"); buildMaterialFlagsShader = Load(HDRenderPipelinePath + "Lighting/LightLoop/materialflags.compute"); deferredComputeShader = Load(HDRenderPipelinePath + "Lighting/LightLoop/Deferred.compute"); screenSpaceShadowComputeShader = Load(HDRenderPipelinePath + "Lighting/ScreenSpaceShadow.compute"); volumeVoxelizationCS = Load(HDRenderPipelinePath + "Lighting/Volumetrics/VolumeVoxelization.compute"); volumetricLightingCS = Load(HDRenderPipelinePath + "Lighting/Volumetrics/VolumetricLighting.compute"); subsurfaceScatteringCS = Load(HDRenderPipelinePath + "Material/SubsurfaceScattering/SubsurfaceScattering.compute"); subsurfaceScattering = Load(HDRenderPipelinePath + "Material/SubsurfaceScattering/SubsurfaceScattering.shader"); combineLighting = Load(HDRenderPipelinePath + "Material/SubsurfaceScattering/CombineLighting.shader"); // General cameraMotionVectors = Load(HDRenderPipelinePath + "RenderPipelineResources/CameraMotionVectors.shader"); copyStencilBuffer = Load(HDRenderPipelinePath + "RenderPipelineResources/CopyStencilBuffer.shader"); copyDepthBuffer = Load(HDRenderPipelinePath + "RenderPipelineResources/CopyDepthBuffer.shader"); blit = Load(HDRenderPipelinePath + "RenderPipelineResources/Blit.shader"); // Sky blitCubemap = Load(HDRenderPipelinePath + "Sky/BlitCubemap.shader"); buildProbabilityTables = Load(HDRenderPipelinePath + "Material/GGXConvolution/BuildProbabilityTables.compute"); computeGgxIblSampleData = Load(HDRenderPipelinePath + "Material/GGXConvolution/ComputeGgxIblSampleData.compute"); GGXConvolve = Load(HDRenderPipelinePath + "Material/GGXConvolution/GGXConvolve.shader"); opaqueAtmosphericScattering = Load(HDRenderPipelinePath + "Lighting/AtmosphericScattering/OpaqueAtmosphericScattering.shader"); hdriSky = Load(HDRenderPipelinePath + "Sky/HDRISky/HDRISky.shader"); integrateHdriSky = Load(HDRenderPipelinePath + "Sky/HDRISky/IntegrateHDRISky.shader"); proceduralSky = Load(HDRenderPipelinePath + "Sky/ProceduralSky/ProceduralSky.shader"); gradientSky = Load(HDRenderPipelinePath + "Sky/GradientSky/GradientSky.shader"); // Skybox/Cubemap is a builtin shader, must use Sahder.Find to access it. It is fine because we are in the editor skyboxCubemap = Shader.Find("Skybox/Cubemap"); // Material preIntegratedFGD_GGXDisneyDiffuse = Load(HDRenderPipelinePath + "Material/PreIntegratedFGD/PreIntegratedFGD_GGXDisneyDiffuse.shader"); preIntegratedFGD_CharlieFabricLambert = Load(HDRenderPipelinePath + "Material/PreIntegratedFGD/PreIntegratedFGD_CharlieFabricLambert.shader"); // Utilities / Core encodeBC6HCS = Load(CorePath + "CoreResources/EncodeBC6H.compute"); cubeToPanoShader = Load(CorePath + "CoreResources/CubeToPano.shader"); blitCubeTextureFace = Load(CorePath + "CoreResources/BlitCubeTextureFace.shader"); // Shadow shadowClearShader = Load(CorePath + "Shadow/ShadowClear.shader"); shadowBlurMoments = Load(CorePath + "Shadow/ShadowBlurMoments.compute"); debugShadowMapShader = Load(CorePath + "Shadow/DebugDisplayShadowMap.shader"); } #endif } }