Ueta CG Tech (blog)

Maya・MotionBuilderツール開発/ゲーム開発支援/映像制作支援/各種テクニカルスタッフ代行

できるだけ安く株式会社!設立までの諸手続き

このエントリーは、「会社を設立しよう」と決めて実際に設立に至るまでの話です。主に諸経費やら手続きの話になります。

近いうちに、もしくは将来、独立起業を考えるゲーム開発者や映像制作者の方に参考になれば良いなと思っております。

とくにフリーランスになって5年以内の人は優遇を受けられる可能性があるので要チェックですよ!

会社の住所が必要だ!

株式会社を作るには、結構ちゃんとした届出が必要になります。結構ちゃんとした届出なので後から変更するのも面倒です。いきなりお金の話をしてしまうと、例えば中野区に会社の住所があったとして、今度、渋谷区に引っ越すとなると、変更に伴う手数料が6万円かかってしまいます!たかが手数料(印紙代)にですよ!

結構ちゃんとした届出 → 法務局に提出する株式会社設立登記の申請

さて、住所はどうしようか・・と考えまして、私の場合、2年間ほどフリーランスをやっておりまして、最後の半年ほどは、打ち合わせ以外自宅で作業していました。とりあえず自宅を会社の住所として申請してしまおうかと思ったのですが、会社の住所というのは公になるものですから、住居用の賃貸だと大家さんに迷惑をかけてしまう可能性があります。後述しますが、住居兼事務所用の物件というのもあって、それは敷金礼金の設定が高めだったりします。なので、大家さんの立場で考えると良い気分はしないなと。(もちろん、大家さんの許可がもらえればOKです)

実をいうと、一緒に仕事ができる仲間を増やしたいというが法人化(会社設立)の目的のひとつでもあり、遅かれ早かれ事務所を準備しないといけなかったので、それなら最初にやってしまおうと考えました。

事務所を準備するにあたって、不動産屋さんに相談して中野区内の事務所をピックアップしてもらいました。 数年以内を目処に増えるであろう人数を考えると30平米もいらないかなと思っていたので、 そのくらいの物件を探してもらったところ、家賃10万円を切りつつも、良さそうな物件が出てきました。どれも住居兼事務所としても利用可能なマンションの一室でした。 ビルのフロアの場合ですと、これは住所兼事務所ではなく、事務所の扱いです。家賃10万円を切る物件は無かったと思います。

賃貸事務所の初期費用は一般的に家賃の7~10ヶ月分らしいです。私が検討していた物件だと、初期費用は70万円くらいと言われました。 テーブルやイス等の備品も揃えなくてはいけないので、家賃以外に必要なお金を含めると金額はさらに高くなります。

正直なところ、もう少し初期費用を抑えたかったため、レンタルオフィスを選択することにしました。 レンタルオフィスとはいえ、各個室にセコムがついていたりします。部屋の広さに対しては割高な料金設定だと感じますが、家具の購入やインターネットの契約なども必要ないですし、固定電話番号、会議室、フリードリンク、立地、24時間出入り可能、固定IPアドレス(オプション)などメリットが大きかったです。受付に人がいるので、不在時でも郵便物を受け取ってもらえますし、来客があった際に対応してもらうことができます。 ネット環境のセキュリティが気になる場合は、入居者が直接プロバイダーと契約をして独自に回線を引き込むことを許可しているレンタルオフィスもあります。

私が契約した部屋の場合、初期費用30万円、家賃12万円(オプション等含む)くらいです。初期費用としてはかなり抑えられた結果です。

また、あとで知ったことですが、中野区だとICTCOという区が運営しているレンタルオフィスもあります。 見学に行ったところ、登記できるプランは順番待ち状態とのことで、とても盛況のようです。

http://ictco.jp

もうひとつ、こちらも後日知った場所ですが、東京コンテンツインキュベーションセンターというのも中野にあります。ここはすごく良さそうです。もっと早く知っていれば・・。

www.tcic.jp

株式会社設立がすごく面倒そうなので「会社設立freee」というサービスを利用

フリーランスのときもこの「freee」というのを使って日々の会計処理、見積・請求書発行、確定申告書類作成などをしていましたので、同じ会社のサービスということもあって利用してみることにしました。

会社設立freeeですが、ほぼオンラインでできますが、定款の受け取り(公証役場)と登記(法務局)の2つは足を運ぶ必要があります。あと、事前に定款を公証役場の公証人に確認してもらったり(FAXか持込)、定款の電子化と電子申請を司法書士に頼む必要があります(5,000円)。 また、電子公告を有料でやってくれるプランや、印鑑の作成を依頼することもできます。

