companynameJ

ボーンアニメーションのオフセット行列とは?

glTFファイルのInverseBindMatricesを解きほぐす

 
 

はじめに

 
前回の3D画像ファイルのアニメーションとは?で、3Dデータフォーマットの決定版とされるglTFファイルのアニメーションデータを調べて、ボーンアニメーションの基本構造についても触れました。
 
ボーンアニメーションは、骨格となるボーン(Bone)を設定してそのBoneに付随する3D物体の動きを制御するアニメーションですが、Boneに付随する3D物体の動きを制御するのにForward Kinematics(順運動学)やInverse Kinematics(逆運動学)と呼ばれる手法があります。
これらの手法は複数のBoneの動きに合わせて3D物体の頂点の位置を計算して設定していきます。
 
そのような動き制御の計算を簡略化するために、Boneの状態を初期位置に戻す行列データが用いられています。
 
glTFファイルでは、ボーンアニメーションのことをスキンメッシュアニメーションと呼んでいて(前報3D画像ファイルのアニメーションとは?参照)、そのBoneの状態を初期位置に戻す行列データのことをInverseBindMatricesと呼んでいます。この行列は日本ではボーンオフセット行列と呼ばれているようです。
 
InverseBindMatrices(以下ボーンオフセット行列と呼ぶことにします)はどういう行列でどのような役割を果たすのでしょうか?
 
今回は、glTFファイルのInverseBindMatricesデータの構造を解きほぐすことによってボーンアニメーションの具体的な技術を学ぶことにします。
 

glTF 2.0ファイルフォーマットのInverseBindMatricesデータ

 
glTF 2.0ファイルフォーマットの仕様については、The glTF 2.0 Specificationに書かれています。
 
InverseBindMatricesデータについては、

・「スキンのinverseBindMatrices は accessor の識別子で joints の数と同じ要素数の 4x4 行列の配列を参照します。 inverseBindMatrices はボーンの変形を計算するときに必要になります。」
 引用:vertex skinning の覚え書き

という記事があります。
 
そのらのデータの意味や役割を以下に具体的に説明していきます。
 

行列演算の問題

 
3DCG技術では行列演算が多用されるのですが、行列の扱い方に異なる2つの形式があります。

・「一般には列優先の表記が広く使われている。学校教育における数学や物理で行列が使われる場合は、列優先であることが普通である。UnityやOpenGLなども列優先の表記である(DirectXは行優先である)。」

 「列優先表記による平行移動行列は、

$$M = \begin{bmatrix} 1 & 0 & 0 & a \\ 0 & 1 & 0 & b \\ 0 & 0 & 1 & c \\ 0 & 0 & 0 & 1 \end{bmatrix}$$

  行優先表記による平行移動行列は、

$$M = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ a & b & c & 1 \end{bmatrix}$$

  のようになる。」
 引用:3Dプログラミング入門§3-8 行列 2

という行優先/列優先の表記とか、

・「DirectXではベクトルは横ベクトルとなって、行列と掛け算するときは、vMとなる。OpenGLではベクトルは縦ベクトルとなり、行列と掛け算するときは、Mvとなることが分かりました。」
 引用:3Dプログラミング入DirectXとOpenGLのベクトル/行列演算の違い

という横ベクトル/縦ベクトルの表記として紹介されています。
 
行優先表記と横ベクトル表記は同じで、列優先表記と縦ベクトル表記は同じ意味になります。ここでは行優先/列優先の用語を採用しておきます。
 
列優先行列と行優先行列は転置の関係になっており、行優先行列の積は左から右へ順に掛けていくのに対し、列優先行列の積は右から左へ順に掛けていくという掛け算方向の違いがあります。
 
ここで取り上げるinverseBindMatrices は 4x4 行列で、glTF仕様書にはその格納順についての記載はないのですが、
「An accessor referenced by inverseBindMatrices MUST have floating-point components of "MAT4" type. The number of elements of the accessor referenced by inverseBindMatrices MUST greater than or equal to the number of joints elements.The fourth row of each matrix MUST be set to [0.0, 0.0, 0.0, 1.0].」
と書かれています。
第4行が[0.0, 0.0, 0.0, 1.0]であることというのは、列優先の行列を意味しているので(上記引用参照)、以下列優先の表記で説明することにします。
 

