Skyrim Special Edition
0 of 0

File information

Last updated

Original upload

Created by

Khrysinxs

Uploaded by

KhrysINXS

Virus scan

Safe to use

About this mod

HOW TO MAKE: Full, AI aware models to dynamically cut through Navmesh. Avoid direct Navmesh editing or adding NAVCUT Layer Collision Markers per object

Permissions and credits
Changelogs
Donations


INTRODUCTION
  • Imagine if Skyrim had been developed where Navmesh geometry was significantly simplified as objects contained therein cut the Navmesh on there very own
  • A Worldspace where models are natively acknowledged by Actor AI promoting far less Navmesh modification needs accommodating said 3D models. Authors come along replacing or removing original objects adding there own in new areas... If the removed object had a built-in Navcut feature, there would be no unused Navmesh voids left over to fill aka "leaving your footprint on that NavFormID". The Author just plops their new objects where they wish without Navmesh editing or repair 
  • Sounds too clean to be believable; however, this guide offers a contributory light that shines a way towards the end of that ideological tunnel
  • This feature is nothing new. It's been around forever but I fail to have ever seen it put to good use, or should I say, put to use at all, in Skyrim anyway
  • Despite its "not put to use" piece; it's likely the result of it being a feature, for the most part, that is forgotten, overlooked, unknown, or lacks application know-how
  • It's never too late to bring old ways forth front for consideration in early project development and observation under the globes microscope lens

NO NAVMESH EDITS. NO ADDITIONAL COLLISION MARKER "NAVCUT" REFERENCES. JUST OBJECTS PLOPPED INTO THE CREATION KIT

   


IMPLEMENTATION PREREQUISITES
  • Intermediate knowledge of 3D design program
    • UNLESS: You only plan to copy pre-existing collisions in models and make them work as Navcuts, then a 3d software is not applicable
  • Intermediate to advanced knowledge of collision
  • Basic knowledge of NifSkope
  • Basic knowledge of Creation Kit or xEdit

CONCEPT OF NAVCUTS
  • PRIMITIVES:
    • In the CK, they are created from a CollisionMarker [STAT:00000021] Baseform whose reference uses layer type L_NAVCUT (aka: Layer 49)
    • Here is a very short and sweet VIDEO explaining how to apply NAVCUT Collison Markers in CK to avoid direct Navmesh FormID fingerprinting
  • NIF DATA:
    • The idea behind this guide is to use the same feature but built within the model nullifying the need for 3rd-party markers and direct Navmesh handling
    • Had the video above implemented the NIF Data approach, the farmhouse itself would be its own NAVCUT taking care of your Navmesh concerns alone





GUIDE LEGEND
  • Bold character fonts tagged as white will be assigned to block type names, controlsfunctionssetting modifiers, and important values
  • Character fonts that are bold and color-tagged yellow will mean notes or important checks
  • Character fonts that are bold and color-tagged green will be for hints or tips
  • Character fonts that are color-tagged light blue represent user actions, selecting and clickity gestures
  • CHAPTER [03]
    • The PROGRESS % stages (text on Desc. page) coincide exactly to a Progress Bar displayed in the actual Chapter 03 video
    • This is so you can watch the video and if you question something, refer to the provided Progress stage text where I explain that stage
TIPS FOR ALONG THE WAY
  • If you have two monitors, view the video (Chapter 03) in full screen (1440p) and read along this page using other
  • If your advanced in this stuff, you might be able to just follow the video alone and look on into the written parts here or there for the odd shard of information. To each their own. Do what you do suited for your level
  • Always open the Spoilers and if the image is too small, find a function in your browser to blow it up