完全に無料でとはいきませんが、いい経験?になったと思います。(意味深)

株式会社の登記にかかる登録免許税15万円が半額になる!

ちまたでは「資本金1円でも会社が作れる」と言われていますが、実際のところ登録免許税や各印紙代が発生するため、 株式会社を設立するには最低でも20万円から24万円くらいかかると言われています。(資本金を含めず)

ですが今(2017年3月現在)、「特定創業支援を受けた創業者への支援(優遇措置)」というのがありまして、これを利用すると、 最低でも15万円かかる登録免許税が7万5千円で済んでしまう優遇措置が受けられます! 私も実際にこれを利用し、もろもろの手数料含め13万円台で株式会社を設立することができました。(資本金を含めず)

この特定創業支援は各市区町村で受けられます。 設立を考えている方は、設立予定の市区町村のホームページで「特定創業支援」というワードをチェックしてみてください。

特定創業支援はいろいろあるのですが、セミナーや相談会などが多いです。区が企画している相談会、銀行が企画している相談会など市区町村によって違います。 私の場合は、区がやっている「創業・経営相談」を4回受けました。ちなみに相談に1回行っただけでは優遇は受けれません。4回という条件があるのです。

◆相談後から優遇措置を受けるまでの流れ

私「創業・経営相談を4回受けました!」

中野区「ふむふむ。認定特定創業支援を受けたという証明書を発行します」

法務局「証明書があるので登録免許税を減税する優遇措置を適用しますね」

このような具合です。

優遇を受けるためには、創業から5年以内であること。という条件もありますので注意が必要です。 創業とは、フリーランスなどの個人事業主も含まれます。なので、フリーランスになってから5年以内の方はチャンスです。

いざ、法務局へ

必要な書類はそのつどfreeeからPDFでダウンロードできます。必要事項はほとんど入力済みなので、やることはホッチキスで綴じて印鑑を押すくらいです。 しかし注意点があります。freeeでは特定創業支援の件が考慮されていません。なので一部の書類を書き換える必要があります。といっても簡単です。登録免許税の金額が書いてある部分(15万円)に斜線を引いて修正印を押し、7万5千円と書き換えるだけです。

完璧な書類もでき、ドヤ顔で法務局へ持ち込んだところ、窓口で修正箇所の指摘が・・・

私が修正を指示された部分

  • 資本金の振込み日(通帳に記載された入金日)よりも、書類に書かれている日付の方が古い(2箇所)
  • 各書類に捨印がない(念のため捨印はあったほうがいいよとアドバイスをもらいました)
  • 収入印紙が貼ってある書類のホッチキスで綴じた部分に割印がない

印鑑を持ってきていたのでその場で対応して提出。指定の日時までに連絡がこなければ登記完了です。

いざ、法務局へ②

指定された日までにとくに連絡もなかったので、登記完了だと思います。 この後、銀行の法人口座開設や、co.jpドメインの「本登録」を検討していたので、必要になる書類を手に入れるため再度法務局へ足を運ぶことにしました。

以下は東京法務局中野出張所の例なので、他の場所では少し違うかもしれませんのでご注意ください。

まず、freeeからダウンロードし印刷した「印鑑カード交付申請書」を法人登記の窓口に持って行きます。これには手数料はかかりません。5分くらいで印鑑カードを手に入れることができました。(待ってる人が誰もいなかったので、空いていたタイミングだったのかもしれません)

今まで何かと手数料としてお金を取られていたので、タダで印鑑カードが手に入って拍子抜けしました。実はこの印鑑カード、印鑑証明書を発行してもらうために使うもので、印鑑証明書の発行にはお金がかかります。結局お金がかかるのです。しかもマイナンバーカードと異なり、コンビニで印鑑証明書を発行することができません。法務局でしか使えない役立たずの磁気カードです。

注意 freeeでPDFの書類をダウンロードすると、ダウンロードした日付が申請日として書類に記載されます。

つぎに、「印鑑証明書交付申請書」、「登記事項証明書交付申請書」ですが、結論から言うとfreeeから印刷した紙は不要でした。建物内に証明書発行請求機という端末がありまして、「証明書発行請求機を使うと早いですよ!ぜひ使ってください!」というポップがいたるところに貼ってあり、そこまでアピールされたら使わないわけにはいかず、freeeでダウンロードした書類はあるけど、ためしに使ってみようかなと思い使ってみました。

先ほど手に入れた印鑑カードを挿入してポチポチっとやると、請求できてしまいます。会社名とかわざわざ入力しなくて良いので印鑑カードに会社の情報とか記録されてるのかもしれません(?)。 複数の証明書を一度に申請できるので、今回欲しかった「印鑑証明書」と「登記事項証明書」をまとめて申請しました。

端末への入力後ですが、受付番号と手数料の金額が書かれた紙が出てくるので、それを持って収入印紙の購入窓口へ行き、お金を払います。

受け取った収入印紙を持ったままイスに座って待機。

名前が呼ばれたらで窓口へ行き、収入印紙をその場で貼り、書類を受け取って終了です。

いやはや、スムーズでした。とにかく、スムーズでした。磁気カードは役立たずではなかったです。

その後・・・

ひとまず、設立は以上ですが、このあとまだまだやることがいっぱいなのです・・・。

正直なところ、多少お金を払ってでも代行等に頼んだ方が良いと思いました。

設立後の手続きも相当面倒です。設立後についてはまた別のエントリーにて!

Stingrayのセミナーで登壇させていただきました

area.autodesk.jp

期間限定でオンデマンド配信されています。 http://area.autodesk.jp/event/webinar/road_to_stingray_1/

担当部分の資料は以下でご確認いただけます。

www.slideshare.net

【メモ】3Dゲームエンジン

Game Engine guides

↑ここにまとまったやつがあった。

Atomic Game Engine

会社:THUNDERBEAST GAMES

http://atomicgameengine.com/

3dnchu.com

Banshee Engine

Banshee Game Engine Preview

GitHub - BearishSun/BansheeEngine: Banshee Game Engine

CryEngine 5

会社:Crytek

https://www.cryengine.com/features

gigazine.net

3dnchu.com

Donkey Tech 3

会社:Smells Like Donkey Software Inc.

http://smellslikedonkey.com/#/

smellslikedonkey (Tod Baudais) · GitHub

Film Engine

会社:Crytek

jp.automaton.am

http://www.filmengine.com

Goo Create

会社:Goo Technologies

plus.appgiga.jp

http://goocreate.com/product/

Live editing in Goo Create - YouTube

Lumberyard

会社:Amazon

https://aws.amazon.com/jp/lumberyard/

doope.jp

dev.classmethod.jp

チュートリアル動画チャンネル

Stingray

会社:Autodesk

http://area.autodesk.jp/product/stingray/

www.4gamer.net

www.4gamer.net

Unity 5

会社:Unity Technologies

http://unity3d.com/jp/5

Unreal Engine 4

会社:EPIC GAMES

https://www.unrealengine.com/ja/what-is-unreal-engine-4

Xenko (旧Paradox)

会社:Silicon Studio

http://xenko.com/

活動履歴

※活動履歴を記録しておくページです。

イベント登壇

「ザ・リギング・マニアックス 2016 集まれリガーピーポー!~おーい、リガー達が秘伝の技を教えるってよ スペシャル」
【CGWORLD クリエイティブカンファレンス2016】
http://cgworld.jp/special/cgwcc2016/session.html

「Catch Up Stingray!~Stingrayを使ってゲームを開発した話~」
【CEDEC2016】
http://cedec.cesa.or.jp/2016/session/VA/12896.html

「Catch up Stingray~Stingrayエンジンのノウハウ、アニメーション機能について~」
【GTMF2016】
http://area.autodesk.jp/event/autodesk/gtmf2016/

「メタノードリギングの基礎テクニック」
【Computer Animation Open Course - Rig and Tools -】
https://campaign.borndigital.jp/20160702rig/

「Road to Stingray イベント第1弾~Stingrayエンジン、ゲーム開発のファーストステップ~」
【オートデスク主催】
http://area.autodesk.jp/event/road_to_stingray_1/

オープンソースモジュラーリグシステム mGear の仕組みを紐解く」
【3DCG Meetup #08】
http://connpass.com/event/20485/

3DCGMeetup #08 で登壇させて頂いたときの資料

twitterだと資料のリンクが埋もれていくのでブログに残します)

先日このような勉強会に参加いたしました。 connpass.com

登壇は初めてで、こちらの勉強会には2回目の参加です。 オープンソースのモジュラーリグシステムの紹介をさせて頂きました。 以下がそのときの資料になります。

【Maya】Python,C++,C#で比較。スキンウエイトの取得と設定

便利と評判の Python API 2.0 は、やっぱりスキンウエイトの処理も速かった。

Maya2016Python API 2.0 に、待望の MFnSkinCluster クラスが追加されました。
MFnSkinCluster を使用すると、Python API 2.0 でスキンウエイトを扱うことができます。

この記事では、各言語(またはモジュール)によって処理速度にどれくらいの差があるのか検証してみました。

比較データ

モデル A モデル B モデル C
頂点数 450,050 55,520 2,819
ジョイント 400 202 27

頂点数、ジョイント(インフルエンスオブジェクト)数の違う3種類のキャラクターモデルを用意しました。だいたいのイメージですが、モデルAはPS4/XOne世代シネマティック用キャラクター、モデルBは PS3/XBox360世代主人公クラスのキャラクター、モデルCはスマホゲーム向けキャラクターぐらいを想定しています。

比較した言語(モジュール)

今回、 maya.cmds, pymel, mel は対象外としております。

検証内容

  • スキンウエイトの取得と設定(対象:すべての頂点)

処理方法による違い

  1. MFnSkinCluster クラスが持つ getWeights(), setWeights() メソッドによる方法
  2. MFnSkinCluster クラスのアトリビュート(weightlist, weights)にアクセスする方法 




比較結果

横軸は経過時間()です。

f:id:ue_ta:20150823050216p:plain

◆処理方法1と処理方法2の違い

処理方法1のMFnSkinCluster.getWeights(),setWeights()を使用した方法(グラフ上)では、各言語の差がそれほどありませんが、 処理方法2のアトリビュートから取得・設定する方法(グラフ下)では、大きな差が出ているのがわかります。 これら二つの処理方法にはいくつかの相違点がありますが、もっとも重要な違いはメソッドを呼び出した回数です。

処理方法1では、 MFnSkinCluster.getWeights(),MFnSkinCluster.setWeights() を、それぞれ一度だけ呼び出しています。 このメソッドは、引数に頂点とジョイントのIDを渡すことで、自身のウエイト値を取得・設定することができます。

処理方法2では、 MFnSkinCluster.getWeights(), MFnSkinCluster.setWeights() に該当する動作を別の方法で行っています。 MFnSkinClusterの持つアトリビュートから、直接ウエイト値の取得と設定を行う方法です。これは処理方法1とは違い、反復処理によって一つずつ値を取得・設定していきます。 値を取得・設定するメソッド MPlug.asDouble()MPlug.setDouble() の呼び出し回数は

 頂点数 x ジョイントの数

となります。モデルAを例にすると
各頂点に対してすべてのジョイントのウエイト値を取得した場合

 450,050 * 400 = 180,020,000 

一般的に一つの頂点に影響を与えるジョイント数は限られており、モデルAでは最大値を 5 としたため

 450,050 * 5 = 2,250,250

MPlug.asDouble(), MPlug.setDouble()は、それぞれ 225万回 ほど呼び出されていることになります。 反復処理の中で呼び出されているメソッドは他にもあり、単に何らかのメソッドの呼び出し回数という意味では、この数字をはるかに上回ります。


同じPythonにもかかわらず圧倒的な差が開いている

ここで注目すべきは API1.0API2.0 の処理時間の差が大きいことだと思います。 同じPythonでありながらこれだけの差が出た原因は、 API1.0API2.0メソッドの呼び出し負荷(オーバーヘッド)に差があるからだと考えられます。



◆処理方法1と処理方法2ではどちらが速いのか

API1.0 の場合、どのモデルにおいても処理方法1の方が速いと考えてよさそうですが、実は問題があります(後述)
ここでは他の言語の場合を考えてみます。
モデルAでは、処理方法2 の方が 速い です。
モデルBでは、言語によって異なります。
モデルCでは、処理方法1 の方が 速い です。

どうやら、モデルBのあたりで逆転現象が起きているようです。

この原因の一つは、MFnSkinCluster.getWeights(), MFnSkinCluster.setWeights()が 引数に与えられた頂点、ジョイントに対するすべての値を取得・設定することにあると思います。

// 擬似コード

MIntArray weights;
SkinCluster.getWeights( vtxIDs , jointIDs , weights );
cout << weights.size() << endl;

// 180020000

モデルAを例にすると、上記のような方法で簡単に1億8千万要素の配列を得られますが、前述のとおり一つの頂点に影響を与えるジョイントの数は 5つ なので 実際には225万要素分にしか有効な値は入っていません。これは全体の 1.25% にすぎず、それ以外の 98.75% はすべてゼロで埋められているということになります。

