void SetupInstanceSegmentation() { var myCamera = GetComponent <Camera>(); var width = myCamera.pixelWidth; var height = myCamera.pixelHeight; m_InstanceSegmentationTexture = new RenderTexture(new RenderTextureDescriptor(width, height, GraphicsFormat.R8G8B8A8_UNorm, 8)); m_InstanceSegmentationTexture.filterMode = FilterMode.Point; m_InstanceSegmentationTexture.name = "InstanceSegmentation"; m_RenderedObjectInfoGenerator = new RenderedObjectInfoGenerator(); #if HDRP_PRESENT || URP_PRESENT #if HDRP_PRESENT var customPassVolume = this.GetComponent <CustomPassVolume>() ?? gameObject.AddComponent <CustomPassVolume>(); customPassVolume.injectionPoint = CustomPassInjectionPoint.BeforeRendering; customPassVolume.isGlobal = true; m_InstanceSegmentationPass = new InstanceSegmentationPass() { name = "Instance segmentation pass", targetCamera = GetComponent <Camera>(), targetTexture = m_InstanceSegmentationTexture }; m_InstanceSegmentationPass.EnsureInit(); customPassVolume.customPasses.Add(m_InstanceSegmentationPass); m_LensDistortionPass = new LensDistortionPass(GetComponent <Camera>(), m_InstanceSegmentationTexture) { name = "Instance Segmentation Lens Distortion Pass" }; m_LensDistortionPass.EnsureInit(); customPassVolume.customPasses.Add(m_LensDistortionPass); m_fLensDistortionEnabled = true; #elif URP_PRESENT m_InstanceSegmentationPass = new InstanceSegmentationUrpPass(myCamera, m_InstanceSegmentationTexture); AddScriptableRenderPass(m_InstanceSegmentationPass); // Lens Distortion m_LensDistortionPass = new LensDistortionUrpPass(myCamera, m_InstanceSegmentationTexture); AddScriptableRenderPass(m_LensDistortionPass); m_fLensDistortionEnabled = true; #endif m_LensDistortionPass.m_LensDistortionCrossPipelinePass.lensDistortionOverride = m_LensDistortionIntensityOverride; #endif m_InstanceSegmentationReader = new RenderTextureReader <Color32>(m_InstanceSegmentationTexture, myCamera, (frameCount, data, tex) => { InstanceSegmentationImageReadback?.Invoke(frameCount, data, tex); if (RenderedObjectInfosCalculated != null) { m_RenderedObjectInfoGenerator.Compute(data, tex.width, BoundingBoxOrigin.TopLeft, out var renderedObjectInfos, Allocator.Temp); RenderedObjectInfosCalculated?.Invoke(frameCount, renderedObjectInfos); renderedObjectInfos.Dispose(); }
void CaptureInstanceSegmentation(ScriptableRenderContext scriptableRenderContext) { var width = m_InstanceSegmentationTexture.width; m_InstanceSegmentationReader.Capture(scriptableRenderContext, (frameCount, data, renderTexture) => { InstanceSegmentationImageReadback?.Invoke(frameCount, data, m_InstanceSegmentationTexture); if (RenderedObjectInfosCalculated != null) { m_RenderedObjectInfoGenerator.Compute(data, width, BoundingBoxOrigin.TopLeft, out var renderedObjectInfos, Allocator.Temp); RenderedObjectInfosCalculated?.Invoke(frameCount, renderedObjectInfos); renderedObjectInfos.Dispose(); }