Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
00b44e33
T
three.js
项目概览
Ablesons
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
three.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
00b44e33
编写于
5月 03, 2021
作者:
Q
qeeqez
提交者:
GitHub
5月 03, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
USDExporter: Store only unique geometry and reference it (#21749)
上级
c872add3
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
129 addition
and
30 deletion
+129
-30
examples/js/exporters/USDZExporter.js
examples/js/exporters/USDZExporter.js
+65
-16
examples/jsm/exporters/USDZExporter.js
examples/jsm/exporters/USDZExporter.js
+64
-14
未找到文件。
examples/js/exporters/USDZExporter.js
浏览文件 @
00b44e33
...
...
@@ -4,7 +4,11 @@
async
parse
(
scene
)
{
const
files
=
{};
const
modelFileName
=
'
model.usda
'
;
const
geometryFileName
=
'
geometry.usd
'
;
let
output
=
buildHeader
();
const
geometries
=
{};
const
materials
=
{};
const
textures
=
{};
scene
.
traverse
(
object
=>
{
...
...
@@ -13,6 +17,15 @@
const
geometry
=
object
.
geometry
;
const
material
=
object
.
material
;
if
(
!
(
geometry
.
uuid
in
geometries
)
)
{
geometries
[
geometry
.
uuid
]
=
geometry
;
}
if
(
!
(
material
.
uuid
in
materials
)
)
{
materials
[
material
.
uuid
]
=
material
;
if
(
material
.
map
!==
null
)
textures
[
material
.
map
.
uuid
]
=
material
.
map
;
if
(
material
.
normalMap
!==
null
)
textures
[
material
.
normalMap
.
uuid
]
=
material
.
normalMap
;
...
...
@@ -20,16 +33,21 @@
if
(
material
.
roughnessMap
!==
null
)
textures
[
material
.
roughnessMap
.
uuid
]
=
material
.
roughnessMap
;
if
(
material
.
metalnessMap
!==
null
)
textures
[
material
.
metalnessMap
.
uuid
]
=
material
.
metalnessMap
;
if
(
material
.
emissiveMap
!==
null
)
textures
[
material
.
emissiveMap
.
uuid
]
=
material
.
emissiveMap
;
output
+=
buildXform
(
object
,
buildMesh
(
geometry
,
material
)
);
}
const
referencedMesh
=
`prepend references = @./
${
geometryFileName
}
@</Geometry_
${
geometry
.
id
}
>`
;
const
referencedMaterial
=
`rel material:binding = </Materials/Material_
${
material
.
id
}
>`
;
output
+=
buildXform
(
object
,
referencedMesh
,
referencedMaterial
);
}
}
);
output
+=
buildMaterials
(
materials
);
output
+=
buildTextures
(
textures
);
const
files
=
{
'
model.usda
'
:
fflate
.
strToU8
(
output
)
}
;
files
[
modelFileName
]
=
fflate
.
strToU8
(
output
);
output
=
null
;
files
[
geometryFileName
]
=
fflate
.
strToU8
(
buildMeshFileString
(
geometries
)
)
;
for
(
const
uuid
in
textures
)
{
...
...
@@ -109,16 +127,19 @@
}
// Xform
function
buildXform
(
object
,
define
)
{
function
buildXform
(
object
,
referencedMesh
,
referencedMaterial
)
{
const
name
=
'
Object_
'
+
object
.
id
;
const
transform
=
buildMatrix
(
object
.
matrixWorld
);
return
`def Xform "
${
name
}
"
(
${
referencedMesh
}
)
{
matrix4d xformOp:transform =
${
transform
}
uniform token[] xformOpOrder = ["xformOp:transform"]
${
define
}
${
referencedMaterial
}
}
`
;
...
...
@@ -139,7 +160,35 @@
}
// Mesh
function
buildMesh
(
geometry
,
material
)
{
function
buildMeshFileString
(
geometries
)
{
let
output
=
buildHeader
();
for
(
const
uuid
in
geometries
)
{
const
geometry
=
geometries
[
uuid
];
output
+=
buildMeshObject
(
geometry
);
}
return
output
;
}
function
buildMeshObject
(
geometry
)
{
const
name
=
'
Geometry_
'
+
geometry
.
id
;
const
mesh
=
buildMesh
(
geometry
);
return
`
def "
${
name
}
"
{
${
mesh
}
}
`
;
}
function
buildMesh
(
geometry
)
{
const
name
=
'
Geometry_
'
+
geometry
.
id
;
const
attributes
=
geometry
.
attributes
;
...
...
@@ -151,11 +200,11 @@
}
return
`def Mesh "
${
name
}
"
return
`
def Mesh "
${
name
}
"
{
int[] faceVertexCounts = [
${
buildMeshVertexCount
(
geometry
)}
]
int[] faceVertexIndices = [
${
buildMeshVertexIndices
(
geometry
)}
]
rel material:binding = </Materials/Material_
${
material
.
id
}
>
normal3f[] normals = [
${
buildVector3Array
(
attributes
.
normal
,
count
)}
] (
interpolation = "vertex"
)
...
...
examples/jsm/exporters/USDZExporter.js
浏览文件 @
00b44e33
...
...
@@ -4,8 +4,13 @@ class USDZExporter {
async
parse
(
scene
)
{
const
files
=
{};
const
modelFileName
=
'
model.usda
'
;
const
geometryFileName
=
'
geometry.usd
'
;
let
output
=
buildHeader
();
const
geometries
=
{};
const
materials
=
{};
const
textures
=
{};
...
...
@@ -16,8 +21,15 @@ class USDZExporter {
const
geometry
=
object
.
geometry
;
const
material
=
object
.
material
;
materials
[
material
.
uuid
]
=
material
;
if
(
!
(
geometry
.
uuid
in
geometries
)
)
{
geometries
[
geometry
.
uuid
]
=
geometry
;
}
if
(
!
(
material
.
uuid
in
materials
)
)
{
materials
[
material
.
uuid
]
=
material
;
if
(
material
.
map
!==
null
)
textures
[
material
.
map
.
uuid
]
=
material
.
map
;
if
(
material
.
normalMap
!==
null
)
textures
[
material
.
normalMap
.
uuid
]
=
material
.
normalMap
;
if
(
material
.
aoMap
!==
null
)
textures
[
material
.
aoMap
.
uuid
]
=
material
.
aoMap
;
...
...
@@ -25,7 +37,11 @@ class USDZExporter {
if
(
material
.
metalnessMap
!==
null
)
textures
[
material
.
metalnessMap
.
uuid
]
=
material
.
metalnessMap
;
if
(
material
.
emissiveMap
!==
null
)
textures
[
material
.
emissiveMap
.
uuid
]
=
material
.
emissiveMap
;
output
+=
buildXform
(
object
,
buildMesh
(
geometry
,
material
)
);
}
const
referencedMesh
=
`prepend references = @./
${
geometryFileName
}
@</Geometry_
${
geometry
.
id
}
>`
;
const
referencedMaterial
=
`rel material:binding = </Materials/Material_
${
material
.
id
}
>`
;
output
+=
buildXform
(
object
,
referencedMesh
,
referencedMaterial
);
}
...
...
@@ -34,7 +50,10 @@ class USDZExporter {
output
+=
buildMaterials
(
materials
);
output
+=
buildTextures
(
textures
);
const
files
=
{
'
model.usda
'
:
fflate
.
strToU8
(
output
)
};
files
[
modelFileName
]
=
fflate
.
strToU8
(
output
);
output
=
null
;
files
[
geometryFileName
]
=
fflate
.
strToU8
(
buildMeshFileString
(
geometries
)
);
for
(
const
uuid
in
textures
)
{
...
...
@@ -120,17 +139,20 @@ function buildHeader() {
// Xform
function
buildXform
(
object
,
define
)
{
function
buildXform
(
object
,
referencedMesh
,
referencedMaterial
)
{
const
name
=
'
Object_
'
+
object
.
id
;
const
transform
=
buildMatrix
(
object
.
matrixWorld
);
return
`def Xform "
${
name
}
"
(
${
referencedMesh
}
)
{
matrix4d xformOp:transform =
${
transform
}
uniform token[] xformOpOrder = ["xformOp:transform"]
${
define
}
${
referencedMaterial
}
}
`
;
...
...
@@ -153,7 +175,35 @@ function buildMatrixRow( array, offset ) {
// Mesh
function
buildMesh
(
geometry
,
material
)
{
function
buildMeshFileString
(
geometries
)
{
let
output
=
buildHeader
();
for
(
const
uuid
in
geometries
)
{
const
geometry
=
geometries
[
uuid
];
output
+=
buildMeshObject
(
geometry
);
}
return
output
;
}
function
buildMeshObject
(
geometry
)
{
const
name
=
'
Geometry_
'
+
geometry
.
id
;
const
mesh
=
buildMesh
(
geometry
);
return
`
def "
${
name
}
"
{
${
mesh
}
}
`
;
}
function
buildMesh
(
geometry
)
{
const
name
=
'
Geometry_
'
+
geometry
.
id
;
const
attributes
=
geometry
.
attributes
;
...
...
@@ -165,11 +215,11 @@ function buildMesh( geometry, material ) {
}
return
`def Mesh "
${
name
}
"
return
`
def Mesh "
${
name
}
"
{
int[] faceVertexCounts = [
${
buildMeshVertexCount
(
geometry
)
}
]
int[] faceVertexIndices = [
${
buildMeshVertexIndices
(
geometry
)
}
]
rel material:binding = </Materials/Material_
${
material
.
id
}
>
normal3f[] normals = [
${
buildVector3Array
(
attributes
.
normal
,
count
)}
] (
interpolation = "vertex"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录