「3DCG」に関する日記

無題

IE8を入れました。
早い早いとMSさんは言ってますがまずサーバーの応答が遅いのでどうにもなりません。
他のブラウザも速さを自慢しているようですが、逆に言ってそういうブラウザが必要なほど重いサイトが多いというのがどうにかならんのかなーって思います。

ちょっとカプセル型を描画する関数を作ってみました。
メッシュを作る方法が良く分からなかったので、ひとまず座標を指定して直接描画する関数にしてみました。
カプセル座標における単位ベクトルの作成で座標が左手座標系から右手座標系に変わってしまってカプセルが裏返ったり、インデックスがずれて穴が開いたりもしましたが、何とかうまく表示できるようになりました。
もうちょっと体裁を整えたらプログラミングのページにまたアップしたいと思います。

1242397309.png

無題

フラクタル地形は一度分割した地形の重なり合う場所で多重に高さを指定していたために一回目の乱数でできた地形と二回目の乱数でできた地形が繋がってしまいちぐはぐになっていたのがおかしくなった原因でした。
そんなわけで、昨日の画像と高さ情報だけは遜色のない山ができるようになりました。
いろんな都合上家では動かせないのですが。

あと、トップページも微妙な改修の第一ラウンドが終了しました。

アーミー隊解散のお知らせ

ちびロボ!ではついにアーミー隊が解散。
隊員の一部が訓練に厳しさに耐えかねて脱走したのです。
軍曹は二度と大切な仲間を失わないためにより厳しい訓練をしていたのですがそれが裏目に出たのです。
しかし、優秀で勇敢な隊員ちびロボが、猛獣タオのアジトに単身乗り込み、大切な仲間グワム二等兵の形見のドッグタグを取ってきたことで、グワム生存の希望がわき、アーミー隊は再び、以前より強く、結束したのです!(脱走した腑抜け除く)
んで、アーミー隊はプランを練るということで活動停止状態になり、仕方なく残りの腑抜けの相手をすることになりました。
そして、腑抜けの一人メンヒスのチキンレースに挑戦してみると、よくわかんなくてデタラメにブレーキを踏んだら偶然にもがけすれすれ車体の半分が飛び出す形で停止し、おそらく最高評価であろうSをいただきました。

プログラミングのVB小ネタをちょっと更新しました。
偶然間違えて全角入力モードでコードを打ち込んでしまって気付きました。
もはやトリビアですな。

3Dのあれは形としては完成。
羽が動かないのを気にしなければそのまま3Dゲームに組み込めるようになっています。

1123855921.jpg

ドット絵レンダリング

どこぞの掲示板でちょっと触りの部分を書いたのですが、ここではもうちょっと具体的な話をします。
ドット絵作成には、重要な特徴をつかんで他を省略するということが大事になってきます。
それは人間の感性によるものが大きいので3Dレンダリングエンジンに計算させることは困難ですが、そもそも3Dモデル自体基本的に人間の感性で作られているものなんだから、特徴の重要さもやはり人間の感性を数値化して3Dモデルにデータとして組み込めばよいのではないかと思っています。
では重要度はどうやって組み込めばいいか。
じっくり描くのなら手描きで充分。リアルタイムにレンダリングしてこその3Dなので、とりあえずDirectXかOpenGLで使えるものがよいでしょう。
となれば、扱えるデータはある程度絞られてきます。
例えば、テクスチャとして、重要度マップを組み込む。
特定の範囲の色と重要度を対応付け、小さい場合は重要度の低い部分はレンダリングしない。
難しいのは、1ドット幅の輪郭。まあこれは頑張って計算すれば何とかなる。
ってなわけで、気が向けば実際に作ってみたいと思います。

透明レンダリング

3Dの新しい表現を考えてみたり。
トゥーンレンダリングは影を極端に強調したシェーディングと輪郭表示に関する技術を使うわけですが、たとえば、ドラクエ3のレムオルのように輪郭だけを表示して本体を表示しないとか。
しかし、それは意外に難しいことなのです。
なぜなら、トゥーンレンダリングの輪郭抽出は、本体があることが前提であるため本体を除くと輪郭が輪郭でなくなってしまうのです。
したがって、普通にトゥーンレンダリングで本体つきの輪郭を描き、あとから本体を抜くのです。
真っ先に思い浮かぶのは、本体に向こう側の景色を写して見えなくする方法。
もうひとつは真っ黒な背景に真っ黒な本体と白い輪郭を描き、白い部分だけを背景と合成する方法。
最初のは「TWINTAIL LOVERS.」の「真・ステルス」と「トゥーンシェーディング」を組み合わせて使えばそれなりにできそうです。
もうひとつのほうは、輪郭用テクスチャを用意してそこに輪郭を描画して、ビルボードで表示すればOK。
前者のほうが前後関係は正確に表現されますが、後者のほうが輪郭以外にゆがみが出ません。
いずれにしても実際に作って確かめてみないことには確かなことはいえませんが。

