Skip to content

Latest commit

 

History

History
158 lines (116 loc) · 4.32 KB

README_tc.md

File metadata and controls

158 lines (116 loc) · 4.32 KB

UnityMeshDecimation

Unity模型網格縮減

演算法源自vcglib tridecimator,但針對Unity網格重新撰寫並增加其他功能。

Input Charizard © Pokémon Ltd

相容性

目前僅測試過以下版本,但也可能兼容其他版本

版本
Unity 2018.4.x
Unity 2020.3.x

使用方法

使用本專案或複製Assets/UnityMeshDecimation到你的專案

圖形介面

從選單Window/Unity Mesh Decimation開啟工具

  • 輸入模型

    Input

  • 終止條件

    End Condition

  • 邊緣合併參數

    Profile

  • 輸出位置

    Output

腳本

using UnityMeshDecimation;

// 終止條件
var conditions= new TargetConditions();
conditions.faceCount = 1000;

// 邊緣合併參數
var parameter = new EdgeCollapseParameter();
parameter.UsedProperty = VertexProperty.UV0;

var meshDecimation = new UnityMeshDecimation();
meshDecimation.Execute(inputMesh, parameter, conditions);

var outputMesh = meshDecimation.ToMesh();

額外權重

除了添加頂點屬性進Quadrics計算中外,還可以針對屬性交接處給予額外權重來盡量避免移動。

例如同個頂點在相鄰不同面有不同貼圖座標(屬於交接處)

var parameter = new EdgeCollapseParameter();
parameter.UsedProperty = VertexProperty.UV0;

var property = parameter.GetPropertySetting(VertexProperty.UV0);
property.ExtraWeight = 1;

// 預設屬性計算為自身,但可以自定義,
// 例如計算貼圖座標是以取樣的貼圖顏色為基準。
// property.SampleFunc = (Vector4 value) => {
//    return value;
// };
位置 位置, 貼圖座標 位置, 貼圖座標, 額外權重

範例

  • Lucy © Stanford University
99970面
(原始)
50000面
(50%)
10000面
(10%)
  • Robot © Unity Technologies
6132面
(原始)
3000面
(50%)
600面
(10%)

品質關聯

最終品質與模型屬性多寡有關,只帶有座標是最簡單的,縮減過程只考慮形狀就行,

但相對的帶有越多屬性要同時考慮就會讓計算更複雜,也越難達到好的品質。

例如Arc System Works的卡通渲染方法,顏色區塊依賴頂點座標的位置,只要稍微移動,就會造成嚴重視覺瑕疵。

  • Narmaya © Cygames, Inc
87753面
(原始)
48909面
(55%)