mieki256's diary



2020/04/01(水) [n年前の日記]

#1 [godot] Godto Engineについてまだまだ勉強中

チュートリアル動画を眺めながら勉強中。

_Godot 3.1: Creating a Simple 3D Game: Part 6 (Menu Screens, Text, Buttons, Signals) #GodotEngine - YouTube
_Godot 3.1: Creating a Simple 3D Game: Part 7 (Enemies, Animation, Collision, Game Over) #GodotEngine - YouTube
_Godot 3.1: Creating a Simple 3D Game: Part 8 (Collecting Coins, HUD, Counter, Timers) #GodotEngine - YouTube

分かったことをメモ。






独自の信号をどういう時に使うのかと言うと…。例えば、プレイヤーとコインが重なった際に、コイン側のスクリプト内で独自信号を出して、その独自信号をコイン数表示用Labelが受け取れば…。「プレイヤーとコインが重なった」ことを、コイン数表示用Labelが知ることができるので、コイン数表示用Labelが持ってるスクリプト内で、コインの獲得数を+1して表示を更新、といった処理が書けたりする。

課題。 :

あらかじめステージ内に、決まった数の敵だのコインだのを配置しておく系のゲームなら作れそう、とは分かったけれど…。

シューティングゲームのように、次々に弾を撃つ、みたいな処理はどうすればいいのやら。プレイヤーキャラが弾オブジェクトをバンバン発生させて、弾オブジェクトは自分で勝手に飛んでいって、条件を満たしたら自分で勝手に消えていく、みたいなことをしないといかんよな…。

3Dモデルを使ったシーンを表示する際、しばらく待たされるのも気になる。ストップウォッチで測ってみたら、15秒ぐらい待たされていた。ウインドウのタイトルバーに「(応答なし)」が出てくるぐらい無反応になるのは、ちょっと…。コレってどうにかならんのか。

余談。 :

blender 2.8x で blenderゲームエンジンが削除された際、「そういうことをしたかったら Godot Engine でも使いなよ」と blenderのコミュニティ内で言及されてたので、なんとなく触ってみたのだけれど。

たしかに、作業用3D画面のカメラ操作は blender に近かったりするけれど、それ以外は、特に blender との親和性(?)があるようにも見えず。例えば、.blend が直接読める、といった機能があるわけでもないし…。

もっとも、ライセンス面では Unity や UE4 と比べるとかなり自由、てなあたりはメリットなのだろうか。

#2 [movie] 「インデペンデンス・デイ: リサージェンス」を視聴

TV放映されたソレを録画してたので視聴。

前作と同様、なかなかのおバカ映画でイイ感じ、だったような気がする。とにかくスケールの大きい風景が目白押し。このシリーズは、こうじゃないと。

続編が作れそうな雰囲気で終わったけれど、ググってみたら興行成績がよろしくなかったそうで。どうやら続きは無さそうな気配。

#3 [anime][neta] 柔らかい何かでパワードスーツを作れないかな

思考メモというか妄想メモ。

寝ていたら夢の中で、魔術師が液体を体にまとってパワードスーツっぽい状態にしている映像を見たわけで。

目が覚めてから、ちょっと妄想してしまったり。パワードスーツと言うと、大体は鉄っぽい硬い金属で覆われたソレをイメージするけど。何か柔らかいブツで覆うソレもアリだったりしないかなと。グミっぽいぶにょぶにょした素材で包むとか…。

例えばパラリンピックでは、バネっぽい義足が使われているけれど。着地の衝撃を、義足がしなることで和らげて、バネのように反発することで地面から足が離れる動作を手助けしてくれる。ああいった仕組みでパワードスーツを作れないものかと。硬さだけじゃなくて、柔らかさで動作を手助けしてくれる、みたいな。

自転車や車のタイヤは、中に空気が入っていて、段差の上を走った時の衝撃を減らしてくれるけれど。パワードスーツも、足全体をグミみたいな素材でぐるりと包めば、ぶよんぶよんと歩行できて楽に…なるかどうかは分からんけど、衝撃は減らせそう。

でも、マシュマロマンみたいなパワードスーツになりそうだな…。

考えてみたら、先日放送が終わったTVアニメ「ダーウィンズゲーム」に、似たようなパワードスーツが出てきたような。アレは体全体を木の根っこで覆っていたけど、つまりは「金属製じゃないパワードスーツ」の設定は既存作品内で存在してる、と言えるのだろうなと。もっとも、「ダーウィンズゲーム」のソレは、植物って実は金属並みに硬いのだ、てな主張をしていた設定だった気もするけど。

例えば、竹で覆って、竹のしなり具合で衝撃を吸収する、てな設定もアリなのかな…。まあ、竹製パワードスーツ、というキーワードだけでも「なんじゃそりゃ」感が出てきそうだけど。

戦国時代を舞台にして、木と竹と布でできたパワードスーツが活躍、とかどうだろう。まあ、既にそういう設定の作品はありそうだけど。それっぽいネーミングが欲しくなるだろうな。例えば、伊賀甲冑とか、甲賀甲冑とか。発明した場所の地名がついた状態で呼ばれたりとか。

2020/04/02(木) [n年前の日記]

#1 [godot] Godot Engineで弾を撃つ

Godot Engine でプレイヤーの弾を撃つ処理をどう書けばいいのか悩んでいたのだけど。公式ドキュメントのFPS関連チュートリアル記事を眺めて、なんとなく分かってきた。環境は、Windows10 x64 1909 + Godot Engine 3.2.1 x64。

_パート2 - Godot Engine latest ドキュメント

とりあえず、プレイヤーの弾を担当するシーン、PlayerBullet.tscn を作成しておいて…。

プレイヤーキャラを担当するシーン、Player.tscn に割り当てたスクリプトの中で、以下のような感じで処理。ちなみにプレイヤーは、KinematicBody から作った。
extends KinematicBody

var bullet = preload("res://assets/PlayerBullet.tscn")

# ...

var shot_counter = 0

func _ready():
    shot_counter = 0

    # ...

func _physics_process(delta):

    # ...

    # born player bullets
    shot_counter += delta
    if shot_counter >= (4 * 1.0 / 60.0):
        shot_counter = 0
        _born_player_bullet(translation)

    # ...
            
func _born_player_bullet(pos):
    var clone = bullet.instance()
    clone.translation = pos
    clone.translation.z -= 2.5
    var scene_root = get_tree().root.get_children()[0]
    scene_root.add_child(clone)

var bullet = preload("res://assets/PlayerBullet.tscn") で、事前にプレイヤー弾のシーンを読み込んでおいて、bullet.instance() でインスタンスを作成。しかるべきノードに、add_child(clone) で、子ノードとして追加。これで一応画面上にプレイヤーの弾が次々に発生してくれた。

プレイヤーの弾の移動。 :

プレイヤーの弾は、画面奥へと飛んでいってほしい。そのあたりの処理を試したり。

プレイヤーの弾は、Area で用意した。
Area
    MeshInstance
    CollisionShape

スクリプトは以下のような感じで。
extends Area

var counter = 0
export var kill_time = 2.0
export var speed = 1.5
var velocity = Vector3()

func _ready():
    counter = 0


func _physics_process(delta):
    counter += delta
    if counter >= kill_time:
        queue_free()
        return
    
    velocity = Vector3(0, 0, -speed * 60 * delta)
    translation += velocity

translation の z に値を加算、というか減算してみたら、奥方向に移動していく感じで動いてくれた。

ただ、こういう動かし方でいいのか分からんけど…。KinematicBody の場合は move_and_slide() を呼んで動かしてたけど、Area の場合は move_and_slide() を呼ぼうとしても「そんなメソッドは無い」と言われてしまって。しかし、こんな動かし方をしてもいいのだろうか…。どうなんだろう…。

そのままだと、ずっとどこまでも飛んで残り続けてしまうので、時間を測って一定時間が経ったら自分を殺す、みたいな処理も一応入れた。本当は画面外に出たかどうかチェックして消すべきだろうけど、どうやってソレを調べればいいのか…。

衝突判定で悩んだ。 :

プレイヤーの弾、及び、敵を、Area から作っていったのだけど。何かと衝突したら body_entered シグナルが発生するはず、と思って処理を書いたら無反応で悩んだり。

調べてみたら、body_entered は、xxxxBody と衝突した時にだけ発生するようで…。StaticBody とか、RigidBody とか、KinematicBody とか。

Area と Area が衝突した際は、area_entered が発生するらしい。

しかし、自分に何が当たったのかを、どうやって調べたらいいのか…。ググってみたら、どうやらグループというものが使えそうな気配。

プレイヤーの弾には「player_bullet」を、敵には「enemy」を、グループ登録しておいて…。例えば敵の側の area_entered と接続した関数内で、以下のように書けば…。
func _on_EnemyZako_area_entered(area):
    if area.is_in_group("player_bullet"):
        # Collide with player bullets
        damage_timer = 0.3
        hp -= area.attack_point
        print("Hit. My HP = " + String(hp))
        if hp <= 0:
            queue_free()  # I am dead.
area.is_in_group("グループ名") で、当たった何かがそのグループなら、てな感じの処理が書ける。

このあたり、レイヤーとマスクを使うことでも処理ができそうな気もするけれど、まだそこまで調べてなかったり。

#2 [pc] SocketAM4 M/Bが届いた

TSUKUMOに注文していたM/Bが届いた。 _GIGABYTE B450M S2H rev. 1.0。 税込7,300円、だった気がする。SocketAM4対応。AMD Ryzen CPU が載せられるはずのM/B。

箱には、Ryzen 3000番台に対応、とシールが貼ってあった。ということは、M/B の BIOS は比較的新しい…状態だったら助かるのだけど、さて。

まだ箱を開けてないけど、日本語マニュアルも同梱、と箱に書いてある…。マニュアルも何もついてこないよ、というレビュー記事を読んだ記憶があるけど、やっぱりつけるようになったのだろうか。ただ、GIGABYTEのサイトには、日本語マニュアルのPDFが無いんだよな…。どういうことだろう…。

2020/04/03追記。 :

箱を開けてみたら、日本語で書かれた紙が、底のほうに1枚入ってた。一応、M/B上のどこに何の端子があるのか、図で示してあるけれど、例えば、ケース側のLEDその他を繋ぐ F_PANEL のピン配置などは一切書かれてなかった。やはり、GIGABYTEのサイトから英語版のマニュアルPDFを入手して、必要なページを印刷するなりしておいてから作業を始めたほうが良さそうだなと…。 *1

*1: 徹底的にコスト削減したと謳ってる(?)製品なので、これはこれでOK。マニュアル冊子がついてない分お安くしましたよ、ということだろう…。

2020/04/03(金) [n年前の日記]

#1 [godot] Godot Engine上で敵弾を撃たせたり

Godot Engine 上で、ふらふら動く雑魚敵から敵弾を撃つようにしてみたり。var bullet = preload("res://assets/EnemyBullet.tscn") で敵弾シーンを読み込んでおいて、bullet.instance() でインスタンスを作成して、add_child() でゲームシーンに追加。

敵弾発射時の方向や速度を、どうやって個別に指定すればいいのか…。とりあえず、敵弾側のスクリプト内に、そのあたりを設定するメソッドを用意しておいて、ソレを呼んで設定したところ、それぞれ違う方向で飛んでくれたけど…。こういうやり方でいいのかどうか…。

ゲームシーンに add_child() する際、ルートに追加しちゃってるけど、Spatial を用意してそこに追加するようにしたいのだけど、get_tree() をどう使えば目的のノードが得られるのか…。

#2 [pc] SocketAM4 M/BにメモリとCPUを差した

昨日届いたM/B、GIGABYTE B450M S2H rev. 1.0 に、メモリとCPUとCPUクーラーを取り付けてみた。

取り付けたパーツは以下。
M/Bによっては、CPUクーラーを先に取り付けてしまうとメモリの交換ができなくなるレイアウトの製品もある、てな話を見かけていたので、まずはメモリを一番先に取り付けてみた。ただ、今回のM/Bは、特にそういうレイアウトではなかったようで…。CPUクーラー取り付け後も、メモリの差し替えができそうな感じに見える。

CPUの取り付けは簡単だった。Ryzen はCPU側にピンがあるので、作業も少し気が楽。これが Intel製CPUだとM/B側にピンがあるそうで、ピンを曲げちゃったらM/Bを捨てるしかないわけで…。

CPUクーラーを取り付ける前に熱伝導グリスを塗らないといかんけど。手持ちのシルバーグリスを発掘して塗布。へらで伸ばしていく作業が大変だった。上手く塗れてるのか全く自信無し。

CPUクーラーは、バックプレートに4ヶ所をネジ止めしていくタイプ。暗い場所で作業してたら、反対側をネジ止めしてない状態になってしまって、ちょっと焦った。ちゃんと明るい場所で or ライトを当てて明るくしながら、作業をしないと…。

CPUクーラーを取り付ける向きを間違えると、メモリスロットの上に出っ張りが来てしまって、メモリ交換ができなくなってしまう。気をつけないと…。

#3 [zatta] オラが村でも感染者

自分が住んでる福島県須賀川市でも、新型コロナウイルスの感染者が出たらしい。10代の人で、東京に行って帰ってきてしばらくしたら体調がアレで、ということらしいけど。

どうしてわざわざ、こんな時期に東京に行ったのか…。一体全体どういう用事だったんだ…。それって絶対に今この時期に行かないといけない話だったのか…。周囲の人に感染させて、死者が出たとしても、それでも行かなきゃいけない種類の用事だったのかと…。なんだかな。

それはともかく、報道内容を見て、ちょっと妙な話だなと。3/25〜27に東京に行って、3/30に体調不良を感じて、3/31に熱が出て、ということらしいけど。新型コロナウイルスの潜伏期間って2週間前後あるんじゃなかったのか…。症状が出るのが早過ぎるような。となると、もっと前から感染してた可能性はないのだろうか。それとも、ウイルスが変化していて、数日で症状が出る種類も流行しているのだろうか。

ググってみたら、そのあたり自分は完全に勘違いしてたようで。平均では5日程度で症状が出る場合が多いらしい。

_新型コロナウイルス、「潜伏期間は平均5日」=米研究 - BBCニュース
_新型コロナウイルスに関するQ&A(一般の方向け)|厚生労働省

ただ、12日以上経っても症状が出ないと、無症状で感染者になってしまうのだとか。そういう事例も考えると、結局は、今現在感染してるとしたら2週間はあちこち動き回るんじゃねえぞ、感染を広げちゃうだろ、という話になるらしい。

2020/04/04() [n年前の日記]

#1 [pc] メインPCのM/Bを交換作業中

メインPCのM/B(+ CPU + メモリ)を交換作業中。

とりあえず、ストレージの類を全部外した状態で memtest86+ 5.01 を動かしてみたら、1回はパスしたので…。メモリが壊れてたり、CPUの取り付けに失敗していたりはしてない状態っぽい。

今回購入した、GIGABYTE B450M S2H rev.1.0 のBIOSバージョンが古いのか新しいのかが気になっていたけれど。確認してみたら、今現在の最新版、F50 が入ってた。ありがたや…。

2020/04/05() [n年前の日記]

#1 [pc] メインPCのM/Bを交換できた

メインPCのM/Bを交換できた。 細かいスペックは、 _一昨日の日記 にメモしてあるはず。

Windows10 x64 1909 が入ってるSSDをそのまま繋いでみたら、最初の起動時に必要なファイルをコピーし直してくれたようで、一応起動してくれた。ちょっと助かった。

一応、GIGABYTEのサイトから、chipsetドライバ、Audioドライバ、LANドライバを入手してインストール。

ただ、RealtekのAudioドライバ、mb_driver_572_setup.exe_6.0.8688.1.zip をインストールしようとしたら、再起動直後に何度もドライバのアンインストールを繰り返されて困ってしまった。仕方なく、旧版の mb_driver_audio_realtek_6.0.1.8454.zip や mb_driver_realtek_6.0.1.8597.zip を入手して、古い版から入れ直してみたら、そのうちインストーラが勝手に立ち上がらない状態になってくれた。

ベンチマークを取ってみた。 :

_ CrystalMark2004R7_CINEBENCH R20 でベンチマークを取ってみたけど。

スゴイ…。Ryzen 7 1700 って、Core i5-2500と比べると、スゴイ…。
  • CrystalMark は、257527 から 496412 に向上。
  • CINEBENCH R20 は、945 pts から 3133 pts に向上。
_20200402_01_intel_corei5-2500_simple.txt
_20200405_01_amd_ryzen7_1700_simple.txt
_intel_corei5-2500_multicore.png
_amd_ryzen7_1700_multicore.png
_amd_ryzen7_1700_singlecore.png
_intel_corei5-2500_singlecore.png

特に CINEBENCH は、マルチコアでの計算時、圧倒的にモリモリとレンダリングしていく様子を目撃できてかなりビックリ。さすが、8コア16スレッド…。

ベースクロックは、3.3GHz から 3.0GHz に落ちているのに、シングルコアでも 264 pts から 323 pts に上がったので、CPUの世代が進んだ分、たしかに性能は向上してるのだなと。Ryzen 1000番台ですら、これほどの性能とは…。Ryzen 3000番台を使ったら、もっとスゴイのだろうな…。

しかし、良いことばかりでもなく、色々問題が…。

シャットダウンできない。 :

Windows10 をシャットダウンすると、電源が切れたと思ったらまた再起動してしまう。しかもその際、SSD は認識するけど HDD は認識しない。Dドライブが消滅した状態で Windows10 が起動する…。ヤバ過ぎる…。

高速スタートアップを無効にすると改善する場合もあるらしいので設定しようとしたけれど、そもそも設定項目が出てこない…。SSDを導入する際、ハイブリッドスリープを無効にしていたので、項目が出てこなくなった模様。

コマンドプロンプトを管理者権限で開いて(スタートボタンを右クリック→コマンドプロンプト(管理者)、を選択)、powercfg /h on (あるいは、powercfg /hibernate on) をしてから、高速スタートアップのチェックを外して試してみたら、一応シャットダウンするようになったけど。これもこれで問題が。この状態だと、SSD内に hiberfil.sys というファイルが作られてしまう。メモリが16GBもあるせいか、該当ファイルは12GB前後。こんな容量をSSDに書き込まれたら、たちまちSSDの寿命が…。

しかし、powercfg /h off にすると、hiberfil.sys は消えてくれるものの、シャットダウンできなくなる…。さて、困った…。

マウスが反応しない。 :

電源投入直後、USB接続したマウスが反応しなくなる。一旦コードを抜いて差し直すと認識して使えるようになるけれど、いちいちこんなことしてられないよな…。困った…。

ファンが煩い。 :

今まで使ってた Intel DH67BL は、ファンコネクタが2つM/B上についてたので、リアファン(8cm)とフロントファン(12cm)の2つを繋いで、イイ感じに回転数を調整してくれていたのだけど。

今回入手した GIGABYTE B450M S2H rev.1.0 は、ファンコネクタが1つ。仕方ないので、リアファンだけ繋いで、フロントファンは電源ケーブルを繋いで全開で回したら、結構な騒音が…。まるでドライヤーでも使ってるかのような騒音…。

今まで使っていたフロントファンは、サイズ KAZE-JYUNI PWM SY1225SL12LM-P。1300rpm、26.50dBA、らしい。

さすがに耐えらない音量なので、仕方なくフロントファンを外してしまったけれど。これはこれで、内部の熱が心配…。静かな 12cm FANを入手してつけておいたほうがいいのだろうか…。

2020/04/06(月) [n年前の日記]

#1 [pc] メインPCがシャットダウンできるようになった

メインPCのM/Bを、GIGABYTE B450M S2H rev.1.0 と入れ替えたら、Windows10 のシャットダウンができなくなった ―― シャットダウン直後に勝手に再起動して、しかもHDDの電源が切れたままになって認識できなくなる問題が起きてたのだけど。色々試したら、シャットダウンできるようになった。

まず、KNOPPIX 8.6.1 DVD をUSBメモリに書き込んで、そちらで起動してシャットダウンできるか試した。KNOPPIX からシャットダウンできるなら、ハードウェアに問題はなくてWindows10がおかしいと分かるし、KNOPPIX でも同じ症状が出るならハードウェアに問題があると分かるはず。

結果は、KNOPPIX でもダメだった。シャットダウン直後に勝手に再起動する。つまり、ハードウェアに問題がある。

ケースを開けて、色々外してみた。
この状態にしたら、シャットダウンができるようになった。シャットダウン直後に勝手に再起動したりしない。助かった…。

光学ドライブを外したせいか、光学ドライブのスピンアップ(?)待ち時間も無くなったので、BIOSの画面が表示されてからWindows起動アニメーションが表示されるまでの時間も若干短くなったような気がする。

結局、どれが原因だったのだろう。BD-Rドライブか、USB3.0増設ボードか、SATAケーブルか…。でも、検証作業をするのも面倒なので、このままにしておこう…。

今後の課題。 :

しかし、今後はどうしたもんか…。

USB3.0増設ボードは、まあ、使用を諦めてもいいかなと。今回交換したM/Bは、USB3.0ポートが背面に4つついてるし。M/B上にもUSB3.0ポートを2つ増やせる内部コネクタがついてるし。まあ、ケースが古くてUSB3.0ポートが無いから、M/B上のソレは使ってないけど。もし、USB3.0ポート数がもっと欲しくなっても、今時はUSB3.0ハブを買ってきて対応するものだろうし…。

元々、今まで使ってたM/B、Intel DH67BL に搭載されていたUSB3.0チップが、人柱チップと名高い Renesas uPD720200 だったので、周辺機器との接続が全く安定しなかったので、仕方なくUSB3.0増設ボードを購入・追加して使ってたわけで…。今回交換したM/BでUSB3.0が安定して使えるなら増設する必要もないはずで。

しかし、BD-Rドライブは…。ウチのPC群の中で、BD-Rドライブがついてたのは、このPCだけなのだよな…。BDを読み込めるPCが無くなってしまう…。外付けのBD-Rドライブを購入しないとダメかな…。

もっとも、昨今、光学ドライブの利用頻度がどれだけあるかと考えると…。昔ならともかく今の御時世では、光学ドライブなんて、まずほとんど使わないわけで…。これまでも、BD/HDDレコーダで録画した番組をBD-Rに焼いた際、ちゃんと再生できるのか確認するために使ってた程度で…。圧倒的に、利用頻度は低いのだよな…。

でも、PC側で再生できるか確認してみたことで、BD/HDDレコーダがちゃんとダビング(?)できてなかったことが判明した時もあるし。それを考えると、やはりBDドライブが一応あったほうがいいのだろうか…。悩むなあ…。

2020/04/07(火) [n年前の日記]

#1 [pc] メインPCのBD-Rドライブを再度取り付けてみた

メインPCのM/Bを GIGABYTE B450M S2H rev.1.0 に交換したらシャットダウンができなくなって ―― シャットダウン直後に勝手に再起動してしまう症状が出てしまって、BD-RドライブとUSB3.0増設ボードを外したらシャットダウンできるようになった件。

BD-Rドライブが使えなくなるのは痛いので、試しにBD-Rドライブを再度接続して動作確認をしてみた。ドライブの型番は、BUFFALO BR-616FBS-BK (LG GGW-H20N)。

_BD-R/RE対応 SATA用 内蔵ブルーレイドライブ | BR-616FBS-BK

結果は…。BD-Rドライブを接続しただけなら、ちゃんとシャットダウンできた。

つまり、GIGABYTE製M/B or SocketAM4 M/B or B450チップセット搭載M/Bに、USB3.0増設ボード AREA SD-PEU3R-4E (4WING2) (Renesas uPD720201搭載)をつけると、シャットダウン直後に勝手に再起動する不具合が発生する、ということが分かってきた。

似たような報告事例を見かけた。 :

ググってみたところ、玄人志向のフォーラムでも、USB3.0増設ボードを取り付けると同じ症状が発生する、という報告事例を見かけた。

_トピック: USBインターフェースボード増設にて、シャットダウンで再起動される | 玄人志向フォーラム

Intel H61チップセット搭載M/Bの話だけど、しかし、GIGABYTE製M/Bという点は同じ…。

不具合を起こしてる製品は、玄人志向 USB3.0-PCIE-P2。

_玄人志向 | USB3.0-PCIE-P2:Renesas社製 uPD720202搭載 USB3.0 インターフェース(PCI-Express x1)

Renesas uPD720202 搭載品なのか…。どうも Renesas uPD72020x がひょっとしてアレなのでは、と思えてきたりもして。

#2 [pc] BD-Rドライブのファームウェアを更新してみた

メインPCにBD-Rドライブを接続し直したことだし、せっかくだからBD-Rドライブのファームウェアを更新してみようかと。型番は、BUFFALO BR-616FBS-BK。LG GGW-H20N のOEM。

BUFFALOのサイトで公開されているファームウェアは、XJ04 が最後の版だったらしい。

_BR-616FBS-BK : ソフトウェア | バッファロー

ただ、ググってみると、LG GGW-H20N の最後のファームウェアは、XL07 らしくて。GGW-H20N_XL07(EW).zip というファイルが必要らしい。ググってみて、それらしいファイルを入手。

_LG GGW-H20N.ALOK01: Support, Manuals, Warranty & More | LG USA Support

ただ、このファームウェアは、OEM品には適用できないらしい。実行しても「対象ドライブが見つからねえよ」と言われてしまう。また、ファームウェアと同梱されてる readme.txt にも、「OEM先がファームウェアを公開してくれるはずだからそっちを使ってね」的なことが書いてあった。しかし、BUFFALO が出してくれてないわけで…。

一応裏技があるらしい。

_容量不足問題解決への一歩 07年12月製造のGGW-H20N動いた:僕の記憶 - ブロマガ

PCの電源投入前からBDドライブの取り出しボタンを押し続けてPCの電源を投入。ブート画面(?)が出てきたら取り出しボタンから指を離す。Windowsが起動したらLG版ファームウェア更新ツールを実行。現在バージョンが「COR4」になって、更新できるようになる、のだとか。

しかし、試してみたら、すんなりいかない…。Windows10 x64 1909 上で実行したせいなのか、ファームウェアの転送が行われているっぽい感じで、BDドライブの青いLEDが激しく点滅するけど、そのうちLEDが消灯して無反応になる…。ツール上ではアニメがずっと動いたまま、10分経っても変化無し。

仕方なく再起動しようとしても、HDD LEDが点灯しっぱなしで再起動できない。リセットスイッチを押してみたけど、BDドライブのLEDが消灯したまま。電源ボタンを長押しして無理矢理電源を切ってから、電源投入。今度はBDドライブのLEDが光った。

Windows10起動後、件のファームウェア更新ツールを実行してみたら、現バージョンが XL07 になっている、と表示された。BUFFALO版のツールは、対象ドライブ無し、と表示されてる。

一応、HHDレコーダで焼いたBD-Rを再生できることは確認できた。でも、これでファームウェア更新はできているのだろうか…。そのうち不具合が出てくるかもしれない…。

