2023/10/29(日) [n年前の日記]
#1 [hsp] hsp3dishの動作確認中
Windows10 x64 22H2 + HSP 3.7 beta7 で、hsp3dish の動作確認中。
動作確認に使っているPCのスペックは以下。
_昨日、hsp3dish を使ってフルスクリーン表示をするプログラムを書いた のですが。これをメインPC上で動かしたら、あっさり60FPSが出て喜んだものの。
サブPCで動かしてみたら 12 - 17FPSしか出なくて…。そんな速度しか出ないのかよ。ガッカリ。
そこで、ふと、もしかして、サブPC上では GPU を使って描画できていないのでは? と不安になってきて、そのあたりを検証せねばなるまい、と…。
動作確認に使っているPCのスペックは以下。
- メインPC : CPU AMD Ryzen 5 5600X + GPU NVIDIA GeForce GTX 1060 6GB, RAM 16GB
- サブPC : CPU AMD Athlon 5350 + オンボードビデオ Radeon R3, RAM 4GB
_昨日、hsp3dish を使ってフルスクリーン表示をするプログラムを書いた のですが。これをメインPC上で動かしたら、あっさり60FPSが出て喜んだものの。
サブPCで動かしてみたら 12 - 17FPSしか出なくて…。そんな速度しか出ないのかよ。ガッカリ。
そこで、ふと、もしかして、サブPC上では GPU を使って描画できていないのでは? と不安になってきて、そのあたりを検証せねばなるまい、と…。
◎ HSPの標準機能だけで描画してみる :
とりあえず、HSPの標準機能の描画だけを使って試してみた。ソースは以下。hsp3dish関係の命令をコメントアウトしただけですが。
_fullscreen_normal.hsp
使用画像は以下。
_texa2.png
動かしてみたところ…。
60FPS が 7FPS に、12FPS が 1FPS に落ちてしまったわけだから、hsp3dish はちゃんとGPUを使って高速描画してくれていたようだなと…。単にサブPCのオンボードGPUが非力すぎるのだろうなあ…。
_fullscreen_normal.hsp
; HSP normal + fullscreen test. not use hsp3dish ; ; Windows10 x64 22H2 + HSP 3.7beta7 ; #include "hsp3dish.as" #include "d3m.hsp" #packopt name "fullscreen_normal" #packopt type 0 #define TEX_FILE "texa2.png" #pack TEX_FILE #define KB_ESC $000080 #define FRAMERATE 60 ; get desktop size dispx = ginfo_dispx dispy = ginfo_dispy ; initialize window without frame bgscr 0, dispx, dispy, 0, 0, 0 ; load image imgid = 3 celload TEX_FILE, imgid ; split image, set orign. celdiv imgid, 512, 512, 256, 256 ; Set the buffer to draw from. Windows ID 0 gsel 0, 1 ; Set screen clear color to be performed when redraw 0 is called. ; 0 or 1, color ($000000 - $ffffff) ; setcls CLSMODE_SOLID, $4080c0 font "Tahoma", 24, 1 angle = 0.0 time_start = d3timer() *mainloop ; ESC key to exit stick key, 0 if key & KB_ESC : goto *jobend tm = d3timer() - time_start fps = d3getfps() angle += 0.5 redraw 0 ; draw start ; clear screen ; color 64, 128, 192 ; boxf objmax = 64 repeat objmax r = double(dispy) * 0.5 a = angle + (270.0 / double(objmax)) * double(cnt) x = int(r * cos(deg2rad(a))) + (dispx / 2) y = int(r * sin(deg2rad(a))) + (dispy / 2) d = double(cnt) / double(objmax) ; draw image by crlput gmode gmode_rgb0 ; alpha channel enabled. Semi transparency disabled. pos x, y scale = 8.0 - (7.5 * d) idx = (cnt \ 4) rot = deg2rad(angle * 2.0 + 360.0 * d) celput imgid, idx, scale, scale, rot loop color 255, 255, 255 pos 10, 10 mes strf("[%dx%d] %d/%dFPS", dispx, dispy, fps, FRAMERATE) redraw 1 ; draw end. screen refersh await (1000 / FRAMERATE) ; await 12 goto *mainloop *jobend: end
使用画像は以下。
_texa2.png
動かしてみたところ…。
- メインPC : 7FPS
- サブPC : 1FPS。数値では1FPSと出てるけど、実際は1FPSすら出ていない感じ。
60FPS が 7FPS に、12FPS が 1FPS に落ちてしまったわけだから、hsp3dish はちゃんとGPUを使って高速描画してくれていたようだなと…。単にサブPCのオンボードGPUが非力すぎるのだろうなあ…。
◎ OpenGL と DirectX のどちらを使うか :
hsp3dish の利用時、OpenGL を使っているのか、DirectX を使っているのか、そのあたりが気になり始めた。
サブPCのオンボードGPUは Radeon R3 だけど、AMD/ATI製GPU の OpenGL周りは色々と不具合があって何かと弱かった記憶があるので、もし hsp3dish が OpenGL を使っているのだとしたら、DircetX を使うように変更することで速度が改善したりしないか、と…。
ただ、hsp3dish で、「OpenGL じゃなくて DirectX を使え」と指示する方法が分からない…。setreq や getreq を使うのだろうか…?
_HSP3Dish プログラミングマニュアル・基本仕様ガイド
スクリーンの初期化をする bgscr の周辺に挿入してみたけれど、これで本当に DirectX が使われているのかどうか…? HGIMG3 の場合は hgini とやらを呼んで初期化が必要になるらしいけど、hsp3dish では該当する命令が見つからない…。
確実に DirectX を使いそうな HGIMG3 を利用して動作確認してみるべきだろうか…。
サブPCのオンボードGPUは Radeon R3 だけど、AMD/ATI製GPU の OpenGL周りは色々と不具合があって何かと弱かった記憶があるので、もし hsp3dish が OpenGL を使っているのだとしたら、DircetX を使うように変更することで速度が改善したりしないか、と…。
ただ、hsp3dish で、「OpenGL じゃなくて DirectX を使え」と指示する方法が分からない…。setreq や getreq を使うのだろうか…?
_HSP3Dish プログラミングマニュアル・基本仕様ガイド
スクリーンの初期化をする bgscr の周辺に挿入してみたけれど、これで本当に DirectX が使われているのかどうか…? HGIMG3 の場合は hgini とやらを呼んで初期化が必要になるらしいけど、hsp3dish では該当する命令が見つからない…。
; get desktop size dispx = ginfo_dispx dispy = ginfo_dispy ; initialize window without frame bgscr 0, dispx, dispy, 0, 0, 0 ; DirectX mode enable setreq SYSREQ_DXWIDTH, dispx setreq SYSREQ_DXHEIGHT, dispy setreq SYSREQ_DXMODE, 1 cls 4 getreq dxmode, SYSREQ_DXMODE getreq devlost, SYSREQ_DEVLOST getreq dxresult, SYSREQ_RESULT
確実に DirectX を使いそうな HGIMG3 を利用して動作確認してみるべきだろうか…。
[ ツッコむ ]
#2 [movie] 「ゴジラ2000 ミレニアム」を視聴
BS12で放送されていたので視聴。初見。ゴジラとUFOが戦う映画、らしい。
2000とついているけれど、公開されたのは1999年。Wikipediaの記述によると、1年前の1998年にハリウッド版ゴジラが公開されたものの、日本国内から「こんなのゴジラじゃねえ」と不満の声が上がったのを見て、ゴジラ新作の需要があると踏んで企画されたそうで…。当時のゴジラシリーズとしては最高額の予算をかけて作ったのだとか。
_ゴジラ2000 ミレニアム - Wikipedia
感想としては…。うん…。ハリウッドの映像制作技術は凄いなと…。圧倒的な差をつけられちゃったなと…。 *1
実写の空撮映像に着ぐるみのゴジラを合成するカットは興味深かった。どういう映像にしたかったのかは全然分かるし、そういう映像を作ろうとした姿勢は称賛されるべきと思ったのだけど。しかし、実写の空撮映像はカメラが動いて映像がブレるわけで、ゴジラの位置合わせはずれてるわ、色調その他の調整もイマイチだわで、強烈な「合成してまーす」感が…。今なら実写映像から特徴点を見つけてトラッキングして、位置合わせぐらいならキッチリできるんだろうけど、当時の日本には本当に技術/ノウハウが無かったんだなあ、と…。考えてみたら「シンゴジラ」は空撮シーンの都市景観すらCGで作ってたんだっけ。日本のVFXって随分と進歩したんだなと再認識。
特撮監督は川北監督から変わって、川北監督の元で助監督をしていた鈴木健二監督になったそうで。
_鈴木健二 (特撮監督) - Wikipedia
そのせいか、大胆な構図のカットがいくつかあったような印象も受けた。もっともそのあたりはコンテを描いた方の功績なのだろうか。でも、コンテにOKを出すのは、やはり監督さんのような気もするし。
ラストのあたりは、ちょっとビックリ。なんだか平成ガメラ3のソレを思い出したりもしたけれど…。海にのそのそと帰っていくゴジラの後ろ姿をボヘーッと眺めつつ人間がとってつけたようなそれっぽいことを突然喋り始める、みたいな定番のラストではなかったあたりは好印象。いやまあ、なんかそれっぽいことはやっぱり喋ってたけど…。
怪獣映画の終わり方って、他にはどういう手があるんだろう、などと少し考え込んでしまった。ゴジラが海に帰っていくのは、海に囲まれている日本という国で育った人達が作っているから、だよな…。なんでもかんでも海に流してしまえばなんか一応問題解決したような錯覚をしちゃう国民性があるからで…。もし、海が無い国で育った人が怪獣映画を作ったら、一体どういうラストにするんだろう…? ゴジラ、どうやって片付ける…?
2000とついているけれど、公開されたのは1999年。Wikipediaの記述によると、1年前の1998年にハリウッド版ゴジラが公開されたものの、日本国内から「こんなのゴジラじゃねえ」と不満の声が上がったのを見て、ゴジラ新作の需要があると踏んで企画されたそうで…。当時のゴジラシリーズとしては最高額の予算をかけて作ったのだとか。
_ゴジラ2000 ミレニアム - Wikipedia
感想としては…。うん…。ハリウッドの映像制作技術は凄いなと…。圧倒的な差をつけられちゃったなと…。 *1
実写の空撮映像に着ぐるみのゴジラを合成するカットは興味深かった。どういう映像にしたかったのかは全然分かるし、そういう映像を作ろうとした姿勢は称賛されるべきと思ったのだけど。しかし、実写の空撮映像はカメラが動いて映像がブレるわけで、ゴジラの位置合わせはずれてるわ、色調その他の調整もイマイチだわで、強烈な「合成してまーす」感が…。今なら実写映像から特徴点を見つけてトラッキングして、位置合わせぐらいならキッチリできるんだろうけど、当時の日本には本当に技術/ノウハウが無かったんだなあ、と…。考えてみたら「シンゴジラ」は空撮シーンの都市景観すらCGで作ってたんだっけ。日本のVFXって随分と進歩したんだなと再認識。
特撮監督は川北監督から変わって、川北監督の元で助監督をしていた鈴木健二監督になったそうで。
_鈴木健二 (特撮監督) - Wikipedia
そのせいか、大胆な構図のカットがいくつかあったような印象も受けた。もっともそのあたりはコンテを描いた方の功績なのだろうか。でも、コンテにOKを出すのは、やはり監督さんのような気もするし。
ラストのあたりは、ちょっとビックリ。なんだか平成ガメラ3のソレを思い出したりもしたけれど…。海にのそのそと帰っていくゴジラの後ろ姿をボヘーッと眺めつつ人間がとってつけたようなそれっぽいことを突然喋り始める、みたいな定番のラストではなかったあたりは好印象。いやまあ、なんかそれっぽいことはやっぱり喋ってたけど…。
怪獣映画の終わり方って、他にはどういう手があるんだろう、などと少し考え込んでしまった。ゴジラが海に帰っていくのは、海に囲まれている日本という国で育った人達が作っているから、だよな…。なんでもかんでも海に流してしまえばなんか一応問題解決したような錯覚をしちゃう国民性があるからで…。もし、海が無い国で育った人が怪獣映画を作ったら、一体どういうラストにするんだろう…? ゴジラ、どうやって片付ける…?
*1: そのカットを実現するためには何をどうしたらいいのか、その都度分析したり、研究したり、リハーサルをしたりしてノウハウを蓄積していくあちらさんと、「昔からこうやってるんだから」で思考停止して手癖で片付けちゃう日本では、ここまで差がつくのだろうな、みたいなことも思ってしまった。まあ、「STAR WARSから学ぶものは何も無い」と言い切っちゃうのが邦画界だから仕方ないのかも。あちらさんが何を持っていて、自分達が何を持ってないか、それすら気づけないと進歩する可能性もゼロなわけで…。あちらの方々は日本の映画も結構褒めるけど、いつかそれを自分達も獲得してみせるぞという、学ぶ意欲に満ちているからこそガンガン褒めるのだろう、と思うのだよな…。何かを見て、褒める部分を見つけられない人/組織/業界は、もはや成長する見込みが無い…。って自分にとってもブーメランだなコレ…。
[ ツッコむ ]
以上、1 日分です。