3Dmigoto now open-source...
  134 / 143    
Many thanks DSS!!! great update!! Conditional Logic/Expression Parser and Built in Performance Monitor are features i will definitly use... also now i can monitor the Regex, always better to look numbers than "feeling"
Many thanks DSS!!! great update!!

Conditional Logic/Expression Parser and Built in Performance Monitor are features i will definitly use...
also now i can monitor the Regex, always better to look numbers than "feeling"

MY WEB

Helix Mod - Making 3D Better

My 3D Screenshot Gallery

Like my fixes? you can donate to Paypal: dhr.donation@gmail.com

Posted 04/30/2018 07:09 PM   
Awesome update as always :). I'll try to do what I said in RetroArch with this, if it's possible.
Awesome update as always :). I'll try to do what I said in RetroArch with this, if it's possible.

CPU: Intel Core i7 7700K @ 4.9GHz
Motherboard: Gigabyte Aorus GA-Z270X-Gaming 5
RAM: GSKILL Ripjaws Z 16GB 3866MHz CL18
GPU: MSI GeForce RTX 2080Ti Gaming X Trio
Monitor: Asus PG278QR
Speakers: Logitech Z506
Donations account: masterotakusuko@gmail.com

Posted 04/30/2018 10:34 PM   
As many others have already said, another amazing set of features on top of countless others before it. Special thanks for implementing those features and additions specifically requested by me, should allow me to overhaul my XCom 2 overhaul in a much more sensible fashion. [quote="DHR"]Conditional Logic/Expression Parser... also now i can monitor the Regex, always better to look numbers than "feeling"[/quote] Actually, this comment reminded me of one of the things that had me wanting the expression parser in the first place. Can it be used in regex patterns to help calculate the register # for a cbuffer based on the offset? Or since regex is mainly just matching strings, is that impossible to do?
As many others have already said, another amazing set of features on top of countless others before it. Special thanks for implementing those features and additions specifically requested by me, should allow me to overhaul my XCom 2 overhaul in a much more sensible fashion.

DHR said:Conditional Logic/Expression Parser... also now i can monitor the Regex, always better to look numbers than "feeling"


Actually, this comment reminded me of one of the things that had me wanting the expression parser in the first place. Can it be used in regex patterns to help calculate the register # for a cbuffer based on the offset? Or since regex is mainly just matching strings, is that impossible to do?

3D Gaming Rig: CPU: i7 7700K @ 4.9Ghz | Mobo: Asus Maximus Hero VIII | RAM: Corsair Dominator 16GB | GPU: 2 x GTX 1080 Ti SLI | 3xSSDs for OS and Apps, 2 x HDD's for 11GB storage | PSU: Seasonic X-1250 M2| Case: Corsair C70 | Cooling: Corsair H115i Hydro cooler | Displays: Asus PG278QR, BenQ XL2420TX & BenQ HT1075 | OS: Windows 10 Pro + Windows 7 dual boot

Like my fixes? Dontations can be made to: www.paypal.me/DShanz or rshannonca@gmail.com
Like electronic music? Check out: www.soundcloud.com/dj-ryan-king

Posted 05/01/2018 04:20 AM   
[quote="DJ-RK"]Actually, this comment reminded me of one of the things that had me wanting the expression parser in the first place. Can it be used in regex patterns to help calculate the register # for a cbuffer based on the offset? Or since regex is mainly just matching strings, is that impossible to do?[/quote] That actually comes into why ShaderRegex has room for expanding it to use multiple patterns per regex group in the future - the idea is to be able to match a constant buffer definition with one pattern to get the offset, perform some simple arithmetic on it to work out the register number, then use a second pattern to match the code and do the replacement. This will probably still be a couple of versions away, but it is planned.
DJ-RK said:Actually, this comment reminded me of one of the things that had me wanting the expression parser in the first place. Can it be used in regex patterns to help calculate the register # for a cbuffer based on the offset? Or since regex is mainly just matching strings, is that impossible to do?

That actually comes into why ShaderRegex has room for expanding it to use multiple patterns per regex group in the future - the idea is to be able to match a constant buffer definition with one pattern to get the offset, perform some simple arithmetic on it to work out the register number, then use a second pattern to match the code and do the replacement. This will probably still be a couple of versions away, but it is planned.
Attachments

help1.png

help2.png

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

Posted 05/01/2018 06:32 AM   
[center][size="XL"][color="orange"]Custom Help Text Shader[/color][/size] [url]https://github.com/DarkStarSword/3d-fixes/tree/master/custom_shader_help_text[/url][/center] Displays the contents of help_short.txt in the bottom left corner for ten seconds after launch: [img]https://forums.geforce.com/cmd/default/download-comment-attachment/75026/[/img] Pressing F1 will bring up the contents of the help.txt file: [img]https://forums.geforce.com/cmd/default/download-comment-attachment/75027/[/img] Supports: - Displays ASCII text read from a file - No length restrictions - Text formatting performed entirely on the GPU with a combination of compute, geometry and pixel shaders - Automatic text wrapping within some bounds - Left/middle/right top/center/bottom anchoring (short text is anchored to the lower left of the screen by default, long text is anchored to the top middle) - Left/center/right text alignment (note the "Press F1 for help" was centered above) - Automatic text reflowing on resolution change - Customisable text colour - Customisable background colour and opacity - Customisable padding around text - Text parameters can be customised per text box - Could be customised for other text needs To keep IniParam usage to a minimum (x5 and y5 are used for the window size to properly size the font and detect resolution changes), most of the parameters this shader uses are passed in via a custom parameter resource - I do want to make this a little easier to write in 3DMigoto in the future, but for now it looks like this: [code] [ResourceParamsFull] type = StructuredBuffer array = 1 bind_flags = shader_resource data = R32_FLOAT -0.8 0.9 0.8 -1 1 0.7 0.15 1 0 0 0 0.75 0.01 0.01 1 1 0 1.0 ; ^^^^Rectangle^^|^^^Colour^^^|Background|^Border^^|^ ^|^|^-- font scale ; x1 y1 x2 y2|r g b a|r g b a |horz vert| ^ |^---- text alignment: 0=left 1=center 2=right ; range -1:+1 | |r g b a |horz vert| ^------- h/v-anchor: 0=none 1=left/top 2=center 3=right/bottom [ResourceParamsShort] type = StructuredBuffer array = 1 bind_flags = shader_resource data = R32_FLOAT -0.93 -0.9 +1 -0.9 1 0.7 0.15 1 0 0 0 0.75 0.01 0.01 1 3 1 1.0 ; ^Bounds Rectangle^|^^^Colour^^^|Background|^Border^^|^ ^|^|^-- font scale ; x1 y1 x2 y2 |r g b a|r g b a |horz vert| ^ |^---- text alignment: 0=left 1=center 2=right ; range -1:+1 | | | | ^--- h/v-anchor: 0=none 1=left/top 2=center 3=right/bottom [/code] If you're wondering what the "bind_flags" are all about - that's a quirk of how I've set up this shader to switch between the two text resources - they aren't directly bound to the shader, but rather copied by reference to another custom resource, and that resource is bound to the shader (and tested for null in the present call). That situation means 3DMigoto cannot automatically determine the correct bind flags, so they have to be manually specified. If you directly bound them to the shader you wouldn't need that.


Displays the contents of help_short.txt in the bottom left corner for ten seconds after launch:

Image

Pressing F1 will bring up the contents of the help.txt file:

Image

Supports:
- Displays ASCII text read from a file
- No length restrictions
- Text formatting performed entirely on the GPU with a combination of compute, geometry and pixel shaders
- Automatic text wrapping within some bounds
- Left/middle/right top/center/bottom anchoring (short text is anchored to the lower left of the screen by default, long text is anchored to the top middle)
- Left/center/right text alignment (note the "Press F1 for help" was centered above)
- Automatic text reflowing on resolution change
- Customisable text colour
- Customisable background colour and opacity
- Customisable padding around text
- Text parameters can be customised per text box
- Could be customised for other text needs

