From Unify Community Wiki
Revision as of 08:32, 16 August 2014 by Tuone (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search



A shader that produces a force field effect using trigonometric functions.


Color adjusts the field color. Rate adjusts the rate at which the field moves. Scale adjusts the granularity of detail seen in the field. This shader has two configuration defines:

#define USE_TAN

Default. When this symbol is defined, the field has more defined patterns and will over-saturate the colors, yielding more of an energy effect. When this symbol is not defined (i.e., #undef USE_TAN), the field is generally amorphous in appearance.

#define USE_LINES

Disabled by default. When this symbol is defined, any patterns appear linear rather than curved. By default this symbol is not defined (i.e., #undef USE_LINES).

Invalid language.

You need to specify a language like this: <source lang="html4strict">...</source>

Supported languages for syntax highlighting:

4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, asm, asp, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, oobas, oracle11, oracle8, oxygene, oz, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, python, q, qbasic, rails, rebol, reg, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, sql, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, uscript, vala, vb, vbnet, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic

// Shader: "FX/TrigField"
// Version: v1.0
// Written by: Thomas Phillips
// Anyone is free to use this shader for non-commercial or commercial projects.
// Description:
// Generic force field effect.
// Play with color, opacity, and rate for different effects.

Shader "FX/TrigField" {

Properties {
	_Color ("Color Tint", Color) = (0, 0, 0.5, 1.0)
	_Rate ("Oscillation Rate", Range (1, 10)) = 1.0
	_Scale ("Ripple Scale", Range (1, 30)) = 10.0

SubShader {
	ZWrite Off
	Tags { "Queue" = "Transparent" }
	Blend One One

	Pass {


// Define/undefine either/both of these for a differnt variant.
#define USE_TAN
#undef USE_LINES

#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_fog_exp2
#include "UnityCG.cginc"

float4 _Color;
float _Rate;
float _Scale;

struct v2f {
	float4 texcoord : TEXCOORD0;
	float4[4] target : TEXCOORD1;

v2f vert (appdata_base v)
	v2f o;
	PositionFog( v.vertex, o.pos, o.fog );
	o.texcoord = v.texcoord;
	int j;
	for ( j = 2; j < 5; j++) {
		float a, b;
		sincos(j*_Time[0], a, b);
		o.target[j-2] = float4(a, b, 0, 0);
	return o;

half4 frag (v2f i) : COLOR
	float4 d;
	int j;
	float r = _Time[1] * _Rate;
	for ( j = 0; j < 3; j++) {
#ifdef USE_LINES
#ifdef USE_TAN
		d[j] = tan(_Scale * dot(i.texcoord, i.target[j]) - r);
		d[j] = sin(_Scale * dot(i.texcoord, i.target[j]) - r) * 3;
#ifdef USE_TAN
		d[j] = tan(_Scale * distance(i.texcoord, i.target[j]) - r);
		d[j] = sin(_Scale * distance(i.texcoord, i.target[j]) - r) * 3;
	} // for
	return half4( (dot(d, d) * _Color).xyz, 1 );

Fallback "Transparent/Diffuse"
Personal tools