mieki256's diary



2014/12/30(火) [n年前の日記]

#1 [dxruby] Ayame.dll にはループ再生位置の指定機能が実装されてることを確認

ayame.so のビルドが手元で通るようになったので、例のループ開始位置云々を実験。テキトーなサンプルポイント値を決め打ちで渡すように修正してビルド。…ちゃんと途中からループ再生された。

つまり、Ayame.dll 自体は、ループ開始位置を指定する機能が実装済みだった、ことが自分の手元でも確認できました。

あとは ayame.so 側で対応してもらえればありがたいのだけど…。

サンプル値が確認できる波形編集ソフトについてメモ。 :

フリーで使える波形編集ソフト、Audacity なら、波形を見ながらサンプル値が確認できる。下の方に時間が表示されてるけど、小さい三角を押してリストの中から「サンプル」を選べばサンプル値表示に切り替わる。

同様に、フリーソフトの SoundEngine Free も、上の方の「サンプル」ボタンを押せばサンプル値表示に切り替わる。

なので、「サンプル値を指定せよ」な仕様で問題無いはず。

#2 [ruby] Visual C++ で Windows版RubyのC拡張ライブラリがビルドできるか実験

記事の順番が前後しちゃってるけど…。Visual C++ を使って、Windows版RubyのC拡張ライブラリを作れるのかどうかが気になってきたので試したり。

環境は、Windows7 x64 + ActiveScriptRuby 2.0.0 p353 (mswin32版) + VS2010(Visual Studio 2010 Express) + Windows SDK。

_ActiveScriptRuby and Other packages によると、ActiveScriptRuby 2.0.0 は VS2010 のライブラリとリンクしてる、と書いてあるので、VS2010 を利用。

最初、VS2010上でdllをビルドしようとしたけど、出来上がった .dll を .so にリネームして使おうとしても「読み込めねえよ」と文句を言われてしまった。なので、コマンドライン(DOS窓)上でビルドできないか実験。

Windows SDKのインストール。 :

VS2010 に入ってるコンパイラ等をコマンドライン上で使おうとする場合、以下のbatファイルを実行するとビルドに必要な環境変数が設定される。
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

それと、 _Windows SDK for Windows 7 and .NET Framework 4 てのが必要という話を見かけた。

Windows SDKは自分の環境でも以前インストールしてあったはずなのだけど、どうもちゃんと設定されてないところがあったので、アンインストールしてから再インストールしてみたり。

Windows SDK をインストールする際、不具合が3つある。以下の記事で解説されてる。

_Windows SDK for Windows 7.1 をインストールするとエラーが発生する - Microsoft.NET - Project Group
_windows sdk - WindowsSdkDir is not set correctly in Visual Studio 2008? - Stack Overflow

  1. Microsoft Visual C++ 2010 x86 Redistributable、Microsoft Visual C++ 2010 x64 Redistributable のバージョンが新しいと、Windows SDK のインストール時にエラーが出る。
  2. Visual C++ 2010 SP1 がインストールされてると、インストール時にエラーが出る。
  3. レジストリに、Windows SDKのインストール場所が正しく記録されていない。

1. の問題は、Windows SDK インストール前に、コントロールパネル経由であらかじめ Microsoft Visual C++ 2010 (x86|x64) Redistributable をアンインストールしておくことで回避できた。Windows SDK がインストールされれば、そのうち Windows Update で最新版に更新されるらしい。

2. の問題は、Windows SDK インストール時に、Visual C++ Compilers の選択を外してからインストールしてどうにか。その後、 _Windows SDK 7.1 用 Microsoft Visual C++ 2010 Service Pack 1 コンパイラ更新プログラム をインストール。

3. の問題。vcvarsall.bat を実行した際、〜\Common7\Tools\VCVarsQueryRegistry.bat によってレジストリの値が読み取られ、Windows SDK のインストール場所が環境変数 WindowsSdkDir に設定されて、それを元にして環境変数 INCLUDE や LIB が設定されるのだけど。Windows SDK インストール時に、レジストリに場所が記録されてないので、環境変数 INCLUDE や LIB の値がおかしくなってしまう。

