まるぼ実験場

アプリの開発日記を載せるサイトでしたが、ただの技術ブログになりました。

初期型Xbox360 ディスクドライブ修理のまとめ

最近ハードオフのジャンクで買ったXbox360の修理を頑張っていたので、その記録まとめ。

tweet.3ka.me

ジャンク理由∶ディスクを読み込まない

持って帰って動作確認したところ、最初の一回はゲームDVD起動確認。

が……それ以降は何度か入れ直さないと読み込まない事があるという状態でした。

 

やったこと

モーターの動作は異常なさそう、ということはだいたいピックアップユニットが怪しいはず。

やったこと①∶ピックアップレンズ清掃

レンズの汚れが原因であればこれでだいたい解決するらしい。

家電量販店で買ってきたレンズクリーナーを使ってみる。

結果は……レンズクリーナー自体のCDは読み込むのに他は全然ダメでした!!

やったこと②∶ピックアップの出力調整

プレステ系の修理ではわりと成功報告も多いみたいなので、やってみました。

tweet.3ka.me

結果、症状変わらず(むしろ悪化?)

やったこと③∶ピックアップユニット交換

ピックアップの調整では直らなかったため、ユニットを取り寄せ新品交換しました。

CHICHIYANG コンソール修理アクセサリーキット、Xbox 360 HOP-141 HOP-14X HOP-141X用レーザーレンズデッキスペアパーツ

この手の保証切れゲーム機保守部品は通販(だいたいAliExpress)頼りになります。時期にもよりますがだいたい1週間~2週間程度発送にかかります。

tweet.3ka.me

結果、これで読み込みにほぼ成功するようになった。

しかし……

やったこと④∶ユニットと基板を繋ぐフレキシブルケーブルの交換

実はもう1台ジャンク機を拾っていて、部品取りにするつもりだったのだが……なんか普通に動くラッキージャンクでした。

そして修理中の機体と比較してみると、ディスク読み込みがやたら早いことに気づく。

 

修理中の機体はかなり使い込まれてる形跡があったので、もしかして部品の動きが悪いせいかも?と分解清掃してみていたのだが、なんと今度は全く読み込まなくなってしまった……

もしかして触っているうちにケーブルの一部が損傷→データ伝達にエラー?と思ったのでこれもAliExpressで部品取り寄せして交換。

tweet.3ka.me

結果、再び読み込みに成功。

これでダメだともうドライブ自体を取り替えるしか無いと思われるので、復活して良かった……。

(Xbox360はディスクドライブが本体と紐付けされてるとかで、ハッキングじみたことをしないと交換が不可能なようです。そこまでは流石にちょっと……)

ついでにやったこと

ついでにやったこと①∶分解清掃

基板内のホコリ等の除去。

この手の電子機器清掃には無水エタノールが良いそうです。

可動部品にはタミヤのFグリスを塗っていく。

プラスチック部品にも安心して使える、と(ミニ四駆以外の界隈での)評価も高い。

ついでにやったこと②∶ゴムベルトのメンテ

この機体、たまにディスクトレイがでてこなくなる症状も発症してたり……

おそらくモーターのゴムベルトも劣化してきているんだろうな……と思われるが買ってないのでまだ交換はしてない。

一度やすりで荒らして戻しただけ。

今更Xbox360直してどうすんだって?

人気ゲームほとんどWindowsに移植されてる

Kinectは互換されそうにないので……あとアーマードコアの4とfAは現在高騰中のPS3版よりはお安いので……無規制版カオヘが遊べるのも実は360だけ!!

ディスクドライブはゲーム機だけでなく、パソコンの周辺機器やプレーヤーなど幅広く使われてるので今後まだまだお世話になることもあるはず。

分解して仕組みが分かったり、色々な整備手法試せて良かったです。

まぁ……修理する一環で今まで全然知らなかったXbox360についてめっちゃ色々調べたのてすが、いくらお安いからと言っても初期型本体はマジでおすすめしないですね(断言)

もうそろそろ本体バラすのも面倒になってきたところですが、熱対策とかもしておいた方が良いんだろうなー……。

私みたいにゲーム遊ぶより修理や解析が目的ならまぁまぁって感じ。任天堂ソニー機は人気あるからか(その分修理技術も確立されてるからか)ジャンクでも最近高いんだ。

おまけ:オススメ道具

手で切れる絶縁テープ。修理に安心して使える。

分解箇所によりますが、T10、T8、T5、六角ネジを使う。

手持ちの余りものUSBメモリでは速度が足りなかったみたいなので急いで買ってきた。
一応、性能要件を満たしていると表示された。Xbox360のシステムアップデート当てる時に使用。

今後もゲームのインストール時に活躍してくれるはず。

 

ヤフオクやメルカリの配送料を提案するアプリを更新(2024/10/02)

 

3ka.me

配送料計算(提案?)アプリを更新しました。

ツール概要

梱包サイズを入力すると使用できる配送方法と料金を提案するツール。

小型荷物用。

主な変更点

・デザインをスマホ向けに改善しました。

・プレビューの場所移動。検索結果表示時に表示されるようになりました。

・デザイン変更をPC向けにも適応しました。(2023/10/12)

・検索結果を切り替えられるようになりました(おてがる配送のみ)(2023/10/13)

スマホ限定で発生していた、スクロールしてURLバーが消えた瞬間開かれていた項目が勝手に全て閉じられるバグを修正。(2023/10/15)

・郵便料金改定に対応。ついでにメルカリ便にも対応(2024/10/02 New!)

 

詰まったところのメモ

スマホとPCの画面サイズによって、検索結果のdetailの項目が自動で畳まれるか開かれるかどうかを判定しているのだが、

document.querySelectorAll()で検索結果上のdetailの個数を取得、
その後for...inで順番にopen属性を適応していったのだが、そのとき必ずsetAttribute(removeAttribute) is not a functionというエラーが発生する。

ステップで見ていくと、どうやら一つ存在しない分に適用しようとしていて上記エラーが発生していた。

解決方法→forEachでのループに変更

 

スマホでは上部のURLバーが消えた瞬間にもJavaScriptのresizeイベントが発生する。

→今回のアプリの場合は横幅の判定が必要なので、横幅を記録させて判定することで解決。

参考:iOS Safariでスクロールしただけでリサイズイベントが発生する原因と対処法 - Qiita

サイトのRSSをFediverse向けに配信出来るようにしたい(1)

最近はSNSをだらだら見るのをほどほどにして、発信は自サイト上に設置したマイクロブログCGIを運用していたりするのだが、このマイクロブログの更新情報をFediverse向けに配信出来たら便利ではないだろうかと思って最近調べていた。
HP更新があるかを見るためにHPにアクセスしてもらう、なんてのはTwitterに慣れきってしまった今の時代では能動的にやってる人間は少ないんじゃないかと思うので、できることなら直接届けたいと思うのだ。

Fediverseとは、独立性を保ったSNSが繋がる連合群のこと。
ja.wikipedia.org
インターネット上にいくつか島(SNS)があってお互い繋がっているみたいなイメージ?
それらは別のサーバー上にありながらお互いActivityPubという実装で繋がっており、例に挙げた2種以外にもActivityPub対応アプリはいくつかあったりするのでそれらも含めて繋がることが可能。
仕様がオープンなのでその気になれば自分専用サーバーやアプリを立ち上げることも可能。
僻地のような自分のサーバーからmisskey.ioやmastodon.jpのような大きなところと繋がることも可能!夢がある。
なのでその規格に対応したパイプを自分作って、データを送信できればマイクロブログ側で完結できそう。
つまり今回、送信専用の自分用サーバーを開こうとしているという方向性になる。
最初はそのサーバー用ソフトウェアをそのまま動かしたら良いんじゃないのか、なんて思ったが、さすがにオーバーすぎかなぁと。
なるべく低予算、低スケールに納めるために今のサーバーに移転してきて、あえてWordPressでもなくてがろぐを使ってるので……。

もっと簡単そうな方法としては、どこかのサーバーにおじゃまさせてもらってbotで動かすという手もありそうだが、分散型SNSの欠点としてデータ管理の問題があると聞き、よそ様のサーバーに余計なデータを残すのも……と思って、
なるべく自分でデータを持っておきたいと考えた。あとはちょっとした技術探究心です。

調べてみると、ActivityPub自体は結構シンプルなやりとりで動いているようで、
HTTPSが使えてCGIが使えるサーバーで独自ドメインを使っているなら実装は可能そうな雰囲気。
(なんとほとんど静的ファイルで動かしたという方も。。すごい。)
blog.alfebelow.com

動かすサーバーはスタードメイン付帯の無料サーバーです。
SSHインストールなどは使えないが、言語を選べば実装できそうかなと思ったので。
(ちなみに、GNU SocialというActivityPub対応マイクロブログPHPで動いているそうだ。)

ファイル構成や書き方は以下あたりを参考に。
scrapbox.io
t2aki.doncha.net
blog.3qe.us
qiita.com

nodeinfo/
└2.1.json
.well-known/
└nodeinfo.json
└host-meta.php(xrd+xml)
└webfinger.php(jrd+json)
(アクターのフォルダ)/
└index.php(activity+json)
└inbox.json
└outbox.json
この構成でサーバーにアップ。

まずアカウント情報取得時、サーバーの/.well-known/nodeinfo を見に来るようだ。
https://tweet.3ka.me/.well-known/nodeinfo

/.well-known/nodeinfo.json

{
  "links": [
    {
      "rel": "http://nodeinfo.diaspora.software/ns/schema/2.1",
      "href": "https://tweet.3ka.me/nodeinfo/2.1"
    }
  ]
}

そして "href": から"https://tweet.3ka.me/nodeinfo/2.1"を見に来る。

/nodeinfo/2.1.json

{
    "openRegistrations": false,
    "protocols": [
        "activitypub"
    ],
    "software": {
        "name": "kky3ka",
        "version": "0.1.0"
    },
    "usage": {
        "users": {
            "total": 1
        }
    },
    "version": "2.1"
}

次に、/.well-known/host-meta からtemplate=の場所を調べに来る。
/.well-known/host-meta.php

<?php
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/xrd+xml charset=UTF-8");
    echo '<?xml version="1.0"?>';
    echo '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">';
    echo '<Link rel="lrdd" type="application/xrd+xml" template="https://tweet.3ka.me/.well-known/webfinger?resource={uri}" />';
    echo '</XRD>';
?>

host-metaとwebfingerとユーザーのデータはヘッダーでContent-typeを指定して返す必要があるそうなので、実態はPHPとした。
なんという力業実装。
templeteのURLに取得したいユーザー情報を入れたリクエストを飛ばす。
この場合、https://tweet.3ka.me/.well-known/webfinger?resource=acct:[email protected]
というURLが来る。
webfinger.phpの中でユーザ情報を検索して……ってやると思うのだが、今回は1人なのでそのまま返す。
/.well-known/webfinger.php

<?php
    header("Access-Control-Allow-Origin: *");
    header('Content-Type: application/jrd+json charset=utf-8');
    $txt = '{
        "subject": "acct:[email protected]",
        "links": [
            {
                "rel":"self",
                "type":"application/activity+json",
                "href":"https://tweet.3ka.me/kky3ka"
            }
        ]
    }
    ';
    $json = json_decode($txt);
    echo json_encode($json, JSON_UNESCAPED_SLASHES);
?>

hrefのURLにアクセスしてアクター情報を取得。
https://tweet.3ka.me/kky3ka/
/(アクターの名前)/index.php

<?php
    header("Access-Control-Allow-Origin: *");
    header('Content-Type: application/activity+json charset=utf-8');
    $txt = '{
        "@context":[
            "https://www.w3.org/ns/activitystreams",
            "https://w3id.org/security/v1"
        ],
        "type":"Person",
        "id":"https://tweet.3ka.me/kky3ka",
        "preferredUsername":"kky3ka",
        "name":"三日坊主日記",
        "summary":"Yなサイトから移動。日々のつぶやき",
        "url":"https://tweet.3ka.me/tegalog.cgi",
        "inbox":"https://tweet.3ka.me/kky3ka/inbox.json",
        "outbox":"https://tweet.3ka.me/kky3ka/outbox.json",
        "icon":{
            "type": "Image",
            "mediaType": "image/png",
            "url": "https://tweet.3ka.me/icon.png"
        }
    }';
    $json = json_decode($txt);
    echo json_encode($json, JSON_UNESCAPED_SLASHES);
?>

ここにアカウントのプロフィール的な情報を入れておく。W3CのActivityPubの仕様では、id,type,inbox,outboxが必須(MUST)となっていた(実際にはなくても大丈夫なものもあるらしい……)ので入れておく。
www.w3.org

そうそう、この場合ファイル名が規定と異なるのでそのままではアクセス出来ないため、
指定の名前でアクセス出来るように、.htacessを使ってルーティングしておく。

RewriteEngine on
#webfinger?resource=acct:...
RewriteCond %{QUERY_STRING} ^resource=(.*)$
RewriteRule webfinger.* webfinger.php?%1[L]
#nodeinfo(/)→nodeinfo.json
RewriteRule nodeinfo(.*)$ nodeinfo.json [L]
#host-meta→host-meta.php
RewriteRule host-meta(.*)$ host-meta.php [L]

/.well-known/ディレクトリの例
/の有無で影響があるかは分からないが、試しに登録させてもらったマストドンインスタンスでは/ありでもファイルにアクセスできたのでそれに合わせることにした。
ちなみにそこのサーバーはパラメータなしでwebfingerを直接呼んでみたら400エラーを返していたが、こっちは登録機能なしの1人用サーバーということで特に閲覧制限はしていない。(webfinger.phpを直接叩くとユーザーが見える)
今回は力業で実装したが、やってることはJSONを返すだけなので、bottle.pyみたいなレンタルサーバーでも動いた実績があるマイクロフレームワークを使ってみても良かったかもしれない。

この状態でMisskeyの照会(他サーバーのユーザーを探す機能)で@ユーザー@ドメイン名で検索してみる。
とりあえずMisskey側から認識されることには成功。
注意点としては、記述ミスに注意というところ。
一度失敗すると暫くの期間(具体的な期間は分からない)そのサーバーのユーザーが出なくなるらしい。
一応Fediverseでメインにするつもりだったマストドンインスタンス上で表示されてなかったり……。

とりあえず窓口ができた!って程度で、フォロー(されたことに対応する)機能はできてないので、フォローされたりフォロワーに投稿を届けることは出来ない。
なので次はそこが目標かなと。
投稿の配信についてはマイクロブログCGI側にRSSを吐き出す機能があるので、これを流用したら良いのではないかと考えている。
というか思ったけど、はてなブログもFediverse配信に対応したりしないかなって思ったり。

生成AIイラストで私は絵を描く必要がなくなるのか。

ここ最近、SNS上ではAIイラストが話題だ。

筆者も最初見た時には半信半疑であったが、AIで描いたと称した美麗なイラストがXやPixivなどを浸食する勢いで出てくるようになると、これはとんでもないことが起きてるぞと。

自分も一応、推し活とかファン活動の一環で絵を描く趣味があったので、これは見過ごせないぞと。

敵を知るため……というか、現状AIイラストはどこまでやれるのか?本当に人間の絵師は要らなくなるのだろうか??ということを考えていて、

結局外から見るよりも、自分自身で触りながら考えるのが早いかと。

最近、自分のPCでも生成AIで画像を作れる環境にあったことが分かったので、
思いきって環境構築してAIイラストを作ってみたり、Copilotなどのウェブ上のサービスを試してみたり。

あと、この記事を書くにあたって、いくつかのサイトの記述も参考にさせてもらっている。

今後AIが仕事を奪い合う敵になるか、それとも良き味方になるかはまだわからないが。

できたこと→ざっくりこんなイメージ、だけでイラストをつくる

これに関しては予想通りと言うべきか。

ただもう少し思った通りに出すにはちょっとコツというか、英語やプロンプトの勉強が必要ですね。

まだ曖昧なイメージしか無いときに、これで良いやと画像を用意出来るのはイメージを模索する上ではいいかもしれないです。

逆にそれは本当に自分でイメージしていた物なのか?を考えるべきだと感じましたね。

できたこと→絵柄を維持して複数枚のイラストを出力する。表情差分を作る

できたこと→絵柄を変える

できたこと→出力したキャラクターの絵柄にある程度寄せた別キャラクターをつくる

ゲームで使われるような表情差分を作れないとかも言われていましたが、それも現在ではある程度コントロール可能な模様。

ただプロンプトで指定する関係で、微妙なニュアンスの表情をつけたい場合は難しいかと。笑い顔にも100面あるんやで。

それこそLoraで学習させるより自分で描いてしまったほうが早そう。

また似たような絵柄ばかり出てくるという問題点も、モデルを変えることで、出力される絵柄はガラッと変えることができる。

ネット上で出回っているAIイラストは、だいたい人気があるモデル使ってるから似たようなイラストばかりになっていたわけだった。

別のキャラクターを出力してそれぞれを同じ絵柄にしたい、というのも昔は難しいと言われていましたが、シード値を使うことで、絵柄を維持して別のキャラクターを生成することは(ある程度なら)制御可能な模様。

ある程度なら、なので、塗りや目の描き方など細かいとこの統一感を重視すると違和感バリバリ感じますが……

できたこと→同じ顔以外のイラストを出力する。○○風イラスト

難しいこと→トレンドから外れた顔

よく言われるのが、AIで出力したイラストは同じ顔ばかりになる、という意見。

自分で出力してみたら、あれ、案外そうは感じなかったというか。むしろ期待外れ?な出力ばかり。

ここでみんな大好き魔法の呪文。はい、みなさまご存じmasterpieceってやつですね。

この呪文がないと出力の質がガクッと落ちてしまう。というのも、このmasterpieceというのは某イラストサイトにおけるタグの一つで、その名の通り傑作とされる作品につけられていたものなんだとか。だからSNS上に上げられる絵が上手い絵の平均顔、いわゆるマスピ顔ばかりになるわけですねぇ……。

描きたいイラストの傾向が版権名とか流行の顔や塗り以外が良いって人には向かないですね。
90年代に流行っていたアニメとか思いだして頂いたら分かると思いますが、イラストにも流行廃り、イラストレーターにも絵柄の変化があるので、AIがそれについていけるのか、という点も気になるところです。

その辺は人間が学習させてあげる必要があるのだが、その一方で某サイトには、特定の絵師や版権キャラクターに寄せたモデルとか配布されてて、ほとんど無許可と思われるものばかりなのはかなり問題だと思いますね……。

できたこと→既存の絵から似た構図のイラストを作る

難しいこと→既存の絵から同じキャラの別パターンのイラストを作る

それimg2imgでできるんじゃ?と思うかもですが、案外上手くいかなかった……。

自作絵を試しにAIに読ませてそれっぽいものが出てきたら良い方で、結局ある程度のプロンプトを与えてみた結果、構図を遠目で見たらまぁ…近い…?みたいな感じのものは出力されますが。

最初は右向き白背景バストアップピンク髪のキャライラスト与えて白背景バストアップのキャラは出力されるって程度の精度。

そこに右向きピンク髪のプロンプト与えて……髪型とかポーズとか服装とか細かいところは変わってしまうので、そこも指定する必要がある。
有名な版権キャラとかならともかく、私が描きたいのがマイナーキャラか創作キャラばかりなので安定して同じキャラが出ない……おまえ!その解釈はねぇだろ!!って何度も(パソコンに向かって)ぶち切れたことか。

有名版権でも1期2期で見た目が異なるようなものだと、片方に引っ張られて再現が難しくなるキャラクターも一部には居るようです。

ただ、出力によって衣装が変わるのは創作のヒントになって中々面白いところではある。逆に考えると、要素を組み合わせて新しいキャラクターを考えるときのネタ探しに使える。

衣装デザイン考えるとき、とりあえず簡単な衣装まで描いた状態でAIガチャを回して、出てきた中から良いなぁと思う要素を入れて改めて描き直してみたくなったりする。

ただ、これには後述の注意点もあり……

難しいこと→特定の規格に沿った画像を出力する

私が思っていた画像生成AIの使い方として、ゲーム製作で使うマップチップのドット絵を出力して楽ができないかな~なんて考えたのですが。
後で有償素材なり自作素材なりに差し替えるにしても、試しに作る程度ならAIに適当に作ってもらったやつで良いかなと。

でもRPGツクールのマップチップとかって特定の規格に沿って並んでいるでしょ、それをプロンプトで指定するのは無理があった。サイズ指定だけじゃなく、マップチップ同士の繋がり、必要なパーツの種類みたいなのも考慮しなきゃならないし……

あとドット絵なのにめちゃくちゃ違和感ある雰囲気(何とは言わない)になったりとか。どことなく中華ゲーっぽい雰囲気になったりとか。

部分部分では使えそうな所もありますが、結構手を加えないと使い物にならない感じで、それを資料として横に置いて見ながらもう一から作ってしまった方が早い気が……

なので、素材作成の参考資料という面では使えそうですが、前述したように雰囲気の統一みたいなのは難しいので、それをそのまま使うのは難しい感じですね。

参考:シルバーセカンド開発日誌 画像生成AIをゲーム開発に活かしたい!

難しいこと→極端なイラスト

過去の漫画をAIでリバイバルした例。

【悲報】エイケン、AIによってリメイクされて炎上【AI絵師 / 松山せいじ】 - Togetter [トゥギャッター]

批判的意見として、(どことは言わないが)サイズが大人しい、と言われているのが興味深い。

AIって仕組み上、平均化されたような出力になるので、こういった極端なデフォルメというか、特定の主張を強調させたい、みたいなのは難しいのではないかと。

作者のセンスが爆発してるタイプのギャグ漫画とかもAIには難しそうですね。AIギャグ漫画もそれはそれで別ジャンルとしてウケそうではある。

……というわけでみんな!心に忠実になろうぜ!!

難しいこと→複雑なデザインの衣装

複雑になればなるほど破綻しやすくなっていくので。

とくに二次創作とかだと、キャラクター衣装の違いは気になる人も多いでしょう。

ある程度は学習で克服できそうですが、複雑×マイナーとかそもそも創作キャラみたいな状況だと結局自分で以下略。

あと一枚絵単品なら良いけど、立体的な把握と状況の説明が必要なバトル漫画とかも難しいんじゃないかなぁ。
3Dモデルで位置関係とか指定できる技術はあるようですが、それにも見栄えを良くするための嘘パースみたいな単純にパラメータ化できないような表現が使われていたりしますし。

難しいこと→現実にないもの、そもそもリリース前のもの

AIには当然ながら、学習元の画像が存在します。

なので、現実にないもの、ファンタジーのものはAIが表現するのが少し苦手だったりします。

またたとえばリリース前の学園モノソシャゲとかで、制服のデザイン画は完成しているからキャラクターに着せたイラストをこれから描いていって欲しいって依頼があったとき、AIではどうしようもありません。

その衣装のデータがAIにはないし、ネット上にもそんなイラストは存在しないから学習しようがないのですね。

AIで効率化しようにも、最初に何枚かは、キャラクターにその衣装を着せたイラストを描く人間が居なければ学習素材もできない。

……だれか、私の脳内妄想を具現化してくれないかなぁ……。

自分が夢の中で見た実在しない場所の景色を他人になんとかして見せたい、と思っても結局自分で形にするしかないのである……。

難しいもの→風刺画、タイムリーなこと、新常識

新聞の政治欄に載っている風刺画のようなものは難しいでしょう。

人物の特徴については学習できても、一週間でなにが起きるか分かりませんから……。あれもデフォルメ表現が強いですからね。

今日公開されたソシャゲの新キャラクター、新シナリオの感想なんてものもすぐには難しいでしょう。

明日には新しいファッションが流行っているかもしれません。

スクール水着でも、最近はセパレート型が主流になっているそうです。

絵柄の変化もそうですが、倫理観も時代や国によって移り変わりがあるものです。

現状でも一部の海外では一部のプロンプトの規制がある例が存在するため、AIが出力する表現が不適切とされる可能性も考えられる。

触ってて思った問題点

学習元、データセットの出所は知りたい。

単純に現在問題とされている著作権の問題が気になるのもありますが、

ある特徴を持つ絵を出力するようAIに指示すると、具体的な作品名を挙げてないにもかかわらず、既存の版権にそっくりのキャラクターや意匠を出力してくることがあることを何度か確認しました。

あるプロンプト回してて似たような絵柄が出てくるとなんかめちゃくちゃ不安になる。既存の絵の構図やキャラクターなどをそのまま出していないか、意図せず剽窃と近いことになってしまうのではないかとヒヤヒヤする。

そしてそれがどちゃクソ好みの絵柄だったりすると、
「元絵とそれを描いた絵師を教えてくれないだろうか……マジで……」って気分になってしまうw

個人的見解→何が欲しいのか、を見極められるか

AI技術は進化を続けており、日に日に新しい技術が誕生しています。このためにStable Diffisionの環境を作った所なのに、FLUX.1ってなに……

表情差分を作るのも、少し前までは難しかったことですが、今ではもうすでに解決する技術があったりするので、もうすぐ近い未来にはこの記事の時点では難しいことに挙げた点も解決されているのかもしれません。

今後進化した技術に触れるためには、非常に高いPCスペックが必要(おもに高額なグラフィックボード)になるので、一般人には得体の知れない世界になってしまいそうで怖いです。逆に低スペックでも動くようになってくるかもしれませんが。

現状、個人の環境としては、絵は完全にAIに任せて自分はコーディングに集中するぞーなんて未来はまだむずかしいようで。

出力されたものをそのまま使うのは質の面でも著作権的にもまだまだ問題が多いですが、この衣装やポーズ良いな、と思ったものを模写などイラストの練習に用いたり、加筆修正して仕上げてみるとか……。いや、そこまでするくらいなら構図だけ見て一から描いたほうが早いか。(出来ることなら他人のソースコード読みたくないタイプの人間)

また、外には出さない仮素材を作ったりといったことには活用出来そうです。

あとまぁ、AI絵の癖、出来ないことみたいなのも分かってくるので、AI絵の特性を知ることでAI絵かどうかを判別するのに役立つと思う。生成AI許さないタイプの人でも実際に触ってみる価値はあると思いますよ。

あとどちらかというと、私は絵が欲しいときにはどのようなモノが欲しいかまではっきりしている状況の方が多いので、AIの作品をそのまま出すことはないかなぁ……と触りながら思いました。

生成AIが出してくる絵柄はとても綺麗だけど解釈違いすぎて……自分の絵柄の方が下手でもまだ好きかもなぁ……と少し前向きになれたかも。

そして”使い手側の問題”も多く指摘されていますね。

自分としては、もろもろの問題が解決するまでは資料集めの様な個人的利用、補助となる範囲での利用に留めておきたいと思っています。

とりあえずデータセット問題はなんとかしてほしい

あとは仕組み上、意図せず剽窃になってしまう可能性が有るという点で、AIの作品をそのまま使うのは怖いところがあると感じた。

それを解決するには、やっぱり学習元をはっきりさせて欲しいなぁと……

 

ちなみにもし仮に自分の絵をAIに学習させて欲しいと言われたら、ちゃんと頼まれれば私ならOKしてしまうかな。

ただその時は、どのようなアルゴリズムでどのように私の絵柄を再現しているのか、までは教えて欲しい。

個人的な技術的興味があるのと、学習された内容から私の“思想“がどう滲み出てくるのか、気にはなりますから。

きまぐれに『アクションゲームツクールMV』を買って遊んでいて思った事

プログラミングの仕事は将来AIが主にすることなのかもしれない……という元プログラミングの仕事もしていた立場の人間として思うのは、ノーコード技術ってどうなんだろうと興味がある。

 

そしてノーコード開発と言えば、もう何十年も前から、ゲーム開発ではプログラミング不要のノーコードでゲームが作れるようなツール(古くはRPGツクールシリーズ、最近でもティラノビルダーなど特定のジャンルに特化したものやUEのブループリントもそうなんだとか)が存在していたりする分野なので、AIがある未来でもそう変わらない、のかもしれない(労力的な意味で)

 

ということで、実はちょっと前のSteamのセールで『アクションゲームツクールMV』を買っていた。

まぁ自分の場合ゲーム作るよりも、作ったドット絵にモーション付けてアニメーションさせたり、作ったドット絵並べたらちゃんとマップっぽく見えるかなーとかそういったことを試す用途にしかまだ使えてませんが……。

Unityとかのゲームエンジンでも動くように組むのは結構大変なので、ここで軽くプロトタイプ程度に実験して、実際には別のゲームエンジンだったり専用にプログラムを組むことを検討する、というのもありかもしれないなーとおもったり。
これはこれで良いかもしれない。実際結構サクッと実装できた。

ツールとしては使いこなせば実装の自由度が高いが、その分回りくどくなってしまったりと、RPGツクールシリーズを想像するとそれと違いすぎて扱いにくい……と言ったところ。

自分はおもしろいお話がうまく作れないのと、データベースやらとかこまごました部分を考えるのは苦手なのと、そこまでターン制RPGが好きというわけではない……という点で、個人的にはRPGツクールシリーズよりしっくりくるところがある。
どちらかというと横スクアクションのが作ってみたいジャンル。

 

と、まぁ買ったばかりで遊んでるところで新作が出るという発表が。

こっちはエンジンが最近話題のGodotになっているそう。

news.denfaminicogamer.jp

とりあえず新作では会話シーンやイベントシーンの動きとかアニメーションみたいなのがもっと作りやすくなってたらいいなーと思いました。

あとは横スクアクションの素材はノベルやRPGと比べて集めにくいという点ですね。いっそ現行作のMVを素材目的で買っとくのも良いかもしれない。

ちなみに自分で試したところ、AI使って素材に使えるような高品質な素材を出力するのは難しいと感じたので、(決まった素材規格を満たすものを直接出力できるようなものはなさそう)最低限でも加工できることは現状必須。
結局資料としての扱いに留めて、新作に向けて自分で生産できるようにするしかないかなーと。

 

実際にこのようなツールを使ってゲームを作ってる方は、グラフィッカーなどで元々イラストは描けるよーって感じの方が多い印象ですね。

実際の作品を見てると、ゲームが作りたいならプログラミングよりもイラストとかグラフィックを重点的に勉強した方が良かったのかもしれないな、、なんて気もしてしまいます。プログラマ一辺倒人間が作ったゲーム、グラフィックが簡素すぎて面白く見えない問題。

曲を作りたくて音楽理論の勉強をしている

昔から、時折、ゲームを作りたいと思っているところがある。

プログラミングは昔から勉強していたし(プログラミング不要でゲームを作れるツールも所持している)、絵やアニメーションもそれなりに描けるようにはなったし、
ここまで来たら最後は、自作のBGMを付けられるようになりたい、と感じた。

ただ、音楽ってどうやってつくるのかわからない……。
ちなみに楽器経験もほとんど無い。楽譜はドレミ……ってなぞらないと読めない。

 

過去に、ChatGPTを使ってDTMの勉強をできないかなんてことを考えたことがある。

個人的に、このアイデアは結構面白いと思う。

基本はAIがテキストに沿って進むように誘導する形で、用語とかで不明点があったら好きなときに質問できるし、自分の好きなペースで進められる。
オンラインの習い事はAIに習うという時代が来るかもしれない……なんてことを感じた。

ただ、現状のAIは嘘をつくことがあるので、いまいち信用ならないんですよね。これで作った曲も自動生成だからクオリティもなんだかな……ってところもありますし。

プロ講師の監修を入れたりして信憑性を高めたら中々いいんじゃないだろうか。

 

まぁいっそそのまま、AIに作曲させる、という手がなくもないが、自分の欲しいタイプの曲(特定の楽器を使って……ゲームの展開をあれこれこうしたいのでそれと連動したような曲で……)みたいなオーダーで作れるのかは……どうなんだろう。

まぁ、パッと見て判断出来る絵はともかく、実時間使って判断するようなものをガチャして判定して……するのはあんまり効率良く無さそうというのが。

作曲方面はプロンプトでは限界がある気がする。もうちょっとパラメータみたいなの設定できる方がいいような。もしくはプロジェクトファイル直でください。気に食わないとこは弄るんで……。

突き詰められるようになると、結局1から作るのと労力は変わらない気がするが。

 

あるとき、こんな記事を読んで、

音楽知識ゼロからでもゲーム音楽を作るのはそんなに難しくないという話 | 直伝・サウンドクリエイターへの道

もしかしたら、自分でも勉強すればできるのかもしれない、と思ってしまった。
人間、勉強すればなんでもできるだろう。絵やプログラムだってそうやってやってきたじゃないか。

 

そんなところで、Nintendo Switch用で作曲できるツール、

KORG Gadget for Nintendo Switch ダウンロード版 | My Nintendo Store(マイニンテンドーストア)

がセールでなんと半額になっていた。もちろん買った。

www.youtube.com

どんな曲ができるか動画サイトを見てみたり。

15分で作曲する動画があって面白かった。

 

このツール、面白いのは、『曲の展開』という機能があり、

1小節でも書ければオリジナル曲が量産できてしまう。笑

……最初にできた曲は不協和音で酷いものでしたが、自分でも曲ができたわけだ!

 

その後、コードとかベースとかドラムとか、それぞれどうやって入力すればいいのか、調べながら書いていた。

そうして作った3曲目は、BPMもコードもベースも既存曲の一部を拝借し、メロディーと音色はオリジナルという形なのだが、曲としてのクオリティは断然こっちの方が上な気がする……!

たったこれだけでも、耳コピをすると音楽つくる上で役立つ、という話に納得……!

すごい、好きな曲がどうやってできているのか、とても興味が沸いてきた。

 

ただ、耳コピを効率的にやるためには、音楽理論の知識があった方が良いとのことで、(理論を知っていると、コードやキーから使われている音を推測できるとか、そういった面で効率がよくなるそう。)

ざっと読み始めてみましたが、結構衝撃的。ピアノの鍵盤って、なぜあんな黒鍵盤の位置なのか?という長年の疑問が解決してちょっと感動しちゃった。

 

なので、作曲するよりも先に、一から音楽理論を勉強するのが良いのではないかと感じ、勉強し始めたのである。

先述のように、ベースをAIに作らせて欲しいように弄る、という方針になったとしても、理論を知らなければ違和感のあるような改変をしてしまうだろう。
だから、こうやって基礎知識をつけることは無駄ではないと思う。

課題としては、音感が結構無いことかもしれない。

メロディーを特定するのに結構時間がかかる。あと楽器の名前と音が紐つかなくて、聴き取れてもなんの楽器かわからなくて入力時困る、とかも……。

まぁ、ツールを触っているうちに楽器の音色くらいは覚えられたらいいな。

どこかで見たコマンドを延々とタイピングするタイピングゲームを作った

突然ですが、ミニゲームを作ってみました。

製作の動機や元ネタとしては、

marubodiary.hateblo.jp

「自作したアケコンでなんかやりたいなー、

そうだ!格ゲーのコマンドをタイピングするゲームを作ろう!コマンドの練習になりそう!」

……でChatGPTに先行研究させていたときの産物がこちらだったのですね。

marubodiary.hateblo.jp

これをベースに(それはもう跡形もないくらいに)改造してできたのが今回のゲーム、という。
やっぱマニアックな仕様を入れたいというか、複雑になるとChatGPTのプロンプトだけでやるのは難しそうでしたね。

今回は全て生のJavaScriptで作っています。

ゲームのプレイはこちらから↓

3ka.me

実装で苦労したところ

実際の格ゲーにある仕様として、実際にされた入力を補助するような、簡易入力という機能があるのですが、それの判定がちょっとたいへんでした……。

アケコン自作してないと思いつかなかったであろう箇所として、隣接する入力をビット演算で処理してるところ。結構気に入ってる。

後は、JavaScriptのキーボード入力ってKeyPushとKeyReleaseで2回入るので、そのイベントの処理で考える事がありましたね。

例えば↘の斜め入力があるとき、→(KeyPush)↓(KeyPush)が入ったことが判定されてから初めて↘が入るので、無視しないとミス扱いになってしまうところとか。(Release時も同様)

一回転コマンドは途中で斜めの入力が入った場合でも許容するようにしているとか。

(とあるコマンドに至っては、専用の処理を入れて対策しているという……。原作ではどうなってるんだろう??)

なので実際のゲームより入力の判定は大分甘め?かもしれないです。(まぁ入力の時間制限もないし)

その辺はソースでまんま読めるので気になったら覗いてみてほしい。

筆者がそんなに格ゲーやらないので、ここの判定は実際と比べて挙動がおかしい!とかあったら指摘して貰えるとありがたいです。