using System; using UnityEngine.Serialization; #if UNITY_EDITOR using UnityEditor; #endif namespace UnityEngine.Experimental.Rendering.HDPipeline { public class RenderPipelineResources : ScriptableObject { const int currentVersion = 4; [SerializeField] // Silent the warning // "The private field `UnityEngine.Experimental.Rendering.HDPipeline.RenderPipelineResources.m_Version' is assigned but its value is never used" // As it is used only in editor currently and when building a player we get this warning. #pragma warning disable 414 [FormerlySerializedAs("version")] int m_Version = 1; #pragma warning restore 414 [Serializable] public sealed class ShaderResources { // Defaults public Shader defaultPS; // Debug public Shader debugDisplayLatlongPS; public Shader debugViewMaterialGBufferPS; public Shader debugViewTilesPS; public Shader debugFullScreenPS; public Shader debugColorPickerPS; public Shader debugLightVolumePS; // Lighting public Shader deferredPS; public ComputeShader colorPyramidCS; public ComputeShader depthPyramidCS; public ComputeShader copyChannelCS; public ComputeShader applyDistortionCS; public ComputeShader screenSpaceReflectionsCS; // Lighting tile pass public ComputeShader clearDispatchIndirectCS; public ComputeShader buildDispatchIndirectCS; public ComputeShader buildScreenAABBCS; public ComputeShader buildPerTileLightListCS; // FPTL public ComputeShader buildPerBigTileLightListCS; public ComputeShader buildPerVoxelLightListCS; // clustered public ComputeShader buildMaterialFlagsCS; public ComputeShader deferredCS; public ComputeShader screenSpaceShadowCS; public ComputeShader volumeVoxelizationCS; public ComputeShader volumetricLightingCS; public ComputeShader subsurfaceScatteringCS; // Disney SSS public Shader combineLightingPS; // General public Shader cameraMotionVectorsPS; public Shader copyStencilBufferPS; public Shader copyDepthBufferPS; public Shader blitPS; // Sky public Shader blitCubemapPS; public ComputeShader buildProbabilityTablesCS; public ComputeShader computeGgxIblSampleDataCS; public Shader GGXConvolvePS; public Shader opaqueAtmosphericScatteringPS; public Shader hdriSkyPS; public Shader integrateHdriSkyPS; public Shader proceduralSkyPS; public Shader skyboxCubemapPS; public Shader gradientSkyPS; // Material public Shader preIntegratedFGD_GGXDisneyDiffusePS; public Shader preIntegratedFGD_CharlieFabricLambertPS; public Shader preIntegratedFGD_WardPS; public Shader preIntegratedFGD_CookTorrancePS; // Utilities / Core public ComputeShader encodeBC6HCS; public Shader cubeToPanoPS; public Shader blitCubeTextureFacePS; // Shadow public Shader shadowClearPS; public ComputeShader shadowBlurMomentsCS; public Shader debugShadowMapPS; public Shader debugHDShadowMapPS; // Decal public Shader decalNormalBufferPS; // MSAA Shaders public Shader depthValuesPS; public Shader aoResolvePS; public Shader colorResolvePS; } [Serializable] public sealed class MaterialResources { // Defaults public Material defaultDiffuseMat; public Material defaultMirrorMat; public Material defaultDecalMat; public Material defaultTerrainMat; } [Serializable] public sealed class TextureResources { // Debug public Texture2D debugFontTex; } [Serializable] public sealed class ShaderGraphResources { } public ShaderResources shaders; public MaterialResources materials; public TextureResources textures; public ShaderGraphResources shaderGraphs; #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() + "Runtime/"; string CorePath = HDUtils.GetHDRenderPipelinePath() + "Runtime/Core/"; // HDUtils.GetCorePath(); // All CoreRP have been move to HDRP currently for out of preview of SRP and LW // Shaders shaders = new ShaderResources { // Defaults defaultPS = Load(HDRenderPipelinePath + "Material/Lit/Lit.shader"), // Debug debugDisplayLatlongPS = Load(HDRenderPipelinePath + "Debug/DebugDisplayLatlong.Shader"), debugViewMaterialGBufferPS = Load(HDRenderPipelinePath + "Debug/DebugViewMaterialGBuffer.Shader"), debugViewTilesPS = Load(HDRenderPipelinePath + "Debug/DebugViewTiles.Shader"), debugFullScreenPS = Load(HDRenderPipelinePath + "Debug/DebugFullScreen.Shader"), debugColorPickerPS = Load(HDRenderPipelinePath + "Debug/DebugColorPicker.Shader"), debugLightVolumePS = Load(HDRenderPipelinePath + "Debug/DebugLightVolume.Shader"), // Lighting deferredPS = Load(HDRenderPipelinePath + "Lighting/Deferred.Shader"), colorPyramidCS = Load(HDRenderPipelinePath + "RenderPipeline/RenderPass/ColorPyramid.compute"), depthPyramidCS = Load(HDRenderPipelinePath + "RenderPipeline/RenderPass/DepthPyramid.compute"), copyChannelCS = Load(CorePath + "CoreResources/GPUCopy.compute"), applyDistortionCS = Load(HDRenderPipelinePath + "RenderPipeline/RenderPass/Distortion/ApplyDistorsion.compute"), screenSpaceReflectionsCS = Load(HDRenderPipelinePath + "Lighting/ScreenSpaceLighting/ScreenSpaceReflections.compute"), // Lighting tile pass clearDispatchIndirectCS = Load(HDRenderPipelinePath + "Lighting/LightLoop/cleardispatchindirect.compute"), buildDispatchIndirectCS = Load(HDRenderPipelinePath + "Lighting/LightLoop/builddispatchindirect.compute"), buildScreenAABBCS = Load(HDRenderPipelinePath + "Lighting/LightLoop/scrbound.compute"), buildPerTileLightListCS = Load(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild.compute"), buildPerBigTileLightListCS = Load(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild-bigtile.compute"), buildPerVoxelLightListCS = Load(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild-clustered.compute"), buildMaterialFlagsCS = Load(HDRenderPipelinePath + "Lighting/LightLoop/materialflags.compute"), deferredCS = Load(HDRenderPipelinePath + "Lighting/LightLoop/Deferred.compute"), screenSpaceShadowCS = Load(HDRenderPipelinePath + "Lighting/Shadow/ScreenSpaceShadow.compute"), volumeVoxelizationCS = Load(HDRenderPipelinePath + "Lighting/VolumetricLighting/VolumeVoxelization.compute"), volumetricLightingCS = Load(HDRenderPipelinePath + "Lighting/VolumetricLighting/VolumetricLighting.compute"), subsurfaceScatteringCS = Load(HDRenderPipelinePath + "Material/SubsurfaceScattering/SubsurfaceScattering.compute"), combineLightingPS = Load(HDRenderPipelinePath + "Material/SubsurfaceScattering/CombineLighting.shader"), // General cameraMotionVectorsPS = Load(HDRenderPipelinePath + "RenderPipeline/RenderPass/MotionVectors/CameraMotionVectors.shader"), copyStencilBufferPS = Load(HDRenderPipelinePath + "ShaderLibrary/CopyStencilBuffer.shader"), copyDepthBufferPS = Load(HDRenderPipelinePath + "ShaderLibrary/CopyDepthBuffer.shader"), blitPS = Load(HDRenderPipelinePath + "ShaderLibrary/Blit.shader"), // Sky blitCubemapPS = Load(HDRenderPipelinePath + "Sky/BlitCubemap.shader"), buildProbabilityTablesCS = Load(HDRenderPipelinePath + "Material/GGXConvolution/BuildProbabilityTables.compute"), computeGgxIblSampleDataCS = Load(HDRenderPipelinePath + "Material/GGXConvolution/ComputeGgxIblSampleData.compute"), GGXConvolvePS = Load(HDRenderPipelinePath + "Material/GGXConvolution/GGXConvolve.shader"), opaqueAtmosphericScatteringPS = Load(HDRenderPipelinePath + "Lighting/AtmosphericScattering/OpaqueAtmosphericScattering.shader"), hdriSkyPS = Load(HDRenderPipelinePath + "Sky/HDRISky/HDRISky.shader"), integrateHdriSkyPS = Load(HDRenderPipelinePath + "Sky/HDRISky/IntegrateHDRISky.shader"), proceduralSkyPS = Load(HDRenderPipelinePath + "Sky/ProceduralSky/ProceduralSky.shader"), gradientSkyPS = Load(HDRenderPipelinePath + "Sky/GradientSky/GradientSky.shader"), // Skybox/Cubemap is a builtin shader, must use Shader.Find to access it. It is fine because we are in the editor skyboxCubemapPS = Shader.Find("Skybox/Cubemap"), // Material preIntegratedFGD_GGXDisneyDiffusePS = Load(HDRenderPipelinePath + "Material/PreIntegratedFGD/PreIntegratedFGD_GGXDisneyDiffuse.shader"), preIntegratedFGD_CharlieFabricLambertPS = Load(HDRenderPipelinePath + "Material/PreIntegratedFGD/PreIntegratedFGD_CharlieFabricLambert.shader"), preIntegratedFGD_CookTorrancePS = Load(HDRenderPipelinePath + "Material/AxF/PreIntegratedFGD_CookTorrance.shader"), preIntegratedFGD_WardPS = Load(HDRenderPipelinePath + "Material/AxF/PreIntegratedFGD_Ward.shader"), // Utilities / Core encodeBC6HCS = Load(CorePath + "CoreResources/EncodeBC6H.compute"), cubeToPanoPS = Load(CorePath + "CoreResources/CubeToPano.shader"), blitCubeTextureFacePS = Load(CorePath + "CoreResources/BlitCubeTextureFace.shader"), // Shadow shadowClearPS = Load(HDRenderPipelinePath + "Lighting/Shadow/ShadowClear.shader"), shadowBlurMomentsCS = Load(HDRenderPipelinePath + "Lighting/Shadow/ShadowBlurMoments.compute"), debugShadowMapPS = Load(HDRenderPipelinePath + "Lighting/Shadow/DebugDisplayShadowMap.shader"), debugHDShadowMapPS = Load(HDRenderPipelinePath + "Lighting/Shadow/DebugDisplayHDShadowMap.shader"), // Decal decalNormalBufferPS = Load(HDRenderPipelinePath + "Material/Decal/DecalNormalBuffer.shader"), // MSAA depthValuesPS = Load(HDRenderPipelinePath + "RenderPipeline/RenderPass/MSAA/DepthValues.shader"), aoResolvePS = Load(HDRenderPipelinePath + "RenderPipeline/RenderPass/MSAA/AOResolve.shader"), colorResolvePS = Load(HDRenderPipelinePath + "RenderPipeline/RenderPass/MSAA/ColorResolve.shader"), }; // Materials materials = new MaterialResources { // Defaults defaultDiffuseMat = Load(HDRenderPipelinePath + "RenderPipelineResources/Material/DefaultHDMaterial.mat"), defaultMirrorMat = Load(HDRenderPipelinePath + "RenderPipelineResources/Material/DefaultHDMirrorMaterial.mat"), defaultDecalMat = Load(HDRenderPipelinePath + "RenderPipelineResources/Material/DefaultHDDecalMaterial.mat"), defaultTerrainMat = Load(HDRenderPipelinePath + "RenderPipelineResources/Material/DefaultHDTerrainMaterial.mat"), }; // Textures textures = new TextureResources { // Debug debugFontTex = Load(HDRenderPipelinePath + "RenderPipelineResources/Texture/DebugFont.tga"), }; // ShaderGraphs shaderGraphs = new ShaderGraphResources { }; } #endif } }