BlenderゲームのGPL回避と、BPPlayerを使った暗号化

久々のBlender記事。先日、Blender Game Engine (以下、BGE)でゲームを作ったがいいが、ライセンスをGPLにしたくないのですが、どうしたらいい?との相談がありました。

正直、僕は中身はオープンにする以外考えてなかったので、ライセンス?何それ?おいしいの?状態でしたが、正直気になるところなので、まとめてみます。


○ GPLとは?
一般公衆ライセンス(General Public License)。簡単に言うと、中身を誰でも見られるようにして、誰でも改良して使っていいけど、あなたが改良したものもGPLにしてよね。っというライセンスです。

GNUライセンスに関してよく聞かれる質問
http://www.gnu.org/licenses/gpl-faq.ja.html#WhatDoesGPLStandFor


○ BGEで作ったもののライセンス

Blenderで作成したファイル、つまり、blendファイルについては、そのライセンスの決定権は自身にあります。GPLだの何だのを気にする必要はありません。

ただし、BGEで出力した実行ファイル(exe、app等)に限り、GPLのプログラムが内包されるので、ライセンスGPLにしなくちゃいけません。

Licensing of Blender Games 日本語訳
http://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Game_Engine/Licensing

このリンク先にあるライセンス保護するための4つの方法というのが記載されており、それが全てですが、・・まぁ僕なりにまとめてみます。


○ ゲーム内の素材のライセンスはどうなるの?

BGEで実行ファイル(exe)を出力した場合、そのファイルはGPLになります。
では組み込まれた素材たちのライセンスはどうなるの?

はっきりした情報を見つけられなかったのだけれども、普通に考えて、ゲーム内の音源やその他素材は、その素材の製作者がつけたライセンスのままになるはずです。となると、その素材のライセンスが商用は駄目っと言っていれば、自分のゲームは商用じゃなくても、派生ゲームを自由に作れて、それが商用可能なGPLライセンスのゲームに組み込むのは問題があるような気がします。

まぁ、ソースは公開しても、素材は添付せず、「派生ゲームは作っていいけど、素材は別ライセンスだよ。気を付けてね」でも、個人的には良いと思うんだけど。

とはいえ、自分で作ったものもGPLにしたくなかったりとあるので、自身のものも含めてGPLにならないようにすることを考えてみましょう。


○ GPL感染を防ぐには?

前述のとおりblendファイルならGPL云々を考える必要ありません。

実行ファイルにするのは、blendファイルを開くって部分だけで、中身はblendファイルのままにしておきます。
すると、読み込む部分(実行ファイル)だけGPLで、ゲームの中身については、自身で決めたライセンスで良いわけです。
sc_201506201546135a1.png
こんな感じのゲームロジック

blendファイルには、画像、音源、動画などのデータを内包することが出来ます。一般的なファイル形式ではないので、ただゲームを遊ぼうとする人達にはブラックボックスです。blendという拡張子をつけなくても動かせるので、言わなきゃ何のファイルかわからないし。ただ当然 blendファイルなので、Blenderで開けば、中身は丸見えだし、音源など素材を抽出することも簡単です。

まぁ、素材を抽出して、ライセンス外の利用をすれば、悪いのはあなたではなく、勝手に抽出して利用した人なので、あなたが気を病む必要はないと言えばないのですが、誠実なあなたは「ちゃんと素材を暗号化して、素材を守らねば」と思うでしょう。


○ blendファイルを暗号化するには?

そのためのソフトウェアを使うのがお手軽のようです。ソフトウェアには、BPPlayerや、GameKitなどがあります。
これらのソフトウェアがしているのは、blendファイルの暗号化です。で、実行時、解読したものをBlenderPlayerに渡します。

で、BPPlayerを軽く触ってみたのですが、そんな難しいこともなかったので、方法を書いていきます。

BPPlayer
http://blenderartists.org/forum/showthread.php?130089-BPPlayer-BGE-Security-(1-06-Win32-Linux64-MacOSX)


○ BPPlayerの操作手順

ステップ1:素材データをblendファイルに内包する
File => External Data => Pack All into .blend
sc_20150620150622100.png

ステップ2:BPPlayerをダウンロード
BPPlayer v1.06
http://blenderartists.org/forum/showthread.php?130089-BPPlayer-BGE-Security-(1-06-Win32-Linux64-MacOSX)

試しにBPPlayer.exeを起動してみると、こんなゲーム?が開始されるはず。
sc_20150620153456109.png


ステップ3:
BPPlayer => blendblockConverter => BPPlayerGUI.exe を開く
sc_201506201509545b7.png

ステップ4:設定
・Import Main Blendを選択。最初にスタートするblendファイルを選択する。
sc_20150620151345f55.png

・単一のblendファイルじゃない場合は、Pack File にblendファイルを追加
sc_20150620151512405.png

・Export Block Nameを選択し、BPPlayerのフォルダに移動し「data.block」というファイル名を選択する。このファイル名はBPPlayerがデフォルトで読み込むファイル名。既存のサンプルファイルがあるはずだから上書きしちゃう。
sc_201506210948290bb.png

・設定ファイルの保存
File => Save As (Config FIle)
sc_20150620152158a15.png

・blockデータの出力
Export Type が Export as Block File になっていることを確認し、Exportを選択。
sc_20150620152730492.png

