15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】HDRPを使ったキャラクターの肌表現(Subsurface Scattering)

Last updated at Posted at 2021-08-13

※こちらの記事の内容+αと、実際の作例を収録した電子本をBoothに置いていますので、興味のある方は是非見てみてください。
『Unity HDRPではじめる写真撮影(技術書)』

こんにちは、八ツ橋まろんです。

Unity HDRP Raytracingを使ってキャラクターの写真撮影をしています。
image.png

そもそもHDRPって何?っていうと、Unityの中のハイレベルなレンダリング手法のことです(ざっくり)。通常のUnityよりもきれいなライティングでよりフォトリアルな表現ができるのが特徴です。下図はどちらもRealtimeのDirectional Light 1灯で照らしたSceneですが、HDRPの方がよりフォトリアルな見た目になっているかと思います。

[左:通常のUnity 右:Unity HDRP]
image.png

Unity HDRP Raytracingのプロジェクトの作成方法や、基本的な設定方法はpixivFANBOXの記事や、冒頭で紹介したBoothの電子本で解説していますので、よければお試しください。

さて、HDRPでは使用可能なShaderが従来と異なるため注意が必要です。
下図のように、従来のStandardシェーダーではエラーとなりピンク色になってしまいます。ほとんどの場合、代わりにHDRP/Litシェーダーを使うことになります。

image.png
image.png

ユニティちゃんトゥーンシェーダー(UTS2)などに代表される、『アニメ調キャラクターでよく使われるトゥーンシェーダー全般』も、ほぼ全てエラーとなるため、代わりにHDRP/Litシェーダーを使うことになります。
(余談ですが『Unlit Toon Shader』は素朴な実装によりHDRPでもエラーにならないように作ったUnlitなトゥーンシェーダーです)

背景やキャラクターの服などはHDRP/Litシェーダーでフォトリアルにすると概ね良い結果を得られます。
[左:明るいところで撮影  右:暗いところで撮影]
image.png

対して、キャラクターの肌はHDRP/Litシェーダーでこんな見た目になります↓↓↓↓
[左:明るいところで撮影  右:暗いところで撮影]
image.png

暗いところでは悪くない結果になりましたが、明るいところで撮影したほうは、口元や鼻、目元の陰影によりフィギュアっぽい見た目になっています。肌というよりはプラスチックのような固い印象ですね。これは、キャラクターに対してトゥーンシェーダーではなく、従来で言うStandardシェーダーに相当するシェーダーを使ったためです。

しかし前述の通り、既存のトゥーンシェーダーは使えないことと、せっかくHDRPのシェーダーが用意されているので、これを使っていい見た目が作れないか考えてみます。(もちろん、HDRP/Litシェーダーはきっぱり諦めてHDRPで使えるトゥーンシェーダーを探して使う、というのは良いですが、HDRP/Litシェーダーの理解をする前に見切りをつけてしまうのはもったいないですので)

HDRP/Litシェーダーは設定項目がとても多く、色々な質感を表現できます。初期状態の『Standard』モードで使った場合、金属やプラスチック、木材のような物質に合った質感になります。
image.png

『Subsurface Scattering(SSS)』モードは、肌のようなわずかに透明感のある素材の光の透過・反射具合を再現するモードです。

肌のようなわずかに透明感のある素材とは、どういうことかというと、

『プラスチックのような物質は光を全て表面で反射しますが、肌は表面の反射に加え、ちょっと光が侵入してから反射して出ていく光もあります。これにより、光に当たると肌の端の方は少し赤みを帯びます。』

もっと具体的に例を言うと、、、

『部屋の蛍光灯を見上げて、手をかざして光を遮ってみてください。すると、指の間の水かきの部分が少し明るく、そして赤みを帯びます。蛍光灯から水かき部分に侵入した光が少し貫通して目に届いているためです。赤色は肌の中の色です。』

肌はわずかに透明な物質で、表面で全ての光を反射するわけではないのですね。一部はある程度侵入してから反射し、肌の薄いところは光がいくらか透過します。

SSSでは『Diffusion Profile』というものを作成することで、これを表現します。Projectウインドウで右クリック→Create→Rendering→Diffusion Profileを作ります。これをSSSのDiffusion Profileの項目に入れて、Fixを押します。
image.png

Diffusion Profileのパラメータは下図の通りです。パラメータの調整によって、最終的に、一番下にあるカラーバーができあがります。
image.png

肌の場合のパラメータの例は以下です。これらに正解はなく、ライト環境やポストプロセスを含めて調整し、結局のところ最終的な見た目が好みかどうかだけで決めて構いません。
image.png

そして、肌のマテリアル側でThicknessを調整します。例えばThicknessを0.2にすると、Diffusion Profileで作成したカラーバーの中の0.2に相当する色が適用されます(下図)。
マスクを使うことで、Thicknessを場所ごとに変えることもできます。
image.png

SSSによる色変化とぼやけによって、プラスチックのような質感から、肌のような柔らかい質感に近づいたのがわかるでしょうか。下図では対比として、プラスチックの質感に対して単純に赤味を加えた場合も一緒に載せています。
[左:SSS 中:Standard 右:Standard + BaseMapに少し赤みを足した]
image.png

HDRP/LitシェーダーのSSSモードを使うことで、やわらかい肌の素材を表現することができるようになりました。
この状態から、ポストプロセスで色調整をしたり、3Dモデルの顔の影が気になる場合は、法線を調整したりなど工夫すると、より理想的な写真を撮ることができます。

さて、HDRP/Litシェーダーでの肌表現について書きました。キャラクターの『映え』を考えると、もっと議論するべきところがありますが、この記事はSSSの紹介のためここまでとします。この記事の内容に加え、さらに踏み込んで『HDRPでアニメ調キャラクターを見栄え良く撮影する』という話はpixivFANBOXの記事や冒頭で紹介したBoothの電子本に掲載していますので、興味のある方は是非読んでみてください。
(キャラクターにアウトラインを付けたり、実際に写真を撮るための色調加工だったりなど)

それではっ🌟

八ツ橋まろん

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?