2022年12月31日土曜日

今年の総括

  • 早いもので今年の総括なのですが…
総じて言える事は
なんの成果も得られませんでした
ですかねえ
いや、21年がなんのかんの凄かったのですよ、いきなりMOのスケルトンプログラム作ったり、Linux を使って Android アプリ(.apk)作れるようになったりしていますからね。

22年は人体モデリングのやり直しから始まりました。良書の「ソッカの美術解剖学ノート」を得られた事もあって伸びていったのですが…

4月に天啓パラドクスを始めたあたりで鈍り始めます。
天啓~自体は7月に辞めていますが、モデリングが鈍った事と微妙に関係があります…。

モデリングは2015年辺りから始めていますが、当時「艦娘で軽いアクション物の動画を作ろう」が目標でした。が、ゲームの方が2期(2018)以降低調になっていき、コロナ以降が致命的になっていきます。

19年のアシュア、20年のデスチャ、そして今年の天啓等を平行してプレーしてみると、どうしても比較して見てしまうもので、艦これという物に対するモチベーションが保てなくなりつつあるんですよね。結局平行プレーする時間が無いので他を辞めていったのですが、どちらが優れていたという話でも無い訳です。苦労してモデリングしてまで表現したい物が無いと言う状況では手が進まないんですよね。

さて、そんな中でも多少は進展があったのは、5月にドイツのマイナー版LMDE5を見つけた事。これを発見できたおかげで、一気にジャンクPC関係のソフトウェア更新が進みました。本来は Ubuntu22.04 ベースの Linux Mint を待つつもりでしたのでコレは良い発見でした。…ただ、これにて Yoga260 は主に電源管理周りに不具合がある事が確定してしまいましたが。

あとは11月に購入した未完の大器 SurfaceBook ですかね。未だに整備中ですが。
このじゃじゃ馬がいなければカーネルの作り直しだの、サービスの停止/組み込みだのといった技術は身に付かなかった気がします。

  • 来年気になる事もやっぱり艦これですかね
現在やってるんだかやっていないんだかなアニメですが…ユーザー数が回復するどころか、往時の見る影もないという印象を決定付けています。
ニコニコでの再生数は6万そこいらですが、ブラウザ版のアクティブユーザーが10万人強(正確な所は正月に判りますが)と言われる中ではこれでも健闘した方です。
10周年までは持つと思いますが、12年目を迎えられるかは「かなりヤバイ」という印象。

本来どうでも良い話なのですが、前述の通りモデリングのモチベでもあります。
そして、これまで 2in1 パソコンを買い漁って苦悩を続けているのも「モデリングが出来てテクスチャ編集もできるパソコンを探す」という目標をもって行ってきた事です。
又、Python の勉強を行っているのも Blender のアドオン作成をするため、という動機が半分以上を占めます。
つまり、ロスった場合、次にモデリングしたくなる題材を探さないと全てが崩壊しかねません。ただ、年齢的な事もあってか、もうゲームをしようという気も起きないのですよね…

来年は最悪、ただの無気力中年になっている可能性もあって(今年も気力があったとは言えませんが)なかなかに怖いです。

2022年12月18日日曜日

小ネタ

先日ジャンバールとケッコンしまして…
君じゃないです。

2022年12月7日水曜日

サンマは73+瑞雲分(22+22+8)=125尾

 結構掘ったなあと。6−5の下ルートを周回したため、大和、武蔵はカンスト。資材は自然回復へ。

  • 新規に7−4が堀場になっていましたが…。
7−4は最後に設置された通常マップですが、正直不人気マップです。
ただ、通常マップでは珍しく海防艦が掘れるため我慢して周回する人も居るでしょうが…。
ココが不人気になる最大の理由は理不尽に強い相手潜水艦にあります。
T不利を引いたら撃沈は絶望的ですし、大破した状態からでもこちらを大破させるだけの火力を持っています。
そんな理不尽潜水艦が1マスを除き全てに配備されたマップに対して、爆雷禁止の秋刀魚ルールで周回しろとはどういう了見だったのか?
数回は回ってみましたが、6-5や3-5といったEO海域の方が遥かにマシでしたね。

さて、ふだんやらないハローウィン、サンマと続けて本来なら次は年末年始イベントですが、アニメと足並みを揃えるにしても放送は休止中。

…アニメでギミックのヒントを流そうとして足並みが崩れて共倒れしたのではないかと邪推しますが、いい加減低難度イベントを流さなくて大丈夫ですかね?
現在クオータリークエのいくつかと 5-5 を残した状態で100位以内に入っています。
逆に言えばそこまでしてプレーしている人間はパラオサーバーに100人居ません。
鳳翔さんは「共に参ります、最後まで」と言っていましたが、最後くらいは綺麗に〆てもらえないものでしょうかね?

2022年12月6日火曜日

Blender で選択されたキーフレームのデータを読んで見る

 半年ぶりの Blender なのですが…はい。今回はだいぶ苦戦していまして、機能ができていません。まずキーフレームのデータを取得するという行為そのものが相当面倒だったのですよ。

キーフレームがどこにあるのかと言えば、ココ。ドープシートの中です。

そこで、当初はドープシートのクラスを探す→所属するグループを検索→所属するキーフレームを取得…という手順を踏むと思っていたのですよねえ。

ところが、実際の手順はシーンからオブジェクトを取得→オブジェクトのアクションデータからFカーブ情報を取得する→所属するキーフレームを取得するという手順を取ります。

尚、主にアニメーションで使うアーマチュアオブジェクトには、所属するボーンがあり、実際には各ボーンに対して動きをつけていますが、オブジェクト→ボーン→Fカーブという取得の順にはならないようです。

これは、そもそもオブジェクト単体に対してキーを打って動作ができる点や、ライトやカメラ等の他のオブジェクトと足並みを揃えた為のようですね。

コード

import bpy
import re

if bpy.context.mode == 'POSE':

    for obj in bpy.context.scene.objects:
        #print(obj.name)
        if obj.type != 'ARMATURE':
            continue

        bSelectd = False
        frameStart = 0.0
        frameEnd = 0.0
        
        for fc in obj.animation_data.action.fcurves:
            for ky in fc.keyframe_points:
                if ky.type != 'KEYFRAME':
                    continue
                if ky.select_control_point != True:
                    continue
                
                if bSelectd == False:
                    frameStart = ky.co[0]
                    frameEnd =ky.co[0]
                    bSelectd = True
                else:
                    if ky.co[0] < frameStart:
                        frameStart = ky.co[0]
                    if ky.co[0] > frameEnd:
                        frameEnd = ky.co[0]
                                
                bonename = fc.data_path

                # bonename only
                #if fc.data_path.count('"') == 2:
                #    bonename = re.search(r'"(.+)"',bonename).group(1)

                print(bonename+"/idx:"+str(fc.array_index)+"/frame:"+str(ky.co[0]).rjust(6,' ')+"/pram:"+str(ky.co[1]))

        if bSelectd == False:
            print("No Selected")
        else:
            print("SelectStart:"+str(frameStart).rjust(6,' ')+"/SelectEnd:"+str(frameEnd).rjust(6,' '))

※インデントが崩れた為、字を小さくしています。コピペして読んでください。
コメントアウトした bonename only の部分は外すとボーン名のみになります。

結果はなんの変哲も無い出力ですね。

…こんなものを作るのに数ヶ月かかってしまった…。そもそもパイソンを忘れかけていたという恐怖…歳は取りたくない物ですねえ。

2022年11月30日水曜日

13回目のランクイン

 
…あれ?今回はハズレかな…と、思ったら

はい、アニメに合わせたのか最上に載せると異常に強い水戦です。
が、真の魅力はそこではない。
…ベイルアウトさん!
アニメ2期のMVP!…いや、現時点でアニメ2期の人気投票やったら本当に1位になりかねない妖精さんです。
これは嬉しいですね、以前貰ったフライングパンケーキ以来かも。

2022年11月27日日曜日

SurfaceBook 初代を LMDE5 で dGPU を使ってみたい2(ドライバーを入れてみる編)

 前回 lspci を行って、 dGPU の存在は確認できたけれど、nvidia のグラフィックカードを使うソフトをインストールしようとすると軒並み失敗する。
曰く

Nvidia のビデオカードが無いじゃん

…なぜ、無いと判断されるのかと言うと、ドライバーが入っていないから。
これの判断は簡単でnvidia のドライバーが入っている時に同時に入るコマンド

$ nvidia-smi

を打ち込んでみて、そんなコマンドは無いとエラーが返ってきた場合はまずドライバーが入っていません。

Linux のビデオドライバーというのは Windows の様には手軽なものでは無く、インストール後カーネル(OSの核)に組み込んでやる必要がります。
カーネルの組み直しというと大事な気がするけれど、linux-surface をインストールした時点で実は1回カーネルが組み変っていたりするので、Linux では割とある事という認識で良いと思います。

ドライバーは Nvidia のホームページからダウンロードできて、恐らく

NVIDIA-Linux-x86_64- ~バージョン~ .run

というファイルのハズ。
.run というファイルは聞き馴れなかったけれど、実行権限を付けて

$ sudo ./xxxx.run

と直接実行するタイプのファイルだそうです。
で、実行してみると
というエラーが。
要約すると

Xサーバーが起動している間はインストール作業はできないよ

という事らしいです。

  • ではXサーバーって何のサーバーだよって話ですが、これが面倒。
むかしむかし、コンピューターは文字を入力すると文字を返してくるCUI(キャラクタユーザーインターフェース)という、入出力を行う計算機でした。
※厳密には、それ以前のブラウン管ディスプレイすら無い時代にもコンピューターは存在します。戦艦アイオワに積まれていたアナログコンピューターとか

今から40年程前に流石にそれでは不便じゃないかと気づいて、今日のようなグラフィカルな入出力GUI(グラフィカルユーザーインターフェース)という物が作られ始めます。
UNIX を設計の母体とするOSグループ( UNIX Linux FreeBSD... )はこの GUI として X Window System というものを使う事にしました。
ただ、この X Window も大変シンプルなシロモノだったので、もうちょい使い勝手を良くしようという事で、盛り付ける形でさまざまなデスクトップ環境が産まれます。
GNOME KDE Xfce MATE 等です。
図にするとこんな感じ
で、ざっくり言うと、この X Window System を動かしているのが X Server。
つまり、これを止めろという事はGUI操作を辞めなさいという事。
GUIから操作しているのに、GUIを辞めろと言われると一見詰んだようにも見えますがやりようはあります。
ひとまず、説明を簡単にする為に成功したパターンのお話を順を追って書いていきます。

1.CUIベースへ退避
ショートカットキー Ctrl+Alt+F1~F6
これでひとまず CUI ベースのOSに移行します。
ちなみにログインのやり直しという形をとるので、最初にコンソールからユーザー名を聞かれます。
ユーザー名、パスワードを入力するとコマンド入力(文字入力)を受け付けるようになります。
尚、この状態から元のGUIに戻るショートカットは Ctrl+Alt+F7

2.X Server を止める
止める為のコマンドはデスクトップ環境により異なります。私の場合は LMDE5 MATE なので

$ sudo service lightdm stop

GUIが止まってしまったので、当然ショートカットを使ってもGUIへ戻れません。

3.ドライバーのインストール
$ cd ドライバーがあるフォルダ
$ sudo ./NVIDIA-Linux-x86_64- ~バージョン~ .run

4.X Server を起動
$ sudo service lightdm start
これももちろん、デスクトップ環境によってコマンドが異なります。

…以上の手順が無事に済めば再起動後にドライバーが組み込まれます。


  • 実は失敗してました。
3のドライバーインストール時にこんなメッセージが

ERROR: Unable to load the kernel module ‘nvidia.ko’. This happens most frequently when this kernel module was built against the wrong or improperly configured kernel sources, with a version of gcc that differs from the one used to build the target kernel, or if another driver, such as nouveau, is present and prevents the NVIDIA kernel module from obtaining ownership of the NVIDIA GPU(s), or no NVIDIA GPU installed in this system is supported by this NVIDIA Linux graphics driver release.

要約すると

ドライバーをインストールしようとしているハードウェアになんかソフトがくっついてるから無理だわ nouveau とかね。

という事らしいです。
 nouveau って何?という事で調べてみたら、Linux のエンジニアが Nvidia のハードをなんとか動かす為に作ったドライバー的な物らしいです。
なんとかって?という話なのですが、Nvidia は最近までドライバー情報を公開していませんでした。そこで Linux 側のエンジニアがなんとか動かせるように作ったのが nouveau という訳です。
ちなみに情報を公開したのは22年5月。前述したように、ドライバーはカーネルの組み直しを伴います。
22年4月にメジャーアップデートを行った Ubuntu のエンジニアはたった半月後に巨大な組み直し作業を迫られた事になりますね…鬼かな?
で、情報公開してこなかったくせに、邪魔な先住民が居るので除けないとドライバーはインストールできないと言っている訳です。

$ lsmod | grep video

等で確認すると標準の i915 (Core 系 CPU 内のビデオ機能)の他に nouveau が割り付けられていたりします。
そしてもう一つ、 nvidiafb というものも悪さをします。
これらはカーネルに組み込まれているので、カーネルに組み込まないで欲しいモジュールにリストアップして、その後カーネルを組み直す必要があります。
そのリストというのは名前そのまま blacklist なのですが、

/etc/modprobe.d/blacklist.conf

に追記します。ファイルが無かった場合はドキュメントの新規作成で作ってください。
追記内容は

blacklist nouveau
blacklist nvidiafb

その後、

$ sudo update-initramfs -u

でカーネルに反映。
無事に終ったら再起動すると反映された状態で起動するハズです。
再度 lsmod 等を使って余計なモジュールが追加されていないかを確認して、前述のドライバーインストール手順にを行ってください。

  • ドライバーが入った…が?
