Created
December 25, 2024 10:58
-
-
Save baobao/3aee45c52faaf9ec675c71b1dc49fb66 to your computer and use it in GitHub Desktop.
RenderGraph版URP拡張サンプルコード
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine.Rendering.Universal; | |
public class DownSamplingRenderFeature : ScriptableRendererFeature | |
{ | |
DownSamplingRenderPass _renderPass; | |
public override void Create() | |
{ | |
// パスの作成 | |
_renderPass = new DownSamplingRenderPass | |
{ | |
// 処理のタイミング(透明オブジェクト後に実行) | |
renderPassEvent = RenderPassEvent.AfterRenderingTransparents | |
}; | |
} | |
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) | |
{ | |
// パスの登録 | |
renderer.EnqueuePass(_renderPass); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEngine.Rendering; | |
using UnityEngine.Rendering.RenderGraphModule; | |
using UnityEngine.Rendering.Universal; | |
public class DownSamplingRenderPass : ScriptableRenderPass | |
{ | |
// パスを実行(ダウンサンプリング処理)するために必要なパラメータを渡すためのクラス | |
private class PassData | |
{ | |
public TextureHandle srcTextureHandle; | |
} | |
public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData) | |
{ | |
// 1.現在カメラが映しているテクスチャの取得 | |
var resourceData = frameData.Get<UniversalResourceData>(); | |
var cameraColorTextureHandle = resourceData.activeColorTexture; | |
// 2.カメラデータの取得 | |
UniversalCameraData cameraData = frameData.Get<UniversalCameraData>(); | |
// 3.低解像度の決定 | |
int downSample = 100; | |
int w = cameraData.scaledWidth / downSample; | |
int h = cameraData.scaledHeight / downSample; | |
// 4.像度を下げた一時利用のRenderTextureの作成 | |
var tempRT = UniversalRenderer.CreateRenderGraphTexture( | |
renderGraph, new RenderTextureDescriptor(w, h), "_TempRT", true); | |
// 1. RenderGraphに対してパスを追加 | |
using (var builder = renderGraph.AddRasterRenderPass(passName, out PassData passData)) | |
{ | |
// 2.カメラのテクスチャは読み取り設定 | |
builder.UseTexture(cameraColorTextureHandle, AccessFlags.Read); | |
// 3.一時的なRenderTextureは書き込み設定 | |
builder.SetRenderAttachment(tempRT, 0, AccessFlags.Write); | |
// 4.Pass実行に必要なデータをセット | |
passData.srcTextureHandle = cameraColorTextureHandle; | |
// 5.パス実行の依頼 | |
builder.SetRenderFunc( | |
(PassData data, RasterGraphContext context) => ExecutePass(data, context) | |
); | |
} | |
// 1. RenderGraphに対してパスを追加 | |
using (var builder = renderGraph.AddRasterRenderPass(passName, out PassData passData)) | |
{ | |
// 2.一時的なRenderTextureは読み取り設定 | |
builder.UseTexture(tempRT, AccessFlags.Read); | |
// 3.カメラのテクスチャは書き込み設定 | |
builder.SetRenderAttachment(cameraColorTextureHandle, 0, AccessFlags.Write); | |
// 4.Pass実行に必要なデータをセット | |
passData.srcTextureHandle = tempRT; | |
// 5.パス実行の依頼 | |
builder.SetRenderFunc( | |
(PassData data, RasterGraphContext context) => ExecutePass(data, context) | |
); | |
} | |
} | |
private static void ExecutePass(PassData passData, RasterGraphContext graphContext) | |
{ | |
RasterCommandBuffer cmd = graphContext.cmd; | |
Blitter.BlitTexture(cmd, passData.srcTextureHandle, new Vector4(1, 1, 0, 0), 0, false); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment