【Unity】シェーダー テッセレーション

  • |
【Unity】シェーダー テッセレーション
   

テッセレーション

tessellateを指定して、頂点を細分化します。
当然、テッセレーションを使うと処理が重たくなりますので使い所には注意が必要です。
// tessellate:関数名
#pragma surface surf Lambert addshadow fullforwardshadows vertex:myVertex tessellate:less

// 関数の返す値が大きほど、ディティールが細かくなります。
float4 less()
{
  return 10;
}

UnityDistanceBasedTess

距離に応じて、ディティールの細かさを調整できます。
#include "Tessellation.cginc"

struct appdata {
   float4 vertex : POSITION;
   float4 tangent : TANGENT;
   float3 normal : NORMAL;
   float2 texcoord : TEXCOORD0;
};

float4 less (appdata v0, appdata v1, appdata v2)
{
    float minDist = 1;
    float maxDist = 10;
    return UnityDistanceBasedTess(v0.vertex,v1.vertex,v2.vertex,minDist,maxDist,10);
}

UnityEdgeLengthBasedTess

距離にもとづいたテッセレーションは三角形のサイズが比較的同じである場合にのみ有効です。
float4 less (appdata v0, appdata v1, appdata v2)
{
    return UnityEdgeLengthBasedTess(v0.vertex,v1.vertex,v2.vertex,5);
}

Phong テッセレーション

ポリゴンをスムージングする機能が Phongです。
関数に指定された変数が大きなると、スムージングします。
// tessphing:をつけます。
#pragma surface surf Lambert vertex:vert tessellate:tess tessphong:_Phong

Phong  1

Related Posts Plugin for WordPress, Blogger...