2021.05

GUI フレームワークが少し進んだ

ゴールデンウィークにカラーピッカーとデータバインディングの仕組みをつくりました。 ステート変化のたびに仮想 UI Tree を返して裏側で物理的なリソース(GUI 上のバッファー、シェーダーモジュール、...)と紐付ける方法は見た目はきれいですがバインディング部分やリソースをプールして管理する部分が難しそうなのですこし imgui っぽい描画と UI Tree が密結合したシステムにしました。今は StackPanel のレイアウトシステムを作っています。

f:id:arcturu:20210531220338g:plain

今月の絵

顔くらいまともに描けるようになりたいと思い今作れる最大限のかわいさを考えました。これを突き詰めてみます。 f:id:arcturu:20210531223113p:plain

2021.04

WebGPU はいいぞ

WebGPU, というか wgpu-rs はとてもよいものです。低レベルグラフィックス API を始めたいけど Vulkan は too verbose だし DX12, Metal はプラットフォーム依存がどうにも、という人に向いています。実態は Vulkan / DX12 / Metal をラップしたグラフィックスライブラリなので低レベルグラフィックスプログラミングそのもの感は少し低いかもしれませんが、現代的なグラフィック API の特徴(グローバルステートを持たない、シェーダーのバイナリ中間言語が使える、...)を備えているので、いざとなれば Vulkan などに移植するのもさほど苦ではないという点で安心感があります。レイトレや Mesh Shader などはサポートされていませんが、しかたないですね。テッセレーションもないのでやるならコンピュートシェーダーで自前実装が必要ですが、これは Metal も同じ(といっても Apple が用意してくれている)らしいので最近の流れなのでしょうか。ブラウザ上で実用できるレベルに至るにはまだ数年かかりそうですが、ネイティブグラフィックスライブラリとしては現状でも十分実用的だと思います。

おすすめチュートリアルIntroduction | Learn Wgpu

GUI フレームワークを作る

wgpu-rs で GUI フレームワークを作っています。ウィンドウ表示とフォント描画ができるようになりました。現在レイアウトシステム(StackPanel, Grid でいい感じに配置したい)を作っています。IME 対応のテキストボックスは見えている地獄です。

f:id:arcturu:20210430213624g:plain
ウィンドウ

今月の絵

www.pixiv.net

2021.03

組子と L-System

組子、きれいですよね。シンプルなルールでできているので組子を表現するための形式言語を設計できそうだと思っていましたが、それは普通に L-System でした。武蔵美の高山先生の作品がやりたいことそのものだったので真似しています。L-System はある世代の形状は同じでもルールの記述方法によって木の構造が変わり、補間でアニメーションさせたときの見た目が変わるため、うまいこと狙ったアニメを作るにはかなりの経験が必要そうです。

vimeo.com

f:id:arcturu:20210331205714p:plain
麻の葉

しょぼいツールをさっと作りたい

筋トレメニューの記録やポモドーロタイマーなど、普段使いするしょぼいアプリは自分で作りたいものです。記録ツールを Web の技術で作ろうとすると永続化がしんどい問題に立ちあたりいつもスプレッドシートで妥協していたのですが、もうちょっと GUI に凝りたくなってきたので Firebase を触ってみました。サンプルプロジェクト作成のコマンドラインツールがいたれりつくせりですごいですね。GitHub Actions の設定までやってくれるとは。ポモドーロタイマーについては現在 Flat Tomato というアプリを使っているのですが、別にめちゃめちゃ使いやすいわけでもなく、自前でビジュアライズや分析をしたいなと思い始めたので Swift の勉強に iOS のネイティブアプリを書いてみようかと思っています。現代は開発環境の進化によってこういうちょっとしたツールが土地勘のない環境でも 10h くらいで作れるようになっている(作れるとは言っていない)と思うので、あとはやるだけ。

今月の絵

Portrait 3.18www.pixiv.net

絵を描きたい欲が完成まで持っていける分だけ湧くのは四半期に一度くらいしかない気がします。

2021.02

スキニングのあるべき形

について考えていました。というのもしわラボ用素体のスキニングが辛かったからです(未完)。単純に Blender のオペレーションに慣れていないのが悪いのですが、モデリングして UV 開いてテクスチャを描いてリギングしてモーションつけてライティングしてという流れがかなり不可逆で、MVP を作ってから全体をイテレーションしてブラッシュアップしていくという方針で立ち向かおうとしたときの辛さにやられてしまいました。手戻りのコストがとても大きい。これができるようにするためには(ラフ段階では)工程を自動化・プロシージャル化するのが良さそうですが、結構な研究が必要そうです。まずひとつ力技で完成させたあとで考えます。

たまこまーけっとがすごい

細かい演技と間がひたすらすごいです。たまこラブストーリーではさらに極まっていました。

anime.dmkt-sp.jp

F# に入門した

.NET で動く OCaml という雑な認識をしていましたが、最近触り始めてコンピュテーション式や型プロバイダーといったすごい機能を知りました。すごい。 F# cheatsheet を写経して雰囲気を掴んでからドキュメント仕様を読んでいます。

くるみ

私の中でにわかに筋トレブームが起こりつつあり、なかやまきんに君の動画を見ています。食事メニューの動画の中でαリノレン酸を取るためにアマニ油を飲んでいる場面があったのに触発されて、アマニ油と同じくαリノレン酸が豊富なくるみを食べ始めました。おいしいです。

www.youtube.com

2021.01

ZBrush を初めて起動した

