Shockwave3D建模文档
以下内容是根据本人几年来的工作积累的经验所写,也有部分内容是从Adobe网站上面摘录,Shockwave3D适用于小规模场景的实时渲染及在线三维小游戏,希望本文档能为国内(China)Shockwave3D开发人员带来方便,更希望国内Shockwave3D开发人员能越来越强。如果有时间,我还想写一个Shockwave3D开发文档,这里面大部分内容是关于建模的,不过开发人员也必须了解如何建模才能更好的进行后续的开发工作。
模型(model)
制作:
1:模型面数最好控制不要超过20,000面(P43.0,
2:制作模型的时候如果能使用instance来复制模型最好使用instance,这样可以使输出文件的文件量达到最小化.*场景内如果有tree要绕着camera旋转的话,使用instance复制可以,不过不能调节scale参数,否则到应用的时候会出现问题。
3:透明度不是100或0的模型尽量不要与其它模型交叉.这样会引起z
buffer问题,导致显示不正确。
4:建立模型尽量使用box, plane, Sphere等shockwave支持的几种model resource来建立模型。
5:2个模型不能重叠,而且尽量避免靠的太近。
6:模型上面不管有没有贴图最好都加上UV modifier 。
7:所有二维的线面都是不被支持的,导出前建议删除场景内所有不被支持的数据,避免发生导出错误。
8:如果不是特殊需求,尽量取消物体之间Group层级关系.
优化:
1:使用max modifier:Optimize,优化一些面数很大的模型。
2:使用polygon cruncher进行模型优化(强烈推荐)。
3:合并相同材质距离较近模型(合并的物体必须只是渲染用到,如果这个物体有关键帧动画,或者这个物体需要实现点击或绕着Camera旋转,不可合并)。
4:删除在场景内看不见的面。
常见错误:
1:场景内有二维物体存在(有可能是建模时候遗留的,也有可能是做路径动画的时候使用的,删除建模时候遗留的)。
2:Modefier stack里面太多modefier,可能会导致导出错误,解决方式:Convert to editablemesh。
材质(Material)
制作:
1:standard
材质
2:MultiMaterial,子材质必须是standard材质。
优化:
1:场景如果最终做完,可以打散所有多维材质,合并场景里面相同材质的物体(合并的物体必须只是渲染用到,如果这个物体有关键帧动画,或者这个物体需要实现点击或绕着Camera旋转,不可合并)。
常见错误:
1:使用不被支持的Material类型(强行导出material会丢失)。
2:Material重名(强行导出只能导出一个material,另一个material被覆盖)。
贴图(texture map)
制作:
1:贴图尺寸最好是2的n次方,如果128*128尺寸就可以表现的,不要用256*256大小的,这个对性能影响很大.不要使用超过1024*1024尺寸的贴图,没有实际意义。
2:贴图通道:Diffuse,反射贴图,透明贴图
3:贴图总量不要太多,场景内的贴图是对性能影响的关键之一.
优化:
1:减小贴图尺寸,尽量使用最小可以满足效果的贴图尺寸。
2:减少贴图数目,合并几张贴图到一张大的贴图,然后重新分Mesh的UV坐标。(如果都是贴在Diffuse通道的贴图,可以使用map combine)。
3:效果优化,可以使用烘培来实现。
4:导出的时候Compression Settings的Texture如果要保证贴图质量的话不要选择80以下数据,建议是85.Texture Size Limits建议选择 No Limits on texture。测试时候可以选择256 by 256 pixels。
常见错误:
1:贴图重名。
灯光(light)
制作:
支持类型:ambient,directional,point,spot.
支持属性:不支持阴影,支持衰减
灯光尽量不用,场景内的灯光很消耗资源,并且效果一般
建议只适用默认灯光来照亮场景。
优化:
1:建议删除场景内所有的灯光,不推荐用灯光。
2:如果要实现灯光效果,建议使用烘培到贴图(Render to texture)来实现。
动画(motion)
制作:
支持关键帧动画和骨骼动画
关键帧动画支持Position,Rotation,Scale变换。
优化:
1:由于数据量较小,所以优化的意义不大,不过如果导出的时候动画效果不好,可以通过调节Animation Option里面的Sampling。
摄像机(Camera)
只支持Free camera,不支持target camera
Target Camera也可以导入,但是Target就不好用了,Target被定义成一个Group,但不起任何作用
优化:
1:删除场景内无用摄像机。
导出(Export)
1:文件量
最终导出之前,如果对文件量有大小要求,先做一次Analyze,看到哪部分的文件量最大,并且做相应优化。一般最好保证单一场景在

2:错误检查
导出之间进行一次Author Check,可以看到场景内哪些物体导出的时候会有问题,如果没有任何问题,再导出。
3:Resources to Export
如果不是特殊需求,去除Enable Toon and SDS选项。
4:Compression Setting
推荐参数
Geometry 50
Texture 85
Animation 100
5:Texture Size Limits
最终导出都要选择No limit on texture.测试时可使用256 by 256提高测试速度。
6:Animation Options
Sampling 1,Range 默认参数。
7:图例

这种类型是不支持的,不过你如果使用Line作为Camera的路径的话,导出W3d会自动生成一个路径模型,这个模型不是Line,而是带有面的,这时你做碰撞(如果检测所有模型的碰撞的话)可能会导致意向不到的结果.建议使用Camera和一个Box Group一起再沿着路径走,这样不会导出那个Line的model了(我记得是这样,这个地方我不是很确定,因为好久之前做的了,记忆有些模糊)
1:为了更好的兼容性,三维场景里面任何地方不用中文命名。
2:Camera命名,使用”Cam_“ or “Camera_”作为前置标识。后缀用来区别用途,比如 “Camera_AutoView” 表示自动行走的Camera,”Cam_Gate”,表示大门处的Camera。
3:Light命名,使用”Light_”做前缀,命名和Camera类似。
4:Geometry(Model)命名,分成3部分。中间用”_”来分开。例如:
”MainName_AreaName_ObjName”
MainName
3-6个字符,整个Max文件的标识,在一个Max文件里的所有Geometry的MainName都相同,多人合作建模的时候最后导出可以分辨出来是哪部分模型。
AreaName
3-6个字符,一个Max文件里面标识不同区域的字符,同一区域的AreaName相同(最好也设置相同的Object
Color,这样在wireframe显示的时候更直观)。
ObjName
3-6个字符,模型真正代表的意义,比如”_chair”
“_desk” “_roof” “_tree”等。如果有很多相同的desk,可以用这种标识
“_desk
5:Material ,Texture命名,原则上没有太多要求,不过不要重名。否则导出会覆盖重名Material or Texture。
下表是max自带的Render to texture 参数设置图表。
见下页

User properties may be set by the following process:
Select a model in 3D
Studio MAX.
Right-click
the model and open the Properties dialog.
Select
the User Defined tab.
In
the text box, type the user property name and value.
User properties are specified as property name and
property value pairs. Property names are associated with property values with
the equal (=) sign. Property values are terminated with a semicolon (;).
Property names are alphanumeric, starting with an alpha character. No spaces
are allowed between the user property and the equal (=) sign, and between the
equal (=) sign and the start of the property value.
There is no limit to the
number of user properties. Currently, property values are restricted to 512
characters.
MyProperty1=A Monster called Fred;
CharacterLifeForce=10
units;
sw3d_lod_adjust_normals=true;
The following user
property names are reserved by Shockwave 3D and trigger the following described
behaviors when the .w3d file is loaded into Director. The exporter should be
used to assign these properties to a model and programmatically implement them
at export.
Note: All strings
starting with "sw3d_" are reserved for future use by user properties
in Shockwave 3D.
|
Property |
Value |
Default |
Description |
|
[Unsigned Integer: 0...256] |
256 |
Specifies the relative
stream priority of a model and any textures used by the model (0 indicating
the highest priority, with larger numbers indicating a lower priority). By
default, texture priorities are set to 4 times the model priority. Note: Priority 0
denotes inclusion in the initial Load Segment. |
|
|
[Unsigned Integer:
0...1024] |
1024 |
Specifies the relative
stream priority of a texture. This control allows you to override the
priority given a texture after setting the sw3d_stream_priority user property
on a model that uses the texture. Note: Priority 0
denotes inclusion in the initial Load Segment. |
|
|
sw3d_visibility |
front/back/ |
front |
Controls initial
visibility of a model. Note: If set to none the model is streamed
but not initially visible. A Lingo programmer may make the model visible
later by setting model(1).visibility=#front |
|
sw3d_lod_adjust_normals |
true/false |
true |
When true, creates new
normals to track the new surface curvature as a model is simplified. When false, uses normals from original model
and generates no additional normals to track the simplified surfaces. Note: When sw3d_lod_adjust_normals is set to
true, the new normals are calculated according to the values of sw3d_lod_minimum_crease_angle and sw3d_lod_max_normal_error. Hint: Set this value to false to obtain the
smallest file size. |
|
sw3d_lod_minimum_crease_angle |
Integer value in 10ths
of a degree |
750 (75.0 degrees |
Sets crease angle
value. As an object is simplified the angles between the surfaces change.
When the angles exceed this value, a hard edge is formed by introducing
separate normals for each surface. A small value results in a more faceted,
chunky model. A large value results in a more realistic, smoother model with
occasional shading errors. Note: This is only used when sw3d_lod_adjust_normals is set to
true. Hint: The default value seems to work well
for most models, so you probably won't need to change it. |
|
sw3d_lod_max_normal_error |
Integer value in 10ths
of a degree |
1350 (135.0 degrees |
Trades off file size
for lighting quality. Large values result in smaller files with more lighting
errors. Small values result in larger files with better lighting through the
generation of additional normals. Note: This used only when sw3d_lod_adjust_normals is set to
true. |
When I export my model, its
textures look wavy in the preview window, and I can see through the triangles.
What's wrong?
The preview window shows how the model will look after it is compressed for
output to the Shockwave 3D* file format.
Gaps between triangles can appear when a vertex that is shared among multiple
triangles is replicated into multiple vertices by the level-of-detail
calculations. This can happen when the UVW Modifier is used in 3D Studio MAX*
to create tiling, which causes very rapid changes in the texture coordinates on
the mesh. Replication can also occur at the boundary between two materials on a
model by assigning different material IDs to different parts of a mesh and then
using a Multi/Sub-Object Material to texture each part of the mesh. These
multiple copies of the vertex are compressed differently, disconnecting
adjacent vertices. To get rid of these gaps, either adjust the UVW Modifier or
the Geometry Quality to decrease the compression errors.
Wavy textures are another symptom of excessive geometry compression. The lack
of gaps indicates that the triangle vertices were not replicated when creating
the level-of-detail representation of the mesh. Instead, the single vertex
shared by all triangles is getting shifted slightly, which distorts the
resulting texture. Increase Geometry Quality until you reach an acceptable
level of distortion.
My exported models look creased where a
number of faces come together. How do I fix this?
This is a result of geometry compression. Increase the Geometry Quality level
(which decreases the compression), balancing this with the need to keep the
file sizes small.
In my animation, the scene elements
slowly float apart as the scene loops. Why is this happening?
Object animations are specified relative to their starting position (Animation
Range Start). When the animation loops, the object is not reset to its original
position and moves again starting at its current position. This results in the
object floating away as the animation loops. To create a looping animation that
stays in one place, make sure that your objects return to their original
locations and orientations by the end of the animation sequence in 3D Studio
MAX.
Why are all of the textures on my model
exporting as a single texture, or all the materials on my model exporting as a
single material?
The most likely cause is a naming conflict. All materials and textures must
have unique names in Shockwave 3D; otherwise, materials and textures with the
same names are assumed to be the same despite their internal settings. Use the
3D Studio MAX Material Editor to change the default "Material #n" or
"Map #n" names assigned by 3D Studio MAX to something meaningful for
your scene.
Note: Textures are assigned a name in the Material Editor and do not derive
their names not from the bitmap they use.
Why does my sharp-edged model have
dark-shaded triangles along its edges when I export it?
The edges of the model are not perfectly sharp, being modeled by a number of
very small triangles where the edges meet. One part may be modeled by a series
of triangles that are much larger than the tiny triangles used to
"blunt" its edges. This can cause problems when the mesh resolution
drops, as a large triangle on the flat face of the model is as likely to be
thrown out as one of the tiny triangles. This causes sudden changes in the
normals of the remaining faces, and the appearance and disappearance of large
triangular dark spots.
One solution is to select all the vertices at the very edge of the model with
the 3D Studio MAX Mesh Select modifier. This will mark these vertices as
"base vertices," meaning that they will be the last vertices to
vanish as the mesh resolution drops to zero faces. The problem, however, is
that sharp edges are typically modeled by many vertices, so selecting all the
edge vertices as base vertices defeats the purpose of having multiresolution
mesh representation. This can also cause poor streaming behavior, or scenes
where only the base vertices of the model are rendered. Another solution is to
model the edges with a smooth range of triangle sizes near the edges. The
problem with this approach is that it creates a more complex mesh, which will
slow streaming.
A final solution is to make use of the sw3d_lod_adjust_normals and
sw3d_lod_minimum_crease_angle user properties. Decrease the value for the
sw3d_lod_minimum_crease_angle user property, and the dark triangles will go
away. This procedure can increase file size, however. Increase the value of the
sw3d_lod_minimum_crease_angle user property, and the dark triangles will also
go away. This procedure can cause different lighting errors. Which user
property to use will vary depending on the model. Try extreme values of either
of these user properties to see how their effects differ when the model is
viewed in Director, and then adjust the values until you have reached an
acceptable visual quality and file size compromise.
When I export, the light, camera, and
group aren't animating. What's wrong?
These scene entities are only able to move when they are the child of a mesh,
because only meshes and bones can be animated in Shockwave 3D. Be sure to
attach the light, camera, or group to a mesh, and then animate the mesh when
setting up the animation for export.
Note: A group that has a group as its parent will animate when it has a mesh as
its child, because the group and the mesh get collapsed into a single model
node which can be animated. See Scenegraph Hierarchy Rules.
Why does my scene get clipped when I use
the Dolly tool in the Preview window?
The scene was probably exported in Orthographic view. Export in Camera or
Perspective view from 3d Studio Max to avoid clipping.
Why does my character start animation at
the end of its cycle?
Because of the way 3D Studio Max sends the animation position information, the
time slider must be set to 0 or else the animation starts at the last frame.
Why are the objects that are animated
showing tiny vibrations?
The vibration is a result of animation compression. The exporter Animation
Quality value controls the degree to which the animation is compressed. At
lower values with higher compression, the motion is represented with less
accuracy. This means that the positions of all the bones will have a random
element in them from one keyframe to the next, resulting in a vibrating image.
Keep in mind that there is a trade off between inaccuracy in the motion and
file size when adjusting the Animation Quality control.
Why are objects that I hide in 3D Studio
MAX showing up when I export?
Marking an object as "invisible" in the 3D Studio MAX simply hides it
when working in or rendering a scene, but does not remove the object from the
scene. The Shockwave 3D exporter sees all objects in the scene whether or not
they are marked as invisible. If you want the models to remain invisible in
Shockwave 3D, mark them with the "sw3d_visibility" user property. If
you don't want them in the exported scene, to save download time and disk
space, remove them from the scene before exporting.
I have two meshes, one of which is the
child of the other. When I export, why is the animation of only the parent mesh
captured? Likewise, when I have a mesh contained in a group, only the animation
of the group is captured. Why?
According to the Scenegraph Hierarchy Rules, parent-child meshes are collapsed
into a single mesh by the Shockwave 3D exporter. This means that the animation
of the child mesh will be lost as it becomes part of its parent. Only bones
will cause the child mesh to move relative to its parent after this collapse.
To animate both meshes separately, place a group node between the parent mesh
and the child mesh. Alternately, use one or more bones to animate the child
mesh with respect to its parent.
When 3D Studio MAX nodes are collapsed into a single node by the exporter, only
the animation of the top node in the set being collapsed will be captured. The
animation of a child mesh contained within a group will not be captured for the
same reason that its animation was lost under a parent mesh: all children of a
node become part of that one node and are animated by that top node's
animation.
The scene looked fine in the preview; but
when I exported it, the scene was blank and using Lingo script "put
member(x).model(1)" returns "<VOID> or the name of the
model." What happened?
If Lingo returned <void>, you probably exported the scene without having
the Scenegraph Hierarchy export option selected. When this option is not
selected, the only things written to the export file are the shader, texture,
model, and motion resources. All the information that specifies how they exist
in the scene, how the scene is laid out, how the scene is lit, and how the
scene is viewed is lost. Re-export the scene and make sure the Scenegraph
Hierarchy option is selected.
If Lingo returned the name of the model, you probably exported the scene with
having the Shader export option or the Light Resources option selected. When
these options are not selected, the model exports but is not shaded or lighted,
which renders it invisible. Re-export the scene and make sure the shader and
light resources options are selected.
I have placed a camera as a child to a
mesh. When I animate this mesh, thereby causing the camera to animate, the view
from the camera vibrates. How do I fix this?
The vibration is be caused by the animation being too compressed. To avoid
this, set the Animation Quality compression control to a value of 100.0. In
general this setting is too high for most animations. When you must use this
value, create a special scene containing only the camera's parent, and export
only the animation on that object. Then use the Lingo loadfile command to load
the animation into the full scene.
Shaky motion can also result when keyframes have very different positions from
the beginning or the end keyframes. In this case, the shaking won't go away
even when the Animation Quality control is set to 100.0 because of the way the
animation keyframes are compressed. The fix is to try to keep all keyframe positions
within a tight range whenever possible.
I want to export a lip sync animation
built by using a morph compound object, but cannot get it to work after the
export, because only bones-based deformations will export. How do I get around
this?
The Morpher modifier and Morph compound objects will not export because the
deformations they create are not bones-based. Only bones-based deformation will
export. Morphing can be achieved by using bones to generate phoneme targets,
and then by copying the bone keyframe information as needed to reproduce the
target pose. Other options include creating a model using bones and applying
the Physique modifier to the lips and head, or generating a series of morph
targets, and blending them using Director.
Why does the Shockwave 3D exporter stop
responding or cause 3D Studio Max or my system to fail when I export a scene
containing a large model?
Converting a MAX model containing over more than 10,000 faces to the Shockwave
3D multi-resolution representation is a memory-intensive operation. On systems
with less than 256Mb of memory, but even on systems with more memory, very
large models can exhaust a system's memory. This can cause the exporter to slow
and, in some situations, can cause 3D Studio MAX or your operating system to
fail. As an example, a 260,000-face teapot required 610 Mb of system memory to
export, and produced a 4Mb Shockwave 3D file.
Because large models will take a long time to stream to a remote computer over
the Internet, and are unlikely to render at full resolution on all but high-end
systems at frame rates longer than one second, we recommend that you simplify
large models before attempting to export them.
What is the difference between geometry
compression and the level-of-detail (LOD) representation of a model?
Geometry compression removes no vertices from a model (including keyframes and
texture colors), but rather causes the vertex positions (including normals and
texture coordinates) to be represented with less precision, causing them to drift
from their true positions. This drift increases as the compression rises,
eventually resulting in a noticeable wrinkling or crumpling of the object. A
geometry quality setting of 100 means least compression of the mesh data with
the highest possible accuracy.
When models are exported, their meshes are processed and simplified one vertex
at a time. This process works in the opposite direction when the model is
streaming into a Shockwave 3D scene.
Simplification does not create gaps in a model, although it will cause any
existing gaps in a model to get larger as the model is simplified. The degree
to which a model is automatically simplified depends on the target framerate,
the hardware used, the complexity of the model, the distance between the model and
the camera, and the complexity of the entire scene. Very large models need to
be greatly simplified just to obtain approximately 30 frames per second, even
using fast machines, or when the model is far from the camera.
Level-of-detail (LOD) calculations, on the other hand, remove vertices from a
model. This is done by looking at the local smoothness or non-smoothness of the
surface around each vertex. Smooth surfaces are retained and jagged surfaces
are removed.
Sharp but important features, like an antenna on a vehicle, which would be
removed, can be preserved by being marked as base vertices using the Mesh
Select modifier. This effectively indicates that these vertices are the last to
be removed. Do not mark too many vertices with the Mesh Select modifier,
however, as this can create poor streaming behavior, or scenes where only the
base vertices of the model are rendered.
Further tuning of level of detail can be done with the sw3d_lod_adjust_normals,
sw3d_lod_minimum_crease_angle, and sw3d_lod_max_normal_error user properties.
Default settings of user properties can result in the the removal of vertices
that drastically change the surface normal, resulting in a hole in model.
Models with faces with a normal direction or winding order that is inconsistent
with the adjoining faces, or having faces that have zero area, for example, can
cause tearing of the model when it simplifies. Decreasing the
sw3d_lod_max_normal_error or increasing the sw3d_lod_minimum_crease_angle user
property values can often remove these holes as the model simplifies, but often
at the expense of creating a larger Shockwave 3D file that will take longer to
stream.
Streaming and Load Priorities
What is load priority?
Load priority is the method used by a .w3d file to define the general ordering
of models and textures in the data that is streamed. Load priority values are
unsigned integers that range from 0 to 256 for models, and 0 to 1024 for
textures. Models and textures with the highest load priority significance
appear before those with lesser significance. Load priority significance
increases as the value decreases.
How is load priority specified in the
Shockwave 3D Exporter?
For a model, this is done by setting a sw3d_stream_priority assignment for the
model's user properties. For all textures used by a model, this is done by
setting a sw3d_texture_stream_priority assignment for the model's user
properties. See User Properties for more details.
What is the default load priority for all models in the Shockwave 3D Exporter?
The default load priority of all models is 256. A model's default load priority
is overridden if the sw3d_stream_priority user property is specified for the
model, and its value is less than the default of 256. If there are multiple
model instances using a common resource, the most significant priority value
(that is, the numerically smallest load priority value) is used for the model
resource geometry and any associated textures.
What is the default load priority for all
textures used by all models in the Shockwave 3D Exporter?
The default load priority of each texture is the most significant load priority
specified for all of the models that use the texture, multiplied by 4. If all
of the models using the texture have the default load priority of 256, then the
default load priority of the texture will be 1024. If some of the models that
use the texture don't have the default load priority and 10 is their most
significant load priority, then the default load priority of the texture will
be 40. A texture's default load priority is overridden if the
sw3d_texture_stream_priority user property is specified for the texture, and
its value is less than the calculated default.
How does load priority affect what's in
the initial load segment for Shockwave 3D file (for example, the ILS or what
will have been loaded when the Lingo state reaches header loaded or 2)?
The load priority for a model and its textures only affects where the geometry
update records and texture image data are placed in the .w3d file. All of the
other types of data are placed in the ILS without respect to the load priority.
This includes group nodes, model nodes, lights, materials, animations, motions,
initial model resource definitions, initial texture definitions, etc. If the
load priority for a model is 0, then its geometry update records and texture
image data will be placed in the ILS. If the load priority for a model's
textures is 0, then the texture image data is placed in the ILS. The ILS equals
a load priority of 0.
Does the texture image data required for
a model appear in the Shockwave 3D file before or after the associated geometry
update records?
By default, if the exporter is set to save the textures, some of a model's
geometry update records will appear before the texture image data used by the
model. However, if a load priority for the textures is specified that is more
significant than the model's load priority, the texture image data will appear
before the geometry update records.
Are material colors, vertex colors, and
face colors saved by the Shockwave 3D Exporter?
Only material colors are saved by the exporter. The vertex and face colors are
not saved because they are not currently supported by the .w3d file format.
http://www.ccloveaa.com/blog/article.asp?id=372
http://www.ccloveaa.com/blog/article.asp?id=258
http://www.ccloveaa.com/blog/article.asp?id=224
http://www.ccloveaa.com/blog/article.asp?id=221
http://www.ccloveaa.com/blog/article.asp?id=181
http://www.ccloveaa.com/blog/article.asp?id=100