Texture+PBR兩種工作流程

小紫蘇發表於2022-01-11

一、匯入Texture

1.Inpspector

TextureSize

2的n次冪,底層圖形學需要,計算更快;不使用2的倍數,系統也會新增畫素補全2n;

有最大尺寸限制8k,cubemap最高4k;

Mipmap

影像逐漸減小版本的列表;紋理遠離攝像機時,Unity 會自動使用較小版本的紋理;LOD

記憶體增加33%;

WarpMode

迴圈模式:平鋪,拉伸,映象,一次映象回退到拉伸,Per-Axis(uv軸不同迴圈模式);

FilterMode

濾波模式;取樣方式:

Point:點插值,拉伸塊狀化(鋸齒);

Bilinear:雙線性插值,拉伸模糊;

Trilinear:三線性插值,除了Bilinear,在不同mipmap等級進行模糊;

AnisoLevel

各項異性過濾,掠射角觀察提高紋理質量,非常消耗顯示卡資源,一般禁止;

2.匯入器規範資源格式

Unity匯入資源有預設格式,Texture匯入預設type是Deafult;如果是2D遊戲要求都是Sprite;每次匯入都需要修改型別非常麻煩;

Unity提供了匯入資源設定資源屬性的介面;

這段程式碼可以實現匯入圖片資源預設格式為Sprite;

using UnityEditor;

public class PreTexture : AssetPostprocessor
{
    void OnPreprocessTexture()
    {
        TextureImporter tImporter = (TextureImporter)assetImporter;
        tImporter.textureType = TextureImporterType.Sprite;
    }
}

包含UnityEditor繼承AssetPostprocessor,實現以下方法:

  • OnPreprocessTexture

  • OnPreprocessModel

  • OnPreprocessAnimation

  • OnPreprocessAudio

匯入資源可以修改格式,壓縮大小,禁用mipmaps,wrapmode等;

具體看官方文件,自定義需求;

3.Format

帶不帶透明通道記憶體佔用相差1/3左右;

PC

DirectX 11:

RGB 紋理 - DXT1 4 位/畫素;

RGBA 紋理 - BC7(質量更高,壓縮速度較慢)或 DXT5(壓縮速度較快);

HDR 紋理 - BC6H;

DirectX 10: DXT5(GPU不支援BC7);

IOS

A8 晶片以上:RGB 和 RGBA 紋理 - ATSC (紋理質量粒度可選);

A7或更低:PVRTC;

Android

OpenGL ES 3.0/Vulkan - ETC2 / ATSC

OpenGL ES 2 - ETC

HDR 紋理 - ASTC HDR(需要Vulkan 或GL-hdr支援)

畫質:RGB(A)32 > ASTC4X4 > ASTC6X6 > ETC2 ≈ PVRTC > ETC1

國內TOP600機型情況分佈:OpenGL ES 3.1以下覆蓋使用者佔0.2%,裝置數量佔比6.3%;

所以其實其實移動平臺統一用ASTC完事;

二、兩種PBR workflow

F0:入射角為0 ° 0\degree0°時的反射光線radiance佔入射光線radiance的比例;

漫反射高光都收到F0影響;

1.金屬粗糙度(M/R)

  • BaseColor:RGB貼圖,表示金屬的F0;

  • Metallic:灰度圖,金屬佔比遮罩;100%金屬為1白色;0%金屬為0黑色;

  • Roughness:灰度圖,數值越大越粗糙;

優缺點:非金屬的F0固定為0.04,無法調整;主要workflow;

2,。鏡面反射光澤度(S/G)

  • Diffuse/Albedo:RGB貼圖,表示非金屬顏色,金屬0純黑;
  • Specular:RGB貼圖,定義金屬非金屬的F0;
  • Glossiness:灰度圖,數值越大越光滑;

優缺點:F0自由調整(可能做出反能量守恆定律的材質);兩張RGB圖,效能要求高;

01112022-110509-AM

貼圖解析度和紋素密度太低會出現白邊和黑邊,由於貼圖之間誤差;

相關文章