引き続き YouTube で秋の夜長をやり過ごす。

次にやりたい WebGL2 Shadows のデモをいじる。 照光処理+投影写像のようなプログラムになるだろう。つまり難しい。二日かかるかもしれない。

2:00 消灯。

7:05 起床。納豆と小稲荷すしを食う。ゴミを出しつつ出勤。

7:45 現場。可燃ごみの日だが今日は楽ちん。館内を清掃。 管理人室の床の続きをやろうとしたら、突然本部の人物が登場。何か用事かな。 どうやら私の携帯電話の番号を間違えていたらしく、直接足を運んできたようだ。 本当の用件は室内に放置している粗大ゴミを移動しろということなので、さっそく遂行する。 写真を撮ってもらってお引き取りいただく。そういえば以前会った時に名刺をもらったが、書類入れにない。おかしいな。

10:10 撤収。ペットボトルのフタを落とした。

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

  • 緑茶 (500)
  • チキンカツバーガー
  • コッペパンホイップ&チョコ
  • カレーヌードル
  • 絹豆腐

イトーヨーカドー曳舟店で体温チェックと手洗い。それから曳舟の部屋に戻る。 洗濯物を洗濯機にブチ込んで運転開始。気になるので名刺を探す。 絶対に捨てていない自信があるのだが、見つからない。おかしい。

PC を開いて時間つぶし。洗濯物を干す。

  • アクトレイザーリメイク素晴らしい。
  • WebGL2 Shadows
    • 前回の投影写像に基づいて、シーンに影を追加する技法を議論する。
    • 最初のデモは前回のものと同一。
    • 投影テクスチャーが奥行きデータを持っていればいいことができる。
    • イラストの意味がよくわからない。これは困る。 このサイトの図解は基本的によくできているのだが、この回のこれだけわからない。
    • フレームバッファーを利用して影写像を定義する。
    • シーンを 2 パスで描画する。異なるシェーダープログラムで同一の VAO をできることなら使いたい。 そうするには、頂点シェーダー同士で属性のレイアウトを明示的に一致させる。
    • フレームバッファーをレンダリング処理に組み込む。
    • シーン内に普通の幾何としてキューブを追加する。それに伴い、初期値各種を調整。 特に FOV をかなり大きくする。ここまでがデモ 2 の処理だ。変更点をまとめる:
      • 画像テクスチャー周りのバッファーを削除。そして depthTexture, depthFramebuffer を追加。 テクスチャーの GPU フォーマットに gl.DEPTH_COMPONENT32F を指定する。 フレームバッファーの取り付け種別は gl.DEPTH_ATTACHMENT とする。
      • 関数 drawScene の引数に行列とプログラムを取るようにする。2 パス描画対応。
      • 変数 programOptions を追加して gl.bindAttribLocation を内部的に処理させる。
      • 関数 render を変更。
      • 断片シェーダーの変更。projectedTexColor をテクスチャーの R 成分から決める。
      • オマケのキューブ追加。
    • ここまでは準備。ここから本番。
      • 断片シェーダーを書き換える。ここで初めて projectedTexcoord.z を利用する。 projectedDepth, shadowLight を定義し、影の部分の色をアルファー値を除いて完全に黒にする。
      • bias を追加して shadow acne を緩和する。
  • サムライスクランブル出すぞ! - YouTube: ウォーミングアップで 1P 側でプレイしておいてターンテーブルを右手で取るのが面白い。

12:10 おやつ休憩。

13:10 シャドウマップのコードの第二版まで書く。バイアスまで。

14:00 PC を閉じて昼寝する。

16:20 起きる。少し遅くなったか。外出。

スカイツリータウン二階。トイレと書店を利用。月刊 Hanada 11 月号だけチェック。 先月号で述べられていた佐藤優氏のミオクローヌス等々の件が気になるので連載をチェック。 容態は悪くなってはいないが、良くなってもいないように読める。

地下鉄に移動。押上駅から小川町駅へ。 白泉社前の刊行物ディスプレイで花とゆめが二号 (19, 20) 並べてある。 二冊の表紙を横に並べると一枚の絵になるようだ。

まず秋葉原 HEY 二階に行ってウォーミングアップ。フェリオスが中継台に移動しているのはありがたい。 代わりに、今日のイルベロのお隣さんはゼロウィングだ。これなら静かだ。 アップということでイルベロをワンゲーム。鍵ミスが複数あって幸先悪いスタート。

いったん退店。小諸そば昌平橋橋店。380 円。二枚盛り大盛り。

また HEY に戻る。ここでゲームをしようと小銭入れを開けて気づいた。 さっきの券売機で釣り銭を回収していない。700 円がパーになる。 まだ営業時間内なので小諸そばに戻る。ダメ元で店員に釣り銭が放置されていなかったか尋ねる。 が、ダメ。知らない。まあそうなるだろう。トボトボとゲーセンに戻る。 この 700 円、どこで取り返そうか。

気を取り直してイルベロ。3 クレ遊んで高々 95 億。そして残りが凡プレイ。これはダメだ。 気分転換にラジルギにも手を出すが、五面中ボスで全滅。最近このパターンが多い。良くない傾向だ。

21:25 退店。巣に戻ろう。

曳舟の部屋に戻る。シャワーを浴びる。明日は換気扇の掃除だ。 風呂から出て PC 作業に戻る。VS Code 上の日本語入力変換が遅い。 これはいつかビデオ撮影してみんなに見せつけたい。

  • Castlevania Advance Collection Trailer - YouTube: 悪魔城ドラキュラの GBA 三本と SFC 一本の再録?パッケージ。オマケもある。 古い作品のデータベース作成は大変だろうに。
  • WebGL2 Shadows 続き
    • どういうわけかここまで後回しになったが、照光処理を実装する。
      • まず、スポットライトの回のシェーダーソースを引用する。頂点と断片の両シェーダー。 texColor.rgb * light * shadowLight + specular * shadowLight の計算が異様に見えるが気にしない。
      • 一様変数を大量に追加するのに伴う drawScene 周辺のコード追加。
        • lightWorldMatrix.slice(8, 11).map(v => -v) の記法は盲点だった。 本物のベクトル型がない JavaScript ならでは。
        • drawScene 呼び出しも引数を書き換える。ファーストパスで cameraMatrix == lightMatrix であることがミソ。
      • 背景色を黒に変更する。
      • 錐体ワイヤーフレームを白に変更する。
      • これを実行すると、影の輪郭がギザギサしていることがわかる。 影テクスチャー座標空間の軸方向に沿っていると推察される。輪郭をぼかせばいい感じになりそうだ。
    • 最後にスポットライトを指向性照明に置き換える。両シェーダーの処理と一様変数を減らす。
    • ただし、最終版は余分な影ができることがある。UI の targetX を大きく変更してみるといい。

23:40 Shadows 終了。

このサイトは学習順序が目に見えないので、こういう行き止まりがあるとどこに進んでいいかわからなくなる。

サムライスクランブルチャレンジのビデオがちょうど終わるところで本日は終了。