[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 10/15 01:42 / Filesize : 244 KB / Number-of Response : 942
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ゲームエンジン総合スレ★2



1 名前:名前は開発中のものです。 mailto:sage [2011/02/01(火) 16:58:30 ID:Fc0ojZal]
このスレはゲームエンジンの製作・雑談・情報交換を行う為のスレです。

ゲームエンジンに関係ない話は該当スレか雑談スレでどうぞ。

総合発表&雑談スレッド その3
hibari.2ch.net/test/read.cgi/gamedev/1216633635/

※前スレ
hibari.2ch.net/test/read.cgi/gamedev/1293381827/

782 名前:名前は開発中のものです。 mailto:sage [2011/12/09(金) 21:17:22.23 ID:NxNK3Il0]
そろそろ公開したいがここはレベル高すぎて叩かれそうでなぁ、、、

783 名前:名前は開発中のものです。 mailto:sage [2011/12/10(土) 00:37:23.66 ID:lk5nppT+]
お前にとって2chで公開する意味って何?
10年前ならまだしも今なら他にいくらでも方法あるじゃない。

ここが良いなら止めないけど。


784 名前:名前は開発中のものです。 mailto:sage [2011/12/11(日) 17:20:16.75 ID:Ex7goiSZ]
>>783
単純にゲーム製作に興味があって、なおかついろいろな意見を聞ける場所を他に知らないというか・・・。

自分でHP作って公開したところで宣伝が必要ですし全てを賄うゲームエンジンではなく、
BISHAMONっぽいエフェクトエディタを目指して作っていたものなので・・・。

ツールにしろエンジンにしろまずは多数の人に触ってもらってダメだしをしてもらわないと
使いにくい独りよがりなものになってしまうんですよねぇ・・・。

785 名前:名前は開発中のものです。 mailto:sage [2011/12/11(日) 17:59:56.09 ID:R5ybnX8R]
おー使ってみたい

786 名前:名前は開発中のものです。 mailto:sage [2011/12/11(日) 20:53:06.07 ID:gTbeidNn]
>>784
それこそfacebookやtwitterで公開すればいいのに
2chで公開したソフトは一生2chから逃れられなくなる

787 名前:名前は開発中のものです。 mailto:sage [2011/12/12(月) 00:01:11.61 ID:TGO5HuuK]
facebookは実名プレイなのが・・・
公開方法より宣伝と試用数がそれなりに行きそうな方法を考えよう・・・。

788 名前:名前は開発中のものです。 mailto:sage [2011/12/12(月) 00:44:57.65 ID:UNECVSF3]
それ悩みどころだよね。
HP作って、そこを2chで宣伝してみてはどうかね?
関心を持たれなかったら、そっぽ向かれて、それまでのことで終わるし、
意見があればスレで建設的な意見も出るだろう。

789 名前:名前は開発中のものです。 mailto:sage [2011/12/12(月) 01:09:16.78 ID:PFnyZnch]
まあ地道に続ければどうとでもなるよ。
商品として売れるぐらいになるまで頑張れ。

790 名前:名前は開発中のものです。 mailto:sage [2011/12/12(月) 02:48:13.71 ID:WY1K7d4I]
>>787
別にみんな実名だからいいんじゃね?>Facebook
Twitterでも実名の人いるし、実名だと叩く連中がいるのは2chだけだよw



791 名前:名前は開発中のものです。 mailto:sage [2011/12/12(月) 22:50:02.76 ID:TGO5HuuK]
>>790
実名自体はどうでもいいんだ・・・
会社バレを避けたい。

792 名前:名前は開発中のものです。 mailto:sage [2011/12/12(月) 23:19:06.82 ID:dOCruPJX]
>>791
Freenet上で配布とか。


793 名前:名前は開発中のものです。 mailto:sage [2011/12/13(火) 10:06:37.10 ID:KisAyegw]
Facebookで実名っぽい名前使えば良いんじゃない?
もしくはわざと誤変換したまま気がつかないとか。
俺は非常に特殊な名前だから、一文字誤変換させた名前で一般名に変えてる。
熊飼→熊谷ってな風に。

794 名前:Elena Oda Vintevecom(BECKHAM)=八犬伝 [2011/12/15(木) 00:33:06.84 ID:2kBGnUvT]
検索エンジンGoogleで
インターネットテレビ 朝鮮総連 少頭劣一族 電気 人質
又は
インターネットテレビ 朝鮮総連 少頭劣一族 電気 波動砲
又は
インターネットテレビ 朝鮮総連 少頭劣一族 自民党 カニバ(又は命令)
を検索せよ。

795 名前:名前は開発中のものです。 mailto:sage [2011/12/16(金) 18:28:39.78 ID:CN6x5cSE]
>>788の案で公開してみるわ。
チュートリアルとサンプル作成が間に合ったら土日に出すぜ。

796 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 09:40:43.88 ID:c3HdajPR]
>>795
おい、土曜日だぞ

797 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 11:17:53.44 ID:TfhfpYIA]
俺たちの土日はまだ始まったばかりだ!

