520 日目(曇りから晴れ)眠くてハローワークに行けなかった
昨晩に引き続き元麻雀プロが賞金総額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に直列化して配置する。
- この例では骨
- 行列を含む、一様変数を設定する。
- 配列
bonesとbindPoseは長さnumBones = 4の行列の配列。要素 3 は使わない。
- 配列
- 空の行列に値を埋めていく。階層的に操作することになる。逆行列も要る。
- 関数
computeBoneMatricesの引数はbonesかbindPoseだ。 この関数の結果はangleにしかよらない。bones[0]は指定角度回転させたものを(4, 0, 0)だけ並進させる行列。
- 関数
renderを実装する。骨の値を時刻によって更新する?
22:50 ハシゴのコード終了。逆行列の意味は本文にあるように、変換し過ぎをキャンセルするためにある。
試しに render の m4.multiply の行を単に m4.copy とすると、
ハシゴのアニメーションそのものは同じだが、幾何が横に倍長くなる。
某アクションゲームにこんな動きをする障害物があったのを思い出す。
シャチのアニメーションに行く前に、一様変数に頼らないシェーダーコードに書き換える。
- 頂点シェーダーを書き換える。特に、行列の配列をやめて
sampler2Dに置き換える。 - テクスチャー作成コードを書く。テクスチャーを単なるデータ置き場として利用したいので、 フィルターは設定しない。
- 今までになかったパターンだが、
gl.texImage2Dをアニメーション中に更新する。
23:25 シャチやる? やらない。少し準備する。
- Async/await: 一読しておく。