Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
49
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@shimacpyon

ランダムな値を返す関数 on GLSL

実装

GLSL には noise[1234] が定義されているが、実装が GPU のドライバに強く依存するのでそれに依存しない擬似ランダム関数を GLSL だけで作れないかという話。http://stackoverflow.com/questions/4200224/random-noise-functions-for-glsl からそのまま引用。

float rand(vec2 co){
    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}

引数 co にはフラグメントシェーダの場合は gl_FragCoord.xy を渡す。引数は明らかに読み取り専用なので const vec2 co としたほうがよいかもしれない。使う場面として SSAO とか。

どこから出てきたの?

ちなみにこの関数についてどこがオリジナルなのかの質問もある。どうやらそのサイトはすでに消滅しており、2008年2月にアーカイブされてたものがおそらくのオリジナルだろうということのようだ。
http://stackoverflow.com/questions/12964279/whats-the-origin-of-this-glsl-rand-one-liner

Mali-400 上だと動かない模様

ARM の GPU である Mali-400 ではこの関数をそのまま使うことが出来ないようで対策版が作られている模様。
https://gist.github.com/johansten/3633917

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
49
Help us understand the problem. What are the problem?