Heya. Been a bit since I was able to touch base (work has been keeping me rather occupied), but I was wondering if youâd had a to give any more thought to adding the ability to take a Texture2D reference and extract a pixel array from it? I think that would be an extremely useful extension of your existing LoadTexture2DFromFile function. Keep up the awesome work! Cheers,
I just wanted to say big THANK YOU for your vertex access blueprint nodes. They have been instrumental towards the success of my thesis defense.
Using your vertex nodes, I created a variation to Far Cry 3âs fire propagation system. My thesis is called Material Based Fire Propagation & Degradation that spreads fire based on underlying material surface. The system developed to prove the thesis is an intelligent tool that spreads fire without requiring manual scripting like spline paths etc. the user has to do is click on an and fire will start from there and spread based on the material properties (plastic, wood, paper etc). tool now helps designers build pyro levels quick without having to manually plot spawning points for fire.
If there is some way to share my google drive with you, I can provide access to my thesis system (exe) and my presentation slides. That way you can see how your nodes have actually turned out.
Hi, has anyone tried to use the Victory plugin with the nVidia branches, I canât make my game compile, when I include the Victory plugin. (It compiles fine, when I delete the Victory folder from Plugins in my project.)
Hiya . So Iâm just now getting around os using your read texture from file pixels function in earnest and Iâm finding that it seems to be slowing my function down significantly. If I bypass the Get Pixel node in my function, performance triples or quadruples. Is a known or is that just the nature of the beast? Is there anything I can do to optimize it? If you need details or want the project Iâm working with I would be happy to send it your way. Thanks again for the awesome work and tools youâve provided. Cheers!
J^2
Edit: I was able to track down to the resolution of the heightmap I was using. If I use a 512x512 image, it takes one or two seconds. If I use a 2K image, it takes 30 seconds. Which makes sense as a 512x512 image is 262,144 pixels but a 2K image is 4,194,304 pixels, i.e. a non-linear increase. That being said, is there anything that can be to optimize the performance of function? If not, no worries. But if so, that would be awesome since it is such a useful tool. Thank you again so much for both making it and then giving it away for free! Cheers again!
Has anyone tried usingâs .ini writing nodes to modify values in engine-generated ini files (like key mappings and visual settings)? Or does it only work with custom .ini variables?
Yes its a great node idea J^2 ! I look forward to working on it at my next opportunity!
Nice to hear from you!
To make it any faster Iâd need multi-threading powers within the BP node, the is just how big the array becomes (4 million+) and the fact that I dont have an easy way to break up the work within a static function context where the user expects the output as soon as the node is executed
I need to see the compile errors / output log errors that youâre getting in order to help further, I am including PhysX libraries in the plugin.
My ini file nodes specifically work with Game.ini (comes from DefaultGame.ini), so you cant modify vars in DefaultEngine / Saved/Config/[OS]/Engine.ini
I chose Game.ini simply because Engine.ini is full of lots of stuff and the intent of node was to provide a space to make new vars of your own that are game specific.
To modify config vars you can type them into the console (or use ExecuteConsoleCommand), example:
** node will move / rename the most recently taken screenshot!**
So the intended work flow is
Exec Console Command -> âHighResShot 2â or âshot showuiâ
Possibly put in a short Delay node
Use my new node! ScreenShots Move Rename Most Recent!
**More Power for You in BP**
Now you can specify an absolute path directory and also file name for the most recent screen shot, and it will be relocated for you!
So please note you can only do **after** you create the image using UE4's console commands.
Bonus For You
You can specify a destination folder that does not exist yet and my node will create it for you!
is great for if you delete your custom screen shots folder and expect my node to work anyway!
My node will!
**High Res vs Regular Screen Shots**
You can filter for High Resolution and regular screen shots independently using my node!
So if you have High Res selected, ONLY High Resolution screenshots are considered when sorting by file.
Otherwise, if is unchecked, I will ONLY look for regular screenshots taken with "shot showui"
:)
Keep in Same Directory?
To keep the file in the same directory, use my new Paths node that retrieves your projectâs ScreenShot directory!
**Pro Tip**
If you have a bunch of shots, you can:
1. use my node in a for loop with a break and a count of 1000, (or while loop if you are feeling confident)
2. Ensure that you are moving the files OUT of their current directory (otherwise for loop will run to its limit)
3. The break condition is when my new node returns false, so just plug the false end of the branch right back into the break condition!
will work because my node is only checking the dates of the files that are within the screenshots directory, so as you keep moving the files out, my node will keep finding the new most recent picture!
My C++ Code For You
I had to write a lot of custom File Operations code to fulfill request, so a lot of the functions you see in node are not stock UE4 code.
bool UVictoryBPFunctionLibrary::ScreenShots_Rename_Move_Most_Recent(
FString& OriginalFileName,
FString NewName,
FString NewAbsoluteFolderPath,
bool HighResolution
){
OriginalFileName = "None";
**//File Name given?**
if(NewName.Len() <= 0) return false;
**//Normalize**
FPaths::NormalizeDirectoryName(NewAbsoluteFolderPath);
**//Ensure target directory exists,
// _or can be created!_ <3**
if(!VCreateDirectory(NewAbsoluteFolderPath)) return false;
FString ScreenShotsDir = VictoryPaths__ScreenShotsDir();
**//Find screenshots**
TArray<FString> Files; //false = not recursive, not expecting subdirectories
bool Success = GetFiles(ScreenShotsDir, Files, false);
if(!Success)
{
return false;
}
**//Filter**
TArray<FString> ToRemove; //16 bytes each, more stable than ptrs though since RemoveSwap is involved
for(FString& Each : Files)
{
if(HighResolution)
{
//remove those that dont have it
if(Each.Left(4) != "High")
{
ToRemove.Add(Each);
}
}
else
{
//Remove those that have it!
if(Each.Left(4) == "High")
{
ToRemove.Add(Each);
}
}
}
**//Remove!**
for(FString& Each : ToRemove)
{
Files.RemoveSwap(Each); //Fast remove! Does not preserve order
}
**//No files?**
if(Files.Num() < 1)
{
return false;
}
**//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 's Sort Files by Stamp
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Sort the file names by stamp
// is my custom c++ struct to do ,
// combined with my operator< and UE4's
// TArray::Sort() function!**
TArray<FFileStampSort> FileSort;
for(FString& Each : Files)
{
FileSort.Add(FFileStampSort(&Each,GetFileTimeStamp(Each)));
}
//Sort the file names by their Stamp!
FileSort.Sort();
//Biggest value = last entry
OriginalFileName = *FileSort.Last().FileName;
**//~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
**//Generate new Full File Path!**
FString NewFullFilePath = NewAbsoluteFolderPath + "/" + NewName + ".bmp";
**//Move File!**
return RenameFile(NewFullFilePath, ScreenShotsDir + "/" + OriginalFileName);
}
**How It Works**
The core of my logic and node is that I used a custom C++ struct in order to sort of the files by date!
**I do in a super-efficient way, using UE4's TArray::Sort function which leverages of Epic's hard work to create a fast sorting function!**
I defined the C++ **operator<** for my custom struct so that UE4 could do the sorting for me!
**In addition I have developed my own File I/O library since my in the UE4 Beta program.**
So I had the supporting functions I needed!
C++ Code Speed
Please note that in my internal file sorting system I do not duplicate the FString data! I refer to it via pointer, and use the FDateTime as the only data I access.
So essentially my custom C++ struct is a FDateTime wrapper for a FString ptr so that UE4 can sort the files for me like Lightning!
**Latest plugin download on the UE4 Wiki: (7.93 mb) **
https://wiki.unrealengine.com/File:VictoryPlugin.zip
Victory Plugin on Media Fire
If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!
Please note clicking link will not start a download instantly, it will just take you to the Media Fire file description.
I am at my laptop right now, but the compiler complains that it canât find the Physx include libraries. I will send the log when I get back to my devmachine.
Edit: So John pointed out how to do it, so nevermind my request.
Cheers,
, do you think it would be useful to have an event which is frame independent?
The current Event Tick fires every single frame, something which isnât that consistent when getting low fps. I know you can use Delta Seconds to accommodate a bit, but as far as I understood it you are limited how far. Another thing would be that it doesnât change how often the event gets fired, so I think a proper solution would be nice and since I think it might be useful for everyone using BP it might be a good request.
I donât know if Event can use parameters, otherwise I would say a parameter which determines how often per second the event should be fired would be nice.
PS: If itâs already possible to have a frame independent solution within BP which is basically an event which fires 50 times per second for example, then you can ignore request ^^
If you want an event to fire 50 times a second you would create a custom event and set a timer for custom event in begin play and set the timer to 0.02 seconds and tick âloopingâ. Then your custom event will fire 50 times a second, frame independent.
Thank you!
I misunderstood what timers were for, so I didnât think about using them. Now after you mentioned it I checked the docs, tried it out and it works perfectly.
Again, thank you.
i dont mean to be any rude but guys i head into problem in ue4 but no one answering it so i try to post at several threads is a real dead end for me pls help me fix blueprint