LIFE LOG(MochiMochi3D)

MochiMochi3D

3D関係の記事を書きます

コミケC101でBSDFの本を出しました

3か月ほど前の話なのですが、コミックマーケットC101にサークルとして参加しBSDFの本というニッチな本を配布してきました。(電子書籍版がありますので興味がある方はぜひ)

motimoti3d.booth.pm

即売会もよく知らない人間だったのでC101の参加はとても刺激的な体験になりましたが、配布までの道のりには色々苦労がありました。なんせ製本なんて一回も考えたことすらないのでどうやって技術書なんか書くのかどうやって印刷するのかなど全くわからないままにのらりくらりやっていきました。備忘録もかねてどんな感じに今回の本を制作、配布まで行ったのかをまとめておこうと思います(あと配布した本の裏話)。

いきさつ

そもそも何で参加をしたのかというと共に参加した知り合いのwaipuさんからお誘いを頂いたためです。waipuさんがC101にサークル参加を決め、その際進捗管理もかねて一緒に本を出さないかとお誘いを頂き、もともと本を書くということに興味があったのもあって参加を決定しました。waipuさんはコミケの知識を持っていらしゃったので殆どコミケ参加の書類仕事はwaipuさんにお願いし、製本等の流れもwaipuさんから教えて頂きました。

当時はレイトレ合宿が終わった直後であり、その際に調べたBSDFの知識をまとめたいな欲求がありました。そうゆうことで今回出す本のテーマはレイトレーシングにおけるBSDFにしました。

配布までの流れ

今回の大まかな制作手順としてはこんな感じです。

  1. 本文制作
  2. 表紙制作
  3. 印刷所のフォーマットで期日までに入稿
  4. 印刷物の発送(現地発送)

ざっと言ってしまえば印刷を頼む印刷所に合うフォーマットで本文と表紙を作ってそれを入稿フォームで渡すだけです。その後、印刷された本は印刷所から発送されてようやく終わりという形です。

執筆環境

本文の執筆はRe:Viewというツールを使用しました。

reviewml.org

これは技術書に特化したツールでmarkdownのような独自フォーマットを使用して文章を書いていくことができます。特に良いところとして「印刷」するところまで設計に考えられており、印刷用のPDFのフォーマットを自動的に生成してくれたり、A4からA5に変更できたりと「技術書を書くためのツール」としての機能が豊富なところにあります。

こちらのRe:Viewを使った方が印刷のややこしい部分をRe:View側でやってくれるので執筆に集中でき、個人的にはlatexやwordを使うよりかはこちらの方が良いと感じたため採用しました。(というか他の人は何使ってるんでしょうか)

review-knowledge-ja.readthedocs.io

Re:Viewのインストール

私は以下の記事を参考にRe:Viewをインストールしました。どうやらRe:ViewRubyのパッケージとして配布されており、gemパッケージマネージャを通してインストールすることができます。

gihyo.jp

環境はWSL(Ubuntu)で、まずはRubyをインストールしてgemからRe:Viewをインストールする形で行いました。PDFの出力の際はTeX Liveを用いて出力されるため、PDF出力前にTex Liveのインストールを済ませておく必要があります。

Re:Viewの流れ

Re:Viewはまずinitコマンドでプロジェクトを生成します。

Re:Viewは各章ごとに.reという拡張子を付けたファイルで管理します。自分で.reファイルを制作し、中身をRe:Viewの書き方に基づいて書いていきます。

本の構成はcatalog.ymlというファイルで設定します。catalog.ymlではPREDEF(前書き)、CHAPS(本文)、APPENDIX(付録)、POSTDEF(あとがき)の4つの構成があり、それぞれ対応するreファイルを設定することで本の構成を決定することができます。

印刷、電子書籍の切り替えや紙面サイズの変更など出力に関する設定はconfig.ymlで管理されており、必要に応じて変更します。出力の設定が終われば、rake pdfというコマンドを打つことでbook.pdfという名前で実際に本のPDFが出力されます。

Re:Viewについての情報

公式が出しているものとしてはインストールした際についてくるドキュメントファイルがあり大体これに書いてあります。また、公式で細かいカスタマイズ Q&Aがあります。

review-knowledge-ja.readthedocs.io

コマンド

今回の本の内容ではめちゃくちゃ数式が出てくるのでできるだけ綺麗に数式を書くようにしたかったのですが、Re:Viewの数式についての情報が少なく、実行環境の違いによるものなのかいくつかできないコマンドも存在していたのでいくつか実際に使ったコマンドについて記載します。また、他にも使用したコマンドについても述べていきます

数式

インライン数式については @{} というコマンドで使うことができ、この{}内にlatexの数式表現を入れてあげれば数式が作られます。

一方で、ディスプレイ数式は以下の様に書かれます。こちらも同様に{}内にlatex数式を書いてあげれば問題ありません

//texequation[][]{

//}

複数行の数式

複数行の数式を書く場合はalignedを使用することで書くことができます。使い方についてはlatexと同様です。

//texequation[RE1][レンダリング方程式]{
    \begin{aligned}
    \end{aligned} 
//}

引用

よくある引用論文に番号を付けて本文で使う際にその番号を持ってくるみたいなのをやるには少々手間が必要です。引用文献を記載する専用の"bib.re"という名前のファイルを制作する必要があり、以下のような形で参考文献を記載します。

//bibpaper[Photon_mapping][Henrik Wann Jensen 著 苗村健 訳]{
    フォトンマッピング ―実写に迫るコンピューターグラフィックス
//}

こうしてあげると参考文献に番号が取り付けられ、本文に以下のようなコマンドを使うことで参考文献の番号を持ってくることができます。

@<bib>{Photon_mapping}

作図ソフト

BSDFの説明をするにあたってやはり図をたくさん用意する必要があると考えていました。ということで使いやすいものがないかいくつか作図ソフトを試していました。

まず、最初に考えたのはdraw.ioでした。これは普段から使ってたものでシンプルなブラウザ作図ソフトでシンプルに使いやすいと思います。

app.diagrams.net

次に使ったのが最近知ったrenderdiagramsというサイトです。これは壁に反射するレイなどレンダリング分野でよく使われる図に特化した作図ソフトです。自動的に反射したレイを作ってくれたりBSDFのローブが元から入っていたりと今回にまさにいいのではと思ったのですが、実際使ってみると反射ローブもlambertとPhongしかない、機能が少ない、使いづらいと個人的には残念と感じました。レンダリングに特化した作図ソフトはなかったのでかなり惜しいですが今回の本では特に使うことがありませんでした。

https://renderdiagrams.org/editor

draw.ioに代わるものがないかと探してみたところ、mathchaという作図ソフトが良さそうという話を聞きましてこれを試してみました。mathchaは数学系の図に特化した作図ソフトなのですが、これを使ってみるとかなり使いやすく、また数学用ソフトだけあって数学文字、図形、さらには3Dプロット機能まであるという非常に機能がそろったソフトでした。個人的には作図もdraw.ioよりも扱いやすかったため、今回の本の図にmathchaを使用してみました。使ってみた結論としましては全部これでいいじゃんというぐらいとても良かったです。お勧めです。

www.mathcha.io

入稿、印刷

本文の執筆はどうにかなったので次は印刷をどこに頼もうかを考えました。色々技術書を書いている記事を見てみると日光企画という印刷所を使用している方が多く、調べてみると締め切りは他と比べて結構長く、またページ数が多い印刷にも対応してくれるようなので今回私は日光企画さんに印刷を依頼することに決めました。

www.nikko-pc.com

本とひとえに言っても平綴じや中綴じなどと色々種類があります。正直どれがいいとかはわからず、今回の本は結構重めの内容になることを予想していたのでページ数が多く取れて安い「オンデマンド平トジ」を採用しました。実際届いてみてみると背表紙を取ったソフトカバーの本で如何にも「本」といった感じでした。サポートに関しても問題なくとても満足するサービスでした。

ちょっと躓いた点としてはページ数は160ページにしたのですが、これはあくまで表紙を合わせた数で実際に本としてのページ数は表紙4ページ + 本文156ページと割り振られることがありました。中々この辺の慣例がわからず戸惑った覚えがあります。

本文

入稿はPDFで問題なかったのですが、いくつか入稿時に突っかかったことを述べていきます。

まず一つはトンボです。一般的に印刷は一度大きな紙に印刷した後、既定のサイズに裁断して完成します。そのため、実際に入稿するデータにはカットされる分の余白とどこをカットするのかを示す「トンボ」というのが必要となります。このトンボによって囲まれた内側の部分が実際の大きさとなります。

上下左右にある十字の線がトンボ

Re:Viewを使っている場合、configでtexdocumentclassという部分でトンボなどの設定をすることができます。私が実際に入稿したときの設定はこんな感じです

