This commit is contained in:
2025-11-14 18:44:06 +08:00
parent 10156da245
commit 22e867d077
7013 changed files with 2572882 additions and 1804 deletions

View File

@@ -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);
}
}