public void Setup(ScriptableRenderContext context, Camera camera, PostFXSettings settings) { this.context = context; this.camera = camera; this.settings = camera.cameraType <= CameraType.SceneView ? settings : null; ApplySceneViewState(); }
public void Setup(ScriptableRenderContext context, Camera camera, PostFXSettings settings, bool useHDR, int colorLUTResolution) { this.context = context; this.camera = camera; this.settings = camera.cameraType <= CameraType.SceneView ? settings : null; this.useHDR = useHDR; this.colorLUTResolution = colorLUTResolution; ApplySceneViewState(); }
public void Render( ScriptableRenderContext context, Camera camera, bool allowHDR, bool useDynamicBatching, bool useGPUInstancing, bool useLightsPerObject, ShadowSettings shadowSettings, PostFXSettings postFXSettings, int colorLUTResolution ) { this.context = context; this.camera = camera; var crpCamera = camera.GetComponent <CustomRenderPipelineCamera>(); CameraSettings cameraSettings = crpCamera ? crpCamera.Settings : defaultCameraSettings; if (cameraSettings.overridePostFX) { postFXSettings = cameraSettings.postFXSettings; } PrepareBuffer(); PrepareForSceneWindow(); if (!Cull(shadowSettings.maxDistance)) { return; } useHDR = allowHDR && camera.allowHDR; buffer.BeginSample(SampleName); ExecuteBuffer(); lighting.Setup( context, cullingResults, shadowSettings, useLightsPerObject, cameraSettings.maskLights ? cameraSettings.renderingLayerMask : -1 ); postFXStack.Setup( context, camera, postFXSettings, useHDR, colorLUTResolution, cameraSettings.finalBlendMode ); buffer.EndSample(SampleName); Setup(); DrawVisibleGeometry( useDynamicBatching, useGPUInstancing, useLightsPerObject, cameraSettings.renderingLayerMask ); DrawUnsupportedShaders(); DrawGizmosBeforeFX(); if (postFXStack.IsActive) { postFXStack.Render(frameBufferId); } DrawGizmosAfterFX(); Cleanup(); Submit(); }
public CustomRenderPipeline( bool useDynamicBatching, bool useGPUInstancing, bool useSRPBatcher, ShadowSettings shadowSettings, PostFXSettings postFXSettings ) { this.shadowSettings = shadowSettings; this.postFXSettings = postFXSettings; this.useDynamicBatching = useDynamicBatching; this.useGPUInstancing = useGPUInstancing; GraphicsSettings.useScriptableRenderPipelineBatching = useSRPBatcher; GraphicsSettings.lightsUseLinearIntensity = true; }
public CustomRenderPipeline(bool allowHDR, bool useDynamicBatching, bool useGPUInstancing, bool useSRPBatcher, bool useLightsPerObject, ShadowSettings shadowSettings, PostFXSettings postFXSettings) { this.allowHDR = allowHDR; this.shadowSettings = shadowSettings; this.useDynamicBatching = useDynamicBatching; this.useGPUInstancing = useGPUInstancing; this.useLightsPerObject = useLightsPerObject; this.postFXSettings = postFXSettings; GraphicsSettings.useScriptableRenderPipelineBatching = useSRPBatcher; GraphicsSettings.lightsUseLinearIntensity = true; InitializeForEditor(); }
public void Setup( ScriptableRenderContext context, Camera camera, Vector2Int bufferSize, PostFXSettings settings, bool useHDR, int colorLUTResolution, CameraSettings.FinalBlendMode finalBlendMode, CameraBufferSettings.BicubicRescalingMode bicubicRescaling ) { this.useHDR = useHDR; this.context = context; this.camera = camera; this.bufferSize = bufferSize; this.settings = (camera.cameraType <= CameraType.SceneView) ? settings : null; this.colorLUTResolution = colorLUTResolution; this.finalBlendMode = finalBlendMode; this.bicubicRescaling = bicubicRescaling; ApplySceneViewState(); }
public CustomRenderPipeline(CameraBufferSettings cameraBufferSettings, bool useDynamicBathcing, bool useGPUInstancing, bool useLightsPerObject, bool useSRPBatcher, ShadowSettings shadowSettings, PostFXSettings postFXSettings, int colorLUTResolution, Shader cameraRendererShader) { this.colorLUTResolution = colorLUTResolution; this.cameraBufferSettings = cameraBufferSettings; this.postFXSettings = postFXSettings; this.shadowSettings = shadowSettings; this.useDynamicBathcing = useDynamicBathcing; this.useGPUInstancing = useGPUInstancing; this.useLightsPerObject = useLightsPerObject; //开启SRP Batch 会优先使用 GraphicsSettings.useScriptableRenderPipelineBatching = useSRPBatcher; //是用Gamma颜色还是线性颜色 GraphicsSettings.lightsUseLinearIntensity = true; // InitializeForEditor(); renderer = new CameraRenderer(cameraRendererShader); }
public void Setup (ScriptableRenderContext context, Camera camera, Vector2Int bufferSize, PostFXSettings settings, bool keepAlpha, bool useHDR, int colorLUTResolution, CameraSettings.FinalBlendMode finalBlendMode, CameraBufferSettings.BicubicRescalingMode bicubicRescaling, CameraBufferSettings.FXAA fxaa) { this.context = context; this.camera = camera; this.settings = camera.cameraType <= CameraType.SceneView ? settings : null; this.useHDR = useHDR; this.colorLUTResolution = colorLUTResolution; this.finalBlendMode = finalBlendMode; this.bufferSize = bufferSize; this.bicubicRescaling = bicubicRescaling; this.fxaa = fxaa; this.keepAlpha = keepAlpha; ApplySceneViewState(); //Debug.Log(fxaa.enabled); }
public void Render( ScriptableRenderContext context, Camera camera, bool useDynamicBatching, bool useGPUInstancing, ShadowSettings shadowSettings, PostFXSettings postFXSettings ) { this.context = context; this.camera = camera; PrepareBuffer(); PrepareForSceneWindow(); if (!Cull(shadowSettings.maxDistance)) { return; } buffer.BeginSample(SampleName); ExecuteBuffer(); lighting.Setup(context, cullingResults, shadowSettings); postFXStack.Setup(context, camera, postFXSettings); buffer.EndSample(SampleName); Setup(); DrawVisibleGeometry(useDynamicBatching, useGPUInstancing); DrawUnsupportedShaders(); DrawGizmosBeforeFX(); //开启绘制 if (postFXStack.IsActive) { postFXStack.Render(frameBufferId); } DrawGizmosAfterFX(); Cleanup(); Submit(); }
public void Render(ScriptableRenderContext context, Camera camera, PostFXSettings postFXSettings) { this.context = context; this.camera = camera; PrepareForSceneWindow(); if (!Cull()) { return; } postFXStack.Setup(context, camera, postFXSettings); Setup(); DrawVisibleGeometry(); DrawGizmosBeforeFX(); if (postFXStack.IsActive) { postFXStack.Render(frameBufferId); } DrawGizmosAfterFX(); Cleanup(); Submit(); }
public void Render( ScriptableRenderContext context, Camera camera, CameraBufferSettings bufferSettings, bool useDynamicBatching, bool useGPUInstancing, bool useLightsPerObject, ShadowSettings shadowSettings, PostFXSettings postFXSettings, int colorLUTResolution ) { this.context = context; this.camera = camera; var crpCamera = camera.GetComponent <CustomRenderPipelineCamera>(); CameraSettings cameraSettings = crpCamera ? crpCamera.Settings : defaultCameraSettings; if (camera.cameraType == CameraType.Reflection) { useColorTexture = bufferSettings.copyColorReflection; useDepthTexture = bufferSettings.copyDepthReflection; } else { useColorTexture = bufferSettings.copyColor && cameraSettings.copyColor; useDepthTexture = bufferSettings.copyDepth && cameraSettings.copyDepth; } if (cameraSettings.overridePostFX) { postFXSettings = cameraSettings.postFXSettings; } float renderScale = cameraSettings.GetRenderScale(bufferSettings.renderScale); useScaledRendering = renderScale <0.99f || renderScale> 1.01f; PrepareBuffer(); PrepareForSceneWindow(); if (!Cull(shadowSettings.maxDistance)) { return; } useHDR = bufferSettings.allowHDR && camera.allowHDR; if (useScaledRendering) { renderScale = Mathf.Clamp(renderScale, renderScaleMin, renderScaleMax); bufferSize.x = (int)(camera.pixelWidth * renderScale); bufferSize.y = (int)(camera.pixelHeight * renderScale); } else { bufferSize.x = camera.pixelWidth; bufferSize.y = camera.pixelHeight; } buffer.BeginSample(SampleName); buffer.SetGlobalVector(bufferSizeId, new Vector4( 1f / bufferSize.x, 1f / bufferSize.y, bufferSize.x, bufferSize.y )); ExecuteBuffer(); lighting.Setup( context, cullingResults, shadowSettings, useLightsPerObject, cameraSettings.maskLights ? cameraSettings.renderingLayerMask : -1 ); bufferSettings.fxaa.enabled &= cameraSettings.allowFXAA; postFXStack.Setup( context, camera, bufferSize, postFXSettings, cameraSettings.keepAlpha, useHDR, colorLUTResolution, cameraSettings.finalBlendMode, bufferSettings.bicubicRescaling, bufferSettings.fxaa ); buffer.EndSample(SampleName); Setup(); DrawVisibleGeometry( useDynamicBatching, useGPUInstancing, useLightsPerObject, cameraSettings.renderingLayerMask ); DrawUnsupportedShaders(); DrawGizmosBeforeFX(); if (postFXStack.IsActive) { postFXStack.Render(colorAttachmentId); } else if (useIntermediateBuffer) { DrawFinal(cameraSettings.finalBlendMode); ExecuteBuffer(); } DrawGizmosAfterFX(); Cleanup(); Submit(); }
public void Render(ScriptableRenderContext IN_context, Camera IN_camera, CameraBufferSettings cameraBufferSettings, bool useDynameicBatching, bool useGPUInstancing, bool useLightPerObject, ShadowSettings shadowSetting, PostFXSettings postFXSettings, int colorLUTResolution) { this.context = IN_context; this.camera = IN_camera; //setup custom camera settings //for per camera blend, PostFX settings var crpCamera = camera.GetComponent<CustomRenderPipelineCamera>(); CameraSettings cameraSettings = crpCamera ? crpCamera.Settings : defaultCameraSettings; //use depthtexture so shader can access the current buffer depth if (camera.cameraType == CameraType.Reflection) { useDepthTexture = cameraBufferSettings.copyDepthReflection; useColorTexture = cameraBufferSettings.copyColorReflection; } else { useDepthTexture = cameraBufferSettings.copyDepth && cameraSettings.copyDepth; useColorTexture = cameraBufferSettings.copyColor && cameraSettings.copyColor; } if (cameraSettings.overridePostFX) { //override PostFX option for each cam postFXSettings = cameraSettings.postFXSettings; } //set render scale, scale should atleast move a bit to take effect float renderScale = cameraSettings.GetRenderScale(cameraBufferSettings.renderScale); useScaledRendering = renderScale < 0.99f || renderScale > 1.01f; //change buffer name to the camera name PrepareBuffer(); //add UI (WorldGeometry) to the scene camera, so we can see UI in editor view PrepareForSceneView(); if (!Cull(shadowSetting.maxDistance)) { return; } this.useHDR = cameraBufferSettings.allowHDR && camera.allowHDR; //calculate and store buffersize if (useScaledRendering) { renderScale = Mathf.Clamp(renderScale, renderScaleMin, renderScaleMax); bufferSize.x = (int)(camera.pixelWidth * renderScale); bufferSize.y = (int)(camera.pixelHeight * renderScale); } else { bufferSize.x = camera.pixelWidth; bufferSize.y = camera.pixelHeight; } buffer.BeginSample(SampleName);//Include lights and shadow rendering in main cam profile //pass the buffer size to GPU so the when sample color and depthe texture, //we can refer to correct buffer size buffer.SetGlobalVector(bufferSizeId, new Vector4( (float)1/bufferSize.x, (float)1 /bufferSize.y, bufferSize.x, bufferSize.y )); ExecuteBuffer(); //get transfer DirLight data to GPU //Setup shadow RT and shadow rendering lighting.Setup(context, cullingResults, shadowSetting, useLightPerObject, cameraSettings.maskLights ? cameraSettings.RenderingLayerMask : -1); //FXAA is enable per camera cameraBufferSettings.fxaa.enabled = cameraSettings.allowFXAA; //setup postFX postFXStack.Setup(context, camera, bufferSize, postFXSettings, cameraSettings.keepAlpha, useHDR, colorLUTResolution, cameraSettings.finalBlendMode, cameraBufferSettings.bicubicResampling, cameraBufferSettings.fxaa); buffer.EndSample(SampleName); //Setup rendertarget for normal oject rendering Setup(); DrawVisibleGeometry(useDynameicBatching, useGPUInstancing, useLightPerObject, cameraSettings.RenderingLayerMask); //this makes the Legacy shader draw upon the tranparent object //makes it wired, but they are not supported who cares~ DrawUnsupportedShaders(); DrawGizmosBeforeFX(); if (postFXStack.IsActive) { postFXStack.Render(colorAttachmentId); } else if (useIntermediateBuffer) { // we need to copy the image from intermediate to final //otherwise nothing goes to camera target, Since PFX is not active //Draw(colorAttachmentId, BuiltinRenderTextureType.CameraTarget); DrawFinal(cameraSettings.finalBlendMode); ExecuteBuffer(); } DrawGizmosAfterFX(); Cleanup(); //all action will be buffered and render action only begin after submit! Submit(); }
public void Render(ScriptableRenderContext contex, Camera camera, CameraBufferSettings bufferSettings, bool useDynamicBatching, bool useGPUInstancing, bool useLightsPerObject, ShadowSettings shadowSettings, PostFXSettings postFXSettings, int colorLUTResolution) { this.context = contex; this.camera = camera; //var crpCamera = camera.GetComponent<CustomRenderPipelineCamera>(); crpCamera != null ? crpCamera.Settings : CameraSettings cameraSettings = defaultCameraSettings; //useDepthTexture = true; if (camera.cameraType == CameraType.Reflection) { useColorTexture = bufferSettings.copyColorReflection; useDepthTexture = bufferSettings.copyDepthRelections; } else { useColorTexture = bufferSettings.copyColor && cameraSettings.copyColor; //两个条件成立 useDepthTexture = bufferSettings.copyDepth && cameraSettings.copyDepth; } //判断是否覆盖摄像机设置 if (cameraSettings.overridePostFX) { postFXSettings = cameraSettings.postFXSettings; } //每个摄像机有自己的Buffer PrepareBuffer(); //UI PrepareForSceneWindow(); //阴影Cull if (!Cull(shadowSettings.maxDistance)) { return; } useHDR = bufferSettings.allowHDR && camera.allowHDR; buffer.BeginSample(SampleName); ExcuteBuffer(); //灯光配置 添加阴影参数 lighting.Setup(contex, cullingResults, shadowSettings, useLightsPerObject, cameraSettings.maskLights ? cameraSettings.renderingLayerMask :-1); //后期配置 postFXStack.Setup(context, camera, postFXSettings, useHDR, colorLUTResolution, cameraSettings.finalBlendMode); buffer.EndSample(SampleName); //常规渲染 Setup(); DrawVisibleGeometry(useDynamicBatching, useGPUInstancing, useLightsPerObject, cameraSettings.renderingLayerMask); //Un support shader DrawUnsupportedShaders(); //Gizmos 线 DrawGizmosBeforeFX(); if (postFXStack.IsActive) { postFXStack.Render(colorAttachmentId); } else if (useIntermediateBuffer) { if (camera.targetTexture) { //Test UV buffer.CopyTexture(colorAttachmentId, camera.targetTexture); } else { //画到摄像机 Draw(colorAttachmentId, BuiltinRenderTextureType.CameraTarget); } ExcuteBuffer(); } DrawGizmosAfterFX(); //释放纹理资源 Cleanup(); //lighting.Cleanup(); Submit(); }
public CustomPipeline(PostFXSettings postFXSettings) { this.postFXSettings = postFXSettings; }