X

Unity Scriptable Render Pipeline

&NewLine;<h4 class&equals;"wp-block-heading">スクリプタブルレンダーパイプラインの概要<&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<blockquote class&equals;"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><&sol;p><cite>https&colon;&sol;&sol;blogs&period;unity3d&period;com&sol;jp&sol;2018&sol;01&sol;31&sol;srp-overview&sol;<&sol;cite><&sol;blockquote>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">こちらのブログについて Unity 2019&period;1 以降で CullingResults&comma; DrawRendererSettings の個所などでエラーが発生して動作しなくなりました。<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p>これはこのクラスが<strong>Experimental<&sol;strong>に指定されて、Unity 2019&period;1 以降のバージョンでは利用できなくなりました。次のように書き換えると動作しました。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p>BasicAssetPipe&period;cs<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">using UnityEngine&semi;&NewLine;using UnityEngine&period;Rendering&semi;&NewLine;&sol;&sol; using UnityEngine&period;Experimental&period;Rendering&semi;&NewLine;&NewLine;&NewLine;&lbrack;ExecuteInEditMode&rsqb;&NewLine;public class BasicAssetPipe &colon; RenderPipelineAsset&NewLine;&lbrace;&NewLine; public Color clearColor &equals; Color&period;green&semi;&NewLine;&NewLine;&num;if UNITY&lowbar;EDITOR&NewLine; &lbrack;UnityEditor&period;MenuItem&lpar;"SRP-Demo&sol;01 - Create Basic Asset Pipeline"&rpar;&rsqb;&NewLine; static void CreateBasicAssetPipeline&lpar;&rpar;&NewLine; &lbrace;&NewLine; var instance &equals; ScriptableObject&period;CreateInstance&lt&semi;BasicAssetPipe>&lpar;&rpar;&semi;&NewLine; UnityEditor&period;AssetDatabase&period;CreateAsset&lpar;instance&comma; "Assets&sol;SRP-Demo&sol;1-BasicAssetPipe&sol;BasicAssetPipe&period;asset"&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine;&num;endif&NewLine;&NewLine; protected override RenderPipeline CreatePipeline&lpar;&rpar;&NewLine; &lbrace;&NewLine; return new BasicPipeInstance&lpar;clearColor&rpar;&semi;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;public class BasicPipeInstance &colon; RenderPipeline&NewLine;&lbrace;&NewLine; private Color m&lowbar;ClearColor &equals; Color&period;black&semi;&NewLine;&NewLine; public BasicPipeInstance&lpar;Color clearColor&rpar;&NewLine; &lbrace;&NewLine; m&lowbar;ClearColor &equals; clearColor&semi;&NewLine; &rcub;&NewLine;&NewLine; protected override void Render&lpar;ScriptableRenderContext context&comma; Camera&lbrack;&rsqb; cameras&rpar;&NewLine; &lbrace;&NewLine; &sol;&sol; does not so much yet &colon;&lpar;&rpar;&NewLine; &sol;&sol; base&period;Render&lpar;context&comma; cameras&rpar;&semi;&NewLine;&NewLine; &sol;&sol; clear buffers to the configured color&NewLine; var cmd &equals; new CommandBuffer&lpar;&rpar;&semi;&NewLine; cmd&period;ClearRenderTarget&lpar;true&comma; true&comma; m&lowbar;ClearColor&rpar;&semi;&NewLine; context&period;ExecuteCommandBuffer&lpar;cmd&rpar;&semi;&NewLine; cmd&period;Release&lpar;&rpar;&semi;&NewLine; context&period;Submit&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine;&rcub;&NewLine;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p>OpaqueAssetPipe&period;cs<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">using System&semi;&NewLine;using UnityEngine&semi;&NewLine;using UnityEngine&period;Rendering&semi;&NewLine;&sol;&sol; using UnityEngine&period;Experimental&period;Rendering&semi;&NewLine;&NewLine;&lbrack;ExecuteInEditMode&rsqb;&NewLine;public class OpaqueAssetPipe &colon; RenderPipelineAsset&NewLine;&lbrace;&NewLine;&num;if UNITY&lowbar;EDITOR&NewLine; &lbrack;UnityEditor&period;MenuItem&lpar;"SRP-Demo&sol;02 - Create Opaque Asset Pipeline"&rpar;&rsqb;&NewLine; static void CreateBasicAssetPipeline&lpar;&rpar;&NewLine; &lbrace;&NewLine; var instance &equals; ScriptableObject&period;CreateInstance&lt&semi;OpaqueAssetPipe>&lpar;&rpar;&semi;&NewLine; UnityEditor&period;AssetDatabase&period;CreateAsset&lpar;instance&comma; "Assets&sol;SRP-Demo&sol;2-OpaqueAssetPipe&sol;OpaqueAssetPipe&period;asset"&rpar;&semi;&NewLine; &rcub;&NewLine;&num;endif&NewLine;&NewLine; protected override RenderPipeline CreatePipeline&lpar;&rpar;&NewLine; &lbrace;&NewLine; return new OpaqueAssetPipeInstance&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;public class OpaqueAssetPipeInstance &colon; RenderPipeline&NewLine;&lbrace;&NewLine; protected override void Render&lpar;ScriptableRenderContext context&comma; Camera&lbrack;&rsqb; cameras&rpar;&NewLine; &lbrace;&NewLine; &sol;&sol; base&period;Render&lpar;context&comma; cameras&rpar;&semi;&NewLine;&NewLine; foreach &lpar;var camera in cameras&rpar;&NewLine; &lbrace;&NewLine; &sol;&sol; Culling&NewLine; ScriptableCullingParameters cullingParams&semi;&NewLine;&NewLine; if &lpar;&excl;&lpar;camera&period;TryGetCullingParameters&lpar;out cullingParams&rpar;&rpar;&rpar;&NewLine; continue&semi;&NewLine;&NewLine; var cull &equals; context&period;Cull&lpar;ref cullingParams&rpar;&semi;&NewLine;&NewLine; &sol;&sol; Setup camera for rendering &lpar;sets render target&comma; view&sol;projection matrices and other&NewLine; &sol;&sol; per-camera built-in shader variables&rpar;&period;&NewLine; context&period;SetupCameraProperties&lpar;camera&rpar;&semi;&NewLine;&NewLine; &sol;&sol; clear depth buffer&NewLine; var cmd &equals; new CommandBuffer&lpar;&rpar;&semi;&NewLine; cmd&period;ClearRenderTarget&lpar;true&comma; false&comma; Color&period;black&rpar;&semi;&NewLine; context&period;ExecuteCommandBuffer&lpar;cmd&rpar;&semi;&NewLine; cmd&period;Release&lpar;&rpar;&semi;&NewLine;&NewLine; &sol;&sol; Draw opaque objects using BasicPass shader pass&NewLine; var settings &equals; new DrawingSettings&lpar;new ShaderTagId&lpar;"BasicPass"&rpar;&comma; new SortingSettings&lpar;camera&rpar;&rpar;&semi;&NewLine; settings&period;sortingSettings &equals; new SortingSettings&lpar;&rpar; &lbrace; criteria &equals; SortingCriteria&period;CommonOpaque &rcub;&semi;&NewLine; var filterSettings &equals; new FilteringSettings&lpar;renderQueueRange&colon; RenderQueueRange&period;opaque&rpar;&semi;&NewLine; context&period;DrawRenderers&lpar;cull&comma; ref settings &comma;ref filterSettings&rpar;&semi;&NewLine;&NewLine; &sol;&sol; Draw skybox&NewLine; context&period;DrawSkybox&lpar;camera&rpar;&semi;&NewLine;&NewLine; context&period;Submit&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&rcub;&NewLine;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p>TransparentAssetPipe&period;cs<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"EnlighterJSRAW" data-enlighter-language&equals;"generic" data-enlighter-theme&equals;"" data-enlighter-highlight&equals;"" data-enlighter-linenumbers&equals;"" data-enlighter-lineoffset&equals;"" data-enlighter-title&equals;"" data-enlighter-group&equals;"">using System&semi;&NewLine;using UnityEngine&semi;&NewLine;using UnityEngine&period;Rendering&semi;&NewLine;&sol;&sol; using UnityEngine&period;Experimental&period;Rendering&semi;&NewLine;&NewLine;&lbrack;ExecuteInEditMode&rsqb;&NewLine;public class TransparentAssetPipe &colon; RenderPipelineAsset&NewLine;&lbrace;&NewLine;&num;if UNITY&lowbar;EDITOR&NewLine; &lbrack;UnityEditor&period;MenuItem&lpar;"SRP-Demo&sol;03 - Create Transparent Asset Pipeline"&rpar;&rsqb;&NewLine; static void CreateBasicAssetPipeline&lpar;&rpar;&NewLine; &lbrace;&NewLine; var instance &equals; ScriptableObject&period;CreateInstance&lt&semi;TransparentAssetPipe>&lpar;&rpar;&semi;&NewLine; UnityEditor&period;AssetDatabase&period;CreateAsset&lpar;instance&comma; "Assets&sol;SRP-Demo&sol;3-TransparentAssetPipe&sol;TransparentAssetPipe&period;asset"&rpar;&semi;&NewLine; &rcub;&NewLine;&num;endif&NewLine;&NewLine; protected override RenderPipeline CreatePipeline&lpar;&rpar;&NewLine; &lbrace;&NewLine; return new TransparentAssetPipeInstance&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;public class TransparentAssetPipeInstance &colon; RenderPipeline&NewLine;&lbrace;&NewLine; protected override void Render&lpar;ScriptableRenderContext context&comma; Camera&lbrack;&rsqb; cameras&rpar;&NewLine; &lbrace;&NewLine; &sol;&sol; base&period;Render&lpar;context&comma; cameras&rpar;&semi;&NewLine;&NewLine; foreach &lpar;var camera in cameras&rpar;&NewLine; &lbrace;&NewLine; &sol;&sol; Culling&NewLine; ScriptableCullingParameters cullingParams&semi;&NewLine;&NewLine; if &lpar;&excl;&lpar;camera&period;TryGetCullingParameters&lpar;out cullingParams&rpar;&rpar;&rpar;&NewLine; continue&semi;&NewLine;&NewLine; var cull &equals; context&period;Cull&lpar;ref cullingParams&rpar;&semi;&NewLine;&NewLine; &sol;&sol; Setup camera for rendering &lpar;sets render target&comma; view&sol;projection matrices and other&NewLine; &sol;&sol; per-camera built-in shader variables&rpar;&period;&NewLine; context&period;SetupCameraProperties&lpar;camera&rpar;&semi;&NewLine;&NewLine; &sol;&sol; clear depth buffer&NewLine; var cmd &equals; new CommandBuffer&lpar;&rpar;&semi;&NewLine; cmd&period;ClearRenderTarget&lpar;true&comma; false&comma; Color&period;black&rpar;&semi;&NewLine; context&period;ExecuteCommandBuffer&lpar;cmd&rpar;&semi;&NewLine; cmd&period;Release&lpar;&rpar;&semi;&NewLine;&NewLine; &sol;&sol; Draw opaque objects using BasicPass shader pass&NewLine; var settings &equals; new DrawingSettings&lpar;new ShaderTagId&lpar;"BasicPass"&rpar;&comma; new SortingSettings&lpar;camera&rpar;&rpar;&semi;&NewLine; settings&period;sortingSettings &equals; new SortingSettings&lpar;&rpar; &lbrace; criteria &equals; SortingCriteria&period;CommonOpaque &rcub;&semi;&NewLine; var filterSettings &equals; new FilteringSettings&lpar;renderQueueRange&colon; RenderQueueRange&period;opaque&rpar;&semi;&NewLine; context&period;DrawRenderers&lpar;cull&comma; ref settings&comma; ref filterSettings&rpar;&semi;&NewLine;&NewLine;&NewLine; &sol;&sol; Draw skybox&NewLine; context&period;DrawSkybox&lpar;camera&rpar;&semi;&NewLine;&NewLine; settings&period;sortingSettings &equals; new SortingSettings&lpar;&rpar; &lbrace; criteria &equals; SortingCriteria&period;CommonTransparent &rcub;&semi;&NewLine; filterSettings &equals; new FilteringSettings&lpar;renderQueueRange&colon; RenderQueueRange&period;transparent&rpar;&semi;&NewLine; context&period;DrawRenderers&lpar;cull&comma; ref settings&comma; ref filterSettings&rpar;&semi;&NewLine;&NewLine; context&period;Submit&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&rcub;&NewLine;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p>こちらのサイトが参考になりました。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<blockquote class&equals;"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>LWRP 4-preview を2019&period;1で動かすように改造した話<&sol;p><cite>https&colon;&sol;&sol;connect&period;unity&period;com&sol;p&sol;lwrp-4-preview-wo2019-1dedong-kasuyounigai-zao-shitahua<&sol;cite><&sol;blockquote>&NewLine;&NewLine;&NewLine;&NewLine;<p>Unity Scriptable Render Pipeline&lpar;SRP&rpar;はパッケージマネージャーからUniversal Render Pipeline&lpar;URP&comma; 2019より前はLightweight <em>Render Pipeline<&sol;em>&lpar;LWRP&rpar;&rpar;、HD レンダーパイプライン(<em>HDRP<&sol;em>&rpar;をチェックしなくても利用できます。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p><&sol;p>&NewLine;

kawano:
Related Post