#3 [pc] ポータブルBD-Rドライブについて調べた

現在店頭で販売されてるUSB接続ポータブルBDドライブについて調べていたのだけど。どれを選ぶべきかちょっと面倒臭い気配が…。

まず、どのメーカの、どの製品も、「USBケーブルを繋ぐだけで使えるよ!」と謳ってるのだけど。これがちょっと…。半分は本当だけど、半分は嘘で…。

と言うのも、光学メディアを読み込むだけなら、USB接続時の電流だけでも動く場合が多い = USBケーブルを繋ぐだけで使えると言えなくも無いのだけど。しかし、光学メディアに書き込みをしようとすると、えてして電流が足りなくて、ACアダプタ(5V,1.5A〜2.0A)等の外部電源が必要になる場合がほとんど、ということらしく…。あちこち眺めた感じでは、このあたり、ポータブル光学ドライブを使う人達の間では常識レベルの話、らしい…。

一応、メーカサイトにも、「電力不足の時は別売りのACアダプタが必要」等が書いてあるのだけど、これがもう、豆粒のような小さい文字で…。しかも、フォントの色が薄いグレーで…。お前ら騙す気満々やんけ。読ませる気ないやんけ。酷過ぎる。

考えてみたら、USB規格の電流如きで間に合うわけがないのだよな…。

例えば、自分がメインPCに内蔵してるBD-Rドライブ BUFFALO BR-616FBS-BK (LG GGW-H20N)は ―― これは比較的電気を食う製品らしいけど、5V/12V:1.9A/3.0A が必要と書いてある。

そして、USB規格では、USB2.0が 5V,500mA(0.5A)、USB3.0が 5V,900mA(0.9A) を流せる、と決まっているので…。もう全然足りない。ドライブにUSBケーブルを2本つけて、片方のケーブルは電力供給専用です! と言ってみたところで、やっぱり足りない。

「だったら最初からACアダプタもセットにして売ればいいじゃん。なんで別売り?」と思わないでもないのだけど。しかし、今の御時世、光学ドライブが使われる場面を想像すると…。メディアをガンガン焼く人も一応居るだろうけど、大半の人はおそらくメディアの読み込みしかしないのではないか。となるとACアダプタなんて邪魔なだけ。つまりACアダプタが別売りなのは、ある面では良心的、とも言えてしまう。

でも、ガンガン焼くつもりでそれらのドライブを買った人が、宣伝ページの通りに、USBケーブルを繋ぐだけで使えるのだ、と信じたまま使ってしまい、しかしちゃんと焼けなくて、「なんだこのドライブ、糞製品じゃねえか!」「これだから(BUFFALO|I-O DATA|Logitec)は!」とネット上で文句を言いまくるという…。製品紹介ページにちゃんと書いとけばいいだけの話、ではあるのだよな…。「USBケーブルを繋ぐだけで使えます!(※ 読込のみ。書込みはACアダプタが必要)」みたいな。 *1

何にせよ、メディアへの書き込みもあり得るならACアダプタは必須っぽい。となると、ドライブの価格 + ACアダプタの価格で出費を検討しないといけない。しかし、ACアダプタの値段もメーカ毎に差があって…。てなわけで、どれを選ぶべきか悩むなと…。

それにしても、どうしてスマホの充電と同様にUSB端子で電力供給しないのだろう…。いや、でも、もしかすると、USB Type-C とやらが普及すればこのへん悩まずに済むようになるのだろうか。
*1: でも、他がやってないのにどうしてウチだけが、みたいなことを思ってしまうに違いない。逆だと思うのだよな…。自分のところは正直に書いたほうが信用を得られるんじゃないのか…。何なら、他のメーカがいかに騙す気満々でそのあたりを書いてるのかdisっちゃう内容を一緒に書いといてもいいぐらいで…。

2020/04/08(水) [n年前の日記]

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴ったので、19:14-20:10の間、自宅サーバを止めてました。申し訳ないです。

#2 [anime] 「モアナと伝説の海」を視聴

TV放映版を録画してたので視聴。ディズニーの3DCGアニメ。

とんでもなく綺麗な映像だなと…。映像を見てるだけで大満足。

変身能力を持ったキャラの動きがカッコよかった。デザインがアレなのに動くとカッコイイあたり、これが本当のアニメートなのだなと…。

2020/04/09(木) [n年前の日記]

#1 [pc] Ryzenはゲーム向きではないCPUらしい

メインPCのCPUを、Intel Core i5 2500 から AMD Ryzen 7 1700 に変えたので、せっかくだからと色々なアプリを起動して様子を眺めていたのだけど。ちょっと昔の ―― 2016年頃に発売された3Dゲームを動かしてみたら、動きがおかしいことに気がついて。

状態としては、60FPSで滑らかに動いたと思ったら、動きが0.n秒ほどピタッと止まって、また滑らかに動き始めて、また止まって…みたいな。ガタつくというか、カクつくというか、プチフリーズ(プチフリ)するというか…。

おかしい…。Ryzen 7 1700 って Core i5 2500 よりスペックが高いはずではなかったのか…。どうして Core i5 2500 よりガクガクするのか…。ベースクロックは 3.3GHz → 3.0GHz になったけど、ベンチマークではシングルコアの性能は微妙に上がってるし、何より物理コア数が 4 → 8に、スレッド数は 4 → 16 になってるのに…。

ググってみたところ、そもそも Ryzen はゲーム向けのCPUではないのだ、ゲームを動かすとパフォーマンスが落ちるのだ、という話を見かけてしまった。知らなかった…。苦労して入れ替え作業をしたのに、結構ショック…。

スレッド数の問題。 :

まず、「今のCPUってスレッド数多過ぎ」問題があるようで…。

昔のゲームは、スレッド数が16もある前提では作ってないので、スレッド数が多いだけで逆にパフォーマンスが落ちてしまうのだとか。中には、コア数は最大4コアだろう、と決め打ちで作ってあるゲームもあって、そういうゲームは起動すらしないそうで。

幸い、Windows10には、「このプログラムはこのスレッドで動かせ」と指定する機能があるので、一応ソレで問題を回避できなくもないらしい。

やり方は、タスクマネージャーを起動 → 詳細タブ → 目的のプログラムを右クリック → 関係の設定、で、使うスレッド番号を指定できる。

あるいは、cmd.exe を起動しつつ、使うスレッド番号を指定することもできるらしい。
cmd.exe /c start "" /affinity FFF0 X:\hoge\fuga\piyo.exe
/affinity の後ろにある数値が、どのスレッド数を使うかの指定値。16進数で指定。スレッドを使うか使わないかを0/1にして2進数で並べて値を決める。下位ビットが CPU 0。上位ビットがCPU n。8スレッドなら8bitになるし、16スレッドなら16bitになる。
CPU No. 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0

2進数   1  1  1  1  1  1  1  1  0  0  0  0  0  0  0  0 → /affinity F0 を指定。CPU 15 - CPU 8 を使って動かす

しかし、Ryzen 7 1700 は、物理コアと論理コアがあるわけで…。どのスレッド番号が、物理コア or 論理コアなのか…。

以下のページに、そのあたりの記述が。

_Ryzenはなぜ「ゲーム性能だけあと一歩」なのか? テストとAMD担当者インタビューからその特性と将来性を本気で考える - 4Gamer.net
0x00FFは,Ryzen 7 1800Xだと8スレッド全部を片方のCCXに割り当てる格好となる。

一方の0xF00Fだと4スレッドずつ2基のCCXへ割り当てるという,Ryzen 7 1800Xにとって苦手なタイプの割り当てだ。

さらに0x5555はスレッドを論理CPUコア1つ飛ばしで割り当てるため,結果としてSMT無効時と似た実行形態になる。

前述のとおり,FFXIVベンチは使えるCPUコアに対してアクティブスレッドをどかっと立ち上げるので,Ryzen 7 1800X,i7-6900Kとも,0x5555設定時のスコアが最も高い。これは納得だろう。

Ryzenはなぜ「ゲーム性能だけあと一歩」なのか? テストとAMD担当者インタビューからその特性と将来性を本気で考える - 4Gamer.net より

つまり、CPU0、CPU2、CPU4 …が物理コアで、CPU1、CPU3、CPU5…が論理コア、ということなのかな。たぶん。

ただ、実際に 5500 や 5550 を指定してみたら、動きが止まる時があるというか…。「論理コアも使えるなら使え」的に、FF00 や FFF0 を指定したほうが、滑らかに動く、ような気もするけどちょっと自信が無い。

もしかすると、このあたりCPUコアのキャッシュが絡んでるのだろうか。それとも、ゲーム用に使ってるコアに対して、「こっちのプログラムも動かしてくれ」的にWindows10が他の何かを割り込ませてくるのだろうか。だとしたら、「論理コアもゲーム用に使え」と指定することで、物理コア+論理コアをゲームで占有できて割り込みが少なくなる状況を作り易くなったり…?

Ryzen は、SMT という機能で、1つのコアを2つのコアのように見せかけているけれど。BIOS設定でSMTを無効にすれば、物理コアしか持ってないような状態にできる模様。ただ、Ryzen 7 1700 + GIGABYTE B450M S2H rev.1.0 で試してみたところ、何故か Windows10 の終了メニューから「スリープ」が無くなってしまって…。なんだか怪しいので、SMTは「自動」にしておくことにした。

余談。タスクマネージャのグラフ。 :

巷の記事を眺めると、Windows10 のタスクマネージャ上で、CPUのコア数(スレッド数)分グラフを表示してる画像がよく出てきて、「ソレ、どうやるの」と疑問だったのだけど。

タスクマネージャのグラフの上で右クリックすれば、切替メニューが出てくるのだな…。知らなかった…。

#2 [pc] AMD Ryzen Masterをインストールしてみた

AMD Ryzen は、AMD Ryzen Master なるオーバークロックツールが、AMDから公式に公開されてるらしい。凄いな…。公式ツールかよ…。せっかくだからインストールしてみたり。環境は Windowsw10 x64 1909。CPUは、AMD Ryzen 7 1700。

起動してみたところ、どうやら全コアに対して、0.25GHz ずつクロックを上げていくことができる模様。Ryzen 1000番台だから、全コアのクロックを上げていくことしかできないけれど、昨今の 3000番台なら、コア単位でクロックを上げていくことができる、という話も見かけた。

とりあえず、標準電圧のままで、3.4GHz まで上げることができたように見えたけど…。ゲームを動かしながら確認した感じでは、特にFPSが向上してるようには見えず…。

2020/04/10(金) [n年前の日記]

#1 [pc] Ryzen の SMT ModeとWindows10のスリープ

AMD Ryzen 7 1700 + GIGABYTE B450M S2H rev.1.0 で、BIOS上で SMT Mode を無効にすると、Windows10 の電源メニューにスリープが出てこなくなる問題について。

ちなみに、SMT というのは、Intel の HHT (Hyper-Threading Technology) みたいなもの。という説明でいいのだろうか。1つのCPUコア(物理コア)で、2つのCPU(論理コア)があるように見せかける技術、らしい。

さておき。スリープの項目が消えてしまうのはウチだけの不具合なのかな、と思ってググってみたら、どうやらGIGABYTEのみならず ASUS や ASRock のM/Bでも「そういう仕様」らしい…。

_When I disable SMT, standby mode disappears on ... | Community
_AX370 Game 5 Windows 7 Sleep Problems Ryzen SMT BIOS Solved! | GIGABYTE USA Forum
_【スリープは】スリープモードが突然消えて焦ったが無事解決した話【どこへ消えた?】 | チェス犬趣味日記
_価格.com - 『SMTを無効にしたとき、スリープに移行できるか否か』 MSI B450 GAMING PLUS のクチコミ掲示板
_価格.com - 『本製品は、SMTを無効にするとスリープに移行しなくなります』 ASRock B450 Pro4 利他心さんのレビュー評価・評判
_Ryzen 2700X マシン購入後、気になった事のメモ (主に ASUS C7H 関連) - ぼくんちのTV 別館

SMT無効のほうがゲームを動かす分には良いらしいのだけど、スリープできなくなってしまうのも困る。仕方ないのでSMT無効化は諦めるしかないか…。

余談。M/B交換後はスリープが使えるようになったので、ちょっとありがたい。今まで使ってた Intel Core i5 2500 + Intel DH67BL + MSI GeForce GTX 1060 AERO ITX 6G OC では、スリープさせると復帰時に画面が映らない症状が発生してしまったので、スリープが利用できなかった…。しかしそのあたり、今になって考えると、USB3.0増設ボードが悪さをしていた可能性もありそうな。でも、外していたら USB3.0 が使えなくなったから、どのみちスリープは諦めるしかなかったのかもしれない。

#2 [pc] メインPCの構成をメモ

現時点のメインPCの構成を一応メモ。メモしておかないと忘れる…。


以下は、つけるとシャットダウンできなくなるので外した。

2020/04/11() [n年前の日記]

#1 [pc] フレームレートが安定しない

Ryzen 7 1700 で某ゲームを動かすとフレームレートが安定しなくて、どうにか改善できないかとスレッド数の指定を変えてみたり、Ryzen Master を触ってみたり、電源プランを変更してみたりしたけれど、改善が見られず。

cmd start で /affinity 555 や FFF を指定してみたけれど効果無しで。0.n秒ほどゲームの動きがピタリと止まってしまう…。