・成功
sc_20150620152848961.png

これで、BPPlayer内にある data.blockがあなたの作ったゲーム内容に入れ替わりました。


○ BPPlayerを起動!
あなたのゲームが開始されるはずです。


これで、中身は見えないし、ライセンスもクリアです。
簡単なゲームなら問題なく動作しましたが、ゲームの中身が複雑になってきたとき、どうなんでしょうね。

簡易SL4Aシミュレータ

初アプリ開発、HTMLの基盤も出来たし、そろそろ中身を作っていきます。中身はPythonで作っていきます。

AndroidではSL4A (Scripting Layer for Android) というスクリプト言語を実行させる環境アプリがあって、この上でPythonが動かせる。GUI機能はないのだけど、WebKitが使えるので、GUIをHTMLで構築し、JavaScriptを使って、Pythonとデータの受け渡しが出来るとのこと。しかもアプリとして出力できる。


情報源はこの記事。

Python で Androidアプリをセルフ開発 ( sl4a と、AIDE を 使って Pythonスクリプトをスマホ上で独立Androidアプリに変換)
http://keitaiseikatsu.blogspot.jp/2013/07/python-android-sl4a-aide-pythonandroid.html


前にやったことあるけど、もう一回試してみよ・・・・・あ、あれ!?全然動かない。。。


どうやらAndroid5.0以降、動かなくなっているよう。あいやー。

検索すると、パーミッションエラーとかなんかで、SDカードじゃなくて内部ストレージに移したらOK云々ありますが、僕がアプリを完成させるより、SL4Aのアップデートの方が早いと期待して、色々試すのは後にします。

Android5.0.2でSL4AのPythonは起動不可能?
http://blog.livedoor.jp/kikwai/archives/52137963.html

sl4a permission issue after android upgrade
http://stackoverflow.com/questions/27227386/sl4a-permission-issue-after-android-upgrade

執筆時のバージョン
sl4a_r6.apk
python3forandroid_r6.apk

というのも、一々ファイルを実機に移してコンパイルして動作確認しながら開発なんて煩わしいので、シミュレータ上で動作確認を行うから、とりあえず実機で動かなくても開発はできる。

ただし、SDKに含まれるAndroidのエミュレータは激重なので、ネットブックでも動く簡易的なシミュレータを作ることにしました。

ただ、実機で動かせないのは、モチベーション的に痛い。その上に、今回は自作シミュレータなので全然動作が違ったなんてリスクも。。。:(


SL4AのAPIがすべて動作する完全なシミュレータを作ろうと思ったら、それこそアプリどころじゃなくなるので、簡単なものを目指します。

上記の記事(Python で Androidアプリをセルフ開発)のサンプルで出てくる関数は4つ。

Python側 android.eventPost()
Python側 android.waitEvent()
Javascript側 android.eventPost()
Javascript側 android.registerCallback()

この4つが動作すれば、GUIとのデータのやり取りは出来るので、大抵のことは何とかなるんじゃないかな、との予想のもとに、これらの関数だけ擬似的に動作するシミュレータを作ることにしました。

どん!

GUIにはPySideを使っています。

色々強引です。別にAndorid上での操作を完全再現したいわけじゃないんだ。細かい修正は実機でやるとして、大まかに作り進めるためのもんだから。動きゃいいんだ、動きゃ。


理想は、上の記事のサンプル(index.htmlとscript.py)がそのままで動作することだったんですが、ちょっと諦めました。

初めはその発想で、HTMLの動作を常時確認するスレッドと、script.pyを常に回すスレッドのマルチスレッド式にしたのですが、スレッド内からWebKitのJavascriptを実行させようとすると、メモリの重複やらなんやらでPythonが落ちてしまうことがわかって、上手い解決を見出せませんでした。

特定のファイル(debug.txt)があるときと無い時の分岐を加えて無理やり動作させています。


細かい使い方なんかは、後日ウェブサイトの方に専用ページを作るつもりでいますが、いつになるか分からないので、使いたい人がいらっしゃいましたら、コメントしてください。

これで開発は進められますが...、やはり実機で試したいなぁorz


それにしても、JavaScriptの開発はデバックがホント大変。可能な限りPythonで書こうっと。
このブログについて
□ ブログ内容
決まった趣旨はありません。
興味を持ったこと・日常で行ったことを何でも書きます。

3DCG・プログラミングなどが多めです。

□ 現在の活動
・ウェブサイト制作
 (http://tiblab.net)
・3Dゲーム制作
 (コックパニック)
検索フォーム
ユーザータグ

Blender キャプチャ blendファイル BGE Python GameEngine ムービー Android CG  Red5 Terragen C# C++ 

カテゴリー
プロフィール

TiBra

Author:TiBra
趣味でCG制作、プログラミング等を行っています。メイカーズに憧れています。

ネットを通じた交流を広げたく思っていますので、コメント・メールはお気軽にどぞー

戯言程度のことは、こちらのブログに投稿しています。基本戯言なので、実質移転しているようなものです。

Mail:tibraあっとlive.jp
HP:TibLabmemocode
動画:VimeoFC2動画ニコニコ
ファイル:SkyDrive
企画:3Dゲーム作業実況

Blogリンク
不都合がございましたらご連絡ください。
当ブログのリンクバナー
FC2 ID
FC2カウンター
RSSフィード+解析コード