おお!夢にまで見た nvidia-smi !
このVRAM1GBの電源が落ちているGPUは正に Surface Book の dGPU !

Blender には GPU 選択オプションが!

レンダリングしてみたらちゃんと3MB分VRAMを消費している!
コレは成功したのでは!!

…と、思ったのですが。
…?!GPUの電源が落ちてる?
…つまりGPUは寝たままレンダリング用にVRAMを貸してくれただけの塩対応だったようです。
GPUはいつになったら起きるのか、道は険しいですね。
※2023/02/09追記
この3MBの消費はどうやらMSIそのものが消費している気がします。後日実際に動作した際には数百MBの消費をしているので、この程度では何もできませんしね。

2022年11月21日月曜日

SurfaceBook 初代を LMDE5 で dGPU を使ってみたい1(GPU認識編)

 dGPU は居ます

という訳で、まっさらな LMDE5 (MATE) を用意しまして、SurfaceBook 初代にインストール。その後 linux-surface を導入します。
この時点で 
$ lspci
と端末に打ってみても dGPU は認識されません。

※11/25追記
linux-surface の wiki によれば SurfaceBook 初代には下記の処理も必要なようです。

/etc/profile
末端に
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME="nvidia glxgears -info"
を追加。
※2023/01/09 削除。コレについては盛大に勘違いしていたようです  

/etc/default/grub
の GRUB_CMDLINE_LINUX_DEFAULT の内容を
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nouveau.modeset=0 pci=realloc nvidia-drm.modeset=1 pcie_port_pm=off pcie_aspm=off"
に変更
※11/25追記ココまで

/usr/local/bin
ディレクトリに dgpu.sh (名前は何でも良い)
というファイルを作ります。尚同ディレクトリは管理者権限で開かない(アイコンを右クリックして管理者権限で開く)とファイルを作れないので注意。

内容は先日書いていたページに示されていた通り

#!/bin/sh

echo 1 | tee /sys/bus/platform/devices/MSHW0041:00/dgpu_power
echo 1 > /sys/bus/pci/rescan
setpci -H1 -s 01:00.0 6a.b=81
setpci -H1 -s 01:00.0 4.w=0407
echo 1 > /sys/bus/pci/rescan
setpci -s 01:00.0 4.w
setpci -s 01:00.0 6a.b

作ったファイルは実行権限を付けます。
まあ、私は永久にニュービーなのでコマンドで実行権限を付けるようなシャレオツな事はできません。
※ファイルアイコンを右クリックしてプロパティを開けば設定できます

ちょいと実行

$ sudo /usr/local/bin/dgpu.sh

これで多分
940MX が認識されるハズ。

が、こんなものを起動する度にコマンドラインで打つのは面倒なのでOSに起動時に呼ばせるように設定する。
一旦、OSを再起動。

$ lspci

と打ち込んでも 940MX を認識していない事を確認してください。

/etc/systemd/system
ディレクトリに dgpu.service (名前は何でも良い)
というファイルを作ります。尚同ディレクトリは管理者権限で開かないとファイルを作れないので注意。

内容は先日書いていたページに示されていた通り

[Unit]
Description=Nvidia GPU initialization
Before=display-manager.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/dgpu.sh
ExecStartPre=/bin/sleep 10

[Install]
WantedBy=multi-user.target

これも作ったファイルは実行権限を付けます。

で、実際に動くのか試してみます。

$ systemctl daemon-reload
$ systemctl start dgpu.service

で、この後に

$ lspci

と打ち込んで 940MX が認識されていれば一安心。
…なのですが、このままOSを再起動されると 940MX は認識されません。
サービスが常に起動されるものとして登録されていない為です。

$ systemctl enable dgpu.service

これで登録完了。再起動後も 940MX が認識はできるハズ…です。

さて、後半は Linux 使う人は割と当然のように行っているデーモンプロセスとかいう奴の登録のお話だったのですが…
…存在は知っていて、20年くらい前に何も知らずにやっていたけど、初めて意識して作ったし、これが出来て当然とか言ってる Linux ユーザー怖いなと。
そして前半の内容は linux-surface #93 の内容をなんとか読解してみた結果…のハズ。私、アメリカ語さっぱりなんで。

そして、残念な事にここまでやっても認識しただけで、実は起動していません。
起動させるには別のソフトを呼ぶ必要があるようです。
ここまでで判った知見としては

Linux 初心者はノートを使うなら dGPU とか夢見てないで iGPU が強くて面倒な構造を持っていない CPU (ぶっちゃけ Ryzen)を選んだ方が良い

って事ですかね。