MENU閉じる

HEXA BLOG

プログラム

HEXA BLOGプログラム2023.2.22

2022新人ブログデビュー!⑬

はじめまして!
2022年に東京スタジオに入社した、新人プログラマーのライスリーフニューミーです。

東京でも雪が降る日があったりと、寒さが厳しい日々が続いていますね。
入社したばかりのころは暖かい陽気に包まれていたのに、気が付けば寒空になっていて、そろそろ季節が一周してしまうことに驚きます。

 

さて、自分は学生時代からゲーム制作について学んでいました。
その中でゲームの世界を描画するレンダリングという技術に凄く興味を持っていて勉強を行っていました。

最初は三角形を一つ描画するだけでも一苦労で、そこからようやく、モデルの描画が出来るようになり、最終的には液体のレンダリングや、リアルタイムレイトレーシングでの鏡面反射や屈折の表現を行ったりと少しずつ写実的な表現に近づいていくのが楽しくて、凄く夢中になっていました。

トライアングル
(描画APIに触れて、誰もが最初に挑戦するトライアングル)

今回はリアルタイムレンダリングの楽しさと面白さを伝えたい…………!
なので、最近話題のレイトレーシングのお話にも少し触れながら伝えていければなと思います!

レンダリングの歴史はとても長くただの線で描かれていた時代から、ポリゴンの時代へ移り変わりました。
そこからより、現実世界に近い写実的な表現に進化していく様子は、その歴史を追いかけていくだけで、とても魅力的で興味深いものがあります。

 

最近ではPS5やPCゲームにおいて、リアルタイムレイトレーシングという技術を聞く機会が多くなってきたと個人的には感じています!
次は、そのレイトレーシングの歴史のお話をしたいと思います。

さて、レイトレーシングの歴史に入る前に、まずはレイトレーシングとは何なのかについて軽くお話したいと思います。

まず、現実世界では光源から発射された光が物体の間を衝突して、最終的に人の目に入ってきた色を感じ取ります。

レイトレーシングでは、その現実世界における仕組みを再現し、カメラが捉えている視線から疑似的に光線を放ち、物体を跳ね返ったりしながら最終的に衝突した物体の色を取得して描画を行います。

現実世界に近い光の屈折や反射を表現できるこの技術によって、水面や鏡に凄くリアルな映り込みの表現を実現させたり、さらには小さな陰影までリアルに表現することが出来ます。
レイトレーシングを使うことによって、リアルな光沢感や周囲の映り込みなどを表現することだって、出来ちゃいます。
レイトレーシングで描画されたもの
(学生時代にレイトレーシングを研究していた時の画像)

魅力的ですよね…!レイトレーシング!

そんな、最近になって名前を聞くようになったレイトレーシングですが
実はレイトレーシングも、古くから存在している技術ということはご存知でしょうか?
古典的なレイトレーシングと呼ばれるようなアルゴリズムは1980年に既に存在していました。
この時点で、屈折表現や反射による映り込みなどは実現されています。
古典的なレイトレーシング

(古典的なレイトレーシングの画像)

しかし、現在でも一般的に使われるラスタライズ法と呼ばれる3Dのモデルなどを2D上のピクセル上で疑似的でなんとなく光の動きを計算して陰影などの計算を行っていく手法です。
それに比べてレイトレーシングは3Dのモデルに当たる光の動きを一つ一つ計算します。

大きな特徴としては、ラスタライズ法はカメラが捉えているシーン上のみで計算を行います。
なので、カメラが捉えていない風景などは映り込むことがありません。
しかし、レイトレーシングはとらえたカメラのシーンを2Dとして見たものではなく、3Dの空間上で光の計算を行います。
それによって、鏡にプレイヤーの視点の後ろなどのカメラが捉えていない部分が写るような表現が可能なんです!

 

そのため、レイトレーシングは圧倒的に多い計算量で、当時のマシン性能ではリアルタイムは夢のまた夢でした。
マシンの性能が限られている中で、ラスタライズ法は正確に光の計算を行うというより、写実的な表現にどれだけ近づけるか、処理のコストを抑えながらどれだけそれっぽく見えるようにするかという技術が多くみられ、そういった方向性に進化してきた印象を受けました。

そして、ラスタライズ法での描画技術が進化していくと共にハードウェアが進化を行い、現在ではPS5やレイトレーシング専用のコアを内蔵したGeForceRTXが現れ、まだ制限があるもののリアルタイムでレイトレーシングが行えるようになりました。

少し長くなってしまいましたが、これでもレンダリングやレイトレーシングの歴史の一部なんですよね…。奥深い…。

 

さて最後に、ブログ更新日である2/22は猫の日🐈🐈🐈🐈なので、自分が学生時代にDirectX12で作成したリアルタイムレイトレーシングに対応した描画エンジンで、猫をレンダリングしたいと思います!

そのためにまずはBlenderを使用して、ねこっぽいものを作成しました。Blenderで作成中の猫
Attribution: Blender Foundation – www.blender.org
次に、自作の描画エンジンに作成したモデルを読み込み、配置を行いました。
今回は、左から鏡のように周りが映り込む鏡面反射表現を行ったレンダリング。
屈折表現を行った宝石感のあるレンダリング、そして物理法則をベースにレンダリングを行った猫たちを並べて完成です!
自作エンジンで配置した猫たち

自作エンジンで配置した猫たち

こちらの写真で使用している表現は、鏡のような表現が出来る鏡面反射やガラスのような表現が出来る屈折表現など、レイトレーシングで表現できるものの一部ではありますが、このようにレイトレーシングを使うことによって、写実的で面白い表現を行う事が出来ます!

この表現の軸になっているのは物理ベースレンダリングと呼ばれる技術で、これは現実世界の光の挙動を疑似的に再現したものです。今回はこちらの表現に加えて、レイトレーシングの表現を組み合わせています。

 

さて、いかがでしたでしょうか。

気が付けばゲームエンジンの発展によってゲームの世界は現実世界並みのクオリティで描かれています。しかし、その裏には色々な技術や歴史が隠されているので、興味を持った方は是非一緒にレンダリングの沼にハマっていきましょう!

では、また次回で!

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE