質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

1回答

2388閲覧

頂点シェーダーで、スキンメッシュのジョイントによる変換前の[POSITION]と[ NORMAL]を取得したい

hifumirei

総合スコア6

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

2クリップ

投稿2018/04/11 12:15

編集2018/04/11 12:33

前提・実現したいこと

Unity vertex shader です。
スキンメッシュのジョイントによる変換前の [: POSITION]と[ : NORMAL]を取得したいです。
可能でしょうか?
なにとぞよろしくお願いします。

発生している問題

下記のように、[: POSITION]と[ : NORMAL]セマンテイクスで取得した頂点情報はスキンメッシュの変形後の値のようです。

いわゆる、"Tポーズ"である、ジョイント回転のマトリックス変換前を取得できるセマンテイクスはあるんでしょうか?

struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; };

下記はunityの公式ページのサンプルコードです

unity

1Shader "test" { 2SubShader { 3 Pass { 4 CGPROGRAM 5 #pragma vertex vert 6 #pragma fragment frag 7 #include "UnityCG.cginc" 8 9 // vertex input: position, normal 10 struct appdata { 11 float4 vertex : POSITION; 12 float4 normal : POSITION; 13 }; 14 15 struct v2f { 16 float4 pos : SV_POSITION; 17 fixed4 color : COLOR; 18 }; 19 20 v2f vert (appdata v) { 21 v2f o; 22 o.pos = UnityObjectToClipPos(v.vertex ); 23 o.color.xyz = v.normal.xyz * 0.5 + 0.5; 24 o.color.w = 1.0; 25 return o; 26 } 27 28 fixed4 frag (v2f i) : SV_Target { return i.color; } 29 ENDCG 30 } 31} 32}

サンプルは取得したノーマルを色として出力しています。
これをキャラクターに適応し、アニメーションを再生すると、色が変化します。

事前に静的にDCCツールで頂点カラーに焼き付けておくことで求める結果は得られますが、それをしないで結果を得たいです。

試したこと

事前に静的にDCCツールで頂点カラーに焼き付けておくことで求める結果は得られますが、それをしないで結果を得たいです。

補足情報(FW/ツールのバージョンなど)

Unity 2017.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

セマンティクスに

hlsl

1struct app_data { 2 float3 pos : POSITION, 3 float3 prepos : POSITION0, // 変形前頂点 4 float3 normal NORMAL, 5 float3 prenormal NORMAL0 // 変形前ノーマル 6};

として追加の頂点情報、法線情報を渡すことは可能なんですが、UnityはPOSITION0にスキニング前の頂点を渡す、というような動作を少なくとも標準ではしてくれないので、CommandBufferかScriptable Render Pipelineで2つ目の頂点・法線を自前でしこんでやる必要があるなかなぁ、と思います。

投稿2018/04/19 20:39

編集2018/04/23 08:52
SAM-tak

総合スコア199

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問