Add RetroSuite-3D shader components

This commit is contained in:
Sweet Tini
2020-01-30 20:59:23 -05:00
parent d2d32b8490
commit afc6c879e7
31 changed files with 856 additions and 264 deletions

View File

@@ -3,7 +3,7 @@
public class CutsceneManager : MonoBehaviour
{
[SerializeField]
Cutscene cutscene;
Cutscene cutscene = null;
void Start()
{

View File

@@ -1,134 +1,131 @@
using UnityEngine;
namespace Assets.Scripts
public static class Easing
{
public static class Easing
public static float QuadIn(float t) => t * t;
public static float QuadOut(float t) => t * (2f - t);
public static float QuadInOut(float t)
{
public static float QuadIn(float t) => t * t;
return (t *= 2f) < 1f
? .5f * t * t
: -.5f * ((t -= 1f) * (t - 2f) - 1f);
}
public static float QuadOut(float t) => t * (2f - t);
public static float CubeIn(float t) => t * t * t;
public static float QuadInOut(float t)
{
return (t *= 2f) < 1f
? .5f * t * t
: -.5f * ((t -= 1f) * (t - 2f) - 1f);
}
public static float CubeOut(float t) => 1f + ((t -= 1f) * t * t);
public static float CubeIn(float t) => t * t * t;
public static float CubeInOut(float t)
{
return (t *= 2f) < 1f
? .5f * t * t * t
: .5f * ((t -= 2f) * t * t + 2f);
}
public static float CubeOut(float t) => 1f + ((t -= 1f) * t * t);
public static float QuartIn(float t) => t * t * t * t;
public static float CubeInOut(float t)
{
return (t *= 2f) < 1f
? .5f * t * t * t
: .5f * ((t -= 2f) * t * t + 2f);
}
public static float QuartOut(float t) => 1f - ((t -= 1f) * t * t * t);
public static float QuartIn(float t) => t * t * t * t;
public static float QuartInOut(float t)
{
return (t *= 2f) < 1f
? .5f * t * t * t * t
: -.5f * ((t -= 2f) * t * t * t - 2f);
}
public static float QuartOut(float t) => 1f - ((t -= 1f) * t * t * t);
public static float QuintIn(float t) => t * t * t * t * t;
public static float QuartInOut(float t)
{
return (t *= 2f) < 1f
? .5f * t * t * t * t
: -.5f * ((t -= 2f) * t * t * t - 2f);
}
public static float QuintOut(float t) => 1f + ((t -= 1f) * t * t * t * t);
public static float QuintIn(float t) => t * t * t * t * t;
public static float QuintInOut(float t)
{
return (t *= 2f) < 1f
? .5f * t * t * t * t * t
: .5f * ((t -= 2f) * t * t * t * t + 2f);
}
public static float QuintOut(float t) => 1f + ((t -= 1f) * t * t * t * t);
public static float SineIn(float t) => 1f - Mathf.Cos(t * Mathf.PI / 2f);
public static float QuintInOut(float t)
{
return (t *= 2f) < 1f
? .5f * t * t * t * t * t
: .5f * ((t -= 2f) * t * t * t * t + 2f);
}
public static float SineOut(float t) => Mathf.Sin(t * Mathf.PI / 2f);
public static float SineIn(float t) => 1f - Mathf.Cos(t * Mathf.PI / 2f);
public static float SineInOut(float t) => .5f * (1f - Mathf.Cos(Mathf.PI * t));
public static float SineOut(float t) => Mathf.Sin(t * Mathf.PI / 2f);
public static float ExpoIn(float t) => t == 0f ? 0f : Mathf.Pow(1024f, t - 1f);
public static float SineInOut(float t) => .5f * (1f - Mathf.Cos(Mathf.PI * t));
public static float ExpoOut(float t) => t == 1f ? 1f : 1f - Mathf.Pow(2f, -10f * t);
public static float ExpoIn(float t) => t == 0f ? 0f : Mathf.Pow(1024f, t - 1f);
public static float ExpoInOut(float t)
{
if (t == 0f || t == 1f) return t;
public static float ExpoOut(float t) => t == 1f ? 1f : 1f - Mathf.Pow(2f, -10f * t);
return (t *= 2f) < 1f
? .5f * Mathf.Pow(1024f, t - 1f)
: .5f * (-Mathf.Pow(2f, -10f * (t - 1f)) + 2f);
}
public static float ExpoInOut(float t)
{
if (t == 0f || t == 1f) return t;
public static float CircIn(float t) => 1f - Mathf.Sqrt(1f - t * t);
return (t *= 2f) < 1f
? .5f * Mathf.Pow(1024f, t - 1f)
: .5f * (-Mathf.Pow(2f, -10f * (t - 1f)) + 2f);
}
public static float CircOut(float t) => Mathf.Sqrt(1f - ((t -= 1f) * t));
public static float CircIn(float t) => 1f - Mathf.Sqrt(1f - t * t);
public static float CircInOut(float t)
{
return (t *= 2f) < 1f
? -.5f * (Mathf.Sqrt(1f - t * t) - 1)
: .5f * (Mathf.Sqrt(1f - (t -= 2f) * t) + 1f);
}
public static float CircOut(float t) => Mathf.Sqrt(1f - ((t -= 1f) * t));
public static float ElastIn(float t)
{
if (t == 0f || t == 1f) return t;
public static float CircInOut(float t)
{
return (t *= 2f) < 1f
? -.5f * (Mathf.Sqrt(1f - t * t) - 1)
: .5f * (Mathf.Sqrt(1f - (t -= 2f) * t) + 1f);
}
return -Mathf.Pow(2f, 10f * (t -= 1f))
* Mathf.Sin((t - 0.1f) * (2f * Mathf.PI) / .4f);
}
public static float ElastIn(float t)
{
if (t == 0f || t == 1f) return t;
public static float ElastOut(float t)
{
if (t == 0f || t == 1f) return t;
return -Mathf.Pow(2f, 10f * (t -= 1f))
* Mathf.Sin((t - 0.1f) * (2f * Mathf.PI) / .4f);
}
return Mathf.Pow(2f, -10f * t)
* Mathf.Sin((t - .1f) * (2f * Mathf.PI) / .4f) + 1f;
}
public static float ElastOut(float t)
{
if (t == 0f || t == 1f) return t;
public static float ElastInOut(float t)
{
return (t *= 2f) < 1f
? -.5f * Mathf.Pow(2f, 10f * (t -= 1f))
* Mathf.Sin((t - .1f) * (2f * Mathf.PI) / .4f)
: Mathf.Pow(2f, -10f * (t -= 1f))
* Mathf.Sin((t - .1f) * (2f * Mathf.PI) / .4f) * .5f + 1f;
}
return Mathf.Pow(2f, -10f * t)
* Mathf.Sin((t - .1f) * (2f * Mathf.PI) / .4f) + 1f;
}
public static float BackIn(float t) => t * t * (2.70158f * t - 1.70158f);
public static float ElastInOut(float t)
{
return (t *= 2f) < 1f
? -.5f * Mathf.Pow(2f, 10f * (t -= 1f))
* Mathf.Sin((t - .1f) * (2f * Mathf.PI) / .4f)
: Mathf.Pow(2f, -10f * (t -= 1f))
* Mathf.Sin((t - .1f) * (2f * Mathf.PI) / .4f) * .5f + 1f;
}
public static float BackOut(float t) => (t -= 1f) * t * (2.70158f * t + 1.70158f) + 1f;
public static float BackIn(float t) => t * t * (2.70158f * t - 1.70158f);
public static float BackInOut(float t)
{
return (t *= 2f) < 1f
? .5f * (t * t * ((2.5949095f + 1f) * t - 2.5949095f))
: .5f * ((t -= 2f) * t * ((2.5949095f + 1f) * t + 2.5949095f) + 2f);
}
public static float BackOut(float t) => (t -= 1f) * t * (2.70158f * t + 1.70158f) + 1f;
public static float BounceIn(float t) => 1f - BounceOut(1f - t);
public static float BackInOut(float t)
{
return (t *= 2f) < 1f
? .5f * (t * t * ((2.5949095f + 1f) * t - 2.5949095f))
: .5f * ((t -= 2f) * t * ((2.5949095f + 1f) * t + 2.5949095f) + 2f);
}
public static float BounceOut(float t)
{
if (t < (1f / 2.75f)) return 7.5625f * t * t;
else if (t < (2f / 2.75f)) return 7.5625f * (t -= 1.5f / 2.75f) * t + .75f;
else if (t < (2.5f / 2.75f)) return 7.5625f * (t -= 2.25f / 2.75f) * t + .9375f;
else return 7.5625f * (t -= 2.625f / 2.75f) * t + .984375f;
}
public static float BounceIn(float t) => 1f - BounceOut(1f - t);
public static float BounceOut(float t)
{
if (t < (1f / 2.75f)) return 7.5625f * t * t;
else if (t < (2f / 2.75f)) return 7.5625f * (t -= 1.5f / 2.75f) * t + .75f;
else if (t < (2.5f / 2.75f)) return 7.5625f * (t -= 2.25f / 2.75f) * t + .9375f;
else return 7.5625f * (t -= 2.625f / 2.75f) * t + .984375f;
}
public static float BounceInOut(float t)
{
return t < 0.5f
? BounceIn(t * 2f) * .5f
: BounceOut(t * 2f - 1f) * .5f + .5f;
}
public static float BounceInOut(float t)
{
return t < 0.5f
? BounceIn(t * 2f) * .5f
: BounceOut(t * 2f - 1f) * .5f + .5f;
}
}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3978396887dbd7944a71427c5e5b5532
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,55 @@
/// <summary>
/// RetroSuite-3D by oxysoft
/// https://github.com/oxysoft/RetroSuite3D
/// </summary>
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
[AddComponentMenu("Image Effects/Dither")]
public class Dither : MonoBehaviour
{
Material mMaterial;
Shader shader;
public Texture2D pattern;
[Range(0f, 1f)]
public float threshold = .45f;
[Range(0f, 1f)]
public float strength = .45f;
Material Material
{
get
{
if (mMaterial == null)
{
shader = Shader.Find("Oxysoft/Dither");
mMaterial = new Material(shader) { hideFlags = HideFlags.DontSave };
}
return mMaterial;
}
}
public void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (Material)
{
Material.SetTexture("_Dither", pattern);
Material.SetInt("_Width", pattern.width);
Material.SetInt("_Height", pattern.height);
Material.SetFloat("_Threshold", threshold);
Material.SetFloat("_Strength", strength);
Graphics.Blit(src, dest, Material);
}
}
void OnDisable()
{
if (mMaterial)
DestroyImmediate(mMaterial);
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 56014676381a3cb418a607d72c29f23c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- pattern: {fileID: 2800000, guid: b269ce72120fe344fba7e2418d7188dd, type: 3}
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,51 @@
/// <summary>
/// RetroSuite-3D by oxysoft
/// https://github.com/oxysoft/RetroSuite3D
/// </summary>
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
[AddComponentMenu("Image Effects/Posterize")]
public class Posterize : MonoBehaviour
{
Material mMaterial;
Shader shader;
public int redComponent = 8;
public int greenComponent = 8;
public int blueComponent = 8;
Material Material
{
get
{
if (mMaterial == null)
{
shader = Shader.Find("Oxysoft/Posterize");
mMaterial = new Material(shader) { hideFlags = HideFlags.DontSave };
}
return mMaterial;
}
}
public void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (Material)
{
Material.SetInt("_Red", redComponent);
Material.SetInt("_Green", greenComponent);
Material.SetInt("_Blue", blueComponent);
Graphics.Blit(src, dest, Material);
}
}
void OnDisable()
{
if (mMaterial)
DestroyImmediate(mMaterial);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 53ccac51293442343b69d759bb128bb3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,53 @@
/// <summary>
/// RetroSuite-3D by oxysoft
/// https://github.com/oxysoft/RetroSuite3D
/// </summary>
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
[AddComponentMenu("Image Effects/Retro Pixel Max")]
public class RetroPixelMax : MonoBehaviour
{
Material mMaterial;
Shader shader;
[Header("Colors")]
public Color[] colors;
Material Material
{
get
{
if (mMaterial == null)
{
shader = Shader.Find("Oxysoft/RetroPixelMax");
mMaterial = new Material(shader) { hideFlags = HideFlags.DontSave };
}
return mMaterial;
}
}
public void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (Material && colors.Length > 0)
{
Material.SetInt("_ColorCount", colors.Length);
Material.SetColorArray("_Colors", colors);
Graphics.Blit(src, dest, Material);
}
else
{
Graphics.Blit(src, dest);
}
}
void OnDisable()
{
if (mMaterial)
DestroyImmediate(mMaterial);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fb98cc8cfedcc5644a7af767e0a0d81e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,29 @@
/// <summary>
/// RetroSuite-3D by oxysoft
/// https://github.com/oxysoft/RetroSuite3D
/// </summary>
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
[AddComponentMenu("Image Effects/Retro Size")]
public class RetroSize : MonoBehaviour
{
[Header("Resolution")]
public int horizontalResolution = 160;
public int verticalResolution = 144;
public void OnRenderImage(RenderTexture src, RenderTexture dest)
{
horizontalResolution = Mathf.Clamp(horizontalResolution, 1, 2048);
verticalResolution = Mathf.Clamp(verticalResolution, 1, 2048);
var scaled = RenderTexture.GetTemporary(horizontalResolution, verticalResolution);
scaled.filterMode = FilterMode.Point;
Graphics.Blit(src, scaled);
Graphics.Blit(scaled, dest);
RenderTexture.ReleaseTemporary(scaled);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e55f8c08e9740c04eb673d7bcc594299
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,22 +1,18 @@
using Assets.Scripts;
using System.Collections;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LogoIntroCutscene : Cutscene
{
[SerializeField]
GameObject logoCubic;
GameObject logoCubic = null;
[SerializeField]
GameObject logoFull;
GameObject logoFull = null;
[SerializeField]
SpriteRenderer logoFullRenderer;
SpriteRenderer logoFullRenderer = null;
protected override void OnSceneStart()
{
logoFull.SetActive(false);
logoCubic.SetActive(true);
logoCubic.transform.eulerAngles = Vector3.up * 90f;
}
protected override IEnumerator OnScenePlay()
@@ -24,7 +20,9 @@ public class LogoIntroCutscene : Cutscene
yield return RotateCube();
yield return new WaitForSeconds(.2f);
yield return FadeInLogo();
yield return new WaitForSeconds(.5f);
yield return new WaitForSeconds(1f);
yield return FadeOutLogo();
yield return new WaitForSeconds(.2f);
}
protected override void OnSceneEnd()
@@ -73,4 +71,19 @@ public class LogoIntroCutscene : Cutscene
yield return null;
}
}
IEnumerator FadeOutLogo()
{
const int maxTicks = 45;
var clearWhite = new Color(1f, 1f, 1f, 0f);
logoCubic.SetActive(false);
for (int i = 0; i <= maxTicks; i++)
{
var percent = Easing.SineOut(1f * i / maxTicks);
logoFullRenderer.color = Color.Lerp(Color.white, clearWhite, percent);
yield return null;
}
}
}