機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

バリアンスシャドウマップのモーメント計算の行間を補う

はじめに GPU Gem3 - 8.4 Variance Shadow Mapsで、シャドウマップのモーメントを計算している箇所があるんですが、 そこを行間を補って丁寧に解説するという記事です。 実際のアルゴリズム 頂点シェーダで深度値(光源から見た時のZ値)を計算しoutします。 …

バリアンスシャドウマップ

はじめに 本記事はあまり自信ありません。 ですが、少し効果が出たので記事化することにします。 バリアンスシャドウマップとは 普通のシャドウマップは「光が当たる」か「影になる」かの二択でしたが、 そうではなく、「影になる確率」を求めちゃおうという…

シャドウマッピング

名称について この技法は「シャドウマップ法」、「デプスシャドウマップ法」、「デプスシャドウ法」と呼ばれたりすることもあります。 「シャドウマップ」とは、Z値を記憶しているテクスチャのことです。 アルゴリズム 1. シーンを光源から光が遮蔽されるま…

【JavaScript】配列の要素をn回コピーする関数

はじめに 配列の要素をコピーする関数を作成します。 やりたいことを以下のような感じです。 const r = f([1, 2, 3], 3); console.log(r); // [1, 2, 3, 1, 2, 3, 1, 2, 3] 実装 なんとなく以下のような実装にしました。 const f = (a, n) => (new Array(n).…

WebGL2メモ

はじめに 本記事にはWebGL2に関する備忘録です。 WebGL2の習得に有用なサイトについても記載します。 私が後から参照できればよいので、わかりにくいかもしれません。 有用なサイト ・「床井研究室」でググってください。床井先生はCGの神様です。 ・wgld.or…

鏡面反射 - フォン反射モデル

鏡面反射 鏡面反射は光沢のある表面を表現することができます。 正反射方向に鋭く反射し、正反射方向から少し外れると急激に明るさが減少します。 フォン反射モデル 光源方向を表す単位ベクトルを 、単位法線ベクトルを 、正反射方向ベクトルを とし、視線方…

拡散反射 - ランバート反射モデル

ランバートの法則 単位面積当たりに照射するするエネルギーは、法線ベクトルと光源方向ベクトルの内積で決まります。 これをランバートの法則と言います。 拡散反射率 単位法線ベクトルを 、光源方向を表す単位ベクトルを 、そのなす角を としたとき、 単一…

glTFの基本

glTFとは glTF (GL Transmission Format) はJSONによって3Dモデルやシーンを表現するフォーマットであります。 「3DにおけるJPEG」と表現されることもあります。 glTF2.0のみを扱う glTF 2.0は2017年6月5日のWeb3D 2017 Conferenceで正式発表されました。 Bl…

【JavaScript】 Catmull-Clark subdivision surface の実装例

はじめに 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とは Catmull–Clark subdivision surfaceとは、2024年現在使われているOpenSubdivの元になったアルゴリズムです。 BlenderもShade3DもOpenSubdivに対応しているようです。 Catmull-Clark Subdivisionに解説していくので、…

【Blender】アーマチュアとメッシュに親子関係を作る

はじめに 本記事は、Blenderにおけるアーマチュアに関するものです。 私自身アーマチュアの理屈は少し知ってはいますが、Blenderにおけるアーマチュアは全く知らないので一緒に学んでいきましょう。 アーマチュアに似た言葉として、「スキニング」や「vertex…

【Blender】マグカップを作る【超丁寧解説】

作るもの マグカップです。モデリングのみです。 手順 1. Blenderを起動し、ポップアップを消し、立方体を削除する。 ここの手順については、【Blender】ストロー付きカップを作る【超丁寧解説】の手順1~3と同じです。 2.[追加]→[メッシュ]→[円柱]を押下す…

【Blender】ストロー付きカップを作る【超丁寧解説】

はじめに Blenderの使い方をすぐに忘れるので、記事として書こうと思いました。 初めての作品解説なので、超丁寧に書いていきます。 なお、Blenderはインストール済みで日本語化されているものとします。 色付けは書きません。モデリング部分のみです。 まず…

Blenderメモ

初めに 自分用メモです。 箇条書きです。主にモデリング中心です。 間違えていたら、コメントに書いてくれると嬉しいです。 Blenderのバージョン確認方法 メニューの左端のBlenderのアイコン→Blenderについてでバージョンが表示されます。 ⁠2つの軸を固定 sh…

クライアントサイドのみでJavaScriptからPythonの関数を呼べるPyodideの使い方

はじめに Xで見かけたのがきっかけです。 JavaScriptは演算子のオーバーロードができないので、A,Bが行列の時、行列の積ABはプログラムでA@Bのように書けないわけです。 でも、PyodideはPythonが使えるそうなので、numpyも使えちゃうわけです。 なので私のや…

回転軸と回転角から2つの鏡映変換を求める

はじめに 鏡映変換を2回行うことで回転変換は実現できるという記事で2つの鏡映変換から回転を生み出したわけですが、 この逆はできるんかとちょっと気になったので考えてみました。 (本記事は参考リンクの続編的な記事です。) 導出(※一意には定まらないこと…

剛体変換行列の積が剛体変換行列であることの確認

剛体変換行列とは 剛体変換行列 は、回転行列 と平行移動ベクトル を使って、以下のように表せます。 剛体変換行列の積が剛体変換行列であることの確認 もう1つ剛体変換行列を用意します。 剛体変換行列 は、回転行列 と平行移動ベクトル を使って表されると…

「任意軸回りの回転が回転行列である」ことと「回転行列の積は回転行列である」ことの確認

はじめに 「任意軸回りの回転が回転行列である」ことと「回転行列の積は回転行列である」こと、この2つのことを当たり前のように使っていたけど、 確認してなかったなとおもったので計算することで確認しました。 回転行列の必要十分条件 参考文献によると、…

オイラーの定理(任意の回転はある回転軸の周りの回転で表せる)

オイラーの定理とは オイラーの定理ってたくさんあるんですが、今回のオイラー定理は回転に関するものです。オイラーの定理 3次元空間の任意の回転 はある回転軸 の周りのある回転角 の回転である。回転行列を何回も掛けた回転行列でも任意軸回りの回転で表…

二重四元数を使ったScLerp

ScLerpとは 英語で「Screw Linear Interpolation」です。 日本語に無理やり訳すと「ねじ線形補間」とか「らせん線形補間」とかになるんですかね。 本記事では、そのまま ScLerp を書くことにします。 ねじパラメータを二重四元数に変換 本記事は、剛体変換を…

【不可能】3次元の剛体変換を任意点回りの回転に変換することは不可能【不可能】

はじめに こちらの記事で「2次元の剛体変換を任意点回りの回転に変換」ができたので、 3次元でもできるかやってみました。 結論できません。できるとしたら、かなり限定的な条件を満たすときです。 まあ、でもせっかく計算したので、そのログとして本記事を…

2次元の剛体変換を任意点回りの回転に変換

はじめに 剛体変換って、「任意点回りの回転に変換できるんじゃないか」と思って、 まずは、2次元で計算してみるかって記事です。 2次元の剛体変換を任意点周りの回転に変換 剛体変換行列を とします。回転行列を 、平行移動行列を とします。任意点周りの行…

CGでよく見かけるベクトルに関する公式の導出

はじめに CGを勉強していると、よく見かける公式があります。 そういや、導出してなかったなって思ったので、導出することにしました。 どれも地道に計算するだけです。それもまた一興。 ベクトル3重積の公式 ベクトル3重積の公式 に関して以下が成り立つ。[…

剛体変換をねじパラメータで表す

はじめに 「ねじパラメータ」とは、英語で「Screw Parameter」のことです。この訳が一般的かは知りません。 英語のまま使うのが嫌だったので、無理やり日本語にしています。 直線をプリュッカー座標で表す 直線は方向ベクトル と直線上の点の位置ベクトル で…

単位四元数を回転軸と回転角に変換する

単位四元数を回転軸と回転角に変換する 導出に関しては簡単なので、説明はせずに該当するglMatrix.jsのメソッドを貼り付けておきます。 /** * Gets the rotation axis and angle for a given * quaternion. If a quaternion is created with * setAxisAngle,…

回転行列の補間

回転行列の補間とは 回転行列 を回転行列 までパラメータ を使って補間することとします。 線形補間は意味ないことが分かるかと思います。 四元数の球面線形補間 に対する四元数を とします。 この時、補間に対応する変換を示す四元数を とします。 は のな…

鏡映変換を2回行うことで回転変換は実現できる

四元数で示してみる 位置ベクトルを 、平面の単位法線ベクトルを 、2回の鏡映変換後の位置ベクトル は四元数を使って、で表せます。 この の右辺が回転を表すことを示します。この2つの平面のなす角を します。また、 とすると、 は以下のように書けます。よ…

鏡映変換

鏡映変換とは 鏡映変換とは平面で折り返すことです。 位置ベクトルを 、平面の単位法線ベクトルを とすると、鏡映変換後の位置ベクトル はとなります。 鏡映変換を行列で表す 鏡映変換は行列で表すこともできます。 より、鏡映変換 は、以下のように表せます…

剛体変換を表す行列を「二重四元数」と「オイラー角+平行移動」に変換する

剛体変換を表す行列 剛体変換を表す行列 は以下のようになっています。 とします。 の行列から、回転変換と平行移動変換を抽出するのですが、そのためには回転が先か平行移動が先か指定する必要があります。 どちらを指定しても回転変換は同じですが、平行移…

単位二重四元数が表す剛体変換を行列に変換

はじめに 単位二重四元数が表す剛体変換を行列に変換することを考えます。 剛体変換には、「回転後、平行移動」と「平行移動後、回転」の2通りがありました。 それぞれで2通りの方法で行列に変換し、それが一致することを示そうと思います。なので、4通りの…

目次へ戻る