過去の独りごち/独りごとはこちら
過去のJavaアプレットは
こちら

 

3/20 Shaderによる逆襲

 フォグ…はつけてません。へへっ。

 面倒くさいのでいままでやらなかったのですが、まずは地形の描画にシェーダ1.1を導入してみました。

 vsaが一時期ヘソを曲げていて、以前正しくアセンブルできていたVertexShaderソースをまったくアセンブルできず、どうなる事かと思ったのですが、最新版のDirectX SDK付属のvsaなら正しくアセンブルできる上に、以前はcl.exeに依存していたプリプロセッサも内蔵するようになったらしく、cl.exe無しでdefineマクロなどが使えるようになったので、より便利になりました。僕に。

 シェーダで何をするかというと、以前…といってももう何年も前に実験していた、Rayleigh/Mie散乱による空の描画と、同様の原理による地形の描画です。

 ついでに地形には雲の影が落ちるようになりました。雲の影の描画は異様に簡単で、頂点ワールド座標のx,z座標を雲用のテクスチャ座標に押し込んで、後は適当な倍率を掛けて、流れを表現するためにオフセットを足し込むだけです。多分、シェーダを使わなくても昔のレンダリングステートでガチャガチャやる方法でもできるんじゃないかなぁ、と。こんな良いエフェクト、考え付いた人は天才だとしみじみ思います。

 けれどRayleigh散乱のパラメータの調整がかなり難しく、何をやっても煙いか暗いの二択になってしまいますが…

 SSを見るとわかるとおり、地形以外にはエフェクトがかかりません。メッシュはともかくとしてSXLibではビルボードにシェーダを適用するのは色々と面倒(というか、SXLib自体に手入れが必要)な上に、前景を背景から視覚的に分離する効果もあるよねと自分に言い訳をして、地形以外には適用する気が無かったりします。

 しかし、空気というのは空気のような存在というように、存在感の希薄な物の代名詞のように言われますが、その空気に自己主張をさせると、随分と絵の作りが変わってくる感じがします。僕が適当に作った96ポリゴンの木でさえ青々として見えてきます。というより空気が青いんですが。

 Rayleigh散乱というと、森の木漏れ日などは散乱系に光を入射した時、光の進路の外から光の進路を観察できる、いわゆるチンダル現象によるものですが、これも当然Rayleigh散乱が原因になっています。ライトマップによる計算結果が折角あるので、それを利用して何かできないかなぁ、と考えているんですが…はて。いつも「こういう絵」というのは割合に浮かぶものですが、実装するとなるとその労苦は熾烈を極める事となります。挫折コワイ。

 森のステージというのも当然考えています。ええ。香霖堂とか。

 

 …なんか、すごくがっかりした顔してませんか?

 

 でも、近寄るとモデルがショボいのが分かってしまうんです…近寄ってはならない!

 次は…地面と空の境目がブツ切りになっててみっともないのでなんとかしたいですね。現状では、マップ→空の二層構造になっているわけですが、ひぐらしデイブレイクPSUなどを参考に、マップ→立ち入り禁止エリア→|三次元と二次元の境界|→やや遠くの景色(x2レイヤー程度)→空模様の四層構造を実現したいところです。

 境界に関する事はスキマ妖怪になんとかして貰いたいんですが、プログラマは常に孤独な物です。

 ほかにも、カメラのめり込み時の挙動やロックオンしていない時の視点の上下移動とか、そもそもゲーム部分のダメージ処理やら勝敗時の処理やらも実装したいですが、しばらくはヘボいデザイナーモードです。シェーダの実装もデザイナーの仕事なのです。アメリカのゲーム開発チームではデザイナーではなくプログラマーにシェーダプログラミングを任せようとすると、片手でドーナツ食って片手でキーボード叩いてるような連中に、俺の芸術作品を任せられるか!と怒られるそうですから。

 アメリカのプログラマはドーナツが貰えるそうです。良い人材がアメリカに逃げるわけだ。日本のソフトハウス(IT関連企業ではない)には公的資金を投入して、水羊羹とほうじ茶とを配るくらいしないと、アメリカとの距離は広がる一方ですよ。

 でも、結局儲けるのは僕という筋書きです(何故

 

Taku Hayase(SANDMAN)

戻る