Refraction Shader

Posted By: oliver2s

Refraction Shader - 01/16/05 22:32

Here is refraction shader I've wrote in the last few days. You can use it for example for special windows.

Here's a shot:


Here's the code (copy it first in "MS Word" and then copy it in SED or Notepad):
Code:
//Refraction Shader//////////////////////////////


VIEW refrac_view { layer = 20; } //Second View for Refraction

STARTER refrac_starter //Refrac View has always position of camera view
{
refrac_view.clip_near = 0;
camera.clip_near = 0; //that you can go very near on the refraction entity
refrac_view.visible = on;
proc_late();
while(1)
{
vec_set(refrac_view.x, camera.x);
vec_set(refrac_view.pan, camera.pan);
wait(1);
}
}

FUNCTION render_event_refraction();

MATERIAL mtl_refraction //the material
{
event = render_event_refraction();
flags = enable_view; //this is important

effect=
"
float4x4 matWorldViewProj: register(c0);

texture entSkin1;
texture entSkin2;

float mtlSkill1;
float vecSkill41;

struct VS_OUTPUT
{
float4 Pos: POSITION;
float2 textur: TEXCOORD0;
float3 eye: TEXCOORD1;
};

VS_OUTPUT VS_p0(float4 Pos: POSITION, float2 texcoord0 : TEXCOORD0)
{
VS_OUTPUT Out;

float4 pos = float4(1 * Pos.x, 1 * Pos.y, 1 * Pos.z, 1);
float4 pPos = mul(float4(pos.xyz,1), matWorldViewProj);

Out.Pos = pPos;

Out.textur = texcoord0.xy;

Out.eye.x = 0.5 * (pPos.z + pPos.x);
Out.eye.y = 0.5 * (pPos.z - pPos.y);
Out.eye.z = pPos.z * 1;

return Out;
}

sampler BumpMap = sampler_state
{
texture=(entSkin2);
MAGFILTER = LINEAR;
MINFILTER = LINEAR;
MIPFILTER = LINEAR;
};

sampler RefractionMap = sampler_state
{
texture=(entSkin1);
MAGFILTER = LINEAR;
MINFILTER = LINEAR;
MIPFILTER = LINEAR;
};

float4 PS_p0( float2 texCoord: TEXCOORD0, float3 eye: TEXCOORD1) : COLOR
{
float4 bump = tex2D(BumpMap, texCoord) * 2 - 1;
bump = normalize(bump);
float2 mid = eye.xy / eye.z + bump.xy * vecSkill41;
float4 refraction = tex2D(RefractionMap, mid);

clip(mtlSkill1);
return refraction;
}

technique refraction
{
pass p0
{

VertexShader = compile vs_1_1 VS_p0();
PixelShader = compile ps_2_0 PS_p0();
}
}
";

}

FUNCTION render_event_refraction() //that the refraction entity isn't visible in refrac view
{
if(render_view == camera)
{
mtl.skill1 = float(1);
}
if(render_view == refrac_view)
{
mtl.skill1 = float(-1);
}
}

ACTION ent_refraction
{
my.material = mtl_refraction;
my.skill41 = float(0.05); //bumpness
refrac_view.bmap = bmap_for_entity(my,1);
}



How to use it:
You need an entity with two skins.
  • 1# skin can be any texure (this texture will be overwritten by the refrac view).
  • 2# skin must be a normalmap

Then apply this entity the action "ent_refraction". You can change the value "my.skill41" for more or less bumpness.

Requirements for the shader:
  • Shader 2.0
  • A6.31
  • Pro Edition (for the render-to-textur feature)

Posted By: EX Citer

Re: Refraction Shader - 01/17/05 01:10

Very cool... Maybe even useful for waterfalls or ice.
Posted By: ShooterMaker

Re: Refraction Shader - 01/17/05 02:58

wow soooooooo good THANX

EDIT: 300. post:D
Posted By: Blattsalat

Re: Refraction Shader - 01/17/05 04:36

will test this asap...looks really cool.
Posted By: Samb

Re: Refraction Shader - 01/17/05 07:18

@oliver
ist momentan bekannt ob ein plugin die render_to_textur funktion ersetzen kann und somit auch die com benutzer den shader benutzen können? oder ist das völlig unmöglich?
Posted By: Christoph_B