Ryzen Master上の「同時スレッド」なる項目は SMT Mode のことを指しているのではないか、だとすれば Ryzen Master上で SMT Mode を無効にできるのでは、と想像して変えてみたけれど。再起動を要求されて、再起動して、Ryzen Master が自動起動して…。しかし SMT が無効になっているようには見えず。タスクマネージャには相変わらず16スレッドが表示される…。この項目は一体何なのか…。

電源プランで、「バランス」を「高パフォーマンス」にしてみても効果無し。

フレームレートが多少低くなってもいいから、安定したフレームレートになってほしいのだけど…。策は無いのかな…。

2020/04/12() [n年前の日記]

#1 [pc] CCXが気になる

Ryzen CPU には CCX なるものが載っていて、CCXが1つで4コア分を担当してるらしい。8コア16スレッドの Ryzen 7 1700 なら、CCX が2つ載っている。そして、Ryzen のCPUコアは、L1キャッシュ、L2キャッシュは個別に持っているけれど、L3キャッシュに関しては CCX1つ分の中では高速に転送できるけどCCXを跨ぐ状態になるとパフォーマンスが落ちるのだとか。

ということは、ゲームを動かす際も、CCX1つ分に収まるように、使うスレッド数を指定すれば、動作が改善するのでは、と思えてきたわけで。

てなわけで start /affinity 00FF を指定して試してみたのだけど…。相変わらず、動きが一瞬止まるソレが入ってくるけれど、それでもなんとなく、一瞬止まるソレの回数が少なくなったような気がする…。となると、ゲームによっては、CCX1つで収まるようにするのも効果的、ということなのかな…。いや、単に気のせいかもしれないけど。

FPS表示ツールを変えてみたり。 :

他にも、FPSを表示するツールがゲームの動作を邪魔しているのではないかと邪推して、今まで使ってた MSI Afterburner の他にも、Windows10ゲームバー、Fraps などを試してみたり。

_Afterburner | エムエスアイコンピュータージャパン
_Windows 10 の「ゲームバー」を使い、アプリの操作内容を動画として録画する - k本的に無料ソフト・フリーソフト
_Fraps のダウンロードと使い方 - k本的に無料ソフト・フリーソフト

しかし、特に改善は見られず。やはり何かの拍子に動きが一瞬止まる…。

ちなみに、Windows10 (1909) のゲームバーで、FPSを表示し続ける方法が分からなくてちょっと悩んだり。Win + Gキーを叩くとゲームバーが表示されて、「パフォーマンス(ベータ)」というウインドウも表示され、そこでFPSが確認できるのだけど、Win + Gキーを叩いてゲームバーを消すと、一緒にパフォーマンスウインドウも消えてしまうわけで。どうすりゃいいのだ…。

単に、ウインドウをピン止めすればいいらしい…。気づくまで悩んだ…。

2020/04/13(月) [n年前の日記]

#1 [windows] デスクトップが一瞬死んでしまう

M/B交換後、Windows10 x64 1909 のデスクトップが一瞬背景色だけになってしまう症状がでていたり。処理を担当していたエクスプローラが何かの拍子に死んでしまって、しかしすぐに立ち上がるのだけど、画面の右下にあるタスクトレイ(システムトレイ? 通知領域?)に並んでた常駐ツールのアイコンが出てこなくなるわけで…。地味に困る…。

とりあえず、以下を参考にして、改善できないかテスト。

_Explorer.exe Crashes, Exception Code: 0xC0000374 - Microsoft Community
_DISM またはシステム更新準備ツールを使用して Windows Update のエラーを解決する
_DISM.exeとsfc /scannowでWindowsを修復する | 己で解決!泣かぬなら己で鳴こうホトトギス

管理者権限でコマンドプロンプトを開いて…。
DISM.exe /Online /Cleanup-image /Restorehealth
sfc /scannow
100%になってから、結構時間がかかってヒヤヒヤした。これで改善してくれればいいのだけれど。

#2 [anime][neta] 「ギャルと恐竜」のOPが気になる

「ギャルと恐竜」というアニメを視聴。漫画を原作とするアニメで、「ポプテピピック」のスタッフが結構参加している、ように見える。OP曲、ED曲は、「ポプテピピック」のOP曲を作った方っぽいし、神風動画もスタッフロールに出てくるし。

フェルト生地で作ったっぽい感じがするEDアニメ映像がイイ感じだなと。また、「残酷な天使のテーゼ」で有名な高橋洋子さん、の双子の姉(という設定?)の高橋竜子さんの歌声もイイ感じ。何より、歌詞が秀逸。曲のみを単体で流してもそれらしい風景が浮かぶし、それでいて本編内容ともしっかり一致していて…。こういう作りは上手いなと感心してしまった。

さておき。OP曲やOP映像もイイ感じなのだけど、ビミョーに気になるところが…。曲のリズムに合わせてカットがポンポンと切り替わっていく部分があるけれど、一見リズムに合わせているようで次第にちょっとずれていくあたりが正直気持ち悪くて…。これはわざとやっているのだろうか。それとも作業ミスだろうか…。何にせよ、せっかくイイ感じの映像なのに、ビミョーにもったいないなと…。曲のノリもいいから尚のこと…。

いや、これは本当にずれているのだろうか。実はピッタリ合っていて、自分のリズム感覚が次第にずれてる、という可能性はないか。なんだか自信が無くなってきた…。

2020/04/14(火) [n年前の日記]

#1 [windows] Launchyをアップデートしてみた

Windows10 のデスクトップ画面を担当してるエクスプローラが時々何かの拍子に死んでしまうのが気になっていて。もしかして常駐ツールが悪さをしているのではないかと思えてきたり。

ひとまず、各常駐ツールの新しい版があるなら更新してみようか…。調べてみたら、Launchy 2.6 beta 2 があることに気づいたので、Launchy 2.5 に上書きインストールしてみたり。これで少しは改善されたらありがたいのだけど…。

その後調べてみたら、2.6 beta 2 は、2010年の時点で公開されてた版のようで。となると、症状改善は期待できないな…。

などと書き込んでる最中に、またデスクトップのエクスプローラが死んだ。Launchy をアップデートした意味は無かった模様。コレが犯人ではナサゲ。

とりあえず、2.5 に戻しておいた。

#2 [blender] LuxCoreRender 2.3 を試用

無料で使える物理ベースのレンダラー、 LuxCoreRender 2.3 が公開されていることに今頃気づいたので、試用してみたり。環境は Windows10 x64 1909 + Blender 2.82a。GPU は NVIDIA GTX 1060 6GB。CPU は AMD Ryzen 7 1700。

_LuxCoreRender - Open Source Physically Based Renderer
_Download - LuxCoreRender
_LuxRender - Wikipedia

Blender 2.8x に、BlendLuxCore を導入すれば、Blender上でレンダーエンジンの一つとして選べるようになる。OpenCL使用版と未使用版があるけれど、今回は未使用版、BlendLuxCore-v2.3-win64.zip を入手。

BlendLuxCore をインストールする。Blender 2.82a を起動して、編集 → プリファレンス → アドオン。上のほうにある「インストール」をクリックして、BlendLuxCore-v2.3-win64.zip を選択してインストール。「Render: LuxCore」がインストールされた。使用するべくチェックを入れてから、念のために Blender を再起動。

これで、レンダーエンジンとして「LuxCore」も選択できるようになった。

何かしら、サンプルファイルをレンダリングしてみる。 _Download - LuxCoreRender の Example Scenes から辿って、いくつかDL。解凍すると中には .blend が入っているので、Blender で開ける。

レンダリングしてみたけれど、CPUを使ってレンダリングすることしかできないようで、レンダリング時間が結構かかった。が、一応レンダリングはできた。

ちなみに、放置しておくと、いつまでもレンダリングして画質を高めていくので、「このへんでいいかな」と思ったあたりでESCキーを叩いて計算を止めてやる、という仕様だった気がする…。おそらく、「このぐらいまで画質が得られたら計算を止めろ」てな設定もできそうな気もする。そこまで調べてないけれど。

しかし、8コア16スレッドのCPUを使っていても、やはりCPUだけではレンダリングが遅い…。

NVIDIA製GPUを使ってる環境で、OpenCLとやらは使えないのだろうか…。使えるようにできれば、GPUでレンダリングできるのかな…? そのへんよく分かってないわけで…。ググっても、「NVIDIAのGPU使ってるならCUDAを使うもんでしょ。OpenCL は AMD/ATI GPU 使ってる人達が使うもんでしょ」みたいな話しか見かけないし…。

LuxMark 3.1を試用。 :

LuxMark なるベンチマークソフトがあるらしい。OpenCL のベンチマークができるのだとか。

_LuxMark - LuxCoreRender Wiki
_LuxMark v3 - LuxCoreRender Wiki

luxmark-windows64-v3.1.zip をDL、解凍して、luxmark.exe を実行してみた。

GeForce GTX 1060 6GB でも、OpenCL 1.2 を使ってレンダリングができているように見える…。ということは、NVIDIA製GPUでもOpenCLは使える?

OpenCL版の BlendLuxCore をインストールしてみる。 :

Blender上で BlendLuxCore をアンインストールしてから、OpenCL使用版の BlendLuxCore、BlendLuxCore-v2.3-win64-opencl.zip をインストールしてみた。

レンダーエンジンとして LuxCore を選んだ際、デバイスとして OpenCL が選べるようになった。一応レンダリングもできているっぽい。

NVIDIA製GPUを使っている環境でも、OpenCL使用版を選べばよかったのか…。

ネットワークレンダリングがよく分からず。 :

LuxCoreRender はネットワークレンダリングが使えるので、部屋の中に転がってるサブPC群を叩き起こして、レンダリング計算を手伝わせることができる…はず…なのだけど。やり方がよく分からない…。

まずは .bcf でエクスポートするらしいのだけど、ファイル → エクスポートの中に、.bcf は無く…。どうやってエクスポートするのだ…。

#3 [blender] Blender 2.82aでベンチマークをしてみたり

昔、Blender 2.7x でレンダリング時間を測定した画像が見つかったので、現状ではどの程度変わってるのか試したり。環境は、Windows10 x64 1909 + Blender 2.82a + Ryzen 7 1700 + NVIDIA GeForce GTX 1060 6GB。

HDDの中に、2.7x 時代にDLした「Car demo」があったので、今回もソレをレンダリング。

_Demo Files - blender.org

たしか 2.7x の頃は、CPUのみ、GPUのみでレンダリングする設定しかできなかった気がするけれど。2.8x は、CPU + GPU でレンダリングする設定もできるようになった、という話を見かけたわけで。これで、ローカルのハードウェアリソースをフル活用してレンダリングできるようになったはず…。ありがたや。

実際試してみたら、こんな結果に。

_Blender 2.82a + Ryzen 7 1700 + GTX 1060 6GB
_Blender 2.79b + GTX 1060 6GB

かなりの高速化。さすが、8コア16スレッドのCPU…。

いや、もしかすると、Cycles の最適化が進んだのかもしれないか。

試しに、2.79b と 2.82a 上で、Ryzen 7 1700 だけ使ってレンダリングしてみた。

_blender279b_benchmark_ryzen7_1700_20200414.png
_Blender 2.82a + Ryzen 7 1700

やはり、2.82a は最適化が進んでいるようだなと…。たぶん。

また、Ryzen 7 1700 なら、GTX 1060 6GB のみでレンダリングした場合と結構近い速度が出せている、とも言える。ゲーム向けではないけれどクリエイター向けのCPU、という Ryzen の評価は妥当な気がしてきた。

2020/04/15(水) [n年前の日記]

#1 [blender] LuxCoreRenderとbcfファイルとBlender2.82a

LuxCoreRender 2.3 を使ってネットワークレンダリングができないか、つまりは、Blender + BlendLuxCore からbcfファイルを書き出して LuxCoreRender (Standalone) 2.3 でレンダリングできないか試していたのだけど。なんだかちょっとアレな部分でハマってしまった…。

環境は、Windows10 x64 1909 + Blender 2.82a + BlendLuxCore 2.3 + LuxCoreRender 2.3。

_LuxCoreRender - Open Source Physically Based Renderer

結論から先に書くと…。LuxCoreRenderで処理するための bcfファイルを Blender 2.82a から書き出す際は、Blender の言語設定を英語にしなきゃダメ。

日本語設定にしてある Blender で bcfファイルを書き出すと、日本語文字列も bcfファイルに含まれてしまって、LuxCoreRender で読み込もうとした際に解析できなくてエラーを出して止まってしまうそうで。

ちなみに、Blender 2.82a + BlendLuxCore 2.3 だけでレンダリングをするなら、日本語設定にしてあっても問題無く動く。あくまで、bcfファイルを書き出して他のアプリで読み込ませてレンダリングをする、といった場面では言語設定が絡んでくる、ということらしい。

以下のやり取りを眺めて、ようやく原因が分かった…。まさかこんな罠が仕掛けられていたとは…。

_bad lexical cast on export from blender - LuxCoreRender Forums
_bad lexical cast on export from blender - Page 2 - LuxCoreRender Forums
_Error when try to render on Linux - Page 2 - LuxCoreRender Forums

言語設定の変更方法。 :

一応、Blender 2.8x で言語設定を変更する手順をメモ。

Blender 2.8x を起動したら、編集 → プリファレンス、を選択。

lang_set_ss01.png

設定ウインドウが開くので、インターフェイス(Interface)タブを選んで、翻訳(Translation)のチェックを外して無効化。これで英語設定になる。

lang_set_ss02.png

もちろん、チェックを入れて、言語(Language)で「Japanese(日本語)」を選び、Tooltips や Interface にチェックを入れれば、日本語化できる。

bcfファイルのエクスポート手順。 :

LuxCoreRender 2.3 でネットワークレンダリングをするためには、bcfファイルをエクスポートして、ソレを使わないといけないらしい。

再度書いておくけれど、Blender が日本語化されていると、他のアプリで読み込める bcf が書き出せない。一旦英語設定にしてから書き出すこと。

また、Camera の Tonemapper が Linear になっているとレンダリング処理が進まない、という話も見かけたので、もしかすると Reinhard 等にしておいたほうがいいのかもしれない。

_たまに更新されるblenderとかの記録: LuxCoreRenderたのしい。

tonemapper_ss01.png

さておき。Blender 2.82a + BlendLuxCore 2.3 で、bcfファイルを書き出すためには…。
  1. Render Engine を LuxCore に。
  2. LuxCore Tools の LuxCore Filesaver にチェックを入れる。
  3. 書き出すファイルタイプを「Binary」にする。
  4. 書き出し先のフォルダを指定。

export_bcf_ss01.png

指定ができたら、F12キーを叩いてレンダリングをする。が、実際にはレンダリングはされず、bcfファイルが書き出される。

例えば、hoge.blend を開いて作業していた場合、書き出し先フォルダに、hoge_LuxCore というフォルダが作成されて、その中に「00001.bcf」といったファイル名で bcf が書き出される。この数字はアニメのフレーム番号と対応してる、のではないかと思う。たぶん。

計算を止めるための指定。 :

余談。LuxCoreRender は、レンダリングを始めるといつまでも計算を続けて画質をどんどん上げていくので、このぐらいでいいかなと思ったら手動で止めてやる必要がある。BlenderならESCキーを叩くと止めてくれる。

ただ、Blender上でレンダリングをする場合、LuxCore Halt Conditions で、計算処理の自動停止条件を指定できる模様。

例えば、前述の画像では、サンプル数が500に達したら計算を止めろ、という指定をしている。

他にも、「一定の計算時間が過ぎたら止める」「ノイズの量が一定値以下(?)になったら止める」といった指定もできる、のだと思う。たぶん。

bcfファイルをLuxCoreRenderで読み込む。 :

bcfファイルを、LuxCoreRender Standalone で読み込んで、レンダリングできるかどうか試す。ここでレンダリングできれば、ネットワークレンダリングにも利用できる bcfファイルになっているはず。

_Download - LuxCoreRender

LuxCoreRender Standalone 2.3 を入手。今回は、luxcorerender-v2.3-win64.zip をDLした。解凍すると、luxcoreui.exe という実行ファイルが入ってるので起動。ウインドウが開く。

サンプルファイル(.cfg)が同梱されているので、まずはそれを開いて動作確認。Rendering → Load → scenes/cornell/cornell.cfg を開く。いきなりレンダリングが始まれば、ちゃんと動作している。

Rendering → Cancel を選んで、処理をキャンセルしてから、先ほど Blender + BlendLuxCore で書き出したbdfファイルを開く。これまたいきなりレンダリングが始まれば、問題が無いと思われるbcfファイルが書き出せた、と分かる。

もし、「RenderConfig Load Error」とか「bad lexical cast: source type value could not be interpreted as target」と言われて処理が進まなかったら、読み込めない bcf を書き出してしまった可能性が高い。Blender が日本語設定のままだったりしないか確認。

ネットワークレンダリングをしてみる。 :

LuxCoreRender はネットワークレンダリングができる。例えば、部屋に転がってる数台のサブPCをLANで繋いで、レンダリング計算するための Node を立ち上げて、メインPCからLAN経由でレンダリングしたいファイルを渡してやれば、サブPC達が一丸となってレンダリングの計算をしてくれる。「このオラにほんのちょっとずつだけ計算力をわけてくれ…!!!」みたいな。

レンダリングするためのプログラムは、LuxCoreRender Standalone に同梱されてる。pyluxcoretool.exe や pyluxcoretools.zip がソレ。

Windows機なら、pyluxcoretools.exe を実行すればいい。DOS窓が開いてから、選択ウインドウが表示される。

pyluxcoretool_ss01.png

  • レンダリング計算をする側になりたいなら、NetNode をクリック。
  • レンダリングを指示する側になりたいなら、NetConsole をクリック。

NetNode をクリックすると、以下のような画面になる。

pyluxcoretool_ss02.png

「Host name or IP address」に、自分自身と言うか、Node を立ち上げるPCのホスト名かIPアドレスを入力するっぽい。たぶん。「Start node」をクリックすれば、待ち受け状態になる。

NetConsole をクリックすると、以下のような画面になる。

pyluxcoretool_ss03.png

「Add job」をクリックして bcfファイルを選択すると、認識してる Node達に対して「このファイルをレンダリングしてくれ」と指示を出す。

とりあえず、Windows機上で NetNode と NetConsole の2つを動かして、レンダリングできることは確認できた。もっとも、1台のPC上で、計算と指示出しをやっても意味が無いのだけど。Blender上でレンダリングするのと変わらない…。

#2 [blender][linux] Linux上でLuxCoreRenderを動かしてみたかったけどやっぱりダメだった

LuxCoreRender は Linux版も用意されているので、動くかどうか試したり。

環境は、Ubuntu Linux 18.04 LTS + AMD A8-3850。

結論を先に書くと、AMD製CPU + Linux では動かないっぽい…。Intel製CPU + Linux なら、もしかすると動くかもしれないし動かないかもしれない。

以下は、試行錯誤のメモ。

Python関係の必要なパッケージをインストール。 :

python3 pyluxcoretools.zip で動くはずだけど、動かすためには Python 3.x と PySide2 が必要になるらしい。
sudo apt install python3
sudo apt install python3-pip
sudo apt install qttools5-dev-tools
sudo -H pip3 install PySide2

何故か PySide2 が落ちてこない…。仕方ないので、Windows機でDL。PySide2-5.14.1-5.14.1-cp35.cp36.cp37.cp38-abi3-manylinux1_x86_64.whl をDLすればいいのかな…。

_PySide2 - PyPI
_5.14.2-5

DLできたので、Ubuntu機に転送して、以下を実行。
sudo -H pip3 install PySide2-5.14.1-5.14.1-cp35.cp36.cp37.cp38-abi3-manylinux1_x86_64.whl
shiboken2 5.14.2 とやらもインストールされた。

デスクトップ画面上で、PySide2 の簡単なサンプルを動かしてみたらウインドウが表示されたので、インストールできたっぽい。

helloworld.py
import sys
from PySide2.QtWidgets import QApplication, QLabel

if __name__ == "__main__":
    app = QApplication(sys.argv)
    label = QLabel("Hello World")
    label.show()
    sys.exit(app.exec_())

python3 helloworld.py

LuxCoreRenderをDLして解凍。 :

LuxCoreRender 2.3 をDLする。

_Download - LuxCoreRender
wget https://github.com/LuxCoreRender/LuxCore/releases/download/luxcorerender_v2.3/luxcorerender-v2.3-linux64.tar.bz2
これも落ちてこない…。仕方ないので、これまた Windows機でDLして、Ubuntu機に転送。しかし、何故にUbuntu機だけ接続が切れるのか…。

luxcorerender-*.tar.bz2 を解凍。~/bin/ を作成して、その中に展開した。
cd 
mkdir bin cd bin tar jxvf luxcorerender-v2.3-linux64.tar.bz2
~/bin/ 以下に、LuxCore というディレクトリができた。中には、luxcoreui や pyluxcoretools.zip が入ってる。

luxcoreui は実行ファイルなので、実行できるはず…。
./luxcoreui
コアダンプを吐いて不正終了。なんでや。

OpenCL使用版ならどうだろう。luxcorerender-v2.3-linux64-opencl.tar.bz2 をDLして解凍。OpenCLの動作に必要となるらしい何かしらもインストール。
sudo apt install mesa-opencl-icd clinfo
ダメだった。コレもコアダンプ。

Intel製CPUに特化してる気配がする。 :

たしか、以前、LuxCoreRender 2.0 を試した時に、Intel製CPUじゃないと動かない何かが含まれていたような記憶が…。

_mieki256's diary - AMD製CPU + Ubuntu 14.04 LTS上で LuxCoreRender の Static link版をビルドできるか実験

今現在の版も、AMD製CPUでは相変わらず動かない状態、ということなのかもしれない。

本当にそうかな? 試しに、Intel Core2Duo E8400 が載っている、別のサブPC + Ubuntu Linux 18.04 LTS 上で同じ作業をしてみた。… luxcoreui がすんなり動いてしまった。同梱の scenes/cornell/cornell.cfg を開いたら、これまたあっさりレンダリングが始まった。

ネットワークレンダリングに使う、python3 pyluxcoretools.zip は、python3-pyside をインストールしてあるとエラーを出して動かない模様。sudo apt purge python3-pyside でアンインストールして、sudo -H pip3 install PySide2 で PySide2 だけインストールした状態なら動いてくれた。

何にせよ、LuxCoreRender 2.3 Linux版は Intel CPU上でのみ動くようにビルドされた状態で公開されているらしい。AMD製CPUは門前払い、てのもなんだか酷いな…。

Windows版のバイナリはIntel製CPUに特化しない設定でビルドされているらしいので、Windows上で動かす分にはAMD製CPUを使っていても問題は無いのだけど。何故にLinux版はIntel縛りなの…。

もっとも、古いCPU ―― しかもIntelより性能が低いのが当たり前だった時代のAMD製CPU ―― が載ったPCを数台動かして計算するよりも、今時のGPUで計算したほうが数倍速いし、消費電力も少なくて済むであろう予感もあるわけで。サブPC群でレンダリングすることで、古いPCを有効活用している気分だけは味わえるけど、何か実利があるのかと考えると、たぶんほとんど無いのだろう…。

2020/04/16(木) [n年前の日記]

#1 [blender] LuxCoreRender 2.3 Linux版をビルドしようと試みたけど上手く行かない

無料で使える物理ベースレンダラー、 _LuxCoreRender の 2.3 Linux版は、Intel CPUでしか動かないバイナリが公開されてしまっているっぽいのだけど。自分でビルドしたら AMD CPU (AMD A8-3850, A6-3500等)でも動くバイナリが作れるのではないかしらん、と思えてきたので試行錯誤中。

_昔の日記 によると、LuxCoreRender 2.0 の時は、以下をすることでAMD製CPUでも動いたらしい。
であれば、今回も同じ作業をすれば動くバイナリが作れるのではないか。

ちなみに、Embree というのは、Intel が提供してくれたライブラリで、レイトレーシング計算時の交差判定を高速に処理してくれるのだとか。

_Introduction to Embree

おそらく、元々がIntel製だけあって、Intel CPUでしか動かないバイナリがずっと公開されているのだろう…。たぶん。

さておき、Ubuntu 18.04 LTS + AMD A8-3850 で、ビルドできるか試してみたけど…。Embree をビルドするところまではできたけど、LuxCoreRender ダイナミックリンク版をビルドするところで詰まってしまった。 _公式 Wikiに記述されてるビルド手順 が古い内容らしくて、「oidn (Intel製ノイズ除去ライブラリ)が足りない」と言われて止まってしまう。

他にも、LuxCoreRender が使用しているライブラリのいくつかが、AVX や SSE4_2 を有効にした状態でビルドされているようで…。2.3 は 2.0 より機能が増えた分、他のライブラリへの依存度も増えていて、その分、Intel CPU に特化したバイナリが混ざってしまっているのだろうなと。

#2 [pc] AMD CPUのSIMD対応状況を調べたり

AMD CPU、特にAPUの、 _ストリーミングSIMD拡張命令 について調べてみたり。

自分の部屋に転がってるのは、A8-3850、A6-3500、そして Athlon II X2 250 なのだけど…。

_AMD Accelerated Processing Unit - Wikipedia
_Athlon II - Wikipedia

A8-3850、A6-3500 は、Llano世代。2011年頃の製品。AMD APUとしては第一世代なのかな。たぶん。対応しているのは…。
MMX, Enhanced 3DNow!, SSE, SSE2, SSE3, SSE4a, AMD64, NX Bit, AMD-V

AMD Accelerated Processing Unit - Wikipedia より

AVX や SSE4.2 は未対応らしい。

Athlon II X2 250 は、Regor世代。2009年頃の製品。対応しているのは…。
MMX, Extended 3DNow!, SSE, SSE2, SSE3, SSE4a, AMD64, Cool'n'Quiet, NX bit, AMD-V

Athlon II - Wikipedia より

これも、AVX や SSE4.2 は未対応。

しかし、同じAPUと呼ばれる製品でも、例えば Trinity世代、2012年の製品、第二世代では…。
MMX, SSE1 - 2 - 3 - 3s - 4.1 - 4.2 - 4a, AES, AVX, BMI1, F16C, FMA3, FMA4, TBM, XOP, AMD64, NX Bit, AMD-V, Turbo Core 3.0

AMD Accelerated Processing Unit - Wikipedia より

AVX も SSE4.2 も対応しているっぽいのだよな…。

つまり、
ということで、「LuxCoreRender が動かない? お前の使ってるCPUが古過ぎるんだよ。そんなもん窓から投げ捨てろ」と言われてしまっても仕方ないような気もするわけで。

CPUだけ交換したら使えるPCにならんかな、と思ったけれど、A8-3850 や A6-3500 って Socket FM1 だから…。第二世代は Socket FM2 なのでM/Bに刺さらない。Socket FM1対応CPUって第一世代だけなのだよな…。

ちょっと待て。古いPCを有効活用できないかと悩んでいたのに、別途ハードウェアを購入することを考え始めるとか…。これでは本末転倒ではないか。

2020/04/17(金) [n年前の日記]

#1 [blender] SSE4.1の壁

AMD A8-3850 + Ubuntu 18.04 LTS上で LuxCoreRender 2.3 を動かしたくて、oidn (Open Image DeNoise, Intel提供の画像ノイズ除去ライブラリ)をビルドしようとしていたのだけど。

ちょうどビルドが終わったタイミングで、ふと、 _github上のドキュメント の一文が目に入った。「このライブラリを動かすには、最低限、SSE4.1が必要」と書いてある…。AMD A8-3850 も、AMD A6-3500 も、Athlon II X2 250 も、SSE4.1 は未対応なわけで。ハイ、詰んだ。

改めてググってみたら、該当ライブラリを導入した _Blender 2.81 + Cycles の説明文 にも「SSE4.1が必要」と書いてあった…。「ここ10年以内に発売されたCPUなら持ってるはず」とも…。

ということで、どんなに頑張っても LuxCoreRender は、古いAMD CPU上では動かせないことが判明。例えば Phenom II とか、あのへんの時期のCPUはSSE4.1に未対応なのでダメ。どうしても古いAMD CPU上で LuxCoreRender系を動かしたいなら、2.x ではなく、LuxRender 1.6 とか 1.5 を使えば動くかもしれない。そのあたりのバージョンなら以前動かした記憶があるので…。

これが Intel CPUなら、Core2Duoですら動くのだけどなあ…。

2020/04/18() [n年前の日記]

#1 [pc] IW-BK623にCore i5-2500を入れた

今までメインPCとして使ってた Intel Core i5-2500 + Intel DH67BL + 8GB RAM を、省スペースケース INWIN IW-BK623/300(R) に入れた、とメモ。メモしておかないと忘れる…。

Core i5-2500側のビデオカードは…。ひとまず、内蔵GPUの Intel HD Graphics 2000 を使うことにしておく。Intel DH67BL にはHDMI端子もついてるので、ちょっと助かる。

USB3.0増設ボードは、今回はつけなかった。つけてしまうと、ケース最下部に設置してある電源ファンから排気しづらくなりそうなので。IW-BK623 は、電源ファンしか排気ファンが無い窒息ケースなので…。

HDDは今まで入ってたものをそのまま利用。Ubuntu Linux 18.04 LTSが入ってるので、CPUやM/Bが変わってもそのまま動くはず。たぶん。

とりあえず、Memtest86+ は3回ほどPASSしたので、CPU と M/B は壊れてないだろう…。

CPU も M/B も変わったけれど、 Ubuntu 18.04 LTS は、すんなり起動してくれた。ありがたや。さすがモノリシックカーネル、なのだろうか。

せっかくだから、LuxCoreRender 2.3 Linux版をDLして動かしてみた。Core i5-2500は SSE4.1 も AVX も対応してるので、すんなり起動。レンダリングもできた。また、python3 pyluxcoretools.zip を起動して、メインPC側からの指示で、ネットワークレンダリングができることも確認できた。

今までは Athlon II を入れてた。 :

今まで IW-BK62 に入れていた、AMD Athlon II X2 240 + ASRock M3A785GMH/128M + 8GB RAM は取り外した。メモリを8GBも積んでるあたりがなんだかもったいないけど…。ちなみに、Athlon II X2 250 のCPU性能は、Core2Duo E8400以下らしい。

メモリの流用はできないのかな。 :

Athlon II X2 250 で使ってるメモリも、Core i5-2500 で使ってるメモリも、DDR3-1333(PC3-10600)なので…。Athlon II 側のメモリを外して Cre i5側に差して増設することもできるのだろうか。一応、Intel DH67BL は32GBまで対応と書いてあるし。

でも、規格は同じでも、細かいスペックが違うメモリを一緒に使ってしまうと不具合が起きる、という話も見かけた記憶も。

まあ、サブPCに16GBも積んでみても…。有効活用する何かしらも思いつかないし…。このままにしておこうか…。

2020/04/19() [n年前の日記]

#1 [linux] FreeBSD 12.1 を Core i5-2500機にインストールした

サブPCの Core i5-2500機に、Ubuntu Linux 18.04 LTS を入れて動かしていたのだけど。HDDの最後のほうに FreeBSD 10.2 がインストールされているのが気になって。今は FreeBSD 12.1 が出てるみたいだし、せっかくだから現行版をインストールし直しておこうかなと。

ひとまず、Ubuntu を起動。GParted を使って、今まで FreeBSD 10.2 が入ってたパーティションを削除して空き領域にしておいた。

インストールするOSは、FreeBSD 12.1。以下を参考にしつつ作業。

_2.3. インストール前に行う作業

今回はUSBメモリを使ってインストールした。FreeBSD-12.1-RELEASE-amd64-mini-memstick.img をDLして、 _Win32 Disk Imager を使って8GBのUSBメモリに書き込み。そのUSBメモリで起動して、OSインストール作業をする。インストール中はネット経由で色々DLするので、有線LANケーブルでネットに接続。

以前の日記も参考にしながら作業。パーティションはufsにしてインストール。途中で、disk全体に入れるのか、パーティションに入れるのかを尋ねてくるので、パーティションのほうを選んで Ubuntu とデュアルブートできるようにする。

_mieki256's diary - 元サブPC上のUbuntuとFreeBSDをインストールし直し

grubを設定。 :

FreeBSDインストール後、そのままだと Ubuntu しか起動しないので、Ubuntu側の grub で FreeBSD を起動できるように指定。
sudo vi /etc/grub.d/40_custom

以下の記述を追加。
menuentry "FreeBSD 12.1" {
    insmod ufs2
    set root=(hd0,3)
    kfreebsd /boot/loader
}

grubに反映。
sudo update-grub2

再起動後、grubのメニューの最後に「FreeBSD 12.1」が表示されて、それを選ぶと FreeBSD が起動してくれた。

ネットに繋がらない。 :

ネットに接続できなくて悩んだり。/etc/resolv.conf 内の nameserver指定がおかしかったので修正。
vi /etc/resolv.conf
# nameserver 192.168.x.x
nameserver 127.0.0.1

↓

nameserver 192.168.x.x
# nameserver 127.0.0.1

以下参考ページ。

_FreeBSD をインストールしたらpkgやporstnapを使おうとしてもError Fetchingとなる - Qiita

無線LAN子機を使う。 :

インストール作業や初期設定中は有線LANケーブルで繋いでたけど、普段(?)は、無線LAN子機、ELECOM WDC-150SU2MBK を利用して無線LAN接続したい。以下を参考にして作業。

_【FreeBSD】無線LAN(Wi-Fi)に接続したい - HacoLab
_FreeBSDのWiFiドライバー - Qiita

無線LAN子機の種類を確認。
> sysctl net.wlan.devices
net.wlan.devices: rtwn0

ネットワークI/Fを作成。
> ifconfig wlan0 create wlandev rtwn0 country JP

ネットワークI/Fを起動。確認。
> ifconfig wlan0
> ifconfig wlan0 up

アクセスポイントをスキャン。
> ifconfig wlan0 scan

無線LANルータへの認証用ファイルを作成。
> wpa_passphrase SSID KEY > wpa_supplicant.conf

アクセスポイントに接続。
> wpa_supplicant -B -i wlan0 -c wpa_supplicant.conf
Successfully initialized wpa_supplicant

> ifconfig wlan0

DHCPでIPアドレスを取得。
> dhclient wlan0

接続確認。
> ifconfig wlan0
> ping www.google.com

OS起動時に有効になるように設定していく。
> mv wpa_supplicant.conf /etc/wpa_supplicant.conf
> chown root:wheel /etc/wpa_supplicant.conf
> chmod 640 /etc/wpa_supplicant.conf

/etc/rc.conf に記述を追加。
> vi /etc/rc.conf
wlans_rtwn0="wlan0"  
ifconfig_wlan0="WPA DHCP"  
create_args_wlan0="country JP regdomain ETSI"  

OS再起動。
> shutdown -r now

avahiをインストール。 :

他のPCから、FreeBSDをインストールPCに対して、ホスト名を指定してアクセスできるようにしたい。avahi (mDNS?)とやらをインストールするとできるようになるらしいので試したり。

avahiのインストール。FreeBSD は pkg なるツールを使うとネット経由でバイナリのパッケージをインストールできるっぽい。
pkg install avahi

vi /etc/nsswitch.conf
hosts: files dns
↓
hosts: files mdns dns

service dbus enable
service avahi-daemon enable
service avahi-dnsconfd enable

service dbus start
service avahi-daemon start
service avahi-dnsconfd start

これで、ホスト名.local でアクセスできるようになった。

参考ページ。

_mDNS(avahi)導入 - いるねすのブログ

タイムゾーン変更。 :

sudoをインストール。 :

FreeBSD はデフォルトで sudo が入ってないっぽい。インストールする。
pkg install sudo
which sudo
which visudo

wheelグループに所属してるユーザは sudo が使えるようにする。
visudo
# %wheel ALL=(ALL) NOPASSWD: ALL
↓
%wheel ALL=(ALL) NOPASSWD: ALL
上記は、パスワード無しで sudo が使えてしまう設定なので注意。

任意のユーザをwheelグループに追加
pw groupmod wheel -m USERNAME

_FB:FreeBSDではいきなりsuが使えない - 電子タンク
_メモ: FreeBSDでsuを使うにはユーザをwheelグループに所属させる - 虎塚

vimをインストール。 :

vi を使うのはツライ。せめて vim が欲しい。
pkg install vim

aliasを設定。 :

FreeBSDはデフォルトだと csh を使うらしい。設定ファイルは以下。
vi ~/.cshrc
alias vi vim

雑感。 :

BSDは*NIX系だけど、Linuxとは細かいところで色々違うのだなと…。いやまあ、BSDのほうが本来の*NIXに近いのだろうけど。

デスクトップ用途であれば、Linuxを選んだほうが良さそうな気もする。

2020/04/20(月) [n年前の日記]

#1 [godot] 自機が画面外に行かないようにしたい

Godot Engine 3.21 を使ってシューティングゲームっぽいものが作れそうか実験しているのだけど。自機が画面外に行かないように補正する処理をどう書いたらいいのかで悩んだり。

これが2Dゲームなら簡単な話で。自機のX座標やY座標が、画面端を超えてないかチェックして、超えてるなら画面端の座標で自機の座標を上書きしてしまえばいい。

でも、3Dゲームの場合、どうすればいいのか…。

例えば、こんな感じの画面にしたいなと思ったとして。

3dareacheck_ss01.png

自機が画面外に行かないようにするということは…。

3dareacheck_ss02.png

3dareacheck_ss03.png

この、赤い台形状の範囲内でしか動かないようにすればいい。でも、この範囲をどうやって求めたらいいのか。みたいな。

カメラの位置、角度、画角、そして、自機が移動する平面のy座標も決まってるとして。どうやって計算しよう…。

などと悩んでたけど、図を眺めてるうちに、中学生レベルの数学でも解けそうな気がしてきた。

しかし、Godot Engine の Camera の画角って、水平画角なのか、垂直画角なのか…。Blender に合わせてあるなら、水平画角かな…。たぶん。自信無いけど。

_mieki256's diary - Unityとblenderの画角だか視野角だかField Of Viewだかそのへんの話

(※ 2020/04/21追記。Godot Engine は水平画角、垂直画角を選べるっぽい。Camera の Keep aspect がソレ。デフォルトでは垂直画角になってる。)

別の方法。 :

Godot Engine の _Camera には、unproject_position() というメソッドがあって、コレを使うと、渡した3D座標(グローバル座標)が、2Dで表示してる画面上のどの位置になるかを取得することができる。

つまり、自機の座標を渡して2D画面上での座標値を得て、その座標値をチェックすれば…。自機が画面内/画面外のどちらに居るか、そのぐらいならざっくりと判定することはできる。そして、もし画面外に居るなら、画面内に入るように座標を補正してやることで、自機が画面外に出るのを防げるはず…。

と思えてきたので試してみたのだけど。補正時にガクガクしちゃうのだな…。自機移動時の変化量と、画面外に出た時の補正量が異なってるのが原因だと思うけど。

まあ、一応この方法でも、最低限画面外に出ない状態にはできたので、他に手が思いつかないならコレで済ませるのもアリかも。

ちなみに、プロジェクト設定の表示画面サイズは、以下で得られる。
  • 横幅 : ProjectSettings.get_setting("display/window/size/width")
  • 縦幅 : ProjectSettings.get_setting("display/window/size/height")

以下が参考になった。

_How to get the screen dimensions in GDScript? - Godot Engine - Q&A

2020/04/21(火) [n年前の日記]

#1 [blender] Blenderの画角は水平画角なのか垂直画角なのか

Blenderのカメラは画角で指定することもできるけど、それって水平画角なのか垂直画角なのかが気になって。Blender 2.82a を起動して確認作業をしていたのだけど。

ふとググってみたら、blender は水平画角、もしくは垂直画角を指定できると今頃知り。

_BlenderとUnityでゲーム開発をしてみた感想 | SOU・COLLE
_Blender基本操作(カメラ)

なんてこった。今まで知らなかった…。カメラの設定の中の、センサーフィット(Sensor fit)で、水平、垂直を選べる模様。

blender282a_fov_ss.png


昔、Unity と Bledenr の画角を合わせるために、わざわざ計算してアレコレしてた記憶があるけど。

_mieki256's diary - Unityとblenderの画角だか視野角だかField Of Viewだかそのへんの話

こんな面倒臭いことしなくても済んだのだな…。blender側で垂直画角を選べばOKだった…。トホホ。

