Aqua Voice / VRChat用の非破壊変更ツールをつくった / OffersHUDのv1.9.0をリリースした

やったことを書く

Aqua Voice

この記事は、Aqua Voiceというツールを使って音声によってテキスト入力をして、それをあとから手直しすることで作成されている。僕がよく見ているr7kamuraさんのブログで紹介されていたツールで、いい感じにSpeechToTextをやってくれる。詳しいところは調べてもらったり、それこそr7kamuraさんの記事のリンクを貼るので、気になったらそっちを見てみてね。

r7kamura.com

ただ、僕はあまり口が回らないので、一発でいい感じの文章にはならなかった。話題があちこちに分散する。でも、言いたいこと自体は文字として存在するようになるので、後処理としてちょっと入れ替えたり書き換えたりするだけで記事になる。入れ替えもClaudeに投げたりしてやってもらった。とても楽だった。体験が良い。

もし気になったら、以下のリンクから登録してみてね

https://aquavoice.com/share?code=DZ-PSDR

VRChat用の非破壊変更ツールをつくった

VRChat用のUnity Editor拡張を初めて作ってみた。

一応公開してるけど他人の環境で動くのかマジでわからん

github.com

アバターのメッシュとアクセサリーのメッシュが重なっているような場合、どちらかをへこませて自然にアクセサリーがついているようにしたいことがある。おそらく正攻法はPhysBoneを使ってコライダーでへこませる方法なのだけど、そこまでするのも手間だった。もっと簡単に処理したい場合もある。

そのための解決策を探っていた。すでに使われている適切なツールがあればいいな~と思ってたのだけど、うまく見つけられなかった*1。なので、自分で作ってみることにした。作ったツールは MeshDent という名前で、これが僕が初めてUnity Editor上で動くものとなる。

このツールはUnity Editor上のオブジェクトに付与するコンポーネントとして振る舞ってくれる。コンポーネントとエディタ上で球体を操作し、へこませたい場所とへこませかたを指定するという流れ。ニッチかもしれないけど自分が望んだ要件にマッチしていい感じ。

今回の場合、ビルド時に何らかを行う/プレビューもエディター上で行うことが必要だった。変更時にMeshに対して変更を加えることなく(≒非破壊に)これを実現するためには、NDMFというライブラリを使うのが簡単そうだった。改変について調べるときによく見るやつで、ようやくこれをライブラリとして使うことができて嬉しかった。これに依存していい感じにコードを書くことで、Unityのエディター上ではそのままリアルタイムにプレビューされるし、ビルド時には変更が入った結果のMeshが使用される。

僕はあんまりゲーム機上で動くような計算、今回で言えば3Dでへこませるみたいなところは得意じゃなくて、多分良い処理は書けない。なので、その部分についてはClaude Codeに書いてもらった。それ以外の部分については、僕が構造を理解するために自分で書いてみた。具体的には、AAOのRemoveMeshByBoxというコンポーネントの実装を参考にして、どうやって画面上にGizmoを表示させるかとか、どうやってメッシュに対して干渉するのかという部分だけを自分で用意した。あとはその上で、さっき言った通りの3Dの計算、今回はどのように凹ませるかみたいなCG的な計算を書いてもらった。あと、AAOにあったMeshInfo2が便利で、これに依存してBlendShapeを考慮したあとのMeshに処理を加えられるようにした。

実際にUnity Editor上でちゃんと機能するコンポーネントとして用意するには、単に1個のクラスだけではなくていくつか用意する必要があった。ざっくり構成を説明すると:

  • Runtime/MeshDent:エントリーポイント/コンポーネント。ユーザーからの入力をシリアライズして保持する
  • Editor/MeshDentPlugin:プラグインとしてNDMFに登録する
  • Editor/MeshDentPreview:エディター上でリアルタイムにプレビューする
  • Editor/MeshDentEditor:凹ませる範囲を球体で表現するのだけど、その球体をエディター上で直接触れるようにする

例としていくつかあげるてみる。

// Runtime/MeshDent.cs
[AddComponentMenu("MeshDent/Mesh Dent")]
[RequireComponent(typeof(SkinnedMeshRenderer))]
public class MeshDent : MonoBehaviour
{
    [Serializable]
    public class DentSphere
    {
        public bool enabled = true;
        public Vector3 localPosition;
        public float radius = 0.1f;
        public float strength = 1.0f;
        public float falloff = 1.0f;
    }

    public DentSphere[] dentSpheres = new DentSphere[0];

    // Gizmo表示(シーンビューで球体を可視化)
    void OnDrawGizmosSelected()
    {
        foreach (var sphere in dentSpheres)
        {
            Vector3 worldPos = transform.TransformPoint(sphere.localPosition);
            Gizmos.DrawWireSphere(worldPos, sphere.radius);
        }
    }
}
// Editor/MeshDentPlugin.cs - NDMFにプラグインとして登録 / 実際のロジック
[assembly: ExportsPlugin(typeof(MeshDentPlugin))]

public class MeshDentPlugin : Plugin<MeshDentPlugin>
{
    public override string DisplayName => "Mesh Dent";

    protected override void Configure()
    {
        InPhase(BuildPhase.Transforming)
            .Run(MeshDentPass.Instance)
            .PreviewingWith(new MeshDentPreview());
    }
}

public class MeshDentPass : Pass<MeshDentPass>
{
    protected override void Execute(BuildContext context)
    {
        foreach (var meshDent in context.AvatarRootObject
            .GetComponentsInChildren<MeshDent>(true))
        {
            // メッシュにへこみ処理を適用
            MeshDentProcessor.ApplyDent(...);
            // 処理後はコンポーネントを削除(非破壊)
            Object.DestroyImmediate(meshDent);
        }
    }
}
// Editor/MeshDentPreview.cs - エディタ上でリアルタイムプレビュー
public class MeshDentPreview : IRenderFilter
{
    public ImmutableList<RenderGroup> GetTargetGroups(ComputeContext context)
    {
        // シーン内のMeshDentコンポーネントを監視対象として登録
        foreach (var meshDent in context.GetComponentsByType<MeshDent>())
        {
            context.Observe(meshDent);  // 変更を監視
            targets.Add(RenderGroup.For(meshDent.GetComponent<SkinnedMeshRenderer>()));
        }
        return targets.ToImmutableList();
    }

    public void OnFrame(Renderer original, Renderer proxy)
    {
        // BakeMeshで現在の変形状態を取得し、へこみ処理を適用
        originalSmr.BakeMesh(bakedMesh);
        MeshDentProcessor.ApplyDent(previewMesh, bakedMesh.vertices, ...);
        proxySmr.sharedMesh = previewMesh;
    }
}
// Editor/MeshDentEditor.cs - シーンで球体を直接操作
[CustomEditor(typeof(MeshDent))]
public class MeshDentEditor : Editor
{
    private int selectedSphereIndex = -1;

    private void OnSceneGUI()
    {
        var meshDent = (MeshDent)target;

        for (int i = 0; i < meshDent.dentSpheres.Length; i++)
        {
            var sphere = meshDent.dentSpheres[i];
            Vector3 worldPos = meshDent.transform.TransformPoint(sphere.localPosition);

            // シーン上でドラッグして位置を変更できるハンドル
            EditorGUI.BeginChangeCheck();
            Vector3 newWorldPos = Handles.PositionHandle(worldPos, Quaternion.identity);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(meshDent, "Move Dent Sphere");
                sphere.localPosition = meshDent.transform.InverseTransformPoint(newWorldPos);
            }
        }
    }
}

……という感じで、初めてUnity Editor上のコンポーネント拡張を作ったのだけど、自分が思っていた以上にUnity Editorに手を出すハードルは低かった。こういうプラグインって、エディター上にプラグインを管理するための項目があって、そこにフォルダを追加してようやく読み込めるみたいなものを想像していた。でもUnity Editorはその周辺の統合がうまくできていて、単にコンポーネント1個表示させるだけなら、.csファイルを1個書いてそれをUnity Editorにドラッグ&ドロップするだけだった。例えばこういうやつ↓

using UnityEngine;

public class MyComponent : MonoBehaviour
{
    public string message = "Hello!";
}

そうすると勝手にコンパイルされて、もうその段階でコンポーネントとして使用できるようになる。何らかこっちで変更を加ると、次にUnity Editorのウィンドウがアクティブになったときにリロードされて実装が動くようになる。

拡張を作る側として、このくらい簡単に動かせるっていうのはありがたい。VRChat以外でも、Unity上でいろんなプロジェクトで共通の処理を用意したくなったとき、思いついた機構を簡単に取り入れる仕組みができているなと思った。これまでUnityは単なるアバターきせかえツールだと思っていたけど、こういうのを見るとやっぱりちゃんとしたゲームのための開発環境なんだな〜とか思った。

OffersHUDのv1.9.0をリリースした

自分が作っているOffersHUDの新しいバージョンをリリースした。v1.9.0!

modrinth.com

昔この記事にも書いたのだけど、OffersHUDという名前のMODを自分で制作している。カーソルを当てた村人の取引状況を、右クリックせずとも画面上にHUDとして表示するMOD。

今回の変更点は以下の3つ。

  1. HUDの位置・スケール設定が効かなくなっていたバグの修正
  2. 1.21.8〜1.21.11への対応
  3. 他のMODに影響を与えていた不要なメソッドキャンセルの削除

HUDの位置・スケール設定のバグ修正

HUDの表示で、translateを呼ぶことでHUDの位置をずらしたりスケールをいじったりする機能があった。Minecraftのバージョンアップに追従するとき、雑に対応したせいで意図しない形のAPIの呼び方をしており、この機能がうまく動かなくなっていた。偶然エゴサーチしているときにこのバグを発見して、ようやく対応することができた。きっとこれがなかったらずっとそのまま放置されていたんだろうなという気がする。

1.21.8〜1.21.11への対応

このMODはstonecutterという名前のライブラリを使って複数バージョンに対応している。今は1.20.4から1.21.11までのバージョンに対応している。このMODが依存しているMinecraftの実装が変わらないのであれば同じ実装が使えるのだけど、バージョンが上がるたびに、依存している実装のうちどれかがランダムに変わっていく。

なので、実装が変わるたびにMOD側の実装も変える必要がある。stonecutterではコメントによるアノテーションで、バージョンごとにどのコードを使うのか?の処理を分岐させる。発想としてはプリプロセッサーのようなもので、とてもシンプルにできている。ただ、全部のバージョンについての関心が一つのファイルに書かれるので、出し分けが結構大変になってくる。やろうと思えばバージョンごとに別々のクラスを用意することもできるのだけど、まだその規模ではないと判断して、一つのファイルに書いている。これをうまくいなせるような設計ができるかどうかがきっと腕の見せどころなのだろうけど、今はマイクラについての理解がそこまで深くないので、それができていない状況だ。

不要なメソッドキャンセルの削除

Fabricでは任意のメソッドに対して、自分の好きな条件で後続処理をキャンセルさせることができる。これは便利な機能なのだけど、キャンセルしたメソッドに依存する別のMODがある場合、そのMODの処理も止めてしまう可能性がある*2。Minecraftの実装に依存して実装しているのは他のMODも同じなので、実行順序によっては他のMODのメソッドがそれ以降実行されないということが起きる。

OffersHUDのv1.8.2でもこれを使っていたのだけど、別のHUD系のMODに影響を与えていたらしい。そのキャンセル処理自体はむかしは必要だったんだけど、実装の移り変わりによってもう必要なさそうだった。今回はキャンセル部分をそのまま削除して、うまく動くかどうかを自分の手で確認した。おそらく必要なさそうだったので、その部分を削除した。


今回、バージョンアップ対応とメソッドコールのキャンセルについてはそれぞれ別の人が関わってくれた。バージョンアップに関しては大部分が他人のPRによってすでに対応されていたし、メソッドのコールキャンセルについてはissueで問題点をまとめてくれていた。まじでありがたい。自分がこのissueやPRに気づくのが遅れてしまったせいで、対応がかなり遅れてしまった!すまんね(;_;)

*1:多分すでにある。もっといいものが欲しいし。

*2:メソッドがキャンセルされることで、本来そのメソッドが最後まで処理されたあとに実行されるべき処理が呼び出されない。など

2025年が終わってた!

2025年が終わってたので僕のことを色々振り返ってみたい。あんまり記事が書けなかったので、僕の中の大きなイベントを雑に書き起こしてみる。

各項目長さがバラバラで、色々読みづらいと思うので目次から気になるものがあれば飛んでもらう、くらいにしてほしいなー

VRChat

フレンドの姿

例年と大きく違ったのはここだと思う。

めちゃくちゃやっているという感じでもないが、それでもここまでハマるとは思っていなかった。

既存のコミュニケーションツールとの違いは至る所で語り尽くされていると思うのだけど、個人的には、Discordと違って身振り手振りがあることがとても大きかったと思う。何かを喋るときに表情があったり手が動いたり、説明する材料が多いとそれだけでめちゃくちゃうれしい。気持ちが伝わってくる。

僕はなぜか音MAD界隈の人間にある程度の信頼を寄せているのだけど、音MAD界隈に属している人々もいくらか(いまの僕のフレンドだと100人くらい)は居る。その人らのフレンド+インスタンスだけで過ごす日も多々ある(というかそっちの方が圧倒的に多い)。存在は認知していたがどんな人かをあまり知らなかった人とめちゃくちゃ喋るようになったり、なんなら会ってご飯に行くようになったり、ここで生まれた縁もたくさんあった。本当にありがたい。

また、アバターというものに手を出せたのもでかい。とある事情で、なんらかのキャラを自分のアイコンとして設定することに恐怖の念を抱いていた(VRChatに限らず)。版権のキャラクターを使うのはしんどいし、でも絵は描けないから自分で撮った写真を使わざるを得なくて……。みたいな感じだったのだけど、VRChatでサンプルアバターを使えたことと、改変文化によって、ハードルがかなり下げられた印象があって、無事にかわいい男をアバターにすることができた。まじでうれしい。

こういった、既存のコミュニティの縁もあったりして、一年間とてもお世話になったプラットフォームとなった。2026年もよろしくね。

x.com

あと、これらにハマってしまったおかげでナートロ3の準備がめちゃくちゃ大変だった。

麺屋はなび

数名からの影響をかなり大きく受け、麺屋はなびというチェーン店の台湾まぜそばをたくさん食べていた。あの頃のマクドナルド以降でここまでなにかの食事にハマったのは多分初めてだと思う。

これも正確には去年の12月頃から、この一年間で少なくとも月1、多いときで月6とかで食べたような気がする。

僕は出身が岐阜なのだけど、僕が活動する範囲では一番濃い食べ物が岐阜タンメンくらいでしかなかったので、こういう明らかに濃い食事は東京に来てから初めて食べるようになった。しかも、家系ですら食べ始めたのが去年からとかで、それまで濃さとは無縁な生活を送っていた。

その慣れなさが仇となっていて、体調が悪い時だと家系もはなびも食べきるのが大変しんどくなる。夏頃、はなびの並を食べた際に、吐いてしまったりした。そもそも僕の体がこれを過食だと判断している証拠なのだけど、正直このくらいで吐いてしまうのはかなりもったいないと思ってしまう。この先の人生においても食べられる機会が少なくなっていくということなので、もうちょっと多い量が食べれるようになりたいと思っている。

ただ、そもそも数年前まで「一日何も食べなくてもいい」みたいな生活を送っていた人間なので、今こうやって食べれているのはこれでも進歩している方なのだと思う。

nerdtronics 3

(別の記事で感想を書こうとしていたがとっ散らかってしまって全然追いつかなかったので、自分の周りのことしか書いてない……)

www.nicovideo.jp

ナートロ3に名有りさんチームとして参加し、10分強の音MAD-mixを流してもらった。多分近年で一番がんばったと思う。

僕はベースミュージックという広い括りのジャンルの音楽がとても好きなのだけど、日本の音MADのシーンではそういった括りで取り上げられることはとても少ない。ただ、音MADとベースミュージックの相性が最高であるという確証はあった。直近だと音MAD華の李子altさんの 150BPM 音MAD/YTPMV SET や、クッキー☆で見えていた クッキー☆ x Dubstep の流れなど。数は少ないが、いくつか見られる実装例がそれを示してくれている。どこかの機会で、自分でそれを確かめてみたいな~というアイデアがあった。

そんな中ナートロ3に呼ばれることが決まった。音MAD界隈的にも注目される舞台で、みんなにまとまった単位でベースミュージックの音MADを見せたらそういったジャンルとして認知されるのではないか?もしかしたら、今後みんながこういった音MADを作ってくれるのではないか?という思いがあった。で、すべての音MADがベースミュージックを主体としているmixを作成することにした。また、単に既存のものをベースミュージックライクな感じに編集してもあまりおもしろくないだろうな~というのもあったので、流すもののうち大半を新作にして、作品自体の攻撃力でみんなに印象を植え付けたいという考えもあった。

僕が思う中でとても印象的なベースミュージックの音MAD2選以外は新作ということで、かなり大変な作業になることが予想された。

音声では、別名義での活動で事を成し遂げているエルフィンさんに一部手伝ってもらった。別名義でのことをめちゃくちゃ書きたいのだけど、センシティブかもしれないから詳しいことは書かない。音声の重圧感もさることながら、素材の扱いがかなりキャッチーで誰からも聞き馴染まれる音声を作ってくれる方なのでどうしても手伝って欲しかった。say so.alsの合いの手に当たるようなトラックを担当してもらった。まさにエルフィンさんらしいようなあて方をしてもらい、結果としてとても掴みやすい音MADにしてもらった。音MADにおいて一番むずかしい作業だと思うのだけど、流石すぎる。

映像では、1時さん、aaa_5sさん、bondbondさんに声掛けをし、映像制作の手伝いをしてもらうことになった。自分は映像を作る経験が他の人に比べてかなり浅く、また訴えかけのためには映像の説得力も必要であろうという点で、音声の印象にあった映像を作れそうな方々に手伝ってもらうことになった。

1時さんはillegal complexのリリパでとても激しい曲でDJをしていた(Tearout Dubstepなど)ことがきっかけで、普段から作られる映像の先鋭感が僕の想像するベースミュージック感に合っていたので声をかけた。say so.alsの映像のうち、blenderのベースを用意するところまで(真ん中にRUさんがいる、背景がグラデーションになっている、小物がちょっとだけ浮いている)は自分がやったが、それ以外のカメラの動かしとコンポジションは全部1時さんがやった。かなり急に声を掛けたのにもかかわらず、本当に気持ちの良い映像を作ってくれた。

aaa_5sさんは昔からずっと他の人と違うところからリファレンスを引っ張ってくる感じと、出力される映像の雰囲気が僕が想像するものに向いていると思い、声を掛けた。aaa_5sさんに担当してもらったThe Taima Effectの音声は、実は2020年末の段階で完成しており、しかもその段階でaaa_5sさんのDMで映像を作ってくれないか?という打診までしていた。ただ、ボールが自分持ちになったまま何も返答をしなかったのでお流れになっていたところを、ナートロ3の機会に掘り起こし、完成まで持っていってもらった。いま思っても、やはりここはaaa_5sさん以外に任せることはできなかったと思う。また、Vikirantes→The Taima Effectへの繋ぎの映像、say so.als→Right In.jpgへの繋ぎの映像、最後のクレジットの画像も作ってもらった。

bondbondさんは普段作られている映像感が、あまりにも僕が想像するHXDのビジュアルにぴったりすぎるという点で声を掛けた。そのまま0x485844(HXDのASCII表記)の映像をやってもらった。普段音MADの映像を作られない方なのでどのように進めるべきか難しいところはあったが、最初のシーン(ファーストドロップに入る所)が送られてきたときに自分の当てが間違っていないことがわかり、とても嬉しかった覚えがある。そのままHXDのみをやってもらった。aaa_5sさんと同じように、ここはbondbondさん以外に任せることはできなかったと思う。

また、それだけだと良くないので、自分でもいくつか映像を作った(Hysteriaのオーバーレイ、Tell You、say so.alsの一部、PAD先進国900館RIDDIM、Vikirantes)が、やはり招待させてもらった各人の精度は凄まじいものだったと思う。僕はもっと精進しなければならない。

当日流すまでの間、ステージ上に立つかどうかもめちゃくちゃ悩んでいた。

最初に書いた通り、現状こういったジャンルの音MADが少ないこともあり、慣れていない方に対して全くウケない可能性も充分に考えられた。例えば、人生ではじめてEDMを聞いた人が「え、サビどこ?」となるケースを想像してほしい。規模は違うが、それの僕達版が発生するんじゃないか?という心配。とても怖かった。

また、今回は大きな演者さんが数名いらっしゃったので、これまでと比べても客層が推測できないという都合があった。音MADもベースミュージックもよくわからない層にどうにか訴えかける必要があった。

そのための一つの方法として、僕がステージに立つ事を選択した。ほかのどんな提示よりも、みんなの見える場所で盛り上がりに合わせて僕がグネグネ動いていたほうがわかりやすいだろう。

これは余談だけど、今回のセットリストの先頭に位置する hysteria の原曲を作った G Jones は去年来日してライブをしている。その際に選ばれた場所がまさに同じ会場だった。これね。というわけで最前に立つことで「彼と同じものが見れる」というリワードもあった。やってみた感想としては、正直眼の前のことで精一杯で、そんなものを楽しんでいる場合ではなかった。

当日もかなり凄かった。

まずそもそも会場がやばい。ナートロ2やotogrooveとは比べ物にならないような規模で、ここでやることが分かった段階から当日までずっと現実味がなかった。最終的に600?の前売りを全部売ったらしく、本当に凄いことになっているな~と思った。

当日みんなより少し早く会場に入って、テストで流されていた音MADを見て圧倒されていた記憶。客が入ってすぐメインフロアが満員になり、待機動画として流されていた木に夢中になってたら乗り過ごしてイワシの大合唱でもう感極まったり、この時点で僕が知っている普通の音楽イベントとは物量も熱量も違っていた。

みんなのmixを聞きつつ、自分の時間が近づくにつれて変にソワソワしはじめた。気持ち悪くはないがずっと落ち着かず、それをどうにかするのが大変だった。原口沙輔さんのDJの時間、本当に凄い音が聞こえていたのでずっと見たかったけど、ソファで全力で脱力していたので見れる状態になかった。でも、時間になってステージに向かってみると不思議と気持ちが落ち着いたし、出番前に聞こえたみんなの「なありーーー!!!」の声援がかなり気持ちを楽にさせてくれた。みんな本当にありがとね(;_;)

「なあり玉発射」ってマジで何

ステージ上では、mix上の盛り上がるところでは自分が激しく動くように徹していた。全編通してほとんど盛り上がっていたので体力的にかなり大変だった。常々 Grape Milk が Twitter などで見せるような動きが本当にかっこいいので、それを参考にしたい部分もあったが、本番どうだったかは全く覚えていない。Dubstepであっても、スネアの部分で頭を大きく振ったほうが良い部分(例えば Right In.jpg はその類)と、四つ打ちのリズムで動かしたほうが良い部分(say so.als の後半部分やPAD先進国900館RIDDIMなど)があったりする。そういう部分は前もって自分で身体を動かしてみて、どうすると自分が気持ち良いか?というのを確かめてなんとなく方針を決めたりした。

ただ、正直本番はかなり必死で具体的にどうだったか?みたいな部分をほとんど覚えていない。もうちょっと見えないようにお茶を飲むべきだったな~とか、hysteria で素材がここすき+ADVANCEDに切り替わったところで盛り上がっていたとか、Right In.jpg でみんなが合唱してくれていたところとか、そういうのは覚えてる。

数日経ってからみんなが撮ってくれた動画を見た。みんなが本当に盛り上がってくれていて本当によかったと思う。盛り上がってほしいところ全部で盛り上がっていた。特に、以下の動画。「自分たちのやっていたことが間違っていなかったんだ」ととても安心し、見た時にようやく「やってよかったな」という気持ちが出てきて号泣してしまった。

ずっと書いている通り、独りよがりで全然ウケない可能性もありめちゃくちゃ不安だったのだけど、今振り返ってみると杞憂だったのではないかなと思う。僕が思うに、音MAD作者はコンテンツを楽しもうとする力がかなり強い集団だと思っていて、その上で音MADの体裁を保っているものが流れればもうそれだけで良かったのかもしれない。また、イベント全体のセットリスト的にも、僕らの音MADがちゃんとかっこよく映る状態になっていた。こんなにありがたいことって本当にない。まじでありがとうございます。

こう考えると、自分が最前に立ったのもあんまりいらなかったんじゃないかな……とか思える。ディスプレイが極端にデカかったし、最前に居る自分が小さすぎて本当に効果的だったのか疑問なところだ。まあでも、WOMBのステージに立つことなんて今後あるかどうかわからないし、思い出として人生に色濃く残ったと思う。

2025年の今年の10選でも、21票ももらっていて本放送で放映された。正直このmixは他の人の力がかなり強くて、自分が成し得たぞ~という感覚がほとんどないのだけど、単に僕が大好きなこのmixが、音MAD界隈からある程度評価されたという事実がとても嬉しかった。

2016年の摩天楼合作のこととかを思い出してしまう。あのときの自分のパートは(自認では)今回と同じようなことをしていて、それが海外勢兄貴だとか言われて賛否両論なパートになってしまっていた。これは場違いすぎる自分が明らかに悪かったのだけども、きっといま同じようなことが起きてもあまり違和感無く受け入れられるんじゃないかな~と感じる。

ナートロ3はしばらく僕の中で思い出になるのだと思う。またこの話してるよ、みたいになる気がするけど勘弁してね。

AVANT

かなりお世話になっているLiminal Warpというベースミュージック x アニメサンプリングを主体とするサークルの主催イベント。まさにサークルを体現しているかのような凄まじイベントで、ここにDJとして呼ばれることになった。

このイベント自体、そもそもアニメという点を除いてもかなり変な音が鳴りまくったりしていてそれだけで嬉しいのに、アニメが迎え入れてくれるからシナジーかなり凄いんだよな!!!!まじで良いイベントです。主催のponiyamaさんのnote曰く、またやる様子でマジで楽しみ。熱量を感じるんです。マジで素晴らしい。

普段自分が感じているところとして、ベースミュージックの音MADとアニメサンプル主体のベースミュージックの違いってなんだ??というのがある。字面だけ見ると似ているようだが、事実として出力されるものが結構違うように聞こえたりしていて、そこにはなんらかの壁があるように思えている。そもそも、音MADみたいな密度の高いボイスサンプルの詰め方って多分別ジャンルだと結構ダサく映ってしまう場合が多い気がしていて、でも自分はそういう声の詰め方しかできなくて……みたいな技能面の悩みがあったり、音MADへの向き合い方と同じ気持ちでこれに取り組んで良いのか??という心の悩みがあったり……ただ、Liminal Warpのリリースってまじで全部かっこよくて、自分が空いている限りはこれに応えたい気持ちがあったり。で、結局考えなんてまとまるわけがなくて、とりあえず自分が気持ちの良い具合で音MADと他の方々の作品の中間くらいのものを出したり。

このときのDJもそんなかんじだったと思う。LWのリリースと、音MADでそういう感じの聞こえのものをそれぞれ置いたり、直接アニリミを使ったり……具合として、フロアに居た方々はああいう音MADをどのように受け取っているのだろう。パーティの趣旨に沿ったものとして受け取ってくれていれば僕も葛藤した甲斐があるってもんなのですが……

To Be Kontinued vol.20

去年遊びに行ったTBKの音MAD回の翌年、なんと僕もDJとしてPlastic Theaterに立つことになった。

前回の札幌がかなり良い感じだったのでDJさせていただけたのもかなり嬉しかったし、そのまま札幌で遊べたのも良かった!!!

前回と客層がまた違っていて、音MAD作者もたくさん居たのが良かった。札幌の音MADのシーンってあまり意識してなかったが、かなりアツいのではないでしょうか……

このあとにRealSampleが控えているというのもあって、僕が普段選ぶような選曲にYTPMVがいくつか入っている。RealSampleに向けて作っていたハイドロポンプというYTPMVや、12月にリリースされることになる Mystic Demon (naari3 edit) も含まれており、さながら伏線のようなDJだった。

今回はスーパーフラットゆのっちと自分のやつ以外は特に音声のノーマライズを行わなかったが、そんなに気になる音量差はなかったのかなと思う。みんなの2mix/マスタリングに対する意識を感じるね~

このあと札幌旅行に行ったのだけど、それらもまためちゃくちゃよかった!

好きなネタで作れる海鮮丼。全部新鮮で肉厚でおいしい。

懐かしのFree Spot

白い恋人パークのパフェ

たのしそうなカラス

すずらん

なにもない自販機

RealSample

(別の記事で感想を書こうとしていたがとっ散らかってしまって全然追いつかなかったので、自分の周りのことしか書いてない……2)

そそのかし担当と、運営をしていました。でも正直目立ってできたことって少ししかないし、当日もなんらかの確認、最後の掃除と「帰ってください」のアナウンスをしたくらいでした。多分運営内で最もYTPMVに関する知識が少ない人間だと思う。

でも、大きな会場でYTPMVを専門にできる方々の活躍を見たかったのはマジだし、大きくて暗い会場内で、大きな音で理路整然と流されるYTPMVはとても映えるだろうと思ったんです。音MAD華の水パートの響きって本当にかっこよくて、この響きを日本の方々がやったらきっと楽しいだろうなと思ったんです。

実際にこの予想は当たっていて、みんなの出してきた渾身の作品は本当にかっこよかった。当たり前かのようにみんなの音声は綺麗だったし、その土台に立つテーマ感は本当に見事なものだったと思う。界隈のみなさまの技術力が土台になっているように感じた。東京会場でだけ見れた各パフォーマンスも、多分これまでの音MADのイベントでは見ることができなかったものな気がするなー。YTPMVの特異な先進性が見せてくれたものなのではないかなと思う。

自分は運営と同時にしふおさんチームでお手伝いをしていた。とは言っても原曲の耳コピくらいだったけども……。その特典として、AEなどのツールを持ってとんでもないスピードでゴリゴリと実装されていく作業を見させてもらった。感服というかなんというか、あのレベルで物事が進んでいくんだなあとただただ感心するばかりだった。ツールを介して映像に加える変更の精度があまりにも高いように見えた。どの操作を見ても正解のように見えてしまうような精度がこのスピード感の後ろ盾になっているのだろうな~と思った。恐ろしい。*1

このイベントに向けて、自分でもYTPMVを投稿した。どういうのが自分っぽさなのかわからないが、頑張ってドラム帯を作ったり、ハイドロシティゾーンの展開をちょっと変えたり、少し無理に名有りさんらしさを演出してみた。多分最近のYTPMV的にはこういうのもアリなのだろうな~、みたいな?

www.nicovideo.jp

Chromeme

www.nicovideo.jp

ナートロ3でSnaurさんとお話をしている中で、Esatainさんと縁を繋げてくれたことから参加が決まった合作。昨年の音MAD華の続きに当たるようなイベントに見えており、実際この合作にはLixiBakaさんが参加していたし、李子alt名義でも音MAD-mixを上げているようだった。*2

合作の趣旨はインターネットミームとEDMを掛け合わせる「音EDM」という枠組みを取ったもので、各自好きな曲を決め、個人作のように作ってもらったあとにEsatainさんらによって一本の合作にしてもらうというもの。曰く、ナートロ3での僕らの音MAD-mixを見てやることを決めたらしい。僕は僕で音MAD華の李子altの音MAD-mixに多大な影響を受けているので、彼らと僕らとで相乗効果を産んでいることになる。

招待されてからのスピード感がやばくて、サーバーに招待されてから最初の締切まで10日しかなかった!そこから本当の締切までは追加で10日くらいあったが、おそらくこの20日間で約25分の合作が作り上げられてしまったのだ。

その中身としても、かなりクールな選曲と、日本ではあまり見かけないような映像の連続で本当に素晴らしかった。この手の合作において、やはりbilibiliの音MAD勢はニコニコのそれよりも一歩先を行っているように思えてしまう……

Esatainさんには何度も再提出を重ねたり、ニコニコ側での投稿ミスがあったり、かなり迷惑をかけてしまった……

自分の合作単品は、ニコニコでの合作の伸びを気にしてニコニコには投稿しなかったのだが、そもそも当合作はニコニコではあまり注目されなかった。自分のやらかしもあったし仕方ないが、だったら合作単品も上げておけばよかったな~とか思ってる。タイミングを逃してしまった……

www.youtube.com

秋M3

emotive.bandcamp.com

当初、忙しいことが分かりきっていたので、すべてのM3へのお誘いを断っていたのだが、えもーちぶというサークルの新しいコンピに参加させていただいた。というのも、このサークルは事前に招待した人に曲を作ってもらう形式ではなく、TwitterのDMグループで締め切りまでに集まった音源をコンピとしてまとめるという、比較的ゆるい運用のもとで作成されているものだったため、最後の一週間で急に時間ができた自分にとってとても都合が良かったのだ。

soundcloud.com

相変わらずテーマを軸にした作曲が苦手で、曲としても単調だな~という感じになってしまった。他の曲がまじですごいので、是非みんな聞いてみてください。

えもーちぶはメンバーの集め方からしても、かけがえのないサークルだと思う。再現性が低い。メンバー全員本当にすごくなっていっているので、自分も本当に負けたくないし、やっていきたい。

瀬戸内国際芸術祭

葉月味さんに小豆島のことを教えてもらってから、ずっと小豆島のことが気になっていた。そんな中、葉月味さんから僕たち集団に対して小豆島周辺に遊びに来ないか?というお誘いが来た。トリエンナーレとして開催される瀬戸内国際芸術祭がやっていて、ちょうどよい時期とのことだった。

小豆島を教えてもらってから時折Instagramで小豆島のことを見ていたのだけど、そもそも小豆島はめちゃくちゃいい島なんですよね。最近っぽい水準の観光を頑張っているし、島自体の魅力がかなり高いところのように見える。

www.instagram.com

こんな島にたくさんの現代芸術を置くらしい。すごすぎるだろ。

最初は小豆島へ。

2日ほどまわった。本当に綺麗な島だった。島自体のプロポーションが高く、海の方を見ても、山の方を見ても常に綺麗な空間が広がっている。山の中に居ても、宿に居ても、とても綺麗な経験をすることができた。島自体の広さは車で二時間くらいで一周できそうな感じ。かなり険しい道があったが、yithさんのハイパードライビングテクニクスにより事なきを得た。全部回るには時間が足りず、あと1日あると嬉しいのだろうなという感じになった。

香川に戻ったあと、直島に向かう。

会の特性上、作品を見るために島のあちこちを回ったり、お店を訪ねたりした。その過程で島での生活を想像したり、こういったイベントとの共存について考えたりした。とてもおもしろい試みだと思った。

特に、直島はおそらく島民も使うであろうバスが会中常にいっぱいに見えたり、はたして本当に共存できているのだろうか?という点は思うところがあった。瀬戸内「   」資料館という場所では、会期ごとに別のテーマを持って展覧を行う。今回は島と美術のアーカイブについての展示があった。館長が島民とコミュニケーションによって相互理解を得ようとする過程が書かれていた。

日帰りで徳島に戻る。

その後、鳴門大橋を見て空港に向かい東京に帰った。

あともう一周したい。足りてない。めちゃくちゃ楽しかった。

OMORI 5周年記念コンサート 兼 大阪/京都旅行

OMOこん

OMORIの5周年記念コンサートに行った。横浜と大阪どちらも応募したが、横浜は落ちて大阪だけ当選した。

午前はVIP席というものに当たったのだけど、正直前すぎてよくわからんかった。あとVIP席の一番左の方だったらしく、ほとんどSSと変わらない様子。午後の方はSS席で、偶然真ん中後ろの方だった。こちらの方が音の聞こえは良かったし、全体も見渡せていい感じ。

OMORIの曲って全体的に難しめな曲が多い気がする。同じMUSICエンジンで公演されるUndertaleとかは全体的にキャッチーだと思うんだけど、OMORIの方はおしゃれでかっこいい響きが多い。メインテーマの借用もおしゃれだと思う。同じような曲調の別曲がいくつかあったり、借用先もかなり多いよね。ゲーム内の雰囲気をBGMで結構直球に表しているよなーと思ったりした。

夜の方、絶対にデュエット周辺で泣くよなーとか思ってたけど、M13周辺はもうずっとしんみりしていたし、Crossroadsからずっと泣いていた。一回体験しているはずなのにここまで満足度高くやっていけるんだなーというのが逆説的に僕がOMORIの世界観にハマっている証拠でもあるのだろうなと思う。だめだこの周辺うまく感想書けない、浅くてまじでごめん。本当に本当に良いコンサートだったんです。超良かったんです。

あとUnderwater Highwayにハマった。めちゃくちゃかっこいい。なんかやる。

大阪/京都のご飯

色々食べた。全部美味しかったのと、東京で食べたらもうちょっと高いだろ!!みたいなの多かった気がする。

安くてうまい居酒屋

うまいラーメン屋

マクドナルド庄内店 帰宅直後府中で食べた揚げ物より全然美味かった

Sランクと噂の魂心家 実際うまかった

串 うまい!!!

ドブみたいなラーメン

ゆにば

中学生ぶり!!最初は一人で行こうとしてたけど、同行者が2人も来てくれました♡

ユニバっぽい

入ってすぐこれなのまじでやばい!!!!年甲斐もなくはしゃいでしまった

DKCやんけ!!!!!!!!!

クッパさま(;_;)

マリカゾーンまじでやばかった MK8の遺産

お写真とりました

他にも

aaa_5sさんとbondbondさんとご飯に行った。まじでいいご飯会だった。aaa_5sさんと会ったのは初めてだったのだけど、もっと酒を飲みながら喋っていたかった。ふたりとも本当にかっこいい映像を作る方々だし、何よりもナートロ3で本当にお世話になったので、恩義が尽きない。また会いに行きます。

京都周辺とか、なんなら奈良とか、もっと色々周りたかった。ゆっくりしていたのもあったけど時間なかったね。普通に旅行目的でまた行きたい。

京都と大阪でエスカレーターの寄る方向が違うのがダルい。統一せよ

大阪城に行った。

音MADすぺしゃるコンピレーション

gengou.bandcamp.com

元号レコーズからリリースされた「音MADすぺしゃるコンピレーション」に参加した。コンピ参加者とは細く縁があるというくらいで、あまり急に参加すべきではないのかもな~とも思いつつ、音MADと書いてあるからには音MAD作者も参加した方が楽しいだろうと思って昔用意していた Mystic Demon のDubstepなeditを投稿した。

soundcloud.com

ちょくちょくこういった音MADのedit行為をやっているのだけど、最近ようやくDubstepのノリを作れるようになった気がする。これまであまりこういう特徴を掴むのが上手じゃなかったのだけど、少しばかりはうまくできるようになったと言えるかな?どうだろう。良ければ聞いてあげてください。

まとめ

なんか今年のハッスルは例年と違う方向だった気がする。もう27になってしまったわけなんだけど、それでもまだいつもと違うことをしているというのはそれだけで良いことに思う。

最近、どんどん仕事が忙しくなってきていて、趣味に割ける時間がちょっとずつ少なくなっている。僕の生き甲斐としてはインターネット主体のいろんなアクティビティの方がでかいので、うまく時間を作っていきたい。音MADもトラックメイクもうまく付き合っていきたいね。

*1:こうもなるまでどのくらいのアウトプットを繰り返してきたのか…みたいな。とんでもないぜ。

*2:この人の作業量マジでどうなってるんだ……2010年勢なのにこんなに元気なのか……

20250325

20250325

唐突に書きたくなる!雑多に色々!


書きたい話題とかたくさんあって、実際に下書きは増えてきているのだけど書き切ることが少なくなってきた!なんでだろう?根本としては単に自分の熱の移ろいだとは思うのだけど、その後ろ盾はたくさんありそう。まあ純粋に仕事も趣味も忙しい。ナートロ3があるのに、仕事が過去最高に忙しくて正直デスマーチというところ。やばい。助けてくれ!!!!

エレウィザも、そもそも誘われていたというのも含めてとても行きたいイベントだったんだよな。チケットまで買ってあったのに結局行けず、家で作業しているだけだった。その作業も結局ウニャウニャ言ってるだけで何も進まなかったし…


忙しさにかまけて部屋の掃除がまったくできておらず、机の上も床もすごくゴミだらけになってきた!!!誰かが家にくるような、なんらかのきっかけで掃除をしはじめたりはできるのだけど、そういうのもなく普段から部屋を綺麗にしている人はどういった理由でそれを維持できているのか教えてほしい。それが今年、ないしは来年のなありの目標となるだろう。


昨年末あたりにわんだふるぷりきゅあ!*1を見ていたのだけど、その時にリアタイするために数年ぶりに家でテレビを見る環境を整える必要があった。

どこかのタイミングで友人に買ってもらった Raspberry pi 4 model b が残ってたので、そいつに PX-Q1UD を繋げて録画鯖を立てた。むかーーーーーしこういった構成を立てていた時期と比べると、インターネット上の情報が整備されておりとても簡単に録画鯖が立てられるようだった。なんと docker-compose.yaml として転がっているので、USBで色々繋げておけばコマンド一発で全環境が整備される。チューニングの余地とかはめちゃくちゃあるのだけど、もはや2chの過去ログから謎の用語の正体を探す必要はなくなっていて、こういうのが「知識が開かれる」というのだよな〜と一人で嬉しくなっていた。

