どくらぼ

言いたいことを言います

wgld.org をとりあえず外見だけリニューアル完了

かねてよりやりたかった wgld.org のリニューアルを敢行。

白地ベースだったデザインを黒地ベースに変更。

実際には、サーバーサイドの処理を書いて今までは javascript で生成していたサイドバーのリンク一覧などを静的に吐き出すようにした。ここが一番修正したかった部分だったので、デザイン変更は実はついでだったりする。

 

f:id:doxas:20140401154406j:plain

 

wgld.org に関しては、まずこのリニューアルが個人的に最優先事項だった。

先述のとおりサーバーサイドな処理を追加したかった都合上、ソースが全体的に手入れされる予定だったため新しいテキストを書くことにためらいがあったんですよね。

リニューアルが無事に済んだことで、いよいよテキストを書いていくことができる。同時に、過去のテキストに関しても修正を行いたい欲求がある。これは単に、当時の自分が理解半分に適当に書いた(と今となっては思える)ものが散見されるから。

 

新しくテキストを書いていくうえでも、やりたいことが複数あって取捨選択に困ってしまう。

ひとつは、WebGL拡張機能のうちのいくつかを解説するテキスト群。二つ目は、GLSL を用いたフラグメントシェーダベースのデモ作成入門テキスト。三つ目は、二つ目とかぶる部分もあるがレイトレーシングやレイマーチングに関するテキスト群。

 

f:id:doxas:20140402153932j:plain

 

実は、こういった書きたいテキストが多岐に渡るというシーンは以前から wgld.org にはあった。というより、自分の場合はそういう風になることが実は多かったり。

というのは、まず自分が仕組みや理論をしっかり理解して、それを拡張したり自在に修正したりすることができるようになってからテキストを書く、というサイクルでサイトを更新するようにしているから。

テキストを書こうと思った時には、おおよそ自分は入門者という枠組みをやっと出ることができたかな……と感じられる程度にはなっていなくてはいけない。そうでなくては、入門者が理解しやすいような柔らかい文章が書けない気がする。

同時に、自分が理解に苦しんだものや、使いこなすのに時間がかかったものが多ければ多いほど、新しくそれにチャレンジしようとする人の助けになる文章が書けるんだと思う。

 

従来の wgld.org のテキストのように、単純に WebGL に関するテキストを引き続き拡充しつつ、GLSL 関連の新しい分野の情報を取り入れていきたい。そのためには、もう少し自分自身の理解が深まっていないといけないように思う。

特にレイトレの分野はいまひとつわからない。数学をちゃんとやっておけばよかったと思うことがほんとに多い。ま、だから今遅ればせながら勉強しているわけなんですけども。

 

f:id:doxas:20140402154209j:plain

 

レイマーチングでは、上の画像のようにトーラスをねじったりすることもできる。この分野に触れる前には思いもよらなかったような方法で、トーラスを表示したりライティングしたり、あるいはこうして変形させて表示させたりできるのだから本当にすごい。この感動を早く多くの人に味わってもらいたいと思う。

 

さしあたって、フラグメントシェーダのみでノイズの生成と、そのノイズを使った地形のレンダリングができるようになることを当面の目標としていた。これに関しては達成できたので、基本的なレイマーチングの部分はもうテキストを書いてもいいかなと思ってる。

 

時間がいっぱいあれば、書けると思うんだけどな。

焦らず、がんばろう。

 

WebGL 開発者フォーラムにてゲーム作品投稿イベントを開催します!

2月に行ったバレンタインデー企画に続き、WebGL 開発者フォーラムとしてゲームの投稿イベントを開催したいと思います。

 

Twitter ではすでに告知させてもらったのですが、一応こちらでも告知しておきます。

詳細は、下記のリンクを参照ください。

japan webgl developers - Google グループ

 

ちなみに、Google グループへの参加は強制ではありませんし、グループに参加していなくても要件さえ満たしているなら、どなたでも作品投稿を受け付けようと考えています。せっかくなのでグループにも参加してもらえたら、という程度ですのでお気軽に参加を検討していただければと思います。

 

以上、告知終わり。

 

さて、最近はレイトレーシングや、レイマーチングについていろいろ調べていた。自分にとって未知の領域過ぎて、あまりにもわからないことが多かった。

そもそも、レイトレやレイマーチングで必要になる知識や技術は、本質的には WebGL で必要となる技術と同じだ。ただし、より数学的な理解を必要とする……ような気がする。

そしてフラグメント単位で処理しなければならない都合から、冗長でも見た目が上質ならそれでいいという風にもなかなか考えにくい。まして、ネイティブアプリならともかく WebGL だ。速度を過剰に犠牲にすることは好ましくない。このあたりは非常に難しい問題だと感じる。

 

f:id:doxas:20140326015105j:plain

これはレイマーチングでレンダリングした溶岩っぽい雰囲気の地形サンプル

 

こんなレンダリング結果が、まさかフラグメントシェーダのみで表現できるなんて最初は思いもよらなかった。その仕組みを理解すれば、なるほどできないわけはないのだと気がつくけれど、そういう発想がなかったし発想が仮にあっても実現する知識は自分にはなかった。

 

今は、少しくらい理解できてきたように思う。

いずれ、もっともっと成長して解説テキストを wgld.org に書きたい。たくさんの人に、ここ数週間で自分が感じた高揚感や感動を体感してほしい。

 

フォーラムでゲーム投稿イベントを企画したことによって、たくさんの人が WebGL に興味を持ってくれたらうれしい。WebGL はまだまだ一般には謎技術だ。いろんな分野の人に、いろんなサプライズや驚きを届けたい。きっと、自分がレイマーチングを勉強することも、それにつながる一つの道であると信じている。

 

急に話が戻ってしまうけど、フォーラムのゲーム企画、少しでも興味があるならぜひ参加してほしい。

ライブラリを使っていたっていい。外部ツールを全力で活用したっていい。それこそ、私のようにスクラッチで WebGL を書いてほんと冗長だよこれパネェなと溜息を洩らしたっていいと思う。

 

私がプログラミングを始めたきっかけは、ゲームを作りたかったからだった。

私が WebGL に可能性を感じたのも、ブラウザで 3D のゲームが普通に動くようになる未来に心が躍ったからだ。※もちろんそれ以外にもいろいろあったのでしょうけれど

誰かにとっての、そのキッカケを。

自分の力でひとつでも多く生み出したい。

 

がんばっていいゲームを作ろう。

いや、いいかわるいかよりも、一生懸命ゲームを作ろう。

楽しみだなあ。

GLSL ray marching な今日この頃

f:id:doxas:20140319055011j:plain

 

GLSL で ray marching を試している。

Unity が WebGL 出力に対応する話で世間は非常に盛り上がってますね。わたくしはひたすらに GLSL とけなげに向き合っております。

 

上の写真のとおり、レイマーチングのみでオブジェクトの描画やライティング、あとは模様の投影みたないことまではできるようになった。色が緑なのは、法線をそのまま色として出力しているからだ。

実質的な勉強時間は計算してないけど、自分で予想していたよりはスムーズに進んでいるような気がする。

 

画像とはまったく関係ないけども、レイマーチングではなく単純に GLSL を使った二次元での映像出力も同時進行で勉強中。自分なりの記述でパーリンノイズ風味なことをやってみたり、フラクタルを描いてみたりしている。

 

ここで培われたものは、最終的にレイマーチングで terrain 出力するという目的に向かっている。それも、数日中には挑戦することができそうだ。うまくいくのかどうかは、まだやってみないと何とも言えない。がんばろう。

 

レイマーチングは、おそらくレイトレーシングの手法の一つにしかすぎず、レイトレーシングをきちんと学ぶ必要性を感じている。嬉しいことに、これに関してはすごく熱心にサポートしてくれる先人がいるので非常に助かっている。

