Embrace the weirdness and make your games truly unique. From hypnotic fire tunnels to reality-warping distortions and ethereal auras, give your projects that extra edge in horror, magic, and psychedelic experiences.
High-performance, fully customizable, and designed specifically for game developers!
All ‘Weird’ effects are developed for ‘Universal Render Pipeline’ (or URP), which means they will not work with Built-In, or HDRP.
All effects are compatible with Unity 6, and use Render Graph. You will need to have URP version 17.0.2 or higher installed. In the official documentation you can find the steps to install it correctly.
Make sure that the ‘Compatibility Mode’ is disabled (Project Settings > Graphics > Render Graph).
Once installed, you have to add the effect you want to use from ‘Weird’ as a ‘Render Feature’. This official tutorial tells how to do it.
Remember that the camera you are using must have the ‘Post Processing’ option enabled.
‘Quality’ levels (Project Settings > Quality) can have their own active ‘Render Pipeline Asset’.
If so, whatever you assign in ‘Scriptable Render Pipeline Settings’ in ‘Graphics’ will be ignored.
Remember to add the effect to the quality levels you want to use.
To increase compatibility with VR devices, I recommend that you select ‘Stereo Rendering Mode’ in ‘Multi Pass’ mode:
Once you have added the effect in the Editor, you can also handle ‘Weird’ effects by code.
First you must add the corresponding namespace. They are all of the style ‘FronkonGames.Weird.XXXX’, where XXXX is the name of the effect. For example, if the effect you want to use is ‘Fire Tunnel’ the code would be:
using FronkonGames.Weird.FireTunnel;To modify any of the effect parameters, you must first request its settings. In the following example we change the intensity of the effect by half.
FireTunnel.Settings settings = FireTunnel.Instance.settings;
settings.intensity = 0.5f;And how can I activate and deactivate the effect? It’s as easy as that:
FireTunnel fireTunnel = FireTunnel.Instance;
// Switch between active and inactive.
if (fireTunnel.isActive == true)
fireTunnel.SetActive(false);
else
fireTunnel.SetActive(true);If you are using an effect other than ‘FireTunnel’ just change it to its name. Check the source code comments for more information.
Transform your game into a hypnotic journey through flames with Fire Tunnel, a mesmerizing post-processing effect that creates a swirling vortex of fire that engulfs the screen. Perfect for dramatic transitions, hellish portals, or just making your players feel like they’re diving into the heart of an inferno.
Once installed, when you select your ‘Universal Renderer Data’, you will see something like this:
With ‘Intensity’ you can control the intensity of the effect. If it is 0, the effect will not be active.
Want to summon the flames programmatically? It’s easier than you think:
// Add the namespace
using FronkonGames.Weird.FireTunnel;
// Safe to use?
if (FireTunnel.IsInRenderFeatures() == false)
return;
// Access the settings (after ensuring FireTunnel is added as a Render Feature)
FireTunnel.Settings settings = FireTunnel.Instance.settings;
// Open the portal!
settings.intensity = 1.0f;
settings.tunnelRadius = 4.0f;
// Close it
settings.intensity = 0.0f;Want a smooth, dramatic reveal? Here’s how to animate the tunnel opening:
IEnumerator OpenFireTunnel()
{
var settings = FireTunnel.Instance.settings;
settings.intensity = 1.0f;
float duration = 3.0f;
float elapsed = 0.0f;
while (elapsed < duration)
{
settings.tunnelRadius = Mathf.Lerp(0.0f, 4.0f, elapsed / duration);
elapsed += Time.deltaTime;
yield return null;
}
settings.tunnelRadius = 4.0f;
}
// Start the animation
StartCoroutine(OpenFireTunnel());Here’s the fade-out version:
IEnumerator CloseFireTunnel()
{
var settings = FireTunnel.Instance.settings;
settings.intensity = 1.0f;
float duration = 3.0f;
float elapsed = 0.0f;
while (elapsed < duration)
{
settings.tunnelRadius = Mathf.Lerp(4.0f, 0.0f, elapsed / duration);
elapsed += Time.deltaTime;
yield return null;
}
settings.tunnelRadius = 0.0f;
}
// Start the animation
StartCoroutine(CloseFireTunnel());Transform your rendered scene into a stunning 3D voxel-extruded world! This postprocess effect uses advanced raymarching techniques to convert your screen into an artistic grid of height-mapped blocks, creating a unique retro-futuristic aesthetic reminiscent of classic voxel graphics.
Perfect for artistic visualizations, music videos, stylized game cinematics, or adding that extra “weird” factor to your Unity projects!
Once installed, when you select your ‘Universal Renderer Data’, you will see something like this:
With ‘Intensity’ you can control the intensity of the effect. If it is 0, the effect will not be active.
The Height setting determines how voxel heights are calculated:
Luminosity Remap to focus on specific brightness ranges:
Min = 0.5, Max = 1.0 to only extrude bright areas (highlights).Min = 0.0, Max = 0.4 to only extrude dark areas (shadows).Min = 0.3, Max = 0.7 to focus on mid-tones only.Scale to amplify height differences (values like 2-5 often work well for dramatic effects).Depth Remap to focus on specific depth ranges:
Min = 0.0, Max = 0.4 to only extrude foreground objects (closest 40%).Min = 0.3, Max = 0.7 to focus on mid-range objects only.Min = 0.7, Max = 1.0 to only extrude background objects (farthest 30%).
This method requires you to activate Depth Texture in your URP settings.
When to use each:
// Add the namespace
using FronkonGames.Weird.Extruder;
// Safe to use?
if (Extruder.IsInRenderFeatures() == false)
return;
// Access the settings (after ensuring Extruder is added as a Render Feature)
Extruder.Settings settings = Extruder.Instance.settings;
// Enable the effect
settings.intensity = 1.0f;
// Disable it
settings.intensity = 0.0f;Reset everything to defaults:
Extruder.Instance.settings.ResetDefaultValues();Every parameter is at your fingertips:
var settings = Extruder.Instance.settings;
// Core effect
settings.intensity = 1.0f; // [0, 1] - Master intensity
// Extruder settings
settings.gridScale = 3.0f; // [1, 20] - Block size (smaller = larger blocks)
settings.heightMethod = HeightMethod.Grayscale; // Height calculation method (Grayscale or Depth)
settings.depthScale = 1.0f; // [0.1, 10] - Depth amplification (only for Depth mode)
settings.depthRemapMin = 0.0f; // [0, 1] - Minimum depth to remap (only for Depth mode)
settings.depthRemapMax = 1.0f; // [0, 1] - Maximum depth to remap (only for Depth mode)
settings.luminosityRemapMin = 0.0f; // [0, 1] - Minimum luminosity to remap (only for Grayscale mode)
settings.luminosityRemapMax = 1.0f; // [0, 1] - Maximum luminosity to remap (only for Grayscale mode)
settings.colorBlend = ColorBlends.Solid; // Color blend mode (Solid, Additive, Multiply, etc.)
settings.rotation = new Vector2(0f, 0f); // [0, 360] - Camera rotation (X, Y)
// Camera & lighting
settings.cameraDistance = -2.0f; // [-5, -0.5] - Camera distance from scene
settings.lightPosition = new Vector3(1.5f, 2.0f, -1.0f); // [-3, 3] - Light position (X, Y, Z)
settings.lightColor = new Color(0.25f, 0.5f, 1.0f, 0.3f); // Light color and intensity (RGBA)
settings.specularColor = new Color(1.0f, 0.5f, 0.2f); // Specular highlight color
settings.fresnelIntensity = 16.0f; // [0, 128] - Fresnel effect intensity
// Raymarching (performance & quality)
settings.maxRayDistance = 20.0f; // [1, 50] - Maximum ray distance
settings.raymarchingSteps = 32; // [4, 128] - Number of steps per ray
settings.stepMultiplier = 0.7f; // [0.1, 1] - Raymarching step size
settings.shadowSoftness = 8.0f; // [1, 16] - Shadow softness
settings.shadowIterations = 8; // [0, 32] - Shadow ray iterations (0 = no shadows)
settings.ambientOcclusionIterations = 5; // [0, 32] - AO iterations (0 = no AO)
// Floor settings
settings.floorColor = Color.black; // Floor/background color
settings.floorColorBlend = ColorBlends.Solid; // Floor color blend mode
// Color adjustments
settings.brightness = 0.0f; // [-1, 1] - Brightness adjustment
settings.contrast = 1.0f; // [0, 10] - Contrast
settings.gamma = 1.0f; // [0.1, 10] - Gamma correction
settings.hue = 0.0f; // [0, 1] - Hue shift
settings.saturation = 1.0f; // [0, 2] - Color saturation
// Advanced settings
settings.affectSceneView = false; // Affect Scene View?
settings.whenToInsert = RenderPassEvent.BeforeRenderingPostProcessing; // Render pass injection pointTransform your games with mesmerizing crystalline patterns and dynamic light effects! This post-processing effect creates stunning visual distortions reminiscent of looking through a kaleidoscopic crystal, enhanced with flowing particle-like lights.
Once installed, when you select your ‘Universal Renderer Data’, you will see something like this:
With ‘Intensity’ you can control the intensity of the effect. If it is 0, the effect will not be active.
Want to control the crystalline effects programmatically? It’s easier than you think:
// Add the namespace
using FronkonGames.Weird.Crystal;
// Is it added as a Renderer Feature?
if (Crystal.IsInRenderFeatures() == false)
return;
// Access the effect instance
Crystal.Settings settings = Crystal.Instance.settings;
settings.intensity = 1.0f;
// Control crystal effect
settings.crystalIntensity = 1.0f;
settings.crystalColor = new Vector3(0.3f, 0.8f, 1.2f);
settings.crystalSpeed = 0.5f;
// Control lights effect
settings.lightsIntensity = 0.5f;
settings.lightsSpeed = 1.0f;
settings.lightsIterations = 25;Animate effects at runtime:
// Smoothly fade in the crystal effect
Crystal.Instance.settings.crystalIntensity = Mathf.Lerp(
Crystal.Instance.settings.crystalIntensity,
1.0f,
Time.deltaTime * 2.0f);
// Dynamically adjust light turbulence based on game events
Crystal.Instance.settings.lightsTurbulence = 40.0f + Random.Range(-10.0f, 30.0f);
// Shift colors over time
float hueShift = (Time.time * 0.1f) % 1.0f;
Crystal.Instance.settings.hue = hueShift;Every parameter is at your fingertips:
Crystal.Settings settings = Crystal.Instance.settings;
// Crystal parameters
settings.crystalColorBlend = ColorBlends.Screen;
settings.crystalGain = 0.45f;
settings.crystalScale = 2.2f;
settings.crystalPower = 5.0f;
settings.crystalRotation0 = 30.0f;
settings.crystalRotation1 = 5.0f;
settings.crystalReflection = 0.1f;
settings.crystalRefraction = 1.0f;
// Lights parameters
settings.lightsColorBlend = ColorBlends.Additive;
settings.lightsColorOffset = new Vector3(1.0f, 2.0f, 3.0f);
settings.lightsComplexity = 0.03f;
settings.lightsDistortion = 7.0f;
settings.lightsSpread = 5.0f;
settings.lightsRotationSpeed = 0.02f;
settings.lightsTurbulence = 40.0f;
settings.lightsDetail = 1.5f;
settings.lightsWarp = 9.0f;
settings.lightsBrightness = 25.6f;
settings.lightsContrast = 13.0f;
settings.lightsPower = 5.0f;
// Color adjustments
settings.brightness = 0.0f;
settings.contrast = 1.0f;
settings.gamma = 1.0f;
settings.saturation = 1.0f;Check if the effect is ready:
if (Crystal.IsInRenderFeatures() == true)
{
// Safe to use!
}Reset everything to defaults:
Crystal.Instance.settings.ResetDefaultValues();Transform your games into a stunning bubble-like effect with customizable lighting, shapes, and colors. Create stunning visual effects with circular or square bubbles, adjustable bevels, and full 3D light control.
Once installed, when you select your ‘Universal Renderer Data’, you will see something like this:
With ‘Intensity’ you can control the intensity of the effect. If it is 0, the effect will not be active.
Basic usage:
// Add the namespace
using FronkonGames.Weird.Bubbles;
// Safe to use?
if (Bubbles.IsInRenderFeatures() == false)
return;
// Access the settings (after ensuring Bubbles is added as a Render Feature)
Bubbles.Settings settings = Bubbles.Instance.settings;
// Enable the effect
settings.intensity = 1.0f;
// Disable it
settings.intensity = 0.0f;Every parameter is at your fingertips:
var settings = Bubbles.Instance.settings;
// Core effect
settings.intensity = 1.0f; // [0, 1] - Master intensity
// Bubbles settings
settings.bubbleColor = Color.white; // Bubble color
settings.bubbleColorBlend = ColorBlends.Solid; // Bubble blend mode
settings.bubbleRoundness = 1.0f; // [0, 1] - Shape: 0=square, 1=circle
settings.bubbleSize = 40.0f; // [10, 100] - Bubble size
settings.bubbleBevel = 0.4f; // [0.05, 1] - Bevel depth
settings.bubbleSpacing = 0.1f; // [0, 1] - Spacing between bubbles
// Lighting settings
settings.lightSpecular = 0.45f; // [0, 2] - Specular intensity
settings.lightColor = Color.white; // Light color
settings.lightSpecularPower = 70.0f; // [1, 200] - Specular power
settings.lightAngle = 45.0f; // [0, 360] - Light azimuth angle
settings.lightElevation = 46.0f; // [0, 90] - Light elevation angle
// Background settings
settings.backgroundColor = Color.white; // Background color
settings.backgroundBlend = ColorBlends.Solid; // Background blend mode
settings.backgroundBlur = 8.0f; // [0, 20] - Blur radius
settings.backgroundExposure = -0.6f; // [-2, 2] - Exposure adjustmentCheck if the effect is ready:
if (Bubbles.IsInRenderFeatures() == true)
{
// Safe to use!
}Reset everything to defaults:
Bubbles.Instance.settings.ResetDefaultValues();A raymarching-based post-processing effect that creates a dynamic pinch distortion on the screen. Click and drag to create a conical extrusion effect that follows your pointer, with configurable start and end areas, roundness, and Lambert lighting.
Once installed, when you select your ‘Universal Renderer Data’, you will see something like this:
With ‘Intensity’ you can control the intensity of the effect. If it is 0, the effect will not be active.
Create a Pinch using a coroutine and tween:
using FronkonGames.Weird.Pinch;
using UnityEngine;
using System.Collections;
public class PinchController : MonoBehaviour
{
private Pinch.Settings settings;
void Start()
{
// Check if Pinch is available
if (Pinch.IsInRenderFeatures() == false)
{
Debug.LogWarning("Pinch effect not found in Render Features!");
this.enabled = false;
return;
}
// Access the settings
settings = Pinch.Instance.settings;
settings.intensity = 1.0f; // Enable the effect
}
// Create a pinch effect at a specific position
void CreatePinch(Vector2 screenPosition)
{
// Convert screen position to normalized coordinates [0, 1]
Vector2 startPoint = new Vector2(
screenPosition.x / Screen.width,
screenPosition.y / Screen.height
);
// Set the start point (center of the effect)
settings.start = startPoint;
// Set the end point offset (creates the pinch direction)
settings.end = new Vector2(0.3f, 0.2f); // Pinch points to the right and up
}
// Release the pinch - smoothly animate end back to start
void ReleasePinch() => StartCoroutine(TweenPinchRelease());
IEnumerator TweenPinchRelease()
{
Vector2 startEnd = settings.end;
float duration = 0.5f;
float elapsed = 0f;
while (elapsed < duration)
{
elapsed += Time.deltaTime;
float t = elapsed / duration;
// Smooth easing (you can use any easing function)
t = t * t * (3f - 2f * t); // Smoothstep
// Interpolate end point back to start (Vector2.zero)
settings.end = Vector2.Lerp(startEnd, Vector2.zero, t);
yield return null;
}
// Ensure it's exactly at start (no pinch)
settings.end = Vector2.zero;
}
// Example: Mouse interaction
void Update()
{
if (Input.GetMouseButtonDown(0))
// Create pinch at mouse position
CreatePinch(Input.mousePosition);
else if (Input.GetMouseButtonUp(0))
// Release the pinch
ReleasePinch();
}
}Every parameter is at your fingertips:
// Pinch configuration
settings.start = new Vector2(0.5f, 0.5f); // Start position
settings.end = new Vector2(-0.2f, 0.2f); // End position (relative to start)
settings.startRadius = 0.0f; // Start area size
settings.endRadius = 0.1f; // End area size
settings.roundness = 0.1f; // Pinch roundness
// Lighting
settings.lightDirection = new Vector3(0.577f, 0.577f, 0.577f); // Light direction
settings.lightIntensity = 0.5f; // Light intensity
// Raymarching quality
settings.raymarchSteps = 100.0f; // Number of steps
settings.maxDistance = 1.0f; // Max distance
// Color adjustments
settings.brightness = 0.0f; // Brightness
settings.contrast = 1.0f; // Contrast
settings.gamma = 1.0f; // Gamma
settings.hue = 0.0f; // Hue shift
settings.saturation = 1.0f; // SaturationA hand-drawn doodle effect. It applies a noise-based distortion to simulate a wobbly, sketched look, combined with posterization and edge detection for a complete artistic style.
Once installed, when you select your ‘Universal Renderer Data’, you will see something like this:
With ‘Intensity’ you can control the intensity of the effect. If it is 0, the effect will not be active.
Uses a noise-based displacement map to simulate the natural jitter and imperfection of hand-drawn animation. By animating this noise over time at a reduced frame rate, it creates a convincing “boiling lines” effect.
Simulates drawing on paper by blending a paper texture over the image.
Adds a grid overlay, useful for graph paper or technical drawing effects.
Adds procedural hatching or sketch lines to shading.
Calculates the image gradient to detect edges. By applying this after the doodle distortion, the outlines wiggle and vibrate along with the drawing, reinforcing the hand-sketched aesthetic.
Reduces the tonal resolution of the image, banding continuous gradients into fewer steps of color. Lower values create a more stylized, comic-book or retro-digital appearance.
Applies various color presets to the final image.
// Add the namespace
using FronkonGames.Weird.Doodle;
// Safe to use?
if (Doodle.IsInRenderFeatures() == false)
return;
// Access the settings (after ensuring Doodle is added as a Render Feature)
Doodle.Settings settings = Doodle.Instance.settings;
// Enable the effect
settings.intensity = 1.0f;
// Disable it
settings.intensity = 0.0f;Every parameter is at your fingertips:
var settings = Doodle.Instance.settings;
// Core effect
settings.intensity = 1.0f; // [0, 1] - Master intensity
// Doodle settings
settings.strength = 1.0f; // [0, 10] - Distortion strength
settings.scale = Vector2.one; // Noise scale
settings.frameRate = 12.0f; // Animation FPS
settings.blend = ColorBlends.Solid; // Blend mode
// Paper settings
settings.paperIntensity = 0.5f; // [0, 1] - Paper intensity
settings.paperBlend = ColorBlends.Multiply; // Paper blend mode
settings.paperScale = Vector2.one; // Paper scale
settings.paperDoodleIntensity = 0.5f; // [0, 1] - Doodle influence
settings.paperTint = Color.white; // Paper tint
// Grid settings
settings.gridIntensity = 1.0f; // [0, 1] - Grid intensity
settings.gridLineBlend = ColorBlends.Solid; // Grid blend mode
settings.gridSize = 9; // [1, 32] - Grid size
settings.gridLineWidth = 1.0f; // [0, 5] - Grid line width
settings.gridLineColor = new Color(0.35f, 0.65f, 1.0f); // Grid color
// Sketch settings
settings.sketchIntensity = 1.0f; // [0, 1] - Sketch intensity
settings.sketchMode = SketchModes.Simple; // Sketch mode
settings.sketchScale = 5.0f; // [0.1, 10] - Sketch scale
settings.sketchSpeed = 0.0f; // [0, 10] - Sketch speed
settings.sketchAngle = 45.0f; // [0, 360] - Sketch angle
settings.sketchColor = Color.black; // Sketch color
settings.sketchBlend = ColorBlends.Multiply; // Sketch blend mode
// Sobel settings
settings.sobelIntensity = 1.0f; // [0, 1] - Sobel master intensity
settings.sobelStrength = 1.0f; // [0, 10] - Edge detection strength
settings.sobelTint = Color.black; // Edge color
settings.sobelBlend = ColorBlends.Multiply; // Edge blend mode
// Posterize
settings.posterize = 8; // [2, 256] - Color levels
// Color remapping
settings.colorRemapping = ColorRemapping.Blueprint;
// Color adjustments
settings.brightness = 0.0f;
settings.contrast = 1.1f;All effects have a panel, ‘Color’, in which you can modify the final color of the effect.
They also have an ‘Advanced’ panel with these options:
Activate ‘Affect the Scene View?’ (1) if you want the effect to be applied also in the ‘Scene’ window of the Editor. With ‘Filter mode’ (2) you can change the type of filter used.
Although it is not recommended to change it, with ‘RenderPass event’ (3) you can modify at which point in the render pipeline the effect is applied. Finally, activate ‘Enable profiling’ (4) to show in the ‘Profiling’ window the metrics of the effect.
In order for the UI not to be affected by the effect, you should set the ‘Render Mode’ of your canvas from ‘Screen Space - Overlay’ to ‘Screen Space - Camera’ and dragging your camera with to ‘Render Camera’.
Note that when you make this change, the coordinates of your UI will be in camera space, so you will have to change them.
Bloom’s URP Unity effect is not compatible with postprocessing effects based on ScriptableRendererFeature (like this one).
You will have to add your own one based on ScriptableRendererFeature or you can use this one at no cost ;)
Yes! Any effect can easily be used on a material. Just follow these steps:
Do you have any problem or any suggestions? Send me an email to fronkongames@gmail.com and I’ll be happy to help you.
Remember that if you want to inform me of an error, it would help me if you sent to me the log file.
If you are happy with this asset, consider write a review in the store
❤️ thanks! ❤️