World Scan FX

About World Scan FX – Unity VFX & Shader Pack

World Scan FX Unity Asset Overview

In my 8+ years building Unity games, I have seen dozens of pulse, radar, and sonar scan shaders. Most developers start by trying to render expanded mesh spheres or modifying individual object shaders to support a global wave parameter. That approach quickly becomes a maintenance nightmare when managing hundreds of unique material instances across environments and characters. World Scan FX solves this architectural headache by relying on a post-processing depth-reconstruction approach.

Instead of touching individual materials on your static props or rigged characters, this asset uses a custom pass that reads Unity's _CameraDepthTexture to reconstruct world-space positions on the fly. By calculating the distance between a designated scan origin and the reconstructed world coordinate of every pixel currently on screen, it highlights terrain geometry, low-poly props, and dynamic characters using a single, unified render feature. Honestly, this depth-based approach is the cleanest way to execute radar sweeps, detective-mode visuals, or sci-fi grid highlights without dirtying your material library.

Core Technical Features & Highlights

Under the hood, World Scan FX provides a balance between raw performance and visual fidelity. Here is the technical breakdown of how the shaders and rendering features operate inside Unity's modern pipelines:

World-Space Depth Reconstruction

The core shader pass samples the camera depth buffer and multiplies the screen-space UV coordinates by the inverse view-projection matrix. This yields the exact 3D world position for every visible surface fragment. By comparing this reconstructed vector to an origin position (such as your player's current transform), the shader renders sharp scan lines, glowing grid overlays, and trailing energy falloffs directly over your scene.

URP Scriptable Render Feature Integration

The asset hooks cleanly into the Universal Render Pipeline via a lightweight ScriptableRendererFeature. This allows the effect to inject after opaque rendering finishes, meaning it operates smoothly with both forward and deferred rendering paths without breaking draw call batching or requiring custom depth pre-pass overrides.

Ideal Use Cases & Game Genres

Because this package operates on screen-space depth rather than individual mesh setups, it fits into almost any visual style—from highly detailed realistic scenes to low-poly indie titles.

Quick-Start Unity Setup & Integration Guide

Setting up World Scan FX inside a Universal Render Pipeline project takes less than five minutes. Here is how to configure your render pipeline and trigger a pulse from C#.

Step 1: Configure Your Render Pipeline

Ensure that your active URP Asset has Depth Texture enabled in the inspector. Then, select your Universal Renderer Data asset, click Add Renderer Feature, and select WorldScanRenderFeature.

Step 2: Attach the Runtime Controller

Create a script to pass your player's position and trigger parameters to the renderer feature or shader material. Here is a practical controller script I use in production to drive the sweep over time:

using UnityEngine;

public class WorldScanController : MonoBehaviour
{
    [SerializeField] private Material scanMaterial;
    [SerializeField] private float scanSpeed = 15.0f;
    [SerializeField] private float maxScanDistance = 50.0f;

    private float currentRadius = 0f;
    private bool isScanning = false;

    private static readonly int ScanOriginProperty = Shader.PropertyToID("_ScanOrigin");
    private static readonly int ScanRadiusProperty = Shader.PropertyToID("_ScanRadius");

    public void TriggerScan(Vector3 originPoint)
    {
        scanMaterial.SetVector(ScanOriginProperty, originPoint);
        currentRadius = 0f;
        isScanning = true;
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.F) && !isScanning)
        {
            TriggerScan(transform.position);
        }

        if (isScanning)
        {
            currentRadius += Time.deltaTime * scanSpeed;
            scanMaterial.SetFloat(ScanRadiusProperty, currentRadius);

            if (currentRadius >= maxScanDistance)
            {
                isScanning = false;
                scanMaterial.SetFloat(ScanRadiusProperty, 0f);
            }
        }
    }
}

Pros & Cons Assessment

In my experience, no visual asset is completely perfect for every scenario. Here is my honest breakdown of where this package excels and where you need to be cautious.

Asset Details & Specifications

CategoryVFX / Shaders
Latest Versionv2.2 (2 tracked releases)
File Size68.82 MB
Added to PlatformFebruary 7, 2026
Views5 views
Downloads2 downloads
Favourites0 favourites
Official StoreBuy Original License on Unity Asset Store →
Issue with Package?Report Broken Link →

Developers Who Downloaded This Also Downloaded

Related Unity VFX Assets