仕方ないので、レジストリに自分で追加。WindowsSDKPathSet_HKCU.reg というファイルを作って以下を記述。右クリックして「結合」。
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A]
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\"

RubyのC拡張ライブラリをVisual C++でビルド。 :

  1. xxxx.c や extconf.rb を用意。巷の解説ページからコピペしてきたり。
  2. コマンドライン上で vcvarsall.bat を実行。Visual C++ (cl.exe等)が使える状態になる。
  3. ビルドに必要なヘッダファイルやライブラリファイルを、ActiveScriptRuby 2.0.0 のインストールフォルダからコピーしてくる。ruby/ というフォルダを作って、include/ フォルダ内にヘッダファイル(*.h)を、lib/ フォルダ内にライブラリファイル(*.lib)をコピー。
  4. Ruby側からコピーしてきた config.h の最初のあたりに、VC++ のバージョン決め打ちでビルドする記述があるので、場合によってはコメントアウト。
  5. ruby extconf.rb --with-opt-dir=ruby を実行。Makefileが自動生成される。中を覗いたら、コンパイラとして cl が指定されてたので、VC++用に出力された Makefile らしい。MinGW用の Makefile なら gcc とか g++ が指定されてるはず。
  6. Makefile 内のコンパイルオプション等を修正。-MD を -MT に変更。g- と -G6 を削除。-MT にすると静的リンクになるらしい。
  7. nmake を実行。VC++ は nmakeで、MinGW は make。
Init_Xxxx がどうのこうのとエラーが出たけど、関数名を Init_xxxx にしてみたら通った。何故。それでもとりあえず、xxxx.so ができた。

ActiveScriptRuby 2.0.0 (mswin32版) では使えたけれど、RubyInstaller 2.0.0 p451 (mingw版) では動かなかった。

MinGW版Ruby でも動く .so を VC++ でビルドするにはどうしたらいいんだろ…。ライブラリファイルが違うから無理なのかな…。でも、mswin32版用のバイナリなのに、mingw32版Rubyで動くものもあるよな…。どうやって作ってるんだろ…。

Ruby 1.9.2 mswin32版をインストールして同じことを。 :

以下の記事を読んでるうちに、Ruby 1.9.2 mswin32版を対象にしてビルドすれば mingw32版Rubyでも動くC拡張ライブラリができるのでは、と思えてきたので試したり。

_Ruby2.0.0-mswin32版のDXRuby1.4.0 - mirichiの日記
_DXRubyコンパイル - mirichiの日記

_Release - Ruby-mswin32 (ja) から、ruby-1.9.2-p136-i386-mswin32.zip をDLして解凍。任意の場所に置く。この版は VC6.0 でビルドされてるから MinGW と互換性がある、らしい。

pik または uru を使って、他のバージョンのRubyと切り替えて使えるように。

登録。
pik add C:\置いた場所\bin
uru admin add C:\置いた場所\bin

登録されたか確認。
pik list
uru ls

切り替え。
pik 192
uru 192p136

簡単な *.c と extconf.rb を用意して、前述の手順と同じことをしてみたら、*.so ができた。mswin32版Rubyから呼び出せた。試しに、mswin32版Ruby から、mingw版Ruby に切り替えて使ってみても動いた。なるほど、VC6.0 でビルドされた Ruby のアレコレを使えば、mingw版Rubyでも使える、と…。

ayame.so のビルドも試してみた。 :

調子に乗って ayame.so のソースでもやってみた。環境変数 INCLUDE や LIB に、DirectXインストール場所\Include、Lib を追加。LIBPATH に DirectXの .dll が置かれてる場所を追加。そして同じ手順で作業を。

ruby extconf.rb で、「dsound.lib がねえよ」と言われる。もしかして、INCLUDE や LIB は見てくれないのかな…?

