Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

DarkBASIC Professional Discussion / how do I create new texture stage UV data?

Author
Message
Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 15th Jan 2007 14:24
I'm testing a shader which uses separate UV coords for different texture stages (e.g. base texture, normal map, lightmap) - but can't work out how to create the new stage data for a simple DBP test object.

For example, suppose I create a simple DBP cube and texture the first three stages as follows:



That works fine - except all three stages use the same UV coords (the stage 0 coords). I want them to have different values.

I assumed, wrongly apparently, that the new vertexdata commands would enable me to change the coords of stages 1 and 2. I tried the following on a simple cube which was object 1:



This code compiles but completely messes up the object. It is obviously not setting new stage data in the way I expect. I suspect the problem is not actually a bug (it might be of course) - I think you can only change the stage UV data when the extra stage data already exists which perhaps doesn't for standard DBP objects. The Help files are silent on this.

Can anyone enlighten me on this - or show me how to add extra UV stage data to a standard DBP object?
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 15th Jan 2007 14:38 Edited at: 15th Jan 2007 14:43
The default fvf format of an object is 274. I would think you would have to use convert object fvf to 530(tex2 gives you 0-2 stages)/786(gives you 0-3 stages) or such to add the layers before texturing the object? Even then the new vertex commands were buggy with non 274 objects at one time, but I think this was fixed. DBP should really be crashing with you trying to texture the stages that don't exist on the object 0_o

[edit] Yeah 530 works. Run this code and the object isn't deformed. Comment out the convert object fvf and it is deformed.



Van B
Moderator
21
Years of Service
User Offline
Joined: 8th Oct 2002
Location: Sunnyvale
Posted: 15th Jan 2007 17:21
Lost, Any clues as to how you'd set the alpha blend between textures? - like for a terrain where you'd need to blend between textures for roads etc.

''Stick that in your text and scroll it!.''
Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 15th Jan 2007 18:40 Edited at: 15th Jan 2007 20:05
@LIT

Thanks! You are obviously on the right track - but it doesn't quite work (even with a correction to the typo in my code - a DBP cube has 24 vertices not 6). The shader only picks up the first two stages - not stage 2 (before your suggestion it didn't work at all ).

Ah! Just tried your second option: 786 does the trick (not sure why though after looking at the Help files [Edit: Yes I am - just not used to using hex code, 786 = 3x16x16+1x16+2 which matches the Help description]). THANK YOU.

Quote: "DBP should really be crashing with you trying to texture the stages that don't exist on the object"


No, I think it just uses the Stage 0 data which is fine for most applications such as normal/bump mapping - but I needed potentially completely different UV values. Your fix seems to have sorted the problem. This has given me pain for some time - I wish I had asked before.
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 15th Jan 2007 23:00 Edited at: 15th Jan 2007 23:01
Glad you got it going GG

Quote: "Lost, Any clues as to how you'd set the alpha blend between textures? - like for a terrain where you'd need to blend between textures for roads etc."


I started looking at this ages ago but got side tracked.. Now that GG was kind enough to post a shader example of blending with a shader (have a look at the last post or so on the darkshader thread) ... you may can do it like that. I'll try and have another go at it when I get caught up again. There has to be a solution.

Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 16th Jan 2007 00:41
Quote: "Lost, Any clues as to how you'd set the alpha blend between textures? - like for a terrain where you'd need to blend between textures for roads etc."


As LIT says, it's easy in a shader. I prefer to do my blend mapping in a shader because I find the set blend mapping Help file incomprehensible. You could, for example, have three terrain detail textures which you wanted to blend together, e.g. rocks, grass, or sand plus a large detail texture. You could have yet another texture where the colours told you the relative weights of the three detail textures. Just put it all in your shader and out pops your blended terrain as in Advanced Terrain. In fact you might be able to do it in Advanced Terrain (if you can change the FVF format without messing up the terrain object - I'm guessing now). I've posted a shader somewhat along these lines already, somewhere ... (probably quicker to re-write it ). Let me know if you're interested.
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 16th Jan 2007 11:58 Edited at: 16th Jan 2007 11:59
Sorry for hijaking your thread I have been looking at the shader you posted and am having a bit of trouble. I can use that shader for a few things as it simply adds the rgb together for alpha effects I fear I did not properly explain what I was trying to do though.