ボーンアニメーションの行列演算

ボーンアニメーションの行列演算については。

・「ボーンの配置と変形アニメーション」
 引用:床井研究室バーテックスブレンディング

という記事が正確に詳しく説明されています。
また、

・「計算の順番 頂点 × BOf行列 × 座標変換行列 × 元に戻す行列」
 引用:スキンメッシュアニメーションの解説

という記事が行優先表記ではありますが、具体例を使って分かり易く説明されています。
 
ボーンアニメーションの行列演算には、いろいろな異なる用語が用いられていて混乱するので、ここでは以下の用語を用いて分かり易く表記することにします。
 
最初に、ボーンを配置する工程では、

・「ボーン空間にあるボーンをモデル空間に置く」と考える。
・モデル空間に配置されたボーンの座標値は、
モデル空間に配置されたボーン座標ボーン姿勢行列ボーン空間でのボーン座標
で表される。

という行列演算が用いられます。
ここで、

ボーン姿勢行列:   ボーンをモデル空間に配置する行列(初期姿勢行列とも呼ばれる)で、ボーンオフセット行列の逆行列

を表します。
 
この動作は、ボーンが存在する座標系(ローカル空間とかボーン空間とかジョイント空間などいろいろな用語が使われる)をボーンが配置される座標系(ワールド空間とかモデル空間などどいろいろな用語が使われる)に変換する処理でありますが、Blenderでは単にボーンの座標を設定しているだけです。
 
次に、ボーンの座標を変換する工程では、

・「モデル空間にあるボーンの座標を変換する」と考える。
・「その座標変換では、一旦ボーンをボーン空間に戻して、ボーン空間で座標変換処理を行い、最後に再びモデル空間に戻す」と考える。
・モデル空間で座標変換されたボーンの座標値は、
モデル空間での変換後のボーン座標
 
ボーン姿勢行列変換行列ボーンオフセット行列モデル空間での変換前のボーン座標
で表される。

という行列演算が用いられます。
ここで、

変換行列:      ボーンの座標値を変換させる行列
ボーンオフセット行列:InverseBindMatricesに相当する、モデル空間のボーンをボーン空間に戻す行列で、ボーン姿勢行列の逆行列

を表します。
 
ボーンの座標値が変化するアニメーションでは変換行列が使用されますが、特に回転変換の場合には、回転中心が原点でないと、よく知られた回転行列を用いることができないため、ボーンを一旦ボーン空間に戻し、そのボーン空間の原点を回転中心として回転行列を施して回転変換を行い、その後再びモデル空間に戻すという処理が行われています。
 

ボーンアニメーションにおけるボーンオフセット行列

 
ここではボーンアニメーションに用いられるglTFファイルのinverseBindMatricesの働きをできるだけ具体的に説明します。
 

具体例1(ボーンの配置)

 
具体例1は1個のボーン(Bone)を配置するだけの単純な例です。
 
前回の3D画像ファイルのアニメーションとは?と同様に、glTFファイルの生成には、著名なオープンソースの3DCGソフトであるBlenderから出力されたファイルを用います。
 
前回と同様に、「オブジェクトの追加」機能で1個のアーマチュア(BlenderではBoneのこと)を設定します。
立方体(Cube)は位置関係を示すために削除しないでワイヤフレームにして、Boneの形状はデフォルトの8角形にしておきます。
位置をx +1m、y +1m、z +1m、回転は0、スケールは1に設定します。
この配置状態を【図1】に示します。
 

imgP12_1
【図1】

【図1】は、Blenderでは単にボーンの座標を設定しているだけですが、これを【図2】に示すように、ボーンをモデル空間とは別のボーン空間にあると考えて、そのボーンを移動させて配置すると考えると行列演算が分かりやすくなると思います。
 

imgP12_2
【図2】

この状態でBlenderからエクスポートされたglbファイルのJSONデータを調べると、ジオメトリを示す"skins"情報は、
 "skins": [
  {
  "inverseBindMatrices": 2,
  "joints": [
  ],
  "name": "30a230fc30de30c130e530a2"
  }
 ],
となっています。 
"accessors"情報は、
 "accessors": [
   カラム0省略
   カラム1省略
カラム2は、
 {
  "bufferView": 2,
  "componentType": 5126,
  "count": 1,
  "type": "MAT4"
 },
となっています。
カラム2の"inverseBindMatrices"のデータは、"componentType": 5126により4Byteの浮動小数点(単精度float)で、"type": "MAT4"により4x4 行列が"bufferView": 2のバッファに格納されています。
 
その4x4 行列の値は10進表記で、(1,0,0,0),(0,1,0,0),(0,0,1,0),(-1,1,1,1)となっています。括弧は分かり易いように付与しています。
前述したように。これを普通に読めば、(1行目)、(2行目)、(3行目)、(4行目)の行列になると思えるのですが、glTF仕様書により、(1列目)、(2列目)、(3列目)、(4列目)の行列とみなす(あるいは転置行列にする)必要があるので、

 

$$\mathsf{inverseBindMatrices} =\begin{bmatrix} 1 & 0 & 0 & -1 \\ 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & 1 \\ 0 & 0 & 0 & 1 \end{bmatrix}$$

となります。
 
このinverseBindMatrices(ボーンオフセット行列)の逆行列がボーン姿勢行列になるので、inverseBindMatricesの逆行列を求めると、
 

$$\textbf{ボーン姿勢行列} =\begin{bmatrix} 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & -1 \\ 0 & 0 & 0 & 1 \end{bmatrix}$$

となります。
 
ボーンを【図1】の位置に配置する際、ボーンの座標、例えば(x=0,y=0,z=0)の点が(x=1,y=1,z=1)に平行移動(オフセット)されたことになり、
モデル空間に配置されたボーン座標ボーン姿勢行列ボーン空間でのボーン座標
の式で配置後のボーン座標が設定されます。
 

配置後座標の確認(ボーンの始点の場合):

このボーン配置のオフセット処理は、ボーンの座標系全体がオフセットされるので、ボーンの始点とかの特定の点に限定されるのではありません。
例えばボーン空間でのボーンの座標の(x=0,y=0,z=0)の点に対しては、座標変換のために同次座標(x=0,y=0,z=0,w=1)を使って、
 

配置後座標(Bone始点)=
$$\begin{bmatrix} 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & -1 \\ 0 & 0 & 0 & 1
\end{bmatrix}・\begin{bmatrix} 0 \\ 0 \\ 0 \\ 1\end{bmatrix}=\begin{bmatrix} 1 \\ 1 \\ -1 \\ 1\end{bmatrix}$$

が計算されて、(x=1,y=1,z=-1)の配置後座標が得られます。
 
この配置後座標(x=1,y=1,z=-1)はBlenderで【図1】の位置に配置した(x=1,y=1,z=1)とは符号が異なっています。
これは、3D画像ファイルのカメラデータとは?で述べたように、Blenderの座標系が上方向+Z、右方向+X、奥方向+Yになっていて、glTFファイルの座標系の上方向+Y、右方向+X、奥方向-Zと異なっていることが原因で、Blenderが、あたかも上方向+Y、右方向+X、奥方向-ZとみなしてglTFファイルをエクスポートしているためです。
 

配置後座標の確認(ボーンの先端の場合):

ボーン空間でのボーンの先端に当たる座標の(x=0,y=1,z=0)の点に対しては、座標変換のために同次座標(x=0,y=1,z=0,w=1)を使って、
 

配置後座標(Bone先端)=
$$\begin{bmatrix} 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & -1 \\ 0 & 0 & 0 & 1
\end{bmatrix}・\begin{bmatrix} 0 \\ 1 \\ 0 \\ 1\end{bmatrix}=\begin{bmatrix} 1 \\ 2 \\ -1 \\ 1\end{bmatrix}$$

が計算されて、(x=1,y=2,z=-1)の配置後座標が得られます。
【図1】のボーン先端が上に突き出ている位置を表しています。
 

具体例2(ボーンの変換)

 
具体例2は1個のボーン(Bone)だけがX軸周りに90゜回転するだけの単純なアニメーションで、まだBoneに付随する3D物体との関連付けは行っていません。
前報3D画像ファイルのアニメーションとは?の具体例2に相当します。
 
Blenderで、animationモードでアーマチュアの上記初期状態を0フレームを登録し、アーマチュアのx回転角を90゜にして120フレームに登録します。終了は140フレームに設定しました。
Blenderでのアニメーションの様子を見ていただくために、Blenderの出力機能で動画であるaviファイルを出力し、aviファイルはデータ容量が大きいので、ブラウザで表示させるためaviファイルを適当な外部ツールでデータ圧縮されたwebmファイルに変換した動画を【図3】に表示します。
立方体は位置確認用のためワイヤーフレームにしています。
 

【図3】

 
ボーンの回転制御が一旦ボーン空間に戻した状態を、Blenderでボーンのオフセットを省いて作成した動画を用いて【図4】に表示します。
【図4】はモデル空間の原点を中心に回転しているので紛らわしいのですが、ボーン空間にあるとみなしてオフセットの様子を見ていただければと思います。
 

【図4】

 
【図2】のようにボーンがアニメーションされると、モデル空間で座標変換されたボーンの座標値は、
モデル空間での変換後のボーン座標
 
ボーン姿勢行列変換行列ボーンオフセット行列モデル空間での変換前のボーン座標
の式で変換後のボーン座標が設定されます。
 
ボーンオフセット行列はInverseBindMatricesで、ボーン姿勢行列はボーンオフセット行列の逆行列であり、これらの行列は、アニメーションで刻々変化する変換行列と違って不変ですので、ボーンの座標を変換する行列演算が簡略化されます。
 
しかしながら、この状態でBlenderからエクスポートされたglbファイルのinverseBindMatricesデータを調べると、
 

$$\mathsf{inverseBindMatrices} =\begin{bmatrix} 1 & 0 & 0 & -1 \\ 0 & 0 & 1 & 1 \\ 0 & -1 & 0 & 1 \\ 0 & 0 & 0 & 1 \end{bmatrix}$$

となっていました。
 
inverseBindMatricesの逆行列であるボーン姿勢行列を求めると、
 
 

$$\textbf{ボーン姿勢行列} =\begin{bmatrix}1 & 0 & 0 & 1 \\ 0 & 0 & -1 & 1 \\ 0 & 1 & 0 & -1 \\ 0 & 0 & 0 & 1 \end{bmatrix}$$

となります。
 
これら具体例2のinverseBindMatricesとボーン姿勢行列は、具体例1とBoneを配置した位置は同じであるのに値が異なっています。
 

配置後座標の確認(ボーンの始点の場合):

具体例1と同様の確認を行ってみると、
ボーン空間でのボーンの座標の(x=0,y=0,Z=0)の点に対しては、座標変換のために同次座標(x=0,y=0,Z=0,w=1)を使って、
 

配置後座標(Bone始点)=
$$\begin{bmatrix} 1 & 0 & 0 & 1 \\ 0 & 0 & -1 & 1 \\ 0 & 1 & 0 & -1 \\ 0 & 0 & 0 & 1
\end{bmatrix}・\begin{bmatrix} 0 \\ 0 \\ 0 \\ 1\end{bmatrix}=\begin{bmatrix} 1 \\ 1 \\ -1 \\ 1\end{bmatrix}$$

が計算されて、(x=1,y=1,z=-1)の配置後座標が得られて、具体例1と同じ結果です。
 

配置後座標の確認(ボーンの先端の場合):

しかし、ボーン空間でのボーンの先端に当たる座標の(x=0,y=1,z=0)の点に対しては、座標変換のために同次座標(x=0,y=1,z=0,w=1)を使って、
 

配置後座標(Bone先端)=
$$\begin{bmatrix}1 & 0 & 0 & 1 \\ 0 & 0 & -1 & 1 \\ 0 & 1 & 0 & -1 \\ 0 & 0 & 0 & 1
\end{bmatrix}・\begin{bmatrix} 0 \\ 1 \\ 0 \\ 1\end{bmatrix}=\begin{bmatrix} 1 \\ 1 \\ 0 \\ 1\end{bmatrix}$$

が計算されて、(x=1,y=1,z=0)の配置後座標が得られて、具体例1と異なった結果です。
 
この配置後座標(x=1,y=1,z=0)は、【図5】に示すボーンアニメーションの最終位置のボーン先端座標になっています。
 

imgP12_5
【図5】

 
すなわち、具体例2のBlenderからエクスポートされたglTFファイルのinverseBindMatricesデータは、アニメーションの最終位置のボーンに対するオフセット行列が格納されていることになります。
ボーン始点だけを制御する場合はこれでも良いかも知れませんが、注意が必要と思われます。
 

おわりに

 

・今回はボーンアニメーションを取り上げて、3D画像のglTFファイルに格納されるボーン情報のInverseBindMatricesデータ(ボーンオフセット行列)を調べてみました。

 

・今回もサンプルにしたglTFファイルの作成には、著名なオープンソースの3DCGソフトであるBlenderを使いました。
調べたInverseBindMatricesデータはBlenderが作成したことになります。
ボーンアニメーションに設定した場合に、その設定前と後でInverseBindMatricesデータが異なっていることを知りました。
glTF仕様書にInverseBindMatricesデータ設定の厳密な規定はなく、Blenderの意図も分からなかったので、そのように設定されている理由は不明でした。
BlenderがエクスポートしたglTFファイルのInverseBindMatricesデータがどのように利用されるかについては、更なる調査が必要だろうと考えています。

 

・行列演算では、列優先表記と行優先表記を混同すると、正しい行列演算結果にならないので注意が必要です。
ボーンを一旦モデル空間からボーン空間に戻す処理を行う理由については、「原点でなく任意の点を中心に回転させる回転変換行列が複雑になって処理が重たくなるのを回避するため」であろうと考えています。

 

・ボーンアニメーションの処理方法については、まだ課題が多いので調査を続けていくつもりです。

 
 

sub1title

closeicon

サンシャインブルー工房創設者、管理人の 青木ガンバロ と申します。
団塊世代の一技術者としてかつては開発業務に没頭しておりました。今はたそがれ期に入り、世間では簡単なことであっても、自分にとっては知らない、経験していないことが山ほどあると気付かされます。
限りある時間に、少しでもそういう未経験のテーマに挑戦してみようと思い、本工房を立ち上げることにしました。
 
いろいろな分野の学習を続けていると、何度も躓いてしまいます。素朴な疑問が湧いてくるのですが、その解答を得るのに手こずります。
膨大な情報の中から欲しい情報を探るのが難しくなっていると感じます。
 
技術を中心としたさまざまな課題を解きほぐし、より本質的な内容を明らかにすることによって、同じように学ぼうとする方々が、素早く答にたどり着けるような情報を発信していければと考えております。
 
このホームページもその挑戦の一つとして独学で制作してきました。
Web技術の多岐にわたる学習が必要であったり、関連する規格やツールなどの仕組みも進化して更新されていくので、最善解に近づくのは容易ではありません。
当初から躓きの連続でありましたが、多くの親切な方々の的確な記事にも助けられて進めてきました。
まだ多くの疑問点が残っております。逐次改善していくつもりです。
 
これまで多くの友人、先輩方の支えがあったお陰で何とか過ごしてくることができました。
人びとの繋がりの大切さを痛感しております。
どこまで頑張れるか分かりませんが、残る力を絞って進んでまいります。
これからも、皆さまのご援助、ご協力をよろしくお願い申し上げます。

sub2title

closeicon

2019-  4-16

・サンシャインブルー工房の個人事業開業

2022-12-22

・ホームページを公開

・ブログ「立方体に写真を貼り付けるツールを作りました」を公開

・ブログ「球体に写真を貼り付けるツールを作りました」を公開

2023-  2-  3

・ブログ「3DにおけるJPEGとは?」を公開

2023-  3-  1

・ブログ「3D画像ファイルの画像とは?」を公開

2023-  4-16

・ブログ「3D画像ファイルのカメラデータとは?」を公開

2023-  5-22

・ブログ「3D画像ファイルの点群とは?」を公開

2023-  6-28

・ブログ「3D画像ファイルのGeoTIFFとは?」を公開

2023-  7-28

・「役立つーる」ページを新設し、最初のオンラインツールGeoTIFFリーダーを公開

・ブログ「GeoTIFFリーダーを作りました」を公開

2023-  8-16

・ブログ「点群におけるLASとは?」を公開

2023-  9- 1

・ブログ「Googleアースに使われるKMLとは?」を公開

2024-  1-16

・ブログ「3D画像ファイルのアニメーションとは?」を公開

2024-  2- 8

・ブログ「ボーンアニメーションのオフセット行列とは?」を公開

2024-  7- 13

・ブログ「3D画像モデルの回転表示とは?」を公開

sub3title

closeicon






    皆さまからの、ご要望、ご依頼、ご質問、ご意見、ご提案などをお待ちしております。
    当方の事情や、お問い合わせの内容によりましては、返信を差し上げることができない場合もあります。あらかじめご了承ください。

    姓 例)日本

    名 例)太郎

    せい 例)にほん

    めい 例)たろう

    例)xxx@abcde.co,jp

    例)いろはに会社


     

    お問い合わせをいただき、ありがとうございます。

    messageOKこのお問い合わせの送信が完了しました。

    お問い合わせがエラーになりました。再度お試しください。

    messageNGこのお問い合わせの送信が失敗しました。

    sub4title

    closeicon
    1.著作権について
    当サイトは、お客さまご自身の画像が貼り付けられてダウンロードされた画像の情報を除き、当サイトに掲載されている、文章・画像・動画等の著作物の情報を無断転載することを禁止致します。
    当サイトは、ブラウザがFirefoxである場合に動画ファイルの生成のためにLPGLv3ライセンスのFFmpegライブラリを使用しています。
    2.リンクについて
    以下の場合を除き、当サイトを他のWebサイトに自由にリンクすることができます。
    (リンクをお断りするWebサイト)
    違法または反社会的な情報を提供するWebサイト
    当サイトの関係者や提供する情報に対して誹謗、中傷する内容を有するWebサイト
    当サイトであることが不明確であるWebサイト
    sub5title

    closeicon
    1.個人情報保護方針
    当サイトは、お客様からお預かりする個人情報の重要性個人情報の重要性を認識し、個人情報の保護に関する法律、その他の関係法令を遵守し、個人情報を安全かつ適切に取り扱います。
    2.個人情報の取得と利用目的
    個人情報を取得させていただくにあたっては、取得情報と利用目的を以下に定め、必要な個人情報のみを、適法かつ公正な手段により取得させていただきます。
     2.1.お問い合わせやご注文時の情報
    (取得情報)
    お客様ご自身によるお問い合わせやご依頼のための入力情報
    (利用目的)
    お客様へのご依頼に対応するため。
     2.2.ご利用履歴情報
    (取得情報)
    アクセス解析ツールGoogle Analyticsを用いた個人を特定しないトラフィックデータ
    (利用目的)
    ご利用状況の分析により当サイトの一層の改善や拡充を図るため
    このGoogle Analyticsの規約に関する詳細は、ここをクリックしてください。
     2.3.広告管理情報
    (取得情報)
    広告表示ツールGoogle AdSenseを用いた個人を特定しない広告管理データ
    (利用目的)
    お客様の興味に応じた商品やサービスの広告配信のため
    このGoogle AdSenseの規約に関する詳細は、ここをクリックしてください。
    3.個人情報の第三者への開示
    当サイトは、お客様からお預かりした個人情報を、個人情報保護法その他の法令に基づき開示が認められる場合、または、お客様からの同意を得た場合を除き、第三者に提供することはありません。
    4.クッキー(Cookie)について
    クッキー(Cookie)とは、当サイトにアクセスした際にお客様のブラウザに送信され、お客様のコンピューターに保存される情報のことです。
    当サイトでは、利用履歴の収集および広告の管理のためにそのクッキーを使用しています。
    当サイトが使用するクッキーのデータは、個人情報を含むものではありませんが、お客様がブラウザを操作することにより、クッキーの使用を制限(オプトアウト)することや、保存されたクッキーの情報を削除することも可能です。ただし、そのブラウザの設定によっては、当サイト一部の機能が使用できなくなる恐れがありますのでご注意ください。
    5.個人情報保護方針の変更
    当サイトは、法令の制定、改正等により、本個人情報保護方針を適宜見直し、予告なく変更する場合があります。本個人情報保護方針の変更は、変更後の内容が閲覧可能となった時点で有効になります。
    6.免責事項
    当サイトは、正確な情報を掲載するよう努めておりますが、誤情報の混入、情報の陳腐化が起こることがあります。当サイトに掲載された内容や、他のサイトに移動された場合の移動先サイトで提供される情報によって生じた損害等の一切の責任を負いかねますのでご了承ください。