798 名前:795 mailto:sage [2011/12/17(土) 11:56:49.28 ID:Os1QoaDI]
>>796
サンプルとチュートリアルまだだけど他のスレで出しちゃったし出すわ。
ttp://amayuri.dojin.com/download/rainlily_beta_0100.zip

799 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 14:26:18.35 ID:3MKJAh62]
>>798
なかなか良さげな感じがする
こういうパーティクルエディタって少し前から流行ってきてるよね

800 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 14:28:19.27 ID:RYqigaak]
イイねぇ。



801 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 14:55:57.20 ID:ze3P7mXz]
>798

すごくいいよ。
こういうの欲しがってる人
結構いるんじゃないかな?

俺は別エンジン買っちまったって同じようなFXツールも買ってしまったけど。
これがフリーで公開されるんならありだと思う。

エフェクトって作るの手間だしね。


802 名前:名前は開発中のものです。 [2011/12/17(土) 16:57:01.65 ID:3NQ84Fkf]
>>798
ちょ、あと1か月速く公開してよ
これがあったらBISHAMON買ってねえよ…

803 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 17:07:27.91 ID:Os1QoaDI]
>>802
すまん、1ヶ月前の公開は流石にムリだw
まだ機能的にも足りてないし操作マニュアルすらない状態だしなぁ。

でもBISHAMON持ってるならものすんごいエフェクト作れるじゃん!

804 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 17:54:00.86 ID:+Q38Ain2]
Seleneの中の人だよね?

805 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 18:00:29.24 ID:TfhfpYIA]
冬コミまであとxx日!!

806 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 20:04:20.64 ID:03j411Lq]
VitaのSDKか個人でも手に入るらしいぞ
オープンソースのゲームエンジン作ろうぜ

807 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 20:09:17.45 ID:eU/9mgQ6]
>>806
今は実績ないとsdkテスターに選ばれない
春には一般公開したいらしいけど

808 名前:名前は開発中のものです。 mailto:sage [2011/12/17(土) 20:10:14.43 ID:eU/9mgQ6]
>>806
あとクローズドベータだから、オープンソースのエンジンは今作っても公開したらアウトじゃないかな

809 名前:名前は開発中のものです。 mailto:sage [2011/12/22(木) 18:19:56.58 ID:QLY5TpmG]
Unity本を読んだんだが、これぐらいなら自分で作れそうじゃないか?
難しいことは何もやってない。誰かLinux用でびしっと1本頼むわ


810 名前:名前は開発中のものです。 mailto:sage [2011/12/23(金) 13:12:06.44 ID:aClvGxeW]
Linux用にも色々あるが?



811 名前:名前は開発中のものです。 mailto:sage [2011/12/25(日) 12:18:51.70 ID:J72y1Vqi]
pss sdkのテスター選考緩くなったみたい。
週末はTwitterで国内外の色々な人から当選報告が出てた。
まだvitaでは動かないらしいです。

自分も休み明けからさわりはじめてみます。

812 名前:名前は開発中のものです。 mailto:sage [2011/12/26(月) 23:20:36.53 ID:kV2ypsgu]
英語わからなくても使える物理エンジンってあったら教えて

813 名前:名前は開発中のものです。 mailto:sage [2011/12/27(火) 05:36:32.08 ID:1KH7psDJ]
ソースコードが読めるんなら、全部オッケーじゃないのかw
それ以前にソースコートって大抵英語のような…


