2016-04-16 66 views
2

オブジェクトのサイズを調整する頂点シェーダを作成しようとしています。私はすべてのようにのような「法線に沿って拡大して頂点」の曲に、この問題には多くの「解決策」を見つけた:Unity/CG:頂点シェーダのスケールオブジェクト

v2f vert(appdata_base v) 
{ 
    v2f OUT; 
    float3 norm = normalize(v.normal); //Unity 5 fix 

    v.vertex.xyz += norm * _Scaling; 
    OUT.pos = mul(UNITY_MATRIX_MVP, v.vertex); 

    OUT.normals = v.normal; 
    return OUT; 
} 

しかし、このような立方体のようにシャープなエッジを持つオブジェクトに対しては機能しません。

enter image description here

誰かが私を取得するために不足しているかもしれないものを教えてもらえます:キューブの場合はそれだけで側面が直接出て移動するが、側面はキューブ「爆発」を得るため、同じサイズをご利用いただけます任意のオブジェクトがシェーダで適切に拡大/縮小されますか?

答えて

2

あなたは中心を持っていますが、あなたはまたそれに対して相対的な頂点位置ベクトルを持っています。あなたはそれの大きさを見いだし、それを拡大縮小することができます。

+0

私はこれを実装し、それが行く方法を見ていきます。ありがとう。 – Valevalorin

+0

どのような見物人にとっても、このスケーリングの方法は、奇妙な形状/凹形のオブジェクトに対してはうまく機能しません。 – Valevalorin

+0

あなたの要件をよりよく定義し、問題の内容を説明する必要があります。私はそれが正しい中心点を持っていないために翻訳していると思う。次に、モデルの中心(最小境界ボックス)と質量の中心が同じものではないことを、このhttps://en.wikipedia.org/wiki/Homothetic_transformation –

-2

これは役立つかもしれない:

float3 normal= normalize(v.vertex.xyz)*0.05; 
v.vertex.xyz+= normal; 

としているシェーダの動的なバッチ処理を無効にする:

Tags {"DisableBatching"="True"} 
関連する問題