メッシュに穴あけ(SDF)

下記の表現を少し違う手法で試してみた。
参考
おそらくリファレンスの百様図はfragment shaderで穴部分をdiscardしているかと(たぶん)思うのだが、そうすることで拡大に耐えうることができ、アルファ付き画像をテクスチャにした場合より綺麗に描画できる(画像だと解像度に依存するので、拡大すると縁のビットマップが見える)。
ついでに紙の質感を出すために、縁にベベルなども施している模様。
今回のプロトタイプでは、代わりにSDF画像を作成して穴を開けてみた。SDFは境界からの距離を保持したデータであるから、同じく拡大に耐えうるはず。例えば、troikaのようなテキストをメッシュとして描画するライブラリでも使用されていた記憶がある。(つまり円や三角といった幾何図形でなくとも、任意の形でくりぬける)。
白黒マスク画像をSDFに変換するのは下記のコマンド。いくつか手法はあって精度が多少異なるらしい。
magick mask.png -colorspace Gray -threshold 50% -negate -morphology Distance Euclidean:4 -auto-level -resize 512x512 -depth 8 sdf.png


影について
cast shadowをしたときに穴の部分の影が適切に抜けない。
そのため手動で、メッシュのcustomDepthMaterialを変更し、影の形状をカスタマイズする必要がある。MeshDepthMaterialをいじって、穴の部分をdiscardさせることで影をその部分は落とさないようにさせる。