814 名前:名前は開発中のものです。 mailto:sage [2011/12/27(火) 09:59:50.24 ID:YTwtk8zf]
>811
あれ俺のところにはまだ当選メール来てないけど
困るなあちゃんと配送してくれないと(´;ω;`)

815 名前:名前は開発中のものです。 mailto:sage [2011/12/27(火) 23:46:55.10 ID:Dx89yn0s]
>>814
フォーラムでは2Dスプライトを簡単に扱いたいみたいな話があちこちであがってるので、ほぼまともにGL触ったことないと思われる人ま選ばれてると思う。だから審査は厳しくないはず。気長に待てばよろし。

無理矢理このスレに絡めると、2Dゲームエンジンは需要あり


816 名前:名前は開発中のものです。 mailto:sage [2011/12/27(火) 23:47:51.31 ID:Dx89yn0s]
訂正
>人ま
人まで

817 名前:名前は開発中のものです。 mailto:sage [2011/12/28(水) 01:04:02.80 ID:xDqb+NSK]
OpenGLを素で扱うということは、ゲームエンジンよりもライブラリに近い感じなのかな。
Unityが使えるという噂もあったけど、そんなこともなかったようだ。

818 名前:名前は開発中のものです。 mailto:sage [2011/12/28(水) 01:59:06.00 ID:XyaxT+Qm]
OpenGLを素で使うといことは三角形や線を塗りつぶして行く感覚だよ。

819 名前:名前は開発中のものです。 mailto:sage [2011/12/28(水) 09:41:02.21 ID:Lmdfg00J]
>>817
ちょこっとだけラップされてる。
既存コードから流用しにくくなった気もするが、新規コードを起こす分には平気。外部の既存エンジンに頼るつもりの人は南無。

あとプログラマブルシェーダが使えるには使えるんだが、そっちかよ!って突っ込むと思う。

820 名前:名前は開発中のものです。 [2012/02/28(火) 21:15:40.02 ID:0+YFP2RK]
俺達でUnityを丸パクリしたゲームエンジンをC#で作らないか!!
PSS用にどうよ?




821 名前:名前は開発中のものです。 mailto:sage [2012/02/28(火) 21:27:33.60 ID:0+YFP2RK]
>>817
Wikipediaに書いてあったが何とかライセンスを結ぶとUnity for VITAが使えるらしいぞ。スクエニが使っているらしい
でもそれはPSSとは何の関係もない話。あくまでUnityのVita用バイナリ
PSSで使おうと思ったら全部C#で書かれたフリーのゲームエンジンが必要
.Net/XNA/WindowsようはいくつかあるけどPSSで動くように移植するのは手間か?
どうせなら俺達で1から作らないか! Unityみたいなの!!



822 名前:名前は開発中のものです。 mailto:sage [2012/03/02(金) 08:19:42.66 ID:cyOaKk/w]
>>820
sdk内に3D物理関係の機能が無い。
こんなんマネージコードで実装して実用レベルになるんだろうか。

823 名前:名前は開発中のものです。 mailto:sage [2012/03/02(金) 08:53:54.73 ID:CmQt3f/n]
ならないんじゃね、と思うがよくわからん
NVIDIAも絡んでるみたいだし、そのうちPhysiXが使えるようになると期待
PSSがこの先生きのこるには

824 名前:名前は開発中のものです。 mailto:sage [2012/03/02(金) 11:44:15.63 ID:YYwIDnHv]
至れり尽くせりにするとアマチュアとの差がなくなるからパフォーマンスが出ないように

825 名前:名前は開発中のものです。 mailto:sage [2012/03/03(土) 11:22:52.95 ID:OcHynySh]
クタたんちーーーっす
まともなシステムを提供できないハード屋の言い訳だったよな結局


826 名前:名前は開発中のものです。 mailto:sage [2012/04/24(火) 12:23:16.39 ID:CGjbqOQ2]
シェーダーで使うパラメーターって
直接Uniform変数としてセットするか
一回シーングラフの要素にしてからUniform変数にセットするのか
どちらでしょうか。具体的には
(1)SetUniform("DiffuseColor", 0xff7c7c7c)みたいな形か
Materil.DiffuseColorみたいなクラスをシーングラフに作って
(2)BindUniform(Material, "DiffuseColor");
みたいな形でしょうか

827 名前:名前は開発中のものです。 mailto:sage [2012/04/26(木) 23:26:21.89 ID:A2k6P93r]
>>826
何の話か全くわからん。


828 名前:826 mailto:sage [2012/04/27(金) 02:00:43.59 ID:s88IsWZj]
わかりにくくてすみません
ある描画ライブラリの仕様が(1)のSetUniform()形式です
シーングラフのオブジェクトのパラメーターを自分でGet()してSet()してね毎ターン、
というスタンスなのですが、どうもこれが気に入らない。
エンジンの人間ではなくゲーム本体を作っている人間が
毎フレームシェーダーに送る定数をGet()してSet()しなければならないのがまずおかしい。
シーンの描画は最終的には
Graphics3D.Render (scene);
のように1行で描画できるべきで、シーンの構築が不完全と言わざるを得ない。



829 名前:826 mailto:sage [2012/04/27(金) 02:07:30.65 ID:s88IsWZj]
具体的には、
1) シーンのノードは自由に継承してユーザー独自のノードを作れる
2) そのパラメーターの名前は自由に決められる
3) そのパラメーターをシェーダーに送るように設定できる(bind)
4) それらのパラメーターをシーン全体で一発更新できる(refresh)
という仕様に変更しようと思うのですが、元の仕様とは大分変えないと実装できなくて
世の中の人間はもしかして元の仕様のほうがいいのか、私の考えが間違えているのかとか
いろいろ悩んでます。
やっぱりシーンの構築が終わったらRender(scene)一発で描画できたほうがいいですよね?

830 名前:名前は開発中のものです。 [2012/05/08(火) 16:37:47.58 ID:ZnS759Md]
過疎スレですが質問させて下さい
シャドーマップを作る時のZレンダリングのパスでは
設定されているシェーダーではなく共通のシャドーマップ生成シェーダーを使うと思うのですが、
これは例えばMeshオブジェクトには複数のシェーダーをセットしてパスによって切り替えるのでしょうか
それとも設定されたシェーダーは無視して強制的にこのシェーダーを使って描画しろみたいな仕組みがあるのでしょうか









831 名前:名前は開発中のものです。 mailto:sage [2012/05/08(火) 16:47:49.27 ID:t0hk3c7e]
SDL1.3っていつ出す予定なんだろ

832 名前:名前は開発中のものです。 mailto:sage [2012/05/11(金) 23:39:09.14 ID:suo5RzJ8]
SFMLに移った方が良いかもね

833 名前:名前は開発中のものです。 mailto:sage [2012/05/12(土) 06:04:11.95 ID:j7glUpjZ]
SDL1.3からライセンス変わるのか

834 名前:名前は開発中のものです。 mailto:sage [2012/05/12(土) 11:15:18.30 ID:dh+2Cdpr]
>>832でSFMLってのを初めて知った。

835 名前:名前は開発中のものです。 mailto:sage [2012/05/12(土) 15:46:01.79 ID:t1/k5I6d]
そんな事より>>830を誰か頼む
一応今の予定では強制シェーダー描画モードを搭載する予定だ

836 名前:名前は開発中のものです。 mailto:sage [2012/05/27(日) 18:59:39.99 ID:Y4NWpX9P]
関連スレのタスクシステム総合スレが死んだな...
logsoku.com/thread/toro.2ch.net/gamedev/1285930493/

837 名前:名前は開発中のものです。 mailto:sage [2012/05/28(月) 00:56:51.34 ID:u1bjFmUz]
ここも過疎スレ
誰かゲームエンジン作れよう

838 名前:名前は開発中のものです。 mailto:sage [2012/05/31(木) 16:06:02.52 ID:pvRLoXCp]
タスクシステムが逝ったか・・・。
まあ、ゲーム製作スレ四天王の中でも最弱な面汚しだからな!

839 名前:名前は開発中のものです。 mailto:sage [2012/05/31(木) 16:17:08.24 ID:qv7/wZ3v]
残ってる四天王教えてくれ

840 名前:名前は開発中のものです。 mailto:sage [2012/05/31(木) 22:53:49.74 ID:acleENic]
最強

   __(^^) <ペイピッポォ
  /__ \ 
  | |   |  |
  (_) (__)



841 名前:名前は開発中のものです。 mailto:sage [2012/06/01(金) 09:40:35.93 ID:HPWeBJvF]
エターナル4天王

・ゲームエンジン総合
・タスクシステム総合
・Unity総合
・ゲーム制作メンバー募集

842 名前:名前は開発中のものです。 mailto:sage [2012/06/08(金) 18:09:45.18 ID:BfK68cYV]
>>837
エンジンなら腐るほどあるだろうに
UnityみたいなエンジンならUnityで十分

既成概念を超えるアイデアがない限り無駄

843 名前:名前は開発中のものです。 mailto:sage [2012/06/08(金) 19:28:08.54 ID:IjypruKw]
夢がないね

844 名前:名前は開発中のものです。 mailto:sage [2012/06/08(金) 19:44:30.73 ID:Sx3NhmAP]
先の無い夢に人生を賭ける馬鹿は死ぬ

845 名前:名前は開発中のものです。 mailto:sage [2012/06/08(金) 22:12:20.58 ID:FXgS0hSf]
いろいろググって廃れたフォーラム覗いたときに
トピックの返信が一桁、二桁だらけなのを見ると悲しくなるな
やっぱりある程度のユーザー数がないとモチベが切れちゃうんだろうね

846 名前:名前は開発中のものです。 mailto:sage [2012/06/11(月) 10:17:08.48 ID:mg7RVjtw]
エンジンよりフレームワーク書いたほうがいい
実装は既存のエンジンで

847 名前:名前は開発中のものです。 mailto:sage [2012/06/11(月) 16:41:14.83 ID:QQ2wAZcB]
グダグダ言うよりまず物を作れとあれほど言ってるのに・・・

848 名前:名前は開発中のものです。 mailto:sage [2012/06/14(木) 15:09:50.58 ID:P1eAlaUs]
Ogre3DとIrrlichtとOpenScenGraphを調べたんだけど、どれも酷いね
有名なライブラリだから期待してたんだけど使い物にならない
Ogre3Dはシェーダー周りが独特で見るも無残なできだし、
Irrlichtはまだましだが目が潰れるぐらい汚らしい
この2つは論外。OpenSceneGraphはかろうじて合格
それでも固定シェーダー時代の名残なのかシェーダー時代のエンジンとしては使えないだろう

結論は俺が作ったほうがまし

849 名前:名前は開発中のものです。 mailto:sage [2012/06/14(木) 16:03:23.05 ID:rpEq0sqK]
早く作ってオープンソースで公開してね^^

850 名前: ◆qSKP3eYtY6 mailto:sage [2012/06/26(火) 21:59:31.92 ID:mR6HJejQ]
よーし、パパゲームエンジン作っちゃうぞー

C#, .Net, OpenGL環境(だけどPSMとかに移植可)
シーングラフ、アニメーション、シェーダー、スケレタルアニメーション、コリジョン検出など
今日からここが俺の日記帳だ!



851 名前:名前は開発中のものです。 mailto:sage [2012/06/27(水) 09:58:10.93 ID:U29IMiHf]
やったー!

852 名前: ◆qSKP3eYtY6 mailto:sage [2012/06/28(木) 16:15:23.72 ID:WtTC5o4X]
シーングラフは「ノード ー コンポーネント」モデルとする
造語だけどUnityみたいな形といえばわかりやすい
3D空間上の1点が1ノードで、そこに色々な機能を持ったコンポーネントをアタッチして使うのが基本

Predicateで指定した条件が一致するノードを探すFind, FindAllと
指定のコンポーネント型を探すFind<TComp>, FindAll<TComp>がある
子ノードをたどってActionを実行するTakeもある
あとはSendMessage()で関数名(string)を指定してコンポーネントの関数を呼び出せる

ざっくりとガワだけ書くとこんな感じ
dl.dropbox.com/u/32901747/DDD/DDD-20120628.chm
(セキュリティ警告を外さないと見られないかも)




853 名前: ◆qSKP3eYtY6 mailto:sage [2012/06/29(金) 15:09:28.16 ID:KafWz+Or]
DDDのクラスは単一のObjectクラスを継承する(標準のObject)とは別
このObjectクラスにはUniqueID, UserID, UserObject等を含むがおもしくも何ともない話なので省略
Objectクラスの一番重要なのはアニメーション機能。
DDDではAnimationTrackを1基本アニメーション単位とする
このアニメーションを任意のプロパティ(Setter必要)にセットすると準備完了
Animate()関数の呼び出しで値が書き換わる
これはノードのアルファ値を書き換えている例

node.AddAnimationTrack (anim, () => node.Alpha);

第2引数が珍しい形だが、これがC#で最も簡単にプロパティを指定する方法
型はExpression<Func<T>>だが特に気にする必要はない



854 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/01(日) 20:59:13.49 ID:KktJ7lkD]
アニメーションは「値型でSetter/Getterを持ったプロパティ」なら何でもセットできるようにする
この辺はC#の機能をフルに使っている
クラス的にはKeyframeSequence<T>とAnimationTrackが存在し、
複数のAnimationTrackをAnimationClipが管理する(再生速度などはこのクラス)
歩くとか走るはこのClipが相当する
Clipを差し替える時は特に仕組みを用意してないが(全てのTrackを手動で切り離すことになる)
この辺は考慮中。あるいは
node.AddAnimationTrack()ではなくnode.AddAnimationClip()でクリップ単位でアニメーションをセットしたほうがいいのかもしれない。





855 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/02(月) 17:22:25.28 ID:PZRbc+vH]
MathパッケージにはVector2,3,4, Matrix3x3, 4x4, Quaternionが含まれる
すべてC#の構造体を使って実装される
これらの構造体はプロパティとしてアニメーションを付加されたりUniform変数としてシェーダーにエクスポートされる
特徴は次の2つ
(1) 構造体は不変量とする
 どうしようかずいぶん迷ったがこれらの構造体は不変量、つまりnewした後は一切変更できない事にした。
 不便そうだが直感に反してそうでもない。いちいち計算のたびに新しい構造体を作るがコストは安い。
(2) 必ずプロパティ(ComponentCount)と添え字演算子([])を実装する。これはエクスポートする時に必要となる

Vector2,3,4は1つにまとめてもいいが、今回はタイプセーフを優先して別クラス
座標系はOpenGLと同じ右手系でV=MVの形.

 



856 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/03(火) 19:49:13.53 ID:WXHikQCo]
>>853
node.AddAniamationTrack()ではなくnode.AddAnimationClip()に変更
クリップ単位でセットすることにした。理由はその方が簡単
開発マシンをSSDにしてたら一日消えたんだぜ。まじ呪うMicrosoft

857 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/04(水) 10:25:33.70 ID:ZninQWD9]
Uniform変数の実装について。
今現在よくある実装はSahderProgramやVertexBufferみたいなクラスに
いきなり値をSetUniform("Alpha", 1.0f)みたいに突っ込むがこれは良くない習慣だと思っている
(1) この関数を呼んだ時に値がセットされるので毎フレームOnDraw()の中で呼ぶ必要がある
(2) 毎回呼ぶので依存関係がわかりにくい。

DDDでは「データ構造と操作の分離」を基本思想としているので、以下のように実装しようと思う
ShaderArrayクラス。使用するUniform変数の情報を保存するコンテナクラス
AddUniform(name, object, property)でどのオブジェクトのどのプロパティをどの変数でエクスポートするかセットする
この段階ではまだ値はセットされず、後のRender()関数内部でこの情報に従って値がセットされる(データ構造と操作の分離)

※ 型とサイズ(vec2,3,4)はシェーダーをコンパイルした時に判定するのでここでは必要ない
※ Uniform変数の配列は当面なし。どう実装すべきか良いアイディアがない







858 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/04(水) 14:35:40.37 ID:ZninQWD9]
ShaderProgramについて
シェーダーはShaderProgram1つで全て賄う(FragShader, VertShaderはなし)
クラス名を可能な限り少なくするのがDDDの思想
DDDはHWに依存しないのでコンパイルとリンクはRender()まで行われない(というかできない)
定義されたAttribute変数とUniform変数を列挙する列挙しがある。型はIEnumerable<ShaderVariable>.
ShaderVariableは>>857>>858の両方で使用する
これもやはり「クラス数を可能な限り少なくする」ため

シェーダーで定義された変数名と型を調べてそれが>>857でセットした一覧にあればそのオブジェクトとプロパティから値を拾ってきてエクスポートする事になる






859 名前:名前は開発中のものです。 mailto:sage [2012/07/04(水) 14:40:27.10 ID:ZninQWD9]
シェーダーにエクスポート出来る変数はIExportableインターフェースとして明確化した
ComponentCountとValueTypeを返す添字演算子を持つ
よく考えるとIExportableはIAnimatableでもあるわけだが・・・


860 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/04(水) 16:27:05.51 ID:ZninQWD9]
ある意味もっとお世話になるMesh周りはこうしようと思う

Mesh
 VertexBuffer
 IndexBuffer(s)
 Appearance(s)
   ShaderProgram
   UniformArray(s)
   Texture(s)
   Material
   PolygonMode,BlendMode,PointSpriteMode

(s)が付いているのは複数。IndexBufferとAppearanceが複数なのはサブメッシュ。
見え方は「Appearance」が担当する。
Appearanceは1つのShaderProgramとそこで使用するUniform変数のセット。あとTextureとMaterial。
Materialはユーザーがシェーダーに渡すパラメーターをセットしたObjectを置いておくためのプレースホルダー。Materialクラスは完全に空でユーザーが継承して使用する。
>>857の理由によりUniform変数には直接値をセットしない事に注意。
かならず値を取ってくる元になるObjectのプロパティがなければならない。
あとのPolygonMode, BlendMode, PointSpriteModeはシェーダーから触れないOpenGLの機能を変更するためのつまらないクラス
ポイントスプライトとは独立したノードではなくMeshクラスを使用する。








861 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/05(木) 14:00:11.24 ID:flNlSeDp]
VertexBufferとIndexBuffer
バーテックス・バッファーはAttribute変数として送られる頂点ごとのデータのバッファー(x,y,z, 法線, テクスチャー座標など)
インデックス・バッファーはglDrawElement()で使うインデックス。
この辺のデータ構造はライブラリによって異なるが、どの方式が有利とかは多分無い
DDDではMeshの下にVertexBufferx1とIndexBufferxnを持つ
生の頂点データはVertexArray<T>クラスが保存する
これはそのままglBufferData()でGPUに送り込める形そのもの
操作は非ジェネリックな同名のVertexArrayを通して行う
IndexBufferは本当にintの配列をどかんと持っているだけ
やはりそのままglBufferData()でGPUに転送する




862 名前:名前は開発中のものです。 mailto:sage [2012/07/05(木) 14:05:32.16 ID:flNlSeDp]
描画できるプリミティブについて

トライアングル、ライン、ポイントスプライトの「リスト」形式のみ「ストリップ」には対応しない
これは現在のGPUではリスト形式を使ったほうが高速で、あえてストリップ形式を使う理由がないため
シンプルである事を価値とするので複数の手段は提供したくない
インデックスを指定する時にリスト形式だと冗長なのでストリップ形式でも指定できるようにしようかとも考えたが
上記の理由でバッサリ削除
この辺は異論も出そうだが実際に作っている人の裁量の範囲ないということで

863 名前:名前は開発中のものです。 mailto:sage [2012/07/05(木) 14:08:25.82 ID:cRpEW0yx]
あれ
インデックスは32bit限定?
ushort版はなし??

864 名前:名前は開発中のものです。 mailto:sage [2012/07/05(木) 16:20:07.98 ID:2Z2qwIZw]
これってこの部分を実装しましたという報告なのか、これからやりますなのか

865 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/05(木) 16:37:17.91 ID:flNlSeDp]
>>862
intあればいいと思ったけど対称性悪いからIndexBuffer<T>にしといた
今の所ジェネリックなのはVertexArray<T>とIndexBuffer<T>とKeyframeSequence<T>
全部同名の非ジェネリック版ばあって操作はそちらから行う




866 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/05(木) 16:40:06.48 ID:flNlSeDp]
>>864
今の所ガワ(API)だけ実装してある。中身はすっからかん
必要なフィールドとかは置いてあるので実装はそんなに苦労しないはず
それでも月単位で必要だけど



867 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/05(木) 16:49:34.85 ID:flNlSeDp]
テクスチャーまわり

Image2DとTexture2D, TextureCube。あと基底クラスのTexture.
画像のロードは.NetのSystem.Drawingにやってもらう。
データの入力形式としては.NetのBitmapかbyte[].
フォーマットはLuminance, Alpha, LuminanceAlpha, RGB, RGB.
パック形式のRGB565, RGB5551はとりあえず対応しない。S3とかも対応しない
リピートはClampとRepeat. テクスチャー関数というかDecal, Modulteなどはシェーダー内部の話なのでここでは出てこない
あとテクスチャークラスに直接画像をロードするライブラリもあるけど今回は1クッション(Image2D)を置く



868 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/05(木) 17:22:59.32 ID:flNlSeDp]
テクスチャーについて1つ注意点がある
通常CPU側にはTexture2Dクラスがあって、シェーダー側からアクセスする時は「テクスチャーユニット番号」を使用する
何番のユニットにロードされたかはTexuture2Dクラスの知る所ではなく、そのプロパティとしてテクスチャー番号を取得できない
(1つのTexuture2Dが別のユニットにセットされる事はあり得る)
従ってこれはAppearanceクラスの仕事(プロパティ)になる。
が、これは明らかにおかしくて本来はTexuture2Dクラスをシェーダー側のテクスチャー変数何とかにバインドするのが自然である
(ただしそれは上記の理由により不可能)

ではどうするか?
Texture2Dは同じ番号のユニットにロードされなければならないという制限を科す。
この制限のもとでTexture2D.TexturUnitでユニット番号が取れるようにすれば、
シェーダー側にユニット番号を自然な形でエクスポートする事ができる




869 名前:名前は開発中のものです。 mailto:sage [2012/07/05(木) 19:13:16.47 ID:gC4tIXCC]
svnかgitを使って公開して欲しいなぁ

870 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/06(金) 14:05:57.42 ID:FBQYllXg]
>>869
してる。けどまだ見る価値はない



871 名前:名前は開発中のものです。 mailto:sage [2012/07/06(金) 14:11:27.57 ID:FBQYllXg]
BoundingVolume(BV)

BVは球かボックスで、カリング、ピッキング、LODで使われる。
コリジョン検出は別の専用のCollisionVolumeを用意する
たぶん珍しい形だと思うけどBVは独立したクラスにせずNodeの単なるパラメーターとする
BVはユーザー定義のBVと、シーンをフリーズ(後述)した際に自動で作られるBV階層のBVに分かれる






872 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/06(金) 14:17:53.88 ID:FBQYllXg]
BVを使ったピッキングその1

var nodes = from n in world
       let ri = n.Intersect (ray)
       where ri.Hit
       orderby ri.Distance
       select new {Node=n, Intersection=ri};
var nearest = nodes.FirstOrDefault();

説明の必要がないぐらいソースを見れば何をやっているか明確、しかも汎用的でピッキング以外もOK
(自分で作る理由の1つがこれ)
欠点は全ノードに対して交差判定をとるので遅い事
LINQ構文はデータベースをモデルにしているので全件検索になってしまう


873 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/06(金) 14:28:22.79 ID:FBQYllXg]
BVを使ったピッキングその2

float minDistance = Float.Max;
Node nearest = null;

world.Take ( n => {
   var ri = n.Intersect2 (ray);
   if (ri.Hit) {
     if (ri.Distance < minDistance) {
       nearest = n;
       minDistance = ri.Distance;
     }
     return true;
   }
   return false;
 })

前回のLINQ構文を使ったピッキングと異なりBV階層を利用してルートから交差判定を行いヒットしなければアーリーリタイア(return false)を行う
TakeはFunction<Node, bool>を引数にとり戻り値がtrueの限り再帰的に呼び出しを行うメソッド
BV階層を利用するのでシーンをフリーズしないと使えないけど速い


874 名前:名前は開発中のものです。 mailto:sage [2012/07/06(金) 14:40:43.77 ID:FBQYllXg]
シーンをトラバースしてある処理行うメソッドはいくつか用意する予定(詳細は決めてない)

IEnumerable<Node> Search (Predicate<Node> func)
 => 指定の述語(Predicate)に一致するノードを列挙する

void Take (Action<Node> func)
 => 全ノードに対してActionを実行する

void Take (Func<Node, bool> func)
 => 全ノードに対してtrueを返す限りFuncを実行する

これらのジェネリックデリゲートを使った構文はシーンのトラバース以外にも使用する予定
処理結果を受け取りたいはクロージャーが使える(ラムダ式からラムダ式を呼び出す関数のローカル変数にアクセスできる)ので
ほとんど全ての処理が記述できる



875 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/09(月) 10:44:15.40 ID:HsBojE2t]
シーンのフリーズとOnUpdate()

昨日までうっかり勘違いしていたがシーンのノードのOnUpdate()の呼び出しは
シーンを上からトラバースするのではなくPriorityの順。
従ってOnUpdate()は再帰関数ではなく単発の普通の関数
コンポーネントの呼び出しは入れた順

順不同で呼び出されるのでモデルtoワールド行列とかキャッシュするためにもシーンのフリーズが必要
どのみちコリジョン(k-DOP)のワールド座標でパラメーターのキャッシュにも必要
フリーズしたら変更を伴う操作は一切受け付けなくなる



876 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/09(月) 13:29:08.22 ID:HsBojE2t]
ライト

固定時代のライトは独立したノードだったが、シェーダー時代ではライトは単なるUniform変数の1つに過ぎない
さらにDeffered Shadingにおいてはライトはメッシュと同様にGPUに頂点データを送って
(計算済みのBGufferからパラメーターを拾ってきて)レンダリングするだけの存在である
従ってDDDにおいてLightは本当に単なるMeshの別名である
using Light = Mesh;
マテリアルは専用のLightMaterialが用意されていてシェーダーにエクスポートするColorやAttenuationはここで定義されている。





877 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/10(火) 10:10:18.98 ID:0DNkleuf]
アニメーションイベントの設定
アニメーションクリップの指定の時刻を再生した時に任意のコールバック関数を呼び出すことが出来る
コールバック関数はdelegate void AnimationEventHandler(Node node, object args)型で
clip.AddEvent(time, name, handler, args)で登録する。追加情報としてobject型の引数を1つだけ指定できて使い方は任意
ハンドラーの第1引数はクリップではなくクリップがセットされたNode
(利便性を考えてこうなっているが深い階層でセットされるとNodeまでたどるのが大変なのでこの仕様は変更する可能性がある)
1つのクリップが複数のターゲットにセットされていた場合、コールバック関数は複数回呼ばれる。

コールバック関数の呼ばれるタイミングはゲームエンジンによって異なるが、
Animate(time)の中で値を変更しイベントを発火させると1つの処理単位としては内容が大きすぎる(と思う)
「シンプルであること」が価値と考えるDDDではこれを分割してRaise(start, end)とする。
Raise()は時刻(start,end]までに起こりうるイベントを全て呼び出す関数
通常start=time-Δt, end=timeで前フレームから現在のフレームまでに起こるイベントを発火させる




878 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/10(火) 11:12:38.45 ID:0DNkleuf]
SkinnedMeshの実装

スケレタルアニメーション用にボーンを仕込んだメッシュの実装
このクラスのやるべき事は実は多くない。ボーン行列の計算とGPUへの転送だけである
ボーンはただのNodeで表し特別なクラスは作らない。
SetBones(Node[])したタイミングでボーン行列(=バインドポーズの逆行列)を計算し
プロパティIEnumerable<Matrix4x4> BoneMatricesで取得する
ボーンインデックスはこのNode[]のインデックスそのもの。
このプロパティは配列型で定義されたUniform変数に送られる
インデックスとウェイトはAttribute変数として頂点単位で送られる

ボーンの変形は「トランスフォームステージ」でユーザーがシェーダーの中で行い結果は一回書き戻す予定
OpenGLのTransofrm Feedback Buffer機能を使う予定だが、まだ詳細を詰め切れていない


879 名前:名前は開発中のものです。 mailto:sage [2012/07/10(火) 11:23:23.33 ID:0DNkleuf]
配列型のプロパティ

BoneMatricesプロパティは意外とこれが熟考が必要で、

(1) 配列型
 IEnumerable<T>のプロパティを配列型とみなす
(2) アニメーション可能
 アニメーショントラックは同名のトラックをクリップにAddTracks()で一括登録する
 アニメーション対象がIEnumerable<T>を実装したプロパティの場合は同名のトラックが連続して存在するものと期待して長さ分適応する
(2) GPUにエクスポート可能
 シェーダーが配列型のUniform変数を要求している時はそのまま列挙してセットすればOK。

でいけるはず。基本的には配列型のプロパティは例外。
多分ここにしか出てこないはず・・・



880 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/10(火) 14:29:56.51 ID:0DNkleuf]
1つ迷っているのがトランスフォームシェーダーをどうやって供給すればいいかという事
今考えているのはレンダリング時に強制的にシェーダーを切り替えて実行する案
トランスフォームシェーダーは全メッシュで共通なのでこれで十分だと思われる
シルエットで描画したいとか一時的にシェーダー(というかアピアランス)を切り替えて描画するのは理にかなっていると思う
この辺実はあまり調査して無くて他のゲームエンジンがどうやってるのかよく知らね



881 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/10(火) 15:34:37.39 ID:0DNkleuf]
MorphMesh
モーフィングは特に難しい処理はない。ベースのVertexBufferと同じ型のVertexBuuferをウェイトをかけて足すだけ
すべてCPU処理。ApplyMorphing()でベースのVertexBufferは上書きされるがデータ自体は置いておく必要がある(nullでは駄目)




882 名前: ◆qSKP3eYtY6 mailto:sage [2012/07/11(水) 10:01:05.26 ID:75j/QepR]
CollisonVolume
物理エンジンが組み込まれているわけではないので勝手に動いてぶつかり合うわけではない
設定したコリジョン領域同士がオーバーラップしたら指定のコールバック関数(OnCollision)が呼ばれる
CollisionVolume(CV)はコンポーネントの1種でNodeにアタッチするとコリジョン物体として振る舞うようになる

CVはk-DOP(k=26)を使う。k=26はAABB(6)にコーナカット(8)、エッジカット(12)を足したもの(6+8+12=26)
メリットは比較が速い(なにせ最大でも単なるfloatの大小比較26回だ)。デメリットは座標変換(とても重い)。
比較の座標系は常にグローバル座標を使う。必ずしも全てのケースでベストではないが気にしない
シーンをフリーズしたタイミングで(グローバル座標に変換した)CV階層をボトムアップで作成しキャッシュする
シーンをフリーズするのはこの為という意味が強い。
コンポーネントの方のCVはユーザー定義のローカルCVで、ノードの方のCVはの自動生成のグローバルなCV

オーバーラップしていればvirtual OnCollision(Collision )が呼ばれる。引数はコリジョンの発生した位置、法線、ノード
タイミングは後述のPhysics3D.Collide (world).










[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef