protected override void Compile(AssetCompilerContext context, string urlInStorage, UFile assetAbsolutePath, SkyboxAsset asset, AssetCompilerResult result)
        {
            result.BuildSteps = new AssetBuildStep(AssetItem);
            result.ShouldWaitForPreviousBuilds = true;

            // build the textures for windows (needed for skybox compilation)
            foreach (var dependency in asset.Model.GetDependencies())
            {
                var assetItem = context.Package.Assets.Find(dependency.Id);
                if (assetItem != null && assetItem.Asset is TextureAsset)
                {
                    var textureAsset = (TextureAsset)assetItem.Asset;

                    // Get absolute path of asset source on disk
                    var assetSource = GetAbsolutePath(assetItem.Location.GetDirectoryAndFileName(), textureAsset.Source);

                    // Create a synthetic url
                    var textureUrl = SkyboxGenerator.BuildTextureForSkyboxGenerationLocation(assetItem.Location);

                    var gameSettingsAsset = context.GetGameSettingsAsset();

                    // Create and add the texture command.
                    var textureParameters = new TextureConvertParameters(assetSource, textureAsset, PlatformType.Windows, GraphicsPlatform.Direct3D11, GraphicsProfile.Level_10_0, gameSettingsAsset.TextureQuality);
                    result.BuildSteps.Add(new AssetBuildStep(AssetItem)
                    {
                        new TextureAssetCompiler.TextureConvertCommand(textureUrl, textureParameters)
                    });
                }
            }

            // add the skybox command itself.
            result.BuildSteps.Add(new WaitBuildStep());
            result.BuildSteps.Add(new SkyboxCompileCommand(urlInStorage, asset));
        }
            /// <inheritdoc/>
            protected override Task <ResultStatus> DoCommandOverride(ICommandContext commandContext)
            {
                // TODO Convert SkyboxAsset to Skybox and save to Skybox object
                // TODO Add system to prefilter

                using (var context = new SkyboxGeneratorContext())
                {
                    var result = SkyboxGenerator.Compile(asset, context);

                    if (result.HasErrors)
                    {
                        result.CopyTo(commandContext.Logger);
                        return(Task.FromResult(ResultStatus.Failed));
                    }

                    context.Assets.Save(Url, result.Skybox);
                }

                return(Task.FromResult(ResultStatus.Successful));
            }