ゲームグラフィックス特論 第10回

60
ĪőŅĩŋĿĤijĨĮÇ ª108 @ĎĚĝt

description

環境光, 環境マッピング, 放射照度マップ, 放射照度マップの球面調和関数近似

Transcript of ゲームグラフィックス特論 第10回

Page 1: ゲームグラフィックス特論 第10回

ĪőŅĩŋĿĤijĨĮ�Ç�ª108ê�@ĎĚĝ�t�

Page 2: ゲームグラフィックス特論 第10回

59ď�ĎĚĝß]��@��

2

Page 3: ゲームグラフィックス特論 第10回

�f��ďpN�H�

•  l s4ďaO©�Àêdωi ďpNÎUŒl¨Üêt, b, nœ�

• ��ºâ�ďûď��ĎĚĝpN�U�

• þă÷ĆĉŔ��ºâ�ďE���öěďpN�UĐ�

n l

θi dωi

3

Li(l) =dE

d!icos✓i

dE = Li(l)d!icos✓i

Ω�

E =

Z

⌦Li(l) cos ✓id!i

Page 4: ゲームグラフィックス特論 第10回

pNÎU�

• BRDFďêHµ

•  v s4ĒďpNÎUêLo(v) Đ�

• �V�Ċºāđ�

ĚĜ�

v l n

t φi φo

φ

θo θi

4

Lo

(✓o

,�o

) =

Z 2⇡

�i=0

Z⇡/2

✓i=0f(✓

i

,�i

, ✓o

,�o

)⌦ Li

(✓i

,�i

) cos ✓i

sin ✓i

d✓i

d�i

(d!i = sin ✓id✓id�i)

f(l,v) =dL

o

(v)

dE(l)

dE = Li(l)d!icos✓i

Lo

(v) =

Z

⌦f(l,v)⌦ L

i

(l) cos ✓i

d!i

Page 5: ゲームグラフィックス特論 第10回

��

• E�ď�ÖĠ"Ĝ0ĆăĘď�

n

v θiL

EL lL

ωL n

v LL

���ŖS¹�³�â���

Lo

(v) =

Z

!L

f(l,v)⌦ LL

cos ✓i

d!i

⇡ f(lL

,v)⌦ EL

cos ✓iL

5

Page 6: ゲームグラフィックス特論 第10回

G�kq/Nâ�

• G�kq/NâďpNÎUĐpN�UĎ��Āĝ�

• þă÷ĆĉŔûďpN�UĐ�

6

cdiff Đâďkq/N¸�Lo

(v) =cdiff

⇡E

E =

Z

!L

LLcos✓id!i

⇡ ELcos✓iL

Page 7: ゲームグラフィックス特論 第10回

e(p)

p

n

Θ

pl

Li(p, l)

ŁĨĶōpN�U�

�êp Đ�îč\ęDøýępNÎU!Qď��Ď9ĔĞĉòĝ�

ûĞĠêe ďs4öě&|Āĝ�Ďá¯ĀĝŒŁĨĶōpN�Uœ�

Θ Đêp Ġ9Ė����

: p öěêl s4ďpNÎU�

7

Li(p, l) e(p) =

Z

⇥Li(p, l)ld!i

Page 8: ゲームグラフィックス特論 第10回

e(p) pn

p

ŁĨĶōpN�UĎĚĝpN�U�

�6ďpN�U�ºâ (n ďs4) ďpN�Uöě¼âďpN�UĠXòăĘď�

¼âĎ�÷[ăěčúĞđ

8

E(p,n)� E(p,�n) = n · e(p)

E(p,n) = n · e(p)E(p,�n) = 0

Page 9: ゲームグラフィックス特論 第10回

ŁĨĶōpN�Uċ�Ú�

• ŁĨĶōpN�UĐ.�ď�Ú÷MÈ�•  �čĝ¸ď��÷�ôěĞăċø�

•  á¯þăŁĨĶōĐ�ÚüċĎ�čĝs4Ġ4ù�

•  �ĉď��÷3ÿĮłĨĶō!Qďċø�•  ŁĨĶōĐ�ĉ3ÿs4Ġ4ù�

•  þă÷Ćĉ

•  �bêpL -^êrL ď��ď�� (ºâďpNÎUêLL)�

pL�

p�l�

rL�

9

l =e(p)

|e(p)| , EL = cL|e(p)|

l =pL � p

|pL � p| , EL =⇡r2Lr2

LL

r�

Page 10: ゲームグラフィックス特論 第10回

�@��

• Ül�ďpNÎU÷&|s4ĎMþĉ�AĊñĝċĕčĀ�•  pNÎUĐHrĊºýĞĝ→ LA

• Ül�÷čòĬőŐĐ��ŌģōĊĐčò�•  ��ď�÷[ăěčòÖ!ĐG�Ďé�

LA�

10

Page 11: ゲームグラフィックス特論 第10回

�@��

�@�čþ� �@�ñĜ�

11

Page 12: ゲームグラフィックス特論 第10回

�@�ĎĚĝpNÎU�

• pNÎUĐâď�³ên ę¿³êv Ď�Ý��

• ĬĦőĵĤŐĩďàĐûĞĠ¤l�ďg!Ď)ôĝ�

12

Lo

(v) =

cdiff

⇡⌦ ⇡L

A

+

nX

k=1

ELkcos✓ik

!

Lo

(v) =

Z

⌦f(l,v)⌦ L

i

(l) cos ✓i

d!i

=

cdiff

⇡⌦ L

A

Z

⌦cos ✓

i

d!i

= cdiff

⌦ LA

Page 13: ゲームグラフィックス特論 第10回

�@�ĎĚĝpNÎU�

• �fďêBRDF ĎMþĉ�

• �@�/N�êRA(v)

13

Lo

(v) = LA

Z

⌦f(l,v) cos ✓

i

d!i

+

nX

k=1

f(lk

,v)ELkcos✓ik

RA(v) =

Z

⌦f(l,v) cos ✓id!i

�@�ď/N�Đ¿�Ď�FĀĝ�

Page 14: ゲームグラフィックス特論 第10回

�@�ĎĚĝpNÎU�

• �@�ď/N�rêcamb

14

Lo

(v) = camb

⌦ LA

+

nX

k=1

f(lk

,v)ELkcos✓ik

kq/N¸êcdiff ċ«þò�

kq/N¸êcdiff Ùâ/N¸êcspec�

Øĕ�ú7�

Page 15: ゲームグラフィックス特論 第10回

�@ńijľŐĩ�59ď��ďĴĨĮIJňĎĚĝº��

15

Page 16: ゲームグラフィックス特論 第10回

�@ńijľŐĩê(Environment Mapping) • �@Œ59ďewœĠĴĨĮIJňċþĉńijľŐĩĀĝ�

•  xâĒďuĜÐĕĠo ¢Ďº�Āĝ�•  /NńijľŐĩê(Reflection Mapping)

• iåď���•  ¿�öě¡NýĞă¿³÷��ºâ�Ċ/Nþăs4Ġ�ėĝ�•  /Ns4Ď´öĞăĴĨĮIJňĠ�{+þĉŔ��ºâ�ď/N�ďß]­Ď�ó

• i� •  Blinn ċ Newell ďs� •  Sphere Mapping •  Cube Mapping •  Dual Paraboloid Mapping�

16

Page 17: ゲームグラフィックス特論 第10回

Environment Mapping �

�����

v rn

r = 2 n ⋅v( )n− v

17

Page 18: ゲームグラフィックス特論 第10回

Blinn ċêNewell ďs��• /NŁĨĶōĠ�V�ĎAmĀĝ�

• �V�ďĻŋņőİĠ�ĆĉĴĨĮIJňĠ�{+�

• ĴĨĮIJň��Đï�Ë�¬:�ð�

x

yn

l

q

q

l

0</ /2 0 / /2 /

/ /2

/ r = (rx, ry, rz)v

</

18

r = (rx

, ry

, rz

) = 2(n · v)n� v⇢ = acos(�r

z

)� = atan2(r

y

, rx

)

Page 19: ゲームグラフィックス特論 第10回

ĺőĴijĨĮĬĦőı�#version 150 core !in vec4 pv; // ã��´!in vec3 nv; // ã�ď�³ŁĨĶō !uniform mat4 mw; // ŇĵōĽʼnőAm¹# !uniform mat3 mg; // �³Am¹#!out vec2 t; // ĴĨĮIJňV�!const float PI = 3.141593; !void main(void) !{ ! vec3 v = -normalize(mw * pv).xyz; // ¿³ŁĨĶō ! vec3 r = reflect(v, normalize(mg * nv)); // ¿³ď�/Ns4! float s = -acos(r.z) / PI; ! float t = atan(r.y, r.x) * 0.5 / PI + 0.5; ! t = vec2(s, t); ! …�

19

Page 20: ゲームグラフィックス特論 第10回

Sphere Mapping • ��ĒďuĜÐĕĠ�@ńijŀĎ�ó�

•  ĴĨĮIJňĐ��ďÙĠn]þĉ`ěĞĝ�•  ħņŋ÷uĜûġĊþĔó

•  ¿³s4öě¾ăuĜÐĕďĴĨĮIJňĠ��Āĝ •  ¿³s4ĠAyĊøčò�

20

ĴĨĮIJň��� �Ď�@ńijľŐĩ� ŃijĶĎ�@ńijľŐĩ�

Page 21: ゲームグラフィックス特論 第10回

Sphere Mapping ď>T¹#�u = (ux,ux,ux)

h = (hx,hx,hx)

v = (vx,vx,vx)

zx

y

O

n

n'r

z'

y'

v'

21

Ms

=

0

BB@

hx

hy

hz

0ux

uy

uz

0vx

vy

vz

00 0 0 1

1

CCA

Sphere Mapping ď>T¹#�

v0 = (0, 0, 1)n0 = Msnr = 2(n0 · v0)n0 � v0

Page 22: ゲームグラフィックス特論 第10回

/Ns4ċĴĨĮIJňV��

/NŁĨĶō�

¿³ŁĨĶō�

þă÷Ćĉ�ÜŁĨĶōĐ�O

v' = (0, 0, 1)

z'

y'n' = (n'x, n'y, n'z)

r

v

h

(n'x, n'y)

22

v0 = (0, 0, 1)

r = (rx

, ry

, rz

)

h0 =(r

x

, ry

, rz

+ 1)qr2x

+ r2y

+ (rz

+ 1)2= n0

m =qr2x

+ r2y

+ (rz

+ 1)2 n0 =

✓rx

m,ry

m,rz

+ 1

m

Page 23: ゲームグラフィックス特論 第10回

�³ŁĨĶōċĴĨĮIJňV�ďMc�

n'n'x

n'y

y'

x'O

-1

-1

1

1

O 1

1

u

v

u

v

23

m =qr2x

+ r2y

+ (rz

+ 1)2

u =n0x

2+

1

2=

rx

2m+

1

2

u =n0y

2+

1

2=

ry

2m+

1

2

Page 24: ゲームグラフィックス特論 第10回

ĺőĴijĨĮĬĦőı�#version 150 core !in vec4 pv; // ã��´!in vec3 nv; // ã�ď�³ŁĨĶō !uniform mat4 mw; // ŇĵōĽʼnőAm¹# !uniform mat3 mg; // �³Am¹#!uniform mat3 ms; // Sphere Mapping ď>T¹#!out vec2 t; // ĴĨĮIJňV�!void main(void) !{ ! t = normalize(ms * n).xy * 0.5 + 0.5; ! … !

24

Page 25: ゲームグラフィックス特論 第10回

Cubic Environment Mapping�• ©s�Ď�@ńijŀĠÉĜ�úĝ�

•  ĴĨĮIJň��Đř~�ó�•  /Ns4ĎČďĴĨĮIJň÷ñĝö$%Āĝ�

25

Page 26: ゲームグラフィックス特論 第10回

ĴĨĮIJňďÕj�

26

Page 27: ゲームグラフィックス特論 第10回

ņĥŐŀŏĩŋŅ� glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, internal, ! WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, textureNX); ! glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, internal, ! WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, texturePX);� glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, internal, ! WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, textureNY);� glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, internal, ! WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, texturePY);� glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, internal, ! WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, textureNZ);� glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, internal, ! WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, texturePZ);��

27

Page 28: ゲームグラフィックス特論 第10回

ĿŋĩņŐĶĬĦőı�#version 150 core !… !!uniform samplerCube cubemap; // Cube Map ď sampler !… !!in vec3 r; // /Ns4ŁĨĶōĐĺőĴijĨĮĬĦőıĊ­þĉõù !… !!void main(void) !{ ! vec4 rcolor = texture(cubemap, r); // /Ns4ď¸! … !�

28

Page 29: ゲームグラフィックス特論 第10回

Dual Paraboloid Mapping

• p�âĒďuĜÐĕĠ�@ńijŀĎ�ó�• Ř~ďĴĨĮIJňĠ�ó�

• Ñ ¢Ďè¥ŎŐįĊn]þă��÷��Ċøĝ�• è¥ŎŐįĠ�ôđħņŋ÷uĜÐĖûċĐčò�

1

-1

10

y = x2������

0.25

����� ��������

-0.4 -0.2 0.2 0.4

-1.5

-1

-0.5

0.5

1

1.5

d

θ$

29

d =pu2 + v2

✓ = arctan

✓d

0.25� d2

Page 30: ゲームグラフィックス特論 第10回

rz

� 0

8><

>:

u =rx

2(1 + rz

)+ 0.5

v =ry

2(1 + rz

)+ 0.5

)

0

BB@

1 0 1 10 1 1 10 0 0 00 0 2 2

1

CCA

0

BB@

rx

ry

rz

1

1

CCA

rz

< 0

8><

>:

u =rx

2(1� rz

)+ 0.5

v =ry

2(1� rz

)+ 0.5

)

0

BB@

1 0 1 �10 1 1 �10 0 0 00 0 2 �2

1

CCA

0

BB@

rx

ry

rz

1

1

CCA

Paraboloid Mapping ďĴĨĮIJňV��• /NŁĨĶō�

30

Ċº�ďĴĨĮIJňĠ�{+Āĝ�

Ċ¼�ďĴĨĮIJňĠ�{+Āĝ�

ďċø�

ďċø�

r = (rx

, ry

, rz

)

Page 31: ゲームグラフィックス特論 第10回

Ř~ďĴĨĮIJňď2g�

31

Page 32: ゲームグラフィックス特論 第10回

OpenGL ď;H�¶Ġ�ĆăI»�• ã�ďĴĨĮIJňV�ċþĉê(rx, ry, rz, 1)T ĠÄHĀĝ�• ĴĨĮIJňAm¹#Ď(Ãď¹#ĠÄHĀĝ�

• ºċ¼ď�sďĴĨĮIJňĎMþĉ�{�Ġ�ėĝ�• ńōIJĴĨĮIJňĠ�ĆĉŔûĞěď�{�ď2ÂĠńijľŐĩĀĝ�•  �sďĴĨĮIJňď�{�÷®9�ĎñĞđŔĘó�sďĴĨĮIJňĐ®9B÷�{+ýĞĝ�

•  ®9Bď�{�ĠŗŒéœĎþĉõúđŔRĎČąěö�sĄúďĴĨĮIJňď�{�÷`ěĞĝ •  IĐûĞĐóĔùòöčò ì ģōĿĢ�ĎĚĝĵħőōčČĠ�òĝ�

•  ûĞĎĚĜCÀ\ďĴĨĮIJňV�÷ºċ¼ď�sďĴĨĮIJňĎĔă÷ĆĉòĉĘ�þùńijľŐĩýĞĝ�

32

Page 33: ゲームグラフィックス特論 第10回

GLSL ĎĚĝI» (ĿŋĩņŐĶĬĦőı)�#version 150 core !… !!uniform sampler2D front; // Øp�âńijŀďºďĴĨĮIJň!uniform sampler2D back; // Øp�âńijŀď¼ďĴĨĮIJň!… !!in vec3 r; // /Ns4ŁĨĶōĐĺőĴijĨĮĬĦőıĊ­þĉõù !… !!main() !{ ! vec2 uv = r.xy * 0.5 / (1.0 + abs(r.z)) + 0.5; ! vec4 rcolor = texture(r.z >= 0.0 ? front : back, uv); ! … !�

33

Page 34: ゲームグラフィックス特論 第10回

�@ńijľŐĩĎĚĝß]­���æ=ďĴĨĮIJňĎĚĝº��

34

Page 35: ゲームグラフィックス特論 第10回

ĹĥŋĥĶńijľŐĩ�

• �@ńijľŐĩĠ�ĆĉĹĥŋĥĶĠº�Āĝ • ¿³ĠZÍê(0,0,1) ċ�·ýāăvď�³ŁĨĶōĠ�ėĝ •  ë1 ≤ x, y ≤ 1ďæ=�Ċêz2 = 1 ë x2 ë y2 Ġ�ėĝ •  z2 > 0 čěê(x, y, z) Ġ�³ŁĨĶōċþĉÙâ/N�ZUĠ�ėĝ • ĂĞĠĴĨĮIJňďê(0.5x + 0.5, 0.5y + 0.5) ď�´Ď�°Āĝ •  Sphere Mapping ĎĚĜûďĴĨĮIJňĠkq/N�ZUĎ)­

35

Page 36: ゲームグラフィックス特論 第10回

ĹĥŋĥĶďĴĨĮIJňĎĚĝÓò�

36

Page 37: ゲームグラフィックス特論 第10回

Åç�

• :ďĚóčÙâ/N�ĐČďĚóĎþĉ`ĝûċ÷Ċøĝö •  �Đ¿³s4ŒĀčğą�âœöě&|ĀĝĘďċĀĝ •  ļŐĶŚ�ď5ÏÖĎÑĈùĎ_Ćĉ�³ŁĨĶōê(x, y, z) ďêxy g!ď�7êx2 + y2 Đê1 ĎÑĈù�

37

Page 38: ゲームグラフィックス特論 第10回

�@ńijŀĿĤōİŌŐĩ�

• �@ńijŀĐuĜÐĕďº�÷1¶�•  ćęęöčâękqâďß]Ďc�Āĝ�

• /N�ĐE¨�ď!QċBRDFď ĕÐĕ�

G�čÙâ/N ŒuĜÐĕœ�

Ùâ/N�ď!Q� kq/N�ď!Q�

38

Page 39: ゲームグラフィックス特論 第10回

ĿĤōİŌŐĩďs��

• �@ńijŀĠ<�ĎēöĀ�•  {[Đ?hĎĚĆĉēús÷�čĝ�•  £ĐLJčďĊ��¢č*�ďs÷ؽ�

39

Page 40: ゲームグラフィックス特論 第10回

�@ńijŀĿĤōİŌŐĩď±��

�ď�@ńijŀ� �@ńijŀĠēöþă?2�

40

Page 41: ゲームグラフィックス特論 第10回

G�kq/NâďE¨�ĎĚĝß]

41

���ŖS¹�³� E¨��

Ω

n

v

Li(l)

l v

θiL

EL lL

41 n

E =

Z

⌦Li(l) cos ✓id!iE = ELcos✓iL

Page 42: ゲームグラフィックス特論 第10回

pN�Uńijŀď�g�

42

Ω : p ďl¨ÜďE¨ n : p ď�³ŁĨĶō l : n ĎMþĉêθi 8Ìþăs4 Li(l) : E¨ďêl s4ďpNÎU�

n

En

θiLi(l)

Ω

pl

E¨Đêp öě,!ÔòĘďċĀĝ�

En =

Z

⌦Li(l) cos ✓id!i

n ďs4Ġ4òăâď pN�UêEn Ġ�WĊ�ėĝ�

ûďêEn ĠpN�Uńijŀď n ďs4Ď�°Āĝ�

Page 43: ゲームグラフィックス特論 第10回

pN�UńijľŐĩ�

43

ģōŁķ×(1 ë Rspec)×pN�Uńijŀ�

+ Rspec×/N�@ńijŀ�

�³ŁĨĶōĊīŐŀŌŐĩ�

/NŁĨĶōĊīŐŀŌŐĩ�

Page 44: ゲームグラフィックス特論 第10回

Cube Map ĎĚĝpN�Uńijŀ��@ńijŀ� pN�Uńijŀ�

44

Page 45: ゲームグラフィックス特論 第10回

pN�UńijŀďÑ �

pN�U!Q�

47

Page 46: ゲームグラフィックス特論 第10回

¤>TÝrďØĕ�ú7ĎĚĝÑ �

Øĕ�úýĞă¤>TÝr

48

Page 47: ゲームグラフィックス特論 第10回

¤>TÝr�

• �§

• ¨Ü¢čÝrĊĐ�

• ¤>TÝrďdÊ�

fi x( ), fj x( ) = fi x( ) fj x( )dx∫

fi n( ), fj n( ) = fi n( ) fj n( )dωΘ∫nŚ�böě4öós4�dωŚ.���ďaOâ§�ΘŚ.�����

fi ( ), fj ( ) =0 i ≠ j1 i = j

"#$

Θ#

dω$

n

49

Page 48: ゲームグラフィックス特論 第10回

¤Ýr>TÝrĎĚĝÝrďÑ �

• Ñ þĚóċĀĝÝrêftarget() ċ¤>TÝr#êfj() ċď�§

• ĚĜŔftarget() Đ�WĊÑ Ċøĝ�

kj = ftarget ( ), fj ( )

ftarget ( ) ≈ kj fj ( )j=1

n

50

Page 49: ゲームグラフィックス特論 第10回

ōĭňŐķōÞÝr�

• ōĭňŐķōCäWŒŏķŌĪĮď�Wœ�

• ōĭňŐķōÞÝr�

• �+W�

Pn x( ) = 12n n!

dn

dxnx2 −1( )

n

Pnm x( ) = −1( )m 1− x2( )

m2 dm

dxmPn x( )

n−m( )Pnm x( ) = x 2n−1( )Pn−1m x( )− n+m−1( )Pn−2m x( )

Pmm x( ) = −1( )m 2m−1( )!! 1− x2( )

m2

Pm+1m x( ) = x 2m+1( )Pmm x( ) P1

0 x( ) = x

P00 x( ) =1

51

Page 50: ゲームグラフィックス特論 第10回

m� n = 0� n = 1� n = 2�

0�

1�

2�

ōĭňŐķōÞÝr�

P11 x( ) = − 1− x2

P00 x( ) =1

P10 x( ) = x

P20 x( ) = 1

23x2 −1( ) P2

1 x( ) = −3x 1− x2 P22 x( ) = 3 1− x2( )

52

Page 51: ゲームグラフィックス特論 第10回

Plm(x)�

-5 -4 -3 -2 -1 0 1 2 3 4 5

-3

-2

-1

1

2

3

l = 0, m = 0l = 1, m = 0l = 1, m = 1l = 2, m = 0l = 2, m = 1l = 2, m = 2

53

Page 52: ゲームグラフィックス特論 第10回

ōĭňŐķōÞÝrďdÊ�

Pim x( )

−1

+1∫ Pj

m x( )dx =0 i ≠ j

22n+1

n+m( )!n−m( )!

i = j = n

$

%&

'&

54

Page 53: ゲームグラフィックス特論 第10回

�âÆ7Ýr�

Klm =

2l +14π

l − m( )!l + m( )!

x, y, z( ) = sinθ cosφ, sinθ sinφ, cosθ( )

Yl,m (✓,�) = (�1)

m+|m|2 Km

l eim�P |m|l (cos (✓))

55

Page 54: ゲームグラフィックス特論 第10回

|Ylm (θ, φ)|� l = 0

l = 1

l = 2

l = 3

m = 0 m = 1 m = 2 m = 3

56

Page 55: ゲームグラフィックス特論 第10回

Ylm (θ, φ) ďIÖ�

l = 0

l = 1

l = 2

l = 3

m = 0 m = 1 m = 2 m = 3m = -1m = -2m = -3

���

���

57

Page 56: ゲームグラフィックス特論 第10回

�âÆ7ÝrďdÊ�

Ylm θ,φ( )Y !l

!m θ,φ( )d cosθ( )dφ−1

+1∫−π

= Ylm θ,φ( )Y !l

!m θ,φ( )sinθdθ dφ0

π

∫−π

∫ = 1 l = !l ,m = !m0 ����{

58

Page 57: ゲームグラフィックス特論 第10回

�âÆ7ÝrPÛ�

f θ,φ( ) = clmYl

m θ,φ( )m=−l

+l

∑l=0

clm = f θ,φ( )Yl

m θ,φ( )−1

+1∫−π

∫ d cosθ( )dφ

= f θ,φ( )Ylm θ,φ( )sinθdθ dφ

0

π

∫−π

∫light probe ���

φ�

(x, y)�

sinθ = x2 + y2

cosθ = z = 1− x2 − y2

59

Page 58: ゲームグラフィックス特論 第10回

pN�Uńijŀď�âÆ7ÝrÑ �

• �@öěďpN�Uď²7êE

•  ûûĊê(x, y, z) Đ�³ŁĨĶōên�

• kq/N�ZUêIdiff�

Idiff = Kdiff ⊗ E( ) fscale

n = x, y, z( ) = sinθ cosφ, sinθ sinφ, cosθ( )

E = k1c22 x2 − y2( )+ k3c20z2 + k4c00 − k5c20

+2k1 c2−2xy+ c2

1xz+ c2−1yz( )

+2k2 c11x + c1

−1y+ c10z( )

k1 = 0.429043k2 = 0.511664k3 = 0.743125k4 = 0.886227k5 = 0.247708

62

Page 59: ゲームグラフィックス特論 第10回

Kç�

• �ďŀŏĩŋŅĐG�kq/Nâď Lambert ď�Y�'ĎĚĝkq/N�ĎĚĝß]Ġ�úă:\Ġ8ÌĀĝģĸņőĬŊŐĠº¦þĔĀŕ •  https://github.com/tokoik/ggsample10

• ûĞĠ�@ďpN�Uńijŀď�âÆ7ÝrĎĚĝÑ Ġ�òăß]�úĎAyþĉùĄýòŕ

• �âÆ7�rĐ uniform Arď×#êsh Ď�°ýĞĉòĔĀŕ •  sh[0] = c0

0, sh[1] = c1-1, sh[2] = c1

0, sh[3] = c11, sh[4] =

c2-2, sh[5] = c2

-1, sh[6] = c20, sh[7] = c2

1, sh[8] = c22

•  ĮłőĮĠİĥŀĀĝċ�rĠ"ĜzôěĞĔĀŕ •  simple.vert ĠņőōĎ��þĉùĄýòŕ

•  ÒĜ�ê[email protected]

�@ďpN�Uď�âÆ7Á}ĎĚĝß]�úĠI»þĉùĄýòŕ�

63

Page 60: ゲームグラフィックス特論 第10回

KçŀŏĩŋŅď�g���

Lambertď�Y�'ĎĚĝkq/N�ďĕ� �@ďpN�Uď�âÆ7ÝrÑ �

64