texdocumentclass: ["review-jsbook", "media=print,paper=a5,openary,startpage=1,serial_pagination=true,hiddenfolio=nikko-pc"]

"media=print"というのは印刷用PDFを出力する設定でこれをするだけでトンボ付きのPDFを出力してくれます。紙面サイズは"paper=a5"というように設定することができ、今回はA5サイズでの出力を行っています。PDFは紙面サイズの項目があり、PDFファイルをgoogle chromeで開いてドキュメントプロパティを見るとサイズを確認することができます。

ドキュメントプロパティ

この時、A5は横148mm×縦210mmなので出力されたPDFもそのサイズになっていそうですが、トンボの余白によってPDFデータは一回り大きいB5の横182mm×縦257mmとなります。このサイズの違いは最初かなり混乱しましたがトンボがある理由から見れば当然と言えば当然でした。

ページサイズがB5(横182×横257)となっている

もう一つの注意点としてノンブル(隠しページ数)があります。私たちが書いた本文はものによっては前書きや本文、あとがきでそれぞれページ数のカウントを分けていたりします。こうなると印刷所からするとどうやって並べたらいいのか分からなくなってしまいます。そのため、全てのページに通しのページ番号を印刷所向けに入れる必要があり、これをノンブルと言います。これは印刷時用のものなのでトンボの外の横っちょに書かれたりしています。

ノンブル かなり小さくつけられている

Re:Viewではノンブルは簡単に入れることができ、先ほどのtexdocumentclassの中で"hiddenfolio=nikko-pc"と書いてあるやつがそうです。Re:Viewでは日光企画さんのフォーマットをサポートしており、こうして設定したPDFをそのまま入稿することができます。この辺が結構いいなと思いました。

表紙

表紙は別途に画像を用意して入稿を行います。以下のようなテンプレートを元に制作していきます。赤線で囲まれた部分が表紙として印刷されます。

表紙

背表紙の厚みを計算して背表紙がずれないようにすることぐらいで特に注意するはなかったです。

ダウンロードカード

物理本として販売するのもいいけどやはり電子書籍もあると使い勝手が良さそうということもあり、追加で電子書籍版を配布することにしました。

電子書籍版を配布するにあたって一番悩んだのが配布するサイトをどうするかという問題でした。最初はBoothでいいのではと思ったのですが、どうやらBoothはダウンロードコードみたいなのを配布して、ダウンロードするみたいな機能はないようでコミケでの配布には向いていなさそうということがわかりました。一応zipファイルに暗号付けて、それをダウンロードとする人もいるらしいのですが問題とかありそうなためBooth以外の配布サイトを見つけなければいけませんでした。

それで色々見た結果、対面伝書というサービスを使用することに決めました。対面伝書はダウンロードコードによる配布をしてくれるサービスで、無料で配布することができ特に複雑なことも必要なくただ作品とファイルを登録して、生成したダウンロードコードを配布するだけで良いというかなりシンプルなシステムで配布が行えます。また、ダウンロードする側は特に登録とか必要ないという便利さもあるので非常に同人誌の電子配布にとても良いということで採用しました。

taimen.jp

さらに対面伝書さんでは印刷所と提携してダウンロードコードの印刷までやってくれるサービスがあるのでかなりいいサービスなのではないかと思います

対面電書 - 電子書籍・同人ゲームなどをダウンロードカード方式で頒布する支援サービス

しかしながらこのダウンロードカードの入稿の期限はめちゃくちゃ早く、確かC101の3週間前までには出さなくてはいけなかった覚えがあります。

私は全くこれに間に合わずこちらのダウンロードカードサービスは断念しました。結局どうしたかというと名刺印刷でそれっぽいダウンロードカードを制作して、そこに印刷できるラベル紙にダウンロードコードを印刷して貼り付けるということをして何とかしました。

名刺印刷はこちらを使いました。

www.graphic.jp

コミケ参加

コミケ参加までにも色々準備する必要があり、配布物の告知をするお品書きを発表する必要がありました。ClipStudioを持っていたのでwaipuさんと話し合いながらお品書きを制作し、前日ぐらいに発表をしました。やっぱり1つぐらい画像処理ソフトあると何かと便利ですね。

他にも当日に向けて準備することがいっぱいありました。

まずはお釣りです。大体コミケでは500円とか700円といったように100円単位で大体決まってるので参加する人はきっちり小銭で払うか1000円札とかで支払いをするらしいです。なのでお釣り用の100円、500円、1000円札(1万円で払われる可能性もあるので)をいっぱい用意しておきなさいと言われていたので1か月前ぐらいから小銭貯金していました。私の規模だと50枚づつぐらいあれば十分でした(買いに行くならもっと欲しいと感じた)。

他には提出用のデータの用意があります。コミケでは見本誌として運営に配布物を提出する必要があります。これは提出形式に関わらず配布するもの全て1つずつ用意する必要があり、ダウンロードの場合はディスクやUSBメモリなどの記録媒体にデータを保存してその媒体を提出することになります。今回ダウンロードカードでの電子版の販売を行ったため、電子版のデータをUSBメモリに保存して提出しました。

そうして色々準備して当日を迎えました。サークル参加者は8~9時ぐらい(だった覚え)までに入る必要があるので、当日は8時ぐらいにビックサイトでwaipuさんと合流する感じで行きました。

入場

サークルチケットを係の人に見せて、私たちが配布する西さ-32aに向かいました。コミケでは長い机が並べられており、1つの机当たり2つサークルが入る形で入っていきます。

配布物は印刷所から直接、現地の方に送るよう依頼しており、その場合は自分のサークルの場所に運営の方がおいてくれます。当日初めて自分の本が置かれていたのが感慨深かったです。(見本とか家に送られなかったのでちょっと不安だった)

配送された配布物

その後は設営を行っていきます。他のサークルの方に邪魔にならない程度なら自由に配置して良く、布とか敷いたり本を置いたり色々します。設営が終わったら見本誌をまとめて提出用の封筒に入れて入口近くの受付に提出して完了します。

設営

waipuさんは電話局の建物に取り付けられている謎の突起というニッチな内容の本を出していました

そんな感じで設営後しばらく経って10時ぐらい(だった気がする)になり開場の放送が流れ、参加者の方々が入ってきました。30分ぐらい経った頃に初めて本を買ってくださる方が来ました。自分で作った本が売れるという初めての経験だったのでかなり嬉しかったことを覚えています。

その後ちょこちょこ買ってください方がきて、最終的に15冊ぐらい売ることが出来ました

途中、Waipuさんに持ち場を渡してコミケを回ったりしていました。西館はそこまで人が多くなかったのですが、東館に行ってみると噂に聞いた大量の人を見ることができました。まさにお祭り騒ぎでした

フラフラと技術本の見物をしていたのですが、かなり真面目な本から即売会ならではのニッチな本まで様々なものがありました。かなり楽しかったです。(山手線のトイレの経路が書いてある本とかがあった)

そうして5時ぐらいになり無事に閉場となり、コミケが終わりました。

幾分かは本をはけたのですが、さすがに持ち帰れないぐらいには在庫がありました。コミケではそうした在庫を送れるように、終了後に運送会社が搬送口あたりで荷物の受け取りをしてくれます。なので私はクロネコで荷物を送りました。

こうして私のコミケ参加は終わりました

本書の裏話

今回書いた本のモチベーションとしてはレイトレーシングで使われるBSDFについてちゃんとまとめる、辞書的な感じにしたいというようなものがありました。なので今回書く内容には「BSDFの由来」「BSDF周りの証明」「BSDFの実装」をしっかりと書くことをテーマとして制作しました。また、完全に初心者向けにするには絶対ページ数が足りないのである程度パストレを書いたこと人向けの本として出そうと予定しました。

それでどのBSDFを扱おうかと考えたのですが、当時はレイトレ合宿が終わった直後ぐらいで実用的なシーンに使われているはずのDisney BRDFの情報収集が大変だった経験があったので、Disney BRDFの実装が書いてある本があったら昔の自分は喜ぶだろうなぁと思ったので取り扱うBSDFはDisney BRDFを最終目的として有名なものを取り上げていくことを決めました。

そうして大まかに本のテーマが決まったので10~11月ぐらいは各BSDFの初出、関連論文について調べながら本を書いていくという形で進めていきました。初めはガチガチに証明を書いていくぞと意気込んでいたのですがいざ調べてみると中々に難解なものが多く、証明自体もちゃんと書いていないものもあり結構大変でした。特にGGXについてはほんとに1からやるとなるとそれこそ1冊の本が出来上がるぐらい資料が多く、結局完全には理解できず本では結構あっさり書いてしまいました。(次回があるならもっとそこを深堀したい)

