9/27日記 ===== その他 ===== * 午前中医者午後医者かと思ってたけど、予約を確認したら午前中のほうは来週だった。 * よって午前はほぼ気を失ってた。 * 午後は医者。 ---- * 会員用SNSで、プラン加入について「重複可能」というのを見た。 * これはどういうことかというと、プランA加入かつプランB加入というのを有効にしているということ、つまり一人のユーザから複数のプランを加入している状態を可能にしているということだった。 * 実装的には一人のユーザからどのプランを利用しているかを管理しなくてもよくなるためトランザクションは減る。 * つまり会計トランザクションだけを保存しておけばOKという取り扱いになる。 * 勿論「これかっぱぐ構成を可能にしてんだろ」と思う反面、システムとして管理情報を簡素化して運営しやすくするという工夫は大事で、これを実装にまで移したのはすごいなと思った。 ===== プログラム ===== * https://techblog.kayac.com/unity-shader-parameters-precision * 15年くらい前に携帯上(GalaxyNote3)でShaderプログラムを動かして遊んでいた時期があったのだけど、それで遭遇したことがある。 * 自分の場合は、テクスチャの座標をfloatで持って、それを加算し続けていたという内容。記事ではhalfだけど、floatでも仕組み上同じことが起こってしまう。 * 対策としては「0~1の範囲でリピートさせる」こと。あまりに大きな値にしないことが一番重要。また上記の機種依存に引っかからないようにできるだけ仕様に沿う計算である必要がある。(こちらは二次的な回避策ってところ) * なので、MiniScriptみたいに言語上でfloatを仕様どおりに処理させる環境で計算すること、またあまりに大きな値にしないこと、という2系統の施策が必要なんじゃないかと。 ---- * なんでこんなことを覚えているかというと、ちょうどTokyoDemoFestに行ってたとき、会場で症状を確認したから。 * 確か会場がここのとき。 * https://institutfrancais.jp/tokyo/about/contact/ * 大学のとき市ヶ谷に通っていたので、ここらへんの地理を少しは理解していた記憶がある。 * エピソードと同時だったから時期や症状も記憶していた、という感じ。 ---- * https://zenn.dev/toropippi/articles/d8def1c994e0a9 * Shaderから呼ぶsin/cos関数の精度誤差について調べてる記事。 * そう言えばあったなそういう誤差。2017年頃、上と同じTokyoDemoFest用の4kb intro作ってるときに遭遇した。 * メガデモ用にShaderで音楽書いてたとき、ハイハットの音について高音が鳴る環境とそうでない環境が存在した。 * 元々ハイハットはsin関数だけで実装していた。高周波にして値をサンプリングする段階でまばらにプロットすることで、擬似的にノイズっぽく音を設定することができる。流石に耳を爆発させるようなもん作るわけにはいかないので、調整はしていたけど。 * で、入力範囲が制御の関係上かなり大きい値になるため、記事と同じような誤差が発生してたと思われる。記事の記述のとおり「sin(time*x)」での実装だったよ!w * 会場だと高音が鳴らないけど、家の環境だと鳴るとかそういうやつだった気がした。 * これはShadertoyで鳴らしたときに顕著だった気がする。 * WebGLでテクスチャに書き込んでそこからWAVデータを読み込んで鳴らせる仕組みだけど、GPU処理自体はローカルPCで行うから差異が出てくるものと思われる。 * あと作った当時ブラウザでの動作がOpenGLES準拠だった気もするのでそこらへんが関係してるかも。 ---- * https://machiaworx.net/?p=692 * 上記のデモはこのページの「A stranger」ってやつです。よかったら見てみて。 * Webに貼ってあるのはShaderToyへの移植版。実行ファイルはフォルダの奥底だしセキュリティ的にNGな扱いなので今後どうしたろうか悩むやつ。 * GLSLCompoで出そうとして期限に間に合わなかったこと、またメガデモ提出までの時間が1-2週間くらいあった、という理由で、曲をでっちあげて急遽4kb introの形にして提出したというメガデモ。 * GPUで曲を書くのも初めてだったけど、ちょうどそのときGLSL用のツールを作っていたのでそれを改造し、簡易的な曲の再生プログラムを作って対応した。 * 実行ファイルの作成も内容をギチギチに詰めてたわけではないので、サイズにも余裕が・・・なかったわ。文字列で多くなったので調整した記憶がある。 * 本当になんでそんな選択したんだよ自分・・・ * そういや、上記のメガデモは会場PCでうまくOpenGLのウィンドウ初期化ができなくて横伸びしてた気がする。全画面化でディスプレイの座標をしっかり取っていたはずだけど・・・後日自宅のPCでグラボ交換したあとで試してみたところうまく動いてたのを確認したので、なんで会場で起きたのかわからん。サンプル数が少なすぎる。 ---- * 割と昔のことだけど覚えてるもんだなって思った。 * 老人っぽくなってきてるのかもしれない。できるだけなりたくないので色々あがくけど。