vignette effect

This commit is contained in:
Rapandrasmus 2023-11-23 18:08:36 +01:00
parent c484f49224
commit e08a459492
3 changed files with 142 additions and 11 deletions

View file

@ -1,5 +1,49 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!114 &-1752554079016775041
MonoBehaviour:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 40b924e2dad56384a8df2a1e111bb675, type: 3}
m_Name: Vignette
m_EditorClassIdentifier:
active: 1
enabled:
overrideState: 1
value: 0
mode:
overrideState: 1
value: 0
color:
overrideState: 1
value: {r: 0, g: 0, b: 0, a: 1}
center:
overrideState: 1
value: {x: 0.5, y: 0.5}
intensity:
overrideState: 1
value: 0
smoothness:
overrideState: 1
value: 0.2
roundness:
overrideState: 1
value: 1
rounded:
overrideState: 1
value: 0
mask:
overrideState: 0
value: {fileID: 0}
defaultState: 1
opacity:
overrideState: 0
value: 1
--- !u!114 &11400000 --- !u!114 &11400000
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -12,4 +56,5 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3} m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3}
m_Name: GameCameraProfile m_Name: GameCameraProfile
m_EditorClassIdentifier: m_EditorClassIdentifier:
settings: [] settings:
- {fileID: -1752554079016775041}

View file

@ -884,6 +884,32 @@ namespace HeavenStudio
new Param("instantOff", false, "Instant Hide", "Skip the hide animation?"), new Param("instantOff", false, "Instant Hide", "Skip the hide animation?"),
} }
), ),
// Post Processing VFX
new GameAction("vignette", "Vignette")
{
resizable = true,
parameters = new()
{
new("enable", true, "Enable"),
new("colorStart", Color.black, "Start Color"),
new("colorEnd", Color.black, "Start End"),
new("intenStart", new EntityTypes.Float(0f, 1f), "Start Intensity"),
new("intenEnd", new EntityTypes.Float(0f, 1f), "End Intensity"),
new("smoothStart", new EntityTypes.Float(0.01f, 1f, 0.2f), "Start Smoothness"),
new("smoothEnd", new EntityTypes.Float(0.01f, 1f, 0.2f), "End Smoothness"),
new("roundStart", new EntityTypes.Float(0f, 1f, 1f), "Start Roundness"),
new("roundEnd", new EntityTypes.Float(0f, 1f, 1f), "End Roundness"),
new("ease", Util.EasingFunction.Ease.Linear, "Ease"),
new("rounded", false, "Rounded")
}
}
}), }),
}; };

View file

@ -1,19 +1,79 @@
using Jukebox;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.PostProcessing; using UnityEngine.Rendering.PostProcessing;
public class PostProcessingVFX : MonoBehaviour namespace HeavenStudio
{ {
private PostProcessVolume _volume; public class PostProcessingVFX : MonoBehaviour
// events
private void Awake()
{ {
_volume = GetComponent<PostProcessVolume>(); private PostProcessVolume _volume;
// events
private List<RiqEntity> _vignettes = new();
private void Awake()
{
_volume = GetComponent<PostProcessVolume>();
}
private void Start()
{
GameManager.instance.onBeatChanged += OnBeatChanged;
}
public void OnBeatChanged(double beat)
{
_vignettes = EventCaller.GetAllInGameManagerList("vfx", new string[] { "vignette" });
UpdateVignette();
}
private void Update()
{
UpdateVignette();
}
private void UpdateVignette()
{
if (!_volume.profile.TryGetSettings<Vignette>(out var v)) return;
v.enabled.Override(false);
foreach (var e in _vignettes)
{
float normalized = Conductor.instance.GetPositionFromBeat(e.beat, e.length);
if (normalized < 0) break;
float clampNormal = Mathf.Clamp01(normalized);
var func = Util.EasingFunction.GetEasingFunction((Util.EasingFunction.Ease)e["ease"]);
v.enabled.Override(e["enable"]);
if (!v.enabled) continue;
v.rounded.Override(e["rounded"]);
Color newColor = ColorEase(e["colorStart"], e["colorEnd"], clampNormal, func);
v.color.Override(newColor);
float newIntensity = func(e["intenStart"], e["intenEnd"], clampNormal);
v.intensity.Override(newIntensity);
float newSmoothness = func(e["smoothStart"], e["smoothEnd"], clampNormal);
v.smoothness.Override(newSmoothness);
float newRoundness = func(e["roundStart"], e["roundEnd"], clampNormal);
v.roundness.Override(newRoundness);
}
}
private Color ColorEase(Color start, Color end, float time, Util.EasingFunction.Function func)
{
float newR = func(start.r, end.r, time);
float newG = func(start.g, end.g, time);
float newB = func(start.b, end.b, time);
return new Color(newR, newG, newB, 1);
}
} }
} }