設計の苦しみと喜び、そして「曲面」の設計に込めた思想

読みながら、思わず色々なことを思い出してしまった。

クリエイティブな仕事というのはある意味で残酷だと思う。


なぜなら、
つくりあげたものが評価に値しないものだった場合に、
自由にできる環境があったのに、
この程度のものしかできなかったのかという批判が
本人に対して直接的に向けられやすいからだ。

ソフトウェア開発の「自由の悲劇」 : 小野和俊のブログ

つまり、自由というのはそれだけプレッシャがある。僕は、このプレッシャに晒された経験がある。そして、今も晒されている。僕は今、社員は僕一人だけという超零細企業で比較的自由に働いているわけで、こういう環境で開発するということは即ち、自由と引き換えに上記のようなプレッシャを受けることを意味するのだ。


3〜4年前、僕は会社側にこう強く主張していた。
「うちの会社には新しいフレームワークが必要です。現状のフレームワークを10年というタイムスパンで使用し続けるのは苦しいのではないでしょうか。それよりも全く新しいものを作り直すべきです。そして、それを僕にやらせてください。」

思い返すと、なんと生意気なことを言っていたものだと恥ずかしい。会社が何年もかけて作り上げてきた基盤技術を、たかが入社3〜4年の若造が作り直しを提案したのだ。提案を聞いてもらえなかったのはやむを得ないことだった。

しかし、当時の僕はこれが不満だった。結構落ち込んだし、会社に対して絶望した。そんな状態で仕事に対する集中力も欠いていた頃、全く予想外の提案を受けたのだった。

「新しいことを自由にやりたいなら、新しい会社でやってみろ。会社の100%出資で子会社を作るから、そこに移ってやってみろ。」


これは強烈なメッセージだと思った。既存のものを作り直すなんてチンケなことを言うな、今までとは違うコンセプトのものを作れ、というメッセージだ。新しいものを作って、別の会社として成立するようにビジネスまでつなげてみろ、というメッセージだ。ゴチャゴチャ文句を言う前に、お前はお前でやってみろ、というメッセージだ。

自由にやれる環境を与えられたわけだが、見方を変えれば突き放されたとも言えなくはない。

こうして僕はヒスイ(http://www.quatouch.com/products/hisui.html)の開発に着手したのだけれど、常に冒頭のプレッシャを感じることになった。「なんだ、あれだけデカイことを言っておきながら、この程度のものしか作れないじゃないか」そんな風に思われるのだけは絶対に嫌だった。

しかし、「何か新しいもの」というのは難しい。既存のフレームワークをなぞっただけの改良なら幾らでも思いついたが、そんな改良をどれだけ積み上げたところで、「新しいコンセプトのフレームワーク」には辿り着きそうにない、と感じた。コンセプトを決めるには、もっと大きな視点が必要なのだ。今後の業界の動向とか、技術の行く末とか、その中で目指すビジネスの方向性とか・・・。


こうして悩んだ末に辿り着いた、一つの設計がある。それは、次の2つのインターフェイスだ。

public interface ISurface
{
  IPolygonMesh Polygonized { get; }
}

public interface IPolygonMesh : ISurface
{
  ...
}

ISurface というのは、ヒスイ(3次元CADフレームワーク)の曲面オブジェクトの型である。IPolygonMesh というのはその名のとおりポリゴンデータ型だ。これらのインターフェイスの意味するところは次のとおりである。

  • 曲面とはポリゴン化できるもののことである
  • ポリゴンデータは曲面の一種である

UML で描くとこう。

ISurface と IPolygonMesh が相補的に定義されているところがミソだ。なお、IPolygonMesh の Polygonized プロパティは get { return this; } と実装すればよい。

ほとんどの人は「ふーん」と思うだけかもしれない。だけど僕は、この設計を思いついたときは小躍りするほど嬉しかった。自分のフレームワークに従来のものとは違う新しいコンセプトを埋め込むことが出来た瞬間だったからだ。

この設計のどこが、従来のCADと違うのか。

従来、3次元CADにおける曲面というのは数式で定義されていて、滑らかで微分可能なもの、というのが常識だ。ポリゴンデータというのは、OpenGLで描画するためにやむを得ず生成するデータであって、日の当たらないところに隠れているデータだった。つまり、曲面とポリゴンは対等の関係ではなかったのだ。

しかし、僕の設計は違う。曲面とポリゴンは完全に対等であり、相補的に定義されている。ポリゴンにも第一級の地位を与えたのだ。また、ポリゴン化できるものは何でも曲面として扱えるので、数式で定義されていなくても微分できなくても、とにかくポリゴン化さえ出来ればそれは曲面なのだ。

もちろん、ポリゴンを重視したことには理由がある。

CGもCAEもCAMもみんなポリゴンを扱うのに、CADだけが形状を数式で表現することにこだわってきた。これがプロセス間のデータ流通を阻んできた一因ではないだろうか。また、CADといえば従来は自動車や家電業界がメインであったが、最近になって自然物や生体などを扱うCADが登場してきている。しかし、自然物の形状を数式で表現するのは困難であり、ポリゴンで表現するほうが一般的ではないだろうか。

以上を考慮すると、これから開拓すべき技術分野はポリゴンや点群などの離散的なデータにあると考えたのだ。いや、というよりも、この設計は僕がその方向に向かっていきたいという意思や決意の表明なのだ。


設計というのは、つくづく生モノだなと思う。仕様や状況から最適な設計が一意に割り出されるなんてことは絶対にない。もちろんある程度はセオリーがあるしそれを学ぶ価値は大いにあるけれど、それよりも思想とか意思とか決意とか、そういうウェットなものが必要なのだ。一見無機質に思える単純なインターフェイス定義/クラス定義にも、背後には設計者のウェットな思いが込められているのではないだろうか。

逆に言えば、いくらセオリーを学んでもそういうウェットな思いがなければ良い設計は出来ないのだろう。

こういったことに気付いたのは、冒頭のプレッシャがあったからこそだ。別会社という環境を与えられなかったら、ここまで思考を切り替えて新しい設計を追及することは出来なかったと思う。そういう環境を与えてくれた会社には僕はとても感謝しているし、これからもプレッシャを原動力として前に進んでいきたい。そして、そのためにはウェットで熱い思いを失わないでいることが最も重要なのだと思う。