Re: Refraction Shader - 01/17/05 20:10

In Antwort auf:

ist momentan bekannt ob ein plugin die render_to_textur funktion ersetzen kann und somit auch die com benutzer den shader benutzen können? oder ist das völlig unmöglich?




genau, *nur com hab*
Posted By: XeXeS

Re: Refraction Shader - 01/17/05 21:45

Mein Plugin kann die RenderToTexture Funktionalität vollständig ersetzen und bieted ein eigenes shadersystem für Standard und Extra.
Posted By: Harry Potter

Re: Refraction Shader - 01/18/05 00:09

@oliver2s: also ich muss sagen, dieser Refraction-Shader sieht wirklich genial aus. Ich würde sagen, das ist einer der besten und sinnvollsten Shader. Gute Arbeit.
Posted By: Blattsalat

Re: Refraction Shader - 01/18/05 03:29

can the second skin be transformed depending to the view in realtime?? see the bulgy glass shader from doom3 for example.
Posted By: Samb

Re: Refraction Shader - 01/18/05 03:51

In Antwort auf:

Mein Plugin kann die RenderToTexture Funktionalität vollständig ersetzen und bieted ein eigenes shadersystem für Standard und Extra.




wird das mit ein paar zeilen umänderbar sein oder wird das durch die DLL wieder ne vollkommen neue funktion?
Posted By: oliver2s

Re: Refraction Shader - 01/18/05 04:16

In Antwort auf:

can the second skin be transformed depending to the view in realtime?? see the bulgy glass shader from doom3 for example.




I don't know what you mean (kannst auch in deutsch erklären).
Posted By: Drew

Re: Refraction Shader - 01/18/05 06:22

XeXeS - what plugin/dll? can you share?
sorry no german...
Posted By: Blattsalat

Re: Refraction Shader - 01/18/05 07:13

die glasscheiben in doom3 haben eine verzerrung gehabt die sich verändert hat je nachdem wie die kamera zum glas ausgerichtet war. D.h.: verzerrungen waren stärker wenn man schief in ein glas geshen hat und schwächer wenn man frontal draufgesehen hat.
wenn man sich auf eine glasscheibe zubewegt hat wurden die verzerrungen blobartig anders (wie eine leichte sinusverzerrung des refraction skins). d.h.: eine leicht wellenartige verzerrung bei bewegungen.
Posted By: Blattsalat

Re: Refraction Shader - 01/18/05 07:41

kannst du das testmodell von dir irgendwo hochladen oder schicken (zenith@vol.at)
bei mir hauts nicht 100% hin und ich wollte sehen obs an meinem modell liegt oder meiner karte. (müsste das modell sein aber wissen was net stimmt ist hier die frage )
Posted By: Matt_Aufderheide

Re: Refraction Shader - 01/18/05 09:01

Quote:

Mein Plugin kann die RenderToTexture Funktionalität vollständig ersetzen und bieted ein eigenes shadersystem für Standard und Extra.




Yes but what happened to this plugin.. i begin to suspect it doesnt exist
Posted By: blaaaaa

Re: Refraction Shader - 01/19/05 07:54

In Antwort auf:

Mein Plugin kann die RenderToTexture Funktionalität vollständig ersetzen und bieted ein eigenes shadersystem für Standard und Extra.





tja nur da dein plugin höchstwahrscheinlich wie TUSC niemals erscheinen wird brauchst du besser garnicht erst anfangen solche posts überhaupt abzulassen... 2 mal angekündigt, 2 mal verschoben/nicht released ... man oh man
Posted By: Samb

Re: Refraction Shader - 01/19/05 09:20

pfff auf den N64 mussten wir auch nen jahr länger warten weil mario64 noch nicht ausgereift genug war
Posted By: Versus

Re: Refraction Shader - 06/30/05 19:54

schreib mal wie des geht.
Posted By: Yulor

Re: Refraction Shader - 07/07/05 14:30

not to sound negative, but that doesn't really look like light refracting in glass..
Posted By: Anonymous

Re: Refraction Shader - 07/07/05 17:11

Thanks, that's really cool!
© 2024 lite-C Forums