https://wiki.beyondskyrim.org/w/index.php?title=Arcane_University:Nifskope_Hinge_Constraints&feed=atom&action=historyArcane University:Nifskope Hinge Constraints - Revision history2024-03-29T05:13:24ZRevision history for this page on the wikiMediaWiki 1.26.4https://wiki.beyondskyrim.org/w/index.php?title=Arcane_University:Nifskope_Hinge_Constraints&diff=4850&oldid=prevDrewW: Minor error for Perp Axle A2. Dot product is a single number produced from two vectors. Cross product is a perpendicular vector between two other vectors, which is what perp axle a2 is expecting2023-12-02T21:25:03Z<p>Minor error for Perp Axle A2. Dot product is a single number produced from two vectors. Cross product is a perpendicular vector between two other vectors, which is what perp axle a2 is expecting</p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='en'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 21:25, 2 December 2023</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l43" >Line 43:</td>
<td colspan="2" class="diff-lineno">Line 43:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Then with the same considerations as above, fill in the '''Perp Axle in A1''', '''Perp Axle in A2''', and '''Pivot A''' properties.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Then with the same considerations as above, fill in the '''Perp Axle in A1''', '''Perp Axle in A2''', and '''Pivot A''' properties.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* '''Perp Axle in A1''' should be orthogonal to Axis A, and will define the angle 0.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* '''Perp Axle in A1''' should be orthogonal to Axis A, and will define the angle 0.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>* '''Perp Axle in A2''' is simply the <del class="diffchange diffchange-inline">dot </del>product of Axle A and Perp Axle in A1. This is likely put into the model, rather than calculated, so that the engine does not have to compute it each time.</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>* '''Perp Axle in A2''' is simply the <ins class="diffchange diffchange-inline">cross </ins>product of Axle A and Perp Axle in A1. This is likely put into the model, rather than calculated, so that the engine does not have to compute it each time.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* '''Pivot A''' is the coordinates of the pivot point. Here, W needs to be ignored, and only X, Y and Z need to be set.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* '''Pivot A''' is the coordinates of the pivot point. Here, W needs to be ignored, and only X, Y and Z need to be set.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
</table>DrewWhttps://wiki.beyondskyrim.org/w/index.php?title=Arcane_University:Nifskope_Hinge_Constraints&diff=4624&oldid=prevCandoran2: /* Setting hinge coordinates */ Note on 10x translation issue for A->B spell: only for dev7 or before, fixed in dev8.2023-03-04T13:10:35Z<p><span dir="auto"><span class="autocomment">Setting hinge coordinates: </span> Note on 10x translation issue for A->B spell: only for dev7 or before, fixed in dev8.</span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='en'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 13:10, 4 March 2023</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l47" >Line 47:</td>
<td colspan="2" class="diff-lineno">Line 47:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Then, the same will need to be done for '''Axle B''' properties in semi-automated ways. These are the same as their Axle A counterparts except '''expressed in the coordinate system of the second entity'''. On your hinge constraint, right click, then Havok, then A -> B will translate the values of Axle A, Pivot A etc in B's coordinate system.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Then, the same will need to be done for '''Axle B''' properties in semi-automated ways. These are the same as their Axle A counterparts except '''expressed in the coordinate system of the second entity'''. On your hinge constraint, right click, then Havok, then A -> B will translate the values of Axle A, Pivot A etc in B's coordinate system.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>This works fine for Axle B and Perp Axle in B1 and B2. <del class="diffchange diffchange-inline">However, </del>the A -> B spell gives incorrect result for Pivot B: the result given is 10 times too big. To correct it, divide the Pivot B values by 10.</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>This works fine for Axle B and Perp Axle in B1 and B2. <ins class="diffchange diffchange-inline">Note: In NifSkope 2.0 Dev7 (or before) </ins>the A -> B spell gives incorrect result for Pivot B: the result given is 10 times too big. To correct it, divide the Pivot B values by 10<ins class="diffchange diffchange-inline">. This issue is fixed in dev8 or later</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Finally, set '''Min Angle''' and '''Max Angle''' to limit the range of the constraint (in radians, not degrees), and the '''Max Friction''', which will define how strong the constraint will slow/resist the movement.  </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Finally, set '''Min Angle''' and '''Max Angle''' to limit the range of the constraint (in radians, not degrees), and the '''Max Friction''', which will define how strong the constraint will slow/resist the movement.  </div></td></tr>
</table>Candoran2https://wiki.beyondskyrim.org/w/index.php?title=Arcane_University:Nifskope_Hinge_Constraints&diff=4450&oldid=prevPempelune: /* Setting hinge coordinates */2022-07-22T09:10:49Z<p><span dir="auto"><span class="autocomment">Setting hinge coordinates</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='en'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 09:10, 22 July 2022</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l46" >Line 46:</td>
<td colspan="2" class="diff-lineno">Line 46:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* '''Pivot A''' is the coordinates of the pivot point. Here, W needs to be ignored, and only X, Y and Z need to be set.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* '''Pivot A''' is the coordinates of the pivot point. Here, W needs to be ignored, and only X, Y and Z need to be set.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>Then, the same will need to be done for '''Axle B''' properties in semi-automated ways. These are the same as their Axle A counterparts except '''expressed in the coordinate system of the second entity'''. On your hinge constraint, right click, then Havok, then A -> B will translate the values of Axle A, Pivot A etc in B's coordinate system <del class="diffchange diffchange-inline">(that is, the coordinate system of the other collision box on which the hinge apply)</del>.</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>Then, the same will need to be done for '''Axle B''' properties in semi-automated ways. These are the same as their Axle A counterparts except '''expressed in the coordinate system of the second entity'''. On your hinge constraint, right click, then Havok, then A -> B will translate the values of Axle A, Pivot A etc in B's coordinate system.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>This works fine for Axle B and Perp Axle in B1 and B2. However, the A -> B spell gives incorrect result for Pivot B: the result given is 10 times too big. To correct it, divide the Pivot B values by 10.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>This works fine for Axle B and Perp Axle in B1 and B2. However, the A -> B spell gives incorrect result for Pivot B: the result given is 10 times too big. To correct it, divide the Pivot B values by 10.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<!-- diff cache key beyondskyrim_wiki:diff:version:1.11a:oldid:4449:newid:4450 -->
</table>Pempelunehttps://wiki.beyondskyrim.org/w/index.php?title=Arcane_University:Nifskope_Hinge_Constraints&diff=4449&oldid=prevPempelune: /* Setting hinge coordinates */2022-07-22T09:10:08Z<p><span dir="auto"><span class="autocomment">Setting hinge coordinates</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='en'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 09:10, 22 July 2022</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l39" >Line 39:</td>
<td colspan="2" class="diff-lineno">Line 39:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>In the screenshot above, the coordinate system is rotated relatively to the main model’s coordinate system. This is due to the accumulated Translations and Rotations of all the parent NiNoded indicated in the nif architecture.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>In the screenshot above, the coordinate system is rotated relatively to the main model’s coordinate system. This is due to the accumulated Translations and Rotations of all the parent NiNoded indicated in the nif architecture.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>The axis of rotation for the constraint can be set in '''<del class="diffchange diffchange-inline">Axis </del>A'''. The X Y Z W coordinates are a common way of defining vectors in Nif format: X, Y and Z should form a unit vector (i.e. length of 1) and "W" is the "weight", i.e. the length of the defined vector. For the purpose of a simple axis, the weight does not really matter, so it can be set to 1.</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>The axis of rotation for the constraint can be set in '''<ins class="diffchange diffchange-inline">Axle </ins>A'''. The X Y Z W coordinates are a common way of defining vectors in Nif format: X, Y and Z should form a unit vector (i.e. length of 1) and "W" is the "weight", i.e. the length of the defined vector. For the purpose of a simple axis, the weight does not really matter, so it can be set to 1.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>Then with the same considerations as above, fill in the '''Perp <del class="diffchange diffchange-inline">Axis </del>in A1''', '''Perp <del class="diffchange diffchange-inline">Axis </del>in A2''', and '''Pivot A''' properties.</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>Then with the same considerations as above, fill in the '''Perp <ins class="diffchange diffchange-inline">Axle </ins>in A1''', '''Perp <ins class="diffchange diffchange-inline">Axle </ins>in A2''', and '''Pivot A''' properties.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>* '''Perp <del class="diffchange diffchange-inline">Axis </del>in A1''' should be orthogonal to Axis A, and will define the angle 0.</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>* '''Perp <ins class="diffchange diffchange-inline">Axle </ins>in A1''' should be orthogonal to Axis A, and will define the angle 0.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>* '''Perp <del class="diffchange diffchange-inline">Axis </del>in A2''' is simply the dot product of <del class="diffchange diffchange-inline">Axis </del>A and Perp <del class="diffchange diffchange-inline">Axis </del>in A1. This is likely put into the model, rather than calculated, so that the engine does not have to compute it each time.</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>* '''Perp <ins class="diffchange diffchange-inline">Axle </ins>in A2''' is simply the dot product of <ins class="diffchange diffchange-inline">Axle </ins>A and Perp <ins class="diffchange diffchange-inline">Axle </ins>in A1. This is likely put into the model, rather than calculated, so that the engine does not have to compute it each time.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* '''Pivot A''' is the coordinates of the pivot point. Here, W needs to be ignored, and only X, Y and Z need to be set.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* '''Pivot A''' is the coordinates of the pivot point. Here, W needs to be ignored, and only X, Y and Z need to be set.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>Then, the same will need to be done for '''<del class="diffchange diffchange-inline">Axis </del>B''' properties in semi-automated ways. These are the same as their <del class="diffchange diffchange-inline">Axis </del>A counterparts except '''expressed in the coordinate system of the second entity'''.</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>Then, the same will need to be done for '''<ins class="diffchange diffchange-inline">Axle </ins>B''' properties in semi-automated ways. These are the same as their <ins class="diffchange diffchange-inline">Axle </ins>A counterparts except '''expressed in the coordinate system of the second entity'''<ins class="diffchange diffchange-inline">. On your hinge constraint, right click, then Havok, then A -> B will translate the values of Axle A, Pivot A etc in B's coordinate system (that is, the coordinate system of the other collision box on which the hinge apply).</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">This works fine for Axle B and Perp Axle in B1 and B2. However, the A -> B spell gives incorrect result for Pivot B: the result given is 10 times too big. To correct it, divide the Pivot B values by 10</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Finally, set '''Min Angle''' and '''Max Angle''' to limit the range of the constraint (in radians, not degrees), and the '''Max Friction''', which will define how strong the constraint will slow/resist the movement.  </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Finally, set '''Min Angle''' and '''Max Angle''' to limit the range of the constraint (in radians, not degrees), and the '''Max Friction''', which will define how strong the constraint will slow/resist the movement.  </div></td></tr>
</table>Pempelunehttps://wiki.beyondskyrim.org/w/index.php?title=Arcane_University:Nifskope_Hinge_Constraints&diff=3160&oldid=prevHannes821 at 13:08, 9 September 20202020-09-09T13:08:31Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='en'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 13:08, 9 September 2020</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l56" >Line 56:</td>
<td colspan="2" class="diff-lineno">Line 56:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If your bhkRigidBodies and the rest of your Nif architecture is properly setup, your constraint should now work in-game.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If your bhkRigidBodies and the rest of your Nif architecture is properly setup, your constraint should now work in-game.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; 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;"><div>[[Category:Arcane University-Animation| ]]</div></td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">As further reference, check https://wiki.beyondskyrim.org/wiki/Arcane_University:Nif_Implementation.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">==specific topics tutorials==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">===volume physics===</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* Nif data formate and its structure: https://wiki.beyondskyrim.org/wiki/Arcane_University:NIF_Data_Format</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* making a simple mesh rotation animation with Nifskope https://www.youtube.com/watch?v=YmGVknCC_a8</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* adjusting size, scale and position of nitrishapes in nifskope: https://www.youtube.com/watch?v=C9rlBDrfSP8</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* Animate Static Objects: https://www.youtube.com/watch?v=1lkrX3HYSDc</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* Animate Static Objects via NiTransformController: https://www.youtube.com/watch?v=pYcAA09yygI</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* copy animations to custom nif: https://www.youtube.com/watch?v=SodgAvvEjwQ</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* Shader implementation (Fire on a hut): https://www.youtube.com/watch?v=nGO0gwFwnLs</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">===surface rendering===</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* DDS texture formate https://wiki.beyondskyrim.org/wiki/Arcane_University:DDS_Data_Format</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* editing the UV map https://www.youtube.com/watch?v=1u51yDEGzmQ</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* making a simple rotation animation with a texture via UV map in Nifskope https://www.youtube.com/watch?v=CBlaY5keZRg</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins class="diffchange diffchange-inline">* placing textures on a nitrishape via nifskope including UV map adjustments: https://www.youtube.com/watch?v=kbnE5MZhdOE</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div>[[Category:Arcane University-Animation<ins class="diffchange diffchange-inline">| ]][[Category:Arcane University-Implementation</ins>| ]]</div></td></tr>
</table>Hannes821https://wiki.beyondskyrim.org/w/index.php?title=Arcane_University:Nifskope_Hinge_Constraints&diff=2455&oldid=prevHannes821 at 23:15, 16 April 20202020-04-16T23:15:32Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='en'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 23:15, 16 April 2020</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l55" >Line 55:</td>
<td colspan="2" class="diff-lineno">Line 55:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If your bhkRigidBodies and the rest of your Nif architecture is properly setup, your constraint should now work in-game.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If your bhkRigidBodies and the rest of your Nif architecture is properly setup, your constraint should now work in-game.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; 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;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category:Arcane University-Animation| ]]</ins></div></td></tr>
</table>Hannes821https://wiki.beyondskyrim.org/w/index.php?title=Arcane_University:Nifskope_Hinge_Constraints&diff=2452&oldid=prevCandoran2: Created page, ported from kesta's Google Drive tutorial.2020-04-16T20:56:38Z<p>Created page, ported from kesta's Google Drive tutorial.</p>
<p><b>New page</b></p><div>{{Trail|3D Art}}<br />
<br />
Hinge constraints can be setup in Nifskope. Their purpose is to “tie” 2 rigid bodies together, allowing a single axis of rotation between them, limited by a minimum and a maximum angle.<br />
Some typical use cases for hinge constraints seen in Vanilla are inn signs and books’ world model.<br />
<br />
== Nif preparation ==<br />
Before setting up your hinge constraint, you want to make sure your nif architecture has at least two rigid bodies, each under its own node (Node 2 can be a child of Node 1 though).<br />
<br />
The mesh, if there is one, can either be directly placed under the same NiNode as its collision (simple meshes), or exist somewhere else in the nif and be rigged through a Skin Instance to the collision’s node (the node then effectively becoming a bone).<br />
<br />
Make sure both rigid bodies are of type bhkRigidBodyT (the T is important), at least the ones that are supposed to be able to move. If they do not have the T, then right click on it, and select Block->Convert->Havok->bhkRigidBodyT. Also ensure that the parent bhkCollisionObject(s) have the flags ACTIVE and SYNC_ON_UPDATE. As a general consideration, to prevent any kind of performance issues, it is recommended that constraints or animation in nifs are applied to fairly simple collision, such as box, sphere, capsule or convex vertices.<br />
<br />
== Adding the hinge constraints ==<br />
You only need to set the hinge constraint for 1 of the 2 bodies: The one “that moves relative to the other”.<br />
<br />
Alongside the usual bdkRigidBody properties, you need to add a constraints:<br />
<br />
Locate the Num Constraints properties, and set them to 1. Then click on the refresh button on the Constraints properties to make the list update with the relevant number of entries:<br />
<br />
[[File:Num_Constraints_Refresh.png|Num Constraints property and the Contraints refresh button]]<br />
<br />
Then, after expanding the Constraints properties, click on the green + and select bhkLimitedHingeConstraint.<br />
<br />
== Configuring the limited hinge constraint ==<br />
<br />
Select the bhkLimitedHingeConstraint created previously and set its properties.<br />
<br />
Set Num Entities to 2 and refresh the Entities property, as before with the Constraints property. Set the first entry to the block number of the bhkRigidBodyT this constraint is on. Set the second entry to the block number of the bhkRigidBodyT this constraint needs to be set against.<br />
<br />
Priority can be left at 1, or set to 1 if it isn't, if you are working on a simple mesh. The exact meaning of this setting is still unknown, although its general purpose is identified as setting priorities between multiple constraints.<br />
<br />
=== Setting hinge coordinates ===<br />
<br />
'''Very important!'''<br />
These coordinates are to be set in the coordinate system of the rigid body, not the world! This is not necessarily the coordinates system displayed in the main Nifskope frame, but the one that appear when you select the node:<br />
<br />
[[File:Rigid_Body_Coordinate_System.png|Illustration showing the rigid body coordinate system]]<br />
<br />
In the screenshot above, the coordinate system is rotated relatively to the main model’s coordinate system. This is due to the accumulated Translations and Rotations of all the parent NiNoded indicated in the nif architecture.<br />
<br />
The axis of rotation for the constraint can be set in '''Axis A'''. The X Y Z W coordinates are a common way of defining vectors in Nif format: X, Y and Z should form a unit vector (i.e. length of 1) and "W" is the "weight", i.e. the length of the defined vector. For the purpose of a simple axis, the weight does not really matter, so it can be set to 1.<br />
<br />
Then with the same considerations as above, fill in the '''Perp Axis in A1''', '''Perp Axis in A2''', and '''Pivot A''' properties.<br />
* '''Perp Axis in A1''' should be orthogonal to Axis A, and will define the angle 0.<br />
* '''Perp Axis in A2''' is simply the dot product of Axis A and Perp Axis in A1. This is likely put into the model, rather than calculated, so that the engine does not have to compute it each time.<br />
* '''Pivot A''' is the coordinates of the pivot point. Here, W needs to be ignored, and only X, Y and Z need to be set.<br />
<br />
Then, the same will need to be done for '''Axis B''' properties in semi-automated ways. These are the same as their Axis A counterparts except '''expressed in the coordinate system of the second entity'''.<br />
<br />
Finally, set '''Min Angle''' and '''Max Angle''' to limit the range of the constraint (in radians, not degrees), and the '''Max Friction''', which will define how strong the constraint will slow/resist the movement. <br />
<br />
It is recommended to fine tune these 3 values once the model is final and implemented, to make sure the constraint feels natural once subject to the various things that can happens to it in the engine.<br />
<br />
For a simple idle constraint, leave the Motor Type to MOTOR_NONE.<br />
<br />
If your bhkRigidBodies and the rest of your Nif architecture is properly setup, your constraint should now work in-game.</div>Candoran2