「Bomber丸World」のBGMアップしました。
研究所ダンジョンボスですよ。
かっこつけたつもりがぷぴーとかぴっぴこぴーとか入ってて台無しな曲ですよ。
トゥッティとはどんなものかなんとなくわかってきた予感。

マテリアル

う~ん、もともと色のあるメッシュでトゥーンレンダリングをすると元々の材質(色)が無効になってしまいます。
材質にはライティングの設定なんかも入っているためライティングをオフにすると材質もろとも無効になっちゃうようです。
例えば材質ではなく頂点カラーを使うとか?
例えばテクスチャに色をつけるとか?

あう~、レポートやらねば…
明日中に終わらせて月曜日は休みたい。

鉤爪ロープで気絶したり

というわけでトゥーンレンダリング第2ラウンドに取り掛かり始めました。
大まかな原理は過去の日記に書かれているのでそちら参照。

「ゼルダの伝説-風のタクト」をやってました。
ゴードンの音楽変化パターンを見極めたり(サントラでの01:02までが顔行動開始前、それ以後が顔行動開始後に対応している)、ファントムガノンに回転斬りジャンプ斬り空き瓶で対抗したり特殊攻撃を成功させたりし(剣攻撃のときにA!)、ジークロックにいろんなアイテムを試してみたりして(仮面破壊後は何でも効く)、最終的にジークロックは置いてある爆弾を突っついて自爆。
やっぱ大ボスは弱いよ。

実質三行

トゥーンレンダリングの続きでもやろうかと思っています。
まずはトラのテクスチャを貼れるようにして、スペキュラを使えるようにして、シェーディング用のテクスチャに小細工を仕掛けて、でも輪郭抽出はやめておいて、どうせ輪郭つけるなら先進的でエレガントで、しかし不完全な方法よりも、原始的で力任せで、それでも確実な方法をとりたいと思っています。
できるんかいな…

再インストール

昨日忘れたのはスペキュラ反射のこと。
亀仙人の頭が輝いている、アレです。
確かスペキュラ反射の強さを求める公式もあったはずだからもう一つテクスチャを用意して実現できそうです。

最近パソコンの調子が著しく悪いのでOSを再インストールすることにしました。
一週間ほどの間日記が書き込めないかもしれません。

トゥーンシェード再び!

アクセス解析のカテゴリに登録されてしまったからには仕方がないということで、アクセス解析にはありがちな統計機能をつけてアップしてみました。
えーっと、アップした、それだけ。

トゥーンレンダリング、前はトゥーンレンダリングをONにしたら虎のテクスチャがはがれていましたが、テクスチャを合成する方法でテクスチャを保持したままトゥーンシェードできるようになりました。
そうすると逆にトゥーンレンダリングをOFFにしたときにテクスチャが足りなくなって虎のテクスチャが無効になってしまうのですが、そのときは前の色をテクスチャにそのまま反映することで普通と変わらない状態にすることができました。
んでもって、シェーディング用のテクスチャにはちょっとした小細工を仕掛けておいて、トゥーンシェーディングの輪郭無しでもある程度境界がわかるようにしてみました。
えーっと、あとは・・・・忘れた!

毎度毎度ギリギリです。

PSPのCM見たんですが、はめ込み画像ではありませんということだけをひたすら強調して、どんな面白いゲームがあるのか、といった一番重要な部分がすっぽり抜けている感じがしました。
ところで、はめ込み画像じゃないことはわかったんだけど、プレイしている人はどこ?
ワイヤレスコントローラでもつけてない限りはゲーム機本体に手を添えるかケーブルを繋ぐかしなきゃプレイできないはずなんだけど、手もケーブルも見当たらない。
つまり操作してなくっても動くってこと?
要するに動画垂れ流してるだけ?
たしか動画を再生するだけならGBAでも充分できるはずなんですけど…
http://www.playstation.jp/psp/

