SAIMA/Assets/Settings/RenderPassFeature.cs
GrassTE 159cfd8881 制作部分特效
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与游戏风格不搭,也可以给碎块一个右的力,做一个击飞效果)
2022-08-21 03:44:34 +08:00

52 lines
1.8 KiB
C#

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class RenderPassFeature : ScriptableRendererFeature
{
public enum Target
{
Color,
Texture
}
[System.Serializable]
public class HLSettings
{
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingSkybox;
public Material mMat;
public Target destination = Target.Color;
public int blitMaterialPassIndex = -1;
public string textureId = "_ScreenTexture";
public float contrast = 0.5f;
}
public HLSettings settings = new HLSettings();
RenderTargetHandle m_renderTargetHandle;
HLRenderPass m_ScriptablePass;
public override void Create()
{
int passIndex = settings.mMat != null ? settings.mMat.passCount - 1 : 1;
settings.blitMaterialPassIndex = Mathf.Clamp(settings.blitMaterialPassIndex, -1, passIndex);
m_ScriptablePass = new HLRenderPass("HLPostEffectRender", settings.renderPassEvent, settings.mMat, settings.contrast);
m_renderTargetHandle.Init(settings.textureId);
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
var src = renderer.cameraColorTarget;
var dest = (settings.destination == Target.Color) ? RenderTargetHandle.CameraTarget : m_renderTargetHandle;
if (settings.mMat == null)
{
Debug.LogWarningFormat("丢失blit材质");
return;
}
m_ScriptablePass.Setup(src,dest);
renderer.EnqueuePass(m_ScriptablePass);
}
}