ゲームエンジン総合スレ★2
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名前は開発中のものです。
2011/02/01(火) 16:58:30ID:Fc0ojZalゲームエンジンに関係ない話は該当スレか雑談スレでどうぞ。
総合発表&雑談スレッド その3
http://hibari.2ch.net/test/read.cgi/gamedev/1216633635/
※前スレ
http://hibari.2ch.net/test/read.cgi/gamedev/1293381827/
0827名前は開発中のものです。
2012/04/26(木) 23:26:21.89ID:A2k6P93r何の話か全くわからん。
0828826
2012/04/27(金) 02:00:43.59ID:s88IsWZjある描画ライブラリの仕様が(1)のSetUniform()形式です
シーングラフのオブジェクトのパラメーターを自分でGet()してSet()してね毎ターン、
というスタンスなのですが、どうもこれが気に入らない。
エンジンの人間ではなくゲーム本体を作っている人間が
毎フレームシェーダーに送る定数をGet()してSet()しなければならないのがまずおかしい。
シーンの描画は最終的には
Graphics3D.Render (scene);
のように1行で描画できるべきで、シーンの構築が不完全と言わざるを得ない。
0829826
2012/04/27(金) 02:07:30.65ID:s88IsWZj1) シーンのノードは自由に継承してユーザー独自のノードを作れる
2) そのパラメーターの名前は自由に決められる
3) そのパラメーターをシェーダーに送るように設定できる(bind)
4) それらのパラメーターをシーン全体で一発更新できる(refresh)
という仕様に変更しようと思うのですが、元の仕様とは大分変えないと実装できなくて
世の中の人間はもしかして元の仕様のほうがいいのか、私の考えが間違えているのかとか
いろいろ悩んでます。
やっぱりシーンの構築が終わったらRender(scene)一発で描画できたほうがいいですよね?
0830名前は開発中のものです。
2012/05/08(火) 16:37:47.58ID:ZnS759Mdシャドーマップを作る時のZレンダリングのパスでは
設定されているシェーダーではなく共通のシャドーマップ生成シェーダーを使うと思うのですが、
これは例えばMeshオブジェクトには複数のシェーダーをセットしてパスによって切り替えるのでしょうか
それとも設定されたシェーダーは無視して強制的にこのシェーダーを使って描画しろみたいな仕組みがあるのでしょうか
0831名前は開発中のものです。
2012/05/08(火) 16:47:49.27ID:t0hk3c7e0832名前は開発中のものです。
2012/05/11(金) 23:39:09.14ID:suo5RzJ80833名前は開発中のものです。
2012/05/12(土) 06:04:11.95ID:j7glUpjZ0834名前は開発中のものです。
2012/05/12(土) 11:15:18.30ID:dh+2Cdpr0835名前は開発中のものです。
2012/05/12(土) 15:46:01.79ID:t1/k5I6d一応今の予定では強制シェーダー描画モードを搭載する予定だ
0836名前は開発中のものです。
2012/05/27(日) 18:59:39.99ID:Y4NWpX9Phttp://logsoku.com/thread/toro.2ch.net/gamedev/1285930493/
0837名前は開発中のものです。
2012/05/28(月) 00:56:51.34ID:u1bjFmUz誰かゲームエンジン作れよう
0838名前は開発中のものです。
2012/05/31(木) 16:06:02.52ID:pvRLoXCpまあ、ゲーム製作スレ四天王の中でも最弱な面汚しだからな!
0839名前は開発中のものです。
2012/05/31(木) 16:17:08.24ID:qv7/wZ3v0840名前は開発中のものです。
2012/05/31(木) 22:53:49.74ID:acleENic__(^^) <ペイピッポォ
/__ \
| | | |
(_) (__)
0841名前は開発中のものです。
2012/06/01(金) 09:40:35.93ID:HPWeBJvF・ゲームエンジン総合
・タスクシステム総合
・Unity総合
・ゲーム制作メンバー募集
0842名前は開発中のものです。
2012/06/08(金) 18:09:45.18ID:BfK68cYVエンジンなら腐るほどあるだろうに
UnityみたいなエンジンならUnityで十分
既成概念を超えるアイデアがない限り無駄
0843名前は開発中のものです。
2012/06/08(金) 19:28:08.54ID:IjypruKw0844名前は開発中のものです。
2012/06/08(金) 19:44:30.73ID:Sx3NhmAP0845名前は開発中のものです。
2012/06/08(金) 22:12:20.58ID:FXgS0hSfトピックの返信が一桁、二桁だらけなのを見ると悲しくなるな
やっぱりある程度のユーザー数がないとモチベが切れちゃうんだろうね
0846名前は開発中のものです。
2012/06/11(月) 10:17:08.48ID:mg7RVjtw実装は既存のエンジンで
0847名前は開発中のものです。
2012/06/11(月) 16:41:14.83ID:QQ2wAZcB0848名前は開発中のものです。
2012/06/14(木) 15:09:50.58ID:P1eAlaUs有名なライブラリだから期待してたんだけど使い物にならない
Ogre3Dはシェーダー周りが独特で見るも無残なできだし、
Irrlichtはまだましだが目が潰れるぐらい汚らしい
この2つは論外。OpenSceneGraphはかろうじて合格
それでも固定シェーダー時代の名残なのかシェーダー時代のエンジンとしては使えないだろう
結論は俺が作ったほうがまし
0849名前は開発中のものです。
2012/06/14(木) 16:03:23.05ID:rpEq0sqKC#, .Net, OpenGL環境(だけどPSMとかに移植可)
シーングラフ、アニメーション、シェーダー、スケレタルアニメーション、コリジョン検出など
今日からここが俺の日記帳だ!
0851名前は開発中のものです。
2012/06/27(水) 09:58:10.93ID:U29IMiHf造語だけどUnityみたいな形といえばわかりやすい
3D空間上の1点が1ノードで、そこに色々な機能を持ったコンポーネントをアタッチして使うのが基本
Predicateで指定した条件が一致するノードを探すFind, FindAllと
指定のコンポーネント型を探すFind<TComp>, FindAll<TComp>がある
子ノードをたどってActionを実行するTakeもある
あとはSendMessage()で関数名(string)を指定してコンポーネントの関数を呼び出せる
ざっくりとガワだけ書くとこんな感じ
http://dl.dropbox.com/u/32901747/DDD/DDD-20120628.chm
(セキュリティ警告を外さないと見られないかも)
このObjectクラスにはUniqueID, UserID, UserObject等を含むがおもしくも何ともない話なので省略
Objectクラスの一番重要なのはアニメーション機能。
DDDではAnimationTrackを1基本アニメーション単位とする
このアニメーションを任意のプロパティ(Setter必要)にセットすると準備完了
Animate()関数の呼び出しで値が書き換わる
これはノードのアルファ値を書き換えている例
node.AddAnimationTrack (anim, () => node.Alpha);
第2引数が珍しい形だが、これがC#で最も簡単にプロパティを指定する方法
型はExpression<Func<T>>だが特に気にする必要はない
この辺はC#の機能をフルに使っている
クラス的にはKeyframeSequence<T>とAnimationTrackが存在し、
複数のAnimationTrackをAnimationClipが管理する(再生速度などはこのクラス)
歩くとか走るはこのClipが相当する
Clipを差し替える時は特に仕組みを用意してないが(全てのTrackを手動で切り離すことになる)
この辺は考慮中。あるいは
node.AddAnimationTrack()ではなくnode.AddAnimationClip()でクリップ単位でアニメーションをセットしたほうがいいのかもしれない。
すべてC#の構造体を使って実装される
これらの構造体はプロパティとしてアニメーションを付加されたりUniform変数としてシェーダーにエクスポートされる
特徴は次の2つ
(1) 構造体は不変量とする
どうしようかずいぶん迷ったがこれらの構造体は不変量、つまりnewした後は一切変更できない事にした。
不便そうだが直感に反してそうでもない。いちいち計算のたびに新しい構造体を作るがコストは安い。
(2) 必ずプロパティ(ComponentCount)と添え字演算子([])を実装する。これはエクスポートする時に必要となる
Vector2,3,4は1つにまとめてもいいが、今回はタイプセーフを優先して別クラス
座標系はOpenGLと同じ右手系でV=MVの形.
node.AddAniamationTrack()ではなくnode.AddAnimationClip()に変更
クリップ単位でセットすることにした。理由はその方が簡単
開発マシンをSSDにしてたら一日消えたんだぜ。まじ呪うMicrosoft
今現在よくある実装はSahderProgramやVertexBufferみたいなクラスに
いきなり値をSetUniform("Alpha", 1.0f)みたいに突っ込むがこれは良くない習慣だと思っている
(1) この関数を呼んだ時に値がセットされるので毎フレームOnDraw()の中で呼ぶ必要がある
(2) 毎回呼ぶので依存関係がわかりにくい。
DDDでは「データ構造と操作の分離」を基本思想としているので、以下のように実装しようと思う
ShaderArrayクラス。使用するUniform変数の情報を保存するコンテナクラス
AddUniform(name, object, property)でどのオブジェクトのどのプロパティをどの変数でエクスポートするかセットする
この段階ではまだ値はセットされず、後のRender()関数内部でこの情報に従って値がセットされる(データ構造と操作の分離)
※ 型とサイズ(vec2,3,4)はシェーダーをコンパイルした時に判定するのでここでは必要ない
※ Uniform変数の配列は当面なし。どう実装すべきか良いアイディアがない
シェーダーはShaderProgram1つで全て賄う(FragShader, VertShaderはなし)
クラス名を可能な限り少なくするのがDDDの思想
DDDはHWに依存しないのでコンパイルとリンクはRender()まで行われない(というかできない)
定義されたAttribute変数とUniform変数を列挙する列挙しがある。型はIEnumerable<ShaderVariable>.
ShaderVariableは>>857と>>858の両方で使用する
これもやはり「クラス数を可能な限り少なくする」ため
シェーダーで定義された変数名と型を調べてそれが>>857でセットした一覧にあればそのオブジェクトとプロパティから値を拾ってきてエクスポートする事になる
0859名前は開発中のものです。
2012/07/04(水) 14:40:27.10ID:ZninQWD9ComponentCountとValueTypeを返す添字演算子を持つ
よく考えるとIExportableはIAnimatableでもあるわけだが・・・
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クラスを使用する。
バーテックス・バッファーはAttribute変数として送られる頂点ごとのデータのバッファー(x,y,z, 法線, テクスチャー座標など)
インデックス・バッファーはglDrawElement()で使うインデックス。
この辺のデータ構造はライブラリによって異なるが、どの方式が有利とかは多分無い
DDDではMeshの下にVertexBufferx1とIndexBufferxnを持つ
生の頂点データはVertexArray<T>クラスが保存する
これはそのままglBufferData()でGPUに送り込める形そのもの
操作は非ジェネリックな同名のVertexArrayを通して行う
IndexBufferは本当にintの配列をどかんと持っているだけ
やはりそのままglBufferData()でGPUに転送する
0862名前は開発中のものです。
2012/07/05(木) 14:05:32.16ID:flNlSeDpトライアングル、ライン、ポイントスプライトの「リスト」形式のみ「ストリップ」には対応しない
これは現在のGPUではリスト形式を使ったほうが高速で、あえてストリップ形式を使う理由がないため
シンプルである事を価値とするので複数の手段は提供したくない
インデックスを指定する時にリスト形式だと冗長なのでストリップ形式でも指定できるようにしようかとも考えたが
上記の理由でバッサリ削除
この辺は異論も出そうだが実際に作っている人の裁量の範囲ないということで
0863名前は開発中のものです。
2012/07/05(木) 14:08:25.82ID:cRpEW0yxインデックスは32bit限定?
ushort版はなし??
0864名前は開発中のものです。
2012/07/05(木) 16:20:07.98ID:2Z2qwIZwintあればいいと思ったけど対称性悪いからIndexBuffer<T>にしといた
今の所ジェネリックなのはVertexArray<T>とIndexBuffer<T>とKeyframeSequence<T>
全部同名の非ジェネリック版ばあって操作はそちらから行う
今の所ガワ(API)だけ実装してある。中身はすっからかん
必要なフィールドとかは置いてあるので実装はそんなに苦労しないはず
それでも月単位で必要だけど
Image2DとTexture2D, TextureCube。あと基底クラスのTexture.
画像のロードは.NetのSystem.Drawingにやってもらう。
データの入力形式としては.NetのBitmapかbyte[].
フォーマットはLuminance, Alpha, LuminanceAlpha, RGB, RGB.
パック形式のRGB565, RGB5551はとりあえず対応しない。S3とかも対応しない
リピートはClampとRepeat. テクスチャー関数というかDecal, Modulteなどはシェーダー内部の話なのでここでは出てこない
あとテクスチャークラスに直接画像をロードするライブラリもあるけど今回は1クッション(Image2D)を置く
通常CPU側にはTexture2Dクラスがあって、シェーダー側からアクセスする時は「テクスチャーユニット番号」を使用する
何番のユニットにロードされたかはTexuture2Dクラスの知る所ではなく、そのプロパティとしてテクスチャー番号を取得できない
(1つのTexuture2Dが別のユニットにセットされる事はあり得る)
従ってこれはAppearanceクラスの仕事(プロパティ)になる。
が、これは明らかにおかしくて本来はTexuture2Dクラスをシェーダー側のテクスチャー変数何とかにバインドするのが自然である
(ただしそれは上記の理由により不可能)
ではどうするか?
Texture2Dは同じ番号のユニットにロードされなければならないという制限を科す。
この制限のもとでTexture2D.TexturUnitでユニット番号が取れるようにすれば、
シェーダー側にユニット番号を自然な形でエクスポートする事ができる
0869名前は開発中のものです。
2012/07/05(木) 19:13:16.47ID:gC4tIXCCしてる。けどまだ見る価値はない
0871名前は開発中のものです。
2012/07/06(金) 14:11:27.57ID:FBQYllXgBVは球かボックスで、カリング、ピッキング、LODで使われる。
コリジョン検出は別の専用のCollisionVolumeを用意する
たぶん珍しい形だと思うけどBVは独立したクラスにせずNodeの単なるパラメーターとする
BVはユーザー定義のBVと、シーンをフリーズ(後述)した際に自動で作られるBV階層のBVに分かれる
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構文はデータベースをモデルにしているので全件検索になってしまう
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階層を利用するのでシーンをフリーズしないと使えないけど速い
0874名前は開発中のものです。
2012/07/06(金) 14:40:43.77ID:FBQYllXgIEnumerable<Node> Search (Predicate<Node> func)
=> 指定の述語(Predicate)に一致するノードを列挙する
void Take (Action<Node> func)
=> 全ノードに対してActionを実行する
void Take (Func<Node, bool> func)
=> 全ノードに対してtrueを返す限りFuncを実行する
これらのジェネリックデリゲートを使った構文はシーンのトラバース以外にも使用する予定
処理結果を受け取りたいはクロージャーが使える(ラムダ式からラムダ式を呼び出す関数のローカル変数にアクセスできる)ので
ほとんど全ての処理が記述できる
昨日までうっかり勘違いしていたがシーンのノードのOnUpdate()の呼び出しは
シーンを上からトラバースするのではなくPriorityの順。
従ってOnUpdate()は再帰関数ではなく単発の普通の関数
コンポーネントの呼び出しは入れた順
順不同で呼び出されるのでモデルtoワールド行列とかキャッシュするためにもシーンのフリーズが必要
どのみちコリジョン(k-DOP)のワールド座標でパラメーターのキャッシュにも必要
フリーズしたら変更を伴う操作は一切受け付けなくなる
固定時代のライトは独立したノードだったが、シェーダー時代ではライトは単なるUniform変数の1つに過ぎない
さらにDeffered Shadingにおいてはライトはメッシュと同様にGPUに頂点データを送って
(計算済みのBGufferからパラメーターを拾ってきて)レンダリングするだけの存在である
従ってDDDにおいてLightは本当に単なるMeshの別名である
using Light = Mesh;
マテリアルは専用のLightMaterialが用意されていてシェーダーにエクスポートするColorやAttenuationはここで定義されている。
アニメーションクリップの指定の時刻を再生した時に任意のコールバック関数を呼び出すことが出来る
コールバック関数は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で前フレームから現在のフレームまでに起こるイベントを発火させる
スケレタルアニメーション用にボーンを仕込んだメッシュの実装
このクラスのやるべき事は実は多くない。ボーン行列の計算とGPUへの転送だけである
ボーンはただのNodeで表し特別なクラスは作らない。
SetBones(Node[])したタイミングでボーン行列(=バインドポーズの逆行列)を計算し
プロパティIEnumerable<Matrix4x4> BoneMatricesで取得する
ボーンインデックスはこのNode[]のインデックスそのもの。
このプロパティは配列型で定義されたUniform変数に送られる
インデックスとウェイトはAttribute変数として頂点単位で送られる
ボーンの変形は「トランスフォームステージ」でユーザーがシェーダーの中で行い結果は一回書き戻す予定
OpenGLのTransofrm Feedback Buffer機能を使う予定だが、まだ詳細を詰め切れていない
0879名前は開発中のものです。
2012/07/10(火) 11:23:23.33ID:0DNkleufBoneMatricesプロパティは意外とこれが熟考が必要で、
(1) 配列型
IEnumerable<T>のプロパティを配列型とみなす
(2) アニメーション可能
アニメーショントラックは同名のトラックをクリップにAddTracks()で一括登録する
アニメーション対象がIEnumerable<T>を実装したプロパティの場合は同名のトラックが連続して存在するものと期待して長さ分適応する
(2) GPUにエクスポート可能
シェーダーが配列型のUniform変数を要求している時はそのまま列挙してセットすればOK。
でいけるはず。基本的には配列型のプロパティは例外。
多分ここにしか出てこないはず・・・
今考えているのはレンダリング時に強制的にシェーダーを切り替えて実行する案
トランスフォームシェーダーは全メッシュで共通なのでこれで十分だと思われる
シルエットで描画したいとか一時的にシェーダー(というかアピアランス)を切り替えて描画するのは理にかなっていると思う
この辺実はあまり調査して無くて他のゲームエンジンがどうやってるのかよく知らね
モーフィングは特に難しい処理はない。ベースのVertexBufferと同じ型のVertexBuuferをウェイトをかけて足すだけ
すべてCPU処理。ApplyMorphing()でベースのVertexBufferは上書きされるがデータ自体は置いておく必要がある(nullでは駄目)
物理エンジンが組み込まれているわけではないので勝手に動いてぶつかり合うわけではない
設定したコリジョン領域同士がオーバーラップしたら指定のコールバック関数(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).
2つある(.Net環境で定義されていない)プラットフォーム依存クラスの1つ。もう1つはGraphics3D
コリジョンの判定はPhysics3D.Collide(world)で行う。
これがWolrd.Collide()でないのは「シーンはポータブル」という思想を反映している
シーンにプラットフォーム依存の関数が入り込んではいけない
一応Physics3Dは物理エンジンを使用する為の接続口として考えているが、
この辺はまったく調べてないので実はわからん。
当面コリジョン衝突の判定だけ
あとバウンディンブボリューム(BV)も同様にして実装される
やはりコンポーネントの一種。BoxとSphere(and/or)が設定できる
BVはカリング、交差判定(ピッキング)、LODで使用される
コリジョンボリューム(CV)とは何の関係もない
このあたりのボリュームは可視化できるようにして欲しいなあ
という要望は当然あると思うが現状で特に考えてない。
LODは複数の子ノードを持ったノードにアタッチされたLODSelectorが行う
親ノードにアタッチされたBoundingVolume(BV)がLODの基準になる大きさ
AddCandidate(node, resolution)で子ノードとそれを何ピクセルぐらいで表示したいかを決める
例えばノードに(1)メッシュ(2)ビルボード(3)空ノードを100,10,0ピクセルで登録して
World.Select()を呼ぶとスクリーンに投影されたBVのピクセル数に一番近い子ノードのみを有効にする(残りは無効)
詳細レベルの切り替えはフリッカーを起こさないようにヒステリシスを設定できる。
例えば上記の例だとhys=0.1を指定すると10〜10.9、100〜?が遷移領域になる
ブレンドファクターを使って2つの子ノードを合成すべきかとも考えたが、
使わないだろうと判断して見送った。いきなり切り替わる
今ひとつゴチャゴチャしていたので3階層に再編成した。
[1] Object3D
空間上の1点をあらわし座標変換を担当する抽象クラス。TRSMを保存
[2] Attachable
1.にコンポーネントをアタッチできるようにした物。ノード単体処理もここ
[3] Node
2.に親子階層をつけシーングラフを構成できるようにしたもの。再帰的な処理はここ
これですっきり。
デバイスクラス。.Net環境の外の部分
Targetプロパティ:xN RenderToTextureのターゲット最大4枚
〜Enabledプロパティ:機能の有効無効の制御
Selectionプロパティ:delegateでWorldからノードを取り出すLINQ構文の受け取りを想定
RenderPassイベント:delegateでレンダリングパスを記述する
Render()関数:RenderPassで指定したパスを実行する
最大の特徴は「不透明物体のみ取り出してzでソートしてカメラに近い方から描画」という処理を
後でエンジンの外からラムダ式を使って記述し(Selectionプロパティ)、RenderPassイベントに追加して
Render()関数でまとめて実行する事
従来型の記述よりだいぶすっきりと書けてると思う(たぶん)
0888名前は開発中のものです。
2012/07/13(金) 13:35:11.81ID:XkwS8Q4iどう考えてもこのままだとSkinnedMeshが実装できそうにないので再考した
(1) Mesh :静的メッシュ
(2) TransformMesh :TransformFeedbackシェーダーを含むメッシュ
(3) SkinnedMesh :その中でもボーンによる変形を行うトランスフォームメッシュ
(4) MorphMesh :CPUで変形するモーフ
スキンの変形にTranformFeedback(TFB)が必要で
将来的にSoftBodyとかパーティクルも実装可能な汎用クラスを考えてTranformMeshクラスを分離独立
0889名前は開発中のものです。
2012/07/13(金) 19:34:55.20ID:XkwS8Q4i(.Netの範囲外である)描画コードは完全にシーンから分離する
そのためObjectとOpenGLリソース(int)の対応付けが必要になる
最初の案だとキャッシュとしてDictionary<Object, int>を考えていたが、
これだといったんキャッシュに入るとObjectの参照を保持し続けるのでシーン側で用済みになっても
ガーべっじコレクターが永遠に走らない
その都度リリースしてもらうかイベント登録とか考えたがどうもうまくない
そこで考えたのがObjectへの参照はWeakReferenceにしてディクショナリーのキーを
ObjectではなくObjectのハッシュコードに変える案
struct CacheLine {
WeakReference ref;
int resource;
}
Dictionary<int, CacheLine>
弱い参照は残っていてもGCには関係ないので消える。
後は定期的にGraphics3D.GC()を読んでもらえればキャッシュを捜査して
消えた弱い参照を消してOpenGLリソースを開放すれば完璧
0890名前は開発中のものです。
2012/07/17(火) 13:21:14.74ID:ZJ+ZLX+ADoxygenでコメント埋めて抜けてるAPIを精査する
別段面白い作業ではないので一人でひっそりと。
http://dl.dropbox.com/u/32901747/DDD/DokiDokiDynamo-2012731.chm
APIだけ見てもわけわからんと思うが・・・チュートリアルが必要だがそのうち何とかしよう。
一応ページ差し込みができるのは確認した(けどXMLで書かないといけないから書きにくい)
しかし時間かかるねえ・・・
エラー条件等も含めてがっつり書いておきたかったんだけどなかなかどうして進まない
これ以上細部を詰める必要はほとんどない(今の仕様でまず問題ないと考えている)
全部実装するのは年内一杯ぐらいかかると思うけど
とりあえず今月はシーングラフ周りから。というわけでまた月末までお休み
0893名前は開発中のものです。
2012/08/08(水) 14:58:01.15ID:2/6Ybee5win,osx互換、radeon,gf,intel互換、D3D,GL互換、SM2.0無印範囲で動作確認済み
・既存のHWSを改造して頂点色反映とか細々機能追加
・ソフトパーティクル
・FXAAを使えるように移植
・フォーラムに出てるXMLベースのシェーダ色々セットをD3DとGLで見た目が互換になるように改造、バグは潰し改良諸々
・自由度低い代わりに少し軽いブルーム
・A8対応(irrlichtはなぜかA8対応する気が無い?)
・A8テクスチャフォントと文章ノード
文字個々に、4頂点色個々設定可、フチも4頂点色個々設定可、フチも込みで裏から見ても大丈夫
文字の見た目重心で回転、拡大縮小、UVで上下左右反転、タブ位置揃え、タブサイズ可変
描画がそこそこ速い頂点配列モードと自由度が高い代わりに遅い文字個々ノードモードでこれら装飾が完全互換
頂点配列モード→ノードモードへはいつでも切り替え可
書体切り替え可、字間行間設定可
文字の初期配置と以降の変更は固定機能のほかにスクリプトでも可
(固定機能の 右詰,ジャスティファイ,ルビ がまだ未実装)
・この文章ノード専用のメッセージアニメータ
メッセージ表示速度やA濃度の変化距離(言い表し難い)をfloatで変更可な改行やタブサイズ対応の時間ベースアニメータ、フレーム数に依存しない
・celtストリーミング再生、oggページに分割しないで簡素に扱うためのダンパーも作った
・フルカラーもパレットも自然画もアニメ絵もPNG以上の圧縮率で、パレット画像の場合はPNGよりも展開が2倍↑速い独自コーデック、画像以外にもリソースのRAMキャッシュ用として使用、フルカラーは圧縮率を犠牲にすれば展開はもっと速くなる
・格ゲーでよくあるタイムストップ演出のためシーンマネージャ毎にタイムストップ可能にし違和感のないストップ解除も可能にした
・某エンジンで実装されてるエフェクトをパクる許可をもらったので盛り込んだ(推測で真似して実装しようとして挫折、数学苦手だ)
細々とした改造は他にも色々あるけど忘れた
0894名前は開発中のものです。
2012/08/08(水) 23:35:12.35ID:TqStE+nz0895名前は開発中のものです。
2012/08/09(木) 02:01:20.69ID:TEaUWCM1↑どこ行ったん?
0896名前は開発中のものです。
2012/08/09(木) 04:38:13.54ID:3/Xihug4お疲れ様です
気長にまったり頑張ってください
0897名前は開発中のものです。
2012/08/09(木) 09:50:32.27ID:6TOyobo6あ、そこ世話になったのに消えちゃったのか。
0898名前は開発中のものです。
2012/08/27(月) 16:10:01.26ID:NCPCFhPqブログ色々めぐってたら偶然それっぽいの見つけた。tu*daさん?
0899名前は開発中のものです。
2012/08/29(水) 17:17:49.00ID:81OpSOeFそれに叩かれてるけどログにある神奈川工科大のひとって
Unity for MMDのひとじゃないだろうか。
単なる名無しさんよりは名前出してる人のほうが成果だすのかも。
でも名無しでも>>893さんみたいに頑張ってるひといるし僕もがんばってみよ。
0901名前は開発中のものです。
2012/09/01(土) 10:16:37.76ID:xmU3R1N+つくってるのは趣味?
Unity使わないの?
0902名前は開発中のものです。
2012/09/13(木) 00:56:24.58ID:sGA/0Nryhttp://sourceforge.jp/magazine/12/09/11/2039230
http://www.garagegames.com/
0903名前は開発中のものです。
2012/09/13(木) 08:30:02.26ID:58G1gAN7思い切ったね
0904名前は開発中のものです。
2012/09/13(木) 11:57:11.78ID:LHU8GMTzでもMITライセンスは大歓迎だ。
0905名前は開発中のものです。
2012/09/13(木) 12:00:35.58ID:oVqq+2hk0906名前は開発中のものです。
2012/09/13(木) 12:15:21.64ID:seBnVBvk0907名前は開発中のものです。
2012/09/13(木) 14:51:06.70ID:ckaemq4+0908名前は開発中のものです。
2012/09/13(木) 15:53:04.73ID:seBnVBvkそうだよ?
「UnityとかUDKとかVisionとかNeoAxisとか出てPCでもスマホでも新規客取れない状況だわ。
ならもういっそTorque使ってゲームを作った方が会社としてマシだわ。
これまで支えて来てくれた既存ユーザーと業界のために現行版のソースとバイナリはそのまま公開するわ」
っていう趣旨
0909DDD ◆qSKP3eYtY6
2012/09/28(金) 14:39:56.27ID:Ao+KlUIYコア部分(Unityで言えばGUIでポコポコ作る部分)
http://codepad.org/n2bhJENS
スクリプト部分(Unityで言えばユーザー定義のBehaviorスクリプト)
http://codepad.org/FJbjRKs1
動いているところ
http://v.youku.com/v_show/id_XNDU1Mjc1MTE2.html
ここまではこれ以上ないぐらいシンプルに実装できていると思う
来月はアニメーションとスキニング
0910名前は開発中のものです。
2012/09/28(金) 14:43:11.02ID:/GjltfpLすげぇ
OpenGL3以降ベースのゲームエンジンって少ないから頑張って欲しい
0911名前は開発中のものです。
2012/09/28(金) 14:53:23.12ID:acwnFDZO0912名前は開発中のものです。
2012/09/28(金) 17:24:24.69ID:PqQHbJ7Gいいものであるなら金払ってもいいから。
0913名前は開発中のものです。
2012/10/03(水) 13:54:44.18ID:41pE2PfQ0914名前は開発中のものです。
2012/10/07(日) 03:33:29.31ID:waNmdRMa0915名前は開発中のものです。
2012/10/07(日) 14:05:34.36ID:vN4vuB140916名前は開発中のものです。
2012/10/11(木) 20:13:04.47ID:GvttqXGwお前にとって良いものとは何なんだ?
箇条書きで答えよ!
0917名前は開発中のものです。
2012/10/17(水) 23:22:39.19ID:Pfzws2L+皆さんはjavaをどうやって学びましたか?
0918名前は開発中のものです。
2012/10/18(木) 03:45:35.27ID:Fx0NYEIC0919名前は開発中のものです。
2012/10/18(木) 07:39:11.43ID:nmJHTTqtゲーム作って学びました。
0920名前は開発中のものです。
2012/10/18(木) 11:59:59.97ID:cLLtBdhnわからないとこは飛ばしていって次進んで、わかんないとこにぶち当たったら
またわかんなかったとこに戻るみたいにするのがいいと思う。
知識って本を何週も回し読みしたら、その分力つくと思うし。
0921名前は開発中のものです。
2012/10/18(木) 15:40:44.04ID:ye+6Lt4Mゲームエンジンも既に公開されてるのがあるから、
それを自分好みに改造しながらスキルつけるってのがいいのではなかろうか。
0922名前は開発中のものです。
2012/10/18(木) 19:15:35.62ID:ZEhkL4/X分からないところは前に戻って復習しながら進めます。
ちょっと焦ってしまいました(・・;)
0923名前は開発中のものです。
2012/10/18(木) 22:40:03.22ID:cLLtBdhnGUIアプリ作った経験があったほうがいいから、とりあえずCUIで文字列のみのをやったほうがいいかもね。
言語でつまってるならなおさら。
オブジェクト指向の話は知っといたほうがいいけど、言語のすべてをアプリ開発で使うわけじゃないし、
(map,vectorとか、知ってたほうがいいけど)気が向いたらアプリの本やってもいいと思う。言語と交互で。
読んでてわからないことがあったら、メモでもして必ず調べる。クラスとかメソッドならネットに説明あるから
0924名前は開発中のものです。
2012/10/19(金) 16:22:37.38ID:JZnGlke5生きてたら再うpしてくれ
最新バーでも嬉しい
0925名前は開発中のものです。
2012/10/20(土) 22:15:44.75ID:z0wc2dTpどっかに残ってなかったかな・・・。
最新版は色々変わりすぎ+変えている途中だから危険。
0926名前は開発中のものです。
2012/10/25(木) 21:39:37.55ID:gKqGB4cG変わりまくってて良いから欲しいっす…
レス数が900を超えています。1000を超えると表示できなくなるよ。