{"id":468,"date":"2019-10-23T16:51:06","date_gmt":"2019-10-23T08:51:06","guid":{"rendered":"http:\/\/blog.coolcoding.cn\/?p=468"},"modified":"2019-11-02T21:53:47","modified_gmt":"2019-11-02T13:53:47","slug":"%e8%87%aa%e5%ae%9a%e4%b9%89%e6%b8%b2%e6%9f%93%e7%ae%a1%e7%ba%bf%ef%bc%8c%e8%b0%83%e6%95%b4unity%e7%bc%96%e8%be%91%e5%99%a8%e9%80%8f%e6%98%8e%e5%92%8c%e4%b8%8d%e9%80%8f%e6%98%8e%e7%9a%84%e6%98%be","status":"publish","type":"post","link":"https:\/\/blog.coolcoding.cn\/?p=468","title":{"rendered":"[Unity]\u4f7f\u7528SRP\u8c03\u6574\u7f16\u8f91\u5668\u900f\u660e\u548c\u4e0d\u900f\u660e\u7684\u663e\u793a\u6b21\u5e8f"},"content":{"rendered":"\n<p>\u9879\u76ee\u4e2d\uff0c\u5730\u8868\u7247\u662f\u534a\u900f\u660e\u7684\uff0c\u9700\u8981\u4f18\u5148\u6e32\u67d3\uff1b\u4e0d\u900f\u660e\u7684\u7269\u4ef6\uff0c\u662f\u4e0d\u900f\u660e\u7684\uff0c\u9700\u8981\u540e\u6e32\u67d3\uff1b \u5728Scene\u89c6\u56fe\u4e2d\uff0c\u65e0\u6cd5\u88ab\u6b63\u786e\u663e\u793a\uff0c\u901a\u8fc7\u4ee5\u4e0b\u4ee3\u7801\uff0c\u663e\u793a\u5728Scene\u89c6\u56fe\u4e2d\u7f16\u8f91\u7684\u6b63\u5e38\u663e\u793a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using UnityEngine;\nusing UnityEngine.Rendering;\nusing UnityEngine.Experimental.Rendering;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityEngine.Rendering;\nusing UnityEngine.Experimental.Rendering;\nusing UnityEditor;\n\npublic class ArtPreviewBasicPipeInstance : RenderPipeline\n{\n    public ArtPreviewBasicPipeInstance(Color clearColor)\n    {\n    }\n\n    private CommandBuffer _cb;\n\n    public override void Render(ScriptableRenderContext context, Camera[] cameras)\n    {\n        base.Render(context, cameras);\n\n        if (_cb == null)\n        {\n            _cb = new CommandBuffer();\n        }\n\n        var _LightDir = Shader.PropertyToID(\"_LightDir\");\n        var _LightColor = Shader.PropertyToID(\"_LightColor\");\n\n        foreach(var camera in cameras)\n        {\n            ScriptableCullingParameters cullingParams;\n            if (!CullResults.GetCullingParameters(camera, out cullingParams))\n                continue;\n\n            CullResults cull = CullResults.Cull(ref cullingParams, context);\n            context.SetupCameraProperties(camera);\n\n            var cmd = new CommandBuffer();\n            cmd.ClearRenderTarget(true, false, Color.black);\n            context.ExecuteCommandBuffer(cmd);\n            cmd.Release();\n\n            context.DrawSkybox(camera);\n            \n            var settings = new DrawRendererSettings(camera, new ShaderPassName(\"ForwardBase\"));\n            settings.sorting.flags = SortFlags.CommonTransparent;\n\n            var lights = cull.visibleLights;\n            foreach(var light in lights)\n            {\n                if (light.lightType != LightType.Directional) continue;\n                Vector4 pos = light.localToWorld.GetColumn(0);\n                Vector4 lightDir = new Vector4(pos.x,pos.y,pos.z,0);\n                Color lightColor = light.finalColor;\n                _cb.SetGlobalVector(_LightDir,lightDir);\n                _cb.SetGlobalColor(_LightColor,lightColor);\n                context.ExecuteCommandBuffer(_cb);\n                _cb.Clear();              \n            }\n\n            \/\/ \u5148\u6e32\u67d3\u900f\u660e\u7247\n            var filterSettings = new FilterRenderersSettings(true) { renderQueueRange = RenderQueueRange.transparent };\n            context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings);\n\n            \/\/ \u518d\u6e32\u67d3\u4e0d\u900f\u660e\u7247\n            settings.sorting.flags = SortFlags.CommonOpaque;\n            filterSettings.renderQueueRange = RenderQueueRange.opaque;\n            context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings);\n\n            context.Submit();\n        }\n    }\n}\n\n[ExecuteInEditMode]\n\/\/\u5b9a\u4e49\u6e32\u67d3\u7ba1\u7ebfAsset\npublic class ArtPreviewScenePipeline : RenderPipelineAsset\n{\n    public Color clearColor = Color.blue;\n\n    protected override IRenderPipeline InternalCreatePipeline()\n    {\n        return new ArtPreviewBasicPipeInstance(clearColor);\n    }\n}\n\npublic class ArtPreviewSceneMenu\n{\n    [MenuItem(\"Tool\/\u5730\u8868Prefab\u7f16\u8f91-\u5207\u6362\u81f3\u7f16\u8f91\u6a21\u5f0f\", false, 800)]\n    public static void UserSRP()\n    {\n        var obj = AssetDatabase.LoadAssetAtPath&lt;ArtPreviewScenePipeline>(\"Assets\/SceneRes\/ArtPreviewScene.asset\");\n        if (obj != null)\n        {\n            GraphicsSettings.renderPipelineAsset = obj;\n        }\n    }\n\n    \n    [MenuItem(\"Tool\/\u5730\u8868Prefab\u7f16\u8f91-\u5207\u6362\u81f3\u6e38\u620f\u6a21\u5f0f\", false, 800)]\n    public static void NoUserSRP()\n    {\n        GraphicsSettings.renderPipelineAsset = null;\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u9879\u76ee\u4e2d\uff0c\u5730\u8868\u7247\u662f\u534a\u900f\u660e\u7684\uff0c\u9700\u8981\u4f18\u5148\u6e32\u67d3\uff1b\u4e0d\u900f\u660e\u7684\u7269\u4ef6\uff0c\u662f\u4e0d\u900f\u660e\u7684\uff0c\u9700\u8981\u540e\u6e32\u67d3\uff1b \u5728Scene\u89c6\u56fe\u4e2d\uff0c\u65e0\u6cd5\u88ab\u6b63\u786e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[18],"_links":{"self":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/468"}],"collection":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=468"}],"version-history":[{"count":4,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/468\/revisions"}],"predecessor-version":[{"id":654,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/468\/revisions\/654"}],"wp:attachment":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}