私は遅筆なので10~11月はほんとにだらだらと書いていたのですが、締め切りに近くなってきた12月に入りようやく本腰を入れて書き始めまして最終的にはデスマーチと化しました。21日に物理本の制作が入稿をしましたが、実は物理本が出来上がった時点ではサンプルコードができておらず、サンプルコードと電子書籍版をコミケ前日まで制作していたというような状態になりました。一応サンプルコードは一通りテストはしたのですが急いで作ったのもあってバグがあるんじゃないかと今でもちょっと不安です。(もし見つけた方はご連絡ください)

改善点

思い返せば色々本に対する改善点が結構思いつきます。何よりまずは時間がかかりまくったということです。

最初の製本なので仕方ないとは思いますが、執筆にかなり時間がかかってしまいました。文章を書いているとくどくないかな?とか何かもう少しいい言い回しないかななど結構悩むことが多く、そうした所で時間がかかってしまった印象があります。 また、論文の調査も中々時間をかけてしまいました。今回取り扱った論文は40,50年前と結構古いものが多く、今の記号の慣例と合わないなどかなり読みづらいことが多かったです。

ちょっと話は変わりますが、最近の自然言語に対するAIの進みすごいですよね。Chat GPTなんかは4になってからかなり精度がいい受け答えをしてくれるようになったと感じます。

そうして見ているとChat GPTにある程度文章の案や言い換えなどをお願いして、文章執筆に使ったら時短になるんじゃないかなぁと感じます。 また、論文調査でもAIが活用できそうな風潮も出てきている気がします。最近だとPerplexityというサービスではキーワードを送ると関連論文などから要約を作ってくれます。ちゃんと引用元が明記されるので比較的信用性も高いと思います。論文の要約だとBingでもやってくれるという話も最近耳にしました。

https://www.perplexity.ai/

私はAIについては詳しくはないのでアレですが、近年のAIを活用した執筆、論文調査は結構いい感じにならないかなという期待があります。次回があればこうしたAIを試してみたいですね。

また、後になって思い出したのですがconnected paperというサイトを使えば良かったなと思います。元論文は分かりづらいし読みづらいけど、後で出てきた論文は理論がまとめられて分かりやすくなってるということはよくあります。なので未来の関連論文を探したいことがありますが、一方向的に引用されてるだけの関係なので元論文から探すのはちょっと骨が折れます。そうしたことに対して、元論文を引用している論文まで含めた関連論文を出してくれるサイトがconnected paperです。

www.connectedpapers.com

一応前々から知っていたのですが執筆当時は完全に忘れており、もしかしたらこれ使ってたらもっとわかりやすいサーベイ論文とかあったんじゃないかなと思ったりしました。

他には校正が挙げられます。今回の物理本なのですが見直してみると結構タイポがいくつか見つかっており、かなり校正が甘かったと感じます。他人に校正をお願いするには流石に分厚すぎるということもあり、自分で校正をしたのですが脳内で修正されてるのか意外とタイポに気づきにくいです。あるのかわからないですが、文法の間違い程度はチェックしてくれるような校正用のツールみたいなのを導入すべきだったと思いました。

内容についてもいくつか書いとけばよかったなという内容がありました。BSDFって明確なバグが出ることが珍しくてよくPDFの値がちょっとでかくてちょっとだけ暗く見えるという言った地味なバグが大半です。実装だとかなりこれが厄介でこれを直すために数時間溶かすなんてざらです。なのでBSDFのデバッグ手段について書いておくべきだったと感じます。ぱっと考えられるだけでもこんな感じデバッグがあります。

  • GGX -> (可視)法線分布関数関数の積分
  • サンプリング -> χ二乗検定
  • BSDF全般 -> White Furnance test

今回時間がなかったのでどうしようもなかったですが、デバッグの仕方についても情報をしっかり載せていく必要があったと感じます。

おわり

初めてのコミケ参加は非常に疲れましたが、なんだかんだ言って楽しかったです。あと、本という形で人に読んでもらう文章を書いていったのですが、そうした文章を書くにはまずは自分の知識をちゃんとまとめないと中々綺麗に書くことができませんでした。なので今回の製本は自分の知識を整理する機会としてとても強く働いて、かなり自分もBSDFに対する知識が深まったと感じました。次回参加するかは未定ですがいずれにせよ知識をまとめるため製本の機会があればまたやってみたいですね