各モデルにおける有効な要素数の割合は以下のとおり

  • モデルA: 1.25%
  • モデルB: 2.48%
  • モデルC:18.52%

この結果から、頂点数とジョイント数が多いほど無駄な値を返すことになるため、あえてそれを望んだのでなければ、必要なウエイト値をすべて取得する方法として良い方法ではないといえます。仮に、すべてのウエイト値を出力する必要があるなら、 全ての要素をゼロで初期化した配列に、有効な要素数だけ書き換えた方が速いでしょう。

ざっくりまとめると

  • 全体の要素数が少ないなら 処理方法1

  • 全体の要素数が非常に多いなら 処理方法2

すべてではなく、指定のウエイト値の取得の場合ではまた異なった結果になるかもしれません。それはまた別の機会に。

Python のループは注意が必要

PythonAPI1.0のグラフを見てみると、総じて処理方法1の方が速い結果となっています。 しかし、これには大きな罠があることがわかりました。以下に反復回数の多いループの処理時間の例を示します。

import timeit
setup='''
def foo(x):
  count = 0
  for i in xrange(x):
      count += 1
'''
t = timeit.Timer('foo(180020000)',setup)
print t.timeit(1),"s"
t = timeit.Timer('foo(2250250)',setup)
print t.timeit(1),"s"

# 12.6635769266 s
# 0.153748884231 s

Pythonで1億8千万回ループさせた結果、数字を加算するだけの処理で12秒かかっています。 スクリプトを書く場合、このループの中でif文を使ったり、何らかの処理をさせることがあると思いますが、 この遅さを考えると、要素数が多いケースでは結果的に処理方法2の方が速い可能性があります。


◆思いのほか API2.0 が優秀。なぜか getWeights(),setWeights()では C++ を押さえ API2.0 が速いという結果に

今回検証してみて API2.0 のポテンシャルの高さを垣間見た気がします。速くて便利なことは良いことです。ツールを作る側、使う側どちらにとってもありがたい話です。 それにしても、どうしても納得できない疑問が一つ、処理方法1で C++C# よりも API2.0 の方がやや速かったことです。初めは誤差かなと思いましたがすべてのモデルで同様の結果だったため、実際にそうなのだろうと思います。しかしC++より速いなんてことがあるのだろうかと思うのです。この辺の実装について詳しくないので、どなたかご存知の方いらっしゃいましたら教えていただきたいです。

API2.0 は API1.0 よりもオーバーヘッドで勝っている。というのが、今回の検証結果から見えた印象ですが、実際のところもっと検証が必要だと思います。スキンウエイト関連がたまたまそうだったという可能性が拭えません。

以上です。


ソースコード

※残りのコードは以下のリンクから

メモ書き:処理方法2のウエイト値のデータの型

  • C++:std::vectorを使った二次配列。配列は事前に生成。(push_backを用いて動的に確保した場合かなり遅くなった。また、連想配列のunordered_mapも試したが遅かった。通常の配列を二次配列newとして使用した場合はvectorよりもやや速かったが、自分でもメモリをdeleteする必要があったり若干不便だったのでvector採用)
  • C# : 辞書型(Dictionary)を使用。動的確保。(配列は試していない)
  • Python : 辞書型。dict[x]=y;として動的に生成。(静的確保した場合やリストを使った動的・静的二次配列などを試したがいまいちパフォーマンスが悪く、辞書型がわりと優秀という結論にいたったので辞書型を採用。しかし、単純なfor文で検証したときはリストの方が一次配列、二次配列ともに速かったのだが・・なぜだろう)

参考サイト様等

[C++] STLの型の使い分け - Qiita

C++で大規模な配列追記のパフォーマンス - ponkotuyの日記

Pythonで大規模な配列のパフォーマンス(append編) - ponkotuyの日記

C++ ハッシュ連想配列クラス unordered_map 入門

C++11 範囲ベース for ループ 入門

配列の動的確保

Maya Skincluster Weights

Maya Script OpenMaya ウェイトのインポート・エクスポート | 技研

デジタル・フロンティア-Digital Frontier | DF TALK | MayaPythonScriptを比較してみる

timeTest - sunzhongyuan9的专栏 - 博客频道 - CSDN.NET

PymelでWeight情報を取得する | Reincarnation+

glTools/skinCluster.py at master · bungnoid/glTools · GitHub

HTML5のcanvas機能で綺麗なグラフが作れる!「Flotr2」を試してみた | 株式会社LIG

flotr2 - documentation