What I really need to do is mimic DBP's set blend mapping on command to apply this effect to each limb of an object (through set limb effect):



Where the model auto loads these 2 textures (the lightmap on stage 0 and the basemap on stage 1 ... I can change this if need be as I am using my own model exporting code and was mimicing the dbo setup):

testcomb_1.bmp as -1
BRI001.JPG as -2

Images attached. The blend modes I am using are SELECTARG1
and MODULATE2X which makes the models look exactly as they do in CShop

Any help as to how this can be done with a shader or where I might start looking for info on how to do it would be greatly appreciated. This is for a free and open source model combiner project.

Attachments

Login to view attachments
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 16th Jan 2007 12:23 Edited at: 16th Jan 2007 12:24
Double post to show comparison results. Image attached. I found some really cool effects with your adding shader as well now

Attachments

Login to view attachments
Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 16th Jan 2007 13:06
@Lost in Thought

Quote: "Sorry for hijaking your thread"


No problem.

Quote: "What I really need to do is mimic DBP's set blend mapping on command to apply this effect to each limb of an object (through set limb effect):"


If you want one shader that covers all the options of set blend mapping on then that sounds like a tall order. But if you just want a shader that does some of the things that that command does then that should be fairly easy on a case by case basis (and shaders are only limited by things like the total instruction count and your imagination). Only problem I'm likely to encounter is working out what SELECTARG1 and MODULATE2X actually do - but I might be able to find out from the DX SDK docs when I get home - and your images and code will probably tell me as well.

I'll have a look at this when I get home this evening.

Just taken a quick look at your images. The reason for the difference is simple. To use the lightmap correctly you need to multiply the two texture values together, my demo code just adds them. (It was after all a simple demo, nothing more.)

