最近のゲームは非常にリアルな表現ができていますが、人に関してはまだまだ不自然さを感じる部分がたくさんあります。なんというか、マネキン人形みたいな雰囲気を感じることが多い。。。風景はとてもきれいなのにね(´・ω・`)

例えばこんな↓

Cyberpunk2077 周囲の環境はきれいなのに、人の表現は微妙
Battlefield V 自然の表現に対して、人の肌とかが微妙
Battlefield V やっぱり人の肌表現が際立って微妙
Skyrim mod適用 とてもきれいになるが、、、

Skyrim 上記と同じmodを適用した際の人、、、

と、まぁこんな感じに。(modは個人製作者のものなので、まぁ参考程度ですが。)

自然や建物の表現などの背景は非常に綺麗になっている一方で、人の表現は際立って不自然さを感じます。それがなぜなのかを調べてみました。

人を見るときは拡大されるから

まず人が不自然に感じる理由として上げられるのが、人を見るときは周囲の環境を見るときに比べて拡大されています。同じ解像度のテクスチャを見るならば、拡大されているほど変に見えますね。それから、遠景になるほど詳細部分は隠れるわけ(ある点の周囲で平均化されるなど)なので、詳細な不自然さが適当に散らされるとか。例えば↓このシーン。

BattlefieldVで、やられた仲間を蘇生するシーン

このくらいの視点で見ると地面はそこそこリアルに見えるが
仲間の蘇生時に地面が拡大される(視点が地面に近くなる)と、地面にある草がギザギザしている

立っている状態で視点が高い位置にあるときは、地面となっている砂浜は綺麗に見えます。しかし、仲間の蘇生のためにしゃがんだくらいの視点になると視点が地面に近くなります。すると地面が拡大されて描写されるので、綺麗に見えていた地面に不自然さ(ギザギザや描写の粗さなど)が現れてきます。

ゲームで人を見るときは、画面いっぱいに人が映るように見ることが多いので不自然さが際立ってくる、というのが理由の1つになると思います。

人が人をみることに慣れているから

人は人の顔をよく見ますから、それだけ人の顔を認識することに対しては長けていると思います。犬の個体差よりも人の個体差の方がわかりやすい、みたいな。

これはちゃんとした証拠は上げられないですが、こういう点があります。

ゲーム用のCGの制約

映画では綺麗に表現されてるけど、1フレームをレンダリング(描写)するのに沢山の強力なコンピュータを使って何時間かけても良いという映画とは違って、ゲームでは1台の限られた計算資源しかなくて、リアルタイムに描写しないといけない。1フレーム0.1秒(10fps)もかかるとガックガクなゲームになる。。。という制約があります。

そのため、映画でのフォトリアルなCGに比べて計算コストの低い近似的な手法をしているはずです。

映画では、例えば”STARWARS Rogue One” に出てくるターキン提督がCGです。(別の俳優をCGで返信させてるので、フルCGでは無いですが)ターキン提督は1977年のSTAEWARS episode4に出てきましたが、その俳優のピーター・カッシングは1994年に亡くなっているので、2015年のRogue Oneには演じることはできませんでした。しかし、物語上必要な役でもありました。そこで、別の俳優に演じてもらって、CGでピーター・カッシングに変身させたわけです。

以下の記事で語られていますが、非常に沢山の調整をした上で、あのリアルでピーター・カッシングそっくりの映像ができました。いろいろな角度からリアルタイムでレンダリングを行うゲームでは、こんなことはできないですね。

そもそもの人の肌表現の難しさ

個人的に一番気になっていたことはこれです。そもそも人の肌の表現をコンピュータグラフィックスで行うのは難しいのではないか?

調べてみると、人の肌表現が難しい理由がいくつか見つかりました。

光が肌を透過したり反射したりする

手の下にライトを置くと、肌しかない部分(指と指の間や手の端など)は光が透けて見えます。

これは管理人の手でございます

これをコンピュータで計算するのは非常に難しそうですし、処理時間もかかります。

このような半透明なものに対して、入射した光が内部で散乱した後に透過していくことをSubsurface Scatteringと言います。3DCG の質感を生成する技術の一つであり、人の肌の他に牛乳や大理石の表現にも利用されているようです。(Wikipedia – サブサーフェス・スキャタリング)

この技術については、こちらの記事も参考になりそうです。

https://game.watch.impress.co.jp/docs/series/3dcg/590596.html

PS3時代でのSubsurface Scatteringの計算手法に対して、PS4時代で広く採用されている計算手法のScreen-Space Subsurface Scattering(SSSS)について解説されている

上記画像比較のようにSubsurface Scatteringの近似計算は時代とともに進化しているが、あくまでゲーム内で速度が出る制限の中での近似なので、やはり不自然さは残る。

Subsurface Scatteringに関しては、Computer Graphicsの分野で様々な研究が続いています。例えばこれとかわかりやすいと思います。(英語音声ですが日本語字幕があります)

さらに、これらの肌の表現の難しさに加えて、実際の人の肌には毛穴やシミ、ほくろや細かい凹凸などもあります。これらはそれぞれ光の反射や透過、散乱が違うので、それぞれ別の計算が必要だったりします。ゲームでそこまでするとリアルタイムにレンダリング(描写)するのは難しいので、テクスチャにドットを埋め込んで適当に表現する、という方法が取られているようです。もちろん、そんなやり方では不自然さが出てきます。

人の筋肉や骨格モデルが複雑

今までの静止画として見た場合の話とは少し違った視点で、人のリアルな”動き”に関してです。

指を動かそうと思うと筋肉が動き、それが筋を動かして指が動きます。このとき、筋肉が膨らんで見えたり、筋が浮き上がって見えたりしますが、たいていのゲームではこのような人の内部の細かい動きはほとんど再現していません。顔だけでも43の筋肉があり、それらがどのように関連して動くのかを考えると非常に複雑なことがわかります。

モーションキャプチャで人の動きを計測して開発中!みたいな記事を見たりしますが、ゲーム内では筋肉や筋の動きをちゃんと再現していないので、人形が動いているようにみえます。逆に鎧を着ているキャラクターは不自然さが緩和されたり(管理人の体感のため、他の人がどう感じるかはわからないけど)。

皮膚は伸びる

皮膚は伸びます。つねることもできますし、筋肉が動けば皮膚も引っ張られる。これをゲーム内でどのように表現しているかというと、単純にテクスチャを引き伸ばしていることが多いようです。テクスチャは要は画像なので、拡大すればガクガクに荒くなります。計算資源の節約のために、光源を考慮して光のテカリを描いているテクスチャがあるらしいですが、そのような引き伸ばして貼り付けてしまうと全然違うことになって不自然さを感じます。

肌の表面の光の反射は、皮膚の伸び方で変わってきます。これもまた、本当は計算しないといけないけど省略されている(と思われる)。

皮膚の伸びを考慮してレンダリングすることはできないのか、というと、そういう技術はあるようです。例えばこれ↓

SIGGRAPH2015で発表されたものです。皮膚の伸びや、弾力のあるボールの光のレンダリングを動的に行っています。しかし、これもまた計算資源の問題からゲームに適用は難しいでしょう。

まとめ

コンピュータグラフィックスの分野で様々な研究がされていますが、やはり計算資源が不足してゲームへの実装は難しいようです。Ray Tracingがゲームでリアルタイムにできるようになった!!となりましたが、Ray Tracing自体は1979年に最初の手法が出てきてから様々な改良が加えられて2000年代には映画で採用されています。(2006年のCarsとか(論文があるlol))

今後もGPUの発展が続きそうですね。(量子コンピュータが早く来るかな??

ところで量子コンピュータってどうなんでしょう。コンピュータグラフィックスに効果的な計算資源になるのでしょうか?今後どうなるんでしょうね・ω・

Categories:

No responses yet

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA