このへんから行ってみるか。

2:10 消灯。

7:05 起床。納豆といなり寿司を食う。出勤。

7:45 現場。可燃ゴミの日。片っ端から片付けていくしかない。 粗大ゴミギリギリのブツは分散して出す。館内の清掃を挟んでゴミをさらに処理する。 カーテン多数、フライパンや鍋などの食器多数、中身の入ったペットボトルやらビンやら。 なんなんだこいつは。

10:10 終了。撤収。

10:30 ビッグエー墨田京島店。259 円。

  • 絹豆腐
  • おむすび鮭
  • シーフードヌードル
  • コッペパンホイップ&チョコ

イトーヨーカドー曳舟店。体温チェックとトイレ。あまり出ない。

曳舟の部屋。白ブリーフ一丁になる。PC を開く。

  • Radirgy Noa ラジルギノア - Arcade Mode - ALL (Good End) - 247.211.520pts - YouTube: BGM として再生する。
  • WebGL2 and Alpha: 読むだけの回だ。
    • WebGL は OpenGL とは違って HTML ページのキャンバスに描画するのが前提だから、 アルファーブレンディングの感じが違う。OpenGL の人が WebGL をやるとこの点を混乱するらしい。 本稿では WebGL の挙動を OpenGL のそれに一致させる方法を紹介する。
    • canvas.getContext('webgl2') のときにオプションをしているすることで、挙動を変える。
      • premultipliedAlpha: false で OpenGL に近くなる。 キャンバスの CSS 背景色を赤とかに設定してから試そう。
      • alpha: false でアルファーを無力化する。これが最良と言っている。
    • gl.clearMask でアルファーに対するクリアを制御する。オンにしたい場合とオフにしたい場合がどちらもある。
    • (1, 0.5, 0.5, 0) のような、アルファーがゼロの RGBA 値は un-premultiplied であるときにしかできない。なぜなら premultiplied のときには結局 R, G, B もゼロになるからだ。これでは意味をなさない。
    • gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true) とすると画像読み込みのときに premultiplied してくれる。
    • あとはブレンディング関数の指定に注意すればいい。 OpenGL では unpremultiplied なので (gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) と指定する。WebGL で既定のまま premultiplied ならば (gl.ONE, gl.ONE_MINUS_SRC_ALPHA) と指定する。
  • WebGL2 - Rasterization vs 3D libraries: Three.js のコードを残しておいたのだった。今やる。動作確認のみ。 メタリックなキューブが出てくる。

12:00 おやつ。カップ麺を仕込もうとしたらようやくガスが止まっていることに気づく。 昨晩の地震で自動停止したようだ。服を着て外のガス装置の操作をする。ああ面倒だ。

13:20 いったん自習を打ち切る。

  • Illvelo イルベロ - Special - ALL - 3.554.747.550 pts - Key 103 - YouTube: 注目するべきは description の以下の主張。本編でも成り立つか興味がある。

    It also looks like the game is a lot more generous with weapon level-up items, or maybe it’s just that the bonus stages naturally spawn more of them? In any case, I also noticed that those weapon level-up items will always match the weapon with the lowest level.

14:00 前に猛烈な睡魔が私に襲いかかる。急いで PC を閉じて床につく。今日は夏のように暑い。 横着しないでまた白ブリーフ一丁になればよかった。

16:15 起床。外出。

スカイツリータウン二階。トイレ。

押上駅。地下鉄で移動。

17:05 昌平まちかど図書館。至福の時間。 月刊マックファンの鈴木みそ先生のマンガ、週刊新潮、週刊文春を読む。 特に新潮が読むところが多い。辛酸なめ子先生の談話は巧い。 中川淳一郎先生によると今の日本では安売りは悪手。サービスの届かなかった客が騒ぐだけだから。 頂上対決のアメリカ分析はうんちくとして覚えておく。

18:00 小諸そば昌平橋店。前回、二週間前の来店時に釣り銭を取り損なうという失敗をした。 その影響だというわけではないだろうが、券売機がタッチパネル式に刷新されている。 とりあえず 380 円の二枚盛り大盛りで。

18:30 秋葉原 HEY 二階&三階。イルベロ、ラジルギ、コットンロックンロールをまとめて 5 クレプレイ。

コットンの初プレイの結果は 3 面でゲームオーバーというショボいものになった。 いきなり遊び始めたものだから操作がわからない。実は前作をやったこともない。無謀だったか。 私が選んだ 3 面のボスはトラブルウィッチーズのそれのような動きをしてくるので、一見してダメだと悟った。 ゲームが終わってスコア画面を見ると、全 8 面だと思われる。遠いなこれは。 ゲームの雰囲気はかなり明るいので、一周クリアまでは続けられるかもしれない。

ラジルギは気分転換。残ゼロでマイルマークまでたどり着く。危うい。

肝腎のイルベロ。2 ゲーム目のレベルが 240/298/300 みたいな感じでガクッと来る。 どうしてあと一歩の踏ん張りが効かないのか。 さっきのレベルアップアイテムの件も調査を少しずつ続ける。 鍵面と表でレベルアップアイテムの出現パターンが異なる可能性はあるかもしれない。

21:00 退店。小川町駅。電車を二本見逃してようやく乗れる。人が多い。

21:45 曳舟の部屋。シャワーを浴びる。

風呂から出てチョコレートをかじりながら PC を始める。やはり室内が暑い。夏だ。

メールチェック。ない。週明けハローワークだ。

  • 「beatmania IIDX 29 CastHour」収録楽曲クロスフェード Part.1 - YouTube: 視聴者コメントにビデオの感想がいくつかあるのがうれしい。
  • WebGL2 Precision Issues
    • 断片シェーダーの一行目に書く precision highp float; のような宣言は何かを説明する。
    • lowp は最低 9 ビット長の値。
      • 浮動小数点数ならば -2 から 2 まで(の有限個の値しか表せない。以下同様)
      • 整数値ならば Uint8ArrayInt8Array の要素の値に近い。
    • mediump は最低でも 16 ビットの値。
      • 浮動小数点数ならば $-2^{14}$ から $2^{14}$
      • 整数値ならば Uint16ArrayInt16Array の要素の値に相当する。
    • highp は最低でも 32 ビットの値。
      • 浮動小数点数ならば $-2^{62}$ から $2^{64}$
      • 整数値ならば Uint32ArrayInt32Array の要素の値に相当する。
    • 例えばデスクトップ GPU では mediump を指定したとしても、 内部では 32 ビットを使用することがほとんどだと思っていい。これはテストのときに問題になり得る。
    • 速度を稼ごうとして安易に mediump を指定すると、 normalize, length, dot などのベクトル演算が簡単に有効範囲外の値を生じる。
    • gl.getShaderPrecisionFormat で GPU が対応する精度情報が得られる。
    • 断片シェーダーの先頭で精度を指定しているが、これは既定の精度を指定するものだ。 実は変数単位で精度を指定することもできた。
    • 全体的に、OpenGL の仕様は、要求する精度よりも実際に使用される精度が高くなることを許しているようだ。 低精度のテクスチャーを生成して目視で検証するのは面白いテストだ。
    • gl.disable(gl.DITHER); も面白い。
    • 今回のサンプルコードを私のノート PC 環境で実行すると、 gl.DITHER が有効だろうが無効だろうが、結局 16 階調で描画される。 色を赤から深ピンクに変えたら、低精度感がこの記事の主張に沿うように増した。

      // ... pragmas, attributes, etc.
      
      const vec3 deeppink = vec3(1.0, 0.078, 0.576);
      
      void main() {
          gl_Position = position;
      
          // we know position is a clip space quad from -1 to +1
          v_color = vec4(deeppink * (position.x * 0.5 + 0.5), 1);
      }
      
  • ドラクエ5 オルゴール Dragon Quest V - music box - YouTube: 楽曲によって音色の向き不向きがある。 最後の曲は PS2 リメイク版のヘンリー王子からもらった引出物を思い出させる。
  • 《睡眠用BGM》 ドラクエオルゴールvol.7 ドラクエ1~6 その3  Dragon Quest music box vol.7 - YouTube: ジパングの BGM が面白い。