extconf.rb の最初の方に、
dir_config("DX")
を追加して、--with-dx-include=xxxx --with-dx-lib=xxxx でDirectXのインストール場所を指定できるようにする。
ruby extconf.rb --with-opt-dir=ruby --with-dx-include="C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include" --with-dx-lib="C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86"
今度はエラーが出ない。Makefile が作成できた。

nmake してみた。*.so ができた。ruby sample1.rb を実行。…音が鳴った! MinGW でビルドした版と違って、こっちはちゃんと音が鳴ってる。なるほど、やっぱり VC++じゃないとビルドできないのですな…。ていうか今頃、配布ファイル名に mswin32 とついてることに気付いたりして。何故自分は今まで気づかなかったのか。トホ。

#3 [game][neta] MEGA-CD版シルフィードの背景動画を再生

_mieki256's diary - MEGA-CD版シルフィードの謎技術についてもうちょっと想像 のツッコミ欄で、「MEGA-CD版シルフィードの背景動画を再生できるツールがありますぜ」と教えてもらえたので試してみたり。

_TRASYS/FSW_List

おそらくは、HIDOGA20.LZH てのがソレらしい。PC-98/PCAT用のプログラム。解凍すると、HIDOGA.COM と HIDOGA.DOC が入ってる。

Windows7 x64 上でDOS窓を開いて実行してみたら、「いくらなんでもこんなに古いプログラムには対応してねえよ!」と怒られた。DOS時代のプログラムだもんな…。

なので、仮想PCを起動できる VMware Player + Windows98 を起動して、そちらで試してみたり。 *1

仮想PC上の Win98 にファイルを持っていく方法で悩んだけれど、Win98 側で共有フォルダを作成して、Windows7 x64側からネットワークコンピュータ経由で Win98 側の共有フォルダを開き、ファイルをコピーしてみた。

MEGA-CD版シルフィードのCD-ROMを部屋の中から発掘。BDドライブに入れる。

VMware Player 側でBDドライブを握らせる。VMware Player の左上のメニューから、取外し可能デバイス → CD/DVD → 設定 → 物理ドライブを使用 → ドライブレターを選ぶ。Win98上ではDドライブに割り当てられた。

Win98上でDOS窓(コマンドプロンプト)を開き、hidoga.com -? を実行。ヘルプが表示された。

hidoga.com -M1 d:a00 を実行。

全画面表示で、MEGA-CD版シルフィードの背景動画が再生された。おお…動いてるわ…。これは面白いモノを教えていただけた…。感謝です。

ちなみに全画面表示と言っても、VMware Player 上で動かしてるから、VMware Player の画面ウインドウが小さくなるだけです。ホストOSが全画面になるわけではないので安心を。

感想。 :

改めて見てみると…。どう見ても動画ですな!

例えば、
  • 地球の表面の細かい模様
  • 回転してる岩の、面の明度をディザで表現
  • 宇宙船の表面の細かい凹凸
等々、当時の実機で、ポリゴンで描けるわけないし。まあ、動画制作中は、おそらくPC-9801やX68Kあたりがポリゴンをチマチマ描いてただろうから、「これはポリゴンです!」と主張できなくもないかもだけど…。

再生してみるまでは、「内部では、実機が持ってるハードウェア的転送機能を利用していたステージも…ソレをエミュレートしている可能性も…」などと思ってたけど、いくつか動画を見ているうちに、各ステージに合わせて描画の仕組みを変えているとは思えないなと。どれも細かすぎる。どう見ても動画ですよね。

しかしそうなると、パッケージに描かれてる「リアルタイムポリゴン描画」って、一体どこで使われてるのだろう…?

ただの「ポリゴン描画」なら、「プリレンダリング中はポリゴン描画してましたよ?」と言い逃れもできるけど、「リアルタイムポリゴン描画」とまで書いちゃうと言い逃れできないよなあ…。おそらくどこかで部分的に使っているのだろうとは思うけど。嘘はついてなくても、仕組みが分かったら、「え? そこがソレ? …騙された!」みたいなことになりそうな。