そんな偉大な先人の、優秀なレイトレ野郎をさがす旅路のその傍らに、自分はボーっと突っ立っていたのかもしれない。期待に応えることが責務とは思わない。それが重荷であるとも感じない。でも、単純に自分自身のためにも期待に沿えるように努力していきたいなと思う。誰かが喜んでくれることは単純にうれしい。

 

自分が成長すれば、それを wgld.org を通じて多くの人にシェアすることができる。

自分が誰かにとっての偉大な先人になりたいのではない。同じなのだ。誰かが喜んでくれるなら、それが自分より優れた技術を持った偉大な先人であろうと、これから WebGL を学ぼうとする人であろうと、同じなんだ。

自分がもっと貢献できたらいい。そんな曖昧で壮大で、ある意味自己満足な目的のためだけに、私は努力を重ねることができる。

フラグメントシェーダとフラクタル

f:id:doxas:20140313034831j:plain

 

フラグメントシェーダを使ってジュリア集合を描いてみた。

ネット上には詳しいものからざっくりしたものまで解説がたくさんあった。理屈を理解してからコードに変換したけど、むしろ理屈を理解することのほうが大変だった。

 

一度コードのベースができると、あとはパラメータを適当にいじりながら調整しているだけでこれだけインパクトの強いものが作れる。フラグメントシェーダでこういうことをやろうと考えるのは、ある意味自然なのかもしれないけど、やっぱり最初に考えた人はすごいと思った。

 

ray marching の技法で GLSL から擬似的な立体を表示することにも挑戦してみた。

 

f:id:doxas:20140313035258j:plain

 

うわあ、たまごがいっぱいだあぁぁ。

 

一昔前までは、GLSL を使ってフラグメントシェーダでなにかをレンダリングすること=メガデモ、みたいなざっくりしたイメージしかなかったけど、やれることが増えてくるといろいろ考え方も変わってくる。

いずれ、wgld.org でもそれぞれしっかり解説できるようになりたい。

 

自分のなかに、新しい知識や発見がものすごい勢いで流れ込んでくる。

はじめて DirectX が言うことを聞いてくれた時も、はじめて WebGL が言うことを聞いてくれた時もそうだった。この感覚には中毒性がある。

 

歩みを止めずに、がんばりたい。

スキニングはちょっとまだ環境的に深いところまで探求するのが難しい。そもそも、ボーンとかモーションのついたメッシュを吐き出せる系のソフトが満足に動く環境がない。

それを言ってしまうと、フラグメントシェーダでごにょごにょするのにも、リアルタイムプレビュー的なライブコーダーがほしいんだけど、それも難しいようなスペックのマシンを使ってる。ほんと、この環境をなんとかしたい。

 

まとまって収入が入る見込みもないし、どうしたもんか。

とりあえず、できることをできるだけ、その範囲の中で全力で。

がんばっていこう。

すごい人たちがいっぱいいるというはなし tokyo demo fest 2014 に寄せて

もうすぐ TDF(tokyo demo fest)が開催される。

それに触発されてというわけではないのだけれど、最近デモについていろいろ興味があって調べたり動画を見たりしてる。※とはいえイベントには参加できないので非常に残念。

 

すごい人がゴロゴロいて、自分の知らない世界がそこにはあって。

感心してばかりの毎日である。

 

Web 上で見つかる情報や出来上がった成果物を見るにこの人とんでもないな! という感覚を本当に毎日のように感じる。その技術力や発言、出来上がったデモの完成度に感心してばかり。会ってみたい、話を聞いてみたい、というかむしろ隣にいて教えてほしいと思う人がいっぱいいる。

世の中広い。

 

たとえば wgld.org を見に来てくれる人にとっては、自分もそういうふうに見えているのだろうか。正直なところ、自分ではそれほど自分自身を評価できないことが多くて最近はこれがもっぱらの悩み。

 

自分に自信がないと、いろんなところに自信のない発言が増えてくる。これってあんまり良くないと思う。