でもまあ、当時のソレで、垂直画角から水平画角を求めるやり方が分かったから、悩んだのは無駄ではなかった、ということにしておこう…。

2020/04/22(水) [n年前の日記]

#1 [godot] カメラ情報から自機の移動範囲を求めるソレを考えてるところ

Godoto Engine 3.2.1 上で、カメラ情報から自機の移動範囲を求めることができないかと考えてるところ。

前提条件。 :

Godot Engine の座標系は以下のような感じ。
  • +X : 右
  • +Y : 上
  • +Z : 手前

godot_axis.png

いわゆる右手座標系、なのだろうか。

_3次元CGと座標系

カメラ(Camera)情報は以下。
  • Tarnslation (位置) : (x, y, z) = (0, 40, 12)
  • Rotation (角度) : (rotx, roty, rotz) = (-65, 0, 0)
  • Fov (画角) : 60度

自機の移動面は、y=0 の平面。

余談。
  • Godot Engine のカメラは、x回転角度が0の時、水平線が見える。(真横を見てる)
  • カメラのデフォルト設定では、画角は垂直画角として扱われる。
  • カメラの Keep aspect 設定を変えることで、水平画角にすることも可能。

縦方向の移動範囲。 :

縦方向というか、奥行き方向については、以下の計算で求めることができそう。たぶん。

godot_camera_02.png

cxrot = -65
cy = 40
cz = 12
fov = 60

ang = 180 - cxrot - (fov / 2) = 215
n = (-cy) / sin(ang) = 69.74
z_top = n * cos(ang) + cz = -57.13 + 12 = -45.13

ang2 = 180 - cxrot + (fov / 2) = 275
m = (-cy) / sin(ang2) = 40.15
z_bottom = m * cos(ang2) + cz = 3.50 + 12 = 15.50

前述の図は、横方向から見た時の図だけど、カメラの位置を原点にした状態で考えてるので、求めた値にカメラの位置情報(z値)を後から加減算して本来の値を得ることになる。

一応 Godot Engine 上で、自機の位置を計算で求めた値に変更してみたら画面の上下端に位置してるように見えたので、この計算でも合ってるんじゃないかな。

問題は横方向。どうやって求めればいいのだろう…。

垂直画角から水平画角を求める。 :

とりあえず、垂直画角から水平画角を求めないといけない。

fov_calc.png

w = 1280   # Window width
h = 720    # Window height
fov = 60

tan(fov / 2) = (h / 2) / dist
dist = (h / 2) / tan(fov / 2)

tan(fov_h / 2) = (w / 2) / dist
fov_h / 2 = arctan((w / 2) / dist)
fov_h = 2 * arctan((w / 2) / dist)

fov_h = 2 * arctan((w / 2) / ((h / 2) / tan(fov / 2))) = 91.50
垂直画角が60度、ウインドウサイズが1280x720なら、水平画角は91.50度ぐらいになるのかな。コレ、合ってるんだろうか。

別の方法はないのかな。 :

例えば、平面と線分の交点を求める関数でもあれば、こんな計算をしなくても自機の移動範囲を求めることができそうな気もするのだけど…。どうなんだろう…。自機が移動する平面と、カメラの四隅に相当する線分で、交点を求めれば…。そのほうが汎用性はありそうな気もする…。

そういう関数って、Godot Engine には無いのかな。ありそうな気もするのだけど。

2020/04/23(木) [n年前の日記]

#1 [godot] カメラ情報から自機の移動範囲を求めるソレをまだ考えてるところ

Godoto Engine 3.2.1 上で、カメラ情報から自機の移動範囲を求めることができないかと考えてるところ。

よく考えてみたら、水平画角なんて求める必要はないことに気づいてしまった。そんなことしなくても、もうちょっと簡単な手順で求められるはず。と思って試しに書いてみたら実際なんとかなってしまった。

説明用(?)の画像作成で時間がかかってしまったので、明日の日記でまとめるつもり。

2020/04/24(金) [n年前の日記]

#1 [godot] カメラ情報から自機の移動範囲を求めるソレがたぶんできた気がする

Godoto Engine 3.2.1 上で、カメラ情報から自機の移動範囲を求めることができないかと考えていたけれど。たぶんなんとかなったような気がする。

図を再掲。要は、カメラから見える範囲 ―― 以下の赤い範囲を求めたい。

3dareacheck_ss03.png

以下のような手順で考えれば、範囲を求められるんじゃないかなと…。

fov_calc_02_1.png

  1. カメラの位置が原点にあると仮定して、カメラの四隅、左上と右下の線分を作る。
  2. その線分を、x軸に沿って回転させる。
  3. zx面、xy面で考えて、自機が移動する平面(y座標が一定)との交点を求める。z値とx値が得られる。

試しにPythonを使って仮で計算してみた。

_calc_fov_area.py
import math

def get_rot_pos(x, y, ang):
    a = math.radians(ang)
    xr = x * math.cos(a) - y * math.sin(a)
    yr = x * math.sin(a) + y * math.cos(a)
    return xr, yr

def dump_pos(p, s):
    print("%s = (%f, %f, %f)" % (s, p[0], p[1], p[2]))

def get_fov_area(cx, cy, cz, cxrot, fov, w, h):
    print("Camera pos = (%f, %f, %f)" % (cx, cy, cz))
    print("Camera x rot = %f" % cxrot)
    print("Camera fov = %f" % fov)
    print("Window size = %d x %d" % (w, h))
    
    d = (h/2) / math.tan(math.radians(fov/2))
    p1 = (-w/2, h/2, -d)
    p2 = (w/2, -h/2, -d)
    
    # Rotate by Camera angle
    z, y = get_rot_pos(p1[2], p1[1], -cxrot)
    p1r = (p1[0], y, z)
    z, y = get_rot_pos(p2[2], p2[1], -cxrot)
    p2r = (p2[0], y, z)
    
    y = -cy
    xr, yr, zr = p1r
    z = y * zr / yr + cz
    x = y * xr / yr
    topleft = (x, 0, z)

    xr, yr, zr = p2r
    z = y * zr / yr + cz
    x = y * xr / yr
    bottomright = (x, 0, z)

    dump_pos(p1, "p1")
    dump_pos(p2, "p2")
    dump_pos(p1r, "p1r")
    dump_pos(p2r, "p2r")
    dump_pos(topleft, "topleft")
    dump_pos(bottomright, "bottomright")

get_fov_area(0, 40, 12, -65, 60, 1280, 720)


> python calc_fov_area.py

Camera pos = (0.000000, 40.000000, 12.000000)
Camera x rot = -65.000000
Camera fov = 60.000000
Window size = 1280 x 720
p1 = (-640.000000, 360.000000, -623.538291)
p2 = (640.000000, -360.000000, -623.538291)
p1r = (-640.000000, -412.975034, -589.789472)
p2r = (640.000000, -717.260183, 62.752135)
topleft = (-61.989219, 0.000000, -45.125920)
bottomright = (35.691372, 0.000000, 15.499547)

求めた値を使って、Godot Engine で自機の位置を変えてみたけど、カメラの隅に配置できてる感じに見えたので、たぶん計算は合ってるんじゃないかな…。

Godot Engine の GDScript で書くと、以下のような感じ。
var camera:Camera
var btopleft = Vector3()
var bbottomright = Vector3()

func _ready():
    camera = get_tree().root.get_node("Level-Spatial/Camera")

    # get project display width and height
    disparea = Vector2(
        ProjectSettings.get_setting("display/window/size/width"),
        ProjectSettings.get_setting("display/window/size/height")
        )

    _calc_move_area(camera, disparea.x, disparea.y)

func _get_rot_pos(x, y, ang):
    var a = deg2rad(ang)
    var xr = x * cos(a) - y * sin(a)
    var yr = x * sin(a) + y * cos(a)
    return Vector2(xr, yr)

func _get_border(p:Vector3, rotx, y, cz):
    var v2:Vector2 = _get_rot_pos(p.z, p.y, rotx)
    var pr = Vector3(p.x, v2.y, v2.x)
    return Vector3(
        y * pr.x / pr.y,
        0,
        y * pr.z / pr.y + cz
        )

func _calc_move_area(camera:Camera, w, h):
    var cpos:Vector3 = camera.translation
    var crot:Vector3 = camera.rotation_degrees
    var fov = camera.fov
    var d = (h/2) / tan(deg2rad(fov/2))
    var p1 = Vector3(-w/2, h/2, -d)
    var p2 = Vector3(w/2, -h/2, -d)
    var q1:Vector3 = _get_border(p1, -crot.x, -cpos.y, cpos.z)
    var q2:Vector3 = _get_border(p2, -crot.x, -cpos.y, cpos.z)
    btopleft = q1
    bbottomright = q2

btopleft と bbottomright に、自機の移動範囲の左上座標、右下座標が入る。みたいな。

x軸に沿って回転させるあたり、おそらく Godot Engine はソレ用のメソッドを持ってると思うのだけど、どれがソレなのか分からなかったので、sinとcosで計算してしまった…。

何にせよ、やはり中学レベルの数学で全然解ける問題だったなと…。

しかしコレ、もっと簡単に求める方法は無いのだろうか。なんとなくだけど、ありそうな気がする。

2020/04/25() [n年前の日記]

#1 [windows] Windowsのプロダクトキーを確認する方法を調べてたり

WindowsがプリインストールされてるDELL製PCの、Windowsのプロダクトキーを知りたいという質問が届いて、方法をググっていたり。

大昔のWindowsプリインストールPCなら、PC本体のどこかにシールが貼ってあって、そこにWindowsのプロダクトキーが印刷されていたので、「プロダクトキーを知りたい」という質問に対しては「PC本体のどこかにキラキラしたシールが貼ってあるので探してください。そこにキーが書いてあります」と答えれば済んだのだけど。今時のPCはM/B(マザーボード)のBIOSにプロダクトキーが格納されているそうで。なので、本来であれば、Windowsをインストールしたりアップグレードする際に自動でプロダクトキーを読み取ってイイ感じに処理してくれるはず、なのだけど…。

とりあえず、プロダクトキーを確認できるフリーソフトがある、ということは分かった。

_ProduKey のダウンロードと使い方 - k本的に無料ソフト・フリーソフト
_Windows OEM Product Key Tool の評価・使い方 - フリーソフト100

その後もググっていたら、そもそも Windowsには標準でプロダクトキーを確認するためのツールがインストールされているようで。

_Windows10のプロダクトキーを確認する方法 | Windows10 FAQ
PowerShellが起動したら、下記のコマンドを入力して Enter キーを押します。

wmic path SoftwareLicensingService get OA3xOriginalProductKey

Windows10のプロダクトキーを確認する方法 | Windows10 FAQ より


_ライセンス認証が正常に完了しない場合に OEM プロダクト キーの再インストールおよびライセンス認証を行う方法 | Microsoft Docs

A-1) コマンド プロンプトを管理者権限で起動します。

A-2) 以下のコマンドを実行し、OEM プロダクト キーを表示します。

wmic path SoftwareLicensingService get /value | findstr OA3x

※ コマンド末尾の "OA3x" は、"OA" のみ大文字で入力します。

A-3) 手順 A-2 のコマンドの実行結果の "OA3xOriginalProductKey=" より、プロダクト キー (25 桁) を確認します。

ライセンス認証が正常に完了しない場合に OEM プロダクト キーの再インストールおよびライセンス認証を行う方法 | Microsoft Docs より


自分のメインPCで試してみたら何も出てこなかった。自作PCだからBISOにプロダクトキーなんて書き込まれてないわけで。これが正常動作ということかも。

2020/04/26() [n年前の日記]

#1 [anime] 録画してたアニメを消化中

HDDレコーダで録画してたTVアニメを消化中。毎週放送されてる作品については一応全部消化。残るはTV放送された劇場版アニメ…。しかし2時間ほど視聴するのもツライ…。さあ、見るぞ、という気分にならない…。

2020/04/27(月) [n年前の日記]

#1 [anime] 「名探偵コナン 紺青の拳」を視聴

TV放送されたソレを録画していたので視聴。シンガポールを舞台にして、名探偵コナンと怪盗キッドが活躍する劇場版、という説明でいいのだろうか。

自分、コナンシリーズはほとんど見ていない人なのだけど。そんな自分ですら、話の流れが大体分かったあたりで感心してしまったり。これは脚本レベルでの説明の仕方がとにかく上手いのだろうなと…。各キャラについて最低限これだけ説明しておけば分かるだろう、とか、このアクションは説明無しでも披露できるはず、とか、そのあたりのジャッジが実に秀逸と言うか、バランス感覚に秀でているというか。 *1

コナンとキッドが、これまでの状況を整理する際、二人の目の前に事件現場の映像が次々に浮かんでいく描写があって。この見せ方は面白いなと感じたり。現実世界では二人は会話しかしていないはずだけど、二人の脳内ではこんな映像が浮かんでいるのだ、みたいな。こういう見せ方をすることで、観客側も状況がなんとなく分かったような気分になるのだろうなと。これは上手い。

アクションシーンも、かなり頑張ってるように見えた。まあ、あり得ないシーンの連続ではあるけど、そこは漫画・アニメなので…。「ねーよ!」とツッコミ入れながら見るのも、この手の作品の楽しみ方のはず。みたいな。

何にせよ、さすが長期の大ヒットシリーズなだけあって、よくできているなあと感心してしまった。よくまあここまで作れるものだなあ…。
*1: もっともこのあたり、やたら説明してるのに全然説明になってないアレなアニメ作品をいくつか目にしていないと、こういった秀逸さに気づけないところもあって…。名作良作ばかり見ている人は、上手に説明されるのが当たり前と思い込んでるから、このあたりについては何一つ評価してくれないという…。