さておき。パッケージをよく見てみると、
  • 4万画面を超える背景画像
  • 独自のCG、動画技術による〜
と、わざわざ書いてあることに気がついた。なんかそのへん、「あのー、背景は動画ですからね?」と弁明してる印象も。

しかし、それでいて、
  • 3CPU完全並列動作による高速演算
とも併記してあるし。なんていうか…上手いよなあ…。

でもまあ、こうやって、お客さんに夢を見せてた時代もあったってことで。

当時に比べると、今は凄いよなあ。ガチでリアルタイム計算して、ゴイスな画面が次から次へと。もっとも、技術で夢を見せられる時代は既に…。でもないか。まだまだイケるか。未来の映像を思い浮かべながら、まだ全然足りてねえよ、もっとイケるよ、そう踏んでる人もたくさん居そう。

それはともかく。見ているうちに、「これはこれでスゴイ」と思えてきたり。宇宙船のモデリングや、地形のモデリング等、今の自分ですら(?)、このレベルで作れる気がしない…。しかも、手作業で各フレームにアタリをつけていったと聞いた記憶もあるし。作業量を想像すると吐きそう。よくまあ作ったもんだよなあ…。

*1: 一応 VMware Player + WinXP でも試してみたのだけど、そちらだと怒られはしないものの、ヘルプメッセージが出なかった。

この記事へのツッコミ

Re: MEGA-CD版シルフィードの背景動画を再生 by youkan    2015/04/17 12:08
こんにちは。
TRASYSさんのHIDOGA.COMを個人的に解析してWin32アプリに移植したものがリンク先にあります。
動画の圧縮展開方式は、同梱のCソースを見ていただくのが早いかと思います。
ご参考まで…。

リアルタイムポリゴン描画は、自機・敵機など動くキャラクタに使用されているようですね。
Re: MEGA-CD版シルフィードの背景動画を再生 by 名無しさん    2021/10/28 09:45
すでに突っ込まれていますが、自機や敵機はポリゴンですね。
背景は動画ですが、背景の当たり判定などもきっちり同期させており相当な技術となります。
動画と言っても動画再生チップが入っているわけでもないのでそのあたりの技術も自前でしょうし。
広告のキャッチコピーについては煽りも入っているでしょうけどもメガCDの中ではトップクラスの技術を持っているかと思います。
現代のプログラマに当時の開発機材だけで同じもの作れと言って作るのは相当骨が折れるでしょうね。

#4 [zatta][neta] 画像を三角ポリゴンにするフィルタってないのかな

MEGA-CD版シルフィードの背景動画について、事前にポリゴンの描画座標だけ求めて実機は描画に専念して、みたいな妄想をしてたわけだけど。

ソレを逆に考えて、実写動画の各フレームを、無理矢理三角ポリゴンに変換し続けながら再生したら、変わった映像にならないかなー、などと妄想。

と思ったけど、既にあった。

_ポリゴン風イラストを自動で作成できるアプリまとめと、その可能性 - 聴く耳を持たない(片方しか)

もっとも、紹介されてるアニメGIFを見ると、各フレームが不連続なわけで。これがもし、フレームが連続した状態で変換可能なら、もうちょっと違う映像になりそうだな、とも。

展開を余計にやっちゃうことで変な映像にならないかな。 :

例えば、 _ランレングス圧縮 されてる画像を表示する際、余分に展開してレイヤーに分けて重ねながら描画していくことで、変な映像になったりしないかな、てな妄想も。

ランレングス圧縮された画像を展開するというその仕組みは、言うなれば、横1ラインのポリゴンを描画してるのと同じだよなと思うわけで。その、1ライン分のポリゴンを、より大きく、あるいはより小さくして描画していけば、変わった映像にならないかと。

モザイク映像とたいして変わらないかもしれず。

以上、1 日分です。

過去ログ表示

Prev - 2014/12 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project