弱気な発言ばかりする人の言葉には説得力がない。少しでも誰かの役に立てば……という善意も、やはりなんの覚悟もなく発揮するべきじゃないと思う。

 

誰もが最初は初心者なんだからと、wgld.org の筆者としての自分は語っている。

この気持ちは、新しいことに挑戦しようとする自分自身に対しても、しっかり言い聞かせないといけないと思う。まずはなんでも、やってみてから判断するようにしたい。

 

デモは一朝一夕でどうにかなるものではないということがわかってきた。

まずは、自分にできることの延長線上にあるものから、やっていきたい。

WebGL で GLSL を使った映像のみのデモシーンを作りながら、少しずつ憧れのプログラマたちに近づけるように頑張ろう。

 

幸い、wgld.org を今月中に 3 回は更新しようと思っていたんだけどその見通しは立った。ゲームを作るか、それともデモに挑戦するかの二択で迷っていたけど、とりあえず先にデモを作る上で必要な、ベースとなるコードから書き始めることにする。

なにせ、今使っている PC は本当に貧弱なので、リアルタイムにフルスクリーンでレンダリングするデモみたいなのは、もう全然 FPS 維持できないしまるで無理だ。js でイベント拾って、キー入力やクリックで 1 フレームずつ進めながら動作確認とかするしかない。

想像するだけで地獄だな……これ。

 

最低限、シェーダを書いてテストして……というルーチンワークができるところまで作れたら、ちょっとゲーム作ろうと思う。

どんなのがいいかなぁ。

見た目に多少はインパクトがあるものがいいな。ドット絵とかは自分である程度できるんだけど、モデリングが苦手なのが問題だな。

お勉強のはなしと自宅 PC のはなし

wgld.org を更新して、ひと段落。

今回の内容はいわゆる VTF だったんだけども、まさか自分が VTF を一丁前に語る日がこようとは思いもよらなんだ。

 

VTF というと、某格闘ゲームで使われてたみたいな話がそこらじゅうに転がってて、昔からすごいなあとばかり思っていた。自分がそれを実際に使ったり、よもや解説したりなんて想像もしてなかった。

ゆっくりだけど、成長していることを少しだけ感慨深く思った。

 

頂点テクスチャフェッチに関しては、ジオメトリシェーダがあって初めて意味を成すものなんだってことは知ってるけども、WebGL にジオメトリシェーダがやってくるのはいつになるのだろうか。

あらかじめ OpenGL のプログラムを使って触っておけば、いざその時に解説しやすいのだろうけどそんな余裕は、心身ともにまだちょっと足りない感じがする。

いまは、自分の理解できる範囲のことはできるだけアウトプットしておきたい。多くのプログラマにとって有用な入門サイトを作ること、これに注力しておきたい。

 

同時に考えるのは、やっぱり自分自身が成長するためには、自分が学ぶ側の立場であり続ける必要があるんだなってこと。

一般にメガデモと呼ばれてる界隈に、今はすごく興味がある。

まさにナイスタイミングで TokyoDemoFest 2014 が開催されるんだけど、これにはいけそうにない。いきたいなあ……いきたい。

 

さしあたっては、今理解できることをまずアウトプットできるだけしきってしまいたい。そうすることで、自分はインプットに集中できる気がする。

インプットしたいのは、デモに関すること。

これに際しての一番の問題は、自宅の PC がもう寿命っぽいこと。XP だし、たびたびブルースクリーンを連発してくださるので、ろくにテキストも書けない。これは困ったな。

 

だれか、心のやさしい方。

金をくれとは言いません。仕事をください!

PC 買い替えてルンルンでメガデモやりたいんですよ。ほんとに。

 

どっかに 20 万くらい転がってないかな。 ※ないです

今月はどうしましょうという話と無駄に長い前振り

以前と比べると、最近は幾分か自分のプログラムを書く時間がある。

しかし、それでも尚。

世の中の多くのプログラマの人たちはいったいどこでどうやって時間を作ってコードを書いているのか、不思議になることがある。どう考えてもプライベートな時間を削ってやっているのだろうけども、どうにも自分がうまく時間を管理できないせいかひどく感心してばかりだ。

とはいえ、wgld.org のネタもいくつか構想だけはあって、今はサンプルとテキストを同時進行で書いている。正直、あまり派手なサイトではないというか、話題性のあるサイトではないので非常に地味にだけど、少しずつ、充実していっているのかなと思う。もう少し、更新頻度が上げられればいいのだけれど。

 

先日、@clockmaker さんなどの著名な方たちが主導となり、WebGL のイベントの告知がされていた折、ぜひ参加したかったし気がついた段階では枠も空いていたんだけど、仕事の都合で断念した。

本当に、こういうときは自分の環境をちょっと悲観的に見てしまう。

反射的に、そして必然的に。いずれ独立したい、そう思った。そうしたら自分の予定は自分で決められるじゃないか! ただしそうなったらなったで、逆にむしろ勉強会に参加している場合ではなくなってしまうのかもしれない……というかその可能性が大だ(笑)

 

きっかけはどういう形であれ、WebGL という単語が多くの人の目に留まることはいいことだと思う。願わくば、自分もできる限りそういう場に参加してみたい。

参加してみたいと考える理由には、いくつかある。

ひとつには、単純にすごい人たちと接点を持ってみたい。自分のレベルを推し量るためじゃなく、オーディエンスとしてでかまわないから最前線のエンジニアの話を聞いてみたいという単純な欲求。それに、人脈は大事だから。

 

ふたつには、そういう空気に慣れておきたい。自分はコミュ障というほどではないにせよ、基本的に人見知りするというか人と関わるのが「嫌い」だ。これを克服したい。人付き合いができないのではなく、嫌いというのが我ながら性質が悪いなと思う。

人前で話すのはできるかできないかで言えば間違いなくできる。ただ好き好んでそれをやってきたかというと、やってきてない。これは甘えだと思うの。

 

みっつには、結局どこかで安心したいのだと思う。

自分がここまでやれてる! ということに自信を持ちたいのかもしれないし、もっとがんばらなくては! というところに対する背中を押すなにかがほしいのかもしれない。自分が優れていると確信できれば、当然安心できる。自分に足りない部分が多いと確信できれば、がんばる気力が生まれ結果として自分の動機が固まり安心できる。

なんというか、不器用である。

 

今回は、自分が参加できないところで、誰かが WebGL の普及に一役買ってくれる。

いずれは、自分がその中心に居ながらに、WebGL の普及に少しでも貢献したい。

そのために必要なのは、きっと自分の世間に対する影響力をもっと磨き広げていくことだと最近感じる。

すごいデモや、すごい論文や、すごい洞察力や、それこそいろいろなものに惹かれて人は誰かに注目したり twitter でフォローしたりするのだろう。自分にはきっと、そういう輝かしい部分が足りないのだと思う。

もっと、まずは自分の発言のひとつひとつが多くの人の目と耳に届くようにしなくてはいけない。そのためにも、wgld.org の地味~な更新作業を地味~に進めつつ、もう少し見栄えのするものも、作っていきたい。

 

本当なら、ちょっとくらいカッコいいゲームとか作りたいのだけど、大変なのはやったことがあるので想像がつく。まずは小さなゲームをぽつぽつ作って公開していくのがいいのかなと思う。並行して、なんか超大作もちまちま作ってとか、想像している段階では非常に楽しい。

 

3月だ。

今月はどうしましょう。

とりあえず、wgld.org を最低3回は更新できるようにがんばろう。今月が終わるころまでには、メガデモを作り始めてるくらいになってるといいんだけどな。

あと、小さいゲームを今月中に作れたら作ろう。今年という年が半分終わってしまうまでに、少しくらいがんばったゲームかデモを公開しよう。

いろいろ具体化しつつ、進めていこう。

がんばるぞ。