うにty生活

UnityChanを生活させたい

【HDRP】Subsurface Scatteringをカスタマイズ #32

 

どうも、ラブヘイトです

 

いきなり余談ですが3Dオブジェクトにミラーっていうのが追加されててびっくりしました!

完全な反射ではないですが、これはこれで使えそう!

f:id:tubakihimeLoveHate:20200725212455p:plain

 

さて、今回はUnityをHDRPで利用できるLitシェーダーのSubsurface Scatteringの紹介です。

前回はUnityちゃんに使いましたが、今回は様々な物体に適用してちょっとした絵作りをしていこうかなと思います。

 

HDRPでUnityちゃんを使う方法(SSS設定もあり)はこちら

Unityちゃん!HDPRに引越しだ!【UnityちゃんHDRP移行ガイド】#31 - うにty生活

 

 

環境

Unity 2019.4.0f1

HDRP 7.4.1

 

Subsurface Scattering(SSS)とは

これは表面化散乱を表現できるというすごいシェーダーです!(語彙力&押し売り)

表面化散乱とは

物体の表面下に光が侵入してきたとき、反射しまくって入ってきた場所とは違うところから表面外に出ていくことです。この時に物体が透過したりぼやけたように見えます。

 

なので、SSSを利用するとより本物の肌に近づけることができます。

もっと詳しく知りたい方はこちらの記事がわかりやすかったです

基礎からはじめる物理ベースレンダリング - Qiita

 

こんな絵が作れる!

SSSを適用するとこんな絵作りが簡単にできます。

f:id:tubakihimeLoveHate:20200726110744p:plain

全て無料のアセットとHDRPでできてます。

 

SSSを適用するための準備

LitシェーダーのMaterial TypeをSSSにするだけでは、SSSは適用されません。

少し準備が必要です。

1. SSSを有効にする

Asset > HDRenderPipline > Material > Subsurface Scatteringにチェック

2019.4.0f1ではプロジェクトウィンドウのAssets > Setting > HDRenderPipelineAsset

のMaterialに移行されています

 

f:id:tubakihimeLoveHate:20200725220310p:plain

 

2. Litシェーダー にDiffusion Profileを設定

Diffusion Profileの詳細については後述します。

今回はこのDiffusion Profileをカスタマイズしていくのですが、今はとりあえず準備だけ

Create > Rendering > diffusion Profileで作成します。

f:id:tubakihimeLoveHate:20200725215511p:plain

 

3. Diffusion Profileを登録

Diffusion Profileはあらかじめ登録したものしか使うことができないので

Asset > HDRenderPipline > Material > Diffusion Profile List から「+」を押して先ほど作成したProfileを登録します。これで準備完了

 

※こちらも現在はAssets > Setting > HDRenderPipeline > Material > Diffusion Profile List

また2019.4.0f1ではDiffusion Profile作成したら勝手に追加されていました

 

 

Diffusion Profile作成

では蝶用に先ほど作成したDiffusion Profileをカスタマイズしていきます。

f:id:tubakihimeLoveHate:20200725220602p:plain

 

Scattering Distance

滲み色とぼかし半径を選択する項目

カラーピッカーで色を、Intensityで光が表面下(surface下)を移動する距離を設定します

f:id:tubakihimeLoveHate:20200725220657p:plain

Intensityが高いほどライトがsurface下を長い距離進みます。つまりぼやけて、色が滲む半径が広がります

今回、蝶に関しては元々Base Mapで色がついているので、白色のままIntensityは1.3にします

 

Max Radius

この値は自分では動かせないので、するー

 

Index of Refraction

屈折率を調節できる項目。蝶にも種類があるので正しい屈折率はわかりませんが、見つけた物だと1.56くらいだったのでその値を設定

参考:

http://www2.yukawa.kyoto-u.ac.jp/~atsushi.taruya/research/Morpho_butterfly.pdf

 

World Space

SSSの適用範囲をworldスケールに合わせます。基本的に1でいいです

 

Texturering Mode

HDRPがマテリアルのアルベドを適用するタイミングを選択できます

-Post Scatter

  SSSを適用した後にアルベドテクスチャを適用。アルベドテクスチャがぼやけない

 

-Pre and post scatter

  アルベドテクスチャが、SSSの適用の前後に 2 回適用される。効果的にアルベドがぼやけ、よりソフトで自然になるっぽい

今回はどっちでもいいので、自然っぽくなる後者を選択します。

 

Transmission Mode

- Thick

  厚いオブジェクトの場合に設定

 

-Thine

  薄いDouble-Sidedオブジェクトのための設定

蝶の羽は薄いくてDouble-Sidedを設定しているので、Thineを設定します

 

Transmission tint

オブジェクトを透過する色合いを指定できます。

f:id:tubakihimeLoveHate:20200725222734p:plain

 

f:id:tubakihimeLoveHate:20200725222750p:plain

 

Thickness Remap Values

ジオメトリ厚さの最小、最大値の範囲を設定します。値が低いほど薄いということなので表面下で光が屈折する範囲が広がります。

f:id:tubakihimeLoveHate:20200725223137p:plain

 

この項目は後でMaterialに出てくるThickスライダーに対応してます

f:id:tubakihimeLoveHate:20200725223403p:plain

 

この最小、最大はこのThicknessスライダーの0から1に正規化されます

 

Thickness Remapを0~20にしたときの0と1で比較します

Thick=0、Thickness Remap Values = 0

f:id:tubakihimeLoveHate:20200725224848p:plain

 

Thick=1、Thickness Remap Values = 20

f:id:tubakihimeLoveHate:20200725224852p:plain

 

蝶用のMaterialをセッティング

まず蝶に適用しいきます。使ったアセットはこちら

Butterfly (Animated) | Characters | Unity Asset Store

 

オブジェクトを配置して、そのままのShaderは使えないので

ShaderをHDRP > Lit Shaderに変更

MaterialTypeをSubsurface Scatteringにします。

f:id:tubakihimeLoveHate:20200725235843p:plain

 

BaseMap = butterfly_Albedoテクスチャ

次にSSSのオプション項目であるTransmissionを有効

 

Transmissionを有効にすることでSSSで半透明をシミュレーションできます

これを有効にすることでDiffusion Profileで設定できるTransmission only項目の適用ができます。↓この部分の設定が適用される↓

f:id:tubakihimeLoveHate:20200726004154p:plain


そしてDiffusion Profileに先ほど作成したDiffusion Profileを設定します

 

Subsurface MaskとSubsurface Mask Map

SSSのぼかし効果の強さを0から1で設定できます。

Subsurface Mask Mapを設定している場合はグレースケールのテクスチャを使うことでぼかす場所とぼかさない場所を調節することが可能

テクスチャがない場合はこのぼかし効果は全体に適用されます

今回は全体的にぼかしてみたいので1に設定

 

ここまできたらマテリアルの設定は終わり

色付きのポイントライトを蝶の羽の間に配置して蝶は完了です

 

 

CrystalにSSSを適用

f:id:tubakihimeLoveHate:20200726020647p:plain

アセットはこちらを利用しました

Translucent Crystals | 3D Fantasy | Unity Asset Store

多分本来の使い方としてはEmissionを利用してクリスタル自体を光源にすることができるアセットだと思いますが、今回はEmissionは使いません

 

クリスタルのDiffusion ProfileとMaterial設定は載せておきます。

f:id:tubakihimeLoveHate:20200726020918p:plain

f:id:tubakihimeLoveHate:20200726022329p:plain

 

ただ、クリスタルは薄いオブジェクトではないので光源が届いていない場所はSSSが適用されません

例えば下図はポイントライトをクリスタルの背後に配置していて

クリスタルの左側の結晶にしか光が当たってないので、手前の結晶にはSSSは適用されてないのがわかります

f:id:tubakihimeLoveHate:20200726020647p:plain

 

まあ確かに表面化散乱って光が表面化に侵入して初めて起こる現象なので当然っちゃ当然ですね。

 

最後にPostProcessやParticleやAAを適当に設定して完成。作業はあっという間だったけど文章にすると結構長くなったな

f:id:tubakihimeLoveHate:20200726110626g:plain

本当は波紋とかつけてあげたかったです。

 

ということで今回はナンバリング記事の裏側みたいな感じの記事でした〜