internal static void RenderAndWriteToFile( HDProbe probe, string targetFile, RenderTexture cubeRT, RenderTexture planarRT, out CameraSettings cameraSettings, out CameraPositionSettings cameraPositionSettings ) { var settings = probe.settings; switch (settings.type) { case ProbeSettings.ProbeType.ReflectionProbe: { var positionSettings = ProbeCapturePositionSettings.ComputeFrom(probe, null); HDRenderUtilities.Render(probe.settings, positionSettings, cubeRT, out cameraSettings, out cameraPositionSettings, forceFlipY: true, forceInvertBackfaceCulling: true, // Cubemap have an RHS standard, so we need to invert the face culling (uint)StaticEditorFlags.ReflectionProbeStatic ); HDBakingUtilities.CreateParentDirectoryIfMissing(targetFile); Checkout(targetFile); HDTextureUtilities.WriteTextureFileToDisk(cubeRT, targetFile); break; } case ProbeSettings.ProbeType.PlanarProbe: { var planarProbe = (PlanarReflectionProbe)probe; var positionSettings = ProbeCapturePositionSettings.ComputeFromMirroredReference( probe, planarProbe.referencePosition ); HDRenderUtilities.Render( settings, positionSettings, planarRT, out cameraSettings, out cameraPositionSettings ); HDBakingUtilities.CreateParentDirectoryIfMissing(targetFile); Checkout(targetFile); HDTextureUtilities.WriteTextureFileToDisk(planarRT, targetFile); var renderData = new HDProbe.RenderData(cameraSettings, cameraPositionSettings); var targetRenderDataFile = targetFile + ".renderData"; Checkout(targetRenderDataFile); HDBakingUtilities.TrySerializeToDisk(renderData, targetRenderDataFile); break; } default: throw new ArgumentOutOfRangeException(nameof(probe.settings.type)); } }
static void RenderInCustomAsset(HDProbe probe, bool useExistingCustomAsset) { var provider = new TProvider(); string assetPath = null; if (useExistingCustomAsset && probe.customTexture != null && !probe.customTexture.Equals(null)) { assetPath = AssetDatabase.GetAssetPath(probe.customTexture); } if (string.IsNullOrEmpty(assetPath)) { assetPath = EditorUtility.SaveFilePanelInProject( "Save custom capture", probe.name, "exr", "Save custom capture"); } if (!string.IsNullOrEmpty(assetPath)) { var target = HDProbeSystem.CreateRenderTargetForMode( probe, ProbeSettings.Mode.Custom ); HDProbeSystem.Render( probe, null, target, out HDProbe.RenderData renderData, forceFlipY: probe.type == ProbeSettings.ProbeType.ReflectionProbe ); HDTextureUtilities.WriteTextureFileToDisk(target, assetPath); AssetDatabase.ImportAsset(assetPath); HDBakedReflectionSystem.ImportAssetAt(probe, assetPath); CoreUtils.Destroy(target); var assetTarget = AssetDatabase.LoadAssetAtPath <Texture>(assetPath); probe.SetTexture(ProbeSettings.Mode.Custom, assetTarget); probe.SetRenderData(ProbeSettings.Mode.Custom, renderData); EditorUtility.SetDirty(probe); } }