1.创建了个人文件夹,复制了部分场景。 2.编写了URP的屏幕后特效框架。 3.制作了一个场景内模拟树叶飘落的粒子,增加一些场景内的动感。 4.制作了几个Shader 1)利用2D的顶点着色器制作了一个边缘扭曲的Shader可以用在飘落树叶上,模拟3D树叶翻飞的感觉。 2)制作了溶解的Shader,建议用在可破坏的障碍上。 3)制作了一个闪光的Shader,可以用在障碍物上突出障碍物,但是Shader还需修改,现在太违和了。 TODO:做了一半昼夜交替的效果,这也是忘了哪个老师的建议说可以加入一个太阳在运动,效果大概可以用灯光来做,目前测试的颜色变化是B先减弱15%,G减弱20%,然后B回升R减弱。 ps:我的拓展坞不见了接不了手柄,需要等明天到货后开发动起来的特效,这个键盘操作太脑檀了,我不认为普通人可以顺畅的两只手同方向依次按键还不会乱。 建议: 建议为可破坏的障碍物添加提前消失的机制,现在如果冲撞力度不大,碎块只会破碎不会分离,但碰撞体会关闭,很奇怪,建议使用Shader让其破碎后消失。(但是溶解消失的shader与游戏风格不搭,也可以给碎块一个右的力,做一个击飞效果)
54 lines
2.1 KiB
C#
54 lines
2.1 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.Rendering.Universal;
|
|
|
|
public class HLRenderPass : ScriptableRenderPass
|
|
{
|
|
public Material mMat;
|
|
public int blitShaderPassIndex = 0;
|
|
public FilterMode filterMode { get; set; }
|
|
private RenderTargetIdentifier source { get; set; }
|
|
private RenderTargetHandle destination { get; set; }
|
|
RenderTargetHandle m_temporaryColorTexture;
|
|
|
|
string m_ProfilerTag;
|
|
public HLRenderPass(string passname, RenderPassEvent _event, Material _mat,float contrast)
|
|
{
|
|
m_ProfilerTag = passname;
|
|
this.renderPassEvent = _event;
|
|
mMat = _mat;
|
|
mMat.SetFloat("_Contrast", contrast);
|
|
m_temporaryColorTexture.Init("temporaryColorTexture");
|
|
}
|
|
public void Setup(RenderTargetIdentifier src, RenderTargetHandle dest)
|
|
{
|
|
this.source = src;
|
|
this.destination = dest;
|
|
}
|
|
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
|
{
|
|
CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag);
|
|
|
|
RenderTextureDescriptor opaqueDesc = renderingData.cameraData.cameraTargetDescriptor;
|
|
opaqueDesc.depthBufferBits = 0;
|
|
if (destination == RenderTargetHandle.CameraTarget)
|
|
{
|
|
cmd.GetTemporaryRT(m_temporaryColorTexture.id, opaqueDesc, filterMode);
|
|
Blit(cmd, source, m_temporaryColorTexture.Identifier(), mMat, blitShaderPassIndex);
|
|
Blit(cmd, m_temporaryColorTexture.Identifier(), source);
|
|
}
|
|
else
|
|
{
|
|
Blit(cmd, source, destination.Identifier(), mMat, blitShaderPassIndex);
|
|
}
|
|
context.ExecuteCommandBuffer(cmd);
|
|
CommandBufferPool.Release(cmd);
|
|
}
|
|
|
|
public override void FrameCleanup(CommandBuffer cmd)
|
|
{
|
|
if (destination == RenderTargetHandle.CameraTarget)
|
|
cmd.ReleaseTemporaryRT(m_temporaryColorTexture.id);
|
|
}
|
|
}
|