Jump to content

dldrzz000

Premium Member
  • Posts

    20
  • Joined

  • Last visited

Posts posted by dldrzz000

  1. When adding custom animation for this weapon, only 3rd person custom animations in "Actors\PowerArmor\Animations\Weapons\BoSPistol" for PowerArmor race get ignored and the protagonist plays 10mm pistol animations instead, while other 3 views work smoothly. Additionally, other heavy weapons in the same plugin have no issues, whose animations are dealt with the exactly same procedure

    I've set animation keywords in that weapon edit and imput animation paths, matching both fallout4's and fallout 76's data. Speed and stance are also updated. 

    Furthermore, I've tried to add AnimsGripPistol to Target keywords section. Then the protagonist fails to take out the pistol and can only walk&run in 3rd view in PowerArmor.

    Am I still missing somthing, or do pistol animations need special treatment? 

    20240428145341.png

    20240428153305.png

  2. 3 hours ago, South8028 said:

    It's better to completely redo the animation. Weapon animations are probably not difficult. I find that any animation that doesn't involve physical movement of the actor is easier to redo than trying to edit vanilla. From a kinematics point of view, the most complex animation is character movement (gait, running, dancing, etc.). The rest of the animations are easier to do again.

    Solved. Tolerance, especially the position one, in Spline Compression must be set as low as possible(I set to 0.000000). I also checked other acceptable annimations exported formerly and found that they've all been distorted a liitle, too. I guess I should re-export all the animations.

    • Like 1
  3. 1 hour ago, South8028 said:

    Is the second graph an imported animation? Why did he become like this? I have not checked the graphs of the imported animation; when exporting, I use a regular sinusoid graph. The accuracy in the game is always absolute, given that I successfully synchronize the havok and gamebryo objects. It is worth understanding that with spline graphics there is always a default loss of precision, not only for havok animation, but for any animation. After the spline, the animation always has to be adjusted manually. Spline is basically stupid by default.

    Thank you for your reply.

    The second graph is the later exported animation. Both animations' data are Minigun's wpnidleready.hkx and converted into fbx by exactly the same method. Most other animations are almost losslessly exported. Only several became such blocks, and in game the protagonist shivers like someone infected by malaria.

  4. Met a strange issue when exporting a 175-frames animation(wpnidleready.hkx). 

    As the pics show, former curves are smoother, but after exporting they get distorted. Could anyone tell how to solve this? 

    Specs: 3ds max 2013 64x, Havok Content Tools 2014 1r1

    With F4AK's F4Animation.hko. I've tried to adjust precision options in "Spline Compression" tab, but it does not work.

    20240407162512.thumb.png.23d9e7b98547a5076e12f70398a4e906.png20240407163359.thumb.png.d0d7862976e250ca81e1590863fb2a83.png

  5. 3 hours ago, South8028 said:

    Bones as nif nodes are not used for the skin modifier. Bones are pointers for the havok engine to attach points to meshes, effects, sounds, etc. For example, I link a bone to the parent mesh, calling it AddOnNode 777. When exporting, the bone is converted to bsValueNode with index 777. Those are linked to nif addOn from ck with index 777. For example, a light spot from a flashlight. The direction of the bone indicates where the light from the flashlight is directed. All bones with the name of specialized nodes bgs are converted to these specialized nodes when exported. This function does not require any additional bgs tools. Accordingly, the physical coordinates of the bone work in world space, indicating the exact location of the mesh, or effect.

    https://disk.yandex.ru/d/ewBoaz4UzfwDDQ

    Nice! I'll try it again!

  6. 12 hours ago, South8028 said:

    I didn't export weapons. But maybe it's a bone called WeaponExtra1. Accordingly, create a child bone (if you need to specify the direction precisely), or a helper (if you don't need the direction)... Call this bone WeaponExtra1. Right-click on the bone\Object Properties\User Defined, enter... sgoKeep = 1. We link the FatManLatch mesh to these bone. All specialized bgs nodes, such as bsValueNode or SoundNode, etc., are bones. I create these nodes in 3ds using the described method and export them to nif. Accordingly, you export your nif as pe weapon. You can import any nif into 3ds using niftools. niftools is in the f4ak package on the nexus.

    Thank you again for your answer. Your suggestion is indeed useful when dealing with skinned meshes. I always use this node/bone method too, but the weapon shapes still turn out to be with world transforms. However, if I export these shapes separately centred in world space and later combine them in Nifskope manually, I can get the ideal result. I highly doubt whether the official plugin is also castrated in this function.🥲

  7. 20240326023235.thumb.png.a0d033b6030511857259310d702b7b73.png

     

    As you can see in the pic, the mesh shape FatManLatch:0 is attached to the node WeaponExtra1 which has transforms of (-3.679178, 16.440010, 8.087007), but the coordinate transforms of the mesh shape itself and its vertices are very minimal. This method is very helpful to keep mesh fidelity, especially in Fallout 4's half-precision meshes. 

    Could anyone tell me how to export such hierarchy or structure? Thanks in advance. 

     

  8. On 1/23/2024 at 4:39 PM, Pickysaurus said:

    If you're worried about time errors, you might want to break out of the timer, execute the function and then re-establish it. 

     

    On 1/23/2024 at 7:13 PM, LarannKiar said:

    The code snippet you posted would restart the GameTime timer once BatchFunction() is executed.

    If precision is a priority you'll probably want to get the current game time with a function like this, then restart your timer accordingly.

    Float Function GetCurrentTime()
    	Float CurrentTime = Utility.GetCurrentGameTime()
    	CurrentTime = CurrentTime - Math.Floor(CurrentTime)
    	CurrentTime = CurrentTime*24
    	Return CurrentTime
    EndFunction

    Defining the function BatchFunction() in another script then sending a CustomEvent from the GameTime timer is also an option, if you'd like to untie the execution of BatchFunction() and the GameTimer ("untie": at least as much as the Virtual Machine allows it as for example heavy script load can slow down the entire system which of course affects the execution of other scripts).

    Thank you both! Issue solved.

  9. If i recall correctly, ousnius mentioned , maybe years ago, that the best format for diffuse is BC1, and FO4 engine naturally prefers it, albeit BC7 diffuse generally proves to be the good choice between quality and performance. 

    Note that FO4 engine only support BC1 diffuse for character faces, and the resolution is limited to exact 1k, if without Lookmenu setting. 

    Additionally, some of my modding peers complained that BC7 normal map is really taxing. 

    So I personally recommend sticking to what the game uses as RoNin1971 mentioned, even if the only choice left to keep fidelity is to increase texture resolution. 

  10. Greetings. I recently have some ideas for a survival mod, but I am just pondering on possible time errors caused by frame-bounded functions inside recycling time functions and events. 

    For example: 

    Event OnTimerGameTime()

            BatchFunction_001()

            StartTimerGameTime(x, 0)

    End Event

    BatchFunction_001 contains some frame-bounded functions like GetActorValue() and GetLocation(). Will this structure beget accumulated minor time errors?

  11. Large statics alone shouldn't cause bugs. Precombined/previs data is part of the Cell's data. Every object belongs to a Cell (this is the object's "parent cell"). An object's parent cell is the one where the object is "rooted". Where the object is rooted is determined by the object's center, which is one point.

    Thank you for reply. I suppose I can merge all those small floor blocks together.

  12. On its own, static collision doesn't have much of an effect. However, the interaction of a normal collision with a collision with physics has a very strong effect. If a collision of a ball with physics rolls along a surface collision, then each polygon that determines this interaction naturally eats fps.Therefore, the less interaction of geometry with physical objects and characters, the more high-polygonality you can afford. )

    Thank you for a concise reply.

  13. Introduction: We may meet transparency issue when porting LE eye meshes directly to SSE or custom eye mesh with Eye Envmap and Eye_Environment_Mapping checked to SSE nif since lack of eye data blocks in NiSkinPartition. This method is very inefficient but at least better than nothing. Hopefully Nifskope and other converters will update corresponding functions.

    And sorry for my poor English.

     

    1. Requirements: 1) Nifskope

    2) File editor supporting Hex format. (I personally use HxD)

    3) Text editor with multi-line editing function. (I personally use Notepad++)

    4) Eye meshes to deal with

     

    2. Open your eye nif in nifskope, navigate to NiSkinPartition, right click and select "File Offset" on both "Vertex Data" and "Partition", and we can get data address of vertex data. Please note down these two addresses. Then we will get needed data area in Hex editor. Change in NiSkinPartition "Data Size" to (28*vertex number) and "Vertex Size" to 28 (in my case, 8688=24*362 to 28*362=10136 and 24 to 28) and save your eye mesh. DO NOT PRESS REFRESHING VERTEX DATA BUTTON BEFORE SAVING.

    0xNC17R.png

     

    In my case, I got addresses of 0x49CB and 0x6BBB, and my vertex data area is 0x49CB to 0x6BBA. We may check the size of our needed area with 24*vertex number: my eye mesh vertice number is 362, and vertex data size is 6BBB-49CB = 21F0 = 8688 in decimal = 24*362 in decimal.

     

    3. Three "Vertex Desc" addresses are needed in BSDynamicTriShape, NiskinPartion and "Partition" of NiskinPartion. Please Notedown these three addresses seperately with those in Step.2.

    5vOl3MJ.png

    In my case, I got addresses of 0x258, 0x49C3 and 0x9AD9.

     

    4. Open eye mesh in Hex Editor, navigate to addresses of Step.3. We will find a 8-block data area of flags. Change the three areas to "47 00 21 30 60 A0 55 00" if they are not.

    c0uKlkW.png

    In my case, I've changed areas beginning 0x49C3 and 0x9AD9 to "47 00 21 30 60 A0 55 00".

     

    5. Navigate to address of Step.2 and copy targeted area to your text editor(in my case 0x49CB to 0x6BBA). Auto wrap your text per 24 blocks. Then add 4 block data of "00 00 00 00" to the end of left-eyeball vertex data, and "00 00 80 3F" to the end of right-eyeball vertex data, forming data structure of 28 blocks per line. Auto unwrap your modified text and replace selected data area in HxD. Save your modified nif.

    xoIGvB6.png

     

    Regular expression in Notepad++ is useful when auto wrapping and unwrapping lines.

    If you missed renumbering vertex order before exporting eye mesh like me, you have to manually check and match vertice to distinguish their sides by selecting and highlighting them in nifskope. Vertex order is the same and it just takes time.

    If your eyeball meshes is in seperated shapes (e.x. left eyeball and right eye ball), you have to do Step 1 to 5 for every shape.

     

     

    Feel free to post any better method, below or in new post.

    • Like 1
    • Thanks 1
×
×
  • Create New...