IF YOU PLAN TO:
  • CREATE YOUR OWN NEW GEOMETRY AND COLLISON:
    • Read all the way through this chapter
    • In this area of the guide, I will not be detailing all the ways and steps one can go about creating their Navcut shape geometry.
    • I will however provide links to tools required and some videos found that may help one figure this stuff out on their own
    • However you go about creating your ideal Navcut shape collisions, we will meet up in Chapter [03] of this guide in Nifskope
  • DUPLICATE PRE-EXISTING COLLISION IN NIFSKOPE AND NAVCUT HACK IT:
    • It would be wise to read this chapter in the sections with spoilers to avoid some discovered bad practices for more complex navcut models 
    • Read the last section of this chapter "ALTERNATIVE TACTICS TO AVOID CREATING ANY NEW GEOMETRY COMPLETLY" and head on over to Chapter 03
TOOLS TO CREATE SHAPE GEOMETRY AND MAKE IT TO COLLISON
  • Blender 3D design suite to create geometry
  • 3DS Max 2018 or earlier with Nif Plugin or other import/export means (create geometry and collision)
  • Nifskope Dev 7, 8, 9, 10 (there are many forks and all work for this. Pick your poison based on overall preference)
  • NifUtilsSuite  (used for creating collision from created shape geometry)
SOME VIDEO GUIDES
I have not watched these videos in great detail but I know they all offer insight towards creating your desired shapes and Collisionizing them
THINGS TO CONSIDER BEFORE MAKING YOUR GEOMETRY
  • Per the Video below in Chapter 03, you want Navcut geometry much longer than the bottom of the tree trunk and tall from its truck bottom
  • The reason this is important is the Navcut needs to slice/scissor through the Navmesh and depending on how the Navmesh was made, it could be floating a foot above ground to several feet underground. 
  • This needs to be taken into account as you want your generic shapes to work as universally as possible for all presented scenarios
  • While creating the shape for your model; picture how it will be implemented in-game, where its visual shape(s) sit relative to the pathed area, and know that whatever shape you make will carry out its job of cutting the Navmesh wherever it's going to be placed
  • PERSONAL APPROACH I AIM FOR NAVCUTS DEPENDING ON THE NATURE OF MODEL:
    • I always prefer to make Navcuts hexagonal (six-sided) rather then rectangular (like Collison box primitives)
    • A circular shape (minimal triangles though), NPCs will path around said object more seamlessly. Cubes and rectangle shapes have hard corners
    • Obviously, you cannot do this for everything, i.e "carts" but for models in-game that visually appear rounded, that's what I would personally aim for
    • The Farmhouse02.nif pillars (in Spoiler below) have hexagonal cylinder shaped Navcuts. Far better for NPCs to roll around then hard-edged rectangular shapes 
COLLISION OBJECT SHAPE CONTAINMENT APPROACH LIMITATIONS WITH NAVCUTS
  • Each shape that is geometrically separate from another shape needs to be contained in its own bhkCollisonObject
  • This means shapes that are standalone: cylinder(s), cube(s), rectangle(s), sphere(s), custom(s), etc....
  • If they are not geometrically a part of one another or occupy other areas of the overall creation scene space, even if close to one another, is APART
  • I have toyed with this enough to know that this just is and containment approach matters
  • As an example below is the most complex model in the download package which has the most shapes and CollisionObjects (Spoiler):
Spoiler:  
Show

  • I don't know the reasons why the engine interprets Navcut Havok data this way in NIFs if it's all contained in one body or one container houses several shapes
  • Symptoms/behavior of this farmhouse not working properly due to my first two Navcut CollisionObject containment approaches (Spoiler):
Spoiler:  
Show
The yellow dotted lines represent in-Game Navcut behavior of two CollisionObject approaches I took which, obviously, did not workout

  • Choice attempt (A)
    • All shapes from 001-010 were geometry of one bhkCollisionObject > bhkCompressedMeshShape body
    • In-games Behavior was as though the model cut the Navmesh to its utmost outer bounds
  • Choice attempt (B)
    • Shape 001 and 002 were in one bhkCollisionObject > bhkCompressedMeshShape body
    • Shapes 003 up to 010 each had their own bhkCollisionObject > bhkConvexVerticesShape bodies
    • In-games Behavior was the same as Choice Attempt (A)

ALTERNATIVE TACTICS TO AVOID CREATING ANY NEW GEOMETRY COMPLETLY
  • ONE TACTIC:
    • A barrel for instance already comes prepared with its own pre-made CollisonObject for contact purposes
    • The user can copy/duplicate that Collision and modify the duplicate to the instructions in Chapter 03 below
    • Put the dup in its own NiNode > modify it as Navcut > Scale it up a tad bigger and drop the Collison halfway down the Barrel so its bottom cuts the Navmesh
  • ANOTHER WAY:
    • You may have a tree model whose current collision might not be ideal for the geometry as Navcut it should use
    • In this case, another 3rd-party model that has a simplified collision might suite what you need as a Navcut for the tree model, i.e, a "pillar" for example
    • Copy that pillar's Collison into your tree model > Modify it to Navcut settings (Chapter 03) > Put it in NiNode > Scale/re-position it as needed
  • There are many crafty ways to avoid making brand spanking new collision geometry by just being hacky



LITTLE ADVICES BEFORE DIVING IN
Definition Prompts upon cursor hovering
Spoiler:  
Show

  • Hovering your cursor over feature Names (in the Block List or Block Details field), offer definition(s) of what said feature does
    • This works on Block and Modifier names whether they are selected or not. 
    • However, once one is actively selected, the definition prompt may not appear. Fix that by repositioning the cursor if even by the slightest bit




PROGRESS 4%
  • We want our Collision to be a child to a Parent NiNode. Give it a suitable and generic name i.e "NiNode: bhkCollObjLayer49"
  • To rename, while NiNode is selected in Block List, below in Block Details; select Name > Right-click > Edit String Index
PROGRESS 6-10%
  • In the video, I am hinting that you want to make sure, while the bhkCollisionObject is selected in Block List, that:
    • Below in the Block Details tab is the Target of the bhkCollisionObject. Ensure it's referencing the NiNode it is contained within
    • If that is not set right for you, double click the Value of the Target, type the number your NiNode is block indexed. My NiNode is 2
PROGRESS 12%
  • In a bhkRigidBody block, change the "Layer" data so that the collision layer used is 49
PROGRESS 12-20%
  • In a bhkRigidBody block > expand Rigid Body Info > set "Havok Filter Copy (aka "Layer")" data so that the collision layer used is 49
  • Note on PROGRESS % 12-20
    • As of this writing, NifSkope doesn't understand that the value "49" means "NAVCUT," but it will let you enter and save the value.)
    • Note: that NAVCUT collision still is collision: if you want the object to remain immovable and behave stably, you will also need to set the collision's Mass to zero
    • Within the Rigid Body Info, 10 Modifier Setting functions below the Layer, is "Mass". You will want that to zero in most use-case instances
PROGRESS 20-24%
  • "Time Factor" and "Gravity Factor" you will want set to value 1
    • Note: This is always set to 1 by default unless you created your Collision geometry in 3DS Max and exported with the Nif Plugin, it will need to be set from 0 to 1
PROGRESS 29-30%
  • Ensure your Modifier settings listed below are set as so for a collision that will not be moving
    • Motion System: MO_SYS_BOX_STABILIZED
    • Solver Deactivation: SOLVER_DEACTIVATION_OFF
    • Quality Type: MO_QUAL_INVALID
PROGRESS 32-40%
  • Now for this Demonstration, I made my Collision Type: Simple Shape with Simple Shape Type: Convex Shape aka bhkConvexVerticesShape
  • There are many kinds of collisions where these blocks (in this Progress % of video), the Block structures are constructed differently
  • Depending on your Collision construct, it may look different.
  • I will continue explaining what I do here for my bhkConvexVerticesShape and below offer some other construct examples in spoilers
PROGRESS 33-35%
  • I usually set most of my Radius to .005 and for this NAVCUT, I am staging the Material to SKY_HAV_MAT_NONE
OTHER COMMON COLLISION AND SHAPE TYPES (not all but some) - what you would do here at the Progress % 32-40
Spoiler:  
Show
Collision Type: Compressed Mesh with Shape Type: bhkCompressedMeshShape
Spoiler:  
Show

Collision Type: Simple Shape with Simple Shape Type: Capsule aka bhkCapsuleShape
Spoiler:  
Show

Note: bhkCapsuleShape "Radius" you will want to leave set to its value. That value dictates the size of this kind of shape
Put it to how you want it but I assure you, you will not want it set to my generic 0.005

Collision Type: Simple Shape with Simple Shape Type: Box aka bhkBoxShape
Spoiler:  
Show

Collision Type: Simple Shape with Simple Shape Type: List aka bhkListShape
Spoiler:  
Show

PROGRESS 40-49%
  • We are finished staging our desired Navcut shaped Collison
  • Do a full review of all your edits thus far to make sure you have done it right nullifying the need to look in your rearview mirror later 
  • Save your work. Congrates
  • Right-click on your Parent Collision NiNode > hover over Block in the dropdown prompt > select Copy Branch in the Block sub-feature dropdown prompt



PROGRESS 50-52%
  • Select your models Root Scene Block (in my case, BSTreeNode)
  • Right-click the Root Scene Block > hover over Block in the dropdown prompt > select Paste Branch in the Block sub-feature dropdown prompt
  • Now your new Navcut Collision and Parent NiNode should be a child of the Root Scene Block in your other opened instance of Nifskope Product Model
PROGRESS 54-57%
  • Select your product models Root Scene Block again
  • In the Block Details field, select your new NiNode entry in the Children list > I usually move it up right at the top of all the child entries (video shows the key controls)
PROGRESS 58-57%
  • Major step of importance
  • Select Spells (top toolbar tab dropdown) > Sanitize (top toolbar tab dropdown function) > Reorder Blocks (sub-feature dropdown of Sanitize function)
  • This will re-index all blocks that reside within the model to how and where they should be listed based on their ordering
    • This is critical for Collision as the block numbers within its construct hierarchy need to be in descending order or CTDs are guaranteed
    • Example in this video model, 5 bhkCollisionObject > 4 bhkRigidBody > 3 bhkConvexVerticesShape. Descending order beginning from its Parent NiNode
    • I verify the Collison Block ordering is correct at PROGRESS % 66-70 in the video
PROGRESS 61-70%
  • I am just carrying out some extra cleans I do natively without thinking about it. Usually good practice in many use-cases
  • Select Spells (top toolbar tab dropdown) > Optimize (top toolbar tab dropdown function) > Remove Unused Strings (sub-feature dropdown of Optimize function)
  • As stated before, confirm the Collision Block ordering is correct PROG & 66-70. General checks and so forth
PROGRESS 72-80%
  • Major step of importance
  • In the Block List, select BSXFlags > in the Block Details field, right-click Integer Data > select Flags in its function option dropdown prompt 
  • Now a new standalone BSXFlag prompt will appear with all the Flags that BSXFlags contains
    • Arcane University has a great page on NIF Data HERE. We are interested about BSXFlag definitions (also in that link) but here is a shortcut Spoiler IMAGE
Spoiler:  
Show

  • Per the model in the video, I require Bit 1: Havok (2) and Bit 3: Complex (8) checked as active
    • Havok needs to be Active or Collision will not work all
    • Complex should be Active as the model now contains more then one bhkCollisionObject. It has the new Navcut and its original for contact purposes
  • Every model (depending) may need additional flags checked and if it had no Collison prior to the Navcut, Complex wont be applicable
PROGRESS 81-100%
  • Final checks on your overall product model
  • I am content with my geometry envisioning the Grid in the Nifskope instance represents the Terrain in-game
  • IN THE EVENT you are not satisfied with how your Navcut collision is positioned in the product model scene
  • This is one of the benefits of having it as a child to a parent NiNode (Spoiler):
Spoiler:  
Show
  • Toy with your Navcuts NiNode Translation, Rotation or Scale settings until you have your collision exactly how you want it

  • Do a last final review and YOU MADE IT through the longest portion of this guide. Congratulations



ALMOST DONE
  • This chapter is very small with only one really important flag that needs to be assigned to your Baseform Types
  • Assuming you got your new model setup. Whether its BaseType: ACTI, CONT, MSTT, or STAT, you will want to give it the "Obstacle" Flag
    • Definition: Does this BaseType dynamically cut Navmesh? Yes/No, so YES
Spoiler:  
Show

  • BaseTypes: DOOR, FURN and TREE do not possess this "Obstacle" Flag
  • You need to enable Flag "Unknown 25" instead for these BaseTypes or expect non-working results
  • As of the moment, this Flag being set will result in the plugin having an ERROR
    • It marks this flag as an error because it is not decoded properly yet. Just IGNORE this error until xEdit updates flag "Unknown 25" definitions
Spoiler:  
Show




NO NAVMESH EDITS. NO ADDITIONAL COLLISION MARKER "NAVCUT" REFERENCES. JUST OBJECTS PLOPPED INTO THE CREATION KIT

   




TROUBLESHOOTING AND WORKING OUT THE KINKS
  • I can guarantee there will be kinks to iron out on rare occasion for complex Navcut models to work correctly
    • As I stated above, I had to problem-solve why my Farmhouse02 was giving me issues but, figured it out quick
  • Simple Navcuts should be easy peasy to make and work so long as you do things correctly
  • Always test your product in a properly Navmeshed area. This is important
  • I will try to help where I can but a lot of this is figuring out the resolve to a matter on ones own. If you keep punching, you will figure it out
RESERVE FOR SOMETHING
  • Waiting



PACKAGE CONTENTS
  • PLUGIN (esp-fe):
    • Has all NEW created Baseforms setup for ACTI, CONT, DOOR, FURN, MSTT, STAT, and TREE types targeting the new Navcut reference models
    • The references for these are spread out into THREE total areas. Details below
  • MESHES (loose):
    • Meshes\D3DMN\ACTI\NorLever01_L49.nif
    • Meshes\D3DMN\CONT\Barrel01_L49.nif
    • Meshes\D3DMN\DOOR\RiftenDoor02_L49.nif
    • Meshes\D3DMN\FURN\CommonBench01_L49.nif
    • Meshes\D3DMN\MSTT\WRIntCastleFreePillar01_L49.nif
    • Meshes\D3DMN\STAT\Farmhouse02_L49.nif
    • Meshes\D3DMN\TREE\TreeAspen02_L49.nif
LOCATIONS TO COC
  • For all the CONT, FURN and MSTT's - COC WhiterunOrigin
  • For all the ACTI, DOOR and TREE's - COC SolitudeOrigin
  • For all the STAT's - COC BattleBornFarmExterior, COC ChillfurrowFarmExterior or COC Whiterun (all close enough)
USAGE
  • ONLY intended for testing and NOT TO PLAY WITH
  • Advised to test ONLY with USSEP (if you are unsure if your Navmesh is good or not)
    • If you know your Navmesh well, then by all means, load up with a full mod-load

  If You Enjoy And This Guide Helped You Out; Punch It!! 



THIS AREA WILL FILL OUT OVER TIME
  • I am using your file download and my follower seems to change directions running another route in an attempt to catch up to my Player. What gives? 
    • That is coincidental. This is due to bad Navmesh cell border finalization. Either fix the mod, ditch it, or live with it
    • I suggested using this file against USSEP anyway to avoid scenarios like this. On a positive note, now you know Navmesh needs attention
  • Question
    • Answer
  • Question
    • Answer
  • Question
    • Answer
  • Question
    • Answer
  • Question
    • Answer



NEED TO FILL - LINKS TO REALLY GOOD COLLISION AND NIF INFORMATION
  • Reserve



TOOLS - MODDINGTOOLS - QOLMOD AND TOOL AUTHORS
Behind the Scene Heavyweights:
  • Whomest over the long years, I would not know what I do
LAST BUT NOT LEAST
  • Special shoutout to all my Discord Peeps, coomers, and friends

MY OTHER STUFF
KHRYSINXS USER FILES