「スマブラDX」で新しい遊び方を開発してみました。
一人用の遊び方ですが、対戦モードを使います。
まず、設定でハンデをありにして、吹っ飛びやすさを2倍にします。
そして、自分のハンデを1にして、他は全部ハンデ9のCPにします。
すると、敵の攻撃を少しでも食らうとほぼ一撃KOされるようになり、逆にこちらからの攻撃では吹っ飛ばないどころか、よっぽどの攻撃でない限りひるみもしなくなります。
どれだけ吹っ飛ばされるかというと、ガノンちゃんの弱攻撃一発で、天井がなければ100%確実にKOされます。
あるときは触れられたことにすら気付かぬうちにスターフィニッシュされてました。
どれだけ吹っ飛ばせないかというと、ホームランバットのスマッシュが強攻撃並みにしか飛ばなくなります。
実際最大溜めジャイアントパンチをかましてもサムスはその場に倒れるだけでした。
敵の攻撃に全く当たってはいけないため、基本的に遠距離武器で攻撃しますが、ここであえてドンキーコングなどの肉弾戦のみのキャラを使うと白熱します。
ちなみにレイガンをシールドリフレクトされると即死です。
ファルコンに抱き付かれると即死です。
ピチューの雷食らうと即死です。
これで、体力制乱闘にして、全員レベル9にして、もちろん相手は3人チームで、全員落とさずに体力を0にして倒すというルールにすればベリーハードのノーダメージクリア並みに難しくなる…かもしれません。
私はベリーイージーのノーダメージクリアでいっぱいいっぱいなのでレベル9は1人だけにして、倒したやつから抜けていくという方式にして、アイテムを駆使してなんとか3人に勝つことができました。
やり直し回数数十回。

ふしぎのぼうし、グフーの倒し方がわからず断念。
あんまりいい回復アイテムを持っていなかったので最初から勝つつもりはなかったのですが、倒し方すらつかめずに終わってしまいました。

そうですそうです、トゥーンレンダリング!
あれ、あの勘違いがなければ、別の方法を考えていたと思うんですよ。
光の向きを計算して、その分だけテクスチャを傾けて…とか。
画像は右・左・右・左…を続いています。
ふぅ、これでふにゃ3D計画が実行できそうだぞ…

アクセス解析にて

新日記過去ログを2003年3月分まで入力しました。
で、そこでマインスイーパのことが書かれていたので、久しぶりにやってみたら、ハイスコア出しました。
中級50秒はなかなか速いんじゃないでしょうか。

アクセスログを回収してリファラを見ていたら、Googleからの訪問は激減していましたが、BIGLOBEのディレクトリサーチに登録されていたことがわかりました。
それもアクセス解析のカテゴリで。
あれ自分用にかなりカスタマイズされてるからそろそろ「MusicPlayer」と同じく完全自分仕様品にしちゃおうかと思っていたのですが、そうもいかなくなってしまったようです。
でも「TW Prog. Room」としてリンクしているところが他と違うところか。

テスト終了。
持ち込み可だった割には簡単だったので適当に回答。
途中式もいい加減。
大丈夫かな…

3D、自動で回るのを手動に切り替え。
ビューの位置を自在に変更していろんな位置から虎を見られるようになりました。
Direct3Dにはティーポットのメッシュを生成する関数があるそうですね。
実用性はともかく、練習用にメッシュを表示するときなんかには役に立ちそうです。

プログラミングのページにも説明つけるべきですかね…

世界の中心で虎が回る

「パネルγ」アイコン作りました。
何も表示されないけどせめてアイコンくらいは表示できるようにと。
あと、WM_PAINTメッセージを受け取ってBeginPaintとEndPaintだけするようにしました。
何もしてないときよりはマシなれど相変わらずぐちゃぐちゃ。

今日も3Dやってみました。
いろんなところから拾ってきたサンプルをつぎはぎして光の当たる虎を作りました。
カメラが回りライトも回ります。
本当は虎も回るはずだったのですが、いつの間にか回らなくなっていました。3Dの神秘です。
虎だけしかなかったら虎が回ってるのかカメラが回ってるのか区別がつかないので地面も用意してみました。
地面には法線ベクトルが設定されていないのでアンビエントライトしか当たらず暗くなっています。
ちなみに地面はこれまたどっかから拾ってきた世界地図で、虎に踏んでいるところはちょうどアフリカのあたりになっています。
ファイル置き場にそのときの画像があります。

