Upgrade to Pro — share decks privately, control downloads, hide ads and more …

3D勉強会 第1回 3Dプログラミングのススメ

3D勉強会 第1回 3Dプログラミングのススメ

株式会社インフィニットループの社内勉強会で使われたスライド「3D勉強会 第1回 3Dプログラミングのススメ」です。
http://www.infiniteloop.co.jp/blog/2013/06/3dstudy01/

Infiniteloop

July 12, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. 3D 3D勉強会 勉強会 第 第1 1回 回 3D 3Dプログラミングのススメ プログラミングのススメ

    ~ ~3 3次元空間における座標変換~ 次元空間における座標変換~ 株式会社インフィニットループ 株式会社インフィニットループ 齊藤 齊藤 一誠 一誠
  2. ・ ・自己紹介 自己紹介 名前 名前 齊藤 齊藤 一誠 一誠 元コンシューマゲーム開発者

    元コンシューマゲーム開発者 開発経験のあるプラットフォームは 開発経験のあるプラットフォームはPS2 PS2・ ・PSP PSP・ ・PS3 PS3
  3. ・ ・自己紹介 自己紹介 名前 名前 齊藤 齊藤 一誠 一誠 元コンシューマゲーム開発者

    元コンシューマゲーム開発者 開発経験のあるプラットフォームは 開発経験のあるプラットフォームはPS2 PS2・ ・PSP PSP・ ・PS3 PS3 3D 3Dプログラミングは プログラミングはそこそこ そこそこできるはず できるはず
  4. ・ ・自己紹介 自己紹介 名前 名前 齊藤 齊藤 一誠 一誠 元コンシューマゲーム開発者

    元コンシューマゲーム開発者 開発経験のあるプラットフォームは 開発経験のあるプラットフォームはPS2 PS2・ ・PSP PSP・ ・PS3 PS3 3D 3Dプログラミングは プログラミングはそこそこ そこそこできるはず できるはず ということで、前置きとして ということで、前置きとして3D 3Dプログラミング入門の プログラミング入門の 心得のようなものをお話していきます。 心得のようなものをお話していきます。
  5. 3D 3Dの勉強を始めるにあたっての心理的障壁 の勉強を始めるにあたっての心理的障壁 1 1. .むずそう(小並感) むずそう(小並感) ・ ・3D 3Dって高度な数学の知識が必要なんでしょう?

    って高度な数学の知識が必要なんでしょう? ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・
  6. 3D 3Dの勉強を始めるにあたっての心理的障壁 の勉強を始めるにあたっての心理的障壁 1 1. .むずそう(小並感) むずそう(小並感) ・ ・3D 3Dって高度な数学の知識が必要なんでしょう?

    って高度な数学の知識が必要なんでしょう? ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・そもそも何から勉強し始めたらいいのかわからない・・・ ・そもそも何から勉強し始めたらいいのかわからない・・・
  7. 3D 3Dプログラミングを始めるのに プログラミングを始めるのに 数学力は必要なのか 数学力は必要なのか ・ ・3D 3Dプログラミングを始めた頃の私の数学力について プログラミングを始めた頃の私の数学力について ・高校では普通科の文系コース

    ・高校では普通科の文系コース ・・・ ・・・ 数学 数学C Cやってない やってない ・ ・数学のテストで赤点とった事も無くはない(小声) 数学のテストで赤点とった事も無くはない(小声)
  8. 3D 3Dプログラミングを始めるのに プログラミングを始めるのに 数学力は必要なのか 数学力は必要なのか ・ ・3D 3Dプログラミングを始めた頃の私の数学力について プログラミングを始めた頃の私の数学力について ・高校では普通科の文系コース

    ・高校では普通科の文系コース ・・・ ・・・ 数学 数学C Cやってない やってない ・ ・数学のテストで赤点とった事も無くはない(小声) 数学のテストで赤点とった事も無くはない(小声) ・高校卒業してすぐ専門学校へ ・高校卒業してすぐ専門学校へ ・・・ ・・・ 大学数学やってない 大学数学やってない
  9. 3D 3Dの勉強を始めるにあたっての心理的障壁 の勉強を始めるにあたっての心理的障壁 1 1. .むずそう(小並感) むずそう(小並感) ・ ・3D 3Dって高度な数学の知識が必要なんでしょう?

    って高度な数学の知識が必要なんでしょう? ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・そもそも何から勉強し始めたらいいのかわからない・・・ ・そもそも何から勉強し始めたらいいのかわからない・・・ 2 2. .始めてみたけどすぐ挫折した 始めてみたけどすぐ挫折した
  10. 3D 3Dの勉強を始めるにあたっての心理的障壁 の勉強を始めるにあたっての心理的障壁 1 1. .むずそう(小並感) むずそう(小並感) ・ ・3D 3Dって高度な数学の知識が必要なんでしょう?

    って高度な数学の知識が必要なんでしょう? ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・そもそも何から勉強し始めたらいいのかわからない・・・ ・そもそも何から勉強し始めたらいいのかわからない・・・ 2 2. .始めてみたけどすぐ挫折した 始めてみたけどすぐ挫折した ・何かの講座を見て箱を1個表示しただけで満足して終わってしまった・・・ ・何かの講座を見て箱を1個表示しただけで満足して終わってしまった・・・
  11. 3D 3Dの勉強を始めるにあたっての心理的障壁 の勉強を始めるにあたっての心理的障壁 1 1. .むずそう(小並感) むずそう(小並感) ・ ・3D 3Dって高度な数学の知識が必要なんでしょう?

    って高度な数学の知識が必要なんでしょう? ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・ ・そもそも何から勉強し始めたらいいのかわからない・・・ ・そもそも何から勉強し始めたらいいのかわからない・・・ 2 2. .始めてみたけどすぐ挫折した 始めてみたけどすぐ挫折した ・何かの講座を見て箱を1個表示しただけで満足して終わってしまった・・・ ・何かの講座を見て箱を1個表示しただけで満足して終わってしまった・・・ ・満足ゆく見た目になるまで凄く時間がかかりそうで心が折れた ・満足ゆく見た目になるまで凄く時間がかかりそうで心が折れた
  12. モチベーションの保ち方 モチベーションの保ち方 小目標を決める 小目標を決める ・目標なしに勉強し続けるのは辛い。あと区切りを作れる。 ・目標なしに勉強し続けるのは辛い。あと区切りを作れる。 出来るところまで進める 出来るところまで進める ・とりあえず自分の持ってる知識で出来るとこまで進めてみる。 ・とりあえず自分の持ってる知識で出来るとこまで進めてみる。

    わからなくなったらその時に調べる わからなくなったらその時に調べる ・何に使うかわからない知識を勉強するのは辛い。 ・何に使うかわからない知識を勉強するのは辛い。 無理しない 無理しない ・前提知識が複数必要なものなどは各要素を個別に理解してからでもいい。 ・前提知識が複数必要なものなどは各要素を個別に理解してからでもいい。 無理せず後回しする。 無理せず後回しする。
  13. モチベーションの保ち方 モチベーションの保ち方 小目標を決める 小目標を決める ・目標なしに勉強し続けるのは辛い。あと区切りを作れる。 ・目標なしに勉強し続けるのは辛い。あと区切りを作れる。 出来るところまで進める 出来るところまで進める ・とりあえず自分の持ってる知識で出来るとこまで進めてみる。 ・とりあえず自分の持ってる知識で出来るとこまで進めてみる。

    わからなくなったらその時に調べる わからなくなったらその時に調べる ・何に使うかわからない知識を勉強するのは辛い。 ・何に使うかわからない知識を勉強するのは辛い。 無理しない 無理しない ・前提知識が複数必要なものなどは各要素を個別に理解してからでもいい。 ・前提知識が複数必要なものなどは各要素を個別に理解してからでもいい。 無理せず後回しする。 無理せず後回しする。 目標を達成したら新たな目標を決める 目標を達成したら新たな目標を決める ・別のプログラムを作る ・別のプログラムを作るor or現在のプログラムへの機能追加等、 現在のプログラムへの機能追加等、 とにかく興味が持てる事を。 とにかく興味が持てる事を。
  14. おすすめの勉強法は・・・ おすすめの勉強法は・・・ ショボ ショボくても くてもいいから何か いいから何か1 1本ゲーム的なものを作る 本ゲーム的なものを作る 楽なのはシューティングゲーム 楽なのはシューティングゲーム

    当たり判定は 当たり判定は2D 2D的でもいい。必要な前提知識が少なめで 的でもいい。必要な前提知識が少なめで 入門には最適。 入門には最適。 凝った事が出来るようになったら色々要素が追加できる。 凝った事が出来るようになったら色々要素が追加できる。
  15. そもそも行列ってなんじゃ そもそも行列ってなんじゃらほい らほい 2D 2D空間では 空間ではX X・ ・Y Y座標・拡大縮小・回転で大体全て表現できる 座標・拡大縮小・回転で大体全て表現できる

    また、画面上への反映が容易である( また、画面上への反映が容易である(X X・ ・Y Y座標がほぼそのままウィンド 座標がほぼそのままウィンド ウ上の座標になる) ウ上の座標になる)
  16. そもそも行列ってなんじゃ そもそも行列ってなんじゃらほい らほい 2D 2D空間では 空間ではX X・ ・Y Y座標・拡大縮小・回転で大体全て表現できる 座標・拡大縮小・回転で大体全て表現できる

    また、画面上への反映が容易である( また、画面上への反映が容易である(X X・ ・Y Y座標がほぼそのままウィンド 座標がほぼそのままウィンド ウ上の座標になる) ウ上の座標になる) 3D 3Dではどうなのか ではどうなのか
  17. そもそも行列ってなんじゃ そもそも行列ってなんじゃらほい らほい 2D 2D空間では 空間ではX X・ ・Y Y座標・拡大縮小・回転で大体全て表現できる 座標・拡大縮小・回転で大体全て表現できる

    また、画面上への反映が容易である( また、画面上への反映が容易である(X X・ ・Y Y座標がほぼそのままウィンド 座標がほぼそのままウィンド ウ上の座標になる) ウ上の座標になる) 3D 3Dではどうなのか ではどうなのか そもそも そもそも3D 3D空間を画面に描画するまでどのような変換が行われるのか 空間を画面に描画するまでどのような変換が行われるのか
  18. そして そして3D 3Dの場合は の場合は ローカル座標(ポリゴンの各頂点の座標とか) ローカル座標(ポリゴンの各頂点の座標とか) ↓ ↓ ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用) ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)

    ↓ ↓ カメラ座標(ワールド座標をカメラから見た座標へ変換) カメラ座標(ワールド座標をカメラから見た座標へ変換) ↓ ↓ 透視投影座標(遠近感を持たせる座標へ変換) 透視投影座標(遠近感を持たせる座標へ変換)
  19. そして そして3D 3Dの場合は の場合は ローカル座標(ポリゴンの各頂点の座標とか) ローカル座標(ポリゴンの各頂点の座標とか) ↓ ↓ ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用) ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)

    ↓ ↓ カメラ座標(ワールド座標をカメラから見た座標へ変換) カメラ座標(ワールド座標をカメラから見た座標へ変換) ↓ ↓ 透視投影座標(遠近感を持たせる座標へ変換) 透視投影座標(遠近感を持たせる座標へ変換) ↓ ↓ スクリーン座標(実際の画面上に出力される座標へ変換) スクリーン座標(実際の画面上に出力される座標へ変換)
  20. お待たせしました! お待たせしました! ここで変換行列の登場です! ここで変換行列の登場です! この気の遠くなるような手順を簡単で軽くするために必要なのが変換行 この気の遠くなるような手順を簡単で軽くするために必要なのが変換行 列なのです。 列なのです。 変換行列のデータ構造 変換行列のデータ構造

    float matrix[4][4]; float matrix[4][4]; // // 4x4 4x4の浮動小数点配列で表される の浮動小数点配列で表される 変換行列には 変換行列には3 3次元での移動・拡大縮小・回転の要素を全て詰めること 次元での移動・拡大縮小・回転の要素を全て詰めること ができる! ができる!
  21. お待たせしました! お待たせしました! ここで変換行列の登場です! ここで変換行列の登場です! この気の遠くなるような手順を簡単で軽くするために必要なのが変換行 この気の遠くなるような手順を簡単で軽くするために必要なのが変換行 列なのです。 列なのです。 変換行列のデータ構造 変換行列のデータ構造

    float matrix[4][4]; float matrix[4][4]; // // 4x4 4x4の浮動小数点配列で表される の浮動小数点配列で表される 変換行列には 変換行列には3 3次元での移動・拡大縮小・回転の要素を全て詰めること 次元での移動・拡大縮小・回転の要素を全て詰めること ができる! ができる! 行列のどこに何を代入すればいいの?とかの話は長くなるので今回は 行列のどこに何を代入すればいいの?とかの話は長くなるので今回は 割愛。 割愛。
  22. 先ほどの変換手順はローカル座標以外、 先ほどの変換手順はローカル座標以外、 全て変換行列で表現できる 全て変換行列で表現できる ローカル座標(ただの座標情報なのでこのままでいい) ローカル座標(ただの座標情報なのでこのままでいい) ↓ ↓ ワールド座標 ワールド座標・・・

    ・・・ワールド変換行列 ワールド変換行列 ↓ ↓ カメラ座標 カメラ座標・・・ ・・・カメラ変換行列 カメラ変換行列 ↓ ↓ 透視投影座標 透視投影座標・・・ ・・・透視投影変換行列 透視投影変換行列 ↓ ↓ スクリーン座標 スクリーン座標・・・ ・・・スクリーン変換行列 スクリーン変換行列
  23. とても大事な変換行列の性質 とても大事な変換行列の性質 変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮 変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮 小・回転が全て適用された座標になる 小・回転が全て適用された座標になる ローカル座標 ローカル座標× ×ワールド変換行列 ワールド変換行列

    = = ワールド座標 ワールド座標 掛け算の順番は 掛け算の順番は http://msdn.microsoft.com/en http://msdn.microsoft.com/en- -us/library/windows/desktop/bb206269(v=vs.85).aspx us/library/windows/desktop/bb206269(v=vs.85).aspx つまりローカル座標 つまりローカル座標× ×ワールド変換行列 ワールド変換行列× ×カメラ変換行列 カメラ変換行列× ×透視投影変換行列 透視投影変換行列 × ×スクリーン変換行列 スクリーン変換行列 = = 求めたい最終結果の座標! 求めたい最終結果の座標!
  24. 変換行列の性質その3 変換行列の性質その3 ( (行列1 行列1× ×行列2 行列2)と、 )と、 ( (行列2

    行列2× ×行列1 行列1)では )では 計算結果が異なる!=交換法則が成り立たない 計算結果が異なる!=交換法則が成り立たない
  25. 変換行列の性質その3 変換行列の性質その3 ( (行列1 行列1× ×行列2 行列2)と、 )と、 ( (行列2

    行列2× ×行列1 行列1)では )では 計算結果が異なる!=交換法則が成り立たない 計算結果が異なる!=交換法則が成り立たない これは これはBL BL作品等におけるカップリングと同様の性質 作品等におけるカップリングと同様の性質 であり、掛ける順番には注意が必要である であり、掛ける順番には注意が必要である
  26. 変換行列の性質その3 変換行列の性質その3 ( (行列1 行列1× ×行列2 行列2)と、 )と、 ( (行列2

    行列2× ×行列1 行列1)では )では 計算結果が異なる!=交換法則が成り立たない 計算結果が異なる!=交換法則が成り立たない これは これはBL BL作品等におけるカップリングと同様の性質 作品等におけるカップリングと同様の性質 であり、掛ける順番には注意が必要である であり、掛ける順番には注意が必要である 実際のプログラムで動作を確認してみよう! 実際のプログラムで動作を確認してみよう!
  27. 変換行列の生成方法 変換行列の生成方法 変換行列の生成は多くの 変換行列の生成は多くの3D 3Dライブラリにおいて豊富なヘルパー関数が ライブラリにおいて豊富なヘルパー関数が 用意されており、イチから計算する必要はありません。 用意されており、イチから計算する必要はありません。 移動行列生成関数(回転・拡大縮小の関数ももちろんある) 移動行列生成関数(回転・拡大縮小の関数ももちろんある)

    http://msdn.microsoft.com/ja http://msdn.microsoft.com/ja- -jp/library/cc372906.aspx jp/library/cc372906.aspx カメラ行列生成関数 カメラ行列生成関数 http://msdn.microsoft.com/ja http://msdn.microsoft.com/ja- -jp/library/cc372877.aspx jp/library/cc372877.aspx 透視投影変換行列生成関数 透視投影変換行列生成関数 http://msdn.microsoft.com/ja http://msdn.microsoft.com/ja- -jp/library/cc372898.aspx jp/library/cc372898.aspx スクリーン変換行列 スクリーン変換行列 ライブラリ初期化時にウィンドウ情報と一緒にセットされる ライブラリ初期化時にウィンドウ情報と一緒にセットされる 通常意識する必要なし 通常意識する必要なし
  28. まとめ まとめ 行列こそが 行列こそが3D 3Dプログラミングの基本!とっても大事! プログラミングの基本!とっても大事! 3D 3D描画について、一から全て自分で計算する必要はない! 描画について、一から全て自分で計算する必要はない! かなり大部分をライブラリでカバーしてくれている。

    かなり大部分をライブラリでカバーしてくれている。 実際の具体的な演算を理解するのは 実際の具体的な演算を理解するのは3D 3Dプログラミングという概念に慣れ プログラミングという概念に慣れ てからでも遅くはない! てからでも遅くはない!
  29. まとめ まとめ 行列こそが 行列こそが3D 3Dプログラミングの基本!とっても大事! プログラミングの基本!とっても大事! 3D 3D描画について、一から全て自分で計算する必要はない! 描画について、一から全て自分で計算する必要はない! かなり大部分をライブラリでカバーしてくれている。

    かなり大部分をライブラリでカバーしてくれている。 実際の具体的な演算を理解するのは 実際の具体的な演算を理解するのは3D 3Dプログラミングという概念に慣れ プログラミングという概念に慣れ てからでも遅くはない! てからでも遅くはない! 3D 3Dを恐れる必要はない。簡単な を恐れる必要はない。簡単な3D 3Dプログラムならそんなに知識は必要 プログラムならそんなに知識は必要 ない。 ない。
  30. そして最後に私からの提案・・・ そして最後に私からの提案・・・ 社内 社内3D 3D勉強会やりませんか? 勉強会やりませんか? これからスマホアプリでも これからスマホアプリでも3D 3D描画によるものが更に増えてくる筈。 描画によるものが更に増えてくる筈。

    今すぐに 今すぐに3D 3Dアプリ開発に手を出すわけではないにしても、技術の蓄積を アプリ開発に手を出すわけではないにしても、技術の蓄積を しておくに越したことはない。 しておくに越したことはない。
  31. そして最後に私からの提案・・・ そして最後に私からの提案・・・ 社内 社内3D 3D勉強会やりませんか? 勉強会やりませんか? これからスマホアプリでも これからスマホアプリでも3D 3D描画によるものが更に増えてくる筈。 描画によるものが更に増えてくる筈。

    今すぐに 今すぐに3D 3Dアプリ開発に手を出すわけではないにしても、技術の蓄積を アプリ開発に手を出すわけではないにしても、技術の蓄積を しておくに越したことはない。 しておくに越したことはない。 Unity Unityを利用した開発にも絶対役立つ。なんなら を利用した開発にも絶対役立つ。なんならUnity Unity勉強会を含めてし 勉強会を含めてし まってもよい。 まってもよい。
  32. そして最後に私からの提案・・・ そして最後に私からの提案・・・ 社内 社内3D 3D勉強会やりませんか? 勉強会やりませんか? これからスマホアプリでも これからスマホアプリでも3D 3D描画によるものが更に増えてくる筈。 描画によるものが更に増えてくる筈。

    今すぐに 今すぐに3D 3Dアプリ開発に手を出すわけではないにしても、技術の蓄積を アプリ開発に手を出すわけではないにしても、技術の蓄積を しておくに越したことはない。 しておくに越したことはない。 Unity Unityを利用した開発にも絶対役立つ。なんなら を利用した開発にも絶対役立つ。なんならUnity Unity勉強会を含めてし 勉強会を含めてし まってもよい。 まってもよい。 将来への研究投資として会社からの支援があればと思います。 将来への研究投資として会社からの支援があればと思います。