Sorry, your browser doesn't support canvas element !
Illusory motion in Yurii Perepadia's illustration
Strong illusory motion produced by the peripheral drift illusion
24
tentacles
10
cpd
5
deg
20
deg
15
%
100
%
100
%
v1.0
© 2020 KyberVision - Innovation in Vision Sciences
Send Feedback
This stimulus is based on an illustration by Yurii Perepadia, a prolific Ukrainian illustrator and graphic designer who uses Adobe Suite (Illustrator, Photoshop, After Effects) to create his illustrations. He described it as "Abstract turned frames with a rotating purple yellow wavy pattern”.

Like for many of his illustrations, Perepadia created the appearance of motion by using an effect studied by Akioshi Kitaoka, a professor of psychology at Ritsumeikan University in Osaka, Japan, and at the basis of his famous "Rotating snakes" illusion: the peripheral drift illusion (PDI).

This class of illusions is characterized by the perception of illusory motion when an otherwise static pattern is presented in the peripheral vision while being perceived as motionless when presenting in the centre of the visual field. You will notice that the induced illusory motion is particularly strong when exploring the stimulus through eye movements, while it will slow down or even disappear if you are able to stabilize your gaze for a few seconds.

References:

  Fraser & Wilcox (1979) Perception of illusory movement. Nature 281:565–566

  Faubert & Herbert (1999) The peripheral drift illusion: A motion illusion in the visual periphery. Perception 28:617–621

  Kitaoka & Ashida (2003) Phenomenal characteristics of the peripheral drift illusion. Vision (15):261–262
Here is the math behind this stimulus:

  inphi = 45*pi/180
  sw = shadow/100; sat = saturation/100; cnt = contrast/100
  xroti = (x*cos(inphi)+y*sin(inphi))/winsize
  yroti = (-x*sin(inphi)+y*cos(inphi))/winsize
  xroto = (x*cos(outphi)+y*sin(outphi))/winsize
  yroto = (-x*sin(outphi)+y*cos(outphi))/winsize
  inenv = abs(xroti)<1/2 & abs(yroti)<1/2
  outenv = abs(xroto)<1 & abs(yroto)<1
  w = 2*pi/af
  wiggling = nblevels*(theta+cos(2*pi*sqrt(sf*r))*w/4)
  levels = mod(floor(wiggling/w),nblevels)
  window = outenv - inenv
  lev = levels*window + mod(nblevels-levels,nblevels)*(1-window)
  lev0 = lev==0; lev1 = lev==1; lev2 = lev==2
  lev3 = lev==3; lev4 = lev==4; lev5 = lev==5
  zr =  0.5 + cnt*(-0.5*lev0 + 0.3*lev1 + 0.5*lev2 + 0.5*lev3 + 0.1*lev4 - 0.1*lev5)
  zg = 0.5 + cnt*(-0.5*lev0 + 0.2*lev1 + 0.4*lev2 + 0.5*lev3 - 0.3*lev4 -0.5*lev5)
  zb = 0.5 + cnt*(-0.5*lev0 -0.5*lev1 - 0.2*lev2 + 0.4*lev3 + 0.2*lev4 + 0.1*lev5)
  ach = (1-sat)*(zr+zb+zb)/3
  zr = zr*sat+ach; zg = zg*sat+ach; zb = zb*sat+ach
  inshadow = inenv*0.5*(clip(abs(abs(xroti)-0.5)/sw,0,1)
            +clip(abs(abs(yroti)-0.5)/sw,0,1))
  outshadow = outenv*0.5*(clip(abs(abs(xroto)-1)/sw,0,1)
            +clip(abs(abs(yroto)-1)/sw,0,1))
  shadowmod = inshadow + (1-inenv)*outshadow + (1-outenv)
  zr = zr*shadowmod
  zg = zg*shadowmod
  zb = zb*shadowmod
The whole stimulus is generated in real-time using a GLSL shader that runs right inside your WebGL-compatible browser. The plain Math behind the stimulus was converted to this optimized GLSL shader using the new Psykinematix Pro Edition. Translation to Matlab and Python code is also possible !

This whole widget was also fully generated using Psykinematix Pro Edition. The parameters that control the stimulus properties through the sliders are the same as the ones you would define as dependent or independent variables when using the stimulus in an actual psychophysical experiment run in Psykinematix. The widget creation is otherwise fully customizable with your own logo, copyright, links, etc.

To learn more about the widget creation, click on the above "Made With" button !
v1.0
© 2020 KyberVision - Innovation in Vision Sciences