♪
はい、始まりました。ノーマライズFMの今日は第32回です。
はい、第32回ですね。ちょっと1ヶ月ぐらい時間が空いちゃったんですけれども、
イベント登壇とかお仕事とか色々ありまして、ちょっとね、間が空いてしまいましたが、
今日はね、久しぶりの収録なんで、私も緊張してるんですけども、頑張って収録やっていきたいと思います。
はい、で今日のゲストなんですけれども、本日はですね、ちょっとあのWebのフロントエンドとは少しね、
違う畑のゲストが今日は来てくれていまして、クラブに所属されている細田さんに今日はゲストに来ていただいています。細田さん今日はよろしくお願いします。
よろしくお願いします。
はい、えーとね、ちょっとあのインターネット上ではね、TwitterとかではGAM0022っていうアカウントなんで、
そっちの方がもしかしたらね、馴染みが深いっていう人もいるかもしれないですが、
えーと今日はね、久しぶりに私も、こうやってオンラインではあるんですけれども、対面で話すの久しぶりなのでね、
最近の近況なども含めて色々お話を聞いていけたらいいかなと思っておりますので、早速始めていきたいと思います。
はい、じゃあ早速なんですけれども、細田さんの方からまずは簡単に自己紹介をお願いします。
はい、えーとこんにちは。クラブ株式会社の細田です。クラブではグラフィックエンジニアをしています。
インターネット上ではGAM0022っていうハンドルネームで活動しています。
クラブ株式会社について簡単に説明をすると、モバイルゲームを開発運営している会社です。
いわゆるスマートフォン向けにソーシャルゲームを作っている会社になります。
クラブではほとんどのゲームタイトルがUnityに移行しているので、仕事でUnityを使うことがほとんどです。
えーとまた趣味で、ShaderやRaymarchingを使ったグラフィックプログラミングをしています。
デモシティのイベントである東京デムフェストなど、デモパーティーにも定期的に参加してデモ作品のエントリーをしています。
去年の話になってしまうんですけども、ET Game Programming Bible Second Generationという書籍を
教長に出筆したんですけども、そこでRaymarchingの書も担当しました。
はいえーと、このあった方ですかね。よろしくお願いします。
よろしくお願いします。
結構、もう名前を知っている人も知らない人もいらっしゃると思うんですけど、
これの課題としては、Unityって本当にすごいいろんなプラットフォームをサポートしていて、
モバイル端末もサポートしてるし、Nintendo SwitchとかFull Sessionとかコンソールゲームも対応してるし、
本当にAndroidもiOSも対応してるしっていう感じで、本当にすごいいろんなプラットフォームをサポートしていて、
そのプラットフォームのスペックとかも全然違うわけなんで、グラフィックスAPIとかもそうですけど、
一つのRender Pipeline全部をカバーするのって難しいよねみたいなところで、
多分Render Pipelineを作り直そうみたいなキューインが発生したのかなというふうに聞いてますね。
で、その中で、スクリプタブルっていうぐらいだから、結構スクリプトを書くみたいな感じなの。
Render Pipelineって俺のイメージだと結構ブロック的にこれをやるステージ、これをやるステージみたいなのがあって、
それが繊維図みたいに矢印でパイプラインがこっちに流れていきますよみたいなのが繋がってるようなイメージなんだけど、
その一部をシェーダーとは別にスクリプトでいろいろ制御できるみたいな感じなの?
まさにそうですね。本当にC#のコードで描画のパスとかを定義できるようになってるんですけど、
もちろん、どうしようかな。
で、ちょっとスクリプタブルRender Pipelineの全体像みたいなのを説明すると、
スクリプタブルRender Pipelineってちょっと長いんで、SRPってこれがちょっと用意すると思うんですけど、
SRPだと、もちろん自分でRender Pipelineも定義できるんですけど、
一応、ET標準で2種類のSRP実装したレンダリングパイプラインがあって、
テンプレみたいなのがあるのね。
テンプレがあるんです。それをフォークして使ってもいいし、そのまま使ってもいいしって感じなんですけど、
テンプレとが2種類あって、URPとHRPっていう2種類のSRPのテンプレートがあります。
URPはUniversal Render Pipelineの略なんですけど、結構Universalって言ってるくらいなんで、
いろんなプラットフォームで動きますというか、どちらかというとターゲットとしてはモバイルみたいなスペックの低いプラットフォームも動くような、
それともう一つあるのがHRPっていうので、これはハイディフェニッションレンダーパイプラインの略なんですけど、
ハイエンドPCとかプレイステーションパイプとか、そういうようなスペックの高いようなプラットフォームがターゲットになってますね。
なるほど。それを使ってもいいし使わなくてもいいんだけど、ある程度必要最低限のものがそこに入っているみたいな感じで、
そこにさらに自分らでスクリプティングを加えていくみたいな感じか。
やっぱりこうURPがちゃんと安定して使えるようになったら1年の話でいいなと思うんで、
多分こうまだまだBuilt-in Data Pipelineでやってるような開発のものがあると思うし、本当に今ちょっとカオスな状態になってます。
ちょっとカオスな状態。
なんかどうなの?ちょっとこれも全然わかんないから想像で聞いちゃうんだけどさ、なんかその結構ゲームのタイトルによってまちまちだとは思うんだけども、
どこら辺の端末までサポートするか問題とかもあったりするんだよねやっぱり。
そうですね。
結構Webだとやっぱさ、どうしてもリンゴのマークの会社から出てるあいつの勢力が強すぎてさ、あいつの勢力が強すぎて、
Safariをサポートしないわけにはいかないんだけど、結構Safariサポートするの大変だったりとかあったりするけど、
それに類似するいろいろな大変さがありそうだなっていう感じがします。なんかUnity関係でも。
そうですね。まあなんかゲーム会社でも基本的にはこう、端末のシェア率みたいなのを見ながら、
ビジネス的な観点からどこまでサポートするべきかみたいなのを多分決めるんですけど、
そうですね。やっぱりモバイルって本当に最近だと、スペックの差がすごいあって、
本当にハイエンドな端末だったらもうPCよりハイエンドだったりする一方で、
海外とかまでシェアを見ていくと、めちゃくちゃスペックの低い端末もあったりするので、
その辺はなんか悩ましい問題だったりしますね。
そうだよね。結構なんか、俺が前に自分のクライアントというか、一緒にやってたウェブデザイナーさんと話したことあるんだけど、
なんかその、やっぱこう、ウェブデザイナーさんだからいいiPhoneを使ってるんだよね。
自分のiPhoneはさ、めちゃくちゃこう、一番最新のiPhoneとかを使ってて、
Pro Maxみたいなやつとかを使ってて、「すぎもさん、めちゃくちゃ今デモ版のやつめっちゃ動いてますよ」ってすごい言ってくれるんだけど、
いやそれ多分ね、その端末だからサクサク動いてるだけですよみたいな。
そこを多分世の中基準履き違えちゃうと、普通に動かない端末多分いっぱいあると思うんで、
ここから最適化必要ですねみたいな話を前にしたことあるんだけど、
やっぱその、地域とか、あとは客層っていうのかな、
どういう客層にリーチしたいかとかによってね、スペックとかもまた変わってくるだろうから、
なんか、御社みたいなこう、モバイルアプリとか作ってる会社はその辺大変そうだなっていうのは、
まあウェブも同じなんだけどね結局、ウェブも同じなんだけど、なんか大変そうだなっていう風にね、
まあ想像しちゃったりもするね。
やっぱり、なんかハイエンドの端末だったら一番いい品質で届けたいんですけど、
とはいえ低い端末までサポートし上げないと、そもそも売上のパイが減ってしまうので、
そこはこう、なんでしょうね、高い、いい端末だったら最高のものを出しつつも、
ちゃんと、ミドルスケップとかローエンドの端末も動くようにこうフォールバックというか、
したりとかもちろんしてますね。
なんかその辺は、例えばなんかポストエフェクトが発生しないようにするとか、
なんかそういうことをして軽量化するの?
そうですね、まあ本当にいろんなやり方で軽量化するんですけど、
あとですね、ポストエフェクトはオフにしても完全に働きはしないので、
結構オフしやすいので、ポストエフェクトが一番に多分考えるところで、
あとはフレームレートとかですかね、
FPSを下げる?
そうですね、フレームレートとかFPSを下げるっていうのがあったら多分機械的に下げやすいので、
そこはやりやすいところで、あとは何だろうな。
結構Webだとさ、デバイスピクセルレシオが結構クセモンというか、
あれそのままレティナディスプレイとかの返してくるデバイスピクセルレシオの数値をそのまま使っちゃうと、
バキバキの綺麗なレンダリングにはなるんだけど、
めちゃくちゃ重くなっちゃうみたいなとか結構あったりするけど、
そういうのもなんか関係ありそうだね。
そういうのとめちゃくちゃ関係あって、やっぱり本当にモバイル端末ってGPUの性能はそこそこの割に、
本当にめちゃくちゃ解像度がPCより解像度が高いですからね。
解像度めちゃくちゃ高いからね。
だから本当にレティナディスプレイをドットで描画してるとGPUがどうしてもできなくなっちゃうので、
そこはやっぱりもう少し解像度を下げたレンダーテクチャに描画してから引き伸ばして、
UIとかはちゃんとドットバイトって描画するみたいな感じで、
3Dは解像度が低い、UIだけフル解像度みたいな、そういう風になるようにしてますね。
多分他社さんとかでも同じようなクルマになる?
そうだよね、やっぱりその辺はやっぱWebと同じなんだな。
Webも結構そんな感じだもんね。
まずデバイスペキセルレシオみたいなのを見て、さらに何フレームかレンダリングを回してみて、
どれくらい時間かかったかを計測して、FPSを自動的に下げるようにしたりとか、
そういう涙ぐましい仕込みをしたりすることがあるんだけど、そういうところの大変さは。
でもアプリの場合は切な的ではないというか、Webの場合だと切な的というか、
一回まずは開いてもらって、ある程度見てもらえれば一旦目的は果たしたって言えるかもしれないけど、
モバイルアプリとかになるとアンインストールされてしまったら終わりだから、
その辺よりセンシティブに考えなきゃいけないとかあったりしそうな気もするけどね。
実際はどうなんだろうね。
やってることは同じなんだけど、Webの場合も何度も繰り返し見てもらいたいってなったら、
結局同じことをやらなきゃいけないから、
重いなーって印象を持たれてしまったらそれで使いにくいなーってなってしまったらおしまいだから、
そういう意味では結局同じなのかな。
たぶんその辺のちゃんとサクサク動くかみたいなところがユーザーの継続率とか、
それが結果的にメディア上げとかには影響してくるかなと思いますね。
そうだよねー。Webの場合はだから、ちょっとあれかもね。
WebGL使ってるようなサイトの場合だと、そこまで操作性とかっていうよりは、
見た目の印象を重視してる場合が多いかもしれないけど、
ゲームの場合はその辺全部入りっていうか、
GUIの使いやすさとかも結構、GUIというかインターフェースの部分も使いやすかったり、
リスポンスが早かったりみたいなところも大事だと思うから、
なんかより総合格闘技っぽいっていうか、
なんかいろいろ気にしなきゃいけないのかもしれないね、もしかすると。
そうですねー。
なるほどねー。結構じゃあUnityのレンダリングパイプラインの中身を、
SRPを使ったりしつつ開発したりみたいなのもあると思うんだけど、
他にも、将来こういうところがここ数年重要そうですよ、みたいな、
これから先の機能とかもあったりするんですか、そのUnity周りでいうと。
今までURPの話してきたんですけど、
もう一つはさっき言ったHDRPっていうのがあるんですけど、
これはプレイステとかハイエンドPC向けの機能なんですけど、
これは本当に、結構重たいですよりというか、
ハイエンドPCで動けばいいような機能なんで、
例えばボリュームレンダリングとか、
ディストサイトを入れたりとか、ボリューメトリックフォグとか、
あとは実験的にレートレーシングが入ったりしますね。
そうなんだ。まあでも、そうか。そうだよね。
そういうところに入ってなかったらそもそも結構、
使うの大変になっちゃうもんね、逆に。
ある程度そのUnityの側でこういう感じで使えますよっていうのを、
ある程度示してくれないと、なかなか導入するの大変そうだもんね。
そうですね。まあでも結構簡単に、
ある程度簡単にレートレーシングが使えるようになってて、
具体的に言うと、ただレートレーシングって言っても、
ハイブリッドレートレーシングってやつなんで、
全部をレートレーシングで描画すると、
さすがにハードウェアアクセラレートされてるようなGPUだとしても、
全部レートレーシングが必要なので、
一部分だけレートレーシングを使うみたいな感じになってて。
なんかそれが結構あれだよね、そのUnityに限らず、
今の世代だとそれがトレンドというか、
普通にそういう風にやるのが、今は有意義な使い方みたいな感じになってるよね。
そうですね。最近のタイトルだと反射だけレートレーシングするとか、
そうすると今までのスクリーンスペースリフレクションだとできなかったような、
例えばなんだろうな、後ろに鏡があって、
スクリーンスペースだと後ろ姿っていうのは要するに、
今やる画面地にはないので、
そもそも画面に描画されてない情報がスクリーンスペースリフレクションだと取れないんですけど、
ちゃんとワールドスペースでレートレーシングすることで、
映ってない、例えばスカートの中とか、そういうのもちゃんと。
スカートの中とか。
SSRだと、
言ってることはわかる。
そもそも今のカメラから撮れないとこは撮れないので。
いやー、そうだね。
SSR、そもそもちょっとその、
SSRという言葉が通じない人が聞いてるかもしれないから、
ちょっとだけ補足すると、SSR、スクリーンスペースリフレクションっていうのは、
スクリーンスペースっていうぐらいなので、
1回レンダリングをしてしまって、
そのレンダリングしたスクリーンに映っている、2次元のビットマップ的なものから、
リフレクション、つまり反射を疑似的に、
そのスクリーンの情報から再現するみたいなのがSSRっていう機能で、
実際に背中の部分が画面に描かれるわけじゃないから、
SSRだと背中が見えませんよねみたいなことだよね要するに。
まさにそういうことですね。
結構SSRもね、
なんかもう結構コンシューマータイトルとかでは、
まあありかし当たり前なのかもしれないけど、
WebGLだとあんまりSSRとかそんなに使われることがないから、
結構知らない人が多いかもしれないけど。
SSR重いんですよね。
そう、WebGLでちょっとやっちゃうとね、ちょっと重いから、あれなんだけどね。
Sバッファーでレイマッチングとかしないといけないので、
まあまあ割とヘビーな処理になっちゃいますね。
そう、だからちょっとね、やっぱまあスクリーンスペースなんで、
レイトレとかやるよりかはまあまあ軽いんだけども、
とはいえやっぱちょっと負荷が高い処理ではあるんで、
なかなかねWebGL開発ではお目にかかることが滅多にないんだけど、
でもやっぱ必要になることはある。
俺案件でやったことはあるもんね、やっぱりSSRは。
そうなんですね。
まあ俺の場合は結構特殊な案件がいっぱいあるから、
まあそのなんていうんだろう、
問題感からすると思っちゃうけど、
いろいろそういうところの仕様を把握したりとかしながら、
プログラマーとして活躍しているっていうのがすごい伝わってきて、
ちょっと安心ではないんだけど、頑張ってんなって思いました。
はい。
まあでもUnityの開発者が一番頑張ってると思いますけど、
そういうプラットフォームの違いを吸収してるから。
本当だよね。それめちゃくちゃ大変そうだよな。
あとはSRPになって新しく出た目玉機能というと、
シェーダーグラフっていって、ノードベースでシェーダーができますみたいなもので、
実は言うと、Build Inventor Pipelineでも、
サードパーティー制でノードでシェーダーを切れるやつっていくつかあったんですけど、
結構有料だったりとかしたんですけど、
それがちゃんとUnity公式で無料でシェーダーノードグラフが提供されたっていうのは結構、
主要ポイントかなって思いますね。
実際になんかもう、これもし言えなかったら無理ではないけど、
案件で普通に使えるレベルになってる感じ?これは。
サイキャードは割とちゃんと使えるかなって感じですね。
ノードベースって結構、流行ってると言うと言い過ぎだけどさ、
結構何でもノードベースに従う傾向があるのかなって、
俺は勝手に思ってたりもするんだけど、
例えばUnreal EngineだったらBlueprintとかが有名だし、
結構3GSなんかもノードベースにしていこうみたいな流れがあったりするっていう話を
この間、山本さんから聞いたりもしたし、
結構ね、やっぱノードベースにすることの需要、
何かしらの需要を満たすからノードベースになっていくんだと思うんだけど、
Unityの場合はシェーダーグラフにしたことによって何が良くなったって感じなの?
そうですね、一応いろんな理由があると思うんですけど、
一つはシェーダーグラフって一つのシェーダーグラフから、
いろんなレンダーパイプライン用のシェーダーが生成できるようになっていて、
さっき言った一つのシェーダーグラフから、
URPのシェーダーとかHDRP用のシェーダーっていうのが出せなくなっているので、
いろんな種類が増えてきたレンダーパイプラインに対して、
複数のシェーダーのコードを生成するために、
シェーダーより1個目の中小レイヤーみたいな位置づけであるっていうのがあると思いますね。
だからシェーダーグラフが中間に入ってくれるおかげで、
レンダリングパイプラインに依存しないシェーダーが書けるみたいなイメージか、そうすると。
そうですね。
シェーダーのメタ言語的な側面もあるのかなと思いますね。
なるほどね。
あとはやっぱり、これ多分いろんなところで言われているからあるかもしれないですけど、
エンジニア以外もシェーダーを書けるっていうのはやっぱり差別化というか、
強みなのかなと思いますね。
要するにいわゆるアーティストの人からプロ側に依頼して、
こういうシェーダーを作ってくださいっていうようなやり取りが発生していたのが、
アーティストだけでもシェーダーを作れるっていうのは確かにメリットになるかなと。
結構なんかもう普通にスライダーをグイグイって動かしたら、それが反映されるみたいな感じに使えるの?普通に。
なんか俺どういう状態のものなのかいまいちわかってないんだけど、そのシェーダーグラフというものについて。
結構ほんとプリミテッドというか、基本的には数式が単にノードに置き換わっただけなんですけど。
なるほどね。そういう感じか。
例えばディフューズライティングしたかったら、ライトベクトルとノーマルベクトルを取った絵をノードに書くだけです。
なるほどね。そういう感じか。
ただ、そういうやり方だとちょっとあんまり面倒作画があっただけなのかなって感じはしちゃうんですけど。
もちろんライティングよりもレイヤー一つ上で、テクスチャーなんか何個かあって、このテクスチャーは例えばラフネスに使いますとか、
そういう用途だと結構、むしろシェーダーコードよりはしっくりきたりするのかなと。
目で見てわかりやすいっていうのもあるしね。
あとはPBRになってくると、ライティングの計算はその後よりはPBRのラフネスとかスムースネスみたいな、メタリックとかそういうPBRのパラメータを出力台にするので、
そういうのがアーティストでも使いやすいかなと。
確かにね。コードで書かれているよりかは絶対そっちの方がわかりやすいよね。
やっぱりね。
ただやっぱり使い分けが難しいなと思ってて。
ライティング計算みたいな数式をノードで書くのは多分現実的じゃないので。
ただそれを解決するのがカスタムファクションっていうのがあって、
一部のノードはHLSLのコード、Shaderのコードを書けるっていうノードがあるので、
そうやってあげるとエンジニアの両分はカスタムファクションに実装して、
それを使って、それを組み合わせてアーティストの方がうまいことをやるとか、
そういうような分担が割といいのかなって感じには考えてますかね。
なるほどね。Unityは本当にさっきもガム君が言ったみたいに、
たぶんUnityを作っている人たちがめちゃくちゃ大変なんだろうけど、
これからもたぶんどんどん進化を重ねていくんだろうから、
それに追いついていくっていうのもすごい大変そうな感じがするわ。
結構あれですね、URPのバージョンって今15まであるんですよね。
リリースして4年とかなんですけど、15までバージョン、メジャーバージョンがあるので、
そのたびに結構破壊的な変化があるかもしれない。
もしかしたらWebのフロントより変化激しいんじゃないかと。
そうだよね。下手したらあるかもしれないよね。
だからその辺のバージョンの変化とか、
単純に新しい研究で新しいテクニックがどんどん増えたり、技術が増えたりみたいなのはあるとしてもさ、
ツール自体の変化も追いついていくのは大変そうだなって思うわ、本当に。
[音楽]
ここまでは結構Unityの話を中心に聞いてきたんですけども、
ガム君といえば、私のガム君を普段から観察しているというか、
Twitter越しに見ている様子で、特に話題として外せないなと思っているのに、
レイトレ合宿があるんですけど、レイトレ合宿がどういうものかというところから聞いてもいいですか。
レイトレ合宿っていう、デイトレ、オフラインレンダリングの合宿勉強会が、
毎年8月か9月、セレックの翌週ぐらいに毎年開かれていて、
ここでは自分で自作のレンダラーを作って、それをバトルするというか、
誰が一番すごいレンダラーを作れるのかを競う。
これ競うのは参加者投票できるみたいな感じの、ユニークな合宿勉強会みたいなのがあるんですけど、
そこに結構毎度参加しますね。
結構なんか、俺本当に、なんていうのかな、これ偏見ではないんだけど、
レイトレって俺の中ではすごく難しいイメージがあるから、
だから初めてガム君がレイトレ合宿行ってきますみたいなツイートしてた時は、
こいつやべえなって最初思いましたね、それ見た時は。
あー。
うん。
確かに最近レイトレ合宿のレベルがだいぶ上がってて、
自分も毎回宣戦強強としてるんですけど、
宣戦強強としてる。
あのー。
割とガチ勢しかいない感じの雰囲気あるからね。
ガチ勢しかない。
ガチ勢しかない。
ちょっとね、なんかこうなんていうのかな、
みんなでたくさん人集めてわきあいあいっていうよりかは、
やっぱそのレイトレに真摯にね、真面目に向き合っている人たちが、
技術を高め合うためとか、議論をいろいろするためとか、
自分のレンダラーの技術、プログラミングの技術を競うためだったりとか、
いろんな理由でね、やられて参加されてるとは思うんだけど、
結構内容的にはもうガチの、
本当になんかちょっとこう、
かじっただけではわかんないような用語が結構飛び交うようなイメージがあるわ。
なんかレイトレ合宿は。
要するにいろんな経路で、おぼえた人を何回も二つに相互に反射とか拡散した後のレイみたいな、
そういう間接行の影響まで考慮する必要があって、
それをシミュレーションすると、めちゃくちゃ膨大な計算力が必要になるので、
時間かかるって感じですね。
そうだよね、だからその辺の高速化のノウハウとかは、
俺ほとんど、なんとなく用語はわかる、目にはしてるからさ、
なんとなく用語はわかるんだけど、
自分でそこまでがっつり取り組んだことはないから、
どういう風な高速化があるのかとか、あんまり詳しくは知らないんだけど、
結構その、今年は2秒以内に1枚絵描かなきゃいけないみたいなのがあったってことだったけど、
結構ガム君的にはどの辺を気をつけて実装しました、みたいなのはあったりするの?
そうですね、レントルの高速化は本当に色々あるんですけど、
大体大きく分けると4つぐらいあって、
1つ目がマシンスペックをなるべく活用する、最大限活用するっていうのがあって、
最近のCPUってすごいコア数がいっぱいあると思うんですけど、
単純に実装すると1コアしか使えなくて、
全部のコアを均等に100%のCPUを使うって意外と難しかったりするんですよね。
その辺は平均計算とかうまく利用して実装するという感じですね。
それが1つ目ね。
2つ目が交差安定の高速化。
要するにレントルって半直線、0とポリゴン、三角形の交差安定を何回も何回もやるような仕様なんですけど、
レントルだとよくVBHっていうデータ構造が使われていて、
VBHっていうのはBounding Volume Hierarchyの略なんですけど、
これを使って交差安定を高速化しますね。
普通に素朴に交差安定、Cに対して交差安定する場合って、
ポリゴンを1個1個比較して交差安定するので、
例えばポリゴン数が1万個あったら1万回1個ずつ交差安定しないといけない。
それはCが巨大になってくるとどんどん非現実的になってしまうんですけど、
VBHっていうのはどういう構造かっていうと、
Bounding Boxが入れ子になってるんですよね。
要するに階層構造になっていて、
これを使うことによって交差安定をするオブジェクトの範囲っていうのをどんどん絞り込んでいくことになるんですね。
そうすると、素朴な実装が線形となったからとしたら、
VBHを使うことによって、2分短冊的なことができるので、
それによってオーダーをNから6Nに減らすことができるので、
これによって交差安定は高速化できますね。
結構このポッドキャストを聞いている人たちで伝わりそうな概念で言うと、
3DSで言うとRaycasterが原理としては近くって、
3Dシーン上のオブジェクトをクリックして選択したいみたいな時にRaycasterを使うと、
クリックされた場所にメッシュがあるよっていうのが結構判定できたりするんだけど、
要はあれを全部のピクセルに対して、しかも何回も何回もやらなきゃいけないっていうことをやるんで、
それをなるべく範囲を狭めて、
絞って絞って本当に厳密にチェックしなきゃいけないところ以外はざっくり判定して、
なるべく高速化するみたいなそんなようなイメージだよね、多分ね。
そうですね。
ちょっと余談になっちゃうんですけど、最近ではないか、2018年くらいの話なんですけど、
NVIDIAからRTXっていって、レートレーシング対応GPUみたいな感じで出たと思うんですけど、
どうやってやってるかっていうと、VVHに対するトラバーサルみたいなのをハードウェアでやるっていう、
専用のハードウェアで交差判定をするっていうのがレートレーシング対応GPUの本質というか、
それがレートレーシング対応っていうのだったりしてますね。
だからそこの部分が最適化されるとめちゃくちゃ高速化につながりますよっていう、
高速化ポイントその2が交差判定の高速化ですよっていうところだよね。
その3がサンプリング高速化なんですけど、サンプリングってどうしようかな。
レートレーシングではBRDFっていうのは、もしかしたら聞いたことあるかもしれないですけど、
物体の表面にある角度で入射したものがどの角度に出て感謝するかっていう、
そういう確率ミスの関数みたいなのがあって、
完全角三面だったらそれの確率ミスとか均等というか、
要するに完全にランダムに反射するようなマテリアルもあれば、
金属とかだったらある程度スピークラーのローブがあるというか、ピークがあったりする。
要するにBRDFによっていろんなマテリアルが表現できるんですけど、
確率的にその例の反射の方向を決めるみたいなのをサンプリングって言うんですけど、
レートレーシング、パストレーシング、単方向パストレーシングの話にあっちゃうんですけど、
基本的にカメラから例を飛ばしてBRDFの確率ミスに沿って、
次の例をサンプリングしてっていうのを何回も繰り返して、
偶然光源にヒットしたら、ライトからカメラのパスができたというところで、
一部の参加者はニューラルネットワークを作ってたりもするんですけど、
自分はちょっとそこまでできなかったので、
オプティックスっていうNVIDIAが提供してるライフライがあって、
オプティックスの中にディープランニングデノイザーっていうのがあるんですけど、
そういうことね。あらかじめ入ってるから、それを使えば綺麗になるよっていうこともできるんだ。
そうですね。
オプティックスを使えば。
オプティックスのデノイザーは本当に優秀で、結構簡単に使えるので便利ですね。
速度的にはどうなんですか?やっぱりそれが速いって感じなの?
十分速いですね。リアルタイムレンダリングはちょっと厳しいかもしれないですけど、
1秒とかかけていいんだったら、1秒はかからないですね。数ミリ秒。
ただリアルタイムだったら多分厳しいと思います。16msとかでできないと思いますけど。
60fpsでは多分ちょっと間に合わないよね。
なるほどね。
60fpsでやるとしたら、倍率だったりとかそういうような方が今扱われてるかなと思いますね。
なるほどね。一応最初の話に戻すと、レイトレは何やかんや結構レンダリングに時間かかってしまうという歴史があり、
最近だと2秒で1枚とか焼かなきゃいけないので、高速化しなきゃいけないって言って、そこで高速化の端だとして4つありますよと。
1つ目がCPUの全高を使い切るみたいなそういうスペックをちゃんと引き出しましょうねっていうのが1つ目。
2つ目はレイトレの高速判定の部分を最適化していきましょうねっていうのが2つ目。
3つ目が例のサンプリングを効率化しましょうね。
インポータンスサンプリングだったりみたいなのを駆使していくっていう話が3つ目。
4つ目がノイズが乗ってしまったレンダリング結果をデノイザーを使ってきれいにするってことだよね。
この4つを駆使して最終的に出来上がった絵の連番を組み合わせた動画でみんなで競い合うっていうのがレイトレ合宿ですよって感じか。
楽しいイベントですね。
話だけ聞いててもめちゃくちゃ面白そうだけど、自分が出来るかどうかで言ったら出来そうな気がしない。
昔初回の開催の時とか、1時間かけてノイズないやつとかで許されてた。
許されてるかそういう方もいたんですけど、最近はみんなめちゃくちゃ少ない時間で全然ノイズない結果を出してくるので。
本当にリフレッシュしますね、レベルが。
実際、たぶんこのノーモライズFMのショーノートにもリンクとか貼っておこうかなと思ってるんですけど、