去年のセールで買ったきり放置していた ZBrush を使い始めました。思ったより癖が強くてびっくりしました。とはいえ、オペレーションに慣れてしまえばあとは純粋な造形力の勝負という感じで能力の圧倒的不足に向き合わされています。絵を描くのに比べると筋肉や骨格の知識が直接的に役立つ気がするので勉強にはとてもいいです。頂点を意識するモデリングはどうしても造形よりトポロジーに目が行きがちなので、それと比べてもよりよい気がします。直近の目標はしわラボの素体を自由なライセンスにできるように自分で用意することですが、当たり障りのない素体を作り続けるのはつまらないので早く終わらせてかわいく動く美少女を作りたいです。でも UV 展開とリギングはやりたくありません。なんとかなりませんかね。

鶏と魚は皮を弱火でひたすら焼くとおいしい

最近フライパンのコーティングが剥がれてきたのでティファールから鉄製のものに変えました。それに伴って油をちゃんと敷くようになり、すべての炒めものがおいしくなりました。特にオムレツと鶏 / 魚のソテーはとてもおいしいです。オムレツは油を大さじ1敷いてよく予熱したフライパンに鶏ガラスープの素を小さじ0.5混ぜた溶き卵を入れて焼くだけ。卵をフライパンに落としたときにジュッと言うくらいがちょうどいいです。今までは空焚きがコーティングに良くないというのを過剰に意識して温まりきらないうちに入れていたのですが、しっかり予熱することで剥がれやすく外はカリッと中はトロッとしたとてもおいしいオムレツが焼けるようになりました。(テフロンは 200 ℃以上(つまり油が発煙し始める温度)にすると良くないということで、この程度の予熱なら問題はなかったはずです。)鶏や魚のソテーは塩を振って10分くらい置いたあと片栗粉(小麦粉がないので)をまぶし大さじ1の油を敷いたフライパンが熱くなり始めた頃に皮目から入れます。極めて弱い火で10分少々焼くと匂いが変わってくるので様子を見つつしっかり焼き目がついたらひっくり返して最後まで火を入れます。弱火でしっかり焼くと皮がパリパリになってそれだけでおいしいです。これまで野菜と肉を曖昧に蒸したものを食べ続けていたのでおいしい焼き物ができるようになって幸せになりました。

ケトルベルとマットを買った

何か道具を買うと運動のモチベーションが上がると聞いて買ってみました。ケトルベルとはダンベルの丸い部分だけを切り取ってケトルの取手のような物をつけた重りのことです。僕は初めて知りました。今のところ1週間くらい続いているのでやる気には多少つながっている気がします。筋トレグッズの身体性は馬鹿になりません。

AtCoder に登録した

何かあったときにさらっと DP が書けるようになりたいので練習します。とりあえず積んでいた蟻本を引っ張り出しました。

2021 やること

アニメを作る

自分の技術的興味と好みを満たせるものが何かと考えたときに 3DCG アニメがそれだと気づきました。 昔から完成作品を作ることよりもアセットパイプラインを整えることにのめり込みがちなのですが、本質に集中していきたいです。

ツールをいくつかリリースする

2020 年末は しわラボ を作っていました。 実用に供するにはまだ先が長いので引き続きがんばります。 3D のパイプライン整備、モデル・ポーズデータの作成、web フロントエンド開発とタスクが幅広いのでおもしろいです。 また、他にもアイデアだけ温まっている制作ツールがたくさんあるのでその中から一つ実装したいと思っています。

しかし、個人制作かつ中途半端な状態から公開していくような作り方をする場合、リリースって何なんでしょうね。

シェーダー芸に入門する

ピクセルシェーダーはある種の絵を描くための画材として非常に優れています。 そのスイートスポットを自分の絵に取り込みたいです。 最近 shadertoy をみてすごいやつを真似ています。

普段お世話になっている OSS を読む

何かをイチから作るのはおもしろいですが、そればかりだと自分のわかっている範囲のコードしか書かず技術的な向上が少ないので既存のすばらしいソフトウェアスタックに学びたいです。

ネタ帳:

量子情報を学ぶ

SF の面白さは現実世界の見方が変わる点にあると思っていますが、そもそも世界のありかたを古典物理の範囲でしか理解できていない(いや、古典物理すらわからない……)現状では楽しめる範囲が限られているように感じました。 古典計算機プログラマーがいらなくなった場合に量子計算機プログラマーに転身できるようになるという打算も込みで、世界の解像度を上げるために量子情報と関連する分野を芋づる式に勉強します。

【Blender】 いらないシェイプキーをまとめて削除する

使わないシェイプキー(Maya, Unity で言うブレンドシェイプ)が大量にあってファイルサイズが無駄に肥大化している場合、Python スクリプトで一括削除すると便利です。

シェイプキーが大量にある例
いらないシェイプキーが大量にある……

シェイプキーが設定されているメッシュが m_avg オブジェクトにあり、Basis シェイプキー以外を削除したい場合は以下のようなスクリプトを実行します。

f:id:arcturu:20201228184532p:plain
m_avg オブジェクト内のメッシュのシェイプキーを消したい

import bpy

# 消したいシェイプキーが存在するメッシュのオブジェクト名
target_name = "m_avg"

# 当該オブジェクトを選択する
bpy.data.objects[target_name].select_set(True)

# シェイプキーのリストを取得する
shape_keys = bpy.data.objects[target_name].data.shape_keys.key_blocks

# シェイプキーのリストを逆順に舐める
# (先頭から消すとインデックスがずれるので後ろから消す)
for i, shape_key in reversed(list(enumerate(shape_keys))):
    # 消したくないシェイプキーは除外する
    if shape_key.name != "Basis":
        # シェイプキーを選択して、削除
        bpy.context.active_object.active_shape_key_index = i
        bpy.ops.object.shape_key_remove()

参考