您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
263 行
13 KiB
263 行
13 KiB
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<T>(string path) where T : UnityEngine.Object
|
|
{
|
|
return AssetDatabase.LoadAssetAtPath<T>(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<Shader>(HDRenderPipelinePath + "Material/Lit/Lit.shader"),
|
|
|
|
// Debug
|
|
debugDisplayLatlongPS = Load<Shader>(HDRenderPipelinePath + "Debug/DebugDisplayLatlong.Shader"),
|
|
debugViewMaterialGBufferPS = Load<Shader>(HDRenderPipelinePath + "Debug/DebugViewMaterialGBuffer.Shader"),
|
|
debugViewTilesPS = Load<Shader>(HDRenderPipelinePath + "Debug/DebugViewTiles.Shader"),
|
|
debugFullScreenPS = Load<Shader>(HDRenderPipelinePath + "Debug/DebugFullScreen.Shader"),
|
|
debugColorPickerPS = Load<Shader>(HDRenderPipelinePath + "Debug/DebugColorPicker.Shader"),
|
|
debugLightVolumePS = Load<Shader>(HDRenderPipelinePath + "Debug/DebugLightVolume.Shader"),
|
|
|
|
// Lighting
|
|
deferredPS = Load<Shader>(HDRenderPipelinePath + "Lighting/Deferred.Shader"),
|
|
colorPyramidCS = Load<ComputeShader>(HDRenderPipelinePath + "RenderPipeline/RenderPass/ColorPyramid.compute"),
|
|
depthPyramidCS = Load<ComputeShader>(HDRenderPipelinePath + "RenderPipeline/RenderPass/DepthPyramid.compute"),
|
|
copyChannelCS = Load<ComputeShader>(CorePath + "CoreResources/GPUCopy.compute"),
|
|
applyDistortionCS = Load<ComputeShader>(HDRenderPipelinePath + "RenderPipeline/RenderPass/Distortion/ApplyDistorsion.compute"),
|
|
screenSpaceReflectionsCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/ScreenSpaceLighting/ScreenSpaceReflections.compute"),
|
|
|
|
// Lighting tile pass
|
|
clearDispatchIndirectCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/LightLoop/cleardispatchindirect.compute"),
|
|
buildDispatchIndirectCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/LightLoop/builddispatchindirect.compute"),
|
|
buildScreenAABBCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/LightLoop/scrbound.compute"),
|
|
buildPerTileLightListCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild.compute"),
|
|
buildPerBigTileLightListCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild-bigtile.compute"),
|
|
buildPerVoxelLightListCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/LightLoop/lightlistbuild-clustered.compute"),
|
|
buildMaterialFlagsCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/LightLoop/materialflags.compute"),
|
|
deferredCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/LightLoop/Deferred.compute"),
|
|
|
|
screenSpaceShadowCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/Shadow/ScreenSpaceShadow.compute"),
|
|
volumeVoxelizationCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/VolumetricLighting/VolumeVoxelization.compute"),
|
|
volumetricLightingCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/VolumetricLighting/VolumetricLighting.compute"),
|
|
|
|
subsurfaceScatteringCS = Load<ComputeShader>(HDRenderPipelinePath + "Material/SubsurfaceScattering/SubsurfaceScattering.compute"),
|
|
combineLightingPS = Load<Shader>(HDRenderPipelinePath + "Material/SubsurfaceScattering/CombineLighting.shader"),
|
|
|
|
// General
|
|
cameraMotionVectorsPS = Load<Shader>(HDRenderPipelinePath + "RenderPipeline/RenderPass/MotionVectors/CameraMotionVectors.shader"),
|
|
copyStencilBufferPS = Load<Shader>(HDRenderPipelinePath + "ShaderLibrary/CopyStencilBuffer.shader"),
|
|
copyDepthBufferPS = Load<Shader>(HDRenderPipelinePath + "ShaderLibrary/CopyDepthBuffer.shader"),
|
|
blitPS = Load<Shader>(HDRenderPipelinePath + "ShaderLibrary/Blit.shader"),
|
|
|
|
// Sky
|
|
blitCubemapPS = Load<Shader>(HDRenderPipelinePath + "Sky/BlitCubemap.shader"),
|
|
buildProbabilityTablesCS = Load<ComputeShader>(HDRenderPipelinePath + "Material/GGXConvolution/BuildProbabilityTables.compute"),
|
|
computeGgxIblSampleDataCS = Load<ComputeShader>(HDRenderPipelinePath + "Material/GGXConvolution/ComputeGgxIblSampleData.compute"),
|
|
GGXConvolvePS = Load<Shader>(HDRenderPipelinePath + "Material/GGXConvolution/GGXConvolve.shader"),
|
|
opaqueAtmosphericScatteringPS = Load<Shader>(HDRenderPipelinePath + "Lighting/AtmosphericScattering/OpaqueAtmosphericScattering.shader"),
|
|
hdriSkyPS = Load<Shader>(HDRenderPipelinePath + "Sky/HDRISky/HDRISky.shader"),
|
|
integrateHdriSkyPS = Load<Shader>(HDRenderPipelinePath + "Sky/HDRISky/IntegrateHDRISky.shader"),
|
|
proceduralSkyPS = Load<Shader>(HDRenderPipelinePath + "Sky/ProceduralSky/ProceduralSky.shader"),
|
|
gradientSkyPS = Load<Shader>(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<Shader>(HDRenderPipelinePath + "Material/PreIntegratedFGD/PreIntegratedFGD_GGXDisneyDiffuse.shader"),
|
|
preIntegratedFGD_CharlieFabricLambertPS = Load<Shader>(HDRenderPipelinePath + "Material/PreIntegratedFGD/PreIntegratedFGD_CharlieFabricLambert.shader"),
|
|
preIntegratedFGD_CookTorrancePS = Load<Shader>(HDRenderPipelinePath + "Material/AxF/PreIntegratedFGD_CookTorrance.shader"),
|
|
preIntegratedFGD_WardPS = Load<Shader>(HDRenderPipelinePath + "Material/AxF/PreIntegratedFGD_Ward.shader"),
|
|
|
|
// Utilities / Core
|
|
encodeBC6HCS = Load<ComputeShader>(CorePath + "CoreResources/EncodeBC6H.compute"),
|
|
cubeToPanoPS = Load<Shader>(CorePath + "CoreResources/CubeToPano.shader"),
|
|
blitCubeTextureFacePS = Load<Shader>(CorePath + "CoreResources/BlitCubeTextureFace.shader"),
|
|
|
|
// Shadow
|
|
shadowClearPS = Load<Shader>(HDRenderPipelinePath + "Lighting/Shadow/ShadowClear.shader"),
|
|
shadowBlurMomentsCS = Load<ComputeShader>(HDRenderPipelinePath + "Lighting/Shadow/ShadowBlurMoments.compute"),
|
|
debugShadowMapPS = Load<Shader>(HDRenderPipelinePath + "Lighting/Shadow/DebugDisplayShadowMap.shader"),
|
|
debugHDShadowMapPS = Load<Shader>(HDRenderPipelinePath + "Lighting/Shadow/DebugDisplayHDShadowMap.shader"),
|
|
|
|
// Decal
|
|
decalNormalBufferPS = Load<Shader>(HDRenderPipelinePath + "Material/Decal/DecalNormalBuffer.shader"),
|
|
|
|
// MSAA
|
|
depthValuesPS = Load<Shader>(HDRenderPipelinePath + "RenderPipeline/RenderPass/MSAA/DepthValues.shader"),
|
|
aoResolvePS = Load<Shader>(HDRenderPipelinePath + "RenderPipeline/RenderPass/MSAA/AOResolve.shader"),
|
|
colorResolvePS = Load<Shader>(HDRenderPipelinePath + "RenderPipeline/RenderPass/MSAA/ColorResolve.shader"),
|
|
};
|
|
|
|
// Materials
|
|
materials = new MaterialResources
|
|
{
|
|
// Defaults
|
|
defaultDiffuseMat = Load<Material>(HDRenderPipelinePath + "RenderPipelineResources/Material/DefaultHDMaterial.mat"),
|
|
defaultMirrorMat = Load<Material>(HDRenderPipelinePath + "RenderPipelineResources/Material/DefaultHDMirrorMaterial.mat"),
|
|
defaultDecalMat = Load<Material>(HDRenderPipelinePath + "RenderPipelineResources/Material/DefaultHDDecalMaterial.mat"),
|
|
defaultTerrainMat = Load<Material>(HDRenderPipelinePath + "RenderPipelineResources/Material/DefaultHDTerrainMaterial.mat"),
|
|
};
|
|
|
|
// Textures
|
|
textures = new TextureResources
|
|
{
|
|
// Debug
|
|
debugFontTex = Load<Texture2D>(HDRenderPipelinePath + "RenderPipelineResources/Texture/DebugFont.tga"),
|
|
};
|
|
|
|
// ShaderGraphs
|
|
shaderGraphs = new ShaderGraphResources
|
|
{
|
|
};
|
|
}
|
|
#endif
|
|
}
|
|
}
|