昨晩に引き続き元麻雀プロが賞金総額200万円の大会で入賞を目指す配信【雀龍門M】 - YouTube をチェック。422233 の次のゲームから。開始からちょうど三時間くらいで初トップ。 これだけ腕の立つ人が打ってもこういうことがあるのが麻雀。

1:50 消灯。就寝。

7:05 起床。納豆と米を食う。床が汚いので戻ってきたら掃除しよう。出勤。

7:45 現場ゴミ置き場。可燃ゴミも多いが、ダンボールや雑誌なども多い。大変だ。 管理人室で支度をしてから作業に取り掛かる。 幸い今日は菊チャン(仮名)の嫌らしいゴミがないので、コツコツやれば進む。

資源ゴミの準備もしておく。ダンボールがかさばる。館内の清掃はテキトーに済ませるしかない。

10:00 終業して撤収。イトーヨーカドー曳舟店で体温チェックとトイレ。

10:45 曳舟の部屋に戻る。床を拭く。また手を洗う。PC を開く。

  • #671 ペンゴ PENGO BGM ギターメドレー - YouTube: 前回と逆で、ゲームを知っているのに音楽を知らないものが来た。アレンジも演奏も丁寧なのはわかる。
  • 【歌舞伎町東風戦攻略】鳴きの考え方 - YouTube: この回はちょくちょく見返そう。
  • WebGL2 Skinning
    • 複数の行列の影響を加味して頂点を移動させる技法。
    • 骨と重み
    • スキニングありの頂点シェーダーでの頂点計算はこういうものになる:

      gl_Position = projection * view *
          (bone1Matrix * position * weight1 +
           bone2Matrix * position * weight2 +
           bone3Matrix * position * weight3 +
           bone4Matrix * position * weight4);
      
    • 指の骨のように階層的に行列を操作する。
    • 最初のハシゴのアニメーションにおける赤線全体を skinned mesh という。 緑+青の L 字は各骨のローカル座標系と考えられる。
    • シェーダーで uvec4 を使っている。このときは gl.VertexAttribIPointer を使うことに注意。
    • GLSL では一様変数の上限に厳しい制限があるので、テクスチャーデータの領域を流用する。 テクスチャーには浮動小数点テクスチャーというのがあるので、その気になればここに行列を収納することもできる。 GLSL にテクスチャーからテクセルを得る texelFetch という関数がある。
    • glTF ファイルは WebGL 用に設計された。今回はそのローダーを実装する。
    • 今回はシーングラフの回を取り組んだ後であることを前提としている。
    • シャチの絵が出るところまでコードを作る。それからスキンに対応する。
    • 終盤、デバッグの手法について。

12:00 おやつ休憩。

13:10 スキニングの回のテキストを読み終わる。今回は今まででいちばん大変だ。

13:30 寝たい。

16:15 起床。今日もハローワークに行けなくなったか。疲れていたから仕方がない。

外出。スカイツリータウン二階トイレ。書店。雑誌チェック。アエラとスパ。 たまには雑誌を何か買いたいものだ。

押上駅バス停に移動。乗車して錦糸公園へ。

17:15 オリナス錦糸町二階。ベンチで休憩。携帯電話で Twitter をチェック。 イルベロ新作の発売が延期されたようで残念だ。私は遊べないのだが、その分誰かが遊びたいはずだ。

18:00 タイトー F ステーションオリナス錦糸町店。MJ プロ卓東風戦 6 クレ。 変なタイミングでコンティニューさせられたため、閉店時刻ギリギリまで遊戯することになった。

【SCORE】
合計SCORE:-170.2

【最終段位】
四人打ち段位:十段 経験値:-18.1

【9/28の最新8試合の履歴】
1st|----*---
2nd|--------
3rd|-*-*----
4th|--*--***
old         new

【順位】
1位回数:1(14.29%)
2位回数:0(0.00%)
3位回数:2(28.57%)
4位回数:4(57.14%)
平均順位:3.29

プレイ局数:37局

【打ち筋】
アガリ率:13.51%(5/37)
平均アガリ翻:2.20翻
平均アガリ巡目:13.20巡
振込み率:29.73%(11/37)

【9/28の最高役】
最高役のデータがありません。最高役は、跳満以上のアガリが対象となります。

今日はガンガン攻めに行くも、上級者の判断は揺らぐことがなくダメな結果に終わる。 トップを獲った唯一のゲームはどこに出しても恥ずかしくない出来だったが。

20:00 カスミオリナス錦糸町店。437 円。

  • 野菜ジュース (900)
  • 豚肉と玉子ときくらげ丼
  • ブラックチョコ

20:25 ビッグエー墨田業平店。336 円。

  • 絹豆腐 (2)
  • 小粒納豆 (3)
  • 大きなコロッケバーガー
  • カレーヌードル
  • コッペパンジャム&マーガリン

曳舟の部屋に戻る。冷蔵庫を見たら納豆が十分あるではないか。あちゃあ。 シャワーを浴びる。風呂から出る。晩飯を用意しつつ PC を開く。

スキニングのコードを書く。これはシリーズ物ではないので、スクラッチから書くていで。

  • シェーダーを書く。上述の GLSL コードがキモ。
    • エディター作業の利便性を上げるため、一様変数の識別子を u_ なんとかに置換しておく。
  • 頂点データを定義する。座標、インデックス、ボーンへの影響度からなる。
    • この例では骨 boneNdx は 0, 1, 2 しか使わない。
    • 骨行列は変数 boneArray に直列化して配置する。
  • 行列を含む、一様変数を設定する。
    • 配列 bonesbindPose は長さ numBones = 4 の行列の配列。要素 3 は使わない。
  • 空の行列に値を埋めていく。階層的に操作することになる。逆行列も要る。
    • 関数 computeBoneMatrices の引数は bonesbindPose だ。 この関数の結果は angle にしかよらない。
      • bones[0] は指定角度回転させたものを (4, 0, 0) だけ並進させる行列。
  • render を実装する。骨の値を時刻によって更新する?

22:50 ハシゴのコード終了。逆行列の意味は本文にあるように、変換し過ぎをキャンセルするためにある。 試しに renderm4.multiply の行を単に m4.copy とすると、 ハシゴのアニメーションそのものは同じだが、幾何が横に倍長くなる。 某アクションゲームにこんな動きをする障害物があったのを思い出す。

シャチのアニメーションに行く前に、一様変数に頼らないシェーダーコードに書き換える。

  • 頂点シェーダーを書き換える。特に、行列の配列をやめて sampler2D に置き換える。
  • テクスチャー作成コードを書く。テクスチャーを単なるデータ置き場として利用したいので、 フィルターは設定しない。
  • 今までになかったパターンだが、gl.texImage2D をアニメーション中に更新する。

23:25 シャチやる? やらない。少し準備する。