Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
    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();
    }