画力がないなら立体を作ればいい

3DCGでワンシーンメイキング(オリジナル小説の挿絵作り)

8方向のスクショをまとめて一気に保存するツールのリリース版がようやく完成(近日公開予定)

(約 3,000文字の記事です。)
f:id:yamato-tsukasa:20190624224339p:plain

8方向のスクショをまとめて一気に保存するツールのリリース版がようやく完成(近日公開予定)。プログラムが完成してもマニュアルがないと使い方が分からないよ、というのが当然だからだ。使い方はシンプルだが、3種類の作成方法に対応させるため、インターフェース(ボタン類)はどうしても多めになってしまった。なので、3種類の作成方法ごとに使い方マニュアルがないと面食らってしまうだろう。
というわけでリリースは明日の予定。今日はまた開発秘話的駄文をつらつらと。

相変わらずの変態インターフェース、それがZbrush

とにかく画面表示周りの制御がとても謎すぎて苦労する。拡大縮小時に見せたくない物が一瞬見えたり、それを回避しようとしてあれこれやると今度は見せたい物が画面に映らず次の行に遷移したり。とにかくZscriptは変態すぎる。

パース無しだと見切れないのに、パース有りだと見切れる事案

f:id:yamato-tsukasa:20190628013430p:plain

パース無しの平行投影だと、Fキーを何度か押してフルフィットさせたときには絶対に見切れない。なのでこれは既に実装済みである。だが、パースをONにして同じ操作をするとなぜか見切れる場合が発生する。これはオブジェクトの形状や大きさに依存するみたいで、とても対応が難しい。

で、色々創意工夫した結果、その手順を発見したのだが、それを「見苦しくなく実装」するのがとてつもなく大変だった。拡大縮小時に見せたくない物が一瞬見えたり、それを回避しようとしてあれこれやると今度は見せたい物が画面に映らず次の行に遷移したり。たったそれだけのことに半日近く持って行かれた。

最終的に見切れを防ぎきれないので対策を実装

残念ながらZscriptのみで100%見切れを防ぐことができないと判断。なので、今度は、いかに少ない手間で見切れた画像を修正するかに注力したわけです。8枚のスクショのうち、見切れる場合は1枚か2枚しかない。であればその1,2枚を表示させて、ちょっとだけ平行移動させてからスクショを上書き保存すれば事なきを得るだろう?ということで、そういう操作が「最小の手間でできるように」実装した。

f:id:yamato-tsukasa:20190628013952p:plain

例えば、アニメのデモヘッドは首元が見切れやすかった。あの傾斜がくせ者みたい。上手くマージンを調整すれば回避できたが、それを試行錯誤するよりも見切れる1枚だけをスクショで取り直したほうが早かったわけです。ま、これは特殊な例で、たいていの場合にはパース付きオートフィットでも見切れないのですが、見切れたときにも最小の手間で回避できる機能は実装しておきたかった。

3つの作成方法があるのでボタン類が増えた(笑)

  1. パース無しのオートフィット
  2. パース有りのオートフィット(+見切れ対策用の作成し直しボタン類)
  3. ズーム率固定の手動での回転軸の調整機能

もちろん開発当初は3番目がメインだった。回転軸の上下左右の調整機能とズーム調整機能があれば、パースの有無に関わらず程よい余白をユーザーが決めればいい。本来はこの実装のみで完了の予定だった。

だが、自分で使ってみて、いちいち回転軸の位置を調整するのが面倒だな、と思ったので、オートフィット機能とを組み合わせて一発で8枚作れないかな?というアイディアからスタートしてこのざまよ(笑)パース無しなら楽勝だった。パース有りが大変だった。個人的に造形時には平行投影ベースなのでパース無し作業だったが、人によっては仕上がりのスクショなので画角50mmなどの肉眼に近いパースでのスクショを取りたい人もいるだろう、との配慮からだ(余計なことを、と今になって思うが、当時そう配慮してしまったのだからしょうがない(笑))

プレビュー機能にこだわったから余計に大変だった

実は、8枚のスクショを保存する機能だけ出れば、パース有りオートフィットでもここまで手こずらなかった。手こずったのは、プレビューボタンの機能の動作が理想的でなかったからだ。ちらついたり不要な見せたくない拡大縮小途中の絵が見える。これを避けたい。そのため沢山試行錯誤するハメに。もちろんファイルに出力するだけならば、ちらつきとかそういうのは無関係なので、プレビューの美学を捨てればもっと早くできた。だが、やはり美しくない。そして、ファイルを作っては上書きし直す、という工程もまた美しくない。

やはり、プレビューして、余白や位置を調整し、OK状態で満を持して一発で8枚保存し、それをさらっとチェックして完成、というワークフローが一番美しいだろう。効率的でもある。その際に見つけたNG1枚に対して、Angle No.を参照してその1枚をさくっと作り直して上書き保存でおしまい、というのが理想。それをできるように実装するのに今までかかったわけで。

8方向からのスクショに限って機能を絞った

将来的には45度に限らず30度などにも対応させたい。だが、そもそも需要があるか謎だ。なので、今回のインターフェース周りは欲張らずにきちんと8方向からのスクショに絞ってシンプルにしている。手動で1枚の取り直しにしても、実装は当初、回転角度(0~360度)の入力スライダーだった。だが、使いにくい。3枚目のスクショを修正したいのに、3枚目の回転角度は何度?と考えるのが面倒だ。なので、AngleをAngle No.とし、角度入力ではなくてスクショの末尾のナンバーを入力させるように変更。これで8枚のスクショをチェックした際にNGが出たNo.と同じ数字をそこに入力してViewし、ドキュメント内のオブジェクトを平行移動させ、Exportで同名ファイルに上書き保存すればいい。これでさくっと修正完了だ。

もちろん、パース無しの場合や、パース有りでも手動で回転軸をドキュメント内に指定した場合には、プレビュー段階で見切れないようにしているはずなので、この手間すら発生しない。したがって、この手動での最短修正方法が実装されたことで、3種類の作成方法のどれであっても完璧に見切れのない8方向からのスクショが簡単に作れることになる。最短ボタン一発、多くてもボタン数回~十数回以内で完結する。

これをリリースして、ようやくこのプラグインの開発が終わる。恐らくはこれを期待していたユーザー様のご要望に十分以上に答える仕上がりとなっているはずだ。恐らくはプロの原型師など、ユーザーは限られるが、とても強力な時短ツールになることは間違いない。

今の私にとっての利便性は低いが、もしかしたら将来的に使うことになるかも知れない。そうなったときに、よく堅実に作っておいてよかったなぁ~と思えるなら、それが一番いいだろう。

今回の創作活動は約30分(累積 約872時間)
(274回目のブログ更新)