mov v Dest v Src 0 add v

  • Slides: 31
Download presentation

頂点シェーダーの算術命令 mov v. Dest, v. Src 0 コピー add v. Dest, v. Src 0,

頂点シェーダーの算術命令 mov v. Dest, v. Src 0 コピー add v. Dest, v. Src 0, v. Src 1 加算 sub v. Dest, t. Src 0, t. Src 1 減算 mul v. Dest, v. Src 0, v. Src 1 乗算 mad v. Dest, v. Src 0, v. Src 1, v. Src 2 積和 v. Dest=v. Src 0*v. Src 1+v. Src 2 rcp v. Dest, v. Src 0 逆数 rsq v. Dest, v. Src 0 逆数平方根 dp 3 v. Dest, v. Src 0, v. Src 1 3 要素の内積 dp 4 v. Dest, v. Src 0, v. Src 1 4 要素の内積 dst v. Dest, v. Src 0, v. Src 1 距離ベクトル (1, d, d*d, 1/d) max v. Dest, v. Src 0, v. Src 1 最大値 min v. Dest, v. Src 0, v. Src 1 最小値 slt v. Dest, v. Src 0, v. Src 1 未満 (v. Src 0< v. Src 1)? 1: 0 sge v. Dest, v. Src 0, v. Src 1 以上 (v. Src 1<=v. Src 0)? 1: 0 expp v. Dest, v. Src 0 2^x の部分精度v. Dest. z logp v. Dest, v. Src 0 log 2(x) の部分精度v. Dest. z lit v. Dest, v. Src 0 ライティングの部分サポート      v. Src 0. x=N*L v. Src 0. y=N*H v. Src 0. w=power

定数レジスタの設定 D 3 DXMatrix. Scaling(&m. World, s, s, s); // s : メッシュの大きさから決まる拡大率 D

定数レジスタの設定 D 3 DXMatrix. Scaling(&m. World, s, s, s); // s : メッシュの大きさから決まる拡大率 D 3 DXMatrix. Rotation. Yaw. Pitch. Roll(&m, rot. y, rot. x, rot. z); // rot : メッシュの向き m. World = m. World * m; D 3 DXMatrix. Look. At. LH(&m. View, &eye, &look. At, &up); // 視点  注目点 上方向 D 3 DXMatrix. Perspective. Fov. LH(&m. Proj , 60. 0 f * D 3 DX_PI / 180. 0 f // 視野角 , (float)WIDTH/(float)HEIGHT // アスペクト比 , 0. 01 f , 100. 0 f ); // 最近接距離、最遠方距離 m = m. World * m. View * m. Proj; D 3 DXMatrix. Transpose( &m , &m); // 転置 lp. D 3 Ddev ->Set. Vertex. Shader. Constant(0, &m, 4); D 3 DXMatrix. Inverse( &m, NULL, &m. World); // 逆行列 lp. D 3 Ddev ->Set. Vertex. Shader. Constant(8, &m, 4); lp. D 3 Ddev ->Set. Vertex. Shader. Constant(13, &lpos, 1); // ライトの方向 lp. D 3 Ddev ->Set. Vertex. Shader. Constant(16, D 3 DXVECTOR 4(0. 7 f, 0. 6 f, 0. 4 f, 0. 0 f), 1); // ライトの色

描画 #define D 3 DFVF_CUSTOMVERTEX  (D 3 DFVF_XYZ | D 3 DFVF_NORMAL |

描画 #define D 3 DFVF_CUSTOMVERTEX (D 3 DFVF_XYZ | D 3 DFVF_NORMAL | D 3 DFVF_TEX 1) lp. D 3 Ddev ->Set. Vertex. Shader (h. Vertex. Shader); lp. D 3 Ddev ->Set. Stream. Source (0, mesh. p. VB, sizeof(D 3 D_CUSTOMVERTEX)); lp. D 3 Ddev ->Set. Indices (mesh. p. Index, 0); for(DWORD I = 0; I < mesh. dw. Num. Materials; i++){ lp. D 3 Ddev->Set. Vertex. Shader. Constant(15, D 3 DXVECTOR 4( mesh. p. Materials[i]. Diffuse. r, mesh. p. Materials[i]. Diffuse. g, mesh. p. Materials[i]. Diffuse. b, 0. 0 f), 1); // メッシュの色を反映 lp. D 3 Ddev->Set. Texture(0, mesh. p. Textures[i]); lp. D 3 Ddev->Draw. Indexed. Primitive(D 3 DPT_TRIANGLELIST, mesh. p. Subset. Table[i]. Vertex. Start, mesh. p. Subset. Table[i]. Vertex. Count, mesh. p. Subset. Table[i]. Face. Start * 3, mesh. p. Subset. Table[i]. Face. Count); }

今回のネタ本 • Kajiya, James T. and Timothy L. Kay, “Rendering Fur with Three Dimensional

今回のネタ本 • Kajiya, James T. and Timothy L. Kay, “Rendering Fur with Three Dimensional Textures. ” (SIGGRAPH 89 conference proceedings) • Dan, B. Goldman, “Fake Fur Rendering. ” (SIGGRAPH 97 conference proceedings) 101, Mars Attacks

Kajiya らの Fur 2 使う変数を導出 r 0 = 法線、 r 1 = e =

