Distortion
Distortion
Bonjour.
Je cherche désespérément une solution pour réaliser un shader pour créer un effet de Distortion.
Pour ce faire j'aurais besoin d'utiliser une texture de type "Normal" qui influence directement la Distortion.
Ainsi qu'une texture de type RGBA, en utilisant la couche Alpha pour gérer l'opacité du shader.
De plus, j'aimerais avoir plusieurs paramètres réglables tel-que l'opacité, et la force de la Distortion.
Pour réaliser ceci c'est relativement simple sur UDK, mais avec Unity ça m'a l'air complètement infaisable...
Je cherche désespérément une solution pour réaliser un shader pour créer un effet de Distortion.
Pour ce faire j'aurais besoin d'utiliser une texture de type "Normal" qui influence directement la Distortion.
Ainsi qu'une texture de type RGBA, en utilisant la couche Alpha pour gérer l'opacité du shader.
De plus, j'aimerais avoir plusieurs paramètres réglables tel-que l'opacité, et la force de la Distortion.
Pour réaliser ceci c'est relativement simple sur UDK, mais avec Unity ça m'a l'air complètement infaisable...
Re: Distortion
Bonjour yannoch !
Tu cherche une sorte de shader trou noir si j'ai bien compris ?
Tu cherche une sorte de shader trou noir si j'ai bien compris ?
Re: Distortion
C'est un peu l'idée oui. quelque chose qui déforme l'image. Comme un trou noir ou onde de choque.
Re: Distortion
Ok. Il me semble qu'il n'est pas possible de faire bouger un shader. Il te faudrait une animation ou autre chose.
Exemple tout bête :
Script mouvement + image déformation
()
Après je suis pas un pro de unity, peux être d'autre pourront te le dire
- Yann
Exemple tout bête :
Script mouvement + image déformation
()
Après je suis pas un pro de unity, peux être d'autre pourront te le dire
- Yann
Re: Distortion
Un "truc" comme cela?
Après je suis pas un pro de unity, peux être d'autre pourront te le dire
Re: Distortion
ZJP a écrit :Un "truc" comme cela?Après je suis pas un pro de unity, peux être d'autre pourront te le dire
Re: Distortion
J'ai trouvé ma solution. En fait il existe bien un script pour réaliser un shader capable de déformer l'image en utilisant une NormalMap. (tout comme on pourrait le faire sur UDK)
Une fois réalisé, le shader fonctionne à merveille, et le rendu est pas mal du tout.
Petite précision, ce shader nécessite une version PRO d'Unity.
Une fois réalisé, le shader fonctionne à merveille, et le rendu est pas mal du tout.
Petite précision, ce shader nécessite une version PRO d'Unity.
Re: Distortion
Ça doit être sans doute du post rendering, d'où la nécessité d'avoir la version pro, je suppose.yannoch a écrit :J'ai trouvé ma solution. En fait il existe bien un script pour réaliser un shader capable de déformer l'image en utilisant une NormalMap. (tout comme on pourrait le faire sur UDK)
Une fois réalisé, le shader fonctionne à merveille, et le rendu est pas mal du tout.
Petite précision, ce shader nécessite une version PRO d'Unity.
Re: Distortion
Il faudrait poster ta solution. Cela aidera les autres.yannoch a écrit :J'ai trouvé ma solution. En fait il existe bien un script pour réaliser un shader capable de déformer l'image en utilisant une NormalMap. (tout comme on pourrait le faire sur UDK)
Une fois réalisé, le shader fonctionne à merveille, et le rendu est pas mal du tout.
Petite précision, ce shader nécessite une version PRO d'Unity.
Re: Distortion
Voici le code a utiliser pour le shader:
(possible que le shader ne fonctionne pas avec les version FREE d'Unity)
L'utilisation de ce shader nécessite une NormalMaps!
(possible que le shader ne fonctionne pas avec les version FREE d'Unity)
L'utilisation de ce shader nécessite une NormalMaps!
Code : Tout sélectionner
// Per pixel bumped refraction.
// Uses a normal map to distort the image behind, and
// an additional texture to tint the color.
Shader "HeatDistort" {
Properties {
_BumpAmt ("Distortion", range (0,128)) = 10
_MainTex ("Tint Color (RGB)", 2D) = "white" {}
_BumpMap ("Normalmap", 2D) = "bump" {}
}
CGINCLUDE
#pragma fragmentoption ARB_precision_hint_fastest
#pragma fragmentoption ARB_fog_exp2
#include "UnityCG.cginc"
sampler2D _GrabTexture : register(s0);
float4 _GrabTexture_TexelSize;
sampler2D _BumpMap : register(s1);
sampler2D _MainTex : register(s2);
struct v2f {
float4 vertex : POSITION;
float4 uvgrab : TEXCOORD0;
float2 uvbump : TEXCOORD1;
float2 uvmain : TEXCOORD2;
};
uniform float _BumpAmt;
half4 frag( v2f i ) : COLOR
{
// calculate perturbed coordinates
half2 bump = UnpackNormal(tex2D( _BumpMap, i.uvbump )).rg; // we could optimize this by just reading the x & y without reconstructing the Z
float2 offset = bump * _BumpAmt * _GrabTexture_TexelSize.xy;
i.uvgrab.xy = offset * i.uvgrab.z + i.uvgrab.xy;
half4 col = tex2Dproj( _GrabTexture, i.uvgrab.xyw );
half4 tint = tex2D( _MainTex, i.uvmain );
return col * tint;
}
ENDCG
Category {
// We must be transparent, so other objects are drawn before this one.
Tags { "Queue"="Transparent+100" "RenderType"="Opaque" }
SubShader {
// This pass grabs the screen behind the object into a texture.
// We can access the result in the next pass as _GrabTexture
GrabPass {
Name "BASE"
Tags { "LightMode" = "Always" }
}
// Main pass: Take the texture grabbed above and use the bumpmap to perturb it
// on to the screen
Pass {
Name "BASE"
Tags { "LightMode" = "Always" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord: TEXCOORD0;
};
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*scale) + o.vertex.w) * 0.5;
o.uvgrab.zw = o.vertex.zw;
o.uvbump = MultiplyUV( UNITY_MATRIX_TEXTURE1, v.texcoord );
o.uvmain = MultiplyUV( UNITY_MATRIX_TEXTURE2, v.texcoord );
return o;
}
ENDCG
}
}
// ------------------------------------------------------------------
// Fallback for older cards and Unity non-Pro
SubShader {
Blend DstColor Zero
Pass {
Name "BASE"
SetTexture [_MainTex] { combine texture }
}
}
}
}