public CostumRenderPipeline(bool DynamicBatching, bool Instancing, bool batcher, ComputeShader cs, bool useCS, Texture skyboxTexture, bool useAA, Color color, float seed) { //set up variables m_UseAA = useAA; m_useCS = useCS; m_computShader = cs; m_useDynamicBatching = DynamicBatching; m_GPUInstancing = Instancing; GraphicsSettings.useScriptableRenderPipelineBatching = batcher; Debug.Log("Creating pipeline asset!"); //cleanup camera info if new RP asset gets created // RP asset gets changed foreach (Camera cam in Camera.allCameras) { cam.depthTextureMode = DepthTextureMode.Depth; cam.depthTextureMode = DepthTextureMode.DepthNormals; cam.depthTextureMode = DepthTextureMode.MotionVectors; CamerInfoComponent info = cam.GetComponent <CamerInfoComponent>(); //Create info if null if (info == null) { info = cam.gameObject.AddComponent <CamerInfoComponent>(); } //Init ray casting m_RayCastMaster = new RayCastMaster(); m_RayCastMaster.Init(m_computShader, Camera.main, skyboxTexture, color, seed, Camera.main.GetComponent <CamerInfoComponent>()); info.Init(m_UseAA, m_useCS, m_RayCastMaster); } //Init new renderer m_renderer = new CameraRenderer(); }
public void Render(ScriptableRenderContext context, Camera camera, bool useDynmaicBatching, bool useGPUInstancing, CamerInfoComponent info) { //setup camera && context m_camInfo = info; m_context = context; m_cam = camera; m_cam.cullingMask = -1; PrepareForSceneWindow(); if (!Cull()) { return; } m_CullingResults = context.Cull(ref m_cullingParams); //create command buffer && set name m_buffer = new CommandBuffer(); m_buffer.name = m_cam.name + " Buffer"; //Setup buffer ClearBuffer(m_buffer); BeginBuffer(m_buffer); #if UNITY_EDITOR //Do "normal" rendering if cam should not use ray tracing, cam is scene view cam or game view is not ingame if (m_cam.cameraType == CameraType.SceneView || !Application.isPlaying) { DrawVisibleGeometry(useDynmaicBatching, useGPUInstancing); DrawUnsupportedShaders(); //Draw Gizmos, only executes if in editor DrawGizmos(); } //else run comput shader else { ExecuteCustomPass(m_DepthRT, "DepthOnly"); //ExecuteCustomPass(m_NormalRT, "NormalPass"); // ExecuteCustomPass(m_MeshId, "PositionPass"); ExecuteCustomPass(m_albedo, "SRPDefaultUnlit"); ExecuteComputeShader(info.RayCaster); // ExecuteCustomPass(m_previousDepth, "DepthOnly"); } #else ExecuteCustomPass(m_DepthRT, "DepthOnly"); //ExecuteCustomPass(m_NormalRT, "NormalPass"); // ExecuteCustomPass(m_MeshId, "PositionPass"); ExecuteCustomPass(m_albedo, "SRPDefaultUnlit"); ExecuteComputeShader(info.RayCaster); #endif //Submit buffer submitBuffer(m_buffer); }
protected override void Render(ScriptableRenderContext context, Camera[] cameras) { //iterate cameras && call actual render pass for the camera foreach (Camera cam in cameras) { // CameraRenderer camR = new CameraRenderer(); //get info from camera CamerInfoComponent info = cam.GetComponent <CamerInfoComponent>(); //Create info if null if (info == null) { info = cam.gameObject.AddComponent <CamerInfoComponent>(); //info.Init(false, m_useCS, m_computShader, m_RayCastMaster); } m_renderer.Render(context, cam, m_useDynamicBatching, m_GPUInstancing, info); } OnRenderFinished(); }
public void Init(ComputeShader newCS, Camera cam, Texture skybox, Color c, float seed, CamerInfoComponent newInfo) { Debug.Log("init Ray tracer!"); m_camInfo = newInfo; m_seed = seed; GetLighting(); // m_useAA = useAA; m_BackgroundColor = c; m_SkyBox = skybox; m_RayTracingShader = newCS; m_cam = cam; //make sure an initial rebuild happens m_tex2DArray512 = new Texture2DArray(512, 512, 4, TextureFormat.RGBA32, false); m_tex2DArray256 = new Texture2DArray(256, 256, 4, TextureFormat.RGBA32, false); m_tex2DArray128 = new Texture2DArray(128, 128, 4, TextureFormat.RGBA32, false); m_tex2DArray512_Normal = new Texture2DArray(512, 512, 4, TextureFormat.RGBA32, false); m_tex2DArray256_Normal = new Texture2DArray(256, 256, 4, TextureFormat.RGBA32, false); m_tex2DArray128_Normal = new Texture2DArray(128, 128, 4, TextureFormat.RGBA32, false); m_tex512List.Clear(); m_tex256List.Clear(); m_tex128List.Clear(); //m_tex2DArray256.dimension = UnityEngine.Rendering.TextureDimension.Tex2DArray; MeshWasRemoved = true; SphereWasRemoved = true; Rebuild(); }