procedural textureとUV

by ますお

オブジェクトの最適なUVマッピングというのは,非常に困難です.

代表格は人間に近いキャラクターですね.ロボットで無い限り,アニメーションさせれば必ずどこかがdeformしますし,形状が有機的ですからメッシュも複雑になりがちです.

UVは単にunwrapすれば良い物ではありません.オブジェクトのメッシュにより,見た目に広い部分にはUV上でも広い領域を割り当てる必要がありますし,deformで延びる部分もUV上で広い方が好ましいです.

これはある程度自動化する事ができますが,UVの継ぎ目をどこにするかは人が手で決めた方が良い結果になりますし,deformする部分などは考慮されませんから,やはり人の手に頼る事になります.この調整はmodelerかtexture painterが行います.

更に問題をややこしくするのが,procedural textureを併用する場合です.ペイントされたテクスチャは当然マッピングされたUVに従って張られますが,procedural textureは本来のUV座標から生成されます.つまり,人が調整したUVに合わせて描かれたテクスチャとproceduralなテクスチャの模様が合わない事があると言う事です.

簡単な例を挙げましょう.今,ストライプ模様の入った布を作る事を考えます.

クッションのような単純なオブジェクトの場合は問題になりませんが,服のような複雑な形状をしている場合,ストライプ模様は形状とアニメーションに応じて整えられたUVに合うようにペイントされます.これをunrwapした状態で見ると部分的に歪んでいますが,レンダリングされた状態では綺麗に見えます.

さて,このオブジェクトに対して,生地の凹凸をproceduralなテクスチャで生成したいとします.UVをベースにしたprcedural textureは,unwrapされた状態で考えると格子上に並ぶ事になり,ペイントされたストライプ模様とその方向が合わない部分が出てきてしまいます.

この違いがあまり目立たない場合はそのままでも構わないのですが,目に見えて分かってしまう場合,proceduralに生成したテクスチャを一度bakeし,そのテクスチャ画像をストライプ模様に合わせて歪ませなければなりません.これは手間がかかる上にprceruralである事の利点が無くなってしまいますから,できれば避けたい作業ですが,どうしてもダメな場合もあります.

ストライプ模様もproceduralに生成してしまい,UV側を格子に揃えるという手もありますが,これだとオブジェクトによっては三次元上でのメッシュの面積とUV上での面積に違いが生じてしまい,レンダリングした時に良い結果が得られません.また,格子に揃える事が不可能なメッシュの場合もありますね.

noiseを用いるようなprocedural textureの場合はあまり考える必要の無い事ですが,これも映像を高品質にするためには避けて通れない問題です.