To keep IniParam usage to a minimum (x5 and y5 are used for the window size to properly size the font and detect resolution changes), most of the parameters this shader uses are passed in via a custom parameter resource - I do want to make this a little easier to write in 3DMigoto in the future, but for now it looks like this:

[ResourceParamsFull]
type = StructuredBuffer
array = 1
bind_flags = shader_resource
data = R32_FLOAT -0.8 0.9 0.8 -1 1 0.7 0.15 1 0 0 0 0.75 0.01 0.01 1 1 0 1.0
; ^^^^Rectangle^^|^^^Colour^^^|Background|^Border^^|^ ^|^|^-- font scale
; x1 y1 x2 y2|r g b a|r g b a |horz vert| ^ |^---- text alignment: 0=left 1=center 2=right
; range -1:+1 | |r g b a |horz vert| ^------- h/v-anchor: 0=none 1=left/top 2=center 3=right/bottom

[ResourceParamsShort]
type = StructuredBuffer
array = 1
bind_flags = shader_resource
data = R32_FLOAT -0.93 -0.9 +1 -0.9 1 0.7 0.15 1 0 0 0 0.75 0.01 0.01 1 3 1 1.0
; ^Bounds Rectangle^|^^^Colour^^^|Background|^Border^^|^ ^|^|^-- font scale
; x1 y1 x2 y2 |r g b a|r g b a |horz vert| ^ |^---- text alignment: 0=left 1=center 2=right
; range -1:+1 | | | | ^--- h/v-anchor: 0=none 1=left/top 2=center 3=right/bottom


If you're wondering what the "bind_flags" are all about - that's a quirk of how I've set up this shader to switch between the two text resources - they aren't directly bound to the shader, but rather copied by reference to another custom resource, and that resource is bound to the shader (and tested for null in the present call). That situation means 3DMigoto cannot automatically determine the correct bind flags, so they have to be manually specified. If you directly bound them to the shader you wouldn't need that.

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

Posted 05/01/2018 06:25 PM   
Costume Mod Tutorial, covering index buffer removal, partial mesh removal, mesh editing in Blender, mesh replacement and vertex group (bone) transfers. I wouldn't suggest watching this at work, though I did try to keep the video PG: https://www.youtube.com/watch?v=zWE0xP4MgR8
Costume Mod Tutorial, covering index buffer removal, partial mesh removal, mesh editing in Blender, mesh replacement and vertex group (bone) transfers. I wouldn't suggest watching this at work, though I did try to keep the video PG:

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

Posted 05/01/2018 09:25 PM   
[quote="DarkStarSword"]index buffer removal, partial mesh removal[/quote] I'm interested in this, for my (work in progress) Okami fix. I'm trying to do the most complete cel shading removal mod I can, and there is an index buffer that I want to remove and not the complete VS/PS. I'll check the video tomorrow to see if it can be toggled with a hotkey like other parts of the effect.
DarkStarSword said:index buffer removal, partial mesh removal

I'm interested in this, for my (work in progress) Okami fix. I'm trying to do the most complete cel shading removal mod I can, and there is an index buffer that I want to remove and not the complete VS/PS. I'll check the video tomorrow to see if it can be toggled with a hotkey like other parts of the effect.

CPU: Intel Core i7 7700K @ 4.9GHz
Motherboard: Gigabyte Aorus GA-Z270X-Gaming 5
RAM: GSKILL Ripjaws Z 16GB 3866MHz CL18
GPU: MSI GeForce RTX 2080Ti Gaming X Trio
Monitor: Asus PG278QR
Speakers: Logitech Z506
Donations account: masterotakusuko@gmail.com

Posted 05/01/2018 10:05 PM   
Because you centered the video, it's not clickable. Awesome work, 3Dmigoto as a mod tool is going to open up a lot of games to modder improvements, that were previously pretty much untouchable because they did not include mod tools from the developer :)
Because you centered the video, it's not clickable.

Awesome work, 3Dmigoto as a mod tool is going to open up a lot of games to modder improvements, that were previously pretty much untouchable because they did not include mod tools from the developer :)

Posted 05/02/2018 02:13 AM   
[quote="D-Man11"]Because you centered the video, it's not clickable[/quote]Ahh, thanks - I was wondering why the post was broken. Edited to remove the center tag.
D-Man11 said:Because you centered the video, it's not clickable
Ahh, thanks - I was wondering why the post was broken. Edited to remove the center tag.

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

Posted 05/02/2018 06:02 AM   
TY, watching the video where you showed your gaming room, gave me the solution I was looking for. It had never occurred to me that one of those outdoor screens would work well. The 135 inch is the perfect size to go over my wooden shutters/window.
TY, watching the video where you showed your gaming room, gave me the solution I was looking for. It had never occurred to me that one of those outdoor screens would work well. The 135 inch is the perfect size to go over my wooden shutters/window.

Posted 05/02/2018 06:15 AM   
@DarkStarSword That Costume Mod looks very interesting....i tried and the remove part (index buffer and sub-mesh) is very easy. In blender do you install some kind of pluging you made?? another question? Is possible to transfer a characters (bone+textures) from one game to another with this?
@DarkStarSword
That Costume Mod looks very interesting....i tried and the remove part (index buffer and sub-mesh) is very easy. In blender do you install some kind of pluging you made??

another question? Is possible to transfer a characters (bone+textures) from one game to another with this?

MY WEB

Helix Mod - Making 3D Better

My 3D Screenshot Gallery

Like my fixes? you can donate to Paypal: dhr.donation@gmail.com

Posted 05/03/2018 02:49 PM   
[quote="DHR"]In blender do you install some kind of pluging you made??[/quote]Yeah - the plugin is in my 3d-fixes repo (and there was a link in the video description).' The plugin is not intended to be specific to DOAXVV, but that's the game I've been using to develop and test it, and it may need work for other games (it definitely needs work to support games that use multiple vertex buffers, like Witcher 3). If you do give it a try in another game, let me know how it goes. [quote]another question? Is possible to transfer a characters (bone+textures) from one game to another with this?[/quote] Possibly, but the bones are a problem - if you transfer a mesh from one game to another you will have to adapt it to use the skeleton in the target game - and if the character proportions aren't very close that may not work very well, but I'm not a 3D artist and am still figuring out some of this as I go and there might ways to make it work even if the proportions are wrong. At the moment adapting it like that would be difficult - when the pose is imported into Blender, we only actually get the final deformation matrices, so in edit mode all the bones are at the origin and in pose mode they are all over the place (there's one point in the video where I briefly unhide one of the pose objects to move a mesh and you can see the bones are floating outside of the mesh). I've got a few ideas to improve that (at the very least we should be able to use the vertex to place the bones in approximately the right location, and maybe there might be some way I can do better), but I need to do more experiments and try some things and just increase my understanding of how the bones actually work. There's also kind of an interesting possibility that we might be able to use a shader in 3DMigoto to calculate our own deformation matrices on the fly... It's a bit of a crazy idea, and it would be difficult, but it opens up some interesting possibilities, like using our own physics simulation for adding free flowing cloth. I dunno... it will probably never happen but I kind of want to do an MLP mod for DOAXVV as a real test of how far I can push this (I mean come on, who wouldn't want to see Twilight Sparkle and Pinkie Pie play Beach Volleyball, even if they do have to be the humanised versions from EG?)...
DHR said:In blender do you install some kind of pluging you made??
Yeah - the plugin is in my 3d-fixes repo (and there was a link in the video description).'

The plugin is not intended to be specific to DOAXVV, but that's the game I've been using to develop and test it, and it may need work for other games (it definitely needs work to support games that use multiple vertex buffers, like Witcher 3). If you do give it a try in another game, let me know how it goes.

another question? Is possible to transfer a characters (bone+textures) from one game to another with this?

