アドベントカレンダーの一日目ということで、今回はマテリアルのノードの中でも使用頻度が最も高いノードの一つLerpについて解説します。
LerpというのはLinear Interpolateの略で、日本語に訳すと線形補間です。AとBという2つの値の間の直線を、Alphaの値だけAからBに向かって進んだものです。
文章だとわかりにくいので具体的な例と図で表します。
LerpのAに5、Bに8がはいったLerpを用意します。
この時、Alphaが0だと出力は5になります。
(小数点誤差が出るのは仕様なので気にしないでください。)
Alphaが1だと出力は8になります。
これは図で書くと以下のようになります。Alphaの値が0のときは出力はAの位置と等しいので5になります。Alphaが1のときは出力はBの位置と等しいので8になります。
では、Alphaの値が0.5のときは出力はいくつになるでしょうか?
5から8までを半分(0.5)だけ進んだことになるので、結果は6.5になります。
では次に色で見てみましょう。
RGBの場合、RとGとBの3つの値があり、それぞれがAからBの間で変化します。
Aの値にRGBで(0.8, 0.5, 0.0)、Bの値にRGBで(0.0, 0.6, 0.8)を入力します。この時、Alphaが0.75だと出力は(0.2, 0.575, 0.6)になります。
この合成方法はCG屋さんなら非常に馴染みがあると思います。これはPhotoshopの通常合成と同じアルゴリズムなのです。合成割合=Alphaです。
Lerpは非常によく使うノードですが、中でもよく使うシチュエーションをいくつか紹介します。
なにかの値を別の何かに変換して使います。
Roughnessのデータを固有に用意できない場合、カラーのチャンネルの一部を別の値に変換して使うなどの例があげられます。
個人的に最も多い利用法がこれです。Alphaの値に0か1しか入らなくすることにより、AとBの切り替えに使います。
ここまではAlphaが0から1の間に収まっているときを見てきましたが、今度はAlphaが0よりも小さい場合や、1よりも大きい場合についてみていこうと思います。
最初に書いたとおり、LerpはAとBという2つの値の間の直線を、Alphaの値だけAからBに向かって進んだものですが、Alphaが0よりも小さい場合や1よりも大きい場合は、以下のように変化します。
最後にAlphaが0から1の間に収まっていないときの値の変化を利用した面白いテクニックを紹介します。
UE4のマテリアルにFlattenNormalというNormalMapを平坦にするマテリアルファンクションがあるのですが、こちらの中身を見てみるとLaepでNormalMapと(0, 0, 1)を合成しているだけです。
全く変位のないNormalMapはNormalMapをテクスチャで表現する場合にはRGB(128, 0 , 0)=(0.5, 0, 0)ですが、マテリアルの中では(0, 0, 1)です。
Flatten Normalは文字通りNormalMapを平坦にするマテリアルファンクションですが、先ほど紹介したようにAlphaの値を0よりも小さくしたり、1よりも大きくした場合、Normalの変化は以下のようになります。
Flatnessが0のときは変化なし
Flatnessが1のときは、Normalが完全に平坦
Flatnessが1以上のときは、平坦になる傾きを超えて反転する
Flatnessがマイナスのときは平坦な傾きからより遠ざかるので傾きが増す
いかがだったでしょうか?
UE4のマテリアルについて色々書いている本をBoothで出していますので、購入していただけると嬉しいです。
おひさしぶりですこんにちは。
最近はお仕事で、UE4のマテリアルなど変数名を決める機会が増えてきました。
ですが、アーティストがこういったものの名前をつける機会は過去にはほとんどなかったことや、エンジニア向けにはネーミングルールはあるけれど使う用語がかなり違うことからそのままは転用しにくく、また日常的に使用するDCCツールのネーミングルールのパターンも様々であることから、わかりすい名前ってなんだろうとよく考えています。
わかりやすい名前をつければ怖がらずに使ってもらえますし、ドキュメントを書く手間を省けることもあるかもしれません。
今回、名前の付け方を以下のように統一してみようと考えました。
括弧は省略可能
例 : BrickHeightRenge
例 : RustColor
【部位】とはマテリアルが複数の素材感を持つときにどこに影響を与えるかということです。例えば壁マテリアルの『レンガ』に影響を与えるといったことです。
【状態】とはその変数がマテリアルのどういった状態に影響を与えるのかということです。例えば壁マテリアルの『汚れ』に影響を与えるといったことです。
【影響を及ぼす要素】とはその変数がマテリアルのどのパラメーターに影響を出すのかということです。例えば壁マテリアルの『アンビエントオクルージョン』に影響を与えるといったことです。
【数学的用語】とはその変数がマテリアルのどういった状態をどうするのかということです。例えば壁マテリアルの汚れの『強さ』に影響を与えるといったことです。
数学的用語という名前の付け方はどうなんだというツッコミはナシでお願いします>< (いい言葉が浮かばなかった)
ほかには以下のことに気をつけるように心がけています
個人的によく使う英語を集めてみました。
英語
|
日本語
|
例
|
---|---|---|
Dirt | ほこり(による汚れ) | |
Moss | 苔(が生えた) | |
Moisture | 湿り気 雨だれの表記として見かけたことがあるのですが、英語的に正しいのかは不明 |
|
Weathering | 風化 | BrickWeatheringIntencity |
Crack | ヒビ | |
Scratch | ひっかき傷 | |
Rust | さび |
基本的にはMaterialの基本パラメーターのままですが、省略したりや例外的な書き方をしているので明記しておきます
英語 |
日本語
|
例
|
---|---|---|
Color | BaseColorの略 | |
Rough | Roughnessの略 | |
Metal | Metallicの略 | |
DetailNormal | ||
Wpo | WorldPositionOffsetの略 | GlassWpo |
Ao | AmbientOcclusionの略 | |
Pdo | PixelDepthOffsetの略 |
英語
|
日本語
|
例
|
---|---|---|
Texture | (どんな)テクスチャ(を貼るか) | CrackTexture |
Scale | 大きさ | |
Max | 最大 | |
Min | 最小 | |
Intensity | 強度 | |
Amount | 量 | |
Frequency | 頻度 | |
Offset | オフセット | |
Ratio | 割合 | |
Position | 位置 | |
Spread | ひろがり | AoSpreading:AOがどの程度広がるか |
Shift | ズレ | HueShift |
会社主催のイベント、『出張ヒストリア2017』で「Art of airtone」というタイトルで登壇しました。
当日の様子をPANORA VR様に記事にしていただきました
「UE4でオリジナルキャラを動かそう!」というテーマで登壇しました。
当日のまとめはこちら
https://togetter.com/li/1056171
会社のイベント『出張ヒストリア』で、京都と東京都鎌田の二会場に登壇ました。
「アーティストが入社一ヶ月で一人でゲームを作ってみた」
という内容ですが、一か月で作成し、ゲームは完成しているものの、モバイル版の対応が不完全なため、まだリリースできていません…ごめんなさい…
京都会場でのまとめはこちら
https://togetter.com/li/975300