コンピュータグラフィックス
X,Y,Z軸回りの回転行列 まず基本的なことを確認しておきます。 X,Y,Z軸回りの行列を とすると、以下のようになります。 オイラー角とは 3つの角度と回転軸の種類でオイラー角は定義されます。 X,Y,Z軸回りの回転角度をそれぞれ とします。 例えば、種類がXYZ…
はじめに 自分の頭を整理するために本記事を書きます。 自分のためであり、本記事は他人に読まれることを想定していません。予めご了承ください。 回転行列 が 4x4 でも 3x3 でも同じ表記使われていますが、適宜読み替えてください 手のモデル 手のモデルは…
はじめに 31本目 タイトル【blender初心者】10分でモデリング!バスケットゴールをつくろう【Blender2.8】【3DCG】 難易度★★★ チャンネルM design バージョン2.8 マテリアルの有無有り 私が作成した画像 備考Wireframe Modifier の使い方を学べます。 32本目…
はじめに 自分の頭を整理するために本記事を書きます。 自分のためであり、本記事は他人に読まれることを想定していません。予めご了承ください。 手のモデル 手のモデルは以下であるとします。 upperarm, forearm, hand が繋がっていませんが、繋がっている…
CCD IKとは CCD IKとは、目標位置 が与えられたとき、先端ジョイント が目標位置 に一致するようなジョイント の角度を計算する逆運動学のアルゴリズムです。 Cyclic Coordinate Descent Inverse Kinematics の略です。 アルゴリズム 先端に最も近いジョイン…
逆運動学とは スケルトンを構成する1つ以上のジョイントに指定されたワールド姿勢を満たすように、各ジョイントのローカル姿勢を求める計算手順を逆運動学といいます。 英語で Inverse Kinematics です。頭文字を取って IK と呼ばれます。 変数の導入 本記事…
順運動学とは スケルトンを構成するすべてのジョイントのローカル姿勢をもとに、各ジョイントのワールド姿勢を求める計算手順を順運動学といいます。 英語で Forward Kinematics です。頭文字を取って FK と呼ばれます。 具体例を用いた順運動学の計算手順 F…
剛体変換行列 剛体変換行列は回転行列 と平行移動ベクトル を使って、以下のように書けます。 剛体変換行列の積 もう1つの剛体変換行列を回転行列 と平行移動ベクトル で表すと、積は以下のようになります。 剛体変換行列の逆行列 式 より、剛体変換行列の逆…
ボーンの追加 ボーンの編集モードで、テールを選択した状態でE+ドラッグで子のボーンが作成できる 頂点の自動ウェイト オブジェクトモードでメッシュ選択後、Shift押下しながら、ボーンをクリック。すると、メッシュとボーンの両方が選択される。 その状態で…
前提 頂点の接線ベクトル、法線マップは既に存在するものとします。 接空間の法線ベクトルをワールド空間に変換 法線マップに定義されているのは、接空間の法線ベクトルです。 この接空間の法線ベクトルをワールド空間に変換する必要があります。 以下の手順…
はじめに 本記事は、glTF2.0の仕様を私が必要な箇所だけ説明するという内容です。 こちら の記事の gltfOverview2.0-Japanese.png を引用します。 gltfOverview2.0-Japanese.png に一言付けたした内容になっております。 glTF2.0を読み込むプログラムを書く…
本シリーズの目標 glTF2.0 読み込みの汎用プログラムを書くのが目標ではありません。 「スキニングされた右手の glTF2.0 ファイル」を読み込んで表示することを目標とします。 また、glTF2.0出力ソフトとして Blenderを使います。 Blenderのバージョンは 4.1…
お手軽でよい効果をもたらす手法 環境光は定数にすることが多いですが、半球ライトのアルゴリズムを用いると お手軽で少しだけリアルな効果が得られます。 PlayStation3などの今よりGPUの計算速度が劣る環境で採用されていたそうです。 英語では hemisphere …
テクスチャマップから高さマップを求める 高さマップとは、テクスチャマップをグレースケール化して作ります。 黒い部分を 0 (最も低い)、白い部分は 1 (最も高い)として、rgb値に同じ値を格納jし、a値には1を格納するのが普通だと思います。 高さマップが固…
スネルの法則 入射角 と透過角 の間には次の関係式が成り立ちます。 ここで、 は透過前の媒質の屈折率、 は透過後の媒質の屈折率です。 屈折ベクトル 単位法線ベクトル 、光源へ向かう単位方向ベクトルを とします。 透過光が進む方向ベクトルを とします。 …
反射ベクトル 入射角と反射角が等しいという単純な法則をもとに計算します。 単位法線ベクトル 、光源へ向かう単位方向ベクトルを とします。 求める反射ベクトルを とします。 下図から分かるように、 から までの距離は、 からそれを法線ベクトルに射影し…
影の平面投影 影を表現するときによくテクスチャ(投影マッピング、デプスマッピング)が使われますが、平面投影に限っては不要です。 影を単なる行列で表現できます。 GPUが早くなった今でも影を平面に投影する機会もあるんじゃないかと思って、本記事を書く…
はじめに GPU Gem3 - 8.4 Variance Shadow Mapsで、シャドウマップのモーメントを計算している箇所があるんですが、 そこを行間を補って丁寧に解説するという記事です。 実際のアルゴリズム 頂点シェーダで深度値(光源から見た時のZ値)を計算しoutします。 …
はじめに 本記事はあまり自信ありません。 ですが、少し効果が出たので記事化することにします。 バリアンスシャドウマップとは 普通のシャドウマップは「光が当たる」か「影になる」かの二択でしたが、 そうではなく、「影になる確率」を求めちゃおうという…
名称について この技法は「シャドウマップ法」、「デプスシャドウマップ法」、「デプスシャドウ法」と呼ばれたりすることもあります。 「シャドウマップ」とは、Z値を記憶しているテクスチャのことです。 アルゴリズム 1. シーンを光源から光が遮蔽されるま…
鏡面反射 鏡面反射は光沢のある表面を表現することができます。 正反射方向に鋭く反射し、正反射方向から少し外れると急激に明るさが減少します。 フォン反射モデル 光源方向を表す単位ベクトルを 、単位法線ベクトルを 、正反射方向ベクトルを とし、視線方…
ランバートの法則 単位面積当たりに照射するするエネルギーは、法線ベクトルと光源方向ベクトルの内積で決まります。 これをランバートの法則と言います。 拡散反射率 単位法線ベクトルを 、光源方向を表す単位ベクトルを 、そのなす角を としたとき、 単一…
glTFとは glTF (GL Transmission Format) はJSONによって3Dモデルやシーンを表現するフォーマットであります。 「3DにおけるJPEG」と表現されることもあります。 glTF2.0のみを扱う glTF 2.0は2017年6月5日のWeb3D 2017 Conferenceで正式発表されました。 Bl…
はじめに Catmull-Clark subdivision surfaceのErkamanの実装を見つけたので、解説します。 該当ソースはindex.jsの_catmullClark関数です。1行ずつではありませんが、全て解説します。 0. 引数 positionsは点配列でArray<Array<number>>やArray<float32Array>です。 cellsは面配列で、Ar</float32array></array<number>…
Catmull–Clark subdivision surfaceとは Catmull–Clark subdivision surfaceとは、2024年現在使われているOpenSubdivの元になったアルゴリズムです。 BlenderもShade3DもOpenSubdivに対応しているようです。 Catmull-Clark Subdivisionに解説していくので、…
はじめに 鏡映変換を2回行うことで回転変換は実現できるという記事で2つの鏡映変換から回転を生み出したわけですが、 この逆はできるんかとちょっと気になったので考えてみました。 (本記事は参考リンクの続編的な記事です。) 導出(※一意には定まらないこと…
剛体変換行列とは 剛体変換行列 は、回転行列 と平行移動ベクトル を使って、以下のように表せます。 剛体変換行列の積が剛体変換行列であることの確認 もう1つ剛体変換行列を用意します。 剛体変換行列 は、回転行列 と平行移動ベクトル を使って表されると…
はじめに 「任意軸回りの回転が回転行列である」ことと「回転行列の積は回転行列である」こと、この2つのことを当たり前のように使っていたけど、 確認してなかったなとおもったので計算することで確認しました。 回転行列の必要十分条件 参考文献によると、…
オイラーの定理とは オイラーの定理ってたくさんあるんですが、今回のオイラー定理は回転に関するものです。オイラーの定理 3次元空間の任意の回転 はある回転軸 の周りのある回転角 の回転である。回転行列を何回も掛けた回転行列でも任意軸回りの回転で表…
ScLerpとは 英語で「Screw Linear Interpolation」です。 日本語に無理やり訳すと「ねじ線形補間」とか「らせん線形補間」とかになるんですかね。 本記事では、そのまま ScLerp を書くことにします。 ねじパラメータを二重四元数に変換 本記事は、剛体変換を…