で、以後家でテレビをBGMとして流すタイミングがよくある。NHK総合・EテレはBGMとしてはかなり優秀。特に、夜中にやってるような風景を流してくれるやつとか、NHKが作るドラマとかはかなり良い。今は甲子園をやっているが、これはあまり興味がないんだよな。決勝とかになったら見てやるか、くらいの気持ち。民法は、アニメ以外のコンテンツだと自分が元気でなければ厳しいタイミングがある。ニュースですらバラエティノリをやっていて、元気でないときに何故か心が苦しくなるときがある。でも夜中にやってる番組は基本全部楽しいな。あとは「もうこの番組やってないんだ」とか「今こんな感じなんだ」とか、そう思ったりするくらい。

以下はNHKで見られる風景。感動するぜ。

抜かれたTSをEPGStation経由でm3u8のプレイリストにしてVLCで閲覧…という流れを経ているのだけど、EPGStationでチャンネルを選択するたびに新しいm3u8ファイルがダウンロードされる。これのせいでダウンロードフォルダがすごいことになるので、もうちょっとどうにかしたい。


なんか急にSerum 2が来てビビった。なんかexclusiveで配布されてるっぽい様子は見受けていたが、マジで事前告知なしで朝起きたら急にSerum 2がある、という感じだったので流石にビビった。しかも、Serum 1のライセンスを持っている人(つまり、全員)であれば無料でSerum 2にアップグレードできるとのことだった。(!?!?!?!?!?!?!?!?!?!?)

しかもアプグレ内容も本当に素晴らしかった。詳しく語らないが、Serum 1発売以後に増えていた新型シンセの音作りの部分みたいな機能がたくさん増えていて、しかも触り心地がかなり良い、みたいな。Serum 1を初めて触ったときのような、「なんかわからんけどツマミを動かしたらめっちゃいい音に変わる!」が、またやってきた感じ。

個人的には(もともとAbleton LiveのGranulator 2を触り続けていたものあるんだけど)Granularがめちゃ嬉しかった。ScanとOffsetをスイッチできるのが最高で、これまで自分が手元に持ち続けていたニューロベースの巨大リサンプルファイルがまた大きくなっていく方針。きっとCOPYCATTも喜んでいるだろうと思ってインスタを見に行ったら、なんとドンピシャで僕と全く同じことをやっていてすごく嬉しかった。

www.instagram.com

あとFXね、同一種類のものが複数刺せるようになって神。Bode楽しい、Splitterマジで神、Convolve超うれしい、DistortionのOverdriveのstack神、Utilityマジで嬉しい、といったところ。

また、Serum 1との完全互換を持っている。これは噂レベルの話なんだけど、同一プリセットでもSerum 2に刺すだけでCPU使用率が下がるらしい。凄すぎる。

Serum 1がサウンドデザインの方面に与えた影響ってマジで絶大で、MASSIVEが展開したwavetable方式という考え方をSerum 1が無制限に拡充した過去は語らずにいられないトピックだろう。その後、PhaseplantとかVitalとかCurrentとか、次世代Serumなんて呼ばれるシンセがいくつか出て、その方面は完全に未来に託しているのだと思っていたのだけど、そのタイミングで最高の機能を持ってして現れたSerum 2。カッコ良すぎるって……。そもそもSerum 1の残したレガシーがデカすぎるが故にハードルも激烈に上がっていたのだろうに、ちゃんと "2" の威厳を持ってやってきてくれた。DubstepプロデューサーのOddprophetは、自身のチャンネルにアップロードしたチュートリアルで "Serum is back, Sound design is back" と言っていたが、これは本当にその通りだったと思う。自分のTLもその一色になっていた。こんなにかっこいいリリースって存在しないと思う。

…この事を考えるたびに MASSIVE X のことを思い出す。簡単に言えば、Serum 2 の真逆で、ぜんぜんおもんなかった。NIってデカい会社なのにこれなの…?とか思った記憶がある。でも、今思い返すと、クリエイティブ周辺の実装に対する完成度って会社の大きさに相関しないよなあとかも思う。もし無限の時間を持っていて、無限の資金を持っている個人が居るならば、そいつが無限にこだわり抜いた実装が最強だろう。そして、ことソフトウェアに関してはそのような状況が実現しうる。

ソフトウェアは他の物事と違ってコピーすれば動くので無限にスケールする。ここと商売がうまく結びつけば、その瞬間資金も無限になる*2。例えば、90年代後半に爆発的なシェアを誇っていたWinampを開発したJustin Frankelは、その莫大な富からREAPERを開発し*3、現在に渡ってかなり網羅的な実装を続けている。デザインとして微妙なDAWだとは思うが、できることの幅は世界で一番広いDAWで、自分の周りにもファンは多い。Serumもその一つで、Steve Dudaが少人数チームで作り上げたソフトウェアだ。これは爆発的な人気を誇ったので、きっと銀行口座も爆発的な数字を記録していたと思う。その資金をもって、なんの締め切りにも追われず、Stebe Duda本人が満足するまでSerumを正当進化させ続けていたのであればこの完成度も頷ける。超かっこいい。

このような、ソフトウェアの巨人たちに肩を並べることを将来の夢としつつ、Serum 2周辺でちょっとだけ数字を得た自分のツイートたちを下に並べて〆!

もう昔からずっとこういう音を作るのが大好きで…

*1:神アニメ。下書きにいろんなコンテンツの感想まとめがあり、そこに簡単に感想が書いてあった。

*2:ベストシナリオ

*3:語弊あり

Minecraftのエンダーパールは走りながら投げても飛距離に影響しない (1.9 ~ 1.20)

ダッシュジャンプでなければならないのである(1.9 ~ 1.20)

要約

Q. 1.16.1 において、ジャンプなし、ダッシュだけしている時にエンダーパールを投げても、棒立ち状態でエンダーパールを投げた時と比べて飛距離が変わらないのはなぜ?

A. ただ走っているだけではサーバーにプレイヤーの速さを伝えることができないから!

概要

エンダーパールの初速はプレイヤーの velocity によって決定されるはずだが、(1.20以前のバージョンでは)ダッシュしているだけではエンダーパールの初速に影響を与えられない事象が発生する理由を説明する

また、1.21 より、この挙動に一部変更が入り、ダッシュしているだけでもエンダーパールの初速に影響を与えられるようになったため、この旨についても説明する。

おことわり

  • FabricMC/yarn によるマッピングを使用してソースコードの動的/静的解析を行った
    • 1.16.1+build.21
    • 1.20.1+build.10
    • 1.21+build.9
  • これらの挙動は 1.9 以降のMinecraftで確認することができ、1.20 系まではある程度同じ挙動であることが確認できる
  • 1.21 での差分点については記事後半で説明する
  • この記事は以下の動画の最後、「バージョンごとの差異」についてのアンサーとしての立ち位置の記事となる
    • かなり素晴らしい動画なので是非見てみてください

www.youtube.com

サイドの説明

このゲームは、大きく分けてクライアント側とサーバー側で処理が分かれている。

サーバー側

基本的なゲームロジックに関わる計算はサーバー側で処理される。今回の議題であるエンダーパールの各挙動もサーバー側で計算される。

クライアント側

ピクセルの描画や、20fpsより高い分解能を得るための補完などはクライアント側で処理される。基本的には、サーバー側の挙動をコピーして描画するのが主な役割。

例外として、一部の座標や一部の velocity の計算など、このゲームの根幹だと判断されなかった処理についてはクライアント側で行われることもある。特に、今回はクライアントとサーバーの挙動の差異が起因してエンダーパールの挙動に影響を与えている。

エンダーパールの初速について

ref: net.minecraft.entity.projectile.ProjectileEntity#setProperties

要約する*1が、エンダーパールの初速は サーバー側のプレイヤーの velocity (速度) を元に決定される。プレイヤーの velocity がそのままエンダーパールの velocity に加算される。

あくまでクライアント側の velocity ではないことがポイントとなる。

サーバー側での velocity 更新の動き

ref: net.minecraft.server.network.ServerPlayNetworkHandler#onPlayerMove

サーバーがクライアントからプレイヤーの動きに関するパケットを受け取った時、基本的には*2以下のどちらかの場合で のみ velocity が設定/加算される。

  • ジャンプした時( ref: net.minecraft.entity.player.PlayerEntity#jump )
    • y 方向に 0.42 加算される
    • さらにダッシュしていた場合、定数と角度で計算した値が x, z 方向の velocity として加算される
      • 定数を元に計算されることが重要!
        • つまり、俊敏のポーションやソウルスピードなどの影響を受けることはなく、ダッシュジャンプ時の横方向の速さは常に一定!!!!
      • 実装としてはこんなかんじ
        • x += -sin(角度のラジアン) * 0.2
        • z += cos(角度のラジアン) * 0.2
  • 入力に関与しない自然な移動が発生した時(net.minecraft.entity.LivingEntity#travel 周辺、いろいろ )
    • 具体的には
      • 落下(重力)
        • 例: 落ちている間、y 方向の velocity は毎tick加算される
      • 別のなにかから動力を受ける
        • 例: TNT に吹き飛ばされる
      • 水流に触れ、流されている
      • ツタなどに触れている状態で下方向に降下している
      • など

そうでない場合、例えば単にダッシュしはじめた場合、クライアント側の velocity は適切に設定されるが、サーバー側の velocity は 0 のままになっている!!! velocity が 0 なのに、座標が連続的に変わっていくような挙動をみせることになる。

例えば、俊敏のポーションやソウルスピードによって速さを得ていたとしても、サーバー側の velocity は 0 のままである。

減衰について

ref: net.minecraft.entity.LivingEntity#travel

また、上述したベロシティ加算の動きをしていない場合、基本的にはサーバー側の velocity は 1 tick ごとに減衰し、(何もしなければ)最終的には 0 に収束する。

例えば、ダッシュジャンプを一回行った後にダッシュを継続していたとしても、サーバー側の velocity が高く設定されるのはジャンプを行ったタイミングのみで、その後はゆっくりと 0 に近づいていく。

また、1 tick ごとの減衰幅はその場の環境によって異なる。例えば氷の上では減衰幅は小さく、相対的に少しずつ velocity が減衰していく。

これらの事柄からわかる、エンダーパールの初速について

以上の事柄より、以下のようなことがわかる。

  • ただダッシュしているだけではサーバー側の velocity は設定されず、エンダーパールの初速にも影響しない
  • ジャンプしたタイミングでエンダーパールを投げると、ジャンプ時に設定される velocity がエンダーパールの初速に影響するようになる
    • この時にダッシュしていれば、追加で定数と角度で計算した値が velocity に加算される
  • 落下時や、爆風によって打ち上げられている時など、外部から velocity に関する影響を受けている時にエンダーパールを投げると、プレイヤーに掛かっている velocity はエンダーパールの初速に影響する
  • 俊敏のポーションやソウルスピードによって事前に大きなスピードを得ていたとしてもエンダーパールの初速への影響はない!!!
    • ジャンプ時に得られる横方向の velocity は定数と角度で計算した値と、サーバー側の velocity のみが影響するが、初回ダッシュジャンプ直前の横方向の velocity は 0 であるため、俊敏のポーションやソウルスピードの影響をここに与えることができない
  • 氷の上で何度もダッシュジャンプする例のように、連続してダッシュジャンプを行いスピードを稼ぐ場合はエンダーパールの初速に影響する
    • velocity が 0 になる前に次の加算を行うことがこの種類の加速の原理であるため、サーバー側の velocity にも適切に反映される

1.21 からの差分点: movement

……と、ここまでは従来の挙動について説明してきたが、1.21 からは movement という新しい概念が追加される。

movement について

ref: net.minecraft.server.network.ServerPlayNetworkHandler#onPlayerMove

ref: net. minecraft. server. network. ServerPlayerEntity#setOnGround

おそらく、今回挙げたものに類する不自然な挙動に対してのパッチとして導入された概念*3で、実質的にはプレイヤーに対してのみ存在する。

movement は、クライアントから送信されたパケットをサーバー側が受け取り処理する際にプレイヤーが移動した距離がそのままベクトルとして格納される。重要なのは、これがサーバー側で設定されること。

これが、これまで説明した物事に対して以下のように影響を与える。

エンダーパールの初速は サーバー側のプレイヤーの movement を元に決定される。プレイヤーの movement がそのままエンダーパールの velocity に加算される。

差分としては、velocity ではなく、 movement が使われるようになったこと。これにより、ただプレイヤーがダッシュしているだけでもそのベクトルはエンダーパールの初速に加算され、より自然な振る舞いを見せるようになる。

また、そのパケットで進んだ距離がそのまま movement として扱われるということは、俊敏のポーションやソウルスピードで得られた速度もそのままエンダーパールの初速に影響を与えることとなる。こちらの方が直感的な動作と言えるだろう。

まとめ

ダッシュしている時など、クライアント側で velocity を得ていたとしても、サーバー側にその値が反映されているとは限らず、直感に反した動きを見せることがある。エンダーパールの初速も、この事象の影響を受ける一例だった。クライアント側とサーバー側の挙動の差異について理解することで、説明しづらい事象に対しても理解を深めることができる。

また、Mojangがこのような問題に対してどのように対応するのかの一例を確認することができた。今回の場合、ダッシュしているだけでもサーバー側でプレイヤーの速度が適切に反映されるようになった。その結果、エンダーパールの初速にも影響を与え、より直感的な挙動となった。

*1:実際にはここに乱数ベクトルが加算される

*2:イレギュラーはいくつかあるが、通常のブロックの上で通常の振る舞いを行っている場合はおおよそここに記載のあるものが大半に見える

*3:たぶんこの修正 MC-273007 で導入された概念 ぜんぜん違うかもしれないけど

叙々苑に行った!!!

「高い」ということで有名な叙々苑に、人生で初めて叙々苑に行ったので記念に記事を書く!

経緯

2020年3月頃、Twitter上でその日のご飯を迷っていたところ、おそらく冗談で「叙々苑」という提案があった。自分もその人も含めて叙々苑に行ったことがない様子で、ふざけて次のようなツイートをした。

以後、ちょくちょく「叙々苑にみんなで行く」というアイデアが頭を過るようになる。上のツイートにも少し現れているが、巡らせているうちに「ファーストインプレッションという側面を大事にしたいよね」ということになり、以下の2つを大事にした会を開きたいと強く思うようになった。

  • 全員が叙々苑に行ったことないこと
    • 一回目の叙々苑の経験は、感想の邪魔になるだろう
  • 全員が自腹であること
    • 奢ってもらうご飯が美味しいのなんて当たり前だろう

普段高いご飯を食べる機会が少ない自分(や、もしかすると我々)にとって、一万円をゆうに超える食事なんてまったく経験がない。この会で「一万円超の食事」「叙々苑」の体験を得て、今後のなんらかの判断基準として活かしていきたい、というのが主な動機だった。

最初のツイートから約4年間、事あるごとに機会を伺うが、人は集まらない上に、そもそも自分の気持ちの波もあってなかなか開催に至らない。一時期は一人で向かうことも考えたが、流石にソロ叙々苑ディナーは寂しすぎるので避けたかった。

そんな中、最近よく話しているしくしくさんにこの話をしたら「やろう」という返事が返ってきた!乗ってくれそうな人で、なおかつ明確にOKの返事をもらえたのがおそらく初めてだったので、ここで一気に乗り気になった。

これをきっかけに再度ツイートしたところ、二人から直接連絡が来たのでもう開催せざるを得なくなった!

追加で誘いたい人を誘ったりして、店を決めて*1、7人で叙々苑に向かうことになった。これだけ集まってくれたのって本当にありがたい!

本編

かなり良かった!!!以下、褒める。

今回は「月会席」という14,000円のコースに3,000円の飲み放題を付けて一人17,000円という構成を組んだ。コースなので、焼肉屋なのにしっかり前菜とかが来る。

その前菜が美味しいので驚いた。普段だったら偏食で頼まないし食べないであろう「ホタテとクラゲの和え物」を*2、なんらかの信頼によってそのまま口に運べたのがとてもよかった。めっちゃやらかいホタテってやばい。これが素材の味か?

やけに優しい味がして食いやすい、叙々苑版のやみつきキャベツもよかった。この手のサラダって大体激しい味付けが多いと思うのだけど、多分金持ちの余裕というか、「高級」ってこういうことなんだろうなと思ったりする。コーネリアスの曲聞いてる時と同じ気持ちだった。

前菜について、最初は「肉以外で腹を満たさせる姑息な戦略」感があった*3のだけど、前菜自体がうまかったので完全にペイできたと思う。純粋にコースの体験価値を上げてくれた。

で、肉。凄かった!!カットのせいか、焼く前の生肉の時点でかなり美しかったし、実際焼いて食べてみてもしっかり激ウマ。なんて言えば良のだろうね、脂身の感じ?がかなり上品なのが良かった。あんまり良い感想が出てこないな、純粋に肉自体が良いのもあると思うんだけど、食べやすい形だしその肉が一番うまいような状態で出してくれてるんかな~みたいなそういう

提供方法もよかったな、大きな皿にみんなの肉がまとまって乗っかっているのではなくて、個人の皿に自分の分のみが乗っていた。ふつうの焼き肉の場合、基本誰かがずっと肉の管理をしたり、なんなら気を使って自分が率先して焼き続ける、みたいなこともあったりするのだけど、ああいう摩耗的なコミュニケーションが要らなかった。それだけで心地よいんだな~みたいに思った。これによって、各個人がある程度自分のペースで食えているように見えたのもよかった*4

あと、カシスオレンジがめちゃうまかった!!!!!!!!いい甘さだし、何より酒感が強くない!!!僕は「酒は飲みたいけど本当に苦手」というめんどくさい人なので、こういうスッと入ってくれる酒は本当にありがたかった。こういう酒が飲めるところに行きたいよ。あと、果肉入りなのもよかった。加点ポイントやね。

最終的にかなり満腹だった。最初、コース選択のときに花会席を見送ったんだけど、多分花でも満足できてたんだろうな~。

叙々苑に初めて来たわけだし、明らかに初々しさだけでやってる一行だったと思うんだけど、店員がちゃんと丁寧だったことも覚えてる。いやな舐められ方って結構分かると思うんだけど、そういうのが無くて終始いい感じで居てくれてたな。

今回はコースだったしお腹いっぱいだったのでやらんかったけど、単品での注文もやりたいよね。あのよく見る?すだれみたいになってる肉のことも気になってる。次また叙々苑に行く機会があると良いなー

という感じで、叙々苑会は終了。参加者のみなさまも良さそうにしていたので、きっと良い会だったのだと思う。個人的にもちゃんと17,000円分の価値を受け取った。褒めたくなるところがたくさんあったし、楽しかったし、少なくとも今回はそれだけ払う価値があったはず。

ほかの6人の感想は、その会に足を運んだ人の記事とか、各個別に聞いたりとかしてみてください。多分なにか言ってくれると思うので。

*1:この時知ったのだけど、同じコースでも店舗によって料金が違ったりするらしい。注意ね!

*2:ホタテがかなり嫌いという先入観があった

*3:叙々苑ってベースが高すぎるから尚更ね

*4:ずっと肉を焦がしてる人もいたけど

インターネットの人ってなんだ

タイトルは単なるキャッチーな文字列で、まともにタイトルを回収するつもりはない ごめんね

私の過ごすWebのソフトウェア業界でも「インターネットが好き」という合言葉のような共通価値観がある。これも現在からみたら「水道が好き」のような違和感のある言葉だとしばしば言われているが、この言葉の中にもWeb 2.0当時の時代感やその場を過ごしてきた自分たちを懐かしむような喪失感を覚えるような感覚が今となってはあるよねいや俺はある

まだ件の新刊は読んでないのだけど、このあたりのノスタルジーは自分にも多少なりとも残っているので書いておこうと思った。


最近ツイートがバズった!人生初の万バズだった。

見るのがめんどくさい方に向けてまとめると以下のような動画になっている

  • MinecraftのRTAの録画のクリップ
  • アイアンゴーレムを倒してドロップ品の鉄インゴットを頂くまでの過程で失敗するという内容
    • アイアンゴーレムへの攻撃を3回失敗する
    • 干草の俵を足場にしようとしていたところ、真下がコンポスターでそのまま吸われてしまう

実際おもしろいシーンではあったのでTwitterに投げて身内に共有したかったのだけど、意図せずバズってしまった。拡散経路も全くわからないが、なんらかレコメンドシステムに気に入られてレールに載せられ、そのままスコアを稼いでいったのだろう。

このツイートをきっかけに自分のことをフォローしてくれたアカウントが14個もあったのだけど、この人らが自分をフォローした理由は、別に「なあり/naari3/名有りさん」を見たいためではなく、情報のインプットを多くしたいだけだったのだろうと思っている。僕を人ではなくTwitter全体の一端として捉えているのだろう。

ただ、別に無理もないことだと思う。昔と比べて、コンテンツ供給側の人間が桁違いに増えてしまったことで、レコメンドシステムなどを用意して人間に機械的に良さそうなものを提供することが容易になった*1が、このような状態で、受け手側は無数に知らない人(制作側)の名前を見ることになる。そんな中で供給側の人間を人として覚えていられるケースはかなり稀だと思う。

あなたが見るYouTubeの動画でも、多分「この動画を見ている人のうち登録者は15%に満たないので、登録ボタンを押してくださいね」みたいなことを言っていると思う*2し、どのサービスでも基本的にはそんな感じで成り立っている。人と人ではなく、スケール感、みたいな。

どちらのサイドの人であっても、もうスケールのみが大事で、細かな数字は必要ない時代なのかもしれない

これは、Web 2.0と呼ばれる当時のインターネットの空気感とは異なる部分がある。これは引用した記事中でも言及されていることなのだけど、特別なアイデンティティを持つ人が活動者として振る舞いやすい雰囲気があった。これは今思えば規模感によるもので、また、今思えば僕が当時の空気感が好きだった理由の一つでもある。なんとな〜くインターネットの全貌を掴めたような気持ちになれるような、そういう流速だったと思う*3

(2008年が「もう既に遅い」とか言われたらまあそうなんだけど、それでも今とは違う時代だったでしょ?)

自分がブログを書き始めたのも、そういうWeb 2.0な人々に出会ったタイミングだったように記憶している*4。ブログを書いている人の名前とか、なんらか著名なソフト/パッチの作成者の名前とかは知っていたけど、それらがタグのようなものではなく、完全に「生きている人」と結びついたタイミングが自分の人生に存在しており、その頃に抱いた何らかのあこがれによってブログを開設して書き始めた気がしている。*5

当時から今まで、僕は個人の運営しているブログを見るのが好きなのだと思う。本当になんでもない記事であったとしても、それが集合になることで筆者の人間性のほんの少しだけ深いところをうかがい知ることができるからで、そこそこ長く運営されているブログであればあるほどその傾向は強まっていく。20年近く運営されているブログなんかはほとんど伝記みたいなものだ。Web 2.0で輝いていた人々も、そんな感じで僕を魅了してくれていたのだと思う。それこそ、今回引用した記事を書いている方とか、その記事で取り上げられている新刊の著者とか、僕のことを勝手に支えてくれた人は結構いる。

自分の周りでブログをやっている人はそんなに多くなくて、基本的にはツイッターをやっている。なんなら、偶発的なバズや不特定多数からの悪意を気にして、鍵垢として運用している人も少なくない。まあ、そういう曖昧な可観測性を持ったネットワークも案外悪くないもの*6なのだけど、Twitterが今後も存続するためにはこれまで以上にセルアウトしていく(レコメンドシステムの稼働率を高くしていく)必要があるように思うし、そうなると個人の繋がりはどんどん薄くなっていく。なにより僕はもっとみんなのことが知りたいので、もっとみんながドメインを持って、ちいさなものでも良いから記事を書いてくれるようになるとめちゃくちゃ嬉しい!

個人の考えがある程度まとまって記載されているというのは結構すごいことで、感想の持ち方一つであっても誰かにとっては知見になりうる。レコメンドシステムみたいな「前ならえ」ではなく、千差万別であってようやく意味を成すことはあるはず。140文字じゃ足りなくなったらブログを書いてみてほしいね!!!

*1:あんま関係ないけど、大量の人が常に振り続けているサイコロを口を開けて待っているような様が似合っているね

*2:そして、そのタイミングでYouTube上の登録ボタンが虹色に光るが、これは皮肉にしかなっていない

*3:これはマジで思っているだけの可能性があり、当時のインターネットは今ほどでなくともそれなりにはでかかった。が、実際そう思っているので仕方ない

*4:名有りの前に持っていた名前ではてなダイアリーをやっていた

*5:最近はあまりブログも書いてないね…

*6:自分がここで生かされているからね。ちょっと生存者バイアスすぎるかも