[DirectX12 beginner] Creating 3D game engine! (I'll show you what I did for a month) C++

แชร์
ฝัง
  • เผยแพร่เมื่อ 10 ม.ค. 2025

ความคิดเห็น • 63

  • @BokuTsuchinoko
    @BokuTsuchinoko 11 หลายเดือนก่อน +16

    一ヶ月でここまで・・・凄い。他人に教える側の人間ですが、かなりすごいと思います。
    あと、書籍のご紹介ありがとうございます(DirectX12の魔導書の著者です)

    • @solagamedev
      @solagamedev  11 หลายเดือนก่อน +2

      ななな、なんと!!!!びっくりしました!
      まず最初に、感謝の気持ちをお伝えしたいです!あの良書を作っていただいて本当に本当に感謝しています。
      魔導書の中で使われている画像のアイコンなんですね^-^
      まえがきの、やらない言い訳を散見する、つべこべいわずにやってみよう、ってとこめっちゃ好きですw 同感です
      それと、初めて会話をする恩人相手にこんなことを言ってしまうと嫌われてしまうかもしれませんが、、、書籍のサンプルコードが外部ファイル(おそらく著作物だから入れられなかったとか)が無くてエラーになるのきつかったです、、、
      それを含めて、勉強なのかもしれませんが、毎日毎日、自分が書くコードは経験したことないエラーばかりで、もう心が折れそうなときに、そうだ!プロが書いたものを見てみよう!!ってなって、それも見たことないエラーで、ぽきっと心が折れる音がしたかもしれません笑
      とはお伝えしてみたものの、本当に感謝しかしていないです。ありがとうございます!

    • @BokuTsuchinoko
      @BokuTsuchinoko 11 หลายเดือนก่อน +2

      @@solagamedev ありがとうございます。外部ファイルになっているところはおっしゃる通り著作権やライセンスがグレーだったため分けています。また、外部ライブラリを使っているところもGitHubの別リポジトリから取得するようになっているため、GitHubを使い慣れていない人にはちょっととっつきづらいかなと思いました。
      あの本も2020年2月に出した本なのでもう4年目です。さすがに色々時代に合わなくなってきたので、刷新しようとも考えています。
      今後もし分らない部分があれば、わかる範囲でお答えしますので、お心が折れる前にお気軽にTwitterのDM等でご質問ください。

    • @solagamedev
      @solagamedev  11 หลายเดือนก่อน +3

      @@BokuTsuchinoko やっぱり、いろいろ事情があってのことなんですね、、、ほんとこんなことお伝えしてしまってすみません、、、
      刷新も楽しみにしております!!
      そして、なんてお優しいお言葉を、、T_T
      ちょっとそれは、真に受けさせてください
      自分の中の取り決めとして、一回だけ、そのチャンスがあるということにします
      なので今後、本当に本当に絶望的な状況になる時が来てしまったら、一生のお願いとして、知恵をお借りできたら幸いです
      本当にありがとうございます!

  • @CityPopDisco
    @CityPopDisco 10 หลายเดือนก่อน +4

    一か月でここまで作るのは今の情報が公開されている時代だとしても、すごい努力が必要です。素晴らしいです。

    • @solagamedev
      @solagamedev  10 หลายเดือนก่อน +2

      ありがとうございます!!ほんと最初の最初は自分に理解できる内容なのか不安でしたが、がんばってよかったです^-^

  • @h870ghbg
    @h870ghbg ปีที่แล้ว +7

    お疲れ様です!
    ゲーム作ってると思ったら、まさかのDirectX直叩きですかww
    リアルタイムレンダリングの分野はここ10年くらいで急速に進化して色んな工夫が生まれて、そのほとんどがゲームエンジンには組み込まれてますからね・・・。
    DirectXは、9で一度成熟して、11まで機能追加していったものの互換性等々で層が厚くなり過ぎて重くなっていたそうです。12でその辺が整理されてGPUをより直で操作するようになったので、柔軟性も高くなり速度も出るようになった反面、プログラミング難度は跳ね上がったようです。
    ちなみに、DirectXはMicrosoftの技術で、オープンソース界隈で相当するのは、DX9はOpenGL、DX12はVulkanだそうです。(オープンソース界隈では、OpenCLとかOpenCVとか似た名前のプロジェクトありますが、OpenGLと全く関係無かったりするようです。)
    カリングも色んな手法ありますね・・・ポリゴンの裏面を表示しない裏面カリング、視野外を表示しないカリング、深度が奥の物を表示しないカリング・・・。
    アンビエントオクルージョンも色々ですね。「入り組んだところを黒っぽくしておけば光源が移動してもある程度それっぽく見える」な手法なら、実行前に事前計算してテクスチャに焼き込んでしまう(AOをベイク)するとか、ペイントソフトで影を描きこんでしまうのもある種のAOですかね、これだと描画負荷ほぼゼロです。
    典型的なのはSSAOという手法のようで、『スクリーン空間』という名の通り、2Dである深度バッファ(xy平面上の各ピクセルに深度が記録されている)をうまく使って、どれくらい入り組んでいるかを計算するようです。描画直前の2D時点で計算出来るので、3D関係の描画が終わった後に必要な部分だけ計算するので比較的処理が軽いとかあるようです。
    Unrealみたいなゲームエンジンに仕上げるには膨大な作業が必要なので、ある程度理解してUnrealのシェーダーを自作できるようになったあたりで切り上げるのをおすすめしたいところです。

    • @solagamedev
      @solagamedev  ปีที่แล้ว +1

      おつかれさまです!!^-^
      直叩きって言い方、かっこいいですね!今度、使ってみますw
      ほんと、なんでもご存じなんですね!凄すぎです
      なるほど、9でひとまず成熟していたんですね。11と12、それとOpen GLとValkanについては、勉強を始める前に検索して調べました。
      以前のハードの環境から、ある程度作るメーカーがしぼられてきたので、オーバーヘッド?って言うんでしたっけ。無駄になってしまう処理をかなり減らせたとか、そんな印象を持っています。
      裏面と深度のカリングは、DirectX12に設定するだけで、やってもらえました。あとは、視野外とかのカリングをCPUの計算ではなくグラフィックボードで処理出来たらいいな~って思っています
      そのベイクのことを今持ってる知識だけで考えてみましたが、めちゃくちゃメモリかかりそうですね。そもそもテクスチャーに描き込んでしまうのは、めっちゃ良さそうと思いました。スクリーン空間の計算も、きちんとした理解はしていないのですが、周囲よりも谷になってる部分を暗くする印象で、これも重そうなのでグラフィックボードでやってもらいたいなと思ったりで、やっぱりもっと勉強して理解を深めなくてはと思っています。
      さすがに、Unrealのシェーダーを自作できるようになるほどの頭は自分にはないと思いますw
      今はあんまりグラフィックの美しさに興味が無いので、あとは、アンチエイリアスとか、ディファードレンダリングとか、ボーンアニメーションとか、そのあたりを勉強して実現出来たら、何か遊べるものをつくってみたいな~って思っています^-^

    • @h870ghbg
      @h870ghbg ปีที่แล้ว +2

      > 何でもご存知
      私は専門家になる前に諦めてしまった側なので、全然間違ったことを言ってる可能性もあります・・・。
      > オーバーヘッドをかなり減らせた
      そうですそうです。極端にいうとDX11までは、三角形を表示しろって命令を出すだけで、あれとこれをチェックして、あのGPUでもこのGPUでも問題なく動くには命令を貯めてから、この前処理を入れてから実行すれば、どの環境でもエラーなく動く。みたいな感じで、簡単な反面、無駄な処理が増えてしまってたようです。DX12やVulkanは、プログラマーがやらないといけないことが増えた代わりに、無駄な処理はかなり減ったようです。
      > AOをベイク
      AOをベイクするのと、手動でテクスチャに描き混むのは結果は同じですよー。前者は、HDD/SSDからバッファ(毎フレーム作り直されるバッファではなく、GPU上の倉庫となるバッファ)に読み込み→計算結果をそのバッファに書き込み(上書き)→描画。後者は、元々保存されてるテクスチャに影が描かれている→HDD/SSDからバッファに読み込み→描画。どちらも、描画前のバッファに影が描き込まれている状態ですね。UEでいうと、静的ライティングをビルドするのと同じ事ですね。(ちなみに、なんかややこしいですが、blenderでAOをベイクする事も出来るらしいですね。この場合、前者と後者の前者寄りハイブリッドでしょうか(笑))
      > SSAOするとかなりメモリを食いそう、重そう
      深く理解してる訳ではないですが、スクリーンベースの処理(深度バッファは平面の画像のような物で、それを使って計算する処理)なので、数MBかそれx10くらいじゃないですかねぇ。
      重いのはその通りで、GPU側で処理させるようになってから普及したらしいです。
      > シェーダー自作
      いえいえ、ここまでやってたら半分以上手を出していると思います!
      調べると、ブループリントだけでもシェーダーに手を入れられるらしいので、ちょっとカスタムするくらいなら、そこまでハードル高くないかも?と無責任な事を言ってみます。

    • @solagamedev
      @solagamedev  ปีที่แล้ว +2

      @@h870ghbg なるほど、そういう感じなんですね!
      DX11は、まったく何もわかりませんが、ちょっとどんな感じでプログラムを書くのかくらいは、見てみたくなりました^-^
      DX12を使ってみて、もしかしたら自分が使ったらプログラミング能力が足りなくて遅くなる可能性もあると感じました
      本当にすべてのことを自分で管理しないといけないですよね
      いろいろと詳しい話、とても参考になります
      たしかにUEの静的ライティングって影が動かないですもんね!ベイクだったり、アンビエントオクルージョンだったり、これから勉強していくの楽しみです
      シェーダーの話って、完全に勘違いしてました!
      Unrealのシェーダー関連の機能をこのエンジンにも組み込むことだと思ったので、それは自分にはムリだと思ったんですw
      UEのシェーダーはたぶん、もう使ったことがあります
      水の質感を作ったりだとか、あとはエフェクトとかで、G-Buffer?でしたっけ?ディファードレンダリング時の情報を取得して、条件で色を変えたりとか、
      そんな感じのことをやったことがあります^-^

    • @h870ghbg
      @h870ghbg ปีที่แล้ว +1

      @@solagamedev 詳しい情報は追いかけられていませんが、DX9〜DX11は後方互換性あって、DX9が一番普及しているので、ご興味あるならDX9をしてみるのが良いと思います!

    • @solagamedev
      @solagamedev  ปีที่แล้ว

      @@h870ghbg なるほど!そうなんですね!DX9もチェックしてみます^-^

  • @marcocretella9348
    @marcocretella9348 7 หลายเดือนก่อน +1

    The youtube algorithm brought me here.
    I was and still am struggling in our group project to code a DX12-Engine in C++ from scratch and this video popped up onto the youtube start-page.
    I don't understand anything, but I'm glad that god or the universe is listening to me and trying to help me in any way.

    • @solagamedev
      @solagamedev  7 หลายเดือนก่อน

      Thank you for watching my DirectX12 Challenge video.
      This is a video of my first month studying DirectX12 and C++.
      My experience level before this challenge was 1 year of studying UE5 and 1 year of studying C++ for UE.
      I'm a beginner who has never made a game before.
      As a DirectX12 beginner, I tried to explain how DirectX12 works at 13:04 in this video.
      I'm sorry that it's in Japanese, but I'd be happy if it helped you even a little.

  • @River-Mouse
    @River-Mouse ปีที่แล้ว +5

    初心を思い出してとても楽しかったです。プログラムもですが何かを作るということを楽しんでくださいね😁

    • @solagamedev
      @solagamedev  ปีที่แล้ว +4

      ありがとうございます!
      本当にものづくりって楽しいな~って思います。特に、習い始めが知らないことばかりで成長しやすいのでこつこつ勉強しながら楽しんでいこうと思います^-^

  • @sny0
    @sny0 11 หลายเดือนก่อน

    凄すぎる…DX12でアプリを作ったことがあるから凄さが分かります。良い刺激を受けました。

    • @solagamedev
      @solagamedev  11 หลายเดือนก่อน +1

      DX12を使ってる方なんですね!!動画を拝見させて頂きましたが、Phongとかシェーダーを勉強した時に悩まされたな~と思い出しました^-^
      ほんと、DX12はいろんなことを覚えなくちゃいけないですよね

  • @ぽんかん-q9s
    @ぽんかん-q9s 7 หลายเดือนก่อน +2

    こりゃ凄いっすね
    冒頭1分だけで計り知れない労力を感じます…

    • @solagamedev
      @solagamedev  7 หลายเดือนก่อน

      ありがとうございます!
      これはもう挫折しても仕方ないと思いながら始めましたが、本当に難しくて大変でした^-^

  • @そうりえ-g9x
    @そうりえ-g9x 11 หลายเดือนก่อน

    自分もdirectx12をやろうと思ってやったりやらなかったりで理解が不安定でしたが、すごいですね〜わかりやすくて良いです!

    • @solagamedev
      @solagamedev  11 หลายเดือนก่อน

      そういってもらえてすごく嬉しいです!動画をがんばって作ってよかった~って思いました
      原神をされている方なんですね。あさって、4.4アプデですね^-^

  • @loves0070
    @loves0070 ปีที่แล้ว +1

    勉強になりました!

    • @solagamedev
      @solagamedev  ปีที่แล้ว +2

      ゲーム作っているんですね!やっぱり、こうやってスマホとかで実際に遊んでいるのを見ると、ゲームっていいな~って思います^-^ パズルのねこちゃんもかわいいですね!

  • @mato9654
    @mato9654 ปีที่แล้ว +2

    すごいですね!ここまで作ることもすごいですし、学んだことをまとめるのもとても上手ですね。僕はDX12を使って2D画像を表示するまでで中断してゲームエンジンを作るのはやめて既存のものでゲームを作ろうと思いやめてしまったので、今回この動画を見て再挑戦してみようかなと思えました。ありがとうございます。

    • @solagamedev
      @solagamedev  ปีที่แล้ว +2

      DX12をやられていたんですね!!そういえばまだ、2Dの表示をやったことないです。たしか2Dもポリゴンを使って表示するんですよね!
      ほんと、こんなマニアックな動画、見てくれる人いるかのな~と思いながら作っていましたが、こういうコメントを頂けて、すごく嬉しいです^-^

    • @mato9654
      @mato9654 ปีที่แล้ว +1

      そうですね。2Dは板ポリに貼り付ける形で表示してます。ゲームを作るならUIも必ず必要になりますから、2D3Dどちらも同じく必要ですよね。2Dもこれまた奥が深いので大変でしょうが、これからも頑張ってください。僕もあなたのような頑張っている人を見てやる気を上げて頑張ります。

    • @solagamedev
      @solagamedev  ปีที่แล้ว +1

      @@mato9654 まさにUIで必要ですよね!2Dはマップチップとかのようなものを想像してて、大変そうだな~とかまだやっていない今から思っています^-^
      こちらこそ、コメントを頂けてすごい励みになります。ありがとうございます

    • @mato9654
      @mato9654 11 หลายเดือนก่อน

      失礼致します。ご質問よろしいでしょうか。複数のFBXモデルはどうやって表示されましたか。もしよろしければやり方や参考になったサイトなど教えて頂きたいです。

    • @solagamedev
      @solagamedev  11 หลายเดือนก่อน +1

      @@mato9654 複数のFBXの表示は、検索しても見つからなかったので、自分で考えてみました^-^
      なので、合っているのかわかりませんが、自分がやった方法をお教えします(間違ってるかもしれませんのでご了承ください)
      この動画でもご紹介している
      「定数バッファとリソースバッファのヒープ」を表示したい「FBXの数だけ」用意しました。これで、複数のテクスチャーを登録した状態になると思います。
      それと、「頂点バッファとインデックスバッファ」も「FBXの数だけ」準備しました。
      そして、描画の手順ですが、
      まず通常通り、コマンドにレンダーターゲットを設定します。
      そして、パイプラインなどを必要なものを設定します。
      ここまでは一つを表示するのとまったく同じです。
      ーーーーーーーーーーーーーーー
      使いたいテクスチャーの「定数バッファとリソースバッファのヒープ」 をセットします。
      それに対応した、「頂点バッファとインデックスバッファ」 をセットして、三角形を描画します。
      ーーーーーーーーーーーーーーー
      これを描画したいFBX分だけ繰り返します。
      最後に、Close()してコマンドキューで実行。というこんな感じです。

  • @coozgames
    @coozgames ปีที่แล้ว +8

    こ、、、れは、、、すごいwww
    日曜大工で犬小屋作ろうとして道具の使い方の本を読んでたら、チェーンソーを作ることに興味が向いちゃった感じだなw

    • @solagamedev
      @solagamedev  ปีที่แล้ว +2

      チェーンソー!!w
      すごくおもしろいたとえですね!^-^
      まさにそんなイメージで、大変なものに興味が出てしまったな~って思っています
      好奇心に引っ張られるがまま、ふらふらと勉強しようと思います

  • @seika_beginner_4888
    @seika_beginner_4888 5 หลายเดือนก่อน +8

    サラッとC++を1年間勉強して作ってたって言ってるけど、化け物すぎる笑

    • @solagamedev
      @solagamedev  5 หลายเดือนก่อน

      そう言ってもらえてとても嬉しいですが、自分ではそこまで言っていただけるような実感がありません笑
      たぶんですが、自分の興味のあることや自分に必要なもの「だけ」を勉強してきたので、まだまだとても未熟な状態だと感じています^-^

  • @millfi
    @millfi หลายเดือนก่อน

    12:05 自分もOpenGLを勉強中ですが、二つ目のメッシュをだしてそれぞれ異なる動きをさせるのが難しいのわかります...

    • @solagamedev
      @solagamedev  หลายเดือนก่อน

      OpenGLをやっているんですね!^-^
      自分にはOpenGLの知識はありませんが、やっぱり似たような感じなんですね、、、
      ひとつのメッシュを表示するのを解説してるページは見つかるのですが、2つとか複数はぜんぜん情報が無くて、ほんと大変でした笑

  • @ismailteleph1971
    @ismailteleph1971 2 หลายเดือนก่อน

    i am from morocco and the algorithm brought me here, i don't understand anything at all! i want to learn 3d programming

    • @solagamedev
      @solagamedev  2 หลายเดือนก่อน +2

      I wish I was good at English. I'm from Japan.
      I'm a beginner at DirectX, and this video is a report of my first month of learning.
      It was too difficult for me, and I had a hard time.

  • @uniguri.
    @uniguri. ปีที่แล้ว +3

    Vs code立ち上げてすぐ緊急事態は草( ᐛ )‪𐤔
    自分でも全く同じことになりそう

    • @solagamedev
      @solagamedev  ปีที่แล้ว

      本当に、ぴくりとも動けませんでした^-^
      main()という場所から始まるという情報も、そもそもそういう初歩の初歩の情報を何と検索したら良いのかもわからず、やっと見つけたときには感動すらしたくらいですw

  • @ミミン-q1k
    @ミミン-q1k 2 หลายเดือนก่อน

    動画すごくためになりました!自分もdirectXを勉強し始めたばかりですが、24日目辺りのChunkやパーリンノイズで地形を作る方法の参考サイトが気になっています!教えてくれるとうれしいです!

    • @solagamedev
      @solagamedev  2 หลายเดือนก่อน +1

      DirectXを勉強されているんですね!!チャンクはマインクラフトとかでどうやってるのかな~って想像して、自分で考えました
      c++でvectorという配列が使えるので、structという構造体を作るもので、どういうデータをひとまとめにして扱いたいかを考えました
      そのvectorに、近くなったチャンクのstruct(構造体)を読み込んで、遠くなったチャンクのstructは削除して、って感じで管理しています
      なので、表示する必要があるものだけそのvectorに入っているようにしている感じです
      パーリンノイズは、普通の乱数と違って、なめらかにつながる乱数が出てくるので
      たとえば64x64ブロックの位置の高さをパーリンノイズで生成すると、なめらかな地形になるので
      それをチャンクのstruct(構造体)にデータとして保存しています
      こういう地形の生成方法については、いろいろなホームページを見てなんとなく覚えました
      特定の一つとかではなく、いろいろ見た中でなんとか把握した感じです
      なので、これがおすすめとかはありませんが、よかったらいろいろ検索しながらマップ生成方法を覚えるのも楽しんでみてください^-^

    • @ミミン-q1k
      @ミミン-q1k 2 หลายเดือนก่อน

      @@solagamedev 丁寧なご説明ありがとうございます!チャンクのところとてもわかりやすかったので助かりました😭マップ生成方法についても、色々検索しながら頑張ります!ありがとうございました!

  • @kaidan259
    @kaidan259 2 หลายเดือนก่อน +1

    こんにちは、サンプルコードは1行1行打ち込んでますか?

    • @solagamedev
      @solagamedev  2 หลายเดือนก่อน

      こんにちは^-^
      ぱっと見でりかいできそうな部分はコピーしてます
      逆にまったく理解でき無さそうな部分は打ち込んでいます

  • @秋将-b6l
    @秋将-b6l ปีที่แล้ว

    1ヶ月でここまでできるの凄すぎる。 参考にソースコードを見せていただく事は可能でしょうか?

    • @solagamedev
      @solagamedev  ปีที่แล้ว

      ありがとうございます^-^
      ソースは、、、いろんな方のコード(参考書も含む)を参考にしてるものあって、お見せすることはないと思います
      ですが、なにか気になることがありましたらお気軽に聞いてください
      未熟な自分のわかる範囲でならお応えできると思います

    • @秋将-b6l
      @秋将-b6l ปีที่แล้ว

      @@solagamedev わかりました!
      では、参考にしたサイトやyoutube動画を教えてください!

    • @solagamedev
      @solagamedev  ปีที่แล้ว

      @@秋将-b6l TH-camでは特に参考にした動画ありません
      ひとまず、公式の情報はこちらになります
      learn.microsoft.com/ja-jp/windows/win32/direct3d12/directx-12-programming-guide
      learn.microsoft.com/ja-jp/windows/win32/direct3d12/direct3d-12-reference
      主に、「DirectX12の魔導書」という本がすごく理解するのによかったのでおすすめです
      FBXの読み込みとかはこちらのサイトがわかりやすかったです
      かなり丁寧に解説してくれています
      elekibear.com/post/20221204_01
      他にも数えきれないくらい、検索して覚えましたけど
      特にブックマークなどしないで読んだだけなのでもうどこにあるのかわかりません、、、
      その参考書を読んで、そのFBXの説明をしてくれているサイトのことが理解できれば、この動画でやっているような初歩のことはできるようになると思います^-^

    • @solagamedev
      @solagamedev  ปีที่แล้ว

      それと、もうご存じかもしれませんが、GitHubというサイトでアカウントを作れば、よくわからない命令などをキーワードにして検索すると、それを実際に使っているソースを見ることが出来たりします
      github.com/
      検索しても、なかなかわかりやすい情報が無いときは、ここに本当におせわになりました。
      がんばって読めば、具体的な使い方もわかるので、このサイトおよびソースを公開してくださってる方にとても感謝しています。

    • @solagamedev
      @solagamedev  ปีที่แล้ว

      公式サンプルコードはこちらです
      これも、すごく参考になります
      github.com/microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop