public static void InitSkinRender(ref SkinRender skr, Camera cam) { skr.RenderCamera = cam; skr.SubsurfaceBuffer = new CommandBuffer(); skr.SubsurfaceBuffer.name = "Separable Subsurface Scatter"; skr.SubsurfaceEffects = new Material(Shader.Find("Hidden/SeparableSubsurfaceScatter")); cam.clearStencilAfterLightingPass = true; }
public static void UpdateSubsurface(ref SkinRender skr, ref SkinData data, List <Vector4> kernelArray) { ///SSS Buffer skr.SubsurfaceBuffer.SetGlobalFloat(ShaderIDs._SSSScale, data.SubsurfaceScaler); skr.SubsurfaceBuffer.SetGlobalVectorArray(ShaderIDs._Kernel, kernelArray); skr.SubsurfaceBuffer.SetGlobalFloat(ShaderIDs._RandomNumber, Random.Range(0f, 1000f)); skr.SubsurfaceBuffer.SetGlobalTexture(ShaderIDs._MainTex, BuiltinRenderTextureType.CameraTarget); skr.SubsurfaceBuffer.SetRenderTarget(ShaderIDs._SceneColor, BuiltinRenderTextureType.CameraTarget); skr.SubsurfaceBuffer.DrawRenderer(data.renderer, skr.SubsurfaceEffects, 0, 0); skr.SubsurfaceBuffer.SetGlobalFloat(ShaderIDs._RandomNumber, Random.Range(0f, 1000f)); skr.SubsurfaceBuffer.SetGlobalTexture(ShaderIDs._MainTex, ShaderIDs._SceneColor); skr.SubsurfaceBuffer.SetRenderTarget(BuiltinRenderTextureType.CameraTarget); skr.SubsurfaceBuffer.DrawRenderer(data.renderer, skr.SubsurfaceEffects, 0, 1); }
public static void DisposeSkinRender(ref SkinRender skr) { skr.RenderCamera.RemoveCommandBuffer(CameraEvent.AfterForwardOpaque, skr.SubsurfaceBuffer); skr.SubsurfaceBuffer.Dispose(); }
public static void ClearBuffer(ref SkinRender skr) { skr.SubsurfaceBuffer.Clear(); skr.SubsurfaceBuffer.GetTemporaryRT(ShaderIDs._SceneColor, skr.RenderCamera.pixelWidth, skr.RenderCamera.pixelHeight, 0, FilterMode.Point, RenderTextureFormat.DefaultHDR); }
private void OnPreCull() { currentSkr = skinRender; SSSFunction.ClearBuffer(ref currentSkr); }