SlideShare a Scribd company logo
Shader読んで理解する会
Renard
4次元結び目SDF編
1
紹介するシェーダ
Figure-8 Knot (Implicit in R4) by iq
iqさんの一番最近の作品
2
これは何?
4次元超球面上で結び目の曲線を求てSDFにしている
曲線の進行方向と回転に相対的なuv座標が得られる為、それを二次
元のSDFに入れることで最終的なSDFの形状を変化させている
3
解説の流れ
超球面上でのテクスチャリングなども行っていますが、全てを解説
するととても長くなってしまうので、重要な部分であるmap関数の
み簡単に解説します
#define SHAPE 0 などは全てデフォルトのままとして解説します。
4
Map-概要
vec2 F( in vec2 u, vec2 v )
vec4 r3_to_s3( in vec3 p )
float field( in vec4 q )
float map( in vec3 p )
{
return field(r3_to_s3(p));
}
(位置)-> (超球面)-> (uv)-> (距離)
r3_to_s3 -> field ( F )
R3
S3
R2
R1
5
r3_to_s3 : (位置)-> (超球面)
inversestereographic を呼び出して回転させて返す
pは今 (vec3)だが、これを逆ステレオ投影(inverse stereographic
projection)して (vec4)にする
ここで は4次元超球面の事です
vec4 inversestereographic(vec3 p)
{
float r2 = 1.0+dot(p,p);
return vec4(2.0*p,r2-2.0)/r2;
}
R3
S3
R3
S3
S3
6
field : (超球面)-> (距離)
F : に通し、2DSDFに通す
F は二つの複素数 を引数に取り、このコードでは8の字結び目
を使用している
得られたvec2は曲線の進行方向と回転に相対的なuv座標

(最終的な結び目のSDFの太さが一定で無いのは、この座標系の基底
ベクトルの大きさが一定では無い為です)
この F について、なぜ結び目を作ることが出来るのかはこの論文で
解説されているみたいですが、理解できませんでした...
S3
R1
R →
4
R2
u, v
7
まとめ
2DSDFで形状を変化できる結び目のSDFが作れる!
4次元超球面上で評価しているため、回転などの動きを加えると面
白い変化が見られる!
実際に結び目の式 を理論的に作るのはトポロジーの理論と前項の
論文を理解する必要がありそうです
F
8

More Related Content

What's hot

[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
Deep Learning JP
 
Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5
Ransui Iso
 
[ Grasshopper ] interpolate curve basic #02 j
[ Grasshopper ] interpolate curve basic #02 j[ Grasshopper ] interpolate curve basic #02 j
[ Grasshopper ] interpolate curve basic #02 j
onioncraft
 
Agdaで回路設計(をしたい)
Agdaで回路設計(をしたい)Agdaで回路設計(をしたい)
Agdaで回路設計(をしたい)
Shunji Nishimura
 
20181214 clebsch gordan_mizuta
20181214 clebsch gordan_mizuta20181214 clebsch gordan_mizuta
20181214 clebsch gordan_mizuta
Rei Mizuta
 
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
Deep Learning JP
 

What's hot (6)

[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
 
Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5
 
[ Grasshopper ] interpolate curve basic #02 j
[ Grasshopper ] interpolate curve basic #02 j[ Grasshopper ] interpolate curve basic #02 j
[ Grasshopper ] interpolate curve basic #02 j
 
Agdaで回路設計(をしたい)
Agdaで回路設計(をしたい)Agdaで回路設計(をしたい)
Agdaで回路設計(をしたい)
 
20181214 clebsch gordan_mizuta
20181214 clebsch gordan_mizuta20181214 clebsch gordan_mizuta
20181214 clebsch gordan_mizuta
 
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
 

Shader読んで理解する会-4次元結び目SDF編