SUBSIM Radio Room Forums



SUBSIM: The Web's #1 resource for all submarine & naval simulations since 1997

Go Back   SUBSIM Radio Room Forums > Modern-Era Subsims > Dangerous Waters > DW Mod Workshop
Forget password? Reset here

Reply
 
Thread Tools Search this Thread Display Modes
Old 12-26-23, 11:53 AM   #46
faxnico
Swabbie
 
Join Date: Mar 2005
Posts: 9
Downloads: 20
Uploads: 0
Default

Thank you for sharing.

Just a couple of points...

The value at Model+0x58 is a dword, and if it equals 1, the model is drawn through DrawPrimitiveUPs. This occurs once or twice during the recursive traversal of the hierarchy.

As for Model+0x5C, it represents another dword, typically set to 0, and points to an item within an array of render data. Each structure in this array is 0x5c bytes in size and contains at least two user-provided vertex data buffers for the DrawPrimitiveUP calls mentioned earlier, filtered by the condition Model+0x58. The second buffer is utilized, and the draw call is executed, only if Model+0x294 is true as well. This draw call is wrapped by special render state enable/disable code...

Hope this helps.
Keep up the good work.
faxnico is offline   Reply With Quote
Old 12-26-23, 06:35 PM   #47
Polak2
Weps
 
Join Date: May 2005
Posts: 371
Downloads: 60
Uploads: 0


Default

Let me be the 1st to congratulate you on this milestone achievement.

Quote:
Not sure if Dangerous Waters also uses the same J3D format or not, I haven't tested it with DW.
Yes, it does. In fact, as my earlier picture shows the models in JFC are nearly identical with SC (Sub Command) and subsequently DW (Dangerous Waters).
It will be interesting (time permitting) to test the Obj models export to J3D for use in all of the above Sonalyst titles.
and
Polak2 is offline   Reply With Quote
Old 12-27-23, 03:02 PM   #48
Jeff-Groves
Village Idiot
 
Jeff-Groves's Avatar
 
Join Date: Sep 2014
Posts: 5,300
Downloads: 130
Uploads: 0


Default

Nice work HoneyFox!
I lost interest with the format way back. Still have the 010 scripts and such.
I'll check your work and see what I missed. Always good to learn from others.
__________________
I don't do Stupid. So don't ask.
Jeff-Groves is offline   Reply With Quote
Old 12-27-23, 11:10 PM   #49
HoneyFox
Swabbie
 
Join Date: Nov 2014
Posts: 9
Downloads: 0
Uploads: 0
Default

Quote:
Originally Posted by faxnico View Post
The value at Model+0x58 is a dword, and if it equals 1, the model is drawn through DrawPrimitiveUPs. This occurs once or twice during the recursive traversal of the hierarchy.

As for Model+0x5C, it represents another dword, typically set to 0, and points to an item within an array of render data. Each structure in this array is 0x5c bytes in size and contains at least two user-provided vertex data buffers for the DrawPrimitiveUP calls mentioned earlier, filtered by the condition Model+0x58. The second buffer is utilized, and the draw call is executed, only if Model+0x294 is true as well. This draw call is wrapped by special render state enable/disable code...
I'm curious about how you get these info. Maybe via debugging JFC or debugging DW?
For "Model+0x294", I don't quite get it. AFAIK, the "Model" size is 0x60(96) bytes. Model+0x294 seems to be way out of bound, unless it is some runtime-only structure different from J3D file structure, or it is some optional field of "Model" which only becomes available when the "Model+0x5c" is not 0.
HoneyFox is offline   Reply With Quote
Old 12-29-23, 05:01 AM   #50
faxnico
Swabbie
 
Join Date: Mar 2005
Posts: 9
Downloads: 20
Uploads: 0
Default

Debugging and offline/static analysis.
I had this sorted out a while ago to code a J3D loader replacement with something more modern (GLTF).
+0x294 was an offset to the runtime structure indeed (S3DModel).
The model/mesh/subset data size is 0x60 bytes.
The render state change that wrapped that 2nd drawprimup was, on the other hand:
SetRenderState(D3DRS_ZFUNC, D3DCMP_NEVER);
DPUP();
SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS);
SetRenderState(D3DRS_ZENABLE, TRUE);
Maybe for some decals rendering, I don't know.
faxnico is offline   Reply With Quote
Old 12-29-23, 11:55 AM   #51
Aktungbby
Gefallen Engel U-666
 
Aktungbby's Avatar
 
Join Date: Jul 2013
Location: On a tilted, overheated, overpopulated spinning mudball on Collision course with Andromeda Galaxy
Posts: 27,709
Downloads: 22
Uploads: 0


Default Welcome back!

faxnico!...after 14 years!??
__________________

"Only two things are infinite; The Universe and human squirrelyness; and I'm not too sure about the Universe"
Aktungbby is offline   Reply With Quote
Old 12-30-23, 02:16 AM   #52
HoneyFox
Swabbie
 
Join Date: Nov 2014
Posts: 9
Downloads: 0
Uploads: 0
Default

Quote:
Originally Posted by faxnico View Post
Debugging and offline/static analysis.
I had this sorted out a while ago to code a J3D loader replacement with something more modern (GLTF).
+0x294 was an offset to the runtime structure indeed (S3DModel).
The model/mesh/subset data size is 0x60 bytes.
The render state change that wrapped that 2nd drawprimup was, on the other hand:
SetRenderState(D3DRS_ZFUNC, D3DCMP_NEVER);
DPUP();
SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS);
SetRenderState(D3DRS_ZENABLE, TRUE);
Maybe for some decals rendering, I don't know.
This additional 2nd DPUP is rendered with ZFunc = Never? If ZTest is enabled previously, nothing will be drawn then. That's quite strange, even for decal/VFX/... transparent mesh rendering (They usually have ZENABLE = True, ZFunc = Less/LEqual and ZWRITEENABLE = False). Does it instead have any stencil-test related API call nearby?
HoneyFox is offline   Reply With Quote
Reply

Tags
j3d

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -5. The time now is 06:28 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © 1995- 2024 Subsim®
"Subsim" is a registered trademark, all rights reserved.