📗
【Unity Summary】 Texture
Texture
details
- Object の細部の描写を表現する
- Mesh 表面に張られている
- Texture は Bit map 画像
- Photoshop などの Digital contents 作成 Application で Texture を作成し、Unity に import する
- Texture は Material を通して Object に適用される
- Material は Shader と呼ばれる Graphics 用の特別な program を使用して、Mesh 表面に Texture を描画
- Shader には、周囲の様々な影響を受ける物体表面の光沢や凹凸などを simulate するための、Lighting と Coloring の効果を実装可能
import
details
- 以下のファイル形式に対応
- BMP
- EXR
- GIF
- HDR
- IFF
- JPG
- PICT
- PNG
- PSD
- TGA
- TIFF
法線 Map
- Low poligon の Model に「より Detail があるように見せる」ため、法線 Map Shader によって使用される
- Unity は RGB 画像として encode された法線 Map を使用
Alpha Map
- alpha 情報のみを含む Texture
- alpha map を使用して、Material に様々な level の透明度を適用
Detail Map
- Detail Texture は Main Texture がすぐ近くになると、隠すように小さな Detail を fade in して表示する
- Detail Texture を描画するとき、中間の gray が透明
- 白の場合:Main Texture を倍の明るさとする
- 黒の場合:Main Texture を完全な黒にする
異方性 Filtering
- かすめた角度から見たときの Texture 品質を向上させる
- 一方で Graphic card の resource を消費する
- Quality Setting を使って、全ての Texture に異方性 Filtering を強制するか、完全に無効にする
- ただし、Texture import 設定で Texture の異方性 level が0に設定されている場合、強制異方性 Filtering はこの Texture に表示されない
Import setting
setting | description |
---|---|
Texture Type | 作成したい Texture の type を選択 |
Texture Shape | 形状を選択し、その形状に固有の property を設定 |
Type-specific and advanced properties | 選択した Texture Type の値によっては表示 |
platform 固有の Override | platform 固有の Override panel を使用して、特定の platform の Default option とその Override を設定 |
Texture preview |
Texture Type
setting | description |
---|---|
Default | 最も一般的な設定 |
Normal Map | Realtime 法線 Mapping に適したように Texture Asset を format |
Editor GUI and Legacy GUI | HUD および GUI control に適した Texture Asset を format |
Sprite(2D and UI) | 2D Application で Sprite として使用するのに適している |
Cursor | Custom Mouse Cursor としての使用に適したように Texture Asset を format |
Cookie | built-in Render Pipeline で light Cookie として使用するのに適している |
lightmap | Lightmap としての使用に適したように Texture Asset を format する |
Directional Lightmap | Directional Light Map としての使用に適したように Texture Asset を format |
Shadowmask | Shadow Mask としての使用に適したように Texture Asset を format |
Single Channel | Channel が1つだけになるように Texture Asset を format |
Texture Shape
type | description | note |
---|---|---|
2D | 2D Texture | - 一般的な設定 - Texture を、他 project 要素の中の 3D Mesh や GUI element に mapping するのに使用 |
Cube | Cube Map | - Skybox や Reflection Probe などに使用 - Default、Normal Map、Single Channel Texture でのみ可能 |
2D Array | 2D Texture 配列 | 同じ size や形式の Texture を多数使用するような Rendering 技術の最適化として使用 |
3D | 3D Texture | Volumetric データを表現する Rendering 技術の一部で使用 |
Texture compression
reference:https://tsubakit1.hateblo.jp/entry/20131025/1382627281
- Texture 圧縮形式は、 Texture Asset の imoport 設定で設定可能
- Texture Asset を project に加えると、Unity Editor は、自動的に build target 毎に適切な圧縮形式を選択する
- Texture Asset の視覚的品質が高ければ高いほど、1 pixel あたりの bit 数が増え、結果的に build size、load time、および Runtime の memory usage が増加
- 非圧縮の Texture は最高の品質を提供するが、1 pixel あたりの bit 数も最も多くなる
Bit 毎 pixel(bpp)
- 1つの Texture pixel に必要な stroage の量
- bpp 値が低い Texture は、disk 上および memory 上の size が小さくなる
- GPU の memory 帯域幅は frame rate の Bottle neck になることが多いので、Texture 圧縮はその回避に役立つ
crunch 圧縮
- DXT または ETC 圧縮の上に動作する圧縮形式
- crunch で圧縮された Texture を読み込むと、CPU 上で DXT または ETC に解凍
Terminology
LDR(Low Dynamic Range)
- 色が概念的に 0.0(黒)と 1.0(白)の間の値にある画像
- 多くの画像ファイル(PNG や JPG など)が当てはまる
HDR(High Dynamic Range)
- 色が 0 から 1 よりも高い範囲を持つ特殊な画像と Texture 形式
-
.exr
や.hdr
といった画像ファイル形式が当てはまる
RGB
- 赤、緑、青の 3 色を組み合わせて色の配列を再現する color model
RGB"A"
- "A"lpha channel を持つ RGB の一種で、blend と透明度の変更が可能
Variable Bit Rate(VBR)
- pixel あたりの bit 数が固定値ではなく、実際の contents に依存する
MipMap
- mip または mip level は、「特定の解像度を持つ Texture の version」のこと
- mip は MipMap と呼ばれる一揃いで存在
- GPU が Texture をその完全な解像度より低い解像度で Rendering する場合に、MipMap は Rendering 操作を高速化し、Rendering Artifact を削減可能
- 3D Scene の Object の Rendering によく使用される
- Camera に近い Object には「高い MipMap」が使用され、遠い Object には「低い MipMap」が使用される
type | description |
---|---|
GPU が解像度の低い MipMap | 現在の pixel とその隣接 pixel の間の距離が長く、角度が極端な場合 |
GPU が解像度が高い MipMap | 選択距離が短くて角度が極端でない場合 |
Mip Bias
- GPU が sample に対してより低い mip または高い mip を選択する閾値を変更
- 異なる mip からの sample を blend する場合に、ある mip を他の mip より何%優先するかを正確に GPU に指示
MipMap Streaming System
- 「現在の Camera 位置の Rendering に必要な mip level のみ」を load するように強制
- Default では「全ての mip level」 を load する
- 大量の GPU memory を節約するために、少量の CPU resource を犠牲にする
- Quality Settings を開き、Texture Streaming check box を有効にすることで使用可能
Render Texture
- Texture の一種であり、Unity が Runtime に作成・更新するもの
- 使用するには、Assets > Create > Render Texture に移動し、新しい Render Texture を作成し、Camera component の Target Texture に割り当てる
- その後、通常の Texture と同様に、Material で使用可能
Dynamic Scaling
- 動的解像度 scaling によって、Rendert Texture の size を変更可能
- 無効の場合、Render Texture は動的解像度の設定にかかわらず同じ size を維持
Wrap Mode
- Texture の wrap 方法を制御
type | description | note |
---|---|---|
Repeat | Texture を tile 化して、繰り返しの pattern を作成 | |
Clamp | Texture の edge を引き延ばす | 画像を Object に mapping し、 Texture を tile 化したくない場合に wrapping のアーティファクトを防ぐのに便利 |
Mirror | Texture を tile 化して、Texture を全ての整数の境界で Mirror を行う繰り返しの pattern を作成 | |
Mirror Once | Texture を 1 度 mirror した後、 Texture を固定 | |
Per-axis | U 軸 と V 軸 に異なる wrap mode を設定 | - option は、Repeat、Clamp、Mirror、Mirror Once - Reflection Probe に緯度経度 layout(円筒状)環境 map を使用する場合は、垂直座標(V 軸)に Clamp を設定し、水平座標(U 軸)に Repeat を設定すると便利 |
Custom Render Textures
- 特別な Type の Texture で、これを使うと Shader で Texture を更新可能
- caustics(コースティクス:液体の入ったグラス、反射率の高い金属などに入射した光は、複雑な反射・屈折を繰り返し、周囲の物体の表面に独特の光の模様や筋など)、雨の効果のためのリップル simulation、液体のしぶきなどの複雑な simulation を作成可能
Wrap Mode
- tile にするときの Texture 動作
mode | description |
---|---|
Repeat | Texture 自体を tile として繰り返す |
Clamp | Texture の edge を伸ばす |
Filter Mode
- 3D 変換によって Texture が引き伸ばされる時、どのように Texture を filtering するか
mode | description |
---|---|
Point | Texture に近づくと、block 状に見える |
Bilinear | Texture に近づくと、ぼやけて見える |
Trilinear | - Bilinear に似ている - Texture は異なる mip level 間でもぼかされる |
Aniso Level | - 急角度から見たときの Texture の品質を向上させる - 床や地面の Texture に適している |
CubeMap
- 周囲の環境の reflection を表現する正方形 Texture が「6つ」で一組になったもの
- Object を囲む「仮想の立方体の面である6つの正方形」は、 それぞれの面が、world 軸の各方向 (上・下・左・右・前・後) の景観を表す
- Object の反射や周囲環境を表すためによく使用される
- Skybox や Reflection Probe には CubeMap が頻繁に用いられる
Sparse texture
- そのまま Graphic memory にのせるには大きすぎる Texture のこと
- 処理する際、「tile」と呼ぶ小さな四角形に分割し、個々の tile は必要に応じて読み込まれる
Discussion