<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.frictionalgames.com/page?action=history&amp;feed=atom&amp;title=HPL3%2FSOMA%2FModeling%2FModeling_Guidelines</id>
	<title>HPL3/SOMA/Modeling/Modeling Guidelines - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.frictionalgames.com/page?action=history&amp;feed=atom&amp;title=HPL3%2FSOMA%2FModeling%2FModeling_Guidelines"/>
	<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;action=history"/>
	<updated>2026-10-04T07:43:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;diff=7322&amp;oldid=prev</id>
		<title>TiMan: /* Scale, axes, and origin */</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;diff=7322&amp;oldid=prev"/>
		<updated>2026-10-02T15:31:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Scale, axes, and origin&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 15:31, 2 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l15&quot; &gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Work at a consistent real-world scale. The SOMA export guide recommends treating one unit as one metre, or using centimetres consistently so a one-metre object is 100 units high. Exported unit metadata may be used by the importer.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Work at a consistent real-world scale. The SOMA export guide recommends treating one unit as one metre, or using centimetres consistently so a one-metre object is 100 units high. Exported unit metadata may be used by the importer.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Keep the same unit scale for a rigged mesh and all of its animations. The documented result of a mismatch is an animated mesh that expands or shrinks.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Keep the same unit scale for a rigged mesh and all of its animations. The documented result of a mismatch is an animated mesh that expands or shrinks.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Configure the source application's up axis deliberately and validate the export in SOMA. Of 5,490 inspected shipped Collada files, 5,207 declare &lt;/del&gt;&amp;lt;code&amp;gt;Y_UP&amp;lt;/code&amp;gt; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;and 283 declare &amp;lt;code&amp;gt;Z_UP&amp;lt;/code&amp;gt;; &lt;/del&gt;the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;installed assets therefore do not justify treating one declaration as universal&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Declare &lt;/ins&gt;&amp;lt;code&amp;gt;Y_UP&amp;lt;/code&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;as &lt;/ins&gt;the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;up axis&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Place the origin deliberately. The existing SOMA modeling guide recommends positioning an ordinary prop so its bottom is at the origin. This gives a useful placement point on floors; doors, wheels, and other pivoting objects instead need an origin suited to their intended movement.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Place the origin deliberately. The existing SOMA modeling guide recommends positioning an ordinary prop so its bottom is at the origin. This gives a useful placement point on floors; doors, wheels, and other pivoting objects instead need an origin suited to their intended movement.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Apply or otherwise account for object transforms before export according to the exporter being used. Validate the result in an HPL3 tool rather than assuming the modeling application's displayed scale is authoritative.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Apply or otherwise account for object transforms before export according to the exporter being used. Validate the result in an HPL3 tool rather than assuming the modeling application's displayed scale is authoritative.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff::1.12:old-7319:rev-7322 --&gt;
&lt;/table&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;diff=7319&amp;oldid=prev</id>
		<title>TiMan: Add practical, source-verified SOMA modeling principles covering asset roles, scale, axes, origin, submeshes, materials, organization, validation, and troubleshooting.</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;diff=7319&amp;oldid=prev"/>
		<updated>2026-10-02T15:28:58Z</updated>

		<summary type="html">&lt;p&gt;Add practical, source-verified SOMA modeling principles covering asset roles, scale, axes, origin, submeshes, materials, organization, validation, and troubleshooting.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Modeling principles''' are the preparation rules that make a 3D asset predictable when it is exported, loaded, textured, and given collision in SOMA. They apply before the asset is configured as a static object or an entity.&lt;br /&gt;
&lt;br /&gt;
== Plan the asset's role ==&lt;br /&gt;
&lt;br /&gt;
Decide how the model will be used before splitting the mesh or building collision:&lt;br /&gt;
&lt;br /&gt;
* A '''static object''' is map geometry intended to remain fixed. Nearby static objects with matching material and render settings can be combined by the engine, so reusable architectural pieces benefit from shared materials.&lt;br /&gt;
* An '''entity''' is saved as an &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file and can contain a mesh, physics shapes and bodies, joints, sub-entities, effects, and animations. Its behavior is selected through an entity type.&lt;br /&gt;
* A detailed visible mesh and a practical collision shape need not be identical. Complex or rounded visible geometry often benefits from simpler physics shapes configured in the Model Editor.&lt;br /&gt;
&lt;br /&gt;
Use a static object for fixed scenery unless the object needs entity features such as scripted behavior, articulated physics, animation, or per-instance gameplay variables.&lt;br /&gt;
&lt;br /&gt;
== Scale, axes, and origin ==&lt;br /&gt;
&lt;br /&gt;
* Work at a consistent real-world scale. The SOMA export guide recommends treating one unit as one metre, or using centimetres consistently so a one-metre object is 100 units high. Exported unit metadata may be used by the importer.&lt;br /&gt;
* Keep the same unit scale for a rigged mesh and all of its animations. The documented result of a mismatch is an animated mesh that expands or shrinks.&lt;br /&gt;
* Configure the source application's up axis deliberately and validate the export in SOMA. Of 5,490 inspected shipped Collada files, 5,207 declare &amp;lt;code&amp;gt;Y_UP&amp;lt;/code&amp;gt; and 283 declare &amp;lt;code&amp;gt;Z_UP&amp;lt;/code&amp;gt;; the installed assets therefore do not justify treating one declaration as universal.&lt;br /&gt;
* Place the origin deliberately. The existing SOMA modeling guide recommends positioning an ordinary prop so its bottom is at the origin. This gives a useful placement point on floors; doors, wheels, and other pivoting objects instead need an origin suited to their intended movement.&lt;br /&gt;
* Apply or otherwise account for object transforms before export according to the exporter being used. Validate the result in an HPL3 tool rather than assuming the modeling application's displayed scale is authoritative.&lt;br /&gt;
&lt;br /&gt;
== Geometry and submeshes ==&lt;br /&gt;
&lt;br /&gt;
* Give exported objects and mesh datablocks stable, descriptive names. Submesh names matter when an existing entity is reimported and its saved submesh data must be reassigned.&lt;br /&gt;
* Export polygon meshes in a form the selected exporter can reliably convert. The shipped Collada example inspected for this guide records triangle export, and the existing Modo and Blender guidance requires triangulation before export.&lt;br /&gt;
* Remove accidental duplicate geometry and unused objects from the export selection.&lt;br /&gt;
* Split geometry by material where necessary. HPL3 assigns one material to each submesh; a model needing multiple materials therefore needs multiple submeshes.&lt;br /&gt;
* Avoid unnecessary submesh and material splits. For static geometry, nearby objects that share a material and compatible settings can be combined at load time, reducing draw calls.&lt;br /&gt;
* Keep collision requirements in mind while modeling. Render geometry that is too detailed for collision can use simpler shapes or a separate collision setup in an &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
== UVs and materials ==&lt;br /&gt;
&lt;br /&gt;
* UV-unwrap every textured submesh and keep the UV layout valid for the texture workflow being used.&lt;br /&gt;
* Assign the intended diffuse texture to every exported submesh. The importer uses that texture reference to locate the corresponding HPL3 &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; file.&lt;br /&gt;
* Match the diffuse texture and material base names. For example, a submesh using &amp;lt;code&amp;gt;panel.dds&amp;lt;/code&amp;gt; should have a material named &amp;lt;code&amp;gt;panel.mat&amp;lt;/code&amp;gt; available through the resource paths.&lt;br /&gt;
* Use distinct texture/material base names for distinct submesh materials, such as &amp;lt;code&amp;gt;door_frame.dds&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;door_frame.mat&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;door_leaf.dds&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;door_leaf.mat&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Set each material's physics material deliberately when its surface will provide collision. One &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; file has one physics-material setting.&lt;br /&gt;
&lt;br /&gt;
The older SOMA project guide gives historical recommendations for texture formats, suffixes, and relative sizes. Treat those as project conventions, not as proof that every modern mod asset must use the same compression or dimensions. The material file and the current tool output are the authoritative test.&lt;br /&gt;
&lt;br /&gt;
== Organize files predictably ==&lt;br /&gt;
&lt;br /&gt;
Keep an asset's source model, generated cache, materials, textures, and optional entity file in a stable resource directory. A typical entity asset may look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
entities/my_mod/machine/&lt;br /&gt;
├── machine.dae&lt;br /&gt;
├── machine.msh&lt;br /&gt;
├── machine.ent&lt;br /&gt;
├── machine.dds&lt;br /&gt;
├── machine_nrm.dds&lt;br /&gt;
└── machine.mat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The exact texture set depends on the material. Same-basename organization is not an engine requirement for every auxiliary texture, but it makes dependencies easier to identify and matches many shipped SOMA assets. In the installed game, 2,944 entity assets have same-basename &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.dae&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;.msh&amp;lt;/code&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
Make sure the containing directory is included by the mod's &amp;lt;code&amp;gt;resources.cfg&amp;lt;/code&amp;gt;. Do not rely on absolute paths embedded by the modeling application; test the asset from its final mod-relative location.&lt;br /&gt;
&lt;br /&gt;
== Validate in small steps ==&lt;br /&gt;
&lt;br /&gt;
# Export the source mesh into its final resource directory.&lt;br /&gt;
# Load it in &amp;lt;code&amp;gt;ModelViewer.exe&amp;lt;/code&amp;gt; or import it into &amp;lt;code&amp;gt;ModelEditor.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Check orientation, dimensions, origin, normals, UVs, and material assignment before adding gameplay setup.&lt;br /&gt;
# If it will be an entity, save a minimal &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt;, then add shapes, bodies, joints, and type variables incrementally.&lt;br /&gt;
# Place the static object or entity in a test map and check it in-game under representative lighting.&lt;br /&gt;
# Re-export once and verify that the update workflow preserves the intended submesh assignments.&lt;br /&gt;
&lt;br /&gt;
This staged process separates mesh/export problems from material, physics, entity-type, and map-placement problems.&lt;br /&gt;
&lt;br /&gt;
== Common problems ==&lt;br /&gt;
&lt;br /&gt;
* '''Wrong size:''' verify the source scene units and exported unit metadata. For animated assets, verify the mesh and animation use the same scale.&lt;br /&gt;
* '''Wrong orientation or pivot:''' fix the source axes/origin and re-export rather than compensating separately in every map instance.&lt;br /&gt;
* '''Missing material:''' confirm that the submesh has a diffuse texture reference and that the matching &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; is reachable through the mod resources.&lt;br /&gt;
* '''Only one material appears:''' separate faces that need different materials into different exported submeshes.&lt;br /&gt;
* '''Collision is expensive or catches on details:''' use simpler Model Editor shapes or a deliberately simplified collider instead of the full visible mesh.&lt;br /&gt;
* '''Reimport loses setup:''' keep stable submesh names and review every mapping in the SubMesh Reassign dialog.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Importing Models|Importing Models]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Models|Exporting Models]]&lt;br /&gt;
* [[HPL3/Materials/Working with Materials|Working with Materials]]&lt;br /&gt;
* [[HPL3/Entities/Entities Overview|Entities Overview]]&lt;br /&gt;
* [[HPL3/Blender HPL3 export plugin|Blender HPL3 export plugin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
</feed>