ゲームのUIなどはプログラムに直接記述するとコード領域を多くとってしまう、
しかもメンテナンス性がイマイチ
なのでUIなどの制御やシナリオの制御を行うときはスクリプトでやるに限ります。
みたいな話を先輩(というか私の会社の開発で一番偉い人)と話していました。
自社で開発したライブラリやスクリプトエンジンがあるらしく、
いつかその知識を僕に伝授してやる!という感じで盛り上がって、
私が半年前に作ったスクリプト解析プログラムを見せてみたり…
必要なものが大体揃ってると結構良い評価をいただきました!やったぜ。
私の務める会社は即戦力求む!という雰囲気がありません。
どれだけ実力があったとしても、
独学ならまずは会社の先輩の下で手伝いなどをしていきながら設計方法や考え方を学びます。
これは会社の役員がみんなプログラマーであることが起因しています。
実力に難があるのであれば育てれば良い、みたいな方針があります。
なのでプログラマーは採用されやすい。
よくゲーム会社では3Dできる人!とかFBXを自前で解析しろ!とかDirectX使えないとかプークスクス
みたいなことをおっしゃる会社もありますが、私の会社の人からすれば
3Dは座標変換やコリジョンの話になれば別として
シェーダーやモデル解析はそこまで重要視されません。
私の会社の人はアンチWindows、アンチMicrosoftが多いので(Unix系が好きな人が多い)
WinAPIやDirectXなんかもあまり重要視しません。
そんなものよりもちゃんと見通しの良い設計をしろ!というのが基本理念。
ちゃんと設計ができてメンテナンスがしやすい作りが最も良いのであって、
物理計算やプログラマブルシェーダーはゲームを作る上での知識の中のオマケに過ぎない
と、私は教わりました。
まぁそれが正しいかどうかはさておき。。。。
そろそろ出向が開始してから2か月あまりが経とうとしています。
この二か月で学べたことは非常に多かったですし、20何年もこの業界で仕事をしている人のお話はためになります。
本当に良い上司に恵まれたなぁと思います。(厳しいことを言われることもあるし怒られもするんだけどね)
設計や作り方に関する考え方はいろいろあれど、
様々な言語に触って、あらゆる設計思想を網羅して、限りなく低級なレベルのデータ操作をできる
そういった古い考え方に留まって思考停止しない、その一方でそれらの新しいパラダイムや設計思想に対して
「でもそれってこうだよね」という自分なりの考え方から最良の作り方を選ぶ会社の先輩のプログラミングに対する考え方は好感が持てます。
今後もどんどんと学んでいきたいなぁと
ではでは
せんちゃの修行日記~スクリプトエンジン~
Re: せんちゃの修行日記~スクリプトエンジン~
すごくホワイトな会社ですねー。素晴らしい。実際シェーダーの技術なんてあと何年持て囃されるかも判りませんしね。
それと、古いやり方に囚われるというのも本当に困った話で。プログラミングほど日進月歩な世界もないのに。
で、スクリプトエンジンについてのお話ですが、現にスクリプトエンジンの組み方で悩んでいる僕に、
その「必要なもの」というのが何々か教えて頂けるとすごくありがたいなー、なんて思います。ぜひ参考にしたいので。
それと、古いやり方に囚われるというのも本当に困った話で。プログラミングほど日進月歩な世界もないのに。
で、スクリプトエンジンについてのお話ですが、現にスクリプトエンジンの組み方で悩んでいる僕に、
その「必要なもの」というのが何々か教えて頂けるとすごくありがたいなー、なんて思います。ぜひ参考にしたいので。
Re: せんちゃの修行日記~スクリプトエンジン~
どこでそんなの聞くのでしょうかよくゲーム会社では3Dできる人!とかFBXを自前で解析しろ!とかDirectX使えないとかプークスクス
そんな会社があるからゲーム会社はヤバイとか言われるんですなw
私のいた会社でも、ウチではこうやるよとまず教えてくれてたけどなあ。。
ちなみにそのころはWindows 95~2000の時代だったw
アンチMicrosoftはいませんでしたよ。
いまではそんな会社は少ないのか?やれやれ。
せんちゃさん、頑張ってくださいね~
最後に編集したユーザー へにっくす on 2013年2月02日(土) 11:53 [ 編集 1 回目 ]
Re: せんちゃの修行日記~スクリプトエンジン~
SUEさん
やたらとオブジェクト指向に寄ったりすると、
例えば多重継承しすぎて最終的に下のクラスが何やっているのか複雑になりすぎたり、
縦方向に継承していくと基底が変わると同時に芋ずる式で全部変わってしまう(のがメリットになる場合もありますが、デメリットになる場合もあったり)
しかしオーバーライドで個々に挙動を制御できることで柔軟に対応できるので、そういった部分はC++のメリットであったり…
ジェネリックやSTL、Boostなんかはかなり前衛的ですが
こだわりすぎるとコードサイズを増やすので組み込み系には向かなかったり、
でもスクリプトエンジンなんかはSTLで動的確保をしていかないととても作れないので
スクリプトエンジン部分にSTLなどを利用する場合もあると教わったこともあります。
ただその場合はコード部分の使用領域を1MB以下にしてあとはスクリプトで動かすことで容量軽減をはかったり。。。
オブジェクト指向設計はあまりグローバルなデータは使わないほうが望ましいですが、
外で面倒な処理を記述する静的なマネージャーを作ってそこでインスタンスを管理したほうがメンテナンス性や見通しがよくなりやすかったり…
新しい知識や技術を利用するにしてもケースバイケースのような感じがしますね。
とても難しい問題だと思うのでこれという正解はなさそうですが
最終的に第三者がメンテナンスしやすい作りになっていればどんな作りでも良い作りなのかもしれませんね。
インタプリタでよく使われる基本的な部分が一式揃ってたってことだと思いますね。
変数や関数や低数値を記録するテーブル作ったり、格納するメモリ領域とか
・関数名を発見したら関数シンボルに登録。アドレスは0番から順番に登録される
・関数パラメーターの個数は関数テーブルに記録しておいてパラメータはローカル領域に登録
・関数テーブルにはローカル変数の開始地点アドレス、利用されているローカル変数の数などの情報を記録
・変数名を発見したら変数シンボルテーブルに登録。変数のシンボルテーブルはローカルとグローバルがある
・リテラルを発見したらリテラルの領域に登録。
あとはそのテーブルに登録されているシンボルを発見したらそのテーブルの番号を参照するというような
バイトコードに変換したり、演算子などのオペランドを発見したらそのままバイトコードに。
実行するときにそれらの評価を行って、演算であれば再帰的下降構文解析を使ったり、
バイトコードからどこのテーブルに演算結果を入れるか、みたいな処理を書いたり…
スクリプトエンジンに関してはそれだけですね。
たぶんそのへんはスクリプトに限らず、言語処理系では大抵必要最低限持ってる部分なので
おそらくそのあたりだと思いますw
けっこうモノによると思います。SUE さんが書きました: 古いやり方に囚われるというのも本当に困った話で。プログラミングほど日進月歩な世界もないのに。
やたらとオブジェクト指向に寄ったりすると、
例えば多重継承しすぎて最終的に下のクラスが何やっているのか複雑になりすぎたり、
縦方向に継承していくと基底が変わると同時に芋ずる式で全部変わってしまう(のがメリットになる場合もありますが、デメリットになる場合もあったり)
しかしオーバーライドで個々に挙動を制御できることで柔軟に対応できるので、そういった部分はC++のメリットであったり…
ジェネリックやSTL、Boostなんかはかなり前衛的ですが
こだわりすぎるとコードサイズを増やすので組み込み系には向かなかったり、
でもスクリプトエンジンなんかはSTLで動的確保をしていかないととても作れないので
スクリプトエンジン部分にSTLなどを利用する場合もあると教わったこともあります。
ただその場合はコード部分の使用領域を1MB以下にしてあとはスクリプトで動かすことで容量軽減をはかったり。。。
オブジェクト指向設計はあまりグローバルなデータは使わないほうが望ましいですが、
外で面倒な処理を記述する静的なマネージャーを作ってそこでインスタンスを管理したほうがメンテナンス性や見通しがよくなりやすかったり…
新しい知識や技術を利用するにしてもケースバイケースのような感じがしますね。
とても難しい問題だと思うのでこれという正解はなさそうですが
最終的に第三者がメンテナンスしやすい作りになっていればどんな作りでも良い作りなのかもしれませんね。
なにが必要なものなのかは言っていませんでしたが、SUE さんが書きました: で、スクリプトエンジンについてのお話ですが、現にスクリプトエンジンの組み方で悩んでいる僕に、
その「必要なもの」というのが何々か教えて頂けるとすごくありがたいなー、なんて思います。ぜひ参考にしたいので。
インタプリタでよく使われる基本的な部分が一式揃ってたってことだと思いますね。
変数や関数や低数値を記録するテーブル作ったり、格納するメモリ領域とか
・関数名を発見したら関数シンボルに登録。アドレスは0番から順番に登録される
・関数パラメーターの個数は関数テーブルに記録しておいてパラメータはローカル領域に登録
・関数テーブルにはローカル変数の開始地点アドレス、利用されているローカル変数の数などの情報を記録
・変数名を発見したら変数シンボルテーブルに登録。変数のシンボルテーブルはローカルとグローバルがある
・リテラルを発見したらリテラルの領域に登録。
あとはそのテーブルに登録されているシンボルを発見したらそのテーブルの番号を参照するというような
バイトコードに変換したり、演算子などのオペランドを発見したらそのままバイトコードに。
実行するときにそれらの評価を行って、演算であれば再帰的下降構文解析を使ったり、
バイトコードからどこのテーブルに演算結果を入れるか、みたいな処理を書いたり…
スクリプトエンジンに関してはそれだけですね。
たぶんそのへんはスクリプトに限らず、言語処理系では大抵必要最低限持ってる部分なので
おそらくそのあたりだと思いますw
Re: せんちゃの修行日記~スクリプトエンジン~
へにっくす さん
「まずDirectXが使えることと、3Dプログラミングができることが入社の条件なので勉強してください」
と言われましたねw
あとはテックアーツというエロゲー会社は
提出作品にDXライブラリなどのライブラリの使用を名指しで禁止しています。
更に「DirectXで3Dゲームが作れる人」という採用条件付きです(エロゲーはまた特殊な業界だから仕方ないかもしれませんが。。。)
こういった部分を変に解釈してWinAPIやDirectXの使い方を覚えるのに貴重な学生の時間を
費やす生徒が非常に多いのが今のゲーム業界を目指す人の現状だと思います。
会社の人はアンチMicrosoftってわけでもないんですけど、
ボーランドの提供するライブラリは洗練されているのに、
Microsoftの提供するライブラリは作りが杜撰すぎて嫌とかWindowsAPIは作りが面倒すぎるとか
提供している関数がクソだとかそんな感じらしいですw
まず私の通っていた専門学校に会社説明にきた人達はへにっくす さんが書きました: どこでそんなの聞くのでしょうか
そんな会社があるからゲーム会社はヤバイとか言われるんですなw
「まずDirectXが使えることと、3Dプログラミングができることが入社の条件なので勉強してください」
と言われましたねw
あとはテックアーツというエロゲー会社は
提出作品にDXライブラリなどのライブラリの使用を名指しで禁止しています。
更に「DirectXで3Dゲームが作れる人」という採用条件付きです(エロゲーはまた特殊な業界だから仕方ないかもしれませんが。。。)
こういった部分を変に解釈してWinAPIやDirectXの使い方を覚えるのに貴重な学生の時間を
費やす生徒が非常に多いのが今のゲーム業界を目指す人の現状だと思います。
会社の人はアンチMicrosoftってわけでもないんですけど、
ボーランドの提供するライブラリは洗練されているのに、
Microsoftの提供するライブラリは作りが杜撰すぎて嫌とかWindowsAPIは作りが面倒すぎるとか
提供している関数がクソだとかそんな感じらしいですw
Re: せんちゃの修行日記~スクリプトエンジン~
それもその通りですよね。むしろ僕自身が旧態依存なプログラミング、要するに現代のPCで走らせるのに極力newはしない、継承の段階は増やさないし多重継承は厳禁、dynamic_castを使うときは腹を切る、せんちゃ さんが書きました: 新しい知識や技術を利用するにしてもケースバイケースのような感じがしますね。
とても難しい問題だと思うのでこれという正解はなさそうですが
最終的に第三者がメンテナンスしやすい作りになっていればどんな作りでも良い作りなのかもしれませんね。
みたいな考えを過度に持っている自覚があるので、適切に新しい考えを取り入れるべきだよな、と思ったりしたのです。
で、スクリプトエンジンについてですが、わざわざ具体的に挙げていただいてありがとうございました。バイトコードか…なんとなく解決の糸口が見えた気がしますw
それと横槍になりますが、
それは大きな問題ですよね。DirextXとかその他MSの仕様を覚えるくらいなら他に頭を使うべきところは沢山ありますよね。せんちゃ さんが書きました: こういった部分を変に解釈してWinAPIやDirectXの使い方を覚えるのに貴重な学生の時間を
費やす生徒が非常に多いのが今のゲーム業界を目指す人の現状だと思います。
もっと曲解すれば、DirextXなんざ腕のあるプログラマが一人関わって隠せばいいものを、それが出来る人がいないと言っているようにも見えるのですが・・・
(この辺、職業としてプログラミングをしたことがないのでなんとも言えませんが)
Re: せんちゃの修行日記~スクリプトエンジン~
マジ?せんちゃ さんが書きました:まず私の通っていた専門学校に会社説明にきた人達は
「まずDirectXが使えることと、3Dプログラミングができることが入社の条件なので勉強してください」
と言われましたねw
|i|i|orz|i|i|
エロゲーは画質が命、いかに○○(自主規制、笑)させるかですから、ホント特殊ですよwせんちゃ さんが書きました:あとはテックアーツというエロゲー会社は
提出作品にDXライブラリなどのライブラリの使用を名指しで禁止しています。
更に「DirectXで3Dゲームが作れる人」という採用条件付きです(エロゲーはまた特殊な業界だから仕方ないかもしれませんが。。。)
そうでっか。いや学生も大変だな…せんちゃ さんが書きました:こういった部分を変に解釈してWinAPIやDirectXの使い方を覚えるのに貴重な学生の時間を
費やす生徒が非常に多いのが今のゲーム業界を目指す人の現状だと思います。
どちらも触ったことがありますが、個人的には好みの問題だなと私は思います。せんちゃ さんが書きました:会社の人はアンチMicrosoftってわけでもないんですけど、
ボーランドの提供するライブラリは洗練されているのに、
Microsoftの提供するライブラリは作りが杜撰すぎて嫌とかWindowsAPIは作りが面倒すぎるとか
提供している関数がクソだとかそんな感じらしいですw
私はMicrosoftがOS出してんだから素直にWindowsAPI使え、と感じる派ですがね。