Kajiya らの Fur 2 使う変数を導出 r 0 = 法線、 r 1 = e = 視点 - 頂点 mul r 4, r 0. zxyw, c 13. yzxw ; r 4 = n×l mad r 4, r 0. yzxw, c 13. zxyw, -r 4 dp 3 r 4. w, r 4, rsq r 4. w, r 4. w ; r 4. w = 1/|n×l| rcp r 4. w, r 4. w ; r 4. w = |n×l| = sin(n, l) mul r 5, r 0. zxyw, r 1. yzxw ; r 5 = n×e mad r 5, r 0. yzxw, r 1. zxyw, dp 3 r 5. w, r 5, rsq r 5. w, r 5. w ; r 5. w = 1/|n×e| rcp r 5. w, r 5. w ; r 5. w = |n×e| = sin(n, e) dp 3 r 2. w, r 0, c 13 ; r 2. w = n・l dp 3 r 2. y, r 0, r 1 ; r 2. y = n・e r 4 r 5 ; r 4. w = (n×l)^2 -r 5 ; r 5. w = (n×e)^2

Goldman の Fur 2 使う変数を導出 r 0 = 法線、 r 1 = e =

Goldman の Fur 2 使う変数を導出 r 0 = 法線、 r 1 = e = 視点 - 頂点 mul r 4, r 0. zxyw, c 13. yzxw ; r 4 = n×l mad r 4, r 0. yzxw, c 13. zxyw, -r 4 dp 3 r 4. w, r 4 rsq r 7. x, r 4. w ; r 7. x = 1/|n×l| rcp r 4. w, r 7. x ; r 4. w = |n×l| = sin(n, l) mul r 5, r 0. zxyw, r 1. yzxw ; r 5 = n×e mad r 5, r 0. yzxw, r 1. zxyw, -r 5 dp 3 r 5. w, r 5, rsq r 7. y, r 5. w ; r 7. y = 1/|n×e| rcp r 5. w, r 7. y ; r 5. w = |n×e| = sin(n, e) dp 3 r 2. w, r 0, c 13 ; r 2. w = n・l dp 3 r 2. y, r 0, r 1 ; r 2. y = n・e r 5 ; r 4. w = (n×l)^2 ; r 5. w = (n×e)^2

Goldman の Fur 3 KajiyaらのFur r 0 = 法線、 r 1 = e =

Goldman の Fur 3 KajiyaらのFur r 0 = 法線、 r 1 = e = 視点 - 頂点 r 4 = n×l、 r 5 = n×e 、 r 2. w = n・l、 r 2. y = n・e、 r 7. x = 1/|n×l|、r 7. y = 1/|n×e| mul r 2. z, r 2. w, -r 2. y ; r 2. z = ( l・n)(-n・e) mad r 2. z, -r 4. w, r 5. w, mul r 2. z, r 2. z ; r 2. z = ((l・n)(-n・e) - sin(n, l)sin(n, e))^2 mul r 2. z, r 2. z ; r 2. z = ((l・n)(-n・e) - sin(n, l)sin(n, e))^4 mul r 2. z, r 2. z ; r 2. z = ((l・n)(-n・e) - sin(n, l)sin(n, e))^6 mul r 6, c 18, r 4. w ; ファー diffuse (c 18: 毛の色) mad r 6, c 19, r 2. z r 6 ; r 2. z = ( l・n)(-n・e) - sin(n, l)sin(n, e) ; ファー specular (c 19: 毛の反射色)

Goldman の Fur 4 減衰係数の計算 r 4 = n×l、 r 5 = n×e 、

Goldman の Fur 4 減衰係数の計算 r 4 = n×l、 r 5 = n×e 、 r 2. w = n・l、 r 2. y = n・e、 r 7. x = 1/|n×l|、r 7. y = 1/|n×e|、r 6 = Ad+As dp 3 r 7. w, r 4, r 5 ; r 7. w = (n×l)(n×e) mul r 7. w, r 7. x mul r 7. w, r 7. y ; r 7. w = (n×l)(n×e)/(|n×l||n×e|) =cos (n×l, n×e)=κ mul r 7. w, c 20. w ; (c 20. w: 反射、透過比) add r 7. w, c 12. z ; (c 12: (0. 0, 0. 5, 1. 0, -1. 0)) mul r 7. w, c 12. y ; r 7. w = f_dir = (1+c 20. w κ)/2 rcp r 7. z, c 12. y ; r 7. z = 2. 0 f mad r 7. z, r 2. w, c 12. z ; r 7. z = 2. 0 f * (l・n)+1 max r 7. z, c 12. x ; 負の値をカット min r 7. z, c 12. z ; 1. 0以上の値を 1. 0に r 7. z =f_suf = cramp(2. 0 f*(l・n)+1)

Goldman の Fur 5 仕上げ r 2. w = n・l 、 r 6 =

Goldman の Fur 5 仕上げ r 2. w = n・l 、 r 6 = Ad+As 、 r 7. w = f_dir 、 r 7. z =f_suf mul r 7. w, r 7. z mul r 6, ; ファー = f_suf * f_dir r 7. w ; ファー = f_suf * f_dir *(ファーdiffuse + ファーspecular) mul r 3, c 16, r 2. w ; ランバート diffuse add r 6, r 3, r 6 ; ファー +ランバート mul o. D 0, c 15, r 6 ; メッシュの色を反映

質問、助言、いいことあったら教えて Questions, comments, feedback? • e-mail : if@kun. desu. ne. jp • Homepage :

質問、助言、いいことあったら教えて Questions, comments, feedback? • e-mail : if@kun. desu. ne. jp • Homepage : If the world… http: //www 5. tok 2. com/home/IF/