Possibly, but the bones are a problem - if you transfer a mesh from one game to another you will have to adapt it to use the skeleton in the target game - and if the character proportions aren't very close that may not work very well, but I'm not a 3D artist and am still figuring out some of this as I go and there might ways to make it work even if the proportions are wrong.

At the moment adapting it like that would be difficult - when the pose is imported into Blender, we only actually get the final deformation matrices, so in edit mode all the bones are at the origin and in pose mode they are all over the place (there's one point in the video where I briefly unhide one of the pose objects to move a mesh and you can see the bones are floating outside of the mesh). I've got a few ideas to improve that (at the very least we should be able to use the vertex to place the bones in approximately the right location, and maybe there might be some way I can do better), but I need to do more experiments and try some things and just increase my understanding of how the bones actually work.

There's also kind of an interesting possibility that we might be able to use a shader in 3DMigoto to calculate our own deformation matrices on the fly... It's a bit of a crazy idea, and it would be difficult, but it opens up some interesting possibilities, like using our own physics simulation for adding free flowing cloth.

I dunno... it will probably never happen but I kind of want to do an MLP mod for DOAXVV as a real test of how far I can push this (I mean come on, who wouldn't want to see Twilight Sparkle and Pinkie Pie play Beach Volleyball, even if they do have to be the humanised versions from EG?)...

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

Posted 05/03/2018 04:24 PM   
Thanks DSS...now i found the add-on....i was looking in the DOAXVV folder. Maybe see Twilight Sparkle and Pinkie Pie in Tekken7 or Street Fighter :) I will try (when i have more free time) with blender...i'm not an expert with blender, but i will give it shot...this open a new use to 3Dmigoto that is very interesting.
Thanks DSS...now i found the add-on....i was looking in the DOAXVV folder.

Maybe see Twilight Sparkle and Pinkie Pie in Tekken7 or Street Fighter :)

I will try (when i have more free time) with blender...i'm not an expert with blender, but i will give it shot...this open a new use to 3Dmigoto that is very interesting.

MY WEB

Helix Mod - Making 3D Better

My 3D Screenshot Gallery

Like my fixes? you can donate to Paypal: dhr.donation@gmail.com

Posted 05/03/2018 10:09 PM   
[quote="DarkStarSword"][center][size="XL"][color="orange"]Custom Help Text Shader[/color][/size] [url]https://github.com/DarkStarSword/3d-fixes/tree/master/custom_shader_help_text[/url][/center][/quote] This is updated - it now also supports a notification mechanism you can use to display short messages that disappear after a few seconds (I'll probably split that out into a separate shader after a while, but for now it's part of this one), e.g. I'm using this in DOAXVV to display a notice when the hotkeys are pressed to enable/disable costume mods and change the shadow mode. To trigger this on a toggle keybinding with one message when the key is activated (first press) and a different message when it is deactivated (second press): [code] [KeyToggleMods] Key = no_modifiers F2 z = 0 type = toggle run = CommandListToggleMods [CommandListToggleMods] pre Resource\ShaderFixes\help.ini\Notification = ref ResourceCostumeModsDisabled pre run = CustomShader\ShaderFixes\help.ini\FormatText pre z5 = time + 2.0 post Resource\ShaderFixes\help.ini\Notification = ref ResourceCostumeModsEnabled post run = CustomShader\ShaderFixes\help.ini\FormatText post z5 = time + 2.0 [ResourceCostumeModsDisabled] type = Buffer format = R8_UINT bind_flags = shader_resource ; "Costume Mods Disabled" data = 67 111 115 116 117 109 101 32 77 111 100 115 32 68 105 115 97 98 108 101 100 [ResourceCostumeModsEnabled] type = Buffer format = R8_UINT bind_flags = shader_resource ; "Costume Mods Enabled" data = 67 111 115 116 117 109 101 32 77 111 100 115 32 69 110 97 98 108 101 100 [/code] The key binding triggers a command list, of which the pre commands are run when the key is first activated, and the post commands are run when it is deactivated. Both of these cases assign a custom resource containing the message, run the text formatting compute shader and set z5 to the time that the message is to be hidden, which will be "time + <timeout>" In this example I have two custom resources that hold the messages to be displayed. In this case I'm defining them right in the ini file with data= and the decimal values of each ASCII character in the message, but you can also use filename= to load them from a text file, as is done for the main help text. If you have Python installed you can easily generate these data= lines with: [code] print(' '.join(map(str,map(ord, "Your message here")))) [/code] I do intend to add the ability to write just data="message" at a later date to simplify this. To use this for type=cycle key bindings with different messages on each cycle, you can use this: [code] [KeyShadows] Key = shift F2 w = 0, 2, 1 type = cycle run = CommandListShadowsOrig, CommandListShadowsOff, CommandListShadowsOn [CommandListShadowsOrig] Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOrig run = CustomShader\ShaderFixes\help.ini\FormatText z5 = time + 2.0 [CommandListShadowsOff] Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOff run = CustomShader\ShaderFixes\help.ini\FormatText z5 = time + 2.0 [CommandListShadowsOn] Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOn run = CustomShader\ShaderFixes\help.ini\FormatText z5 = time + 2.0 [ResourceShadowsOrig] type = Buffer format = R8_UINT bind_flags = shader_resource ; "Shadows: Original" data = 83 104 97 100 111 119 115 58 32 79 114 105 103 105 110 97 108 [ResourceShadowsOff] type = Buffer format = R8_UINT bind_flags = shader_resource ; "Shadows: Off" data = 83 104 97 100 111 119 115 58 32 79 102 102 [ResourceShadowsOn] type = Buffer format = R8_UINT bind_flags = shader_resource ; "Shadows: On" data = 83 104 97 100 111 119 115 58 32 79 110 [/code] In this case, separate command lists are run for each stage of the cycle that assign a custom resource containing the text to be displayed, run the formatting shader and set a timeout. Alternatively, if you only specify a single command list it will be run for each stage of the cycle and you could check the current value of w - but be aware that the command list is run *before* w is updated in this case, so you have to check the previous value: [code] [KeyShadows] Key = shift F2 w = 0, 2, 1 type = cycle run = CommandListShadows [CommandListShadows] ; w hasn't been updated yet, so match the previous value, not the next value if w == 1 Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOrig else if w == 0 Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOff else Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOn endif endif run = CustomShader\ShaderFixes\help.ini\FormatText z5 = time + 2.0 [/code] Or, you could forgo the cycle type altogether and use the command list to update w: [code] [KeyShadows] Key = shift F2 run = CommandListShadows [CommandListShadows] if w == 1 w = 0 Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOrig else if w == 0 w = 2 Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOff else w = 1 Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOn endif endif run = CustomShader\ShaderFixes\help.ini\FormatText z5 = time + 2.0 [/code]
DarkStarSword said:

This is updated - it now also supports a notification mechanism you can use to display short messages that disappear after a few seconds (I'll probably split that out into a separate shader after a while, but for now it's part of this one), e.g. I'm using this in DOAXVV to display a notice when the hotkeys are pressed to enable/disable costume mods and change the shadow mode.

To trigger this on a toggle keybinding with one message when the key is activated (first press) and a different message when it is deactivated (second press):

[KeyToggleMods]
Key = no_modifiers F2
z = 0
type = toggle
run = CommandListToggleMods

[CommandListToggleMods]
pre Resource\ShaderFixes\help.ini\Notification = ref ResourceCostumeModsDisabled
pre run = CustomShader\ShaderFixes\help.ini\FormatText
pre z5 = time + 2.0
post Resource\ShaderFixes\help.ini\Notification = ref ResourceCostumeModsEnabled
post run = CustomShader\ShaderFixes\help.ini\FormatText
post z5 = time + 2.0

[ResourceCostumeModsDisabled]
type = Buffer
format = R8_UINT
bind_flags = shader_resource
; "Costume Mods Disabled"
data = 67 111 115 116 117 109 101 32 77 111 100 115 32 68 105 115 97 98 108 101 100

