0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

step関数の使い方

Last updated at Posted at 2022-09-20

step関数の使い方

勉強風記事を書いてみたくなったので、glslでよく使われるstep関数の使い方について書いてみる。

step関数とは

基準値aと比較される値xの二つの値を引数とする関数step(a,x)のことである。
返り値は、0または1であり、前者の値は「x<=aの時」、後者は「a<xの時」返る。
こんな関数何に使うの?と最初は思っていたのだが・・・・。

連続的なものを不連続にする

ちょっとshaderを書いてみると、連続な値を取って欲しくない時がたまにある。
例えば以下のような場合だ。

    #ifdef GL_ES
    precision mediump float;
    #endif
    
    uniform vec2 u_resolution;
    uniform vec2 u_mouse;
    uniform float u_time;
    
    void main() {
        vec2 st = gl_FragCoord.xy/u_resolution.xy;
        st.x *= u_resolution.x/u_resolution.y;
    
        float gray = sin((length(st-0.5)*20.0-u_time)*1.0);
        gl_FragColor = vec4(vec3(gray) , 1.0);
    
    }

スクリーンショット 2022-09-20 18.23.32のコピー.png

境目のぼやけた部分がとても気持ち悪い。step関数を使えば、このぼやけた部分をくっきりとした縞模様にできるのではないか?と思い、やってみた。

step関数を適用

要するに、上のコードにおける、grayの値が連続的に変化するゆえにこのようなことが起きているのだから、例えば、0.0という(grayの値域の半分の値)値を取って、以下のようにコードを変更してみる。

    float gray = sin((length(st-0.5)*20.0-u_time)*1.0);
    float gray_after = step(0.0,gray);
    gl_FragColor = vec4(vec3(gray_after) , 1.0);

スクリーンショット 2022-09-20 18.23.16.png

 見事くっきりとした境目に変更することが出来た。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?