[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ゲームを作ってみて、いくつか思い知らされたことがあるのでメモしておきます。
1.シェーダはなるべく低いバージョンでコンパイルしよう!
これは当たり前のことだと思えるかもしれません。
あんまり高いバージョンにしてしまうと、そのバージョンに未対応の
GPUでは動かないからです。
でもぼくは実は今まで全部(1.1ではなく)2.0でコンパイルしていたのです。
VertexShader = compile vs_2_0 MyVertexShader();
PixelShader = compile ps_2_0 MyPixelShader();
理由は「いちいち調べるのめんどくさいからもう全部2.0でいいや」というもので、
昨日まではこれでも差し支えなかったのですが、
ついに昨日、「時には1.1にすることも考えなきゃいけないかな」という気分になりました。
古いDellのパソコン(にGPU、ATI Radeon9250を付けたもの)でゲーム
を試しに動かしていたのですが、
なんと弾と爆発が表示されません。
これではゲームになりません。
嫌な汗が出ました。
これはGPUがシェーダーモデル2.0に対応していないからだろうと思い、
大急ぎで弾と爆発のシェーダーのバージョンを二つとも1.1に変えました。
(バージョンを下げたことで、使えない機能が出てきて、新しいパソコンでも上手く動かなくなる危険性もありましたが、大丈夫だったようです。)
すると幸い古いパソコンでも上手く弾や爆発が表示されました。
めでたしめでたし
この話の教訓は、「ときどきでいいですから、バージョン関係にも気を使いましょうね」ということです。
ちょっぴり反省です。
2.描画をするときにはパフォーマンスも考慮しよう!
もちろんパフォーマンスを考えすぎてコードが可読性の低い、ぐちゃぐちゃなものになってしまってもいけません。
ものの本によるとパフォーマンスを考えるべきなのはプログラムの2割で、残りの8割はパフォーマンスにさして影響がありません。
そこでぼくは描画するときはパフォーマンスをあんまり考えていませんでした。
しかし昨日、古いDellのパソコンでゲームを動かしたところ、弾を撃ったときに信じられないくらいノロくなってしまうということを発見したのです。
原因はどうやらピクセルシェーダに負荷がかかりすぎているようで、たとえば弾を撃ったばっかりで弾が画面のピクセルの多くを占めるような場合にはものすごく遅くなります。(しかし弾が遠くに行ってしまい小さくなればスムーズに動きます。)
本当に原因がピクセルシェーダなのかはわかりませんが、えらくリッチな描画をやって問題が起きたというのも事実です。
以前は弾はビルボードで描画していたのですが、そのときには快適に動いていました。
つまり描画はパフォーマンスに影響のある2割だったということです。
しかしながら新しいパソコンでは遅くなったりはしていないようなので、弾の描画を以前のようなしょぼいものに戻すのもしのびないですね。
ですから教訓としては、「処理の遅いパソコン(グラフィックスカード)のために複数の描画方法を用意しよう!」といったところでしょうか・・・
でもめんどくさいですね。うーん・・・