[ResourceCostumeModsEnabled]
type = Buffer
format = R8_UINT
bind_flags = shader_resource
; "Costume Mods Enabled"
data = 67 111 115 116 117 109 101 32 77 111 100 115 32 69 110 97 98 108 101 100

The key binding triggers a command list, of which the pre commands are run when the key is first activated, and the post commands are run when it is deactivated. Both of these cases assign a custom resource containing the message, run the text formatting compute shader and set z5 to the time that the message is to be hidden, which will be "time + <timeout>"

In this example I have two custom resources that hold the messages to be displayed. In this case I'm defining them right in the ini file with data= and the decimal values of each ASCII character in the message, but you can also use filename= to load them from a text file, as is done for the main help text. If you have Python installed you can easily generate these data= lines with:

print(' '.join(map(str,map(ord, "Your message here"))))

I do intend to add the ability to write just data="message" at a later date to simplify this.


To use this for type=cycle key bindings with different messages on each cycle, you can use this:

[KeyShadows]
Key = shift F2
w = 0, 2, 1
type = cycle
run = CommandListShadowsOrig, CommandListShadowsOff, CommandListShadowsOn

[CommandListShadowsOrig]
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOrig
run = CustomShader\ShaderFixes\help.ini\FormatText
z5 = time + 2.0

[CommandListShadowsOff]
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOff
run = CustomShader\ShaderFixes\help.ini\FormatText
z5 = time + 2.0

[CommandListShadowsOn]
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOn
run = CustomShader\ShaderFixes\help.ini\FormatText
z5 = time + 2.0

[ResourceShadowsOrig]
type = Buffer
format = R8_UINT
bind_flags = shader_resource
; "Shadows: Original"
data = 83 104 97 100 111 119 115 58 32 79 114 105 103 105 110 97 108

[ResourceShadowsOff]
type = Buffer
format = R8_UINT
bind_flags = shader_resource
; "Shadows: Off"
data = 83 104 97 100 111 119 115 58 32 79 102 102

[ResourceShadowsOn]
type = Buffer
format = R8_UINT
bind_flags = shader_resource
; "Shadows: On"
data = 83 104 97 100 111 119 115 58 32 79 110

In this case, separate command lists are run for each stage of the cycle that assign a custom resource containing the text to be displayed, run the formatting shader and set a timeout.

Alternatively, if you only specify a single command list it will be run for each stage of the cycle and you could check the current value of w - but be aware that the command list is run *before* w is updated in this case, so you have to check the previous value:

[KeyShadows]
Key = shift F2
w = 0, 2, 1
type = cycle
run = CommandListShadows

[CommandListShadows]
; w hasn't been updated yet, so match the previous value, not the next value
if w == 1
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOrig
else
if w == 0
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOff
else
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOn
endif
endif
run = CustomShader\ShaderFixes\help.ini\FormatText
z5 = time + 2.0

Or, you could forgo the cycle type altogether and use the command list to update w:

[KeyShadows]
Key = shift F2
run = CommandListShadows

[CommandListShadows]
if w == 1
w = 0
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOrig
else
if w == 0
w = 2
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOff
else
w = 1
Resource\ShaderFixes\help.ini\Notification = ref ResourceShadowsOn
endif
endif
run = CustomShader\ShaderFixes\help.ini\FormatText
z5 = time + 2.0

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

Posted 05/05/2018 11:52 PM   
Amazing, as usual :-)
Amazing, as usual :-)

Gigabyte RTX2080TI Gaming OC, I7-6700k ~ 4.4Ghz, 3x BenQ XL2420T, BenQ TK800, LG 55EG960V (3D OLED), Samsung 850 EVO SSD, Crucial M4 SSD, 3D vision kit, Xpand x104 glasses, Corsair HX1000i, Win 10 pro 64/Win 7 64https://www.3dmark.com/fs/9529310

Posted 05/06/2018 01:52 AM   
  134 / 143    
Scroll To Top