using UnityEngine; namespace FidelityFX { public class CacaoAssets : ScriptableObject { public CacaoShaders shaders; #if UNITY_EDITOR private void Reset() { shaders = new CacaoShaders { clearLoadCounter = FindComputeShader("ffx_cacao_clear_load_counter_pass"), 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(assetPath); } #endif } [System.Serializable] public class CacaoShaders { public ComputeShader clearLoadCounter; 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 { clearLoadCounter = Object.Instantiate(clearLoadCounter), 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(clearLoadCounter); Object.Destroy(prepareDepths); Object.Destroy(prepareNormals); Object.Destroy(generateImportanceMap); Object.Destroy(generateSsao); Object.Destroy(edgeSensitiveBlur); Object.Destroy(bilateralUpscale); Object.Destroy(reinterleave); } } }