家のパソコンでも3Dやってみました。
SDKに付属のサンプルをいろいろ改造。
やりたいのはトゥーンレンダリング。
球とか円筒などの簡単なのを表示しても面白くないから、チュートリアルの最後、Xファイルからメッシュを読み込んで表示するサンプルを使ってみました。
とりあえず虎のテクスチャは要らないので表示コードをコメントアウト。
そしたら灰色一色の虎が。
テクスチャ貼ってるだけの色もライティングもない虎だから当たり前ですけど。
で、ライティングのサンプルからその辺の処理引っ張ってきたら今度はほぼ真っ黒に。
これは環境光の色そのままだから、恐らく法線ベクトルが定義されていないために直接光の成分がなくなったためだと思われます。
と、とと、まてまてまて、もうひとつ、オブジェクト側では反射のしかたにも2種類あって、そのうちのアンビエント反射、要するに入射角と反射角が一緒ってことは、「ふにゃふにゃ」のビーム反射処理にも応用できるんじゃないか?
それでもって、話は変わってDirectMusic、これまたDirectX8では良さそうな機能が追加されてたりして、全面的に8使うようにしようかなと思っていますが、DirectDrawがなくなったことを考えると思い切れないのも事実だったりします。

パズルゲームを考えています。パネポン風味のやつを。
数色に色分けされた長方形(以後これをパネルと呼ぶ)を画面の特定の範囲にルールに沿う範囲で整然と並べ、任意の2パネルを交換することによりルールによって定められた数種類のパターンのうち最低一つに一致するようパネルの配置を変更し、パターンに一致したパネル全てを消去し、それにとって得点を得る、また、パネルが消去されたことに起因してパネルの配置が換わり、それにより新たにパターンに一致する配置を作り、連続して消去すること(以後これを連鎖と呼ぶ)、そして、一度の操作でより多くの、またはより困難なパターンに一致させることにより通常より多くのパネルを消去すること(以後これを同時消しと呼ぶ)、さらに連鎖動作中にパネルを移動することにより、連鎖終了後に再びパターンに一致するように配置し、連鎖を続けること(以後これをアクティブ連鎖と呼ぶ)により通常より多くの得点を得ることのできるゲーム、ということです。
もちろん違いもありますよ。

縦や横に並べるわけじゃない
これをやっちゃったらパネポンそのものでしょーが!
次世代らしく、四角形になるように並べます。
可愛い女の子が出ない
昔にも言ったことがあると思いますが、そんなもの私に期待するもんじゃありません!
そして本当に誰も期待していないんですね…
せりあがってこない
その代わり横からプレス機が迫ってきます。
横長
横から迫ってくるので横長にします。
マウス操作が基本
隣同士を入れ替えるのではありません。
好きなところ2箇所をマウスでクリックして入れ替えるんです。
パネルが多い
ちょっと理由があってパネル数を多くします。
多分目一杯パネルを出したら1000個超えると思います。
ほかにも、こだわりたい部分としては、BGMがあります。
パネルを消すとちょろっと短い音楽が鳴りますが、連鎖をすると短かったのがだんだん長くなって、派手になっていきます。
また、通常BGMも、得点や状況で切り替わったりします。
0点の音楽→1連鎖の音楽→1~100点の音楽→1連鎖→2連鎖→3連鎖→4連鎖の音楽→101~300点の音楽→ピンチのときの音楽→ゲームオーバー…みたいな感じで。
ゲーム音楽のインタラクティブ性というものはまだまだ挑戦できることが多そうです。

ヘッドフォン

学校のパソコンで昨日に引き続き3Dを頑張ってみました。
とりあえずネットでサンプル明後日適当に自分なりに書き換えて2Dポリゴンを表示して自己満足して3Dポリゴンも調子に乗ってやってみようとしたら突然リンカエラーが!
libci.libが見つかりませんって言われたって、そんなのリンクするような設定はしていないのですが・・・?
で、勿論早速MSDNライブラリで調べてみたわけですが、見つからない。
帰ってからもう一度調べてみたら、「古い iostream ライブラリ」とのことで、「最新だったら新しいの使えよ!!」などと思ってみたりもしたのですが、新しいのにどうやって変えればいいのか、新しいのに変えることで不具合が起きるんじゃないか、新しいのがまだ古いのを使ってるのに何故に古いものを切り捨ててしまったのか、などなど気になってしまって、別に何もしませんでした。(何

「ByteEdit」を更新しました。
選択内容を検索します。
ついでに言うと、ドラッグによる範囲選択と右クリックにもこっそり対応させたので、検索したいバイト列をドラッグで反転→右クリックから検索で、簡易ながらもバイト列の検索ができるようになりました。
そこそこ拡張しやすい形になっていたので両方ともちょっとだけ手を加えただけで実現できました。
こんな感じですぐできる更新をちょっとずつやって行くことにしてます。

前にヘッドホンが壊れてしまっていたので、学校の帰りにヘッドホンを買ってみました。
買いに行くと、6000円くらいのオープン型・3000円くらいの密着型・2000円くらいの密着型・1000円程度のオープン型があったのですが、6000円のは完全に予算オーバーで問題外、1000円のは用途から考えてふさわしくないと感じ却下、3000円のは2000円のと比べてどこがいいのかわからなかったので結局2000円のにしました。

ピクミンその他のゲームのページ、気が向いたのでアップしてみました。
ついでにリンク集もちょい整理。
そんでもって新日記公開。

立体感・平面感

レポート何とか合格貰いました。
まず考え方を変える。
平衡状態のときの電流を考えるのではなくそのときの電圧のみを考え、その電圧の差がすなわち電位差になってるわけで、その電位差が0ならば本当に平衡状態なんだけれどもちょっとずれてたら要するに0じゃなくって、ずれの影響を最小に各抵抗の値を決めてやればよいわけで、それをするにはとりあえず微分して0になる位置を見つける。
で、その値になるように測定すればよかったんだけれどもそんなことはしてなかったわけで、実験結果とは実は無関係。

メタセコイアでございます。
DirectXで使えるXファイルを出力できるということで導入してみました。
ライトエディションなのでいくつかの機能がありませんが、4面表示は視点変更で代用できるし、頂点カラーなどもプログラム側から指定してやればよいだけのことで、シェアウェア5000円も払うほど機能が足りないというわけでもないのでこれで当分は3Dモデリングは事足りるかと思います。

で、トゥーンシェーディングの方法というのがですね、いや、メタセコイアの話じゃありませんけどちょっと関連してます。
えっと、まず光の向きベクトルを考えます。
で、ポリゴンの、頂点の、光の向き成分を考えて、それが0以上だったら白、そうでなかったら黒、でも実際はそんな細かいところは計算してられないので、半分が白で半分が黒のテクスチャ画像を用意して、そのテクスチャのどこにポリゴンに貼り付けるかを計算してそれっぽく見せる。
輪郭線は、ちょっと大き目の真っ黒なモデルの裏面だけ表示。
極端な話、これ使えば白黒の3Dゲームというものができてしまいそうな予感。

レンダリング手法

とりあえず今日でテスト前の授業は終わり。
和風カレー丼を食べました。
食堂の普通のカレーよりおいしい。
20日からテスト。

3Dポリゴンモデルのエッジ抽出。
ポリゴンのひとつの辺が文字通り曲面の端であれば線を引く。
2つのポリゴンが共有している辺で、片一方だけが陰面処理で隠れていたら線を引く。
2つのポリゴンが交差する部分で線を引く。
こんなもんでどうだろう?
トゥーンシェードだと同じ色のポリゴン2つが重なって表示されていたら境界が区別できなくなるので。

積分因子とか全微分とか

今日は微分方程式の、完全なんたらかんたらとか一次線形ナントカとやらをやりました(いや、ナントカっていう名前ではなく)。
うん、なかなか意味不明。
チンプンカンプン。
ワケわかんない。
やってることは全微分の逆っぽいのでその辺をどうにかこじつけて解けるようにして無理矢理納得させましたが。

ときおのやつ、今度はプログラミングに「超リアルプログラミング」とかいうわけのわからんもんを追加するとか抜かしております。
何やら実物を目で見るか映画並みの画質でCGを描いたり減衰回折干渉まで考慮に入れたサウンドを再生したりと、どこぞのスーパーコンピューターでもてこずりそうなことをやってみようという無謀極まりない企画だそうです。
つーか当の本人にそのプログラムを書く気はまるでなし。
これこれこういうことをするときには、細かいけどこういうところにまで気をつければ限りなくリアルになるよ、ということだそうです。
まるっきりバカじゃん。