So, you might get what you want in this instance merely by removing the code for the third image in the shader and using "*=" instead of "+=" (I think that's how I did the addition - but I'm sure you can work it out if I'm wrong ). I think the term MODULATE in DX is generally taken to mean multiplication.

If you want a shader to cover several options such as: addition or multiplication or averaging; 1, 2 or more textures; etc, then a common approach is to write separate techniques for each case within the shader.

Anyway, let me know how you get on and I'll have another look later.
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 16th Jan 2007 23:12 Edited at: 16th Jan 2007 23:23
Yeah all I need is the SELECTARG1 and MODULATE2X. What I am doing is making a program to take CShop .x models and combine them into 1 .x or 1 .dbo and use the shader to blend them. I already removed the third texture data from the shader. I never thought about multiplying though, I'll have another go when I get home as well.

Multiplying does work alot better. I may have something wrong in the shader still though.

Shader file indo:


Code used to test:


Result image attached. Alot closer but now just a bit too dark.

Attachments

Login to view attachments
Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 16th Jan 2007 23:51
OK, looks like the answer is simple. Just found this in the DX SDK docs:

Quote: "D3DTOP_MODULATE2X
Multiply the components of the arguments, and shift the products to the left 1 bit (effectively multiplying them by 2) for brightening."


This suggests replacing:



by this:



I suspect that you could probably achieve the same result using alphablending with the appropriate render states in the technique - but I'm still rather vague on how to do that. The present approach seems simple enough to me.
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 17th Jan 2007 00:02 Edited at: 17th Jan 2007 12:31
Thx man I'll have another go at it when I get home. I had thought about adding *2 but was already running late for work lol. This crappy work video card doesn't like shaders.

[edit] Looks pretty good now. Thx man. Result image attached

[edit2] Odd it runs at 250fps here with pixel shader 2.0 and 350 with 1.4 0_o DBP's blendmapping runs at 350 so I'll be using 1.4 as my card seems to like the older shaders. Is there any way to allow it to be set by an option?

New Shader Info:


Attachments

Login to view attachments
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 18th Jan 2007 12:13
I have run into another boggle. The shader works great now if the stage 0 and stage 1 UV's are matched up. Would it be possible to modify it to work when they don't 0_o I've played with it in my spare time but am getting nowhere. I fear I need to buy a book on writing shaders. It seems DarkShader is taking too long

Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 18th Jan 2007 12:57 Edited at: 18th Jan 2007 13:34
Quote: "Odd it runs at 250fps here with pixel shader 2.0 and 350 with 1.4 0_o DBP's blendmapping runs at 350 so I'll be using 1.4 as my card seems to like the older shaders. Is there any way to allow it to be set by an option?"


Odd, I'll see what happens on my machine (my GFX card is a GeForce FX 5200 128MB) - and look at the two versions in FX Composer (it tells you the pixel processing rate for different cards which is useful). I wouldn't have expected such a large difference between 2.0 and 1.4. Is your GFX card info in your signature up-to-date?

The usual way of allowing the option to use 2.0 or 1.4, etc, is to have two techniques which have identical code except in the compile instructions, e.g.



You can choose which to use by, for example, set effect technique effectNum, "t0". I believe DarkBASIC will use the first technique that is supported by your graphics card - but that doesn't guarantee that it will use the best when there is a choice.

Sometimes the extra techniques for different "compile targets" need different pixel or vertex shader code - or extra passes, etc. This can happen with complicated shaders which exceed the instruction count for lower VS or PS versions.

Quote: "The shader works great now if the stage 0 and stage 1 UV's are matched up. Would it be possible to modify it to work when they don't"


Yes - and you told me how to set up the DBP side of things at the beginning of this thread!

What you need to do in the shader is something like:



Alternatively, if you are just using tiling, you can pass an extra float4 parameter to the shader such as UVscale (the final two entries need to be set - but won't be used in the shader) and multiply the UV coords by these when you do the look-up, e.g.



You need an extra float2 declaration in the shader - but I guess you can sort that out.

I'll go and check the fps thing now.

Edit: Just done the tests. Get similar results to you (but slower for both): 190 for PS1.4, and 168 for PS2.0. FX Composer shows that, for this shader, the same pixel shader code compiles to fewer asm instructions using 1.4 compared to 2.0. FXC also gives the pixel throughput as 800MPS for 1.4 and 267 for 2.0 which is a big difference - we don't see that of course because of the other things going on in the system when we run the program.

Looking at the pixel shader asm code, the gain seems to be that the two multiplications are combined into a single instruction (i.e. multiply and shift) in the PS1.4 version. This suggests to me that you won't get that gain if you multiply by, say, 3 instead of by 2. Will experiment now. It could of course be a compiler inefficiency - something else to look into.

Isn't computing fun?

2nd Edit: I was wrong - the two versions still give 800MPS and 267MPS. The PS1.4 asm code is different - and longer. But by some GFX card magic still takes the same number of machine cycles (just one!). With a more complicated pixel shader you might need PS2.0 because of the instruction count limits. I'll have to watch this issue when I'm writing my shaders - I tend to routinely use PS2.0 because of its extra features, but this example shows it's worth stopping to think every now and then.

Incidentally, for simple blending a texture with a lightmap you don't need the alphablending stuff in the code - I merely included that to show you could get alpha transparency as well. You just need, for example:

Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 18th Jan 2007 13:40 Edited at: 18th Jan 2007 13:48
Awesome. It works perfectly now with my loaded objects I can't get it to work properly with DBP made object's yet, but I can tackle that tomorrow night. I only get 1 to 2 hours a night to play with coding lately.

Thanks a ton man

[edit]
Quote: "Is your GFX card info in your signature up-to-date?"


Yes

Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 18th Jan 2007 16:07
Found my earlier texture blending demo from back in October (no idea where it is on this site though ). I attach it again here - you might like to try it.

It blends and tiles three detail textures together (grass, gravel and rock) according to the rgb components of a fourth texture.

You can move the camera with the demo.

Not sure how you would do this with the set blend mapping command.

Attachments

Login to view attachments
Van B
Moderator
21
Years of Service
User Offline
Joined: 8th Oct 2002
Location: Sunnyvale
Posted: 18th Jan 2007 16:20
Ahh, I was trying to figure out how to do that with the demo posted in the Darkshader thread - this should be fun to mess around with, thanks for posting it up again.

''Stick that in your text and scroll it!.''
MExe
17
Years of Service
User Offline
Joined: 11th Jan 2007
Location:
Posted: 18th Jan 2007 17:49
Is it possible to tell to DBP to use a certain shader straight when exporting from Max in the X format?
Is it possible to assign a special FX shader in Max so to not have to set up all things in DBP?
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 18th Jan 2007 22:46 Edited at: 18th Jan 2007 23:21
As far as I have seen the .x format doesn't save effect information at all.

@Green Gandalf : I added culling to the shader and almost doubled the FPS (cullmode = CCW Went from 140 fps to 231 on a large level

Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 20th Jan 2007 14:12
Well it seems that DBP won't allow you to use different UV data inside a shader on DBP primitves. I have tried everything I can think of. The only way I can get the shader to work with a DBP primitive is if I use stage 0 for both calcs and the UV data has to match between stages. It works perfectly on loaded objects though 0_o

If you can see an error in this code then please let me know. If not then I am going to post a bug report as I have worked on this for 2 days.


This shader works:


But this one doesn't:


Both work however on loaded objects (of course the UV data is screwed up on the one that uses stage 0 for both).

Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 20th Jan 2007 15:45
Quote: "Well it seems that DBP won't allow you to use different UV data inside a shader on DBP primitves."


Yes it does. You forgot to tell DBP what the new stage 1 coords are. Look at your first post in this thread where you include the correct code, I think.

Actually, with two stages (0 and 1) I think you only need fvf 530 as you said in that same post.
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 20th Jan 2007 23:53
Yeah 530 is all you need, I was just trying the extra stage out of desperation lol. I was also assuming that since I could texture the object on stage 1 and it looked correct that it had the UV coords saved in memory. It is quite retarded to have to tell it what it already knows I think 0_o Once you use the texture object command and it textures that stage ... you would think you could use the UV data that it has.

In any case this code does work with both shaders, so I guess I can use it and will do some more testing later:


[edit] Also what exactly did the vertex shader do in that fx file? I removed it and can't seem to tell any difference. I was just removing stuff while testing.

Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 21st Jan 2007 02:16
Quote: "Also what exactly did the vertex shader do in that fx file? I removed it and can't seem to tell any difference. I was just removing stuff while testing."


Yes, in that instance the vertex shader was just reproducing the default behaviour, i.e. calculating the output position of a vertex and the stage UV coordinates. I've got in the habit of including it because it makes it easier to change things if you decide you want the vertex shader to do something other than the default behaviour. Same applies to pixel shaders. Not sure whether you can do without both the vertex shader and the pixel shader simultaneously - and still use the effect file. Another thing to try tomorrow ...

Quote: "I was also assuming that since I could texture the object on stage 1 and it looked correct that it had the UV coords saved in memory."


I thought the same when I first tried this, but it seems the new stage defaults to UV values of 0 rather than the Stage 0 values. That's reasonably consistent with the usual DBP behaviour for initialising things I suppose.
david w
18
Years of Service
User Offline
Joined: 18th Dec 2005
Location: U.S.A. Michigan
Posted: 5th Mar 2007 03:57
@gg Is it possible to be able to use this with a greyscale image. I have an idea how to convert a greyscale image to be able to work with this, but it would be much easier if you could make the shader use instead of the rgba.dds file a custom greyscale image. What do you think.
Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 5th Mar 2007 10:00
Quote: "Is it possible to be able to use this with a greyscale image"


I assume you are referring to the shader which blends three (or four) detail textures together on a terrain.

If you only need 2 detail textures then you could use a greyscale image to control the blending. If you need to blend 3 then you need at least two colour components (I used 3 for simplicity), for 4 you need at least 3 and so on.

However, you should be able to achieve much the same effect with a greyscale image by using, for example, the high, middle and low bits as separate "factors" for controlling the blending. I am sure this could be done - but the details might be messy and require extra work in the pixel shader which is generally bad news for performance. The loss of precision probably won't matter for this particular application.

You might find it awkward to produce the required greyscale image - but I am sure something could be done.
Van B
Moderator
21
Years of Service
User Offline
Joined: 8th Oct 2002
Location: Sunnyvale
Posted: 5th Mar 2007 10:38
What I'm planning to do is use several mask images, like each terrain is 32x32 grid, and each will have it's own mask, which will be rendered with shadows and automatic texturing. Funnily, when I applied Gandalf's shader to my terrain system I expect a frame rate drop, but with it's lower detail shaders it actually doubled the frame rate, sweet!. I expected it to affect performance a lot more, considering the amount of shader objects being processed.
It's fairly easy to change it to use internal textures, just use the 0 flag when loading the shader, and then stages 0,1,2 are the textures and stage 3 is the mask. By doing this you have total control over what objects get what texture, like you might have a base texture, but could change from grass,rock and sand to grass, ice, and snow depending on terrain height. I won't need more than 3 textures per 32x32 tile piece, so it's perfect for my needs.

With this system, I'd using 4 pixels per tile, so even with that low res mask, it's still 4 times more detailed than using verts to control texturing - looking to make my own lighting system which will let me disable lighting totally on the terrain and give reasonable shadow mapping. It can be a pain to get your terrain smooth when using lot's of 'bits' of terrain, but this problem is non-existent when disabling lighting, should give some nice looking terrain when done. Personally I find advanced terrains end up with a samey look, because you only have one detail texture, I think people should definitely experiment with shaders more - DBPro's multi-texturing support is still too lacking IMO.


Good guy, Good guy, Wan...
Van B
Moderator
21
Years of Service
User Offline
Joined: 8th Oct 2002
Location: Sunnyvale
Posted: 5th Mar 2007 16:25
Here's a couple of screenies of your terrain shader, been messing around with it today.


Good guy, Good guy, Wan...

Attachments

Login to view attachments
Van B
Moderator
21
Years of Service
User Offline
Joined: 8th Oct 2002
Location: Sunnyvale
Posted: 5th Mar 2007 16:25
and...


Good guy, Good guy, Wan...

Attachments

Login to view attachments
david w
18
Years of Service
User Offline
Joined: 18th Dec 2005
Location: U.S.A. Michigan
Posted: 5th Mar 2007 21:13
hey van b. I havent even got a change to put it to work on my terrain yet. not fair. I had to work all day. Oh well I will see if I cant get equally impressive results as you did. Looks like this might turn into some kinda friendly terrain vs terrain competition. LOL..........Good luck..
Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 5th Mar 2007 22:32
Van B,

Those screenshots make all the effort worthwhile. Wonderful - and thanks. Just the sort of application I had in mind.
david w
18
Years of Service
User Offline
Joined: 18th Dec 2005
Location: U.S.A. Michigan
Posted: 6th Mar 2007 02:13 Edited at: 6th Mar 2007 05:09
ha ha I got it working on mine...

second lol..



@lost in thought.....I tried your suggestion "cullmode = CCW;" and all it does is make the entire terrain dissappear.

There must be something more to it. Do I have to feed the shader the camera positions? What all does this command require for it to be able to function as you say? Any help would be appreciated. Thank you.

Attachments

Login to view attachments
Van B
Moderator
21
Years of Service
User Offline
Joined: 8th Oct 2002
Location: Sunnyvale
Posted: 6th Mar 2007 13:07
Here's one with new textures and improved shading. I think it's wise to use your own shading routine and darkening the mask colours to suit, otherwise things can look really bright. I'm going for high contrast and shady - thinking of adding a path layer too, like replacing the shore texture when it's not needed, with a path texture, might be a little more tricky to autocalculate though, maybe something best left for manual painting.


Good guy, Good guy, Wan...

Attachments

Login to view attachments
TinTin
17
Years of Service
User Offline
Joined: 16th May 2006
Location: BORG Drone Ship - Being Assimilated near Roda Beta (28)
Posted: 6th Mar 2007 22:32
Now thats what we call, ShhhWeeeeeet.
How about you two guys bang your heads togeather and write a small tutorial on how you achieved those glorious landscapes. for the rest of us idiots.

Cyberspace was becoming overcrowded and slummy so I decided to move. These nice chaps gave me a lift.
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 22nd Mar 2007 12:19
Does the shader I posted on page 1 work for anyone here under U6.5 or U6.6? It just makes the objects dissappear here.

Green Gandalf
VIP Member
19
Years of Service
User Offline
Joined: 3rd Jan 2005
Playing: Malevolence:Sword of Ahkranox, Skyrim, Civ6.
Posted: 22nd Mar 2007 13:20 Edited at: 22nd Mar 2007 13:27
@LIT

Not quite sure which post you are referring to. Could you zip up the whole thing (dba, fx and media) and post it or e-mail it to me? I'll then give it a quick test for you. I've got various upgrades available for easy testing.

EDIT: Ignore this - I've found your post on the Bug Reports board. Will test now.
Lost in Thought
20
Years of Service
User Offline
Joined: 4th Feb 2004
Location: U.S.A. : Douglas, Georgia
Posted: 22nd Mar 2007 23:24
Yep solved now, thanks for checking into it. Awaiting the next upgrade

Login to post a reply

Server time is: 2024-03-19 04:15:09
Your offset time is: 2024-03-19 04:15:09