<h4 class="wp-block-heading">ã¹ã¯ãªãã¿ãã«ã¬ã³ãã¼ãã¤ãã©ã¤ã³ã®æ¦è¦</h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p></p><cite>https://blogs.unity3d.com/jp/2018/01/31/srp-overview/</cite></blockquote>



<h3 class="wp-block-heading">ãã¡ãã®ããã°ã«ã¤ã㦠Unity 2019.1 以éã§ CullingResults, DrawRendererSettings ã®åæãªã©ã§ã¨ã©ã¼ãçºçãã¦åä½ããªããªãã¾ããã</h3>



<p>ããã¯ãã®ã¯ã©ã¹ã<strong>Experimental</strong>ã«æå®ããã¦ãUnity 2019.1 以éã®ãã¼ã¸ã§ã³ã§ã¯å©ç¨ã§ããªããªãã¾ãããæ¬¡ã®ããã«æ¸ãæããã¨åä½ãã¾ããã</p>



<p>BasicAssetPipe.cs</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using UnityEngine.Rendering;
// using UnityEngine.Experimental.Rendering;


[ExecuteInEditMode]
public class BasicAssetPipe : RenderPipelineAsset
{
 public Color clearColor = Color.green;

#if UNITY_EDITOR
 [UnityEditor.MenuItem("SRP-Demo/01 - Create Basic Asset Pipeline")]
 static void CreateBasicAssetPipeline()
 {
 var instance = ScriptableObject.CreateInstance<;BasicAssetPipe>();
 UnityEditor.AssetDatabase.CreateAsset(instance, "Assets/SRP-Demo/1-BasicAssetPipe/BasicAssetPipe.asset");
 }

#endif

 protected override RenderPipeline CreatePipeline()
 {
 return new BasicPipeInstance(clearColor);
 }
}

public class BasicPipeInstance : RenderPipeline
{
 private Color m_ClearColor = Color.black;

 public BasicPipeInstance(Color clearColor)
 {
 m_ClearColor = clearColor;
 }

 protected override void Render(ScriptableRenderContext context, Camera[] cameras)
 {
 // does not so much yet :()
 // base.Render(context, cameras);

 // clear buffers to the configured color
 var cmd = new CommandBuffer();
 cmd.ClearRenderTarget(true, true, m_ClearColor);
 context.ExecuteCommandBuffer(cmd);
 cmd.Release();
 context.Submit();
 }
}
</pre>



<p>OpaqueAssetPipe.cs</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using System;
using UnityEngine;
using UnityEngine.Rendering;
// using UnityEngine.Experimental.Rendering;

[ExecuteInEditMode]
public class OpaqueAssetPipe : RenderPipelineAsset
{
#if UNITY_EDITOR
 [UnityEditor.MenuItem("SRP-Demo/02 - Create Opaque Asset Pipeline")]
 static void CreateBasicAssetPipeline()
 {
 var instance = ScriptableObject.CreateInstance<;OpaqueAssetPipe>();
 UnityEditor.AssetDatabase.CreateAsset(instance, "Assets/SRP-Demo/2-OpaqueAssetPipe/OpaqueAssetPipe.asset");
 }
#endif

 protected override RenderPipeline CreatePipeline()
 {
 return new OpaqueAssetPipeInstance();
 }
}

public class OpaqueAssetPipeInstance : RenderPipeline
{
 protected override void Render(ScriptableRenderContext context, Camera[] cameras)
 {
 // base.Render(context, cameras);

 foreach (var camera in cameras)
 {
 // Culling
 ScriptableCullingParameters cullingParams;

 if (!(camera.TryGetCullingParameters(out cullingParams)))
 continue;

 var cull = context.Cull(ref cullingParams);

 // Setup camera for rendering (sets render target, view/projection matrices and other
 // per-camera built-in shader variables).
 context.SetupCameraProperties(camera);

 // clear depth buffer
 var cmd = new CommandBuffer();
 cmd.ClearRenderTarget(true, false, Color.black);
 context.ExecuteCommandBuffer(cmd);
 cmd.Release();

 // Draw opaque objects using BasicPass shader pass
 var settings = new DrawingSettings(new ShaderTagId("BasicPass"), new SortingSettings(camera));
 settings.sortingSettings = new SortingSettings() { criteria = SortingCriteria.CommonOpaque };
 var filterSettings = new FilteringSettings(renderQueueRange: RenderQueueRange.opaque);
 context.DrawRenderers(cull, ref settings ,ref filterSettings);

 // Draw skybox
 context.DrawSkybox(camera);

 context.Submit();
 }
 }
}
</pre>



<p>TransparentAssetPipe.cs</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using System;
using UnityEngine;
using UnityEngine.Rendering;
// using UnityEngine.Experimental.Rendering;

[ExecuteInEditMode]
public class TransparentAssetPipe : RenderPipelineAsset
{
#if UNITY_EDITOR
 [UnityEditor.MenuItem("SRP-Demo/03 - Create Transparent Asset Pipeline")]
 static void CreateBasicAssetPipeline()
 {
 var instance = ScriptableObject.CreateInstance<;TransparentAssetPipe>();
 UnityEditor.AssetDatabase.CreateAsset(instance, "Assets/SRP-Demo/3-TransparentAssetPipe/TransparentAssetPipe.asset");
 }
#endif

 protected override RenderPipeline CreatePipeline()
 {
 return new TransparentAssetPipeInstance();
 }
}

public class TransparentAssetPipeInstance : RenderPipeline
{
 protected override void Render(ScriptableRenderContext context, Camera[] cameras)
 {
 // base.Render(context, cameras);

 foreach (var camera in cameras)
 {
 // Culling
 ScriptableCullingParameters cullingParams;

 if (!(camera.TryGetCullingParameters(out cullingParams)))
 continue;

 var cull = context.Cull(ref cullingParams);

 // Setup camera for rendering (sets render target, view/projection matrices and other
 // per-camera built-in shader variables).
 context.SetupCameraProperties(camera);

 // clear depth buffer
 var cmd = new CommandBuffer();
 cmd.ClearRenderTarget(true, false, Color.black);
 context.ExecuteCommandBuffer(cmd);
 cmd.Release();

 // Draw opaque objects using BasicPass shader pass
 var settings = new DrawingSettings(new ShaderTagId("BasicPass"), new SortingSettings(camera));
 settings.sortingSettings = new SortingSettings() { criteria = SortingCriteria.CommonOpaque };
 var filterSettings = new FilteringSettings(renderQueueRange: RenderQueueRange.opaque);
 context.DrawRenderers(cull, ref settings, ref filterSettings);


 // Draw skybox
 context.DrawSkybox(camera);

 settings.sortingSettings = new SortingSettings() { criteria = SortingCriteria.CommonTransparent };
 filterSettings = new FilteringSettings(renderQueueRange: RenderQueueRange.transparent);
 context.DrawRenderers(cull, ref settings, ref filterSettings);

 context.Submit();
 }
 }
}
</pre>



<p>ãã¡ãã®ãµã¤ããåèã«ãªãã¾ããã</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>LWRP 4-preview ã2019.1ã§åããããã«æ¹é ãã話</p><cite>https://connect.unity.com/p/lwrp-4-preview-wo2019-1dedong-kasuyounigai-zao-shitahua</cite></blockquote>



<p>Unity Scriptable Render Pipeline(SRP)ã¯ããã±ã¼ã¸ããã¼ã¸ã£ã¼ããUniversal Render Pipeline(URP, 2019ããåã¯Lightweight <em>Render Pipeline</em>(LWRP))ãHD ã¬ã³ãã¼ãã¤ãã©ã¤ã³ï¼<em>HDRP</em>)ããã§ãã¯ããªãã¦ãå©ç¨ã§ãã¾ãã</p>



<p></p>

- 5年 ago
kawano
Unity Scriptable Render Pipeline
Related Post
-
Daz3D Clothes
Daz3DでBlenderで作…
-
Unity Input System
Unity InputSyst…