#2 [prog] Unity 5.3.xをインストール

某ゲームのmodを作ってみたくて、その手のツールを触ってみたのだけど。複数のメッシュを obj形式でインポートして差し替えた際、一部のメッシュの位置がずれてしまって、しかし位置合わせする方法がよく分からず。これは個別にobjをエクスポートしてるのがよくないのか、複数のメッシュを一つのフォーマットで保存したほうがいいのか、となると Unity でまとめたほうがいいのかなと思えてきて。某ゲームが Unity 5.3.5 を使って作られていたらしいので、Unity 5.3.5f1 x64 をDLしてインストールしてみたり。

その手の解説記事を眺めながら作業したものの、スクリーンショット通りの画面にならない…。どこで何を間違えているのか…。それとも、解説記事は 5.3.8 を使っているようだし、バージョン違いでこうなるのか…。

Windows版のバイナリが作れない。 :

Unity 5.3.5f1 をインストールした場合、Windows用のバイナリを作るための追加プログラムが入手できないことに気づいた。Unity の画面上で、ボタンをクリックすると .exe が入手できるようなのだけど、公式サイトの xml が開かれて、それっきり。どうなってるんだろう…。

5.3.8をインストール。 :

よくわからんので、5.3.5f1 をアンインストールして、5.3.8f2 をインストールした。解説記事も 5.3.8 を使っているみたいだし…。

5.3.8f2 なら、Windows用のバイナリを作るための UnitySetup-Windows-Support-for-Editor-5.3.8f2.exe もDLできた。

ん? 5.3.5. とはファイル名が違うような…。5.3.5 は、ファイル名の中に standalone という文字列があったように見えたけど…。

2020/04/28(火) [n年前の日記]

#1 [anime] どんなCGアニメを望んでいたのだろう

思考メモ。

最近、攻殻機動隊CGアニメ版のCM映像がTVで流れ始めていて、その映像を目にするたびに「コレジャナイ…」と思ってしまうのだけど。

しかし、「じゃあどういう見た目だったらよかったのか?」と自分に問い質してみると、これがめちゃくちゃ悩んでしまうという。自分は一体どんな攻殻CGアニメを思い浮かべていたのだろうか。うーん。わからん。

セルルックだったらよかったのだろうか。でも、そういう方向なら今まで通り手描きアニメで作ればいいよなと。

それとも、まるで実写と見紛うばかりのリアル映像ならよかったのだろうか。でも、既に攻殻の実写版はあるよな。実写っぽい映像が見たいなら実写版を見ればいいじゃんよ。

ということで、悩んでしまう。「コレジャナイ」と思ったということは、もっと違う映像をイメージしていたはずなのだけど。その映像って、どんな映像なのか。そこが分からない…。

お前は一体どんなCGを期待してたんだ? 文句があるなら答えてみろや。いやー、そう言われても。違うことだけは分かるんだけど、正解が思い浮かばないわけで…。これは困ったなあ。

もしかしてセルルックだったのかな。 :

もしかして、セルルックでもよかったのだろうか。例えば、サンジゲン、オレンジ、ポリピクの作品群を思い浮かべると…。もし、あのレベルでセルルックの攻殻CGアニメが出てきても、それはそれで自分は納得したのかもしれない。

ただ、海外市場を考えると…。セルルックのCGアニメが通用するのって、日本国内だけじゃないのか、という不安もあって。海外では、CGアニメと言ったら、もっと違うスタイルをイメージするのではあるまいか。いや、わからんけど。

世間の皆様は、CGアニメと聞いた瞬間、どんな映像を思い浮かべるのだろう。やはりピクサーやディズニーあたりなのかな。であれば、ああいった映像スタイルで、しかし中身は攻殻機動隊を作るとすれば…。

となると、あのCM映像の攻殻CGが正解じゃないですか、という気もしてくるわけで。

しかし、自分の中では違うんだよな…。違うんだけど、じゃあどんな感じがいいのよと考えると、悩む…。

やはり、あの映像で正解なのかなあ。どうなんだろう。

まあ、ヒットすればアレで正解だったということになるのだろうし。ヒットしなければアレじゃなかったということになるのだろうから、様子見していればそのうち何か分かってくるのかもしれないか…。

現代布袋劇でもよかったのかもしれない。 :

「Thunderbolt Fantasy 東離劍遊紀」という人形劇があるのですけど。人形劇と言うか、現代布袋劇なんだけど。台湾の伝統的な布袋劇にVFXを加えた独特のスタイルの映像作品で。

もし、あの見た目で、中身が攻殻機動隊だったら、それはそれで自分はグッときたのかもしれない…。と思えてきたりもして。

ということは、つまり、美麗秀麗なフィギュアみたいな見た目の攻殻CGキャラ達がずらりと並んでたら「コレだよ」と思ったのかなあ…。そういう方向なら実写と差別化できそうでもあるし…。

2020/04/29(水) [n年前の日記]

#1 [pc] PC-8801mkIIが鳴らしていたのはビープ音じゃなかったらしい

某所で、「NEC PC-8801mkIIはビープ音で曲を演奏していた」という話をたまたま見かけて、個人的にちょっと驚いてしまったり。

PC-8801のビープ音って、「ピー」とか「ピッ」とか、その程度しか鳴らせないんじゃなかったっけ…。そんなもんで音楽の演奏なんかできるのかよ、ソフトウェア処理でかなり頑張らないとできないだろうけど、一体どうやって実現してたんだろうと。それとも自分が知らなかっただけで、あのビープ音って任意の周波数も鳴らせる機能だったのかな。でも、そんな仕様だったなら、SHARP MZシリーズのように「単音3オクターブが鳴らせます」的な宣伝をするはずだよな…。だけど、そんな宣伝してた記憶は無いんだけど…。

ということで気になってググってみたのだけど。何のことはない、PC-8801mkIIのサウンド機能は PC-8801 より若干パワーアップしていて、フツーに音楽だって鳴らせるようになってたらしい、と今頃知ったという…。

てなわけで、

「PC-8801mkIIが音楽を鳴らしてたらそれはビープ音じゃない。たぶん」
「単音矩形波のサウンド機能で鳴らしてたはず」
「mkIIになってMZと同レベルのサウンド機能が追加された」
「もし、mkIIじゃなくてPC-8801無印で音楽が鳴ってたらそれはガチでスゴイ」

というオチになりそうだなと…。いやまあ、 _ビープ音 の定義にもよるのだろうけど。

以下、参考ページ。

_ディスクドライブが普及する過渡期に登場した「NEC PC-8801mkII」 - AKIBA PC Hotline!

_PC-8800シリーズ - Wikipedia
ブザーがスピーカーに置換されると共に、従来のBEEP音のほかに、BASICからCMD SINGで利用可能なI/Oポートを制御することで、ソフトウェア的にパルスを生成できる単音の音源が追加され音程を奏でることが可能になった。

PC-8800シリーズ - Wikipedia より


_NEC PC-8801mk2 (外観編) | Electrelic
簡易的なサウンド機能の搭載: と書くと大きなことのように思えますが、実態は単に1ビットの出力ポートがスピーカに接続されただけです。PC-9801シリーズのBEEPはインテル8253というカウンタ・タイマICに繋がっていたのでソフトで分周比を変更して音程を変えたり(それどころかPWMを実現してPCMの再生を可能にするspeak.comなんていうソフトも作られました)できたのですが、PC-8001,PC-8801シリーズのそれは固定の2400HzをソフトからOn/Offできるだけなのです。それを無理やりソフトで断続して音を出すので、2400Hzが混じって濁った音しか出ません。そこで2400Hzが混じらないようにしたのがこの機能です。

NEC PC-8801mk2 (外観編) | Electrelic より


しかし、mkII が1983年に発売されて、そこから2年後の1985年、 _PC-8801mkIISR がFM音源搭載で発売されちゃうわけで…。単音矩形波から、一気にFM音源だもんな…。そりゃ mkII のスペックなんてショボすぎて(?)記憶に残ってないよな…。いやはや、あの頃のハードウェアの進歩って、マジ早い…。

2020/04/30(木) [n年前の日記]

#1 [pc][neta] 8bitPC時代にタイムスリップしたらどんな音源チップを作るんだろう

ふとなんとなく、くだらない妄想をしてしまったり。現代の人が8btPC時代にタイムスリップしたら、どんな音源チップを作ろうとするのだろうなあ、みたいな。

8bitPC時代のサウンド機能って、以下のような進化をしていたような印象があって。
  1. 只のブザー。一定の周波数を鳴らすか鳴らさないか、ON/OFFしかできない。(PC-8001、PC-8801等)
  2. Intel 8253を使った矩形波の単音再生。任意の周波数を指定できるけど、音量調整はできない。(MZ-80K/1200/700)
  3. PSG(AY-3-8910)で3重和音。3つまで矩形波を出せて、音量調整もできる。エンベロープが使える。(PC-6001、X1、FM-7、MSX)
  4. YAMAHA FM音源(YM2203)。複雑な波形を、感覚的にはよく分からない計算式で作れる。(PC-8801mkIISR)
  5. FM音源 + PCM(DPCM、ADPCM)。(X68000)

任意の波形データを鳴らせます、てなことができるのは結構後になってから、だったような…。想像だけど、当時はメモリ(RAM)が高くて、波形を持つ=メモリをガンガン使う系の再生はコスト的に厳しかったのかなと。何せ SHARP X1などは、画面表示に使うVRAMすらコスト的に高くなるから標準装備できなくて別売り状態だったりしたわけで。

なので、当時にタイムスリップして音源チップを作るとしても、波形データを持って云々という方向では作れないのだろうなと。4bitの波形でも厳しいかも。

せめてPSG+αの音源にしたいよな…。ファミコンみたいに、ノコギリ波や三角波を選べるように、とか…。3重和音なんてケチ臭いことを言わず、6重和音を、ってソレだと TI SN76489 になるのかな…。

もっとも、当時もコストとスペックのバランスを考えてその仕様に落ち着いたのだろうから、現代人がその時代に行ってもやっぱり似たような仕様になっちゃいそうな気もする…。

_Programmable Sound Generator - Wikipedia
_YM2203 - Wikipedia
_YM2151 - Wikipedia
_波形メモリ音源 - Wikipedia

波形メモリ音源を早い段階で作れたら、天下を取れた(?)りしたのだろうか…。

_Amiga - Wikipedia
_スーパーファミコン - Wikipedia

AmigaやスーファミのようにPCM音源を搭載できたら、そのPCはスゴイことになってたんだろうな…。昔、 _MOD ファイル を収集して聞いてた時期があるけれど、PCMを4音鳴らせるだけでも結構イイ感じの曲が作れそうな印象を受けたというか。

まあ、今になってこういうアレコレを妄想しても何の意味も無いけれど…。もっとも、 _Fatnasy Console(Fantasy Computer) の類を作る際には、こういうソレも考えたりするのかもしれんけど。

なんかググってみたら、Amigaは1985年発売、と書いてある…。PC-8801mkIISRが発売された年に、海外ではもう Amiga が発売されていて、PCM音源を4チャンネル鳴らせていた、ということになるのかな…。いやまあ、PC-8801mkIISR は 8bitPCで、Amigaは16bitPCだけど。

#2 [pc] OpenMPTを試用

Amigaのスペックについて調べてるうちに、MODについての記述を見かけて、なんだかまた聞きたくなってきた。

ここで言うMODは、ゲームの改造データを示すMODのことではなくて…。Amiga発祥の音楽ファイルフォーマットの総称。

_MOD (ファイルフォーマット) - Wikipedia

mod、xm、s3m、it 等の拡張子があって、PCMを4〜16〜32〜64チャンネル鳴らせる。Amigaのサウンド機能は8bitのPCMを4チャンネル鳴らせたそうで、そこから発展していったらしい。

Windows10で動くその手のソフトはあるのかなとググったら、OpenMPT というアプリがあるようで。オープンソースで開発されてる Mod Tracker。MODの作成や再生ができる楽曲作成ツール、という説明で合ってるのだろうか。

_OpenMPT - Open ModPlug Tracker | OpenMPT - Discover the music inside...

今回は、32bit版の OpenMPT-1.28.10.00-Setup.exe をDL。Windows10 1909 x64上にインストールした。exeを実行するとインストール処理が始まる。ちなみに、VSTも使えるそうで、32bit版でVSTを揃えてる人は32bit版を、64bit版でVSTを揃えてる人は64bit版を選ぶとよい、てな感じの説明文が書いてあった。

数曲ほど、MODデータ(.mptm)が同梱されてる。どれもカッコイイ曲…。

このバージョンの OpenMPT は、FM音源(OPL2相当)も実装されているらしい。同梱の Yuzu - Yu-Lib.mptm を再生してみたらベアナックルみたいな音が鳴り始めて驚いた…。なんだかスゴイことになってるのだな…。

MODを探す。 :

The Mod Archive というサイトに行けば、MODデータが手に入る。

_The Mod Archive v4.0b - A distinctive collection of modules

「MODと言えばコレでしょう」的扱いだった、 _Sweet dreams (sweetdre.xm) をDLして OpenMPT で鳴らしてみたりして。懐かしい…。いやまあ、再生だけなら、サイト上で再生アイコンをクリックすれば Javascript を使ってブラウザ上でも鳴らせるみたいだけど。

それはともかく、当時自分が一番お気に入りだったMODの曲名が思い出せなくて検索すらできず。アレの曲名…何だったかな…。出てこない…。思い出せない…。

以上、30 日分です。

過去ログ表示

Prev - 2020/04 - 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

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project