You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

77 lines
2.8 KiB

using UnityEngine;
namespace FidelityFX
{
public class CacaoAssets : ScriptableObject
{
public CacaoShaders shaders;
#if UNITY_EDITOR
private void Reset()
{
shaders = new CacaoShaders
{
prepareDepths = FindComputeShader("ffx_cacao_prepare_depths_pass"),
prepareNormals = FindComputeShader("ffx_cacao_prepare_normals_pass"),
generateImportanceMap = FindComputeShader("ffx_cacao_generate_importance_map_pass"),
generateSsao = FindComputeShader("ffx_cacao_generate_pass"),
edgeSensitiveBlur = FindComputeShader("ffx_cacao_edge_sensitive_blur_pass"),
bilateralUpscale = FindComputeShader("ffx_cacao_upscale_bilateral_pass"),
reinterleave = FindComputeShader("ffx_cacao_apply_pass"),
};
}
private static ComputeShader FindComputeShader(string name)
{
string[] assetGuids = UnityEditor.AssetDatabase.FindAssets($"t:ComputeShader {name}");
if (assetGuids == null || assetGuids.Length == 0)
return null;
string assetPath = UnityEditor.AssetDatabase.GUIDToAssetPath(assetGuids[0]);
return UnityEditor.AssetDatabase.LoadAssetAtPath<ComputeShader>(assetPath);
}
#endif
}
[System.Serializable]
public class CacaoShaders
{
public ComputeShader prepareDepths;
public ComputeShader prepareNormals;
public ComputeShader generateImportanceMap;
public ComputeShader generateSsao;
public ComputeShader edgeSensitiveBlur;
public ComputeShader bilateralUpscale;
public ComputeShader reinterleave;
public CacaoShaders Clone()
{
return (CacaoShaders)MemberwiseClone();
}
public CacaoShaders DeepCopy()
{
return new CacaoShaders
{
prepareDepths = Object.Instantiate(prepareDepths),
prepareNormals = Object.Instantiate(prepareNormals),
generateImportanceMap = Object.Instantiate(generateImportanceMap),
generateSsao = Object.Instantiate(generateSsao),
edgeSensitiveBlur = Object.Instantiate(edgeSensitiveBlur),
bilateralUpscale = Object.Instantiate(bilateralUpscale),
reinterleave = Object.Instantiate(reinterleave),
};
}
public void Dispose()
{
Object.Destroy(prepareDepths);
Object.Destroy(prepareNormals);
Object.Destroy(generateImportanceMap);
Object.Destroy(generateSsao);
Object.Destroy(edgeSensitiveBlur);
Object.Destroy(bilateralUpscale);
Object.Destroy(reinterleave);
}
}
}