○InstancedModelProcessor.cs(3h) ・ノードトランスフォーム情報とは、モデリングツール上の座標/回転/スケールで、  これをベイクすると、XNA上の座標/回転/スケール初期値が  モデリングツール上の値と一緒になる、という認識で良いか?  →「ノードトランスフォームのベイク」をTrue←→Falseとしたら、   この値に関係なくモデリングツール上の座標/回転/スケールが反映された   →この認識は誤りである   →ノードトランスフォーム情報とは何か? ・ジオメトリの定義は?  →「ジオメトリ処理」とは、3次元コンピュータグラフィックスにおいて、   空間に置かれた立体モデルの座標をスクリーン座標に変換するための計算  →XSIでは、ポリゴンで構成されたオブジェクトを意味する  →XNAでは、頂点/インデックス/マテリアル情報の集合体を意味する   →ジオメトリは、マテリアルまたは頂点フォーマットが異なると分割され、    通常のModelクラスでは複数のModelMeshPartに分割管理される(効率良く描画するため) ・なんか凄く面倒そうなことがこれだけで出来るとは…XNA凄いかもw  ・// 頂点とインデックスを描画時のGPUキャッシュヒット率を高める為に並び替える   MeshHelper.OptimizeForCache( mesh );  ・// 頂点チャンネル(VertexContent)から頂点バッファへの変換   VertexBufferContent vertexBufferContent;   VertexElement[] vertexElements;   geometry.Vertices.CreateVertexBuffer( out vertexBufferContent,    out vertexElements,    context.TargetPlatform ); ・この頂点チャンネルと、テクスチャ座標のチャンネル1は、同じものを意味するか?  →(XNAヘルプより)頂点チャンネルは、頂点ごとに 1 つの値を持つ任意のデータのリストです。チャンネルは GeometryContent 内に格納され、名前で識別されます。  →頂点チャンネル1〜4まで使用済かチェックしている。1だけで良いのでは??  →VertexChannel.Nameを表示して確認できないか? ・頂点宣言から頂点のサイズを取得している。  この便利なメソッドで、自身のサイズは取得できないか?  int vertexStride =   VertexDeclaration.GetVertexStrideSize( vertexElements, 0 ); ・ExternalReferenceは、コンテンツの相対→絶対パスを解決している??  // エフェクトファイルを設定する  instancedMaterial.Effect = new ExternalReference(   EffectFilename, rootNode.Identity );  →リファレンスとは、参照すること   →外部参照ファイルの指定を意味する ・"インスタンスモデルにはテクスチャなしの" +  "マテリアルはサポートされていません。" );  →理由は? ・キーIDを変更しているが、もし変更しなかった場合、動作に影響するのか?  instancedMaterial.Textures.Add( "BasicTexture",   material.Textures["Texture"] ); ※このプログラムを解析すると、コンテントプロセッサの入力(=インポーター出力)フォーマットが把握できる ※頂点やインデックスの複製は、コンテントパイプラインでは行っていない  →複製はライブラリのShaderInstancePart.csで行っている  →頂点/インデックス/マテリアル関連データは、通常のModelクラスと同様に処理している? ○InstancedModelContent.cs(1h) ・頂点バッファのコンテントは頂点バッファコンテントなのに、  インデックスバッファのコンテントはインデックスバッファコンテントではなく  インデックスコレクションと呼ぶのは何故か? ・「ヘルパーメソッド」の意味(定義)は?  →明確な定義は無い?  →「補助的な機能」といった程度の意味ではないか? ・オブジェクトの種類によって、出力メソッドの種類が異なる ※コンテントプロセッサの出力(=XNBファイル)フォーマットが把握できる ○InstancedModelContentWriter.cs(0.5h) ・コンテントパイプラインから出力用オブジェクト(ContentWriter output)を受け取り、  これにInstancedModelContentの出力をセットしている?  →outputは、最終的に出力されるXNBファイルを意味する  →実際に書き出すメソッドを実装しているのはInstancedModelContent ・「実行時のCLR型」って何? ・GetRuntimeTypeは、誰がどのタイミングで呼び出すのか? ○MeshPacker.cs(6h) ・/// 他にも部屋のモデルを3Dモデリングツール上で作る場合には  /// 複数のノードになっているが、ゲーム中にそれらのノードが  /// 動かない場合などには1つのモデルとして描画した方が効率的になる。  複数存在した旧地形種別モデルをこのクラスで単一モデルに変換すると効率的になる、ということであろう  →1つあたり6万頂点以上あるので単純な単一化はできない   →頂点座標等は一緒なので、分割するなど工夫すれば単一化は可能    →結局テクスチャを複数回描画することになるので、パターンテクスチャ方式の方が描画パフォーマンスは効率的     →最終的に画像を取得してメタセコモデルに張り付けるので、画像取得元モデルのパフォーマンスは関係ない      →全地形を旧地形種別モデル方式で画像取得すると、境界が非直線的でより綺麗に見えるのでは?       →画像は、氾濫前と氾濫後の2種類取得する       →パフォーマンスが足りなくて画像取得すら不可能な場合は、面積分割&メッシュ単一化などでパフォーマンス向上を図る        →どうしても画像取得パフォーマンスが足りない場合は、         せめて川と道だけでも地形種別モデル方式で画像合成取得すれば、キレギレで綺麗に見えるのでは?  →結論:今のパターンテクスチャ方式の方が、境界が非直線的&川も2段階で綺麗   →陰影調整で影を強調するとより立体的に見えるかもしれない(後日課題)   →さらに解像度の高い画像に差し替えること(後日課題) ・int basePositionIndex = mesh.Positions.Count;  →座標のインデックス(のベースとなる)番号=(現在編集中のメッシュの)座標数  →これから、このインデックス番号に追加していく ・MeshContentに追加すべき要素は下記2点   MeshContent.Positions(コンテントパイプライン内では、(頂点データの中で)頂点座標のみ独立したコレクションとして管理されている)   MeshContent.Geometry  ※MeshContentは通常ModelクラスのModelMeshに該当するが、構成要素の単位は異なる(MeshParts、Effects、VertexBuffer等) ・ /// パック作業を終了し、パックされたメッシュを返す  public MeshContent FinishMesh()  {   MeshContent result = mesh;   mesh = null;   return result;  }  MeshContentはクラスなので、resultは参照では?  →meshをnullしてからreturnすると、nullしか返らないような??? ・2つのジオメトリの同一条件  ・マテリアル  ・頂点チャンネル数  ・個々の頂点チャンネルの名称とエレメントタイプ  →ジオメトリは、マテリアルまたは頂点フォーマットが異なると分割管理されることを意味する ・// 新しいタイプのジオメトリとして追加する  →Modelクラスに例えると、ModelMeshPartの追加に相当する? ・GeometryContentに追加すべき要素は下記5点   GeometryContent.Name   GeometryContent.Material   GeometryContent.Vertices(頂点座標データ(addingMesh.Positions)の位置を参照するためのインデックスが含まれている)   GeometryContent.Vertices.Channels   GeometryContent.Indices  ※MeshContentは通常ModelクラスのModelMeshPartに該当するが、構成要素の単位は異なる(Effect、VertexDeclaration、頂点バッファやインデックスバッファの参照位置等) ・(コンテントパイプライン内では)頂点データの中で、頂点座標のみ独立したコレクションとして管理されている ・int baseIndex = geometry.Vertices.VertexCount;  →インデックス(のベースとなる)番号=(新規または既存のジオメトリの)頂点数 ・// 現在のチャンネルデータを一旦保存して、チャンネルをクリアした後に  // 新しいチャンネルデータを追加してチャンネルを構成する  →わざわざ面倒な手順を踏む理由は?(チャンネルをクリアせずにデータを追加した場合の不都合は?)  →geometry.Verticesはクリアせずに追加しているが、既存のgeometry.Verticesは残らないか?   →追加時にインデックス指定しているので、既存のgeometry.Verticesは上書きされる? ●勉強になったこと ・コンテントをFBXに変換するまでの流れ ・メッシュのデータフォーマットと再帰的処理の理想コード ・ジオメトリの構成要素と追加手順  →(コンテントパイプライン内では)頂点データの中で、頂点座標のみ独立したコレクションとして管理されている ・クラス名や変数名等のネーミング ●理解できなかったこと ・プログラム内の頂点チャンネルと、テクスチャ座標のチャンネル1は、同じものを意味するか?  →頂点チャンネル1〜4まで使用済かチェックしている。1だけで良いのでは?? ・MeshPackerで「既存の頂点チャンネルに追加」する際に、わざわざ面倒な手順を踏む理由