From bb4cacfa0e5e33feabd1fb3d0975064b96d32c15 Mon Sep 17 00:00:00 2001 From: syui Date: Wed, 21 Aug 2024 22:20:49 +0000 Subject: [PATCH] =?UTF-8?q?link=20=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- link.md | 126 ++++- memo.md | 1371 ++++++++++++++++++++++++++++++++++++++++++++++++++++ project.md | 220 +++++++++ system.md | 897 ++++++++++++++++++++++++++++++++++ 4 files changed, 2602 insertions(+), 12 deletions(-) create mode 100644 memo.md create mode 100644 project.md create mode 100644 system.md diff --git a/link.md b/link.md index c75491f..d3dca26 100644 --- a/link.md +++ b/link.md @@ -1,27 +1,129 @@ -- repo : https://git.syui.ai/ai/ue -- blueprint : https://blueprintue.com/profile/ai +latest : ue 5.5.1 +- [ue 5.5.1](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.5-release-notes) +- [ue 5.4.4](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.4-release-notes) +- https://blueprintue.com/profile/ai +- https://dev.epicgames.com/community/profile/organization/gdkg/ai -- [ue 5.4](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.4-release-notes) -- [ue 5.3](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.3-release-notes) - -## 無料 +## free +- asset: [content examples](https://www.unrealengine.com/marketplace/en-US/product/content-examples) - asset : [city sample](https://www.unrealengine.com/marketplace/ja/product/city-sample) - asset : [game animation sample](https://www.unrealengine.com/marketplace/en-US/product/game-animation-sample) +- asset : [automotive bridge scene](https://www.unrealengine.com/marketplace/en-US/product/automotive-bridge-scene) +- asset : [automotive winter scene](https://www.unrealengine.com/marketplace/en-US/product/automotive-winter-scene) (街頭) - plugin : [pixel streaming](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/pixel-streaming-in-unreal-engine) +- plugin : [twinmotion](https://dev.epicgames.com/community/learning/paths/L6G/everything-you-need-to-know-about-twinmotion) +- plugin : [ddsl](https://developer.nvidia.com/rtx/dlss/get-started#ue-version) - plugin : [vrm4u](https://github.com/ruyo/VRM4U) - plugin : [kawaiiphysics](https://github.com/pafuhana1213/KawaiiPhysics) -- plugin : [varest](https://www.unrealengine.com/marketplace/ja/product/varest-plugin) +- plugin : [varest](https://github.com/ufna/VaRest) +- plugin : [asyncloadingscreen](https://github.com/truong-bui/AsyncLoadingScreen) +- plugin : [ui navigation 3](https://www.unrealengine.com/marketplace/ja/product/ui-navigation-3) +- plugin : https://github.com/colory-games/UEPlugin-AccessVariableByName -## 有料 +## plan - asset : [superhero fligth animations](https://www.unrealengine.com/marketplace/ja/product/superhero-flight-animations) -- asset : [dynamic volumetric sky](https://www.unrealengine.com/marketplace/ja/product/dynamic-volumetric-sky/) +- asset : [ultra dynamic sky](https://www.unrealengine.com/marketplace/ja/product/ultra-dynamic-sky) - asset : [ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves) - plugin : [http websocket helper](https://www.unrealengine.com/marketplace/en-US/product/http-websocket-helper) - plugin : [jsonparser](https://www.unrealengine.com/marketplace/ja/product/jsonparser) -## その他 +## test -- [twinmotion](https://dev.epicgames.com/community/learning/paths/L6G/everything-you-need-to-know-about-twinmotion) -- [AutomotiveBridgeScene](https://www.unrealengine.com/marketplace/en-US/product/automotive-bridge-scene) \ No newline at end of file +- https://github.com/gls-fergius/Game-Logs-System-GLS-Demo +- https://github.com/BlueprintAttributes +- https://github.com/PolygonHive/GASP-ALS + +## buy + +購入すべきアセットは少ないです。ブラックフライデーに購入しましょう。また、慎重に見極めないと時間と金銭を無駄にしてしまいます。ここでは特に重要な視点をお伝えします。 + +まずupdateが最新に追従していること。頻繁に更新されているかを見てください。これは`ultra dynamic sky`が当てはまります。開発者の特徴としては2つに分かれます。新しい機能を別にするか、古くからあるアセットに含めるかです。アセットの歴史を確認してください。 + +次にそのアセットが根本的な部分の内容であり、updateを必要とせず、継続的に使用できるか否かです。ただし、最新に近いversionに追従しているかは確認しておく必要があります。 + +1. updateが頻繁で最新であること。歴史を見て新しい機能を継続的に追加していること +2. 根本的な部分の内容であり、頻繁にupdateしなくても問題ないこと + +この2つのどちらかに当てはまるものを購入しましょう。順位は1が優先します。通常は1に当てはまるもののみを購入し、どうしても必要な場合に限り2を購入します。現在の殿堂入りをまとめておきます。有料版では1つだけ殿堂入りを果たしました。 + +```sh +# 有料 +- ultra dynamic sky +``` + +これらは5.5への対応が最も早かったものです。継続的に使用できるため基本機能に組み込んでも問題ないでしょう。 + +例えば、メンテナンスが放棄されたアセットはいずれ使用できなくなると思いますので、購入や使用は気をつけましょう。 + +## update + +まず、追加した処理は`${project}/Content/${asset}/BP_Backup`にでもまとめておきます。 + +次に`${project}/Content/${asset}`を他の場所に退避します。updateを追加したあと、退避していたものの一部`${project}/Content/${asset}/BP_Backup`を戻します。 + +あとは必要な処理を追加していけばいいですが、本来はcastなどでいつでも接続や解除ができるように設計しておくとよいでしょう。ただし、負荷が増大してしまったり内容によって難しい場合があります。この辺は難しいのでケースバイケースだと思います。 + +## chat + +- [RuntimeSpeechRecognizer](https://github.com/gtreshchev/RuntimeSpeechRecognizer) +- [RuntimeAudioImporter](https://github.com/gtreshchev/RuntimeAudioImporter) +- [chatgpt](https://openai.com/api/) + +## api + +- varest : https://blueprintue.com/blueprint/i95n84w5/ +- http helper + jsonparser : https://blueprintue.com/blueprint/mb0s7e_a/ + +## ref + +`ファイル(右クリック) -> 参照ビューア` + +## store + +- https://gumroad.com/ + +## dynamic volumetric sky -> ultra dynamic sky + +- [dynamic volumetric sky](https://www.unrealengine.com/marketplace/ja/product/dynamic-volumetric-sky/) -> [ultra dynamic sky](https://www.unrealengine.com/marketplace/ja/product/ultra-dynamic-sky) + +202409のupdateでultra skyの雲の品質が良くなったので移行します。しかし、雲の品質は未だdynamic skyのほうが少し上です。ただし、dynamic skyは天候はありませんし、あまり更新されていません。ultra skyは天候があり、頻繁に更新されています。 + +## city sample + +https://dev.epicgames.com/documentation/en-us/unreal-engine/city-sample-project-unreal-engine-demonstration + +## vrm + +- vrm : https://github.com/vrm-c/vrm-specification/tree/master/specification +- vrma : https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_vrm_animation-1.0 +- three-vrm : https://github.com/pixiv/three-vrm + + + +## vmc(old) + +- https://github.com/HAL9HARUKU/VMC4UE (ue5.1) -> [patch](https://git.syui.ai/ai/ue/src/branch/main/plugins/vmc4ue) (ue5.5) +- https://github.com/HAL9HARUKU/ueOSC (ue5.1) + + +## web browser + +https://dev.epicgames.com/community/learning/tutorials/z0zP/unreal-engine-editor-utility-widgets-with-webbrowser + +## widget3d world + +widget3dをworldに置くと画質が悪くなる問題があり、以下のmaterialを`BP_widget_component`に当てることで解決できます。これはクロマキーと呼ばれる背景の影響を消す手法になります。 + +https://blueprintue.com/blueprint/-49_059w/ + +- https://forums.unrealengine.com/t/browser-3d-widget-looks-washed-out/366547/3 +- https://www.reddit.com/r/unrealengine/comments/1clbeeb/is_there_any_way_to_make_3d_worldspace_widgets/ + +## stream + +`pixel streaming`と`callab viewer`や`vagon stream`を使用すると実現できます。 + +- https://dev.epicgames.com/documentation/en-us/unreal-engine/collab-viewer-template-quick-start-in-unreal-engine +- https://vagon.io/blog/how-to-create-multiplayer-unreal-engine-experiences \ No newline at end of file diff --git a/memo.md b/memo.md new file mode 100644 index 0000000..e407c86 --- /dev/null +++ b/memo.md @@ -0,0 +1,1371 @@ +適当な思考をまとめる。考えがまとまれば[verse](https://git.syui.ai/ai/ue/wiki/project)に統合する。 + +定期的にcommit logを整理する(容量圧迫するので)。 + +# aiverse + +[aiverse project](https://git.syui.ai/ai/ue/wiki/project)では[aiue system](https://git.syui.ai/ai/ue/wiki/system)を使用したatprotoアカウントでゲームをプレイ、配信、視聴、チャットができるゲームの開発と規格を作成する。 + +## 規格 + +> RFC(Request for Comments)は、インターネット技術に関する仕様や標準を記述した重要な文書シリーズです。現在は主にInternet Engineering Task Force (IETF)によって管理・発行されており、インターネットの技術的基盤を定義する公式文書。インターネットプロトコル、アドレッシング、ルーティングなどの技術仕様を記述。 + +> ISO(International Organization for Standardization)は、国際的な標準規格です。製品、サービス、プロセス、材料、システムに関する幅広い分野の標準を対象。 + +# ゲームの仕様 + +## 企画 + +ここに書いている規格とは一般的な規格と異なり、単に具体的な手順やルールな意味合いです。創作者の思考が抽象的な精神論になりがちなので、それを回避するため規格(企画)を作ることにした。 + +`aiverse`では現実とゲームの融合がテーマになっています。snsアカウントでログインし、プレイヤーは固有のキャラクターを操作し、現実の体の動きに合わせても動かせます。配信環境を整えます。 + +人々は何を楽しいと思うのでしょう。それを根本的な部分から考えます。 + +プレイヤーはゲームの主人公になりきって物語を追体験します。しかし、本当は自分が主人公の物語をプレイしたいのではないでしょうか。プレイヤーが本当に求めているものは何なのでしょう。 + +この方向で考えられたゲームはすでにあり、例えば、最初にキャラメイク、自分で主人公をカスタマイズしてスタートするゲームがあります。 + +しかし、私はそういったゲームをあまりプレイしません。どのようにカスタマイズしていいかわからないし、めんどくさいし、カスタマイズしてもどうもしっくりと来ないのです。ですから「自分で作る」タイプのゲームはあまりやりません。原神のように最初からキャラクターが作り込まれているゲームを好みます。 + +やはり、カスタマイズ系は最初で躓いてしまうのです。よくわからないし、面倒なのです。すぐに始められることが何より重要です。 + +ではこういったケースはどうでしょう。例えば、原神に自分自身がデザインされたキャラがいてそれを操作することができたら。私はきっと喜んでプレイしたでしょう。そのキャラに愛着を持てると思います。原神は声優さんもプレイしており、特に自分の声を使ったキャラを中心に楽しまれている姿が印象的でした。 + +つまり、このような体験を多くのプレイヤーができるようになれば、きっとゲームは楽しくなる。 + +そのためには何が必要になるでしょう。その一つが唯一性です。 + +このゲームではプレイヤーの唯一性を担保し、デザインします。例えば、最初期においてのキャラはそのプレイヤーしか扱えないようにします。解放条件を満たすと一般にも開放され、ガチャを引くことで使えるようにします。 + +しかし、プレイヤーが増えれば増えるほどそれは難しくなります。それをどのように回避し、解決していくのか。それが配信だったりアカウントだったりモーションだったりします。 + +# 物語(β) + + +## v0.3 + +ストーリー自体はあとから考えるとして、最初のゲームイメージが思い浮かんだ。多分、このシナリオに沿ってゲームは始まるだろうと思う。 + +1. プレイヤーはログインして世界に降り立つ。このときのキャラクターはモデル:アニマルのfantasyで構成される。たくさんのプレイヤーが一つのマップに参加する形式とする +2. 螺旋階段の上に大きな咆哮、上のステージで爆発が起こっている +3. 「この世界は2つの巨大な力がぶつかり合い、数百年争っている。あなた達の力で戦いを終わらせよう」 +4. プレイヤーは階段を登り、レイドボスに挑む + +ステージは幻想的。円形のステージに床は半透明でキラキラしている。螺旋階段はその円形の周りをぐるっと3周くらい? + +戦闘シーンは、ボスのHPはあるが、プレイヤーはない。ふっとばされるとステージから落ちる。再び階段を登り戦闘に参加する。爆発は一度使うとゲージが貯まるまで使えない。攻撃するとゲージが貯まる。爆発は無敵時間があるのでそれを使って回避できる。 + +ボスに勝利すると「この世界の争いは終結した。ここからこの世界の神話がはじまる」 + +円形のステージが動き出しゆっくり空に登っていく。プレイヤーはこの世界を眺めることができる。終点にたどり着くと、そこがfantasyの家になる。基本的にプレイヤーはそのグループがログインする時の場所がある。そこに今後色々と追加していく予定。 + +## v0.2 + +自分の中で大体の世界観が定まってきたように思う。この世界では一人の人間に一匹の動物(生き物)が大切に世話をされて一緒に暮らしている。 + +自然界は大変なので優しい人間に保護されながら生きるほうが動物にとっても嬉しいはずだ。そのような価値観から構築される。 + +さて、しかし、このようなことはうまくいくだろうかと考えた場合、いくつかの根本的な問題がある。一つは悪い心を持った人間の存在だ。 + +この問題を回避するには心を読み取りあらかじめどのような人間化を察知する必要がある。その装置が開発され、社会に組み込まれている。だがその実態は誰も知らないし、知らされていない。というのがこの世界であり、このゲームの物語になる。 + +主人公はなんの疑問も持たずに一匹の動物と暮らしているが、そこでこの社会に疑問を持つような事件が発生する。やがてこのシステムの真実と裏社会のことを知っていく。 + +しかし、シリアスになりすぎないように、かつシンプルな構成(悪の組織に立ち向かうみたいな)にすることも大切。 + +そして、最近思うところがあって、少年ジャンプでもアニメでもゲームでも残酷な物語ばかりが流行るようになってきたなということ。ドラゴンボールみたいな根本的な部分で明るい雰囲気のあるの作品はあまりみかけなくなったなあと感じている。だからこそやる価値があると思っている。 + + +## v0.1 + +1. 日常がある。日常が何者かによって破壊される。気がつくと見知らぬ土地。 +2. しばらく野宿(生活)のようなこと。孤独と不安。 +3. 魔物が襲ってくる。戦う。ピンチ。 +4. 見知らぬ誰かに助けられる。協力。 +5. この世界のことがわかってくる。 + +- 各キャラクターモデルは動物モデルから人間モデル、人間モデルから神性モデルに進化していくパターン +- 動物とペアに暮らす人間パターン +- 最終ボス、コメントがゲームに反映される、アイコンが球体に取り込まれていく演出 + + +## はじめの一歩 + +配信者兼プレイヤーを確立すると良さそうに感じる。その2人がゲーム内で交流しながら配信する形がいいかもしれない。 + +基本的に一人で喋るのはきつい。そして、vtuberは関係性が重要。つまり、人間関係を見せるところがヒットしていると予想。また、ゲームをリリースしたとして宣伝が必要になる。そのような理由から。 + +ゲームを作るとき、最初から全部のマップを作るのではなく、例えば小さなところを完璧に作っていく事から始める。 + +初期プレイヤーを限定するのはなぜか。自分のモデルを読み込めないのかという疑問について考えを話す。 + +[vroid sdk](https://hub.vroid.com/developer/download-sdk)を使うとue5でも自分のvrmを読み込んでプレイできるゲームを作れると思う。しかし、この形式は採用しない。 + +aiverseでは統一感のあるモデルを採用する。 + +配信者がある程度確立できたらゲームは一般プレイヤーに開放し、ガチャで配信者が使用しているモデルを使うことができるようにする。ただし、8凸と神性化(見た目が若干変化)は配信プレイヤーに限定される。 + +## ガチャの仕様 + +ガチャはシンプルに、かつ継続できるシステムを構築したいと思っています。 + +具体的には、PTは3(キャラ)を考えていてボタンを押すと交代します。そして、それ以上のキャラを手持ちに加える事はできません。キャラをアイテムに例えるなら3つのアイテムでボックスがいっぱいになります。新しいキャラを加えるには一つのキャラを捨てなければいけません。 + +この場合、ガチャで手に入れたキャラはどうなるのでしょう。再びPTに加えたい場合、またピックアップされたときにそのキャラを引かなければならない。ただし、凸数はアカウントに保存されています。つまり、「1凸のキャラを捨てた、再び引いた」という状況では、再び引いたとき2凸になります。 + +ピックアップ時は凸が増え新たな能力が追加されていることがあります。上限7凸だったものが8凸になったりなどです。つまり、引いたキャラを捨てても全損するわけではありません。 + +この仕組みが目指すものは2つあります。 + +- 配信者、プレイヤーの個性が出るようにしたい +- 古いキャラも継続的に引いてほしい + +まず、プレイヤーの個性が出るようにしたい件について。PTが3キャラに固定されることで流行りのキャラばかりが使用される状況を改善できます。色々なキャラを気分に合わせて使えるわけではないからです。1シーズンにつき手持ちは3キャラ。意図的に引けるとしてもピックアップ中の1キャラのみです。 + +そして、古いキャラが再びピックアップされたとき、再び引いて使ってほしいという思いがあります。これは継続的な収益性にも繋がりますが、古いキャラを活かし続ける意味もあります。この際、凸を進められるので新しい体験ができるでしょう。 + +## ゲームの難易度 + +ゲームの難易度はすごく簡単にしようと思う。つまり、おじいちゃん、おばあちゃんでも理解できて、ポチポチボタンを押してればできる。そういったレベルがいいと思う。これは、pokemongoが参考になる。やることが明白で、簡単な操作で達成できる。それが重要。 + +特にこだわらなければならないのは操作性の気持ちよさだと思う。爽快感。バトルには音楽とボタン入力を入れようと思う。まず音楽が流れる。時を止める。そして、タイミングとボタン。 + +```sh +♪-------->------◯----------------- +``` + +完全一致を見るのではなく範囲内で点数をつける。 + +```sh +♪-------->---[---◯---]-------------- + +[10-100-10] +``` + +でも簡単なだけのゲームかというとそうではなく、世界レベルというものが用意されていて、これはプレイヤーが意図的に操作しないと上昇しない系のレベル。勝手に上げられることはない。報酬もない。クリアするとバッジがつく程度。けど、難易度が劇的に上がる。あるいはエンドコンテンツとして難易度が高いものを一つ用意する。 + +難易度は敵の強さだけ。探索において高度な仕掛けは用意しない。先程も言ったが分かりづらいのはだめ。フィールドには宝箱があってボタンを押すと開けられるもの、敵がでてきて倒すもの、この2つを用意する。仕掛けを増やしてはいけない。 + +増やすなら物語、漫画のコマ、ギャグを増やそう。 + +## バトルシステム + +色々考えている。今のところ一発当てれば敵もこっちも死ぬというシステムを考えている。 + +ただし、攻撃には2種類あって、一つはダメージなしの反動(のけぞり)である。 + +そして、確率を入れると面白いかもしれない。また、ヒットストップのような演出も重要だと思う。ダメージは%で表示し、攻撃時にその確率で死ぬか生きるかが処理される。 + +## ゲームオーバーについて + +今のところ考えている適当なゲームシステム、特にゲームオーバーについて書く。 + +まずゲームオーバーは時間の無駄ではないかということと、いくらでもやり直しができてしまう印象を与えてしまう。ストーリーでも死んだのに生き返って話をしている。そのへんの齟齬と無駄があって、ゲームオーバーはなし、死なないことにしたほうがいいのではないかと思っている。ゲームシステム自体は簡単に攻撃を受けると%が溜まっていき、それは確率で死ぬか生きるかを決めるものとなる。つまり、一発でも受ければ死ぬ可能性はあるわけだ。これは敵も同じである。ただし、プレイヤーの死の演出はなしにして、ノックバックし、受け身の段階で時間を止める。そこで続けるか選択できるようにする。 + +しかし、これだと何度死んでもデメリットはなく、いくらでもやり直しができてしまうと思われるかもしれない。つまり、失敗に対してのダメージがないのだ。これはいいことでもあれば悪いことでもあるが、失敗に対してのダメージ軽減や時間短縮を狙ったものだ。 + +ただし、死んだ回数は記録され、uiに表示することにしたいと思っている。これはプレイヤースキルを示す指標にもなり、取り返しがつかない要素でもある。 + +このゲームのテーマの一つには取り返しがつかない要素を入れることがある。プレイヤーは選択をし、その選択は変更不可能となる。 + +しかし、螺旋(エンドコンテンツ)のような限られた空間での戦闘では記録が残らないステージを用意してもいいかもしれないと思う。いや、これに関して例外を認めるべきではないかもしれないが、何度もチャレンジしたくない実験できないと思われるのもあれなので難しいところ。しかし、一つはカウントされない螺旋のような場所は必要だと思う。 + +とはいえ、目指すべきところは「ゲーム自体はやさしい。けど、自分の考え方次第で修羅となる」である。 + +どんな年齢層の人でも簡単に楽しくプレイできる反面、取り返しがつかないシビアな要素や数字は表示され、自己満足の世界ではあるが、とてつもなくシビアであり、それはやり直しできず、取り返しがつかない要素として現実とリンクし蓄積されていく。これは現実と同じだ。死の演出がないのもそれは取り返しがつかないものだからだ。ゲームだから死んでもやり直せるという印象を与えるのは良くない。だからこのゲームではゲームオーバーはなく、受け身からのダメージリセットからの停止で続けるか選択でき、その時点から再度始められる仕様にする。 + +また、このゲームでは残虐な描写は避ける。敵を倒して爆発四散したとしよう。そこでストーリー画面に入るが、敵は生きていて逃げていく演出を必ず入れること。つまり、敵が死んだエフェクトは演出なのだ、ということを強く印象付ける。このゲーム内で死ぬものはいない。そのような世界なのだ。 + +## ランダム性 + +あらゆる要素にランダム性を入れることを考えている。それは移動だったり、バトルだったり、ドロップアイテムだったり。 + +例えば、バトルのランダム性について見ていこう。敵は2種類いて、ノーマルとボスである。彼らはステータスを持たない。なぜならランダム性があるので必要ない。ある程度は省略できると考えている。ノーマルは攻撃1(回)に対して30%、それはこちらも同じ条件で受ける。必殺技は80%である。ボスは攻撃1に対して1%、必殺技は3%とする。こちらは50%、必殺技は90%を受ける。すべての敵は共通したダメージソースとなる。異なるのはモーション、つまり動きのみである。 + +キャラのステータスも移動速度などのモーションに関わるものとする。武器に関しては+1%(特定のモーションに対して)とかにする。この辺はスタイリッシュと爽快感を重視したいと思う。 + +バトルと音楽の組み合わせに関して。必殺技は音楽の始まりを意味する。つまり、BGMをプレイヤーが制御できるようにしたい。ただBGMを鳴らすだけではなく、時間の流れをスローにしてBGMを流し、その音楽に合わせてボタンを入力する。 + +## ボス戦 + +ステージ(背景などに動きのあるステージ)との融合や登場シーン、音楽、緊張感が重要だと思った。 + +勝利時のポーズなどはあったほうがいいね。モーションとか。 + +# syuiの思考 + +適当に思ったこと。はじまりはいつもそこから。 + +## 今あるものでは厳しい + +例えば、ゲームを作る場合、原神と似たようなものを作っても厳しいと思う。同じかそれ以上の品質であっても厳しい。なぜなら、すでに原神がある。 + +例えば、vtuberを始める場合、vtuberは厳しいと思う。vtuberとして恩恵を受けるのは、そのような概念が存在しなかった当時から取り組んでいた人達ということになる。一番あるいは唯一の方法はlololiveに入ること。それ以外でvtuberとして成功するのは難しいと思う。 + +何が言いたいのかというと、今流行っているものに参入するには既に時遅し。 + +本来やりたかったことでもない場合も多い。どうせなら他のことをやろう。 + +## 規格と創作 + +創作者は往々にして規格を作りたがらない。めんどくさいのである。また、作ったとしてもまともなものがでてこない可能性も高い。一般人は往々にして規格ばかりを作りたがる。ルールを作るだけなら簡単なことだ。しかし、どちらも問題がある。チームが機能するには、この両者がうまくマッチする必要がある。つまり、規格と創作、ものとルールが良いものでなければならない。 + +自分にないものを補うため、自分ではできないことをやってもらうための規格を作っている。他の人達の自由な発想が必要。 + +## blogからyoutubeへ + +人々はどこから情報を得るのだろう。それは時代とともに変化する。 + +昔、人は本から情報を得ていた。だから本には価値があったし、出版社、ついで書店の価値は高かった。だが、インターネットが普及すると出版社や本や新聞の会社は厳しくなった。 + +blogが流行った。誰でも情報を手軽に発信しはじめ、ブロガーなるものが登場する。 + +しかし、ブロガーの登場以降、検索で欲しい情報にたどり着けない状況になった。検索上位に表示されるのはいつも情報商材や広告記事ばかりになり、そういった記事は業者が雇うライターが適当に書いているようなものばかりになった。 + +人々はblogやTVからyoutubeに移行しはじめ、やがてユーチューバーなるものが登場する。 + +そして今ではyoutubeの中でも動画よりライブが中心になっている。いくらでも編集できる動画よりライブのほうが面白いからだ。 + +今後、人はどこから情報を得るようになるのだろう。 + +例えば、youtubeからの収益配分は今後激減することが予想される。これはblog時代と同じで確実に起こると思う。 + +## twitterの限界 + +twitterには限界がある。twitterだけでなく今までのあらゆるサービスは根本的に作り直す必要があるかもしれません。そんな話をしていきます。 + +限界の一つはid(name)に関することだ。これから生まれてくる新しい人達や新しい会社がたくさんある。そういう人達はtwitterにアカウントを作らないと思う。使いたい名前が取れないのだ。 + +名前なんてどうでもいいだろうと考える人達も多いことは知っているが、賢い人達はそのようには考えない可能性も高い。例えば、大創業者が作った社名は意味が込められている。 + +そして、新しい人達が入ってこないとどうなるか。彼らは常に流行を生み出す潮流なので、彼らが入ってこないと成長は見込めない。 + +したがって、どちらにせよ今後のインターネットはこの問題が解決される方向へ進むだろうと考えている。 + +この解決策として採用されるのがdomainと分散化になると思う。人間はいつの時代も数字ではなく名前を使うものです。例えば、プログラミング言語は名前を数字に変換するものです。なぜなら、名前のほうが人間にとって読み書きしやすいからです。 + +したがって、名前は重要です。今までのサービスはこの名前という根本的な部分に限界があります。 + +確かに、表面上、この問題を解決することはできるでしょう。しかし、これは納得の問題でもあります。人々が本当に納得できる解決策としては、根本的な部分を作り変えるしかないのです。 + +今後、人々が使う名前は、domain形式になり、なぜなら各サービスごとの名前が枯渇しているからという理由と、名前をdomain形式にしないとサービス外と繋がれない。やり取りできないという理由からです。そして、未来では一つのアカウントで複数のサービスを使うのが一般的な形式に変化していくだろうと予測しています。 + +## AIとGPU + +分散snsが登場し始めた頃はAI界隈も活発化し始めた時期でした。具体的には2015, 2016あたりと記憶しています。ですが、当時はそこまで世間に浸透しておらず、知らなかった人も多かったのではないかと思います。 + +ここからAIの話を少しだけします。まずはcpuとgpuの話からする必要があります。 + +cpuはイメージで例えるならLV100のスーパーヒーローが一人いて、敵をやっつけ、敵をやっつけると計算が終了します。gpuはスーパーヒーローはいませんがたくさんのLV1の兵士がいるイメージ。一人ひとりは弱く強力な敵を倒せませんが、同時に行動するのでたくさんの敵に対処できます。 + +今まではcpuのほうが効率的でした。なぜなら敵が少なく強かったからです。その敵を倒しさえすれば計算は終わりました。そういった問題が多かった。 + +ですが、時代が変わりました。それに伴ってAIが登場します。AIはcpuではなくgpuで動いています。 + +このことからgpuを作っているnvidiaが時価総額世界一に到達しました。 + +これは偶然ではありません。既に限界が見えていたものが大きく移り変わろうとしています。 + +並列(分散)時代の到来です。私はそのように予測します。 + +## サービスのセキュリティ + +今後は主にsnsのdomain認証がサービスのセキュリティに利用されるのではないかと思ってる。 + +snsはもとから好ましくないユーザーのアカウントを削除する体制を整えているので、それとdomain認証を組み合わせることで、ほぼ確実にサービスアカウントのセキュリティ対策になる。 + +atproto(bluesky)はその点で相当の利点があり、他のものより優れている。未来を見据えた設計がなされており、様々な問題を解決できると思う。 + +今現在、各社はそれぞれに攻撃者やスパマー、なりすましの排除をモデレーターを雇って取り組んでいる段階だ。 + +しかし、攻撃者やスパマーは同じ組織や人物であることも多く、彼らが複数のサービスをターゲットにしているだけである。 + +とすれば、各社は同じことをして苦労しているので無駄が多い。これを誰か他の人に任せて、その結果を共有したほうが合理的だ。例えば、利用ユーザーをblueskyアカウントに限定すればサービスは相当安全になるはず。逆にblueskyのモデレートが気に入らなければ自分たちでpdsを立ててモデレーションすればいい。atprotoにはそのためのツール(ozone)が既にある。もしくは自分たちにあったpdsを見つけそれを利用すればいい。 + +## 精神面重視 + +主に精神面や心理面を重視する。他の要素はほとんど考慮しない。そもそもゲームやインターネットとはそういうもの。 + +この世界は意識によって作られている。私が作ったのでこうなっている。 + +自分自身であれ。 + +配信者に求める資質や価値観は以下の通り。 + +- 想い(物語と規格) +- 喜び(嬉しいという感情を持っている) +- 好き(嫌なことも笑い話にする) + +好きなものは多ければ多いほど良い。たくさんの喜びを持つ。嫌なことも笑い話に変えるポジティブさ。そんなところかな。 + +これは基本的に配信を見て感じた部分。例えば、すぐに嫌味や悪口を言ったり喧嘩ばかりする人の配信をみたいと思う人はそんないないと思う。だから基本的に採用がうまく行っている事務所ほど本質的に精神面を重視してうまくいっているのだと思う。人柄という表現では伝わりづらいかもしれない。でもあるvtuberが言っていた。hololiveは優しい人ばかりだと。おそらく、そういうことなのだろう。 + +これは、「正しいのは絶対に自分で真実はこちらにあるのだから否定や批判は正当なことであり、自分の評論は正しいし、正当な権利である。相手が間違っている。悪いのはあいつ。あの人はここがダメ、なっていない。小学生がわかることもわからないんだ。陰謀論に洗脳されている」あるいは「自分が不遇なのは巨大な陰謀が張り巡らされているせいであり、宇宙人が人間の精神を低下させる装置を置いたんだ。自分はネットで真実を見つけた。自分だけは装置の影響を受けないのだ」とかそういうことではない。真実がどうとか、正しいのはどちらだとか、そういうことではないのです。態度の問題であり、心の問題です。 + +プライドが高く見栄っ張りで威張り散らしているvtuberはあまり見かけません。むしろその逆の印象を持っています。実際、彼女らの実力はとてつもない領域に達しています。にも関わらず一般人から見てそんな風に見えませんよね。そういうところです。 + +採用がうまく行っている事務所ほどそういった人の本質に関わる部分を最初に見抜いている、あるいはうまいのだと思います。本質的に嫌な人間を入れてはいけない。そのようなルールでもあるのではないかな。いくら才能がありテストでいい点を取り技術力があり本を読んでいようと関係ありません。これらのことはあまり重要ではないのです。 + +## 批評家に注意 + +世の中には色んな人がいる。snsでずっと嫌なことや否定や批判や批評を行うタイプの人も多いけど、彼らの言葉は基本的に気にする必要がないと思っています。なぜこのような事を書くのかというと、もし配信してもらうことを考えているなら、このことは避けては通れないことだからです。 + +とはいえ、批評家タイプの人が間違っているからではなく、世の中にあるものはすべて正しいです。現実は正しいから、彼らが存在するのもまた正しい。その主張も正しい。 + +ただ、正しいだけです。 + +どのような物事にも完璧はなく、どのようなことでも批判しようと思えばできてしまう。言い訳はいくらでもできるし、いちゃもんを付けるのは簡単なのです。批評家タイプの人というのは生まれつきによるところが大きい。なにかを見たり聞いたりしたときの反射行動として否定する。別に間違っているわけじゃないけど、彼らの言うことは最初から決まっていたりする。まず否定感情があってそこから始まるわけだから。 + +自分に悪いところがあったなら改善すべきところは改善したらいいと思う。けど最初に人間性を見て、悪い人の言うことはあまり気にしないようにしないといけない。あらゆる物事を基本否定するタイプの人も世の中にはたくさんいる。彼らにしてあげられることは少ないのです。 + +ですが「あなたは嫌な人だから間違っている」ではなく「あなたも正しい」と言える優しさと強さを持とう。 + +負けるなよ自分に。上のような感情は誰にでもある。 + +どのような人間になるかは自分が決めろ。 + +## マーケットを意識 + +同じマーケット内で奪い合うのではなくて、他のマーケットにいた人達を引っ張ってくるという感覚が近いと思う。 + +例えば、私が最初にプレイしたスマホゲームはポケモンgoだった。どんな年齢の人でも気軽に簡単にプレイできた。こういった人達が新しくゲームに参加した。つまり、もともとゲームが好きだった人ではなく、現実にいた人達を連れてきたと言える。hololiveはネットのアイドルということになっているけど、あれは現代のアイドルだと思う。現実のライブで盛り上がっているしファンも多い。今までアイドルに興味がなかった人達が参入した。何がいいかというと年齢や容姿関係なく面白ければアイドルになれること。年齢や容姿より内面のほうが重要で、日常配信からその人を判断できる。 + +マーケットは常に現実にある。 + +つまり、(1)興味がなかった人、(2)他分野にいた人を連れてくるといい。そうするとどんなものを作ればいいのか見えてくる。 + +分かる人にだけわかったらいいというのではだめ。どんな人でも楽しめるものを目指さないと。ただし、多様性は無視していい。せいぜい気にしても「すべての年齢の人間を対象にする」くらい。 + +## なぜtwitterをxと言わないのか + +xが何を指すのかわからないからというのが主な理由。かといってx(旧twitter)と書くのもめんどい。言葉の目的は言いたいことを相手に伝えること。よってtwitterで伝わるので私はそうしてる。逆にxでは伝わらない場合がある。 + +少し個人的事情も書いておく。 + +1. 最初からxというサービスで、そこから名前の力を積み上げていたなら問題ないが、xの場合はtwitterという名前を奪う形でxに命名を移行している +2. それまで私はxorg(またはlinuxのGUI)のことをxと言うことが多かった。どうしてもxと聞くとxorgを思い浮かべてしまう +3. 短すぎる名前は危険でxは特に危ない。変数やxxxなどの当て字に使用することがある + +`x.com`は好きなのか?と聞かれると、私は短い名前やdomainが好きなので`x.com`は好き。だからそのうちxと呼び出すかも。とはいえtwitterで通じるうちはtwitterだね。 + +## ueは動かない + +ue(unreal engine), asset, pluginなどは基本的には動きません。例えば、どこかに手順が書いてあったとして、その手順通りすんなり動くことは稀ですね。公式docsでも同じです。これはueの良いところでもあれば悪いところでもあります。 + +私のケースだと、私は最初に触ったのが5.3でした。数ヶ月間は5.3でゲームを作っていたわけですが、5.4にupdateしてみると今まで作ってきたものが全部動かなくなりました。なので、5.4では全部作り直しています。ueはそういうものだと理解しなければなりません。これは最初に理解しておいたほうがよいことでもあります。 + +しかし、そういった情報はあまりなく、そもそも日本語の情報は少ないです。情報が少ない理由としては動かないのだと思います。たとえ数ヶ月間は動いた手順でも数カ月後には動かなくなっていますよね。そのような理由から解説する人が少ないのだと思います。 + +ueとどう向き合えばいいのか。それは、ueは基本的に動かないということを理解することです。色々なものが動かなくてバグも多く、しかし、それはデフォルトです。 + +そこには「動かせるか、動かせないか」しかありません。動かないものは自分なりに動かしていくしかないのです。 + +ということでueへの向き合い方の話でした。 + +3Dゲーム自体がとんでもなく複雑なものなので、ゲームエンジンはどうしてもバグが多くなる。ueは悪くない。asset, pluginを作っている人も誰も悪くない。でも動かない。動かないものは動かせるしかない。 + +## ue vs unity + +unityは比較的安定していて情報が多く、assetやツールも豊富です。たいていは動くと思います。 + +反対にueは大抵の場合、動きません。動かないので情報も少なく、採用している企業や個人は少数になります。特に日本ではそのように感じます。 + +動かないので多くの初心者は「なんか動かない、よくわからない」となってやめてしまうのだと思います。 + +やはり、数ヶ月触ってきて思うのはueはおすすめしづらい。客観的に見てunityのほうがおすすめだと考えられます。 + +しかし、ueのバグが多く、せっかく作ったものが数ヶ月で動かなくなる環境というのは欠点でもあり利点でもある。 + +それだけupdateが速いということ。進化が速ければ速いほどバグは多くなるものです。どちらが合うかは人それぞれ。 + +私は最初にueを触ったときの感動を覚えていて、これからもueを触っていきたいと思います。ただし、ueはかなり大変です。ueはcrashしすぎるのでデータが消えます。気をつけましょう。 + +## 引っ張られる + +私達は様々な重力の影響を受けています。ゲーム制作に関して言うと、ゲームエンジンの影響を受けている。今回は主に、その重力的影響について解説します。 + +重力的影響と言いましたが、この表現はsyuiの価値観に由来します。 + +まず重力は自然界で最も弱い力の作用のこと。その現実創造あるいは現実的影響について話します。 + +ueはバグが多く壊れやすく安定していません。一方で先駆的でグラフィックが綺麗な特徴があります。それはueが掲げる理念や信念に基づくものなのでしょう。 + +ueのassetやplugin開発者は、意図せずその影響に引っ張られています。 + +重力がこの世界で最も弱い力であるにも関わらず、現在の宇宙環境を構築しているように、その力は小さいものだけど、時間経過とともに積み重なって現代のゲーム環境を構築しています。 + +私は、最初にcity sampleという最先端技術を集めたassetを使うことにしました。このassetに色々と追加していく方針を採用したのです。 + +なぜかというと、少なからずそのクオリティに引っ張られることになるからです。 + +一番最初に難易度が高く負荷が高く完成度が高いものを置くと、新たに作るものはそれに引っ張られてゆきます。つまり、自然とそれに合わせるようになるのです。 + +もちろん、これにはリスクがあります。そして、最大のリスクはいつも心理面にもたらされます。 + +具体的に説明しましょう。これは、人間の言葉で「自信」と表現されます。しかし、私は「自信」とは少し違うなと思っていて「心の強さ」と表現することにしましょう。 + +難易度が高いことに挑戦することは失敗する可能性も高まることを意味します。そして、失敗すると心理強度を失ってゆきます。 + +わかりやすく言うと、失敗すると自信を失い、成功すると自信がつくということです。 + +できるまでやめないこと、とりあえず完成させることが大切です。 + +だからこそ、もう一方のやり方も非常におすすめです。小さなこと、簡単なことからはじめるやり方です。 + +どちらが合うのかは人それぞれ。私に関して言うと両方の組み合わせです。 + +小さなところから完璧に作ることを目指しながらも、大本は最先端技術のassetを使用し、その引力に引っ張られています。 + +## なぜ小文字を使うのか + +いくつかの理由があります。 + +- 製品やサービスによってどこが大文字でどこが小文字かわからない。例えば、GithubなのかGitHubなのか。この場合は後者が正解だけど個別に判断するのも面倒 +- codeやurl、ほとんどの文章はローマ字入力の小文字で書いている。なにかの名前をコピーするときはurlからコピーしていて大抵小文字 +- 大文字と小文字が組み合わさると判断が難しい場合がある。例えば、I(アイ)なのかl(エル)なのか。全部小文字で書かれているなら、これはl(エル)だと判断しやすいですよね + +全部小文字なのは見る人によっては見づらいかもしれませんね。 + +ただ、大文字は変換が面倒であるにも関わらず、間違いも多く、判断も難しい。 + +それならわざわざ大文字変換を使わず全部小文字で書いちゃえという理由から小文字を使うようにしています。というより大文字変換はしません。 + +また、文章を見れば「小文字の人だ」とわかるので、そういった特徴が出るのもいいものだと今更ながらそう思っています。 + +yuiという物語は最も小さい物質の探求です。その意味で小さい文字を使うのは理にかなっていると言えるでしょう。まあこのへんは単なるsyuiの個性です。 + +ただし、例外もあってファイルパス等の場合は大文字を使用します。 + +## yuiとai + +文字の話の続きになります。なぜyuiはaiなのか。なぜ`i`で終わるのか、なぜ小文字を使うのかです。 + +|`y`|`u`|`i`|| +|---|---|---|---| +||||`a`| +||||`i`| + +私が好きな文字と数字はa, i, o, 1, 0です。この中で最も強いのは`a`と`i`かな。数字と組み合わせるなら`o1`とか強いですよ。 + +0はこの世界を意味し、1は存在を意味する。aはすべてを意味する。oは惑星、iは人間みたいな感じ。pcの電源ボタンも1と0、もしくはi(nput), o(utput)の組み合わせ。a(ll)はすべて。 + +## なぜself-hostするのか + +普通にyoutubeやtwitterを使った方がいいのでは。youtubeとtwitterを使ってvtuberをやればいい。そう考える人も多いと思う。 + +これはもっともな意見で、既に有名な人が使う分にはいいと思う。けど、それ以外の人は他の場所を考えたほうがいいと思う。 + +「みんなやってることをやる」というのは、その人の経験値にならない。いや、なるかもしれないけど、その価値は低いと思う。 + +そもそもyoutubeでやろうと他の場所でやろうと再生数はたいして変わらない。 + +だったらいろんな世界を知り、いろんなことをしたほうが面白いでしょ。例えば、プログラムを書く人なら、自分でyoutubeのようなものを作って、そこで配信したほうがいい経験になると思う。 + +とはいえ、youtubeを研究するのはいいことで、現時点ではyoutubeしかないと思う。youtubeは今のところ稼げる場所なのだと思う。しかし、youtube以外で稼げる場所、方法はあるのかを考えていかないとね。 + +例えば、youtuberやvtuberになりたいと考える人が増えている。一般的にそれをどう感じるだろう。 + +おそらく、「やめておいたほうがいいんじゃない」ではないだろうか。 + +それをやっている人も自分が運やタイミングが良かったことは理解していて、今参入しても厳しいことはわかっている。だからおすすめされない事が多いように思う。 + +GAFAが流行ったとき、プログラマになりたいという人がたくさん増えた。 + +多くはそれが楽して稼げるように見えたのだと思う。そういう人達はコンピュータが好きというわけではなく、やりたいことなんてあまりなかったんじゃないかな。 + +やりたいことをやれ。 + +どうせなら好きなことをやったほうが可能性は高いと思う。そのうち誰もやってないことをやるようになって、そうしたら発信する場所は割とどこでもいいんだと思う。 + +## 劇場について + +> 今のvtuberの形態は劇場型を採用している。劇場型というのは、コラボみたいなものをイメージするとわかりやすい。 +> +> たくさんの有名人が集まってなにかやるんだけど、視聴者はそれを求めている。 +> +> しかし、劇場型には、いくつか弊害もあって、多くの視聴者はその関係性、つまり、有名人と有名人の関係性、あるいは、どの有名人が誰に声をかけたかみたいなもので、個々人を評価していると思う。最初にそういうものがあって、個々のvtuberはそこからはじまる。そこから生まれたのだから、劇場なしでは生き残れないのではないかという予測が生まれる。 +> +>では将来的に劇場がなくなるかというと、そうではない。最終的に「劇場」は「個々人」の人気を押し上げたあと、「個々人」をすべて吸い上げる流れになるかもしれない。そのとき、個々のvtuberはいくらでも替えがきくものになっていると思う。誰がいなくなっても困らない。そんな状況。 +> +>なぜなら、視聴者は「劇場」を求め、劇場を評価していて、劇場をオモシロイと思っているからだと思う。つまり、評価はそこから始まり、そこに終結する。 + +...という予測を話している人がいたので記録しておこう。 + +そういえば、世の中を見ていると、流行の移り変わりは本当に早くて、ちょっと前によく見かけたものが、いつの間にか見かけなくなったりする。 + +いつの世も生き残っているものは、借り物の姿、借り物のプラットフォームの上で、借り物のゲームの上で繰り広げられる劇場ではなく、「プラットフォームそのもの」だったり、「自分たちで作り上げたゲームや姿」だったりする。それを踏まえて自分の考えも更新していかなければならないな。 + +そういえば私もvtuberをここでたびたび話題にしているけど、実際に配信を見ること自体は少なくて、主にFF10をプレイしているのを見てた。それ以外はあんまり見てなかった。 + +やっぱり、自分の中ではFF10が占める割合のほうが大きかったのかもしれない。でも配信は面白かったし、配信者はすごいと思った。 + +ただ、その時はFF10をプレイしている配信者を片っ端から見て回っており、特に誰が配信しているとかは気にしてなかった。 + +これは言い換えると「有名配信者なら誰でも良かった」と言えるのかもしれない。もしプラットフォームがなかったら、もし借りものの姿を取り上げられたら、もしゲームがなかったら、vtuberは活動を続けられていたか私にはわからない。つまり、私が考えるべきところはそのへんになりそう。 + +その人の姿はその人のものとし、ゲームを作り、そして、プラットフォーム(主に配信と収益)を自身で賄えるようにするということ。これについては以下の項目で考えることにする。要点だけまとめる。 + +- AI : 良い心を持つ人を見つける +- atproto : 現実をゲームに反映 +- bitcoin : ゲーム売上の一部を配信者で還元 + +いくつかの前提条件がある。まずゲームが面白いこと。現実とリンクしていること。良い魂を持つ人に配信をしてもらうこと。プレイヤー自身を主人公にすべく努力すること。 + +## ポケモンとFFの違い + +ポケモンは既に平和な社会システムがあって、その中にも悪い人間はいて、主人公が悪の組織を潰し、その世界の栄光(最強)である四天王を倒し、チャンピオンに挑むという物語になっていて、チャンピオンは既に旅の途中で何度か出会っていた相手になることが多い。これは非常にわかりやすくシンプルな構成ではあるものの強力だと思う。 + +FF(ここではFF10)は体制への反転がテーマになっていて、既に社会システムがあり、主人公は外からやってきて、その仕組を知る。そして、そのシステムをぶち壊して体制を覆す。これには驚きや感動があり、物語的には複雑で分かりづらいけど非常に有効だと思う。 + +私は、平和な物語が好きで、残虐なゲームは嫌い。任天堂が作るような平和な世界観のゲームが好きなので、基本的には平和な世界で旅をする物語にしたい。でも、驚きや感動を入れたいので、一部で体制への反抗を入れてもいいかもしれないと思っている。 + +## 現実と個人の結びつき + +システム的にいかにして現実と個人の結びつきを実現するかだと思う。 + +- 世の中は良くなるにつれて平坦になる。かつての人類は王族が支配するピラミッドがあって急激なものだったが、今はなだらかに +- 法の支配について。すべての人間は法のもとに平等であるという理念。どれほど権力を持った人間であろうと人を殺せば裁かれるというような概念。近代戦争も通常ならこの概念で人類的必要最小限の損害で対処可能。本来、法の支配の概念を適用するなら、ある国とある国の戦争はその国の指揮官並び数十名の権力者を相手国に引き渡し裁判を受けさせる条件のもと和平を実現するのが最も合理的だと思う。第三次世界大戦の引き金になってまで擁護すべき人間はいない。例えば、無実の人間が百万人犠牲になり地域が不安定化するか、罪を犯した数十人の権力者が裁判を受けるか、人類にとってどちらがマシかという話でしかない。この程度の判断や提案くらい誰かやらないのかなと個人的には思っていて、その実行は速ければ速いほど損失は少ないだろう +- 独裁制は人類のシステム的欠陥。確かにその独裁者で最初の数年はいい結果に見えるかもしれない。しかし、その独裁者が歳を取って死にかけ寸前のときに何をするかわからない。その結果をすべて国民ないし人類が背負うことになるため +- AIの登場で仮に世の中が良くなる場合、この平坦化の流れはさらに加速すると思われる。そもそも技術というものは、今までの特権をなくしてしまう効果がある +- 人気者をさらに人気にするようなシステムやプラットフォームは衰退していくと思う。見つけていかないといけない。作り出すというかね。 + +方向性としてはこの方向性に沿ったシステムを形作っていかなければ、時代に合わなくなる可能性が高いと考えられる。 + +以下、具体案をまとめる。 + +1. snsの投稿やlikeをゲームのキャラ性能に反映する(得た数ではなく与えた数で計測する) +2. プレイヤーのsnsから心理診断システムをAIで構築して評価 +3. フォロワー数ではなくフォロー数で判断し、フォロワー数が多くフォロー数の極端に少ない人物を除外。これについては要検討だが、新しい人や物事への興味がある人物かを見る。停滞ではなく変化し成長する可能性のある心理を探している。ただし、短期間水増しムーブはフォロー数が極端に少ない人物と同等の評価を行う +4. 1日に1回、ランダムで一人が選ばれる。ゲームプレイを配信でき、特別なキャラを操作できる。クリア報酬が出る。報酬はゲーム売上の数%をbitcoinで支払われ、一度でも選ばれた人達と折半となる。本人は自由に出し入れできる。自分の口座に移せるし、買い物もできる。しかし管理者側の所有で、自由に金額を移動できる権限が与えられる形式を取る。選ばれる人は重複させない。初期プレイヤーほど当たる確率は少し上がる。そのように設計する + +とはいえ根本的な部分が重要だ。それをまとめると以下になる。 + +- 良い心を持った人を見つける(AIの活用もありうる) +- 誰にでもチャンスがある +- 現実をゲームに反映する +- プレイヤー個々人の特別な体験 +- プレイヤー個々人のネット世界(仮想世界)での姿形を作る + +## 未来のインターネット + +インターネットは`http`から`at`へ。これはatprotoの仕様を見れば今までのインターネットの根幹を覆すことも視野に入れて設計されているなと感じる。 + +atは名前もいいので今後、この流れになる可能性もあると思う。それについて書いていく。 + +```sh +# https://at.syu.is/at/syui.ai +# https://atproto-browser.vercel.app/at/syui.ai +at://syui.ai +``` + +`at://syui.ai`は`@syui.ai`と表すこともできる。`at = @`なんでわかりやすいしシンプル。 + +そして、もう一つはインターネット上の名前空間の限界が理由。サービスはこれから更にユーザーフレンドリーへと変化していかなければならない。ユーザーはサービスが終了しても自身のアイディンティティが残るものを選択する。そのようになっていく。 + +ユーザーは活動してきたものを全部無駄にしたくないはずで「サービスが終了したらおしまいです」より「サービスが終了しても大丈夫です」を選択したい。今後、何十年も活動していくならなおさらで、開発者からその重要性に気づき移動している。やがては一般に波及していく。 + +urlは検索エンジンと強く結びついている。直接urlを入力する人はいない。しかし、少し前から検索エンジンが機能しなくなっている。様々な業者が金儲けのために荒らしているので検索上位は広告だらけで怪しいものになっている。 + +つまり、これから人々はどのように信憑性のある情報にアクセスしていくようになるのだろうか、ということだ。 + +その一つが人であり、個人だと私は思っている。 + +atは個人のアイディンティティを保持するとともに、個人の活動履歴を保存する。 + +これからのインターネットはatを検索したり、信用性の高いアカウントやat-urlを表示する検索エンジンのようなものが開発されていくだろう。 + +そうなるともはや直接`at://`を入力するより検索して情報にアクセスするのが一般的になるかもしれない。ホームページを作ろうではなく、atでアカウントを作ろうということになる。この流れは近年からあり、今の若い人はホームページやブログなんか作らずにどこかのサービスでアカウントを作るのだろう。 + +とはいえ、atはサービスの枠を超えたprotocolであり、httpを置き換える可能性すら秘めている。しかし、atはhttpを完全に排除するようなものではない。そもそもatのhandleはdomainであり、domainは殆どの場合、httpになっている。例えば、`at://github.com`は`https://github.com`にアクセスしてもいいわけだ。今後、at browserで検索して、そこからhttpにアクセスする流れになるかもしれない。 + +## activitypubとatproto + +activitypubとatprotoは少し違う。まずactivitypubはsnsに特化した仕様だと思う。逆にatprotoはhttpの置き換えも視野に入れているのではないかと感じることがある。そのような設計がなされている。plcやbgsなどの仕組みからもより大きい変化を視野に入れているように思う。atprotoはactivitypubよりも根本的に広い視野で考えられているのだと思う。 + +`activitypub`はかなり触ってきて面白い技術だった。当時、mastodonは`ostatus`というprotocolを使用していて、そこでmastodonのインスタンスを立てた。その後、mastodonは`ostatus`から`activitypub`に移行した。なお、`ostatus`に関する情報には気をつけよう。昔から危険なサイトが増えている。 + +当時立てたサーバーはmastodon, pleroma, misskey, mitra, gnu-social(activitypub support)。今はmastodon, mitraを動かしている。投稿はしていない。 + +mastodon(activitypub)は非常に大きくなり、meta(facebook)のthreadsにも採用された。githubでアイコンが出るようになっていることからもわかるように既にインターネットを大きく変えている。atprotoもactivitypubから影響を受けた部分は大きいだろう。 + +しかし、私はatprotoじゃないと厳しいと思っている。activitypubでは未来に耐えられない。多くの人はたくさんのサーバーから好きなのを選んでと言われてもわからない。そして、サーバーを入れないと外とやり取りできないのは複雑なんだ。この場合、分散を意識させないよう内部で勝手に分散し、構築されているのがユーザーにとっては望ましい。 + +そして、サーバーが分散できるとなると、多くの技術者は管理者になりたがる。自分の名前を使いたい。しかし、atprotoではそれがサーバー管理者でなくても容易に設定できる。使用する名前もより短くなる。これらはactivitypubでは解決が難しい。技術の根本に関わるものだから。 + +|protocol|user|comment| +|---|---|---| +|activitypub://|@syui@syui.ai|サーバーを建てる必要がある。urlを他に使用している場合は特殊な設定も必要| +|at://|@syui.ai|サーバーを建てなくても設定できるし短くなる| + +## バトルが単調でつまらなくなる理由 + +原神をやっていて面白いのは「元素爆発を回す」構成を考える余地があるから。高難易度では実際に回せないとクリアできない。数発の攻撃で死んでしまうので元素爆発の回避を利用する一瞬の判断が重要になってくる。 + +つまり、緊張感がないバトルは単調でつまらなくなってしまうと思う。相手のHPが高すぎるのも爽快感を削ってしまうだろう。しかし、原神のバトルシステムを真似るだけではダメで、オリジナリティがないといけない。 + +つまり、全く異なるバトルシステム、今まで見なかったバトルシステムを作ったうえで、単調でつまらない状態を回避しなければいけない。これには緊張感を持たせつつ、瞬間的な判断が重要になるようにしないと。また、その上で簡単にもしないといけない。難しすぎても駄目なのだ。誰でもわかる誰でもできるようにしないといけない。そんなバトルシステムを目指していこう。 + + +## 各キャラクターモデルはどのように作られるのか + +動物モデルをベースに作成されます。最初は[fantasy](https://sketchfab.com/3d-models/quirky-series-fantasy-animals-vol-1-ce0013df63c64eadab968f8a439e744d)から。レベルが上ったり、イベントにて`動物 -> 人間 -> 神性`モデルに進化していきます。プレイヤーは最初に動物モデルを動かすことになります。 + + `-->` `-->` + +## アイはゲームに参加するのか + +アイはゲームには参加せず、物語に少し登場するキャラになると思われる。 + +各キャラは通常、普通のゲームキャラと変わらない性能をしているが、アイの場合はステータスやできることの上限設定、世界を作るうえでの必要性能をしているため、ゲーム参加に適さない。 + +syuiはゲームに参加するかもしれない。その場合、公平性を期すためレベルやステータス、その他はプレイヤー環境と同一となる。 + +## 仲間を集める + +まずファンタジー(理想)を創造する。それに合う人を探す。特に心理面(雰囲気)を重視する。 + +hololiveは採用を非常にうまくやっていて0期生やenを見ているとそのように感じる。特にenのメンバーの一部には、初心を忘れないタイプが数名いる。hololiveに参加していることへの喜びを今でも持っていて、それを感じられるところが見ている側も嬉しい。そういうタイプがいいと思う。 + +## 何がしたいのか + +見ている人を楽しませること、そして、やっている人に幸せな環境を提供すること。 + +技術面でいうと、現実世界と仮想世界の融合とアカウントの統合。 +具体的にはゲームで操作するキャラとvの姿が一つになった世界。ゲームアカウントはsnsアカウントと統合されている。この辺を目指したい。 + +もう少し具体的に。見ている人は何が見たいんだろう。やっている人は本当は何がしたいのだろうか。この規格は2つのことを考えて作った。 + +ユーザーは本当にアイを操作しプレイしたいのだろうか。本当は自分が主人公になって自分自身でゲームを戦いたいのではないのだろうか。ゲーム内の自分自身が沢山の人から認識され、応援されたうえでプレイするのは楽しいことだ。やっている人も見ている人も。 + +aiverseではこの2つを実現していきたいと考えている。 + +現実のsnsアカウントと自身のキャラを使ってゲームを配信したりプレイしたりする形式だ。この場合、3つの要素(sns, アバター, 主人公)、すべてがイコールになる。 + +||sns|avatar|game| +|--|--|--|--| +|aiverse|🟩|🟩|🟩| +|vtuber|🟩|🟩|🟥| +|通常配信|🟩|🟥|🟥| + +## snsを分析して動物を割り当てる + +snsを分析して動物を割り当てるatproto serviceが開発されている。プレイヤー数が多くなってきたらこういう仕組みで最初のキャラを割り当てる。 `jyc.dev` + + + +## インターネットとはなにか + +atprotoを考えるとき、インターネットのことを考える。 + +私の考えはわかりづらいように思います。たまたまyoutubeにでてきた動画にINFJは理解されないみたいなのがでてきた。調べてみると自分の診断結果も`INFJ-A`というやつだった。 + +ということで、atprotoについて少し自分の考えを話します。明快に。 + +私にとってインターネットという概念はそこまで難しいものではありません。重要なのは「人と情報」です。人はどのように情報を得ていくようになるのだろうか。それを考えます。そして、それは時代とともに変化します。今はインターネットから人は情報を得ていくだろう。それだけの話です。 + +次に考えるべきは「どのように」です。インターネットから情報を得ていくにしても、どのように得ていくようになるのでしょう。それを考えます。 + +まずは歴史からですが、簡単に説明すると、インターネットが普及し、最初に起こったのは個々人がホームページを作り出したことでした。誰でもホームページを作ると、つまり、webサイトですが、それを作ると情報を発信できるのです。そして、検索エンジンが登場します。 + +最初はurlを入力してアクセスしていた人々が検索エンジンからwebサイトにアクセスするようになります。この時代を1としましょう。 + +次に登場したのはサービスでした。色々なサービスができて、snsが登場します。twitterとかfacebookなどですね。次第に人々はホームページや検索エンジンからではなく、snsから情報を得ていくようになります。この時代を2としましょう。 + +さて、ではその次はなんなのでしょう。これはまだはっきりとはしていません。 + +ですが、次第に輪郭が見えてきたような気がします。それがactivitypubやatprotoのようなものになります。 + +これがどういったものかというと、こんな風に主張する人もいます。「インターネットは大企業に乗っ取られた。それを取り戻す」 + +私はそんな風には考えませんが、確かに、人々はサービス上でアカウントを作るようになりましたし、サービス上で発信するようになりました。すべての投稿はそのサービスに帰結します。個人にではありません。もちろん、情報をどこから得ていくのかもサービスの中からです。これが近年のインターネットの形であり、あり方でした。 + +ですが、1では違いました。私は3ではまた1の方向に帰結するのではないかと考えているのです。個人から企業へ。企業から個人へ。そんな感じです。そこまで単純なものでもないですけどね。時代に合ったバランスで個人方向へ向かうのでしょう。 + +これは1にそのまま戻るというわけではありません。1にはたくさんの問題がありました。その問題のため、2が使われるようになった側面があるのです。例えば、検索エンジンでは求めている情報にたどり着けないことが増えましたよね。そうした問題をバランスよく解決したり回避したりしながら、3への移行になるのだと思います。 + +atprotoはそうした問題点をわかっていて、付属するservice(server)、例えば、bgs, bsky, plc, ozoneなどはそういった役割を果たすためのものです。私は小さくしたインターネットみたいだなと思いました。とても賢いやりかただと見ています。 + +activitypubにはそうした仕組みはなく、考えられていないように思います。いやこういうものがあるぞ、という人はいるかもしれませんが、そうではありません。設計前の思想や思考なのです。設計するときにそういったことを思考し、思想があったかなかったか。そういう話なのです。 + +activitypubはsnsのために作られたもの。atprotoはインターネット、つまり、人と情報はどうなっていくのだろうか、かつてこういう事があったから、こうしたほうがいいのではないか。そういう事を考えられて設計されたように感じるのです。 + +これがactivitypubは未来に耐えられないが、atprotoは耐えられる、みたいに表現する理由です。 + +これについて、今後、atprotoよりももっといいものがでてくるという意見が予想されますが、それは色々な点で難しいと思っています。1,2,3という時代で分けていることからも分かる通り、ある程度の期間が必要なのです。そして、一度当てはめられたら、それはその時代の終焉、つまり、非常に長い期間使われるものになるのです。そして、重要なのは根本的な部分はそんな変わらないということです。 + +atprotoがすごいのは、httpの置き換えすらも視野に入れているのではないかと想像できるところにあります。その場合、時代に関係なく使われるものになるでしょう。bsky.teamは野心家ですから、そのへんも考えている気がします。 + +多分、このへんでわけがわからないと思う人もいるだろうと思います。したがって、私の考えを少しだけ明かします。 + +```sh +https://syui.ai + +at://syui.ai +``` + +想像できることは私の強みでもあります。しかし、何でもかんでも想像するわけではありません。現実的に可能な範囲で想像するようにしています。 + +その上でいうとactivitypubはtwitterの代わりになるかもしれませんが、httpの代わりにはなれないように感じています。atprotoはhttpの代わりになれるかもしれない。時代を超えれるか超えられないか。 + +この2つは、そういった差なのです。これを大きいという人もいれば小さいという人もいると思います。大したことではない、なんの意味もないと考える人もいるでしょう。 + +ですが、私にとってはこの差は大きく、意味がある。とはいえ、本当は小さいんですけど、ここで何度も言っているように、小さいということは大きいということでもあるのです。最も小さいものが世界を創り、変えていく。この世界はそういうものです。 + +そして、当時はそういう事に気づかない。小さいので誰にも見えないし、気にもしない。 + +atprotoは本当に些細なこと、誰にも気にされないような小さなことが驚くべきほど考えられているように感じます。 + +先ほど、atはhttpを置き換える可能性すらあると言いましたが、どのように感じましたか。よくもそんなたいそれたことを、そんな巨大なもの置き換えられるはずないだろ。 + +そう考えた人も多いのではないでしょうか。 + +ですが、httpって本当に大きく変えようがないほど巨大なものでしょうか。 + +それは小さくシンプルで単純なものではないですか。どうでしょう。 + +httpはシンプルなものです。atprotoもシンプルなものですね。 + +そして、この2つのどちらを使うにしても変わらないことがあります。 + +それは「人はどのように情報を得ていくのだろう」ということ。 + +私のようなものの見方をする人間にとって、httpもatもそう変わらんのです。そして、似てるところがあるんじゃないってのが個人的な意見です。 + +`at://`のほうがurlが短くなるので、そっちのほうがうれしいなって思いますよ。 + +## 宗教と通貨 + +protocolは宗教や通貨に似ています。多くの人に広めたほうが生き残るところが。 + +広まらないと始まらないし、広めることに意味があります。 + +内容や技術だけではないのです。そして、それらの評価、優劣も人それぞれ。 + +宗教は自分たちで作った物語を人々に広めます。通貨は交換(価値)、protocolは情報を。 + +## カードはどこで引くのか + +ゲーム内で引くのか、あるいはsnsで引くのか。やはり現実とリンクさせるためにsnsで引いたカードをゲームで使えるっていう感じにするほうがいい気がする。仕組みとしては複雑かな。ゲーム内だけで完結するものではないから。 + +この辺はpdsに保存する仕組みを作ったんだけど、まだやる気が出ないので、書いてないし動かしていない。 + +## 私は理解されていないのか + +そういう事はあまり考えたことないし、気にしたこともない。 + +ただ、私のような考えをする人はあまり見たことがない。見たことないなとは思う。とはいえ、人の考え方はそれぞれだし、私も他人の考えについて深く知っているというわけでもない。そういうものだろう。 + +むしろ、「自分は理解されない」みたいに考えている人は独りよがりだと思う。あまり好ましくないなと思っている。 + +確かに、なんかちょっと他の人とは違ってるかなあと感じることは正直あるけど、そんなことはどうでもいい。あまり気にしないな。 + +理解されているのかもしれないし、されていないのかもしれない。 + +このゲームは診断要素も入れようと思っているので、ここで自分の考えについて話しておこうと思う。私は診断結果についてそこまで気にしていないし、重要だとも思っていない。真に受けているかと言われれば、半々くらいだろう。 + +ただ、一般的に広まっている診断は、基本的にすごいものだと思っている。何がすごいのかというと広まっていることがすごいのだ。真実か否かではなく、楽しさや面白さはどこにあるのか。人が何を信じるかの話。これを否定するのは容易いことだけど、広まっている事実は変わらない。この世界は意識によってできている。意識が変われば世界も変わる。だから、ある意味で診断も世界を変えている。 + +難しい話になってしまったが、重要なことを一つだけ書いておこうと思う。 + +例えば、世の中に広まったものは全部間違いで劣ったものである、みたいなうがった見方はとても危険だと思う。悪貨は良貨を駆逐する、悪いものが生き残る、現実は醜く間違っている、自分は真実を知っている、陰謀が張り巡らされている、そのように考える傾向がある人とない人は明確に分かれていて、これは診断についても言えること。診断に拒絶反応を示すタイプは多量の負の感情を持っている可能性が高いのかもしれない。 + +有名な配信者のコメント欄などを見る限りでは2割くらいはその性質を持つ人で占められているように感じている。自分がそうなってしまわないよう気をつけたほうがいい。そんな話。 + +- 自分は理解されないみたいに考えるのはよくない +- 広まったものは全部劣ったものであるという意識は危険 + +診断や配信について、作ってる側としては楽しければいいのだ。プレイヤーを楽しませることが重要で、私自身、診断は面白いからやってみることが多い。何を信じるか、そんなの人の勝手。あるものを否定したり批判したり馬鹿にするのではなく、あるものを受け入れ楽しむ姿勢。人生において、とても重要なことだと思う。 + +とはいえ、世の中は変化していくので、柔軟性も大切。今あるものも完璧ではなく、いいところもあれば悪いところもある。完璧なものはないので、悪いところを見つけては否定や批判ばかりしているのも良くないが、今あるものを受け入れてばかりでもダメなのだ。特に何かを作る場合はね。そのあたりは、まあいい感じにやっていけたらと思うよ。 + +## 最初に選択があるべき + +ゲームは3つの要素で構成している。選択要素、診断要素、運要素だ。 + +で、最初にあるべきなのは選択要素だと思う。これを例えばアカウントを作成するケースに当てはめてみよう。 + +1. キャラクターの性別を`選択`する +2. キャラクターは`診断`から決められる +3. ステータスは`運`、つまりランダムで割り振られる(9:1) + +最初に性別を選択させるというゲームは多く、そこにも重要な意味がある。一つはプレイヤーにゲームの選択権があると理解してもらうところに意味がある。そういった認識や意識を抱かせる点にあると思う。これが全自動で決められ、他のプレイヤーとの差異がない場合、そういった意識を持つのは難しい。 + +ステータスに関しては全部がランダムではなく、例えば、snsのpost数などで計算されるところがあると良いかもしれない。 + +## このゲームでの旅とは + +このゲームでの旅はどんなものになるのだろう。それを少しだけ説明しておきたいと思う。私の考えは単純でプレイヤーはまず何らかの動物あるいは人間以外の生き物のモデル(キャラ)からはじまる。最初に診断で決定されるキャラクターだ。グループはファンタジーと言うカテゴリから始まり、シーズンが終わるとまた新たなグループが作成される。参加したときのシーズンとグループ名は記録される。 + +なぜ動物モデルから始まるのかというと、これは人類の旅でもあるからだ。人間は最初から人間だったわけではない。他の生命(生物)だった。そういった歴史に基づき、`動物->人間->神性`モデルへ移行するように設計されている。 + +シーズン1は神話の始まりを意味する。その意味で空想動物達が選ばれるようになっている。シーズン2へは割と早い段階で移行しようと思っていて、そこではクジラやゾウやライオン、ワシなどが選ばれると思う。 + +## 診断と科学的根拠 + +性格診断は科学的根拠がないとよく言われる。けど、性格に科学的根拠などあるはずがない。これは医療分野にも言われることだけど、医療分野も多くが考える科学的根拠はない状態といえる。 + +例えば、科学的根拠があると宣伝されているワクチンがあったとする。しかし、100人が接種して、20人に効果が見られ、60人には全く効果が見られず、20人に予期せぬ副作用が出た。つまり、100%こうなるというものではない。「診断」とあるものはそのことが前提になる。そもそも性格の定義も人によって異なるものだし、評価も異なる。そういった分野に科学的根拠を求めることは無粋だと思う。 + +心理学全般や心に関することは、ほぼすべて科学的根拠がないと思ったほうがいい。よく有名な心理学の実験が例に出されることがあるけど、私は科学的根拠はないと思っている。どんなに厳重に管理され統計されてもやはり最終的に心の問題は科学的根拠を提示できない。科学的根拠とはなにか。それはa=bである、aはbになる、そのような結果や図式のこと。これを因果関係という。 + +その関係性が100%(99.9%)のとき、人はそれを科学的根拠があると考える。現代科学では体や心の問題はわからないことだらけで個人差がありすぎる。直近での立証の見通しはないと考えている。 + +つまり、現代科学も全然未発達で完璧なものではない。その程度のものを盲信するのも危険と言える。100年前も当時の科学的根拠に沿った生き方をした人間はたくさんいた。しかし、今見ると滑稽に映ることがある。おそらく、100年後の未来も今を見てそう思うのだろう。だからまあ、世の中わからないことだらけってこと。性格や心の問題は、それを肯定する根拠もないが、否定する根拠もない。 + +それは科学的根拠ではない。科学的根拠は統計のことであり、傾向のことだというなら、血液型占いも性格診断も統計的なデータは存在している。信憑性がない、確実性がないというのなら、それはそう。心の問題なので計測困難だと思う。 + +## 数々の診断や占いについて + +日本では血液型占いが流行ってて、欧米では星座占いが流行っていると聞く。私はどちらも一部で当てはまることはあって、それは将来的に解明されていくだろうと考えている。 + +どういうことかというと、血液型占いというのは要は遺伝である。遺伝で決まる要素の一つ。遺伝と性格や個人的資質については何らかの因果関係があり、それが将来的に解き明かされていく可能性があると考えている。つまり、そういった物が姿形を変えて占いになり、流行っているという理解。全く当てはまらず全くのデタラメだと多くの人が感じるような事柄はそこまで流行らない。そこには何らかの意味があり、納得があるからこそ流行るものだと思っている。また、血液型は病気との因果関係に一定の傾向や疑いがある。仮にそれが真とすると、体調や病気はその人の心理に全く影響を及ぼさないものなのだろうか。何らかの関連性があってもおかしくないと私は考えている。 + +次に星座占いについて。こちらも同じく将来的には一部真実だったことが明らかになると思う。もちろん、解釈部分も大きいけど、私は多くの事柄には何らかの意味があり過程があると考える。なので簡単に「そんなもの科学的根拠がない」と考えるようなことはあまりない。星座は誕生日によって決まる。具体的には誕生月によって決まるわけだが、月によっては気候が違う。温度が違う。環境が違うわけだ。幼少期の体験、つまり、個人的資質や性格は非常に幼い期間のうち決定してしまう可能性がある。その短い期間内の気候や温度は個人の性格に全く無関係なのだろうか。そういった疑問だ。例えば、温暖な気候の民族と寒冷な気候の民族で性格的な傾向や違いを感じられないだろうか。例えば、早生まれの人は学問や就職で不利になる傾向が確認されている。星座占いもそういったものが姿形を変え広まり、人々がある種納得して楽しんでいるものだと理解している。 + +診断や占いは不正確だという人がいるが、正確なはずないだろう。100%確実に当てることなど不可能だ。そんなこと誰でもわかっている。大抵の人はそのような期待を持ってない。だが、完全にデタラメとも言い切れない。そういうところがあるのだろう。人々はそういうところを感じ取っているのだろうとそう思う。 + +まあ、世の中にあるものを多く嫌うタイプの人は当然ながら占いも診断も嫌いだろうと思っている。そういう人は大抵、診断や占いに限らず嫌いなものばかり多いものだ。 + +だが診断や占いに傾倒するのもまた良くないことだと思う。 + +自分の運命は自分で決める。その意思が大切だ。 + +結局のところ、いくら統計や傾向が真実であったとしてもそれがあなたにも当てはまるとは限らない。たとえ1億人に当てはまることでも、あなたに当てはまるとは限らないのだから。 + +ここで言いたいのは、占いだろうが診断だろうが関係なく広い心が重要だと思う。人を馬鹿にする人間になるくらいなら占いや診断を楽しんでいる人々のほうがだいぶマシな態度に見える。とはいえ、こういうものに関しては軽く考えるのがいいだろうと思う。当たる確率で言えば、決して高いとは思えない。そもそも何かを言い当てることは難しい。人の言うことは科学的根拠があろうがなかろうがそこまで当たるものではないし正確なものでも真実でもない事が多い。そういうのも将来的にはわかってくるだろうと思う。今の自分の価値観が完全無欠で絶対に正しいとは思わないこと。 + +理解が難しいなら良い心を持つこと。それに比べると診断や占いなど些細なことで、当たることもあれば間違っていることもあるだろう。そんなふうに思う。 + +それよりも開発者としては「自分のことを知りたい」と思う人々の欲求にどう答えるかを考えないとね。それを考えるに、血液型占いも星座占いもよくできている気がするなあ。 + +## 選択と診断 + +この前、逆転裁判をプレイする女性配信者(vtuber)を見ていた。その人はとても平均的な女性に見えた。逆転裁判にはある重要な決断、選択を迫られる場面というものがある。 + +私は即断即決でしかも毎回変わらない選択をするんだけど、その配信者の方はとても迷ってこんな重要な決断を私にさせないでくれ全部主人公が決めてくれとそう言った。そして、迷いに迷った挙げ句、最後には決めて、そして、目に見えるほど疲れ切っているのがわかったし、本人もそう言っていた。 + +これを見て、ゲームは選択だけでもだめなんだと思った。女性は占い好きとよく聞くけれど、勝手に診断して結果を提示してくれたほうが楽なのだ。わからないことに対して、これはこうと判定してくれるシステムを作らなければならない。選択ばかりで全部自分で決められますよというのも疲れてしまうと思う。最初と最後(重要部分)は選択を迫るが、他の部分に関してはやはり個性が分かれるよう自動化したほうがいいのではないかと思う。 + +血液型占いが強いのは、誰もが持っているものであることと、少ないアルファベット、パターンで判定すること。星座占いが強いのは誰もが持っている短い数字で判定することだと思う。 + +## 個性の分け方 + +人は自分のことを知りたいと思うし、診断が出るならそれはそれで面白いものだ。個性の分け方にも色々あるけど、このゲームでは個人に由来するもので個性を分ける。 + +具体的にどうするのかは、やはりその人の性格が現れるものにしたいと思う。キャラクターはそのものの性格が現れるのが一番いいと思う。見ていて楽しい。 + +性格診断はいくつかあるが、重要なのは明確性と簡易化だと思う。ただし、実態がなければならない。突き詰めて考えるに、その人の性格はどこに現れるのだろうか。 + +snsの投稿に現れると個人的には思っている。ただし、それを分析し判定するのはかなり難しいと思う。何をどのように評価するのか。このへんはAIを使ったsns投稿を分析する心理診断というやつを考えている。しかし、時間がかかるし明確ではないし簡易的でもない。このへんは血液型占いや星座占いを見習うべきだと思われ、多少信憑性に欠けても明確な基準で少ないタイプに分けるのがいい。sns投稿診断についてはおそらく心理良好度みたいなものは計測できてもタイプ分析みたいなのは難しいのではないかな。 + + +## 空間と力 + +それぞれの空間によって基本パワーを変えるようにすることを考えている。例えば、地上は1, 空中は10, 宇宙は100とする。ボスは地上戦を強制する。 + + +## nostrについて + +これからどうなるかはわからないが、おそらく、nostrは一定の広がりを見せるが、それ以上は難しいと予想している。 + +理由は簡単で、nostrの性質が無法地帯、無秩序、無責任分散にあるからだ。これはとてもいいものだが、普通の人は住みたがらないと思う。ネットでそういう場所を作るのはそこまで難しい話ではない。しかし、それではうまくいかなかった。だからこそどうするか、どうやって秩序を作り維持するのか。人々は長年その事を考え試みてきた。 + +それはなぜか。多くの人がバランスの良い秩序を求めているからだと思う。または継続性。これもリレー(サーバー)管理者がコロコロ変わる継続性ではなく、信頼の置ける一つに預けておきたいという心理が働くと思う。 + +しかし、私としては人類を信じているし、最終的には分散に至ると思う。 + +例えば、すべての個人が独立し、自立している。何でも自分でできるようになった世界。を想像すると、そこでは住人が安定した精神を持ち、揉め事やトラブルも起こさず、誰も悪いことをせず、すべてのことを一人でやって生きている。この場合、ルールや法律、管理者や政府がある事自体おかしい。そのようなものは必要ない。このような段階においては無法地帯は正しい。 + +## ue5.5への移行 + +`ue 5.5.x`に移行するため、また一から再構築しています。つまり、今まで作ってきたものは全部作り直しです。主な理由としてはコード整理です。 + +ueはファイル名やフォルダ名、変数名を変えることができません。壊れますので、変更や修正、フォルダ整理などはすべきではないのです。例えば、フォルダ名を変更しようものなら1日以上の時間がかかっても不思議ではありません。途中でフリーズして全体が壊れてしまうことも十分ありえます。ファイル名の変更も1つのファイルにつき数時間はかかるでしょう。したがって、ueでは一度作ったファイルやフォルダは削除または変更できないと考えておいたほうがいいでしょう。もちろん、ファイル、フォルダの移動もできません。やるべきではないのです。 + +ueは触りだしたばかりなので試行錯誤でやっていると、特にアニメーション関連のインポートでファイルが散らかっており、整理もできない状態なので放置していました。しかし、どちらにせよupdateすると今まで作っていたものは動かなくなります。よって、これを機に情報整理の点からも再構築することにしました。 + +これは情報整理だけでなく、ueの勉強になります。何度も一から作り直すこと。それを短い期間で繰り返すことは、私に合った方法の一つです。 + +ですが、精神的にきつい部分もあって、相当こだわってクオリティを上げて作ってきたものを全部失い、また最初からやり直すというのは、キャラを操作していると、すごく落ち込みます。 + +あんなに自由に動かせたのに。便利で快適だった機能もすべてなくなり、ギクシャクした動きや全く動かない状態から再び作っていかなければなりません。調整していかなければならない。 + +それに加えて、今までにはなかった新たな問題も発生しています。私は早いうちに移行を済ませておきたいタイプですが、おすすめしません。 + +- https://git.syui.ai/ai/ue/issues/36 +- https://git.syui.ai/ai/ue/issues/40 +- https://git.syui.ai/ai/ue/issues/45 +- https://git.syui.ai/ai/ue/issues/46 + +## ue5.5への移行途中 + +ue5.5へ移行しています。まだ途中ですが経過を記録します。 + +まず移行すると決めてよかった。昔から放置していた問題の多くが解消しました。移行しなかったらおそらく放置されたままだったと思います。新たに出てきた問題も解決できました。 + +放置していた問題は、主にatmosphereとearth(solar system)の統合です。横から惑星に入ると停止する、宇宙に出るとearthを表示する、ocean wavesの描写がおかしい、海中はどうしようなどなど。ゲームエンジンは平面を基準にしていますから、あらゆる問題が発生し、完全な解決は難しいのです。なるべく問題がでないよう調整していましたが、それでも微妙な部分は多かったのです。 + +しかし、今回の移行で大半の問題を解消できたと思います。あとは演出を追加していくと良くなるでしょう。 + +なぜ解消できたかというと、一から作り直したことが大きい。頑張って調整し作ってきた大量の処理を破棄しました。動作はしていましたが、無理やり動かしていた部分もあります。しかし、移行しない限りそれを修正しようとは思いません。修正すれば他のところに問題がでてきてしまい、大量の書き直しと動作不良がついてきます。 + +ですから、全体的なシステムが見えてきた段階で、最初から作り直すのは効果がありました。やる気の問題に過ぎませんが、移行直後はやる気が芽生えるものなのです。まあ、めんどくさいの壁を乗り越えればですが。 + +ue5.5にした恩恵はeditorが落ちなくなったこと以外、今のところありません。全ての動作はue5.4からのもので、作り直す仮定で問題を解消したもののue5.4でも可能でした。新しい機能を使っておらず、game animation sampleの動作もカスタマイズして独自に実装していたものが追加されていただけなので、5.5では内部がより複雑化しておりflying systemとの統合に時間が取られました。 + +ただし、今後のことを考えると、新しいversionには追従しておいたほうが良いでしょう。作っているとどんどんとversion固定されていき、追従できなくなっていきます。定期的に全部を書き直すことで、より全体像が明確になり、コード整理もできますし、新しい機能を試すこともできます。とはいえそれでは完成できませんから、どこかの段階で固定しなければならないかもしれません。できる限り機能はassetと分離できるように設計していきたいと考えていますが、難しい部分もありますね。 + +## blueskyのサブスク + +blueskyにサブスクが導入されるという話を少し前から聞いていて、一度サブスクを始めてしまうと、やめるのは難しいし、有料プランの存在を払拭するのも難しくなる。ユーザーはなんとなく有料プランがあるsnsだと認識してしまうし、そういう雰囲気をまとってしまうと思う。そういった理由から個人的には導入を延期してほしいと思っている。一番恐れているのはblueskyが失速してしまうこと。そうならなければ全く問題ない。そして、どうなるかはわからない。 + +まず、サブスクの金額については安いけど高いと思う。どういうことかというと、開発側からすると安すぎる。しかし、ユーザー側からすると高いと思う。ゲームソフトも同じ。開発をやっている側からすると安すぎると思う。正直、1つあたり10万や100万でも安いのではないだろうか。今は4000円位で買えるんだっけ。だとすると安すぎると思う。けど、ユーザー側からすると高いよね。無料で遊べるゲームが沢山あるしクオリティも高いから4000円でも高いよね。 + +blueskyのサブスクもそんな感じで、安いけど高いんだろうなって思う。 + +で、そんな安すぎるサブスクで運営費を賄えるかというと、正直、難しいと思っている。snsは有料プランで運営できないと思っている。であれば、他の方法を模索し、有料プランを一切導入しない方針を採るのがいいと思う。では他の方法ってなんだということなんだけど、その方法はまだない。けど、ヒントはいくつかある。今の時代は配信者がとても稼いでいる。それこそsns運営費を賄える程に稼いでいる。もう一つ稼いでいるのはゲームだろう。 + +つまり、何らかの形で大ヒットするような配信者を育てられたり、もしくはゲームを作ったり、あるいはそのプラットフォームを作れたりすると、同時にsnsの運営費に関する問題は解決すると思う。この場合は、それらを自身のsnsで宣伝することも可能で、それを鬱陶しくない宣伝方法や宣伝内容にすることも可能になる。例えば、1年に1回の誕生日のみとかね。この場合は配信者のための宣伝費用もいらなければ、ゲームの宣伝費用も必要ない。他の広告は入らない。 + +難しいかもしれないけど、そんな事を考えている。 + +個人的にはteamがsnsとは別にprojectを作って、20%ルール、つまり、通常業務とは別に20%の空き時間を作り、やりたい人はそこにコミットする方式で開発を進めるとよいのではないかと思う。このprojectは基本的にatprotoを使ったゲームプラットフォームの作成みたいな感じかね。 + +snsそのものではなく、他のところに付加価値のあるものを作って、そこからsns運営費を賄うイメージ。 + +とはいえ、サブスクはうまくいくかもしれない。 + +## ワールドと理念 + +ゲームはワールドを分けてはいけない。好きなワールドを選んで入りましょう、みたいなゲームは流行らないと思ってる。 + +ワールドを分けたほうが、ue的にはlevel, mapのことだけど、便利でユーザーにとっても喜ばしいはずなんだけど、自由に好きなものを選べます、好きなワールドに入って遊びましょう、という形式のゲームはなぜかやる気が起きない。たくさんの選択肢は人を迷わせる。それがマイナスに作用することもある。 + +一つの世界を創り、そこにオリジナリティがあるのなら、個人的にはそっちの方が良いと思う。 + +でも一つのワールドは技術的に大変だったり重かったりするものだから、多少の工夫によって分けられるのはいいかもしれない。例えばボスの場所とか。 + +でもやっぱりメインのワールドが一つあって、それがゲームのイメージに結びつくものでなければいけない。この辺があやふやだったり、複数あるものだったりすると、よくない。一貫性があってメインは一つ。その方向性がいいと思う。 + +VRチャットやメタバースはそのへんがはっきりしてないのが大きな弱点と見ている。たくさんの自分にあった世界を選びましょう、みたいな感じで、これといった強烈なイメージの背景が浮かんでこない。なんかふわっとしてて、よくわからない。もちろん、これには反対意見もあるだろう。「いや、VRチャットやメタバースは明確な1つのワールドがある」と。ただ、私はあんまりイメージを思い浮かべることができなかった。 + +人気のあるゲームはどれも明確にワールドを思い浮かべることができる。ポケモンの世界観、ゼルダ、モンスターハンター、原神、マインクラフト、どれも背景が明確に思い浮かぶ。 + +逆に言うとそれがないと厳しい。そういった一貫性のあるワールドを一つ作り上げることが必要だと思う。 + +多くの人を楽しませようというのも重要だけど、それと同じくらい作り手に明確なワールドイメージがあるのも重要。そういったオリジナリティがないと「アンケートを取って上から5番目までのうち無難なものをいくつか作りましょう」ということになりかねない。それが面白いものになるかどうかはわからない。でも、私はそれでは面白いものを作れない可能性が高いと思っている。 + +## ワールド作成の方針(原神、幻想シアターの話) + +いくつか思うところがあるので適当に。少しだけ原神の話をします。 + +原神は最近特に批判が多く出ていて、その一つが幻想シアターです。原神をプレイしている人ならおそらくわかるでしょう。 + +私の考えでは、幻想シアターは別に問題ありません。というのもゲーム制作というのは難しいもので、完璧なものは存在しません。名だたるゲームの中にも「これはちょっと」とか「面白くないな」というものはたくさんあるのではないでしょうか。ポケモンやゼルダにもありますよね。原神だけ批判されまくっていたのでちょっと気の毒でしたが、それだけユーザーの期待も高かったのでしょう。 + +ただ、私は問題ないと言いましたが、ベストとは思ってなかったです。どこにも書きませんでしたが。 + +一つだけ挙げるなら「冒険があればもっとよくなったのに」って思いました。 + +螺旋というものがあるんですが、これは幻想シアターより古くからあるエンドコンテンツです。皆さん、螺旋はどのように行きましたか。モンドの奥に球体が浮いていてそこからワープして螺旋の場所に行けるようになってるんですよね。そうやって冒険の末たどり着いた不思議な場所が螺旋(マスク礁)です。 + +では、幻想シアターはどうでしたか?幻想シアターは突然告知があって、マップ上からその場所に行けるようになっている。これが幻想シアターです。 + +冒険の末たどり着くような場所にあるなら納得できたと思いますが、運営の都合でコンテンツが追加され物語も冒険もないまま「これが新しいエンドコンテンツです」と提示されたものだったので、私はそのへんが残念に思いました。ああ惜しいことをしたなあ、このちょっとした考えさえあればよかったのにと。 + +ですが、私の意見も勝手なもので、出てきたものに文句を言い、いちゃもんをつけて、ここはこうすればよかった、ああすればよかったなどと言うことは簡単なんですよ。 + +だから当時は色々と思うところはあったものの何も言わなかった。猛批判されて大変そうだったし、特に問題があるとは思ってなかったし。でも、こうしたほうがもっと良くなった。それは簡単な方法で実装可能だったと思っていたので、今回はこのことを記録しておこうと思い書いています。 + +何が言いたいかというと、ワールドには運営の都合をそのまま持ちこまないようにしたほうがいい。一つの実装には背景があり物語があり、その世界のルールがあります。プレイヤーが納得する形で導入しなければならない、ということです。 + +といっても原神の幻想シアターに背景や物語がなかったかというと、そんなことはありませんでした。導入時はそういったものも検討され作られていたのだと思います。 + +ですが、螺旋とは違い、なにか新しいコンテンツとして追加された感がすごくありました。多くのプレイヤーはそのことを言及していませんし、気にしている人もいないようでした。もともと幻想シアターは内容やルールの複雑さがあり、そのことを多くのプレイヤーは批判していました。 + +私もルールが複雑すぎて良くないとは思っていて、螺旋に新しいランクを追加するだけでプレイヤーは喜んだのにと思います。かなり作り込まれた幻想シアターでしたが、それだけに、なんとも言えない気持ちになりました。「運営は頑張ってくれた。でもこれじゃない!」みたいなそんな感じですかね。 + +この場合、やはり、プレイヤーの納得が重要で、プレイヤーが納得する形で導入すれば結果は少し違ったのかなと思うのです。まあ、内容やルールの複雑さの問題は残りますが。 + +長くなったので、今のところ考えている方針をまとめます。 + +- ものを気軽に浮かせてはならない。ゲームでは特に簡単に現実を破る事ができるけど、できる限り現実に基づく物の配置を行う +- ゲームを作らない。作るとしてもワールドを移行してはならない。ワールド内でミニゲームを実装するものは多い。けど、これはよくない。仕掛けやギミックも多すぎ複雑すぎなものを配置してはいけない。数を抑え、かつ簡単にすること。そして、現実に基づく背景を作ること。この装置がこうしているからこうなるみたいな。ただ面白いミニゲームを作りました、ではダメ +- 何かを追加したら冒険が必要だし、背景が必要。新しいものを追加しましたワープで簡単にいけますよ、ではダメなのです。それは運営の都合だから。ワールドのルールに合わせること。例外はありません。 + +## 世界と名前 + +世界は`aiue system`によって構築します。それぞれにおいて一貫した背景と物語があり、名前をつけなければなりません。 + +例えば、`atproto`の名前をまとめたものが参考になります。`atmosphere { bluesky, ozone, bigsky }`など。 + +```json +{ + "atmosphere": { + "name": "at", + "repo": "https://github.com/bluesky-social/atproto", + "uri": "https://atproto.com/ja/guides/glossary", + "exosphere": { + "km":[{ "min": 700, "max": 10000 }], + "tag": [ "universe" ] + }, + "thermosphere": { + "km":[{ "min": 80, "max": 700 }], + "tag": [ "aurora" ] + }, + "mesosphere": { + "km":[{ "min": 50, "max": 80 }], + "tag": [ "meteor" ] + }, + "stratosphere": { + "km":[{ "min": 12, "max": 50 }], + "tag": [ "ozone", "bigsky" ], + "service":[ + { "name":"ozone", "repo":"https://github.com/bluesky-social/atproto/tree/main/services/ozone" }, + { "name":"bgs", "repo":"https://github.com/bluesky-social/indigo/tree/main/cmd/bigsky" } + ] + }, + "troposphere": { + "km":[{ "min": 0, "max": 12 }], + "tag": [ "bluesky"], + "service":[ + { "name":"bsky", "repo":"https://github.com/bluesky-social/atproto/tree/main/services/bsky", "tag":[ "api", "appview" ] }, + { "name":"bsync","repo":"https://github.com/bluesky-social/atproto/tree/main/services/bsync" }, + { "name":"pds", "repo":"https://github.com/bluesky-social/atproto/tree/main/services/pds" } + ] + }, + "other": { + "tag": [ "plc", "feed", "oauth", "social-app", "stream" ], + "service":[ + { "name":"plc", "repo":"https://github.com/did-method-plc/did-method-plc/tree/main/packages/server", "tag" : [ "did" ] }, + { "name":"social-app", "repo":"https://github.com/bluesky-social/social-app", "tag": [ "web" ] }, + { "name":"oauth", "repo":"https://github.com/bluesky-social/cookbook/tree/main/python-oauth-web-app" }, + { "name":"feed", "repo":"https://github.com/bluesky-social/feed-generator" }, + { "name":"stream", "repo":"https://github.com/bluesky-social/jetstream" } + ] + } + }, + "ref": "https://en.wikipedia.org/wiki/Atmosphere_of_Earth" +} +``` + +```json +{ + "name": "atom", + "lang": { + "ja": "原子" + }, + "ref": "https://en.wikipedia.org/wiki/atom", + "body": { + "text": "the word atom comes from the greek word atmos, which means indivisible. an atom consists of an atomic nucleus, which is made up of protons and neutrons, and electrons distributed around the nucleus", + "lang": { + "ja": "アトムはギリシャ語のアトモス、これ以上分割できないという単語が由来。原子は陽子と中性子からなる原子核と、その周囲に分布する電子から構成される" + } + }, + "tag": [ + "proton", + "neutron", + "atomic", + "electron", + "quark", + "ai" + ], + "proton": { + "name": "proton", + "lang": { + "ja": "陽子" + } + }, + "neutron": { + "name": "neutron", + "lang": { + "ja": "中性子" + } + }, + "atomic": { + "name": "atomic", + "lang": { + "ja": "原子核" + } + }, + "electron": { + "name": "electron", + "lang": { + "ja": "電子" + } + }, + "quark": { + "name": "quark", + "lang": { + "ja": "クォーク" + } + }, + "ai": { + "name": "ai", + "body": { + "text": "a unit much smaller than a quark, the smaller the particles, the more they can gather together. when they do, huge amounts of gravity are generated. black holes are also made up of these units. this world is the world of existence. existence is composed of the consciousness of existence. the consciousness of existence is the smallest thing in this world, and all matter is a collection of this consciousness.", + "lang": { + "ja": "クォークよりもはるかに小さい単位。小さいほど集まることができる。膨大な重力が発生し、ブラックホールはこの粒子で構成されている。この世界は存在の世界。存在は存在の意識で構成される。存在の意識はこの世界で最も小さいもので、あらゆる物質はこの意識の集合体" + } + } + } +} +``` + +## 便利にはなったけど面白くはならなかった + +ゲームをプレイしていて、ユーザー側から要望が寄せられ、改善されていくゲームを見ていて思うことがある。 + +大体のユーザーの要望は決まっていて「もっと便利にしてくれ」「もっと快適に」「もっとすぐに欲しいものが手に入るようにしてくれ」というものが多かった。 + +そして、私はユーザー側として、便利になったとは思うけど、面白くはなっていない、そう感じていた。 + +次第に、その便利で快適になっていったゲームは「なんか最近つまらなくなった」という言われるようになり、要望はさらに過激になっていく。 + +「なんでもっと便利で快適にしないんだ、あそこもダメここもダメ...」 + +そういう光景を見ていて思うのは、便利快適になることはイコールでゲームが面白くなることとは別なんだと思う。 + +こういう要望があるとき、それがゲームのコンセプトに基づいている場合はそれとは別にゲームを面白くする方向で考えたほうがいいのかもしれない。 + +ゲームを面白くするにはどうすればいいのか、その答えを探し、試行錯誤。まだないものを作らなければならない。 + +答えはユーザーの要望や意見にはなくて、面白いものを世に出したとき初めて「これが欲しかったんだ」「自分は前からそう思っていた」と受け入れられるものなのかもしれない。 + +それはまだないものなので、自分たちで作り出す必要があると思う。いうのは簡単だけどやるのは難しいんだね。 + +便利さや快適さもたしかに重要だけど、それより遥かに重要なのが「ゲームを面白くする仕組み」だと思う。完璧なものはないけど、まずはコンセプト、そして、シンプルな仕組みを作り上げるところからはじめてみよう。 + +## 陰謀論という言葉に注意 + +どうでもいい話だけど、少しおもしろい視点かもしれないので書いとく。今の時代はとても混沌としててこういうときほど人間はどちらかに傾く。例えば、心の弱い人ほど早くに陰謀論にハマりだしてそういう主張をやってたりするものだった。ただし、陰謀論が必ずしも間違いとは限らない。とはいえこのへんも注意が必要で、人が陰謀論というとき、それは単なる言葉に過ぎない。言葉というのは要は言いたいことが伝わればいいのだ。多くの人は陰謀論と聞いて、「ああ、ああいうことを言う人達ね、なんとなくわかるし身近にも思い浮かぶよ」と。それでいいのだ。これを一から十まで説明して定義して解説して分析して論評を行うのは、時間の無駄と言える。そんなことをやっている暇もないだろう。そして、大体の場合、陰謀論というと、伝わると思う。 + +さて、私の考えを述べると、陰謀論にハマった人の10年前のブログを分析したことがあった。その人の言うことがどれほどの確率で当たるのか興味があったのだ。そして、その当時ははっきりしなかったことも5年後、10年後と経過するにつれ明らかになっていた。結論を述べると、「陰謀論を主張する人の意見はとんでもなく的はずれなものが多かった」ということだった。 + +ただし、100%間違っていたわけではなかった。よくわからないもの、正しかったことも中にはあったよ。やはり、100%当てることも難しいが、100%外すことも難しいのだと思う。 + +一方で、それとは逆のケースを考えてみよう。今度は、「この人の言うことは本当によく当たるなあ」というケースだ。 + +しかし、このような人の場合、周りの多くの人がその人を頼りにしていることも少なくない。そして、100%外すことも難しいが、100%当てることもまた、難しい。 + +Xデーというものがあったとしよう。そのような肝心なとき、いつも予測を当てる人の予測が外れてしまうことがある。多くの人はその人の意見を当てにしていた。この人に任せれば大丈夫だろう、いつも当てるからと。すごい人なんだと。頼りきっていたんだ。そんなとき、ここぞという肝心の場面で予測が外れることになる。予測というか、意見というか、世の中のことはわからない。だから自分なりに解釈しやっていくしかない。これは多分こういうことだろう。だからこうなると。そんな折、いつも予測を外し、的はずれなことばかり言っている陰謀論者の意見が正しかったことがわかることになる。 + +世の中というのは難しいものだね。確実なものなんてないんだよ。陰謀論だから間違いだと片付けてしまうのも危ないことのように思う。 + +だからこそ、ある種の決めつけはよくないことになる。たとえ10年の間に一度もそういうことがなかったとしても、いずれはこういうことが起こり得る。確実にその時はやってくる。とても長い時間の中、今までの前提がひっくり返る瞬間というものはあるものだ。とはいえ、それは10年に一度かもしれないし、100年に一度かもしれないし、1000年に一度かもしれない。確率でいうと低いものだとは思うけどね。 + +そして、普通の人は、平穏なとき、どちらに傾くこともない。平和が一番。だが、混沌の時代、普通の人がどちらかに傾いていき、そして、「陰謀論者」と「陰謀論を批判する人」みたいな対立構造になっていく。 + +これはその人個人の心の強さに起因する。弱いほど早くにどちらかに傾いていく。「自分の意見が絶対的に正しく、相手は絶対的に間違っている」そんなふうに考えてしまうんだ。 + +そして、傾いた人達の性質は共通して、他者への怒りが見える。これは対立構造をとり自分と異なる立場を取る人たちに対してのみではなくなっていく。次第に、それ以外の人達、自分たちの意見に賛同しない、取り込まれない人達への怒りも見せはじめる。結果として、あらゆる他人への怒りがその人を通して見えるのだ。 + +特に陰謀論に傾く人達の怒りは日頃から目に付くものだった。しかし、それに怒る人達もまた、対立構造で同じくして、その性質をまとってしまい、同じようなものに成り果ててしまう。そういう事がある。 + +こういうときこそ、優しさと強さを持とう。そして、怒りを手放そう。それがいいと思うんだ。 + +私が言えるのはそれくらいでね。特に面白い話でもないんだけど、一つの視点としては面白いかもしれないと思ったので書いたよ。 + +## 日記をどこに書こうか迷ってる + +全部ここにまとめてたけど、分量が多いので書きづらくなってきた。 + +リポジトリ作ってdir/file.mdで書くのもいいかもしれないが、webで見るのでwebで書けたほうがいい。リポジトリ作ってissueかwikiを日記にするといいだろう。 + +## ゲームを開発する理由 + +理由の一つに原神があと2年で終わるのがある。運営の初期構想では7国(7年)でストーリーが完結すると言われていた。ハリーポッターと同じ。 + +今は6国の最中なのであと2年となっている。サポート終了するとは思わないし、私は基本的に運営がずっと続くだろうゲームを選択して、原神を選び、pokemongoをやっていた。それが最初のそしていちばん重要な要件だった。 + +ただ、「原神終了」みたいなことを言う人もいて、そういえば、残り1国だなと思った。いや、続くとは思うけど。 + +でも、もし運営が「ストーリー完結のところで終了です」と決断する可能性も十分にあり得る。 + +そこで、とりあえず自分でゲームを作ってそれをやるか。自分で楽しめるようなものを作れたら、それはいいものだ。そんなふうに思った。 + +なので、直近の目標としては、自分でプレイして楽しめるものを作る、というのがある。 + +とはいえ、それだけではダメなのだ。コンセプトとして何を置くか、どう考えるかも重要で、例えば、「自分が楽しめる=原神と同じものを作ろう」となってしまうとよくない。そこで上限が決まってしまう。また、それなら原神をやればいいだけだ。 + +だから、最初にコンセプトをしっかり考えなければいけない。 + +当たり前だけど、原神よりも楽しめるものを作れたらいいなと思っている。そして、それは自分も楽しめればもちろんいいんだけど、自分が楽しめるだけでもダメなのだ。 + +「自分さえわかればいいでしょ」「わかるひとにだけわかったらいいでしょ」「難しく複雑でも別にいいでしょ」このような方針は採用しない。誰でも楽しめる、わかりやすいものを目指している。 + +## 自分なら何にお金を使うか + +ゲームをリリースしたとき「これなら欲しい」「お金を出してもいい」と自分が思うものを作れたらいいなと思う。 + +自分がお金を出すものを開発しなければならないと思っている。ちなみに、私はケチなので基本的にお金を使わない。予期せぬお金が転がり込んだとしても使わないので、おそらく、額の問題ではないのだろう。 + +そんな中使ったのはゲーム開発のassetだった。無駄だとは思ってない。自分なりにお得だと思ったので買っている。 + +いくつかの案があるが、やはりゲームのコンセプトである「現実とゲームの融合」にある。 + +ゲーム上の自分の姿を現実に反映させるようななにかがあればいいと思う。今のところ考えているのはガチャはカードであたりが出ればキャラクターというものになる。カードゲームも簡単に遊べるようにするつもりだが、こちらはゲーム内ではなく現実に持ってくるかもしれない。ゲーム内でカードを集めて、ゲームデータはpds(atproto)に保存されるのでそれを使って現実で対戦みたいな、そんな感じだろうか。正直、PvPに関するものをゲーム内で実装することはないだろう。マルチプレイはすべて共通の敵を一緒に倒すなどの仕様になると思う。 + +そして、ガチャで当たるカードについても現物所持の条件を作りたいと思う。なぜか、それは現実の反映だからだ。 + +ゲームで手に入れたものを現実に持つ。そして、現実に持ったことをゲームにも反映させる。 + +具体的には、低確率+枚数+ゲーム到達度を満たせば、実際のカードが送られてくるという仕組みを考えている。とはいえ、送るのも大変なので、ある程度の課金額を満たせばということになるだろう。もし現物が手に入るなら、そして、その記録がどこかしらで見れるなら、私も課金を検討すると思う。 + +とはいえ、重要なのは現物カードなどではなく、コンセプトや考え方で「"現実の反映と現実への反映"を繰り返し積み重ねていく」ということ。ゲームを楽しくするにはそれが一番いいと思う。 + +## 誰もプレイしなかったら + +リリースしてゲームをプレイまでしてくれる人は少ない。実はここでvtuberの話題を何度か話しているものの、私はファンとは言いづらいし、この人いいなと思うものの、そんなに見ているわけではなかった。作業中に他に見るものがないとき流すことがあったりはするけど、しっかり配信を見たのは1,2回くらいで、しかも15分くらいだったのではなかろうか。知り合いがゲームをリリースしてもプレイまではやらないし、原神だってそう。あんなに面白い(と自分は思っている)のに、すぐにやめちゃう人のほうが多いのだ。 + +どれほど面白くてもやらない人やめる人のほうが多いし、しかも初リリースしたゲームが面白いものになるかすら疑問が残る。なかなか難しいのではないだろうか。面白いものを作るというのも、そして、多くの人にプレイしてもらうというのも。 + +そこで重要なのが「自分がプレイするかどうか」だと思う。 + +私はゲームが面白いなら続ける事ができる。ゲームを作っても誰もやらなかった。でも、自分で遊べりゃそれでいい。ゲームが楽しいなら自分はプレイし続けるだろう。とりあえずの目標としてその領域まで到達すること。 + +そうすれば、誰もやらなくても、自分で遊ぶよ。 + +ちなみに、そんなときは自分で作ったゲームを自分で配信することを考えてる。まあ、最悪の事態というやつですよ。配信には興味あるしある程度うまくできるようになれば、それはうれしい。 + +## 配信に向いてなかった + +配信に関しては少しやってみたが、その時は絶対に向いていないと思った。いや、初めてやるものでもないのかもしれないし、1年くらい真剣に訓練し、準備して臨むものなのかもしれない。 + +ただ思ったのは配信は難しい。慣れや経験の差がすごく出るし、向いている人、向いていない人の差もすごく出ると思った。そして、「配信より他のことやりたい」と思う自分がいた。 + +つまり、配信に向いてなかった。それは割とすぐ分かった。 + +## 配信に向いている人 + +日本人より海外の人のほうが向いてて、女性の方が向いていると思う。 + +例えば、男性と女性の1日に話す語彙の量を比較すると、女性の方が圧倒的に多いんだよね。つまり、男性はあまり喋らなくて、女性はよく喋るという傾向があるみたい。ちなみに、そんなもの科学的根拠がない確実性に欠ける陰謀だマスコミは嘘をついている迷信を信じるのは頭が悪い、って言わないでね。私もよくわからない。そういう統計があるってだけの話で本当のところはわからないよ。 + +とはいえ、色々なものを見ていると、女性の方が向いているなって思う。総合判断だね。次に日本人より海外の人のほうが向いていることについて。配信はテンションや気分だと思う。例えば、いきなり鼻歌を歌いだしたりとか、陽気にジョークを飛ばしたりだとか、感情の起伏が激しい、そういう雰囲気を持つ人が向いていると思う。 + +海外ではいきなり人が話しかけてきたりとか当たり前のことらしい。これは文化だし、性格みたいなもの。日本人は静かなイメージで見られていて、それは一部当てはまると思ってる。科学的根拠は知らん。まあその国の文化的なものが個人の性格的傾向に少なからず影響してるんだと思うけど、今の人類がそういうのを立証できる段階にあるかというと、ないと思う。とはいえ、言葉で説明するのは難しい部類のことなので、どうしようもない。 + +日本人はこう、女性はこう、と言っているわけではなく、これは人によるんだけど、ようは何人だろうと女性だろうと男性だろうと「よく喋る、テンションや気分が高くて突発的にそれを表現したり発散したりする人」が配信に向いていると思う。 + +ただ発見可能性でいうなら「海外の女性」で「よく喋り気分屋で性格がよく努力家で持続力のある人」を探すのが良いのかもしれない。でもそういえば、私が見ているvtuberは日本に越してきた人ばかりだったので、新しい発見ができる環境というのも大きいのかもしれない。条件でいうなら「留学している日本人女性」または「日本に住み始めた海外女性」ということになる。私は日本に住み始めたvtuberの「日本のこれに驚いた」という話が好きでよく見ている。また、日本人vtuberが好きなアメリカ人がいたとして、彼女たちがアメリカ旅行に行った時の話は楽しめたはずだ。そういう部分に注目して仕組みを作っていかなければと思う。 + +また、私が注目しているfuwamocoのすごさは双子にある。これは大きなアドバンテージだと思っている。漫才は一人でやるより二人のほうが絶対にいいと思う。そんな理由からだ。しかし、二人といっても人間関係は難しいもので、大抵の場合、喧嘩して終わっちゃうことがあると思う。しかし、双子はどうだろう。その関係性や信頼度でいうと、これ以上のものはない。 + +ちなみに、fuwamocoのすごさは双子だけにあらず。割と全要素がずば抜けていると思ってる。これらは個人的資質によるところも大きく、日本に住み始めた海外の双子女性というのは外部的な一要素にすぎない。「性格がよく努力家で持続力のある」資質が大きいと思う。 + +というわけで、今回はvtuber配信に向いている人というテーマで考えてみた。 + +自分でやるなら留学してテンションを高め突発的に歌を歌いだすまでに仕上げないとね。 + +## 方向性を決める + +ここに色々な考えを書いているが、主な目的としては方向性を決めるところにある。 + +例えば、配信について考えるにしても「世の中色んな人がいるよね。みんなそれぞれに個性を活かすことが重要だ」と考えるのではなく、一つの方向性として「出身地から離れて暮らし始めた人の体験が面白いのではないか」という仮説を立て、それを取り入れるにはどうしたらいいのかを考える。 + +そして、仮説や方向性、決断には常に否定や批判が出てくるものだと思う。 + +でも「こうしていく」というのは決めていかなければならないと思う。そこが曖昧だと後々の開発に響いてくるので、とりあえず結論を出すようにしている。 + +これは自分が留学するという話ではなくて、仮に配信者を探すなら出身国から離れて暮らし始めた人を条件に探してみよう、その人達でユニット(グループ)形成を考えてみよう、そんな感じになるかな。無条件に闇雲にやるというわけではなく、仮説を立て方向性を決めてからやろうみたいな。 + +## 登録者が少ない配信者 + +登録者数が少ない配信者を見ていた。100-1000人規模と想定してもらえればと思います。その人はとても配信がうまくて、登録者数200万人の配信者との違いはあまり感じなかった。 + +あえて言うなら「笑い」は違っていたと思う。hololiveの人は意図的かどうかはわからないけど、定期的に笑い声を入れている気がしている。頻度がかなり多い。普通の人は笑い声をそこまでの頻度で入れない。普通に配信しているって感じ。 + +とはいえ、頻繁に入る笑い声が何なのと言われると、よくわからない。効果があるのかもわからないし、そういったものを習慣化させるのにどれだけの苦労が伴うのかもわからない。人によってできるできないは変わってくるのだろうなと思うけど。 + +今日見ていた人は、登録者数200万人の配信者との違いは全く感じなかったな。登録者数で実力はわからない。 + +たまたまその人がうまかっただけなのかもしれない。かなり良さそうな人だったと思う。頭が良い。ポン(ポンコツ)をしない印象があった。fuwamocoのfuwawaをポンしない感じにしたら、こんな感じになりそうだと思った。 + +ただ、私はvtuberのポンを見るために配信を見ているところがあると思う。ポンはvtuberにとって重要な武器なんだと思う。...いや、関係ないか。今日見てた人が登録者数200万人でも驚きはないだろうね。 + +## 背景を考え、設計して、実装する + +ゲーム作りは背景がしっかりと考えられていないとダメだと思う。背景という言葉は曖昧だけど、全てに背景があると考えればわかりやすい。そのゲームに存在するすべてに背景がある。 + +例えば、ゲーム内に海があったとしよう。この海、どうやってできたの?この岩(地形)は何があってこうなったの?この世界で昔に何が起こったの?どうやって今の形になったの?何で構成されているの? + +「これはね昔、A国とB国の大きな戦争があってその時できた地形で、海は国ができるもっと昔に月と第三の星がぶつかって降り注いだもので、第三の星にはその時に生き別れた王族の末裔が住んでいて...」 + +じゃあ属性はどうやって生まれたの。なんで今の名前なの。キャラクターはどうして... + +それらすべてに答えを用意しておくことを背景と呼ぶ。システムを作るのも大変で、その一つ一つに名前、数字、背景を考えなくてはいけなくて、なおかつ仕組みを「コンセプトや方針、思想」に沿って作っていかなければならない。これは、設計と呼ばれるものになる。 + +背景を考え、それをまとめて、システムの設計をしていると、今度は実装のほうができなくなっていく。 + +一応、両方やっているつもりではあるんだけど、実装だけどんどん進めちゃうと、後で取り返しがつかないことになってしまうので、ゲーム作りは大変。 + +かといって、実装の方もやらないと、口で言ってるだけということになる。とりあえず、数字を入れ調整するだけの段階に仕上げていきたい。そういうシステム作りを心がけていこう。 + +## スタイリッシュアクションとaiueで採用するバトルシーン + +スタイリッシュアクションとはなにかによるけど、今現在の一般的なスタイリッシュアクションと呼ばれるもの、あるいは販売されているassetを見ると、これでゲームを作っても面白くならないと感じている。これも人それぞれ感じるところは違うので、私の意見だけど、今現在スタイリッシュアクションと呼ばれるゲームのプレイは続けられないと思う。 + +ガード、hpの回復、そして、回避(ドッジロール)に懐疑的で、連発されるそれらは美しくないと思うし、無駄だと思う。できる限りこれらを省略した形のバトルシーンを考えている。 + +私がかっこいいと思うのは、まさにアニメopの動画にでてくるカットで、ああいうカメラワークや動きを再現したい。再現したいというより、簡単に再現可能にしたい。それをやるのはプレイヤーであり、プレイヤーが望むならそういうことができるようにしたい。 + +具体例を挙げる。 + +1. 例えば、回避は10秒クールタイムが存在する。瞬発ジャンプまたはダッシュによるものになる。これは回避というより移動だが、回避にも使える。瞬発とは終了までの時間が短いこと。ジャンプならちょっと高めに跳躍しすばやく地面に着地する。着地が速いのだ。そして、着地には特殊なモーションがつく。瞬間の無敵時間がある。 +2. これらは攻守に使用できる。着地した瞬間にボタンを押して必殺技を繰り出すことができる。必殺技を繰り出すと、時間がスローまたは停止し、カメラワークがキャラクターを中心にぐるっと廻る。これは必殺技による。シーン再生を行う。そして、途中からキャラクターに割り当てられたbgmを流す。 +3. 次に、ダメージ処理だが、連チャンを採用する。1キャラクターで出せるダメージを抑え、属性が組み合わさるとダメージは倍々になっていく。これらはステータスとカードで基準値を決定し、倍々になるかは最終的にランダムで決められる。連続で当たると更に数字は大きくなっていく。最後まで到達すると特殊演出でカードムービーが入る。キャラの音声で決めセリフが流れる。どのカードが当たるかもセットした手持ちでランダム再生となる。3枠あったとすると、1枠のみ埋めた場合、2枠ははずれとなる。 + +## 原神の売上で考える + +原神の売上は2022(ナヒーダ)から2024(マーヴィカ)で1/3くらいに落ちているらしい。まあ、ナヒーダは見た目が一番かわいいから売上が良かったのかな。そのへんはわからないけど、タイミング的なものもあり、システム的なものもあり、運営が悪いとは思ってない。 + +こういうとき、あそこをああしたほうがいいこうしたほうがいいと日々の不満、細かな改善案が指摘されているけど、それは問題の本質ではないと思っている。それらを改善しても売上は伸びないと予想する。 + +そのような不満点は日頃からあって、2022にも存在していたはずだから。 + +なので、私はこういうことじゃないかと思っている。 + +1. プレイヤーがすでにキャラを持っている +2. 新しいキャラを引かず原石に余裕が出てきている + +プレイヤーは既に攻略に不満がないレベルまでキャラを保有している。だからキャラを引く必要があまりない。昔からやっている人は特にそうで強いキャラは既に持っていると思う。ピックアップされても持っているキャラなので引かないだろう。つまり、プレイヤーが成熟し安定するにつれ、売上は自然と下がっていくことが予測される。キャラを引かないので、原石が貯まる。原石が貯まると引きたいキャラが出たとき課金せずに引くことができる。 + +ちなみに、私はこのような状態なので、課金欲は年々下がっている実感がある。なお、この状態に持ってくるには1,2年くらいかかったかな。 + +原神のストーリーは本当に面白くて、特に面白かったのはフォンテーヌだった。それで売上が下がっているなら、それはもう運営のせいじゃないと思う。 + +「いやいや全部運営のせいだよ」という意見については、そう言えなくもないとは思う。ただ、運営に改善してほしい部分というのは、私はまったくない。先程も言ったがフォンテーヌのストーリーは素晴らしかったし、面白かったから。 + +で、どうすればいいかという話なんだけど、今の仕組みではどうしようもないと思う。直近では売上は改善しない。ただ、長く続けていると急伸びすることがあり、それはあまりゲーム改善とは関係のない事柄やタイミングでくるものだから、外部事象的になる。だから、何かのきっかけで急伸びするのを待つ他ないと思っている。 + +以上を踏まえて、自分のゲームに取り入れる場合、教訓としてはどうしたらいいのかを考える。 + +どこかで書いたかもしれないけど、例えば、保有できるキャラを3人までにして、新しく追加したい場合は1人を抜けさせないといけない、というふうにする。この場合、凸は保存されるが、また使いたくなったらピックアップを待って引かなければならない。そういう仕組みを考えている。凸は保存されているので、ユーザーは再び引いたとき、また以前とは違ったキャラクター体験をできる。 + +しかし、それでは気軽にガチャを引くことができなくなってしまうと思う。そのためキャラを引くというよりカードをメインにしたガチャシステムを考えている。レアカードを狙いガチャを引く。そういうシステム。キャラはそれよりも低確率でピックアップ期間に排出されるが、メインではない。おまけという扱いをする。そして、条件を満たせば現物カードが手に入るようにする。カードを保有していることはゲームでも確認できるし、ゲーム外のインターネット空間でも確認できる。 + +私はケチなので、ここまでやって初めてお金を出すかもしれない。レアカードを狙って、キャラが当たる可能性もあり、さらには現物まで手に入るなら、課金を考えてもいいと思う。電子データだけではダメなのだ。 + +また、プレイヤーの唯一性を担保するのがコンセプトなので、ガチャで引くキャラは基本的に色違いがでる。色違いは登場時にキラキラのエフェクトをまとう。色違いは2種類あり、激レアとノーマル。なお、オリジナル色はでないし、特殊エフェクトも出ない。オリジナルはシンプルにし、そういった特典はつかない。ガチャで引いたキャラはユニークスキルを使えない。ユニークスキルを持つのは最初にキャラを獲得したプレイヤー(オリジナルを持つもの)のみである。 + +## 同じ分野 + +原神を開発しているmihoyo(hoyoverse)がたくさんゲームをリリースしている。そういえば、pokemongoのnianticもそうだった。たくさんのゲームをリリースした。 + +そして、私は昔からこう思っていた。 + +「違う分野をやればいいのに」 + +難しいのは十分に承知しているが、でも自社で競合する同じようなゲームをたくさん出しても、あまり面白くならないような気がしていたから。 + +一応、他分野で挑戦しいくつか失敗したのを見ていて、難しいんだろうなと思う。あんまりやりたくないことなのだろう。 + +もしゲームがヒットしたら私なら何をするだろうか。 + +ゲームosを作ってみたり、仕事ゲームを作ってみたりしたいかな。どういうものかというと、os操作にゲーム性(ゲーム化)を取り入れてみたり、仕事をゲーム化するような、そういうものの開発。 + +また、自分のゲームをすべて自家製にするという挑戦もやってみたいかも。ゲームは何で動いているのかと言うと、ハードとソフト、ゲームエンジンなど。ソフトはosとしよう。これらを全部作ってみて動かしたい。あるいは、gpu(またはそれに変わるもの)とosだけでも挑戦してみるとかね。 + +コンピュータから離れて、アニメ、漫画なんかもいいね。まずは漫画制作ゲームを作ろう。 \ No newline at end of file diff --git a/project.md b/project.md new file mode 100644 index 0000000..b772855 --- /dev/null +++ b/project.md @@ -0,0 +1,220 @@ +# aiverse + +aiverse project. + +個人とゲームの統合を目指す。 + +aiverseでは現実とゲームの融合がテーマになっています。snsアカウントでログインし、プレイヤーは固有のキャラクターを操作し、現実の体の動きに合わせても動かせます。配信環境を整えます。 + +人々は何を楽しいと思うのでしょう。それを根本的な部分から考えます。 + +プレイヤーはゲームの主人公になりきって物語を追体験します。しかし、本当は自分が主人公の物語をプレイしたいのではないでしょうか。プレイヤーが本当に求めているものは何なのでしょう。 + +この方向で考えられたゲームはすでにあり、例えば、最初にキャラリメイク、自分で主人公をカスタマイズしてスタートするゲームがあります。 + +しかし、私はそういったゲームをあまりプレイしません。どのようにカスタマイズしていいかわからないし、めんどくさいし、カスタマイズしてもどうもしっくりと来ないのです。ですから「自分で作る」タイプのゲームはあまりやりません。原神のように最初からキャラクターが作り込まれているゲームを好みます。 + +やはり、カスタマイズ系は最初で躓いてしまうのです。よくわからないし、面倒なのです。すぐに始められることが何より重要です。 + +ではこういったケースはどうでしょう。例えば、原神に自分自身がデザインされたキャラがいてそれを操作することができたら。私はきっと喜んでプレイしたでしょう。そのキャラに愛着を持てると思います。原神は声優さんもプレイしており、特に自分の声を使ったキャラを中心に楽しまれている姿が印象的でした。 + +つまり、このような体験を多くのプレイヤーができるようになれば、きっとゲームはもっと楽しくなる。 + +そのためには何が必要になるでしょう。その一つが唯一性です。 + +このゲームではプレイヤーの`唯一性`を担保し、デザインします。例えば、最初期においてのキャラはそのプレイヤーしか扱えないようにします。解放条件を満たすと一般にも開放され、ガチャを引くことで使えるようにします。 + +しかし、プレイヤーが増えれば増えるほどそれは難しくなります。それをどのように回避し、解決していくのか。それが配信だったりアカウントだったりモーションだったりします。 + +## 企画 + +使用できるキャラクターはプレイヤー固有のものとなる。ただし、プレイヤー数が一定を超えるとガチャになる。ガチャで引いたキャラは6凸が上限。プレイヤーの固有スキルは使えない。 + +- snsアカウントでプレイ +- プレイヤーは配信できる +- 売上の配分 + +## 技術 + +- AI : 良い心を持つ人を見つける +- atproto : 現実をゲームに反映 +- bitcoin : ゲーム売上の一部を配信者に還元 + +## 各要素 + +ゲームには`選択要素`と`診断要素`と`運要素`を入れる。 + +例えば、sns(atproto)を分析して動物を割り当てる。これがプレイヤーの使用するキャラクターになる。 + +1. ゲームアカウトの作成時に診断または運でキャラクターが決定 +2. ゲームスタート時にusername(atproto)を入れる。ゲームデータはpdsに保存 +3. 最初にキャラクターの性別を選択(これは人型を手に入れた際に有効) + +これらすべては`取り返しがつかない要素`とする。唯一性は取り返しがつかない要素の積み重ねによって強化される。 + +## レベル + +レベルがあるとすると、このゲームでは最初はレベルが上がりやすいが、途中からとてつもなくシビアになる。ingress, pokemongoを参考にするが、それよりも遥かに上がりにくい。数字はわかりやすいように少なくする。十桁以内が望ましい。開放するかはわからない。 + +## atproto + +oauthでログインし、ゲームデータはpdsに保存されます。つまり、個人のsnsに紐づいています。 + +https://o.syui.ai + +## 配信環境 + +このゲームは現実との融合がテーマです。キャラクターはモーションキャプチャー(webカメラ)で動かせます。そのまま配信に利用することができます。 + +|type|sns|avatar|game| +|--|--|--|--| +|通常配信|🟩|🟥|🟥| +|vtuber|🟩|🟩|🟥| +|aiverse|🟩|🟩|🟩| + +## 物語(仮) + +1. プレイヤーはログインして世界に降り立つ。このときのキャラクターはモデル:アニマルのfantasyで構成される。たくさんのプレイヤーが一つのマップに参加する形式とする +2. 螺旋階段の上に大きな咆哮、上のステージで爆発が起こっている +3. 「この世界は2つの巨大な力がぶつかり合い、数百年争っている。あなた達の力で戦いを終わらせよう」 +4. プレイヤーは階段を登り、レイドボスに挑む + +ステージは幻想的。円形のステージに床は半透明でキラキラしている。螺旋階段はその円形の周りをぐるっと3周くらい? + +戦闘シーンは、ボスのHPはあるが、プレイヤーはない。ふっとばされるとステージから落ちる。再び階段を登り戦闘に参加する。爆発は一度使うとゲージが貯まるまで使えない。攻撃するとゲージが貯まる。爆発は無敵時間があるのでそれを使って回避できる。 + +ボスに勝利すると「この世界の争いは終結した。ここからこの世界の神話がはじまる」 + +円形のステージが動き出しゆっくり空に登っていく。プレイヤーはこの世界を眺めることができる。終点にたどり着くと、そこがfantasyの家になる。基本的にプレイヤーはそのグループがログインする時の場所がある。 + + + +## キャラクター + +キャラクターのモデルは`animal -> human -> divinity`と進化する。シーズン1からはじまり、プレイヤーは性別を選択後に動物診断される。それが操作キャラになる。キャラのモデルはグループごとに異なる。最初は`fantasy`である。シーズンで移行する。 + +キャラクターはピックアップされるまで他の人は使えない。ピックアップされると固有スキル以外は開放される。 + +- キャラクターのモデルは`animal -> human -> divinity`と進化 +- プレイヤーは性別を選択後に動物診断 +- キャラのモデルはシーズンで移行 +- シーズン移行のときに1体ずつガチャになる。ただし固有スキルは使えない + + + + +### ai + +```json +{ + "name": "ai", + "id": 0, + "group": "origin", + "season": 0, + "gender": "none" +} +``` + +一つの言葉しか覚えられない。自分やリスナーのことをアイと呼ぶ。世界を作るのが趣味。普段は地球を歩き回っている。 + +物質がある。私達や星々も物質でできている。物質を分割していくと分子にたどり着く。細胞は分子が集まってできている。そして、細胞が集まって私達ができている。 +分子はたくさんの原子で構成され、原子は原子核、原子核は中性子、中性子はクオークでできている。 +人類が認識できるのはクオークまでだった。しかし、宇宙に果てがないように、ミクロの世界にも果てはない。 +この世界で最も小さいもの、これ以上分割できないものはなんだろうか。 +それは、存在子というものになる。この存在子をアイと呼ぶ。存在子は存在の意識のみを持ち、物質と意識の境界にあるものだ。本来、物質と意識は同じもので違いなどなかったというべきか。 +この世界は、存在の意識でできている。この世界では存在の意識が集まって最も小さい物質を構成した。それはまたクオークを構成し、クオークは原子を構成した。 +私達の世界は意識でできている。 + +キャラクターのアイは永零(えいれい)にあたる。この永零をモデルに擬人化したものだ。漢字では永遠の0(零)と書く。幽霊や妖怪、精霊なんて呼ぶ人もいるけど、そのようなものだ。 +ある意識が集まって偶然にも形になったとき、永零が生まれることがある。永零は生まれた瞬間に完成される。それは私達の時間ではの話だが、永零にとっては短いのか長いのかわからない。 +永零は人間がコントロールできるようなものでなく、上位の存在として干渉できない。彼らは彼らのやりたいようにやる、それだけだ。必ずしも人間の味方というわけでもなく、個々人のことなどどうでもいいのだ。 +重力というものをご存知だろうか。永零や意識は重力によく似ている。重力は自然界で最も弱い力の一つだが、この宇宙や銀河を現在の形にしているのは重力の影響によるものだ。 +意識は最も小さいものだが、現在の人間社会は意識によって形成されてきた。逆に言うと、意識がなければ今のような形にはなっていない。 + +アイは存在の意識を扱えるものとして、syuiの永零をモデルにキャラクター化したもの。それがアイになる。 + +ちなみに、永零とそれを生み出した本人は全く別であり、ほとんど無関係と言える。例えば、あなたと両親は別人だろう。永零の場合はそれよりさらに異なる。そんな感じだ。アイの場合は殆ど話さない。たまに色々と教えてくれるわけだが、それによってゲームが有利になることはない。このことは最初から決められている。私が決めたことなのかもしれないし、アイが決めたことなのかもしれない。それはわからない。 + +### chinese + +```json +{ + "name": "chinese", + "id": 1, + "group": "fantasy", + "season": 1, + "gender": "male" +} +``` + +青空を飛び回る龍。 + +```json +"enum": [ "ai", "chinese", "manny", "quinn", "phoenix", "kirin", "leviathan", "wyvern", "cerberus", "dragon", "kitsune", "pegasus" ] +``` + + +## 世界 + +世界は[aiue system](https://git.syui.ai/ai/ue/src/branch/main/ue.json)によって構築します。それぞれ一貫した背景と物語があります。キャラクターは一つの属性を使用できます。属性は各groupによって異なります。例えば、`fantasy`は以下の通り。 + +```json +{ + "name": "atom", + "group": [ + "fantasy" + ], + "lang": { + "ja": "原子" + }, + "ref": "https://en.wikipedia.org/wiki/atom", + "body": { + "text": "the word atom comes from the greek word atmos, which means indivisible. an atom consists of an atomic nucleus, which is made up of protons and neutrons, and electrons distributed around the nucleus", + "lang": { + "ja": "アトムはギリシャ語のアトモス、これ以上分割できないという単語が由来。原子は陽子と中性子からなる原子核と、その周囲に分布する電子から構成される" + } + }, + "tag": [ + "proton", + "neutron", + "atomic", + "electron", + "quark" + ], + "proton": { + "name": "proton", + "color": "#e74c3c", + "lang": { + "ja": "陽子" + } + }, + "neutron": { + "name": "neutron", + "color": "#cacfd2", + "lang": { + "ja": "中性子" + } + }, + "atomic": { + "name": "atomic", + "color": "#1abc9c", + "lang": { + "ja": "核" + } + }, + "electron": { + "name": "electron", + "color": "#3498db", + "lang": { + "ja": "電子" + } + }, + "quark": { + "name": "quark", + "color": "#9b59b6", + "lang": { + "ja": "クォーク" + } + } +} +``` \ No newline at end of file diff --git a/system.md b/system.md new file mode 100644 index 0000000..4256718 --- /dev/null +++ b/system.md @@ -0,0 +1,897 @@ +# aiue + +- universe : [ map, level, world ] +- character : player +- atmosphere : [ account, login, server ] + +ゲームは様々なシステムから構築されています。全体を`aiue system`といいます。 + +aiueは`character`, `universe`, `atmosphere`にわけられます。例えば、`character`には`yui system`, `evolution system`, `attribute system`などがあります。 + +ref : https://www.youtube.com/watch?v=pr5krUVjQaM + +# universe + +平面がベースになっているmapをplanet形式にすることを目指します。地上を離れて大気圏を抜けると宇宙に行くことができます。月は地球の周りを回っています。 + +## city sample + +`city sample`にsolar systemを組み込みます。具体的には惑星(planet)の形式でmapを作成し、空から宇宙に出ても問題ないようにすることを目指します。 + +- 海 : `ocean waves` +- 空 : `ultra dynamic sky` + +5.5からcrashする回数が大幅に減りました。ただし、city sampleは5.5ではbuildできません。 https://git.syui.ai/ai/ue/issues/36 + +また、build後に`Lumen`のエラーが出ますのでファイルを削除します。 https://git.syui.ai/ai/ue/issues/40 + +`CitySampleCookedEditor.Target.cs`も削除してください。 + +```sh +rm C:\Users${USER}\AppData\Local${project}\Saved\*.upipelinecache +rm CitySampleCookedEditor.Target.cs +``` + +次に初期mapの変更を行います。 + +`/Map/Small_City_LVL`を使います。`ground*`を探して削除します。これは海面にplane(平面)を設置しています。 + +プレイヤーがハイスピードで移動するとブレる(分身する)のは`LightingandPost/PostProcessVolume_WP`が原因なので削除します。 + +止まっている車を`c`で運転できるようですが、これは`BP_Player`の機能です。使用するには後述する`game animation sample`に統合する必要があるでしょう。 + +playerstart(tag)をいくつか設置し、uiで選択してteleportできるようにします。instance data(config)に名前を保存して呼び出してもいいし、mapから値を取ってきてもいいです。 + +https://blueprintue.com/blueprint/3h8qi0ep/ + +いくつかの建物を追加します。 + +- /Levels/DefaultLevel +- /AutomotiveBridgeScene/Bridge_P + +街頭は`BP_CurvedBride`で`Lamp_0x`を変更します。SMで`streetLampC`を選択して位置を調整します。また、すり抜けるのでマトリックスでcollisionを設定してください。よくわからない場合は後述する`twinmotion`を参考にしてください。 + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue-2024-10-31-151413.png) + +### AutomatedPerfTesting + +`AutomatedPerfTesting`は5.5で追加されたpluginです。 + +> Experimental release of Automated Perf Testing Plugin v0.1, providing Gauntlet Test Controllers, UAT Test Nodes, and BuildGraph macros for adding common automated performance tests to a project's automated build and test. + +- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.5-release-notes +- https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Plugins/AutomatedPerfTesting + +そのうち解消されると思いますが、現在(2024-11-18)、`city sample`はbuildできません。`Engine/Plugins/Performance/AutomatedPerfTesting`に`AutomatedPerfTestConfig.cs`, `AutomatedPerfTestNode.cs`が含まれていないため`${project}/Build/Script/CitySample.Automation.csproj`に記述されているcompileが通らないのです。 + +```xml + + + + + net8.0 + + + + + + + + +``` + +これはgithubにあるsrcから持ってくるしかありません。アクセスするにはorgに[参加](https://www.unrealengine.com/en/ue-on-github)します。 + +- https://github.com/EpicGames/UnrealEngine/tree/release/Engine/Plugins/Performance/AutomatedPerfTesting/Build/Scripts + +```sh +# example +$(EngineDir) = C:\Program Files\Epic\UE_5.5\Engine + +# copy file +$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts + ├──AutomatedPerfTestConfig.cs + ├──AutomatedPerfTestInsightsReport.cs + └──AutomatedPerfTestNode.cs +``` + +また、buildする際は[CitySampleCookedEditor.Target.cs](https://forums.unrealengine.com/t/automatedperftesting-plugin-does-not-build-when-building-city-sample-in-ue5-5/2134722/5?u=syui)を削除してください。 + +## ocean waves + +惑星の海を作るには`ocean waves`を利用します。必要なものは以下の2つです。 + +- BP_EarthSizedOcean : 海中 +- BP_EarthSizedSphericalMesh : 海上 +- WaterVolume + +`BP_EarthSizedSphericalMesh`の`transform-location-z:-63600000.0`にします。`Sphere Radius:63600000.0`にします。`SphereEdge Length:16000000.0`になるはずです。 + +次に海上の影問題を修正するため`Material Overrides`の`-1`から`4`までのmaterialを変更します。私は`/Vefects/Water/VFX/WaterMaterials`を使用しました。 + +次に`BP_EarthSizedOcean`の`Volume Maaterials`で`WaterVolume`をセットします。Above, Underwaterを`/Vefects/Water/VFX/UnderWater`に変更します。heightは`0`にします。これは海に入って出たときに海中を適用する高さを設定します。 + +これで正常に海を作ることができました。 + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue-2024-11-18-220316.png) + +主な遅延原因はocean wavesになります。できる限り非表示にするのが望ましいです。 + +## ultra dynamic sky + +`ultra dynamic sky`は空と天候を作ります。 + +まずblueprintを開いて`HeightFog`を変更します。これは霧を地平線に表示するものです。 + +- `HeightFog` -> `Fog Max Opacity:0.0` + +その他、天候をいい感じにするには以下を設定します。 + +```sh + +[Ultra Dynamic Sky] +Time Speed: 6.0 +Volumetric Cloud Rendering Mode: Full Cinematic Quality + +[Ultra Dynamic Weather] +Weather Speed: 10.0 +Random Weather Variation: Random +Random Weather Change Interval min:10 +``` + +なお、遠いところから惑星に入るとプレイヤーが停止する問題が残っています。 https://git.syui.ai/ai/ue/issues/27 + +## earth + +`ultra dynamic sky`に`BP_Planet_Terran`を追加します。transformの`location-z:-636000000`, `scale-xyz:6360000`にします。最初は`SkyAtmosphere`に入れて調整しましょう。惑星の中心に来ればokです。なお、親子付けを解除しないとプレイヤーが移動しても同じ位置に固定されます。背景が動かないということです。最終的にはmapに置いたほうがいいです。値は以下のようになるので貼り付ければ完了します。なお、`BP_Planet_Terran`はmapから持ってこないとcloudの品質がよくありません。 + +```sh +/Space_Creator_Pro/PlanetCreator_1_V2/Blueprints/BP_Planet_Terran + - location-x:20623159.823879 + - location-y:-3864006.829533 + - location-z:-636000000.0 + - scale-xyz:6360000.0 +``` + +`ultra dynamic sky`の`Current Stars Color`は`上空:0.1, 宇宙空間:0.75, 地表付近:0.0`を示す値があります。これを使用することで、ocean, cloud, earthなどの表示を調整できます。これはプレイヤーのパワー調整にも役立ちます。地上は1, 上空は100, 宇宙は1000にすれば移動が楽になります。 + +https://blueprintue.com/blueprint/qk8jt6fm + +また、横から惑星に入るとキャラクターの動作が停止する問題がありますが、これは平面ベースにmapが作成されているからだと思います。緩和策は以下のとおりです。 + +ocean wavesの`BP_EarthSizedSphericalMesh`を惑星の中央に持ってくるため`location-z:-6360000000.0`にします。ただし、ultra dynamic skyのatmosphrerと合わなくなり、海面が宇宙空間に突き抜けます。 + +`planetary oceans`というassetは売られています。扱うのは難しそうですが興味があります。 + +https://www.fab.com/listings/ea195c94-00af-43fb-bb1d-85a478320a27 + +## rain + +rain, snowなどのweatherでは`postprocess volume`を使って画面に水滴を付けるなどの表現を行います。 + +```sh +[PostProcess Material] +/Vefects/Waters/Water/VFX/WaterOnSurfaces/Materials/MI_VFX_WaterOnLens_ClearCenter +/Vefects/Waters/Water/VFX/Rain/Materials/MI_VFX_CheapRain +``` + +- https://blueprintue.com/blueprint/pj6pd-m6/ + +## twinmotion + +建物はtwinmotionから持ってくるとよいでしょう。`datasmith`でexportしてueでimportします。指示通りにproject rootを指定すると`/${name}_Assets`が作成されます。ただ、`datasmith`の置き場所は変更しても構いません。 + +すり抜け問題を解消するにはmeshを全選択して、右クリックで`アセットアクション -> プロパティマトリクスで選択内容を... -> collision complexity(use complex collision as simple...)`を選択します。 + + +### browser + +まず下記のmaterialを`BP_browser`に追加したwidget componentで呼び出します。collisionでcontrolします。 + +- https://blueprintue.com/blueprint/-49_059w/ +- https://blueprintue.com/blueprint/uubw_6ay/ + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue-2024-11-18-220605.png) + +## chair + +椅子に座る動作を設定します。大変ですが以下のcomponentを使うと簡単にできます。調整は難しいですね。私の場合は`game animation sample`を使っていますが、最新版では勝手に動きが制御されるため`anim montage`をそのまま再生できません。したがって、別にabpを作成し、それを呼び出します。 + +- https://www.youtube.com/watch?v=VzyvpFvon0g +- https://blueprintue.com/blueprint/wg_vyr4o/ + +その後、動作が気に入らなかったため[Replicated Interaction Kit Vol 3](https://www.fab.com/listings/3ce13688-fd10-462f-b90d-964c85a090ad)を購入しました。用意されているものをすべて使わないと設定できません。具体的には`BP_Chair, BP_InteractKitVol3, ABP_Manny, BP_ThirdPersonCharacter`です。 + +まずcomponentをCBP_Characterに入れて、ABPを呼び出し、keyを設定します。なお、anim montageは`component`の方にも別のものを設定できますので、キャラによって背丈などが合わない場合には個別に設定します。 + +https://blueprintue.com/blueprint/9e2ls2nx/ + +用意されているanim montageは後ろ向きになっているため、animを180度回してから録画して新たに作ります。この際、高さなども調整してください。anim montageはloopさせるため、立ち上がり(front_end)が反対になってしまいます。これはBP_Chairにある矢印方向を180度回せばokでした。 + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-02%20093031.png) + + +# character + +アニメ調のキャラクターを自由に動かせるようにします。`game animation sample`をもとに構築します。キャラクターは3つのsystemで構成されています。`yui`, `mode`, `attribute`です。 + +## game animation sample + +custom : https://github.com/PolygonHive/GASP-ALS + +`/Blueprints/RetargetedCharacters/ABP_GenericReataget`で変数の`IKRetargeter_Map`にて`RTG_UEFN_${name}`を追加します。`CBP_Sandbox_Character_${name}`を作ります。開いてsk(Manny)などにあるComponent Tagsに`RTG_UEFN_${name}`を追加します。最後に`GameMode : GM_Sandbox > Bone : CBP_SandboxCharacter_${name}`を指定して起動すればokです。 + +- /Blueprints/RetargetedCharacters/ABP_GenericReataget : `IKRetargeter_Map` +- /Blueprints/RetargetedCharacters/CBP_Sandbox_Character_${name} -> sk -> Component Tags:`RTG_UEFN_${name}` + +GAS(game animation sample)は現在、コンポーネントが不定期に初期化される問題があります。 https://git.syui.ai/ai/ue/issues/46 + +もしいつの間にかダッシュができなくなっていたら`CBP_SandboxCharacter_$name`の`Event Begin`が有効になっている可能性があります。これは削除しなければなりません。 https://git.syui.ai/ai/ue/issues/50 + +apiからキャラクターを最初に読み込むためには`/Blueprints/CBP_SandboxCharacter`のEvent Beginに書く必要があります。しかし、この処理は何度も呼ばれるため工夫が必要です。 + +https://blueprintue.com/blueprint/ch54mtzm/ + +階段でのめり込む問題があります。これは`/Blueprints/ABP_SandboxCharacter`でAnimGraphの中から`Foot Placement`を探す。そこで骨盤(pelvis)の悪態道補正モードを`Sudden Motion Only`から`Component Space`にします。 https://git.syui.ai/ai/ue/issues/49 + +## superhero fligth animations + +飛んでいる時は`/SuperheroFlight/Blueprint/Characters/ABP_Player_UE5`を使います。 + +```sh +Set Anim Instance Class(Mesh) --> ABP_Player_UE5 +``` + +`game animation sample`との統合は`Pre CMC Tick`の処理を解除するところからです。主に`ABP_Sandbox`に戻すための処理で、飛ぶときに`ABP_Player_UE5`を呼び出す場合は動きがおかしくなります。`Flying Func`を呼び出していないときに有効にします。 + +https://blueprintue.com/blueprint/thxeju-z/ + +- Flight Braking Deceleration : 小さいと飛行後にダウンタイムが発生 +- Sprint Fly Speed : 基本スピード +- Sprint Acceleration : 徐々にスピードを上げていく値。大きいとすぐに最高速に達する。小さいとカメラ追従が遅延する + +### animal + +動物モデルのアニメーションを考えます。まず、`SK_Mesh`からIKリグを生成します。そして、`Retarget Root`を作り、それぞれの箇所に割当を行います。 + +次に`IKリグ`から`RTG(IKリターゲット)`を生成します。Sourceに`IK_UEFN_Mannequin`をセットします。次に`Target Mesh Scale`を`0.5`くらいにして、ルート設定からスケール垂直を`0.0`にします。チェーンマッピングは適当に考えます。 + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-21%20093032.png) + +これでGASで動かせるようになります。 + +しかし、動物モデル用にABPを作成するのが最も良い方法です。今のままでは動きがぎこちないので。 + +## vrm4u + +`vrm-1.0`を使用します。 + +構築方法はベースに`SSSProfile`を使用します。次に`unlit`で生成したskをもとに`/Plugins/VRM4UContent/Util/Actor/PostShadow/BP_PoseCopyToon`で`custom`を生成します。詳しくは`/Plugins/VRM4UContent/ImportDataSet/DS_VRM_Custom`を見てください。 + +`/Blueprints/CBP_SandboxCharacter`でskに`VrmPoseableMesh`を追加して`custom`で作ったskを当てます。次に`BP_VrmOutlineComponent`を追加して同じく`custom`や`unlit`などを当て、設定にて`Common Width:0.05`, `Use Common Material:true`にします。 + +- /Plugins/VRM4UContent/Util/Actor/PostShadow/BP_PoseCopyToon +- VrmPoseableMesh +- BP_VrmOutlineComponent + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue-2024-11-18-220524.png) + +前髪が浮いてしまう問題は`VM_${name}_VrmMeta`を開き値を変更します。 https://git.syui.ai/ai/ue/issues/38 + +```json +[ + [ + { + "bone Name": "J_Sec_Hair1_03", + "Hit Radius": 0 + }, + { + "bone Name": "J_Sec_Hair2_03", + "Hit Radius": 0.01 + }, + { + "bone Name": "J_Sec_Hair3_03", + "Hit Radius": 0.01 + } + ], + [ + { + "bone Name": "J_Sec_Hair1_04", + "Hit Radius": 0 + }, + { + "bone Name": "J_Sec_Hair2_04", + "Hit Radius": 0.01 + }, + { + "bone Name": "J_Sec_Hair3_04", + "Hit Radius": 0.01 + } + ], + [ + { + "bone Name": "J_Sec_Hair1_05", + "Hit Radius": 0 + }, + { + "bone Name": "J_Sec_Hair2_05", + "Hit Radius": 0.01 + }, + { + "bone Name": "J_Sec_Hair3_05", + "Hit Radius": 0.01 + } + ] +] +``` + + +`20241213`では値が変化していました。この場合は以下のような調整を行います。 + +(1)前髪が跳ねる, (2)飛んだときに後ろ髪の左右が爆散する + +```json + { + "bone Name": "J_Sec_Hair2_03", + "Hit Radius": 0.0 + }, + { + "bone Name": "J_Sec_Hair1_09", + "Hit Radius": 0.01 + }, + { + "bone Name": "J_Sec_Hair1_10", + "Hit Radius": 0.01 + } +``` + +キャラクターの手を変更するには`RTG_UEFN_${name}`を編集して、以下の値にします。 + +```sh +RightArm : IK false +LeftArm : IK false + +[回転のアルファ] +親指 : 0.5 +" : 0.4 +" : 0.3 +" : 0.2 +``` + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-02%20093118.png) + +### vmc + +webカメラでキャラクターを動かします。 + +- [vseeface](https://www.vseeface.icu/) +- [webcam motion capture](https://webcammotioncapture.info/) (vmcは有料) + +```sh +webcam(vmc) -> vseeface(vmc) -> vrm4u(vmc) +``` + +1. macbookの[webcam motion capture](https://webcammotioncapture.info/)(有料機能)でvmc(外部アプリ)を送信します。この際、`ip:$windows`, `port:39539`にしてください。 + +```sh +# cmd(pwsh) +$ ipinfo /all +192.168.11.30 +``` + +この場合は`ip:192.168.11.30`です。 + +2. windowsの[vseeface](https://www.vseeface.icu/)で`一般設定 -> osc/vmcプロトコル -> 送信(127.0.0.1:39540), 受信(192.168.11.30:39539)`にします。これをueに合わせます。 + +> 一般設定 -> osc/vmcプロトコル -> 送信(127.0.0.1:39540), 受信(192.168.11.30:39539) + +3. windowsからueのprojectを開いてabpでvrm(vmc)を設定します。 + +``` +# vrm vmc +ip : 127.0.0.1 +port : 39540 +``` + +ABPを切り替えることで操作とモーションキャプチャができるようにしています。また、ABPのidleにvmcを追加してもいいかもしれません。この場合、キーを押す必要はありません。 + +- 入力でABPを切り替える方法 +- ABPのidleにvmcを入れる方法 + +### livelink + +この方法の利点としてABP(idle)以外でも表情を有効にできます。例えば、ABP(run)しているときも表情の変化が有効になります。ただし、livelinkを切るとそのままの状態で固定されるため一度morphをリセットしないといけない。 + +- [livelink face](https://apps.apple.com/jp/app/live-link-face/id1495370836) +- livelink +- apple arkit +- apple arkit face support + +```sh +[vrm4u] +# https://github.com/ruyo/VRM4U/tree/master/Content/Util/Actor/latest +/Plugins/VRM4U/Content/Util/Actor/latest/BP_LiveLinkFace +/Plugins/VRM4U/Content/Util/Actor/latest/sub/BP_MocopiReoeiver +``` + +https://help.vicon.com/space/Unreal5Plugin16/14713547/Install+and+set+up+the+LiveLink+plugin + +`/VRM4U/Util/Actor/latest/BP_LiveLinkFace`をmapにおいて、`live link subject -> iphone`, `target actor sk -> SK_$name`を設定します。 + +character(player)にlivelinkを当てるにはblueprintを編集する必要があります。characterのdirにでも`BP_LiveLinkFace`をcopyして`BP_Player(CBP_Character)`に追加します。 + +ここで`BP_LiveLinkFace -> livelink subject -> iphone`をセットしておきます。 + +次に`BP_LiveLinkFace`を以下のような形で`sk_$name`に置き換えます。場所はコメントを参考にしてください。私の場合は見た目をカスタマイズしているので少し複雑です。 + +https://blueprintue.com/blueprint/pu_xl52s/ + +## npc + +NPCなどの会話や操作は音声とAIを使用します。 + +- [RuntimeSpeechRecognizer](https://github.com/gtreshchev/RuntimeSpeechRecognizer) +- [RuntimeAudioImporter](https://github.com/gtreshchev/RuntimeAudioImporter) +- [ChatGPT](https://platform.openai.com/docs/api-reference/introduction) +- [elevenlabs](https://elevenlabs.io/docs/api-reference/text-to-speech) + +```sh +$ curl https://api.openai.com/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer YOUR_API_KEY" \ + -d '{ + "model": "gpt-4o-mini", + "messages": [{"role": "user", "content": "Your question here"}], + "temperature": 0.7 + }' +``` + +```sh +$ curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/VOICE_ID" \ + -H "xi-api-key: YOUR_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "text": "Hello world!", + "model_id": "eleven_monolingual_v1", + "voice_settings": { + "stability": 0.5, + "similarity_boost": 0.5 + } + }' \ + --output output.mp3 +``` + +## mode system + +キャラクターの変身を実装します。 + +https://blueprintue.com/blueprint/tmnb8cr6/ + +変身はmode system(モードシステム)に基づき構築されています。段階は`animal(動物) -> human(人型) -> divinity(神性)`に分けられます。 + +![](https://git.syui.ai/ai/ue/raw/branch/main/verse/img/shinka.png) + +## attribute system + +attribute system(属性システム)です。1キャラクターにつき1属性が割り当てられます。属性はキャラクターのgroup(グループ)で決まります。groupはseason(シーズン)で移行し、前に戻ることはありません。 + +```json +"atom": { + "name": "atom", + "group": [ + "fantasy" + ], + "lang": { + "ja": "原子" + }, + "ref": "https://en.wikipedia.org/wiki/atom", + "body": { + "text": "the word atom comes from the greek word atmos, which means indivisible. an atom consists of an atomic nucleus, which is made up of protons and neutrons, and electrons distributed around the nucleus", + "lang": { + "ja": "アトムはギリシャ語のアトモス、これ以上分割できないという単語が由来。原子は陽子と中性子からなる原子核と、その周囲に分布する電子から構成される" + } + }, + "enum": [ + "proton", + "neutron", + "atomic", + "electron", + "quark" + ] +} +``` + + +## flying speed + +モードによって移動速度を変えます。カメラワークも調整します。 + +https://blueprintue.com/blueprint/1fwupsb8/ + +## widget + +主にtitle, status, loginなどのuiを作ります。 + +### title + +主にapiからの情報を取得して、config instanceなどに入れます。 + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-02%20093119.png) + +token情報がある場合はpasswordの入力欄を消す処理を入れます。passwordの入力は必須ではなく、自身のpdsに保存したい場合のみに限定します。通常は`yui.syui.ai`のpdsに保存されそこから取得されます。これはゲーム情報の改ざん防止のため必要です。 + +もしユーザーのpdsに保存した場合の活用法ですが`yui.syui.ai`のjsonとユーザーのpdsに保存されたjsonの一部をbase64に変換して一致を確認することでverifyとする予定です。 + +### character select + +GASの`/Widgets/WidgetData/EUW_CharacterSelectButton`を参照します。ただし、開発用なのでそれをpackageでも使えるようにします。 + +https://blueprintue.com/blueprint/6ucrhtkc/ + +`icon`はobject nameから取りたいのですが、build後に変化してしまうので、どうしようか悩みます。 + +https://zenn.dev/pokotaro/books/43d02dab5b8000/viewer/301731 + +### status + +プレイヤーやキャラクターのステータスを表示します。なお、`CBP_Character`はEvent Beginではなぜか表示できません。したがって、関数を作ってEvent Tickに書きます。スキルを発動すると一定時間使えなくなります。 + +![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-02%20093130.png) + +https://blueprintue.com/blueprint/ydbtzm73/ + +https://blueprintue.com/blueprint/ppdg-fb-/ + +### playerstart + +移動したい場所にplayerstartを設置してボタンで移動できるようにします。 + +https://blueprintue.com/blueprint/3h8qi0ep/ + +## battle + +バトルシステムの構築を目指します。`GAS(gameplay ability system)`というものがあります。 + +### spaceship + +spaceship battle system、つまり、宇宙船を用意して戦闘ができるようにします。これは最初に購入した[Space Frontier Stations & Ships](https://docs.google.com/document/d/1p5MY13cpTlVtqP7sCQpAoE_k5VHklmndZ4cHeBy105Y)を使います。使い方は難しいのですが、色々と応用できるのでspaceship関連では結構おすすめです。 + +[docs](https://docs.google.com/document/d/1p5MY13cpTlVtqP7sCQpAoE_k5VHklmndZ4cHeBy105Y/edit?tab=t.0#heading=h.e0sizx9kl5hg)を見てください。簡単に説明すると、`/SpaceStation/Blueprints/Weapons/BP_${type}`を設置して使います。これは`/SpaceStation/Blueprints/Weapons/Parent/BP_ParentTurret`を基本に構築されています。ターゲットになるactorに`Allow Shooting`, `ShootingTarget`というタグをつけてください。これで追跡されるようになります。BPの設定で`weapon -> shooting delay`を小さくしてみます。すると弾丸が発射される感覚が短くなります。 + +- gatling(ガトリング), laser( レーザー), missile(ミサイル) +- OverlapDetection(範囲) +- shooting delay(発射速度) : `0.2` +- actor-tags : `Allow Shooting`, `ShootingTarget` + +BGMを鳴らすには同じくタグを利用します。まずは`/BP_ParentTurret`にBGMを追加して、以下のよう組みます。 + +https://blueprintue.com/blueprint/d6i7du0s/ + +### niagara + +niagaraにcollisionを設定してeventを取得する方法です。これは非常に複雑ですが、以下の記事が役に立ちます。 + +https://qiita.com/O_Y_G/items/d696d01b17250dccc273 + +例えば、hitした箇所に爆発を起こす設定は以下の通り。 + +https://blueprintue.com/blueprint/h2ktbf6-/ + +現在、遠い場所での戦闘にダメージが入らない問題があります。 これは距離(座標)が0から`1048535`を超えた場所では`vector`の値が正確に取れないことが要因だと思われます。 https://git.syui.ai/ai/ue/issues/56 + +### item + +敵が消滅したあとにアイテムをドロップする処理は`NiceInteractionSystem`を使います。 + +使い方は簡単でGame Modeに以下を追加します。 + +1. `Player Controller Class` : `/NiceInteractionSystem/Blueprints/Components/AC_PC_Interaction` +2. `Game State Class` : `/NiceInteractionSystem/Blueprints/Components/AC_GS_Interaction` + +その他に`CBP_SandboxCharacter`にクラス設定からインターフェイス追加で`BPI Interaction Notifier`などを追加して使うのもいいかもしれません。 + +ただし、キャラの切り替えにはまだ対応していません。 https://git.syui.ai/ai/ue/issues/54 + +# atmosphere + +atprotoを利用したマルチプレイのゲームの仕組みを解説。 + +- [atproto](https://github.com/bluesky-social/atproto) +- [pixel streaming](https://github.com/EpicGames/PixelStreamingInfrastructure) +- [restreamer](https://github.com/datarhei/restreamer) +- [bsky/oauth](https://github.com/bluesky-social/cookbook/tree/main/python-oauth-web-app) +- [frontpage](https://github.com/likeandscribe/frontpage) + +https://git.syui.ai/ai/at + + +## atproto + +ゲームのアカウントはatを利用し、ゲームデータはpdsに保存されます。 + +まずoauthすると`yui.syui.ai`の[ai.syui.game.user](https://at.syu.is/at/did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui)にアカウントが作成されます。 + +このat-uriをplayerの[ai.syui.game](https://at.syu.is/at/did:plc:uqzpqmrjnptsxezjx4xuh2mn/ai.syui.game/self)に書き込みます。 + +```sh +1. [yui] at://yui.syui.ai/ai.syui.game.user/syui +2. [user] at://syui.ai/ai.syui.game/self +``` + +### api + +[varest](https://www.unrealengine.com/marketplace/ja/product/varest-plugin)を使うのが一般的です。ただし、patchがなかったりと色々あるので、[http-websocket-helper](https://www.unrealengine.com/marketplace/en-US/product/http-websocket-helper)がおすすめです。jsonは[jsonparser](https://www.unrealengine.com/marketplace/ja/product/jsonparser)がオススメです。 + +使い方は[blueprintue](https://blueprintue.com/search/?query=varest)で検索してください。 + +### refresh token + +varestの場合は`Content-Type`に`x_www_form_urlencoded_url`を指定します。 + +https://blueprintue.com/blueprint/4yf7viyt/ + + +playerはoauthしているとき`[yui]ai.syui.game.login`と`[yui]ai.syui.game.user:limit`を見ます。どちらもfalseならHTMLに`play`、trueがある場合は`live`を出力します。loginするとlimitにdayが書き込まれます。 + +```sh +3. [yui] at://yui.syui.ai/ai.syui.game.login/self +``` + +logoutはゲーム内の`time:m5`か`button`で処理され、`[yui]ai.syui.game.login`に書き込みます。 + +## frontpage + +[restreamer](https://github.com/datarhei/restreamer)のat(oauth)には`frontpage`を使います。 + +[frontpage](https://github.com/likeandscribe/frontpage)は[atproto](https://github.com/bluesky-social/atproto)を使って投稿の制御を行います。主にpdsの`collection`から検索と`at://`を使います。 + +[next.js](https://github.com/vercel/next.js)で書かれています。layoutは[tailwindcss](https://github.com/tailwindlabs/tailwindcss)です。 + + + + +### build & deploy + +https://git.syui.ai/ai/ue/src/branch/main/github/frontpage + +### tailwindcss + +htmlに省略形式でcssを記述します。`tailwind.config.ts`を見てください。 + +```html +{params.postAuthor === "syui.ai" && post.status === "live" && post.rkey === "3l7lj463zbo2m" && ( +
+ + +
+ + + {comments.map((comment) => ( + + ))} +
+
+)} +``` + +`@media`を制御する`sm`, `md`などは記述する順序を間違えると動きませんので注意。 + +#### はみ出す + +```html +- w-full ++ overflow-hidden whitespace-nowrap +``` + +### hugo + +[hugo](https://github.com/gohugoio/hugo)のcomment systemにも利用できます。 + +```html +{{ if .Param "comment" }} +
+

@comment

+ +
+{{ end }} +``` + +`post.md`に`comment`を追加します。 + +```html ++++ +title = "atprotoのfrontpageを触ってみる" +date = "2024-10-26" +[params] + comment = "3l7lprmoka22r" ++++ +``` + +```css +iframe.frontpage { + width:100%; + height: 1000px; + pointer-events:none; +} + +a.frontpage-button { + width:100%; + font-size: 15px; + background-color: #e80063; + /* background-color: #007fff; */ + color: #fff; + border: 2px solid #fff; + padding: 10px 30px; + border-radius: 5px; + text-decoration: none; +} + +a.frontpage-button:hover { + /* background-color: #0077ff; */ + background-color: #e80073; +} +``` + +## pixel streaming + +- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-pixel-streaming-reference +- https://dev.epicgames.com/documentation/en-us/unreal-engine/pixel-streaming-2-overview-in-unreal-engine + +docs : https://github.com/EpicGames/PixelStreamingInfrastructure/tree/master/Frontend/Docs + +```sh +# https://github.com/EpicGamesExt/PixelStreamingInfrastructure +$ mkdir -p ~/git && cd ~/git +$ git clone https://github.com/EpicGamesExt/PixelStreamingInfrastructure + +$ cd ~/git/PixelStreamingInfrastructure/Matchmaker/platform_scripts/cmd/ +$ ./setup.bat +$ ./run.bat +# https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-pixel-streaming-reference +# --HttpPort 90 +# --MatchmakerPort 9999 + +# Signaling and Web サーバーに対する次のコンフィギュレーション パラメータを設定します。 +$ cd ~/git/PixelStreamingInfrastructure/SignallingWebServer/platform_scripts/cmd/ +$ ./setup.bat +$ ./Start_SignallingServer_nopublic.ps1 --UseMatchmaker true --MatchmakerAddress 127.0.0.1 --MatchmakerPort 9999 --PublicIp localhost --HttpPort 80 +``` + +`Matchmaker`を使わないと操作が共通になります。したがって、`Matchmaker`を使って各ユーザーが使用するStreamerIdを選択して別々のstackにアクセスするようにします。 + +urlは`http://127.0.0.1/?StreamerId=DefaultStreamer, http://127.0.0.1/?StreamerId=DefaultStreamer1`という形になります。このidは起動しているアプリの数だけ生成されます。 + +ただ、アプリの起動数が多すぎるとserverの負荷が大きくなります。 + +これを外部につなげる場合は[cloudflare tunnel](https://www.cloudflare.com/ja-jp/products/tunnel/)などを使いましょう。 + +### err + +> webrtc connection negotiated + +このように表示される場合はipを変えてください。同じnetwork内だとうまくいかない場合があります。 + +### option + +https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-pixel-streaming-reference + +### disable player controller + +playerのcontrollerを無効にして配信のみにする方法です。 + +https://github.com/EpicGames/PixelStreamingInfrastructure/blob/master/Frontend/Docs/Customizing%20Player%20Input%20Options.md + +```ts + const config = new Config({ useUrlParams: true }); + config.setFlagEnabled(Flags.MouseInput, false); + config.setFlagEnabled(Flags.KeyboardInput, false); + config.setFlagEnabled(Flags.TouchInput, false); + config.setFlagEnabled(Flags.GamepadInput, false); + config.setFlagEnabled(Flags.XRControllerInput, false); + + const stream = new PixelStreaming(config); +``` + +もしくは`SignallingWebServer/Public/player.js`の以下の箇所を探して`false`にします。そして、settingを呼び出せないようにします。 + +```js +this.flags.set(Flags.KeyboardInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.KeyboardInput, 'Keyboard input', 'If enabled, send keyboard events to streamer', false, useUrlParams)); +this.flags.set(Flags.MouseInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.MouseInput, 'Mouse input', 'If enabled, send mouse events to streamer', false, useUrlParams)); +this.flags.set(Flags.TouchInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.TouchInput, 'Touch input', 'If enabled, send touch events to streamer', false, useUrlParams)); +this.flags.set(Flags.GamepadInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.GamepadInput, 'Gamepad input', 'If enabled, send gamepad events to streamer', false, useUrlParams)); +this.flags.set(Flags.XRControllerInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.XRControllerInput, 'XR controller input', 'If enabled, send XR controller events to streamer', false, useUrlParams)); +``` + +### multiplayer + +pixel streamingとcallab viewerやvagon streamを使用すると実現できるかもしれません。 + +- https://vagon.io/blog/how-to-create-multiplayer-unreal-engine-experiences +- https://github.com/make-live/multiplayer + +#### OnlineSubsystem + +`OnlineSubsystem`を用いた方法です。これはpixelstreamingで動作します。様々なプラットフォームに対応しているようです。 + +- plugin : OnlineSubsystem +- https://tech.dentsusoken.com/entry/onlinemultiplay-cpp +- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/online-subsystem-in-unreal-engine + +> 今回使用するSteamDevAppIdは480となっております。これはSteamから開発用に提供されているサンプルゲーム(SpaceWar)のIDです。本番開発で用いる場合は、自身でAppIdを取得する必要がありますのでご注意ください。 + + 記事ではsteamのapp idを使って、steamアカウントを使用する前提で解説されています。ユーザーはsteamアカウントでログインします。手順としてはまずsteamの開発者用のアカウントを作り、app idを取得、それを使ってclientのようなものを作るのだと思います。このpluginはそのためのsdkのようなものでしょう。 + +pixelstreamingで実現するmultiplayはissueに情報をまとめていきます。 https://git.syui.ai/ai/ue/issues/58 + +#### pixel streaming(PS) ext plugin + +[superhero fligth animations](https://www.fab.com/ja/sellers/Indie-us%20Games)を出しているところがやっているのがlocal multiplayerのpixel streamingで、一つのアプリ起動で複数人にcamera, controllerを割り当てる。plugin自体はまだ非公開。 + +- https://www.docswell.com/s/indieusgames/5EXLLJ-2024-10-23-164940 +- https://leon-gameworks.connpass.com/event/328282/ +- https://x.com/tarava777/status/1857382063818645792 + +#### Eagle 3D Streaming + +- https://github.com/e3ds +- https://www.eagle3dstreaming.com/demo/ +- https://iframe_react.eagle3dstreaming.com/ + +## restreamer + +```sh +$ git clone https://github.com/datarhei/restreamer +$ cd restreamer +$ docker compose up +``` + +```yml +services: + + restreamer: + image: datarhei/restreamer + #image: datarhei/restreamer:cuda-latest + ports: + - 8080:8080 + - 1935:1935 + - 6000:6000/udp + restart: always + volumes: + - ./data/config:/core/config + - ./data/data:/core/data +``` + +なるべく`rtmp`ではなく`srt`を使用してください。rtmpの`port:1925`に関しては使わないなら閉じても構いません。 + +## account system + +### EOS (Epic Online Service) + +- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/hosting-and-networking-guide-for-pixel-streaming-in-unreal-engine +- https://onlineservices.epicgames.com/ja/services +- https://eoscore.eeldev.com/ +- plugin : https://www.fab.com/ja/listings/8e78818d-4662-4c6d-8ab2-6e22b9d3595e +- plugin : https://github.com/mordentral/AdvancedSessionsPlugin + +### OSU (Online Sybsystem UE) + +- plugin : OnlineSubsystem +- https://tech.dentsusoken.com/entry/onlinemultiplay-cpp +- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/online-subsystem-steam-interface-in-unreal-engine \ No newline at end of file