3. Advanced Shader


Advanced Shader
  • 今回はプレミアムコンピューターグラフィックスコースに参加し、Telescoval Shaderに初めて触れました.Geometry Shaderは金教授のコンピューターグラフィックスを聞いて授業の認識を深めた.
  • Unrealエンジンを使用して、ピクセルのツリーAssetのデータ実装部分で、Tessellationを制御することで、ツリーテクスチャの移動を制御することができます.これがその部分だと思います.講座を聞いた後、アニメを作る人にとても役に立つと聞きました.簡単に動画を扱うことができるそうです.
  • 私は、その移動した部分がグラフィックレンダリングでオーバーロードされる可能性があるので、いっそ削除してGPUにはあまり影響しないと言っています.ヒューヒューいう不思議ですね.
  • いずれにしても、
  • です.長すぎる前に、まずGeometryShaderから始めます.
  • Geometry Shder
  • OpenGL 3.2から
  • VertexShader以降に実行されるShader
  • Primitive単位で頂点を受信します.
  • 主な機能:エンティティ、頂点/Vertex位置を追加、削除できます.
  • はVertex Shaderに代わるものではありません.必ずあります.
  • Programming
  • 変数の伝達は、Uniform変数、in、out変数からなる.
  • の違いは、レイアウト変数を使用することです.
  • 三角形を入力し、点を3つの三角形striptにエクスポートします.
    layout (triangle) in;//Points、Line、Line隣接、Triangle、Triangle隣接を使用できます
    layout (triangle_strip, max_vertices = 3) out;//Points、LineStrips、TriangleStripsをサポート
  • の場合、すべてのin変数は、原語をインポートした頂点を配列とする.
    in float light[3];//このように宣言すべきだ.
    gl_in[0].gl_Position.xyz//glinも配列として処理する.
  • build-in変数:gl PrimitiveIDはPrimitiveの何時のID値ですか.
  • EmiVertex()とEndPrimitive()があります.
    EmitVertex()生成ポイント.この点は原語を作成するために使用されます.
    EndPrimitive()は、受信ポイントを使用して原語を作成して送信します.上記の例では、三角形の棒グラフを生成します.
  • Interpolation Qualifier
    Smooth、noperspective、flatがあります.名前のようにscreenspaceでは、連続的に補間されません.
  • Line Adjacency
  • 4ポイントをあげると、4つを原版に組み合わせます.ジオメトリでは4つの点を処理できます.
  • Splineへの入力と言えます.
  • 行のStrip隣接は、主に幾何学的Shaderの出力値として使用されます.
  • Tessellation Shader
  • 地震:モザイクに起源する.ポリゴン間に間隔とオーバーラップはありません.
  • 繊細なシェーダ
  • TesseldモデルでDisplaceMappingを行い、テクスチャに基づいてベンドを作成することもできます.
  • Dymamic Terrain Rendering
  • は地震によって簡単なPrimitive地形を複雑にすることができる.900個のポリゴンで10万個のポリゴンを再生成できます.
  • Instanced Tessellation
  • 簡略化モデルの平滑表示=>詳細表示
  • シフト図、面白い表現
  • アニメーションを使用する場合、移動する必要がある点の数を減らすことで、操作
  • を簡略化することができる.
    Patch primitive
  • Tessellation Shaderで入力可能な唯一の原語タイプ.コントロールポイントからなる
  • Bezier、B-Spline、およびNURBSに基づく計算=>サーフェスまたはカーブ
  • の作成
  • (u,v)座標を有する.u = [0, 1], v = [0, 1]
  • TessFactorは、0から1の間を4で割ると、4つのセグメントに分けられます.
  • Patchの分割に従ってLODを定義することができる.遠=>単純、近=>詳細
  • Patchのタイプ:4(長方形)、等値線(線)、三角形(三角形)
  • Programming
  • のテストを完了したShaderは2つに達しました~!
  • その前にcppで...
  • 4制御点時
  • glPatchParameteri(GL_PATCH_VERTICES, 4);//<- 1つのpatchを構成する制御点数
  • glDrawArrays(GL_PATCHES, 0, 4);//完全な描画に使用する制御点数
  • Tessellation Control Shader(TCS)
    定義
  • gl TessLevelOuter[]:外部パーティション数
  • gl TessLevelInner[]:内部パーティション数
  • 4個4(l,d,r,u)、2個内(l,u)
  • 三角形は3つの外(l,d,r),1つの内(d)
  • である.
  • 等値線外2本(l,d)内0本
  • layout(vertices = 4) out;
    
    gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
    gl_TessLevelOuter[0] = 1;
    gl_TessLevelOuter[1] = uOuter1;
    その間にT e l escellationPrimitive Generator(TPG)があります
    Tessellation Evaluation Shader(TES)
  • 実際のパッチ上の点位置
  • を計算する.
  • ここでuを計算すればよい.
  • layout(ioslines, equal_spacing) in;
    vec4 p0 = gl_in[0].gl_Position;
    gl_Position = b0 * p0;