统一的 draco 网格解码器
draco mesh decoder with unity
我正在使用 draco 对我的网格进行编码和解码。但是 draco 不支持 webgl (https://github.com/google/draco/issues/436)。
但是,Draco 支持 javascript。
unity 中的 运行 Draco javascript 解码器有可能吗?
那是我在 assets/plugin
下的 .jslib 文件
mergeInto(LibraryManager.library, {
DecodeMesh: function (byteArray) {
<script src="https://rawgit.com/google/draco/master/javascript/draco_decoder.js"></script>
'use strict';
let dracoDecoderType = {};
const dracoModule = DracoModule(dracoDecoderType);
const decoder = new dracoModule.WebIDLWrapper();
const buffer = new dracoModule.DecoderBuffer();
buffer.Init(byteArray, byteArray.length);
let outputGeometry = decoder.DecodeMeshFromBuffer(buffer);
alert('Num points = ' + outputGeometry.num_points());
dracoModule.destroy(outputGeometry);
dracoModule.destroy(decoder);
dracoModule.destroy(buffer);
},
});
和我的脚本:
public class caller : MonoBehaviour
{
[DllImport("__Internal")]
private static extern void DecodeMesh(byte[] array);
void Start()
{
array1= "array to decoded"
decodeMesh(array1);
}
}
当我尝试为 webGL 构建时,出现以下错误:
Failed running "C:/Program Files/Unity/Hub/Editor/2019.3.10f1/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python.7.5.3_64bit\python.exe" -E "C:/Program Files/Unity/Hub/Editor/2019.3.10f1/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc" @"C:\Users\alitokur\Desktop\js\Assets\..\Temp\emcc_arguments.resp"
stdout:
stderr:JS optimizer error:Unexpected token: name (dracoDecoderType) (line: 2099, col: 12, pos: 86653)================================ GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]); } function _DecodeMesh(byteArray) { // Create the Draco decoder. let dracoDecoderType = {}; ^================================C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:282 throw new JS_Parse_Error(message, line, col, pos); ^Error at new JS_Parse_Error (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:260:22) at js_error (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:282:15) at croak (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:752:17) at token_error (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:760:17) at unexpected (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:766:17) at Object.semicolon (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:786:51) at prog1 (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:1325:29) at simple_statement (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:917:35) at C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:827:35 at block_ (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:1010:32)ERROR:root:'C:/Program Files/Unity/Hub/Editor/2019.3.10f1/Editor/Data\Tools\nodejs\node.exe --stack_size=8192 --max-old-space-size=4096 C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\js-optimizer.js C:\Users\alitokur\AppData\Local\Temp\tmpiqi8rq\build.bc.o.js.pp.js.mem.js noPrintMetadata AJSDCE minifyWhitespace' failed
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Exception: Failed building WebGL Player.
UnityEditor.WebGL.ProgramUtils.StartProgramChecked (System.Diagnostics.ProcessStartInfo p) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs:48)
UnityEditor.WebGL.WebGlBuildPostprocessor.EmscriptenLink (UnityEditor.Modules.BuildPostProcessArgs args, System.Boolean wasmBuild, System.String sourceFiles, System.String sourceFilesHash) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:445)
UnityEditor.WebGL.WebGlBuildPostprocessor.LinkBuild (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:495)
UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:930)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <17b72532ee2c4da1b6f632d3f1705fe0>:0)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <17b72532ee2c4da1b6f632d3f1705fe0>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Build completed with a result of 'Failed' in 109 seconds (109038 ms)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
不幸的是,Draco 也无法让 Unity 在浏览器中加载 Draco plug-in。 This fork也许可以帮到你。
我正在使用 draco 对我的网格进行编码和解码。但是 draco 不支持 webgl (https://github.com/google/draco/issues/436)。 但是,Draco 支持 javascript。 unity 中的 运行 Draco javascript 解码器有可能吗? 那是我在 assets/plugin
下的 .jslib 文件mergeInto(LibraryManager.library, {
DecodeMesh: function (byteArray) {
<script src="https://rawgit.com/google/draco/master/javascript/draco_decoder.js"></script>
'use strict';
let dracoDecoderType = {};
const dracoModule = DracoModule(dracoDecoderType);
const decoder = new dracoModule.WebIDLWrapper();
const buffer = new dracoModule.DecoderBuffer();
buffer.Init(byteArray, byteArray.length);
let outputGeometry = decoder.DecodeMeshFromBuffer(buffer);
alert('Num points = ' + outputGeometry.num_points());
dracoModule.destroy(outputGeometry);
dracoModule.destroy(decoder);
dracoModule.destroy(buffer);
},
});
和我的脚本:
public class caller : MonoBehaviour
{
[DllImport("__Internal")]
private static extern void DecodeMesh(byte[] array);
void Start()
{
array1= "array to decoded"
decodeMesh(array1);
}
}
当我尝试为 webGL 构建时,出现以下错误:
Failed running "C:/Program Files/Unity/Hub/Editor/2019.3.10f1/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python.7.5.3_64bit\python.exe" -E "C:/Program Files/Unity/Hub/Editor/2019.3.10f1/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc" @"C:\Users\alitokur\Desktop\js\Assets\..\Temp\emcc_arguments.resp"
stdout:
stderr:JS optimizer error:Unexpected token: name (dracoDecoderType) (line: 2099, col: 12, pos: 86653)================================ GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]); } function _DecodeMesh(byteArray) { // Create the Draco decoder. let dracoDecoderType = {}; ^================================C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:282 throw new JS_Parse_Error(message, line, col, pos); ^Error at new JS_Parse_Error (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:260:22) at js_error (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:282:15) at croak (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:752:17) at token_error (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:760:17) at unexpected (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:766:17) at Object.semicolon (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:786:51) at prog1 (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:1325:29) at simple_statement (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:917:35) at C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:827:35 at block_ (C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\eliminator\node_modules\uglify-js\lib\parse-js.js:1010:32)ERROR:root:'C:/Program Files/Unity/Hub/Editor/2019.3.10f1/Editor/Data\Tools\nodejs\node.exe --stack_size=8192 --max-old-space-size=4096 C:\Program Files\Unity\Hub\Editor19.3.10f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\js-optimizer.js C:\Users\alitokur\AppData\Local\Temp\tmpiqi8rq\build.bc.o.js.pp.js.mem.js noPrintMetadata AJSDCE minifyWhitespace' failed
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Exception: Failed building WebGL Player.
UnityEditor.WebGL.ProgramUtils.StartProgramChecked (System.Diagnostics.ProcessStartInfo p) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs:48)
UnityEditor.WebGL.WebGlBuildPostprocessor.EmscriptenLink (UnityEditor.Modules.BuildPostProcessArgs args, System.Boolean wasmBuild, System.String sourceFiles, System.String sourceFilesHash) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:445)
UnityEditor.WebGL.WebGlBuildPostprocessor.LinkBuild (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:495)
UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:930)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <17b72532ee2c4da1b6f632d3f1705fe0>:0)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <17b72532ee2c4da1b6f632d3f1705fe0>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Build completed with a result of 'Failed' in 109 seconds (109038 ms)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
不幸的是,Draco 也无法让 Unity 在浏览器中加载 Draco plug-in。 This fork也许可以帮到你。