どうも、ラブヘイトです
いきなり余談ですが3Dオブジェクトにミラーっていうのが追加されててびっくりしました!
完全な反射ではないですが、これはこれで使えそう!
さて、今回は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を利用するとより本物の肌に近づけることができます。
もっと詳しく知りたい方はこちらの記事がわかりやすかったです
こんな絵が作れる!
SSSを適用するとこんな絵作りが簡単にできます。
全て無料のアセットとHDRPでできてます。
SSSを適用するための準備
LitシェーダーのMaterial TypeをSSSにするだけでは、SSSは適用されません。
少し準備が必要です。
1. SSSを有効にする
Asset > HDRenderPipline > Material > Subsurface Scatteringにチェック
2019.4.0f1ではプロジェクトウィンドウのAssets > Setting > HDRenderPipelineAsset
のMaterialに移行されています
2. Litシェーダー にDiffusion Profileを設定
Diffusion Profileの詳細については後述します。
今回はこのDiffusion Profileをカスタマイズしていくのですが、今はとりあえず準備だけ
Create > Rendering > diffusion Profile
で作成します。
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をカスタマイズしていきます。
Scattering Distance
滲み色とぼかし半径を選択する項目
カラーピッカーで色を、Intensityで光が表面下(surface下)を移動する距離を設定します
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
オブジェクトを透過する色合いを指定できます。
白
緑
Thickness Remap Values
ジオメトリ厚さの最小、最大値の範囲を設定します。値が低いほど薄いということなので表面下で光が屈折する範囲が広がります。
この項目は後でMaterialに出てくるThickスライダーに対応してます
この最小、最大はこのThicknessスライダーの0から1に正規化されます
Thickness Remapを0~20にしたときの0と1で比較します
Thick=0、Thickness Remap Values = 0
Thick=1、Thickness Remap Values = 20
蝶用のMaterialをセッティング
まず蝶に適用しいきます。使ったアセットはこちら
Butterfly (Animated) | Characters | Unity Asset Store
オブジェクトを配置して、そのままのShaderは使えないので
ShaderをHDRP > Lit Shaderに変更
MaterialTypeをSubsurface Scatteringにします。
BaseMap = butterfly_Albedoテクスチャ
次にSSSのオプション項目であるTransmissionを有効
Transmissionを有効にすることでSSSで半透明をシミュレーションできます
これを有効にすることでDiffusion Profileで設定できるTransmission only項目の適用ができます。↓この部分の設定が適用される↓
そしてDiffusion Profileに先ほど作成したDiffusion Profileを設定します
Subsurface MaskとSubsurface Mask Map
SSSのぼかし効果の強さを0から1で設定できます。
Subsurface Mask Mapを設定している場合はグレースケールのテクスチャを使うことでぼかす場所とぼかさない場所を調節することが可能
テクスチャがない場合はこのぼかし効果は全体に適用されます
今回は全体的にぼかしてみたいので1に設定
ここまできたらマテリアルの設定は終わり
色付きのポイントライトを蝶の羽の間に配置して蝶は完了です
CrystalにSSSを適用
アセットはこちらを利用しました
Translucent Crystals | 3D Fantasy | Unity Asset Store
多分本来の使い方としてはEmissionを利用してクリスタル自体を光源にすることができるアセットだと思いますが、今回はEmissionは使いません
クリスタルのDiffusion ProfileとMaterial設定は載せておきます。
ただ、クリスタルは薄いオブジェクトではないので光源が届いていない場所はSSSが適用されません
例えば下図はポイントライトをクリスタルの背後に配置していて
クリスタルの左側の結晶にしか光が当たってないので、手前の結晶にはSSSは適用されてないのがわかります
まあ確かに表面化散乱って光が表面化に侵入して初めて起こる現象なので当然っちゃ当然ですね。
最後にPostProcessやParticleやAAを適当に設定して完成。作業はあっという間だったけど文章にすると結構長くなったな
本当は波紋とかつけてあげたかったです。
ということで今回はナンバリング記事の裏側みたいな感じの記事でした〜