読者です 読者をやめる 読者になる 読者になる

「Unreal Engine&Unityエンジニア養成読本[イマドキのゲーム開発最前線! ] (Software Design plus)」の執筆の一部を担いました。

ITAKO Unity UnrealEngine 執筆

株式会社ITAKOに所属しているゲームプログラマー1年生の池です。はじめまして。

現在の職場の株式会社ITAKOの仲間達とゲームエンジンのUnrealEngineとUnityに関する書籍を出版することになりました。

Unreal Engine&Unityエンジニア養成読本[イマドキのゲーム開発最前線! ] (Software Design plus)

出版元の技術評論社さんの公式ページ

gihyo.jp

概要

企画の着眼点・経緯は、
UnityとUnrealEngineのそれぞれの書籍は世に数多ある。
だけど、両方のゲームエンジンが載ってて、かつ特定の目的をそれぞれのエンジンで解説するという書籍がなかった。
なので、出版社の編集の方にご提案し、実現するに至りました。

168ページと薄めの書籍です。ですが、薄いながらに詰め込みました。ただ、ページも薄く紹介するエンジンが2つということは、他書でよくあるエンジン1つの書籍よりも内容は薄いのは自明です。

内容は、
Part1では、導入部分として、それぞれのエンジンの紹介から、コミュニティや取り巻く環境、ショートカットキーの解説。
Part2では、3Dのモデルデータを取り込みキャラクターを表示し、実際にアニメーションを付ける。
Part3では、2Dでキャラクターをスプライトアニメーションする。
Part4では、著者陣が近年携わってるモバイル向けの概要、機能の紹介、広告SDK、ランキング機能に関して。
そして最後のPart5では、現在進行で発展を続けており、今後のコンテンツも期待できるVRの紹介。実際にそれぞれのゲームエンジンの機能でVR向けのコンテンツを作り、流れを解説します。

店頭で見かけたら是非手にとって中を見ていただければ嬉しいです。

目次

Part1 徹底解説!話題のエンジンUnity5 & Unreal Engine4
  • 1章:Unity5 & Unreal Engine
  • 2章:より便利にUnity5 & UE4を利用しよう
Part2 3Dキャラクターに動きをつけて世界を表現 キャラクター・アニメーション編
  • 1章:ゲームの世界を覗いてみよう
  • 2章:キャラクターを表示する
  • 3章:アニメーションの再生
Part3 2Dスプライトアニメーション/UIを学ぶ スプライト・UI編
  • 1章:2D表示の基本を学ぼう
  • 2章:Unity5/Unreal Engine4でスプライトを表示しよう
  • 3章:Unity5/Unreal Engine4でスプライトキャラクターを制御しよう
  • 4章:Unity5/Unreal Engine4でUIを作ろう
Part4 モバイルの基礎知識とランキング機能/広告組み込み実践 モバイル編
  • 1章:モバイルゲームを開発するには
  • 2章:Unity5/Unreal Engine4におけるモバイル対応の基本
  • 3章:Unity5/Unreal Engine4で広告を表示しよう
  • 4章:Unity5/Unreal Engine4でランキングと実績機能を実装しよう
Part5 お手軽開発 VR編

余談

なお余談ですが、ボツ案として、UnrealEngineのソースコードが容易に入手、閲覧可能となった時期だったのでそのソースコードをひたすらリーディングしていくという書籍も検討しました。うまく企画がまとまらず断念無念。

株式会社ITAKO

今後とも”娯楽を中心に生きていく”をモットーとした株式会社ITAKOをよろしくお願い致します。

現在の主事業はゲーム開発ですが、娯楽に関わること全般なんでもご相談下さい。

φ(..)メモメモメモメモ

備忘録

自分の備忘録。Chromeのタブが限界を迎えてしまうのでリンク集をまとめとくというのが発端。
だったのだけど、ローカルのテキストファイルに書き込んだものも掘り起こしとく。

ゲーム開発

膨大すぎて割愛(ry

ゲーム関連の掘り起こしは別の機会に(えらいことになってる...)

ゲーム

積みゲーが多発。アナログゲームもデジタルゲームも。

トピックモデル

知人と話してて答えられなかったので。
基本的に小町研 or NAIST or 人名(北 研二, 辻井潤一...etc)and トピックモデルなどの検索クエリとかでググってる。

数学

統計学の基礎のきが抜けてる関係でぐぐった。大抵P given XとかΠが相乗でとかブツブツ言ってる。トピックモデル調べる際の副産物が主。

物理

ゲーム物理で復習をした。

書籍

割愛するが...以下のとおり。

  • NLPがてんこ盛り。
  • NLP以上にゲーム開発の書籍がてんこ盛りすぎて吹く。
  • 史学はそこそこ。
  • 上記以外もなみなみ。

処理系

Σ この記事書いてて思い出した。Hy(Hylang)は初コミットから250コミットくらいを読んでて力尽きてる所。

おれ、全コミット(今1800ちょっと)よみおわったら、つぎは、pixieよむんだ...。

放送大学

4単位分科目履修生。途中課題も提出して問題なし。

総括

時間がいくらあっても足りない/(^o^)\
優先順位つけて、本業で能力発揮するために、ゲームと数学にシフトしてく方針ではある。

備忘録を見直すこと。

Hy(Hylang)をCythonでコンパイル

Hy Python Lisp Hython

Hythonコミュニティの id:rokujyouhitoma です。こんにちわ!

Hythonコミュニティ

Hythonコミュニティは不定期的でHython(廃村)-hack-a-thonと称して、廃村めぐりを開催しています。Pythonで知り合った人たちがほとんどです。

前回参加時は、たしか...猿島?の要塞跡を見学しました。それ廃村じゃ無いじゃん、廃墟じゃん。というツッコミはあるかと思います。
前々回は、奥多摩の廃村だったと記憶してます。山奥でさまよってやっとのこと住居跡を見つけたのですよ!

で?

さて、現在開催中のPython その2 Advent Calendar 2015でcsakatokuさんがHy記事で無双(?)してるのをみてHyに興味をもちました。

Hythonと語呂がちょうどあってそうだし、Pythonで書かれたLisp系処理系のHy(Hylang)を触らないのはもったいないかなー。

さて、前置きが長くなりましたがHythonコミュニティと全く関係ない、本題を...

HyをCythonでコンパイル

というわけでPythonで書かれたLisp処理系の1つHyについてです。

HyPythonで書かれてるので、Hyの処理系自体をCythonで*.soにすれば、速くなるかな?というのを試します。

環境

$ Python -V
Python 2.7.9
$ uname -s
Darwin

検証コード

実際にインストールしたい人は下記でインストール可能です。

cd <上記のリポジトリ(feature/cythonizeブランチ)>
pip install -e .

結果

Cythonizeは成功。作業時間はこの記事書くの含めて2h。実作業には1.5hくらい。

  • 単純な実行だと速度改善する。
  • ただし、本家Hyだとこけないテストが、自前のCythonize版ではそもそもエラー&コケる...。

単純なコード

例えば、map処理

オリジナルをCPythonで
time hy -c "(map inc [1 2 3])"
hy -c "(map inc [1 2 3])"  0.92s user 0.07s system 98% cpu 1.001 total
Cythonバージョン
$ time hy -c "(map inc [1 2 3])"
hy -c "(map inc [1 2 3])"  0.69s user 0.11s system 79% cpu 0.997 total
単純なコードでの結果

33%速度改善がみられた。Cythonのアノテーションなしで33%の改善なら悪くない。

オリジナをCPythonで Cythonバージョン
0.92s 0.69s 1.333

コケる

オリジナルをCPythonで

$ time make test
(省略)
Ran 419 tests in 57.520s

OK
make test  53.09s user 3.23s system 96% cpu 58.337 total
Cythonバージョン
$ time make test
(省略)
Ran 419 tests in 41.521s

FAILED (errors=1, failures=4)
make: *** [test] Error 1
make test  37.97s user 3.21s system 96% cpu 42.509 total
ERROR

Errorが1件。致命的。
うーん。not iteratableなオブジェクトが来てる...なぜ。

======================================================================
ERROR: NATIVE: test the iteration behavior of cons
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/rokujyouhitoma/.virtualenvs/cythonize-hy/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/Users/rokujyouhitoma/.virtualenvs/cythonize-hy/lib/python2.7/site-packages/nose/util.py", line 620, in newfunc
    return func(*arg, **kw)
  File "/Users/rokujyouhitoma/workspace/github.com/hy/tests/native_tests/cons.hy", line 291, in test_cons_iteration
  File "hy/models/cons.py", line 85, in __iter__ (hy/models/cons.c:2403)
    for i in iterator:
  File "hy/models/cons.py", line 79, in genexpr (hy/models/cons.c:2186)
    iterator = (i for i in self.cdr)
  File "hy/models/cons.py", line 85, in __iter__ (hy/models/cons.c:2403)
    for i in iterator:
  File "hy/models/cons.py", line 79, in genexpr (hy/models/cons.c:2186)
    iterator = (i for i in self.cdr)
  File "hy/models/cons.py", line 85, in __iter__ (hy/models/cons.c:2403)
    for i in iterator:
  File "hy/models/cons.py", line 79, in genexpr (hy/models/cons.c:2186)
    iterator = (i for i in self.cdr)
  File "hy/models/cons.py", line 85, in __iter__ (hy/models/cons.c:2403)
    for i in iterator:
  File "hy/models/cons.py", line 79, in genexpr (hy/models/cons.c:2186)
    iterator = (i for i in self.cdr)
  File "hy/models/cons.py", line 85, in __iter__ (hy/models/cons.c:2403)
    for i in iterator:
  File "hy/models/cons.py", line 79, in genexpr (hy/models/cons.c:2156)
    iterator = (i for i in self.cdr)
TypeError: 'HyInteger' object is not iterable
FAIL

Failは4件。そこそこ致命的。

前半2つはkoanというマクロが起因でコケてる。
後半2つは、前半2つと同様koanか、ideasというマクロが起因でコケる。

======================================================================
FAIL: tests.test_bin.test_bin_hy_stdin
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/rokujyouhitoma/.virtualenvs/cythonize-hy/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/Users/rokujyouhitoma/workspace/github.com/hy/tests/test_bin.py", line 60, in test_bin_hy_stdin
    assert "monk" in ret[1]
AssertionError: 
    (0, u'\x1b[?1034h=> => ', u'hy 0.11.0 using CPython(default) 2.7.9 on Darwin\n  File "<input>", line 1, column 1\n\n  (koan)\n  ^----^\nHyMacroExpansionError: expanding `koan\': <cyfunction koan_macro at 0x10311e1d0> is not a Python function\n\n\n') = run_cmd("hy", '(koan)')
    assert (0, u'\x1b[?1034h=> => ', u'hy 0.11.0 using CPython(default) 2.7.9 on Darwin\n  File "<input>", line 1, column 1\n\n  (koan)\n  ^----^\nHyMacroExpansionError: expanding `koan\': <cyfunction koan_macro at 0x10311e1d0> is not a Python function\n\n\n')[0] == 0
>>  assert "monk" in (0, u'\x1b[?1034h=> => ', u'hy 0.11.0 using CPython(default) 2.7.9 on Darwin\n  File "<input>", line 1, column 1\n\n  (koan)\n  ^----^\nHyMacroExpansionError: expanding `koan\': <cyfunction koan_macro at 0x10311e1d0> is not a Python function\n\n\n')[1]
    

======================================================================
FAIL: tests.test_bin.test_bin_hy_cmd
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/rokujyouhitoma/.virtualenvs/cythonize-hy/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/Users/rokujyouhitoma/workspace/github.com/hy/tests/test_bin.py", line 65, in test_bin_hy_cmd
    assert ret[0] == 0
AssertionError: 
    (1, u'\x1b[?1034h', u'  File "<stdin>", line 1, column 1\n\n  (koan)\n  ^----^\nHyMacroExpansionError: expanding `koan\': <cyfunction koan_macro at 0x10311e1d0> is not a Python function\n\n') = run_cmd("hy -c \"(koan)\"")
>>  assert (1, u'\x1b[?1034h', u'  File "<stdin>", line 1, column 1\n\n  (koan)\n  ^----^\nHyMacroExpansionError: expanding `koan\': <cyfunction koan_macro at 0x10311e1d0> is not a Python function\n\n')[0] == 0
    assert "monk" in (1, u'\x1b[?1034h', u'  File "<stdin>", line 1, column 1\n\n  (koan)\n  ^----^\nHyMacroExpansionError: expanding `koan\': <cyfunction koan_macro at 0x10311e1d0> is not a Python function\n\n')[1]
    

======================================================================
FAIL: tests.test_bin.test_bin_hy_icmd
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/rokujyouhitoma/.virtualenvs/cythonize-hy/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/Users/rokujyouhitoma/workspace/github.com/hy/tests/test_bin.py", line 78, in test_bin_hy_icmd
    assert "monk" in output
AssertionError: 
>>  assert "monk" in u'\x1b[?1034h=> => '
    assert "figlet" in u'\x1b[?1034h=> => '
    

======================================================================
FAIL: tests.test_bin.test_bin_hy_icmd_file
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/rokujyouhitoma/.virtualenvs/cythonize-hy/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/Users/rokujyouhitoma/workspace/github.com/hy/tests/test_bin.py", line 87, in test_bin_hy_icmd_file
    assert "Hy!" in output
AssertionError: 
>>  assert "Hy!" in u'\x1b[?1034h=> => '

まとめ

  • Hyとっても面白い。コードを読み進めたい& Land of Lisp のコードをHyで書きたい。
  • 簡単にCythonでビルドできた。Cython有能。
  • ちょっと検証コードが少ないので、もう少し試そうかな。
  • PyPyでHyの速度は気になるから、PyPyでも試してみたい。

歴史探求のメモ書き

History 備忘録

松浦党研究連合会の末席で活動している池です。メモ目的で記す。

読みたい

読みたいが、入手が困難な文献一覧。

志佐物語、志佐記は古い文献であるため、閲覧難易度が高いだろう...。

市史については、あと数十年以内に再度編纂されるであろう or 国会図書館や県図書館に行くか...。

松浦党研究 N.XXは、所属先発刊なので、なんとか入手できそうだし、そもそもアマゾンでまだ扱われてるから、入手は容易そう。
入手できないとしても国会図書館に蔵書されてるので閲覧難易度は低い。

入手難易度高

  • 志佐物語
  • 志佐記
  • 志佐二世物語
  • 松浦叢書第一巻

入手難易度低

ウェブ

なんと、ウェブ上で読めるという幸せ(真贋は不明)

人物

  • 吉村茂三郎

Pythonのマイナーな処理系、コンパイラ

Python

今後深堀りして調査するかは未定だけど、名称忘れがちなのでindex目的で。

д゚)チラッ この分野に詳しい、 id:Ehren 先生からのコメントほしい&二段階ほど深堀りしてまとめてほしいなー

Pythonのマイナーな処理系一覧

マイナー

主観だがマイナーだと思ってる

  • Pythran
  • Parakeet
  • Nuitka
  • Shed Skin
  • HOPE
  • CLPython
  • Python for S60?

マイナーだけど...

下記は除外。既にある程度触った、調査した(and or 興味がない...)ため

  • Pyston(id:Ehren先生が追ってるのでレポート待ってる
  • Numba
  • Cython
  • Psyco
  • RPython
  • MicroPython
  • PyMite
  • tinyPy

メジャー

下記は除外。主観だがメジャーなため

うーん???

知らなさすぎて分類不能。

  • MyPy

最近やったこととか、次にやることを整理

ざっくりでもどこかにアウトプットしとかないと興味がガンガン移ったりするのと、頭からフラッシュしたいので。

やったこと

コード書いた

書いたというか、この前のjava-ja.ossの和田さんの発表を聞いて、継続的に書き始めた。
Cythonがだいぶ面白い。

「コード書いた」からはずれるけど

Emacsでjedi.elはPythonではよさげだった。

技術書

実践ドメイン駆動設計

実践ドメイン駆動設計

Learning NGUI for Unity

Learning NGUI for Unity

NGUI for Unity

NGUI for Unity

ゲームを動かす数学・物理

ゲームを動かす数学・物理

改訂3版 パーフェクトC#

改訂3版 パーフェクトC#

[asin:4873117313:detail]

歴史の基礎力向上

豊後国風土記・肥前国風土記

豊後国風土記・肥前国風土記

やれなかったこと

TODO、Keep

コードを書く

具体的には、通信周り、オブジェクトの物理挙動を学習用途で。C苦手なのでC or Cythonで。
「コード書く」から外れるけど、macの/usr/include/*.hを読んだことなかったのでCythonで遊びながら読む。
mrubyとかCythonで組み込むと面白いのかな。

技術書

Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際

Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際

直系ご先祖の戸籍取寄せ

保管期間150年というのが定められてるから、古いのどんどん追えなくなるので。
行政書士司法書士に頼むか、自力で取り寄せるかは未決。

IPAの情報処理資格

トライしよう。知人が受けた姿勢を真似て

NLP

...oh...アウトオブレンジだった...のを整理してて思い出したでござる

放送大学 自然言語処理('15)

NLP

放送大学自然言語処理NLP)の講義を今年から配信すると聞いた。2月ごろ。

以前から興味があった&業務でちょびっとかじったNLP。面白そうだったので、単位取得までしてみるか。ということで、放送大学 自然言語処理('15)を科目履修生として履修しました。

受講した理由は、ネット(たしかTwitterだったような...)で知って、座学を体系だってインプットしてみるか思い立ったため。業務でちょびっとかじったことあるのも関係していると思う。

受講したいけど、悩んでるって人がいたら、コメント欄やツイッターなどで連絡取ってみてください。詳細答えます。記事へのツッコミも歓迎。

結論・結果

  • 無事単位取得。
  • すっごい楽しかった。
    • 客員として京大黒橋教授の講義がラジオ配信で受けられるとかラッキーだった。
  • 体系通り基礎を学ぶことができた。
  • コストは18,000円と諸経費α(学生証の写真代とか)
    • 実際には書籍に5万くらい突っ込んだ。
  • 期間は3月から準備に入って、8月まで。主に毎週6時間程度。土日の夜の時間。

前提

スキルの説明したほうが良さそうなので以下箇条書き。 基本学ぶことに苦はない。

スキル

基本、高卒程度だと思ってもらってよい。

数学

近年、下記を仕事で必要になってるのでとりわけ学んでる。

  • 微分積分学
    • 高校程度で止まってる。
  • 線型代数
    • とりわけゲームクライアントの座標系で使うから必要。
    • 多分2015下期で履修してみる。
  • 離散数学

専門知識

  • NLP

    • Baidu JapanでちょっとだけNLPの世界に触れた。
    • 興味はある。
    • 周囲は、検索エンジン各社でNLP触ってた人たちに恵まれてる/てた。
  • プログラミング

    • 仕事がソフトウェア開発なのと、プログラミング言語好きなので、言語変わってもなんとかなるくらいのスキルは持ってる。

学習戦略

  • 数。とにかく数をインプット。
  • それでもわからなければ数。とにかく文献漁って数をインプット。
  • 困ったらNLP修士取った知人や、検索エンジン作ってた知人に相談。

放送大学

本題の放送大学 自然言語処理('15)について。

科目履修生

放送大学のネットから申請可能。半期のみ在学可能。 入学料は7,000円。1科目ごとに授業料として11,000円。

つまり、今回は自然言語処理('15)のみなので、合計18,000円なり。

自然言語処理('15)

放送大学 授業科目案内 自然言語処理('15)

講義

基本的には座学。途中で4者択一の課題が10問程度あるので、郵送で提出。ネット提出も対応していた。

自然言語処理('15) 第15回の最終回

ゲストは、最終回にふさわしく京都大学長尾真名誉教授。

単位取得試験

1.5h。僕の場合は渋谷の受験センターで受験。

単位取得試験の結果

無事単位習得。2単位。

専門書籍に困ったら

  1. 大学図書館
  2. 国立国会図書館...
  3. アマゾンなどのECサイトで購入
  4. 専門書店

専門書店

水道橋-神保町に繰り出す。

情報源

NLP学習の情報源。

既に追ってる情報源

NLPを学ぶ上で何回も見なおしたサイト。

首都大学東京小町研

この1,2年でガンガン更新されてるので目を通すのが吉。

武蔵野日記

今後追ってく情報源

NAIST松本研

参考にする。 - Introduction to Computational Linguistics Laboratory - 松本研でやっている勉強会の説明

NLP若手の会(YANS)

言語処理学会

研究室

NLPを学ぶ上で、よくみかける大学の研究室、研究者。 見かけた場所はネットや、書籍。

実際研究者の論文総ざらいとかする気が本気であるなら、「デジタル言語処理学事典」の編集委員・執筆者一覧を参考にすればOK

最後に

楽しかったので、15年度下期の別の講義を申し込んだ。