How to make dynamic ripple with shader?
Hi. I want to make a dynamic ripple shader such that a player touch a plane (raycast from camera) and a ripple effect is produced there. I made a simple shader as below and with changing _Center by using Raycast and passing uv(or world pos) value in script, I can produce a ripple at the point I want it to be, but the problem is that I can't make several ripples. If a player touches the plane 3 times, then 3 ripples should be produced and overlay each other. How can I make that kind of shader?
I tried CustomRenderTexture and its update zone but not work well neither... any help appreciated.
Shader "Custom/Ripple"
{
Properties
{
_CircleColor("Circle Color", Color) = (0,0,0,1)
_Center("Center", Vector) = (0, 0, 0, 0)
_CircleWidth("Circle Width", float) = 0.98
_Amplitude("Amplitude", float) = 4
_Speed("Speed", float) = 20
_BaseColor ("Base Color", Color) = (1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float3 worldPos;
};
fixed4 _CircleColor;
float4 _Center;
fixed4 _BaseColor;
float _CircleWidth;
float _Amplitude;
float _Speed;
void surf (Input IN, inout SurfaceOutputStandard o)
{
float dist = distance(IN.worldPos, _Center);
float val = abs(sin(dist * _Amplitude - _Time * _Speed));
_CircleWidth = saturate(_CircleWidth) ;
fixed4 color;
if (val >= _CircleWidth) {
color = _CircleColor;
} else {
color = _BaseColor;
}
o.Albedo = color;
}
ENDCG
}
FallBack "Diffuse"
}
Did you ever figure out how to do it? I am trying to do something similar for my game?
Your answer
Follow this Question
Related Questions
RenderTexture Scope Effect 0 Answers
PostProcess Outline Shader GVR alignment 0 Answers
Correct way to modify a Texture2d with a shader? 0 Answers
Transparent plane with RenderTexture - no show shadows? 3 Answers