We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MeshResource は内部に合計 5 つの VertexBuffer を持っているが、フォーマットが MMD モデルに寄っているため、汎用的にしたい。
enum VertexBufferGroup { VBG_Basic = 0, VBG_BlendWeights = 1, VBG_AdditionalUVs = 2, VBG_SdefInfo = 3, VBG_MmdExtra = 4, };
また、VBG_Basic の頂点フォーマットは次のようになっている。
struct Vertex { Vector3 position; Vector3 normal; Vector2 uv; Color color; };
汎用化を目指すなら Unity や Three.js のように、各要素で別々の配列 (頂点バッファ) を指定できるようにした方が良いのでは?
var geometry = new BufferGeometry(); geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );
VertexLayout 付きの頂点データを外部から指定できるようにする、という方針となる。
内部データは VertexBuffer が分かれても、ひとつにまとめても構わない。ただ、内部フォーマットへの変換処理を実装することになる。
編集が簡単になるが、描画時のキャッシュ効率が落ちる。
編集と言っても、そもそも一般的に描画用メッシュクラスは編集用に作られてはおらず、編集したければ Half-Edge Mesh などを使うべき。 頂点位置の微調整や法線計算、箱や球といった他のメッシュを(描画効率向上のため)マージするのはサポートしてもいいともうけど…。
例えば、Ruby は構造体という仕組みが無いので、VertexBuffer にバイナリデータを直書きするのか、アクセサを提供するのか。
バイナリデータを直接扱うのは言語によってかなり得手不得手あるので、基本はアクセサの提供にしたい。
ちなみに UE4 は、各要素の配列を受け取って Mesh を作るユーティリティがある。 https://docs.unrealengine.com/en-US/API/Plugins/ProceduralMeshComponent/UProceduralMeshComponent/CreateMeshSectio-/index.html
StaticMesh の頂点バッファは次のようになっている。
struct FStaticMeshVertexBuffers { FStaticMeshVertexBuffer StaticMeshVertexBuffer; // Normal, Tangent, Binormal, UV FPositionVertexBuffer PositionVertexBuffer; // Pos のみ FColorVertexBuffer ColorVertexBuffer; // Color のみ }
やはりある程度の要素はひとつの VertexBuffer にまとめることで、キャッシュの効率化を狙っている?
The text was updated successfully, but these errors were encountered:
#113 improved mesh
d6eb96b
No branches or pull requests
Proposal
MeshResource は内部に合計 5 つの VertexBuffer を持っているが、フォーマットが MMD モデルに寄っているため、汎用的にしたい。
また、VBG_Basic の頂点フォーマットは次のようになっている。
汎用化を目指すなら Unity や Three.js のように、各要素で別々の配列 (頂点バッファ) を指定できるようにした方が良いのでは?
Motivation
Implementation
VertexLayout 付きの頂点データを外部から指定できるようにする、という方針となる。
内部データは VertexBuffer が分かれても、ひとつにまとめても構わない。ただ、内部フォーマットへの変換処理を実装することになる。
要素ごとに VertexBuffer を分けるべきか?
編集が簡単になるが、描画時のキャッシュ効率が落ちる。
編集と言っても、そもそも一般的に描画用メッシュクラスは編集用に作られてはおらず、編集したければ Half-Edge Mesh などを使うべき。
頂点位置の微調整や法線計算、箱や球といった他のメッシュを(描画効率向上のため)マージするのはサポートしてもいいともうけど…。
各言語バインダ用の API
例えば、Ruby は構造体という仕組みが無いので、VertexBuffer にバイナリデータを直書きするのか、アクセサを提供するのか。
バイナリデータを直接扱うのは言語によってかなり得手不得手あるので、基本はアクセサの提供にしたい。
ちなみに UE4 は、各要素の配列を受け取って Mesh を作るユーティリティがある。
https://docs.unrealengine.com/en-US/API/Plugins/ProceduralMeshComponent/UProceduralMeshComponent/CreateMeshSectio-/index.html
Research
UE4
StaticMesh の頂点バッファは次のようになっている。
やはりある程度の要素はひとつの VertexBuffer にまとめることで、キャッシュの効率化を狙っている?
The text was updated successfully, but these errors were encountered: