看板の効果は、二次元平面の法線方向は常に(カメラの方向を見る)視力の同じ行であることを意味します。広く煙、雲、フラッシュなどをレンダリングする際に使用されます。
その本質は、その後、我々はこの行列の3つの基底ベクトルを構築するために選択することができ、回転行列を構築することです。
方向(X軸)が導かれます→
方向(Y軸)が導かれます↑
面法線方向(Z軸)
これは、一般的に計算されます。
1.カメラの電流方向に応じて法線方向(看板効果の性質)を決定し、そして正規化
正常=正規化(VIEWDIR)。
2.得られた正規化(ローカル空間にするfloat3(0,1,0)である)初期上向き方向に応じて右方向及び法線方向を計算します
(ベクトル外積を用いて算出);右=正規化(アップクロス(、)正常)
3.上方向の正確な値を再較正右方向及び法線方向を算出した後
アップ '=ノーマライズ(クロス(右、正常))。
回転行列を算出した後、それぞれの元の頂点の方向にオフセット
次のようにスクリプトは次のとおりです。
1 // 注アップグレード:置換'を_World2Object 'unity_WorldToObject'と 2 3シェーダ" MyUnlit /ビルボーディング" 4 { 5つの プロパティ 6 { 7 _MainTex(" テクスチャ"、2D)= " 白" {} 8 _Color(" 色味"、色)=(1、1、1、1 ) 9 } 10 SubShader 11 { 12個の // 頂点が無効係合P変換でなければならない 13は {タグ" キュー" = " 透明" " RenderType " = " 透明" " IgnoreProjector " = " 真の" " DisableBatching " = " 真" } 14の 15 パス 16 { 17 / / アルファブレンディング 18は、 タグ{ 「LightMode 」= "forwardbase " } 19 オフZWRITE 20 ブレンドSRCALPHA OneMinusSrcAlpha 21 カルオフ 22 23 CGPROGRAM 24 の#pragma頂点VERT 25 の#pragma断片FRAG 26 の#pragmaは multi_compile_fog 27 28 の#include " UnityCG.cginc " 29 30 構造体APPDATA 31 { 32 POSITION:のfloat4頂点; 33 するfloat2 UV:TEXCOORD0。 34である }; 35 36 構造体V2F 37 [ { 38は するfloat2 UV:TEXCOORD0; 39 UNITY_FOG_COORDS(1 ) 40 のfloat4頂点:SV_POSITION; 41である }; 42である 43れる sampler2D _MainTexは、 44である ;のfloat4 _MainTex_ST 45 fixed4 _Color; 46である 47 V2Fヴェール(のAppData V) 48 { 49 V2F O; 50 // モデル空間計算視線方向 51を MUL = objViewDirするfloat3(unity_WorldToObject、のfloat4(_WorldSpaceCameraPos、1。 )); 52は、 53である // 回転行列算出それぞれの基底ベクトル 54れる するfloat3 normalDir = ;正規化(objViewDir) 55 するfloat3 upDirするfloat3 =(0、1、0 ); 56であり するfloat3を= rightDir 正規化(クロス(normalDir、upDir)); 57である upDirは= ノーマライズ(クロス(normalDir、rightDirを)); 58 59 // オフセット頂点の回転行列 60 * = rightDir v.vertex.x localPosするfloat3 + + normalDir v.vertex.y upDir * v.vertex.z、 61は 62である // 値として新たな転送計算頂点の後にオフセット 63がある o.vertex UnityObjectToClipPos(= float4(localPos、1。 )); 64 o.uv = TRANSFORM_TEX(v.uv、_MainTex); 65 UNITY_TRANSFER_FOG(O、o.vertex); 66 リターンO; 67 } 68 69 fixed4 FRAG(V2F I):SV_Target 70 { 71は fixed4 COL = tex2D(_MainTex、i.uv); 72 col.rgb * = _Color.rgb。 73 UNITY_APPLY_FOG(i.fogCoord、COL)。 74 リターンCOL。 75 } 76 ENDCG 77 } 78 } 79 フォールバック" 透明/ VertexLit " 80 }