111
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
public class FogRenderPassFeature : ScriptableRendererFeature
|
||||
{
|
||||
public enum OutPutType { screen, rTexture, both }
|
||||
|
||||
[System.Serializable]
|
||||
public class Setting
|
||||
{
|
||||
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
|
||||
public Material materal;
|
||||
public OutPutType outPutType = OutPutType.screen;
|
||||
public RenderTexture outPutRt = null;
|
||||
}
|
||||
|
||||
public Setting setting = new Setting();
|
||||
|
||||
class FogRenderPass : ScriptableRenderPass
|
||||
{
|
||||
private Material material;
|
||||
private OutPutType outPutType;
|
||||
private RenderTexture outPutRt;
|
||||
private ProfilingSampler profilingSampler;
|
||||
private int tempTextureId = Shader.PropertyToID("_FogTempTexture");
|
||||
|
||||
public FogRenderPass(FogRenderPassFeature.Setting setting)
|
||||
{
|
||||
renderPassEvent = setting.renderPassEvent;
|
||||
material = setting.materal;
|
||||
outPutType = setting.outPutType;
|
||||
outPutRt = setting.outPutRt;
|
||||
profilingSampler = new ProfilingSampler("FogRenderPassFeature");
|
||||
}
|
||||
|
||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||
{
|
||||
if (renderingData.cameraData.isSceneViewCamera) return;
|
||||
if (material == null) return;
|
||||
|
||||
CommandBuffer cmd = CommandBufferPool.Get();
|
||||
using (new ProfilingScope(cmd, profilingSampler))
|
||||
{
|
||||
// 不渲染UI Layer
|
||||
renderingData.cameraData.camera.cullingMask &= ~(1 << LayerMask.NameToLayer("UI"));
|
||||
|
||||
// 创建临时渲染纹理描述符
|
||||
RenderTextureDescriptor descriptor = renderingData.cameraData.cameraTargetDescriptor;
|
||||
descriptor.depthBufferBits = 0;
|
||||
cmd.GetTemporaryRT(tempTextureId, descriptor);
|
||||
|
||||
// 应用材质
|
||||
cmd.Blit(null, tempTextureId, material);
|
||||
|
||||
switch (outPutType)
|
||||
{
|
||||
case OutPutType.screen:
|
||||
cmd.Blit(tempTextureId, BuiltinRenderTextureType.CameraTarget);
|
||||
break;
|
||||
case OutPutType.rTexture:
|
||||
if (outPutRt != null)
|
||||
cmd.Blit(tempTextureId, outPutRt);
|
||||
break;
|
||||
case OutPutType.both:
|
||||
cmd.Blit(tempTextureId, BuiltinRenderTextureType.CameraTarget);
|
||||
if (outPutRt != null)
|
||||
cmd.Blit(tempTextureId, outPutRt);
|
||||
break;
|
||||
}
|
||||
|
||||
// 释放临时纹理
|
||||
cmd.ReleaseTemporaryRT(tempTextureId);
|
||||
}
|
||||
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
CommandBufferPool.Release(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
FogRenderPass fogRenderPass;
|
||||
|
||||
public override void Create()
|
||||
{
|
||||
fogRenderPass = new FogRenderPass(setting);
|
||||
}
|
||||
|
||||
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
|
||||
{
|
||||
renderer.EnqueuePass(fogRenderPass);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7e84469216074c2478851544685b2e7e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user