public static void SetupDrawMode() { //Setup object CustomDrawModeAssetObject.SetUpcdma(); if (CustomDrawModeAssetObject.cdma == null) { return; } //Setup draw mode SceneView.ClearUserDefinedCameraModes(); for (int i = 0; i < CustomDrawModeAssetObject.cdma.customDrawModes.Length; i++) { if ( CustomDrawModeAssetObject.cdma.customDrawModes[i].name != "" && CustomDrawModeAssetObject.cdma.customDrawModes[i].category != "" ) { SceneView.AddCameraMode( CustomDrawModeAssetObject.cdma.customDrawModes[i].name, CustomDrawModeAssetObject.cdma.customDrawModes[i].category); } } ArrayList sceneViewArray = SceneView.sceneViews; foreach (SceneView sceneView in sceneViewArray) { sceneView.onValidateCameraMode -= AcceptedDrawMode; // Clean up sceneView.onValidateCameraMode += AcceptedDrawMode; } }
//******************************************* */ static void RunDrawMode() { //Setup object if (!CustomDrawModeAssetObject.SetUpObject()) { return; } //Set camera GetCurrentSceneCam(); //Setup draw mode SceneView.ClearUserDefinedCameraModes(); for (int i = 0; i < CustomDrawModeAssetObject.cdma.customDrawModes.Length; i++) { if ( CustomDrawModeAssetObject.cdma.customDrawModes[i].name != "" && CustomDrawModeAssetObject.cdma.customDrawModes[i].category != "" ) { SceneView.AddCameraMode( CustomDrawModeAssetObject.cdma.customDrawModes[i].name, CustomDrawModeAssetObject.cdma.customDrawModes[i].category); } } ArrayList sceneViewArray = SceneView.sceneViews; foreach (SceneView sceneView in sceneViewArray) { sceneView.onValidateCameraMode -= AcceptedDrawMode; // Clean up sceneView.onValidateCameraMode += AcceptedDrawMode; } //Render with selected draw mode if (cam != null) { ArrayList sceneViewsArray = SceneView.sceneViews; foreach (SceneView sceneView in sceneViewsArray) { bool success = false; for (int i = 0; i < CustomDrawModeAssetObject.cdma.customDrawModes.Length; i++) { if (CustomDrawModeAssetObject.cdma.customDrawModes[i].name != "") { if (sceneView.cameraMode.name == CustomDrawModeAssetObject.cdma.customDrawModes[i].name) { //cam.SetReplacementShader(shader, ""); //this does nothing... if (CustomDrawModeAssetObject.cdma.customDrawModes[i].shader != null) { cam.RenderWithShader(CustomDrawModeAssetObject.cdma.customDrawModes[i].shader, ""); } success = true; break; } } } //If nothing can be found if (!success) { cam.ResetReplacementShader(); } } } }
protected override void Render(ScriptableRenderContext context, Camera[] cameras) { BeginFrameRendering(cameras); foreach (Camera camera in cameras) { BeginCameraRendering(camera); //Culling ScriptableCullingParameters cullingParams; if (!camera.TryGetCullingParameters(out cullingParams)) { continue; } CullingResults cull = context.Cull(ref cullingParams); //Camera setup some builtin variables e.g. camera projection matrices etc context.SetupCameraProperties(camera); //Get the setting from camera component bool drawSkyBox = camera.clearFlags == CameraClearFlags.Skybox? true : false; bool clearDepth = camera.clearFlags == CameraClearFlags.Nothing? false : true; bool clearColor = camera.clearFlags == CameraClearFlags.Color? true : false; //Camera clear flag CommandBuffer cmd = new CommandBuffer(); cmd.ClearRenderTarget(clearDepth, clearColor, camera.backgroundColor); context.ExecuteCommandBuffer(cmd); cmd.Release(); //Setup DrawSettings and FilterSettings var sortingSettings = new SortingSettings(camera); DrawingSettings drawSettings = new DrawingSettings(m_PassName, sortingSettings); FilteringSettings filterSettings = new FilteringSettings(RenderQueueRange.all); //Skybox if (drawSkyBox) { context.DrawSkybox(camera); } //SceneViewDrawMode #if UNITY_EDITOR bool isSceneViewCam = camera.cameraType == CameraType.SceneView; if (isSceneViewCam) { Material debugMaterial = CustomDrawModeAssetObject.GetDrawModeMaterial(); if (debugMaterial != null) { sortingSettings.criteria = SortingCriteria.None; filterSettings.renderQueueRange = RenderQueueRange.all; DrawingSettings debugSettings = new DrawingSettings(new ShaderTagId("debugMaterial"), sortingSettings) { perObjectData = PerObjectData.None, overrideMaterial = debugMaterial, overrideMaterialPassIndex = 0 }; debugSettings.SetShaderPassName(1, m_PassName); context.DrawRenderers(cull, ref debugSettings, ref filterSettings); context.Submit(); continue; } } #endif //Opaque objects sortingSettings.criteria = SortingCriteria.CommonOpaque; drawSettings.sortingSettings = sortingSettings; filterSettings.renderQueueRange = RenderQueueRange.opaque; context.DrawRenderers(cull, ref drawSettings, ref filterSettings); //Transparent objects sortingSettings.criteria = SortingCriteria.CommonTransparent; drawSettings.sortingSettings = sortingSettings; filterSettings.renderQueueRange = RenderQueueRange.transparent; context.DrawRenderers(cull, ref drawSettings, ref filterSettings); context.Submit(); } }