Too many String input pins

 

Hello, I have huge data table in Unreal that I need to feed via json from aximmetry de, but aximmetry have some kind of limit for input pins. I have roughly 60 pins with text3d component that I need to feed with data. Is there any workaround? Maybe in Unreal set some kind of collection? It´s table with 6 items per row and I have 10 rows.

Thanks!

D.

   Borgis

 
Profile Image
Borgis
  -  

I think I´m on a good path here, but somehow it just dont accept text from collection via set collection text. Anyone? Eifert@Aximmetry?Too many String input pins

 
Profile Image
Borgis
  -  

Nevermind. I´ve solved it! All I need was name strings in json same as name in blueprint. Now it works!

 
Profile Image
Borgis
  -  

Okay, so I´m back with this question, cause I need to somehow bypass this limit. Is there any way how to bypass it? I´m doing everything via collections in BP, but now I´ve reached this limit again and I need to solve it. It´s for live match statistics and other sport stuff. Eifert? Anyone? :)

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

Yes, even with collections, you have a limited number of pins available. To reduce the number of pins, you should put the statistics of a single item into a text data type and then parse it in Unreal. For a detailed example, see the end of my last post here:
https://my.aximmetry.com/post/2314-dynamically-changing-get-aximmetry-pin-nhttps://my.aximmetry.com/post/2314-dynamically-changing-get-aximmetry-pin-n

Note that you can still use collections alongside this approach.

Warmest regards,

 
Profile Image
Borgis
  -  

Thanks, can you please point me how to hook it into text3d component? Right now it looks a lot like yours, but I dont know how to feed those set text via array - https://blueprintue.com/blueprint/9qi5_u-b/

Thanks!

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

You can make an array from anything if nothing is connected to the Make Array node:
Too many String input pins
Once something is connected to it, the node will then act as the data type that is connected to it.

Actually, I just discovered a node called Select, which is even easier to use than Make Array.

You can turn the Object Reference of an Actor to the text3d component with the Get Text 3D Component.
You might want something like this example:
https://blueprintue.com/blueprint/373w4-b5/

Where, if the text for the MultiText pin of Get Aximmetry Text is A, B, C then the first Text3D object will have the text A, the second will have B, and the third will have C.  This is because the Parse Into Array node uses a comma (",") as the Delimiter.

Warmest regards,

 
Profile Image
Borgis
  -  

Eifert@Aximmetry you are lifesaver! It works. Thanks!! One I hope last question. How can I get it to work if I can also change scale3D Z axis of mesh? Only Z.

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

You  can achieve that with the Set Actor Transform blueprint node, as demonstrated here: https://aximmetry.com/learn/virtual-production-workflow/preparation-of-the-production-environment-phase-i/obtaining-graphics-and-virtual-assets/creating-content/creating-content-for-aximmetry-de/additional-control-with-blueprints/#get-aximmetry-transformation

Note that to see all three scale axes in Aximmetry, you need to set the Transformation pin to Pos-Rot-ScalXYZ:
Too many String input pins

Warmest regards,

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

If you only want to change the scale and not other aspects of the transformation, you can split the transformation of the Get Aximmetry Transformation blueprint node:
Too many String input pins

Then, connect it to a Set Actor Scale 3D node:


If you only want to change the scale on one axis, split the vector of the Set Actor Scale 3D:
Too many String input pins

Then, connect it with Get Aximmetry Scalar and Get Actor Scale 3D (which you will also need to split) as below:

Warmest regards,

 
Profile Image
Borgis
  -  

Your solution works perfectly, but I need to map it into dataset, something like before (https://blueprintue.com/blueprint/tpzu-da4/) but this obviously doesnt work.

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

It depends on the dataset you're working with.
If your dataset contains only numerical scales in the data-stats text pin, you should use the String to Float node in the blueprint:

Note that you don't need the Branch node in this scenario.

Warmest regards,


 
Profile Image
Borgis
  -  

It will be singleline csv with values range from 0 to 1, so I guess I will use "," as separator and "." for scale value since it will be scalar number? For example in dataset will be "0.78,0.62,etc,etc". Am I right?

EDIT:
Quick test, and this doesnt work :( https://blueprintue.com/blueprint/z7vcm400/

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

For some reason, my screenshot didn't appear in my last post. You should connect the String to Float like this and then it should work with text like "0.78,0.62,etc,etc":

Warmest regards,

 
Profile Image
Borgis
  -  

Awesome! It works. Also it tanks FPS (CPU usage) little bit. Dont you know why exactly? When I did it "old way" it doenst take too much resources then with this array setup.

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

To optimize your performance, you could consider breaking the tasks into smaller arrays and only executing them when changes occur. Currently, it’s connected to the Event Tick node, which runs every frame. Instead, execute them only when your data updates, if your data isn’t constantly changing.

You might not have noticed an increase in CPU usage previously because you likely had fewer Actors. The above logic actually executes as many times as there are items in the text you are parsing and not as many times as there are actors in Unreal.

If you're creating an overlay display for stats, you can accomplish this in Aximmetry with less performance overhead. While the appearance of it can be nearly identical, as rendering text is quite similar across different rendering engines.
If you're working with 3D elements, Aximmetry can render them as well in large numbers. There are examples of that at: [Tutorials]: Instancing\

Warmest regards,

 
Profile Image
Borgis
  -  

Hi Eifert! You are so god damn king! First of all, let me thank you for all of your support. Second to topic. Our statistics are static json (data are not live) with data of past soccer matches and team statistics, so we are not updating data per se. In final draft there are two tables. One huge with almost 120 text elements (table with league statistics like wins, losses, overtimes, rank, score etc.) and one smaller which contain specific statistics to past matches with 10 text elements and 10 bars.

Performance is good when small table is fed directly via blueprint (old school way = 10x get aximmetry text to text element, 10x get aximmetry scalar to bars and statistics will change via index (row) in json). 

CPU usage will go up, if I create those two tables via array that we discussed in this thread earlier. What if I use some kind of limitter or timer to those loops? Is it possible? I guess we dont need it to update every frame, just load data and trigger change via button. Also that big data table can be static cause in time of broadcast those data will be closed until next broadcast (reaction to last league round).

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

Thank you for the kind words.

If it is not live data, then you don't need to worry about optimization. The blueprint I showed was executed at every frame (via the Event Tick node), but with non-live data, you only need to run it once.

The best approach is to use a trigger pin with the Get Aximmetry Trigger to update data in Unreal. You can learn more about the Get Aximmetry Trigger here:  https://aximmetry.com/learn/virtual-production-workflow/preparation-of-the-production-environment-phase-i/obtaining-graphics-and-virtual-assets/creating-content/creating-content-for-aximmetry-de/additional-control-with-blueprints/#get-aximmetry-trigger

You'll need something like this:
https://blueprintue.com/blueprint/57cp93cl/

In Aximmetry, use the Start trigger pin from the Get Aximmetry Trigger to update the data in Unreal.
For instance, you can implement the following modules to make it fully automatic: the Text Changed module updates the data only when it changes, and the Timer module updates it when the compound starts:

Warmest regards,

 
Profile Image
Borgis
  -  

Hi, like I´ve said, you are best! One probably for a while last thing, not related to data. Sometime we occur message in log "[Blackmagic: DeckLink 8K Pro (1) [1]] Blackmagic: DeckLink 8K Pro (1) [1]: 1 frame(s) missed" and from that moment audio will desync. This is our setup. We are using multi-machine setup. Audio goes separate from transmitters to audio deck, Cam that will desync audio issues is one that is on master aximmetry. Slave cams on slave PC´s will remain sync. Is anything in this preferences that could solve it? Only solution what I have found was to STOP and then PLAY project again. Thanks!

 Too many String input pins 

 
Profile Image
Eifert@Aximmetry
  -  

Hi,

To resolve the "... frame(s) missed" error, you should make sure that nothing turns red in the Processor Load panel. More details on the Processor Load panel here:  https://aximmetry.com/learn/virtual-production-workflow/preparation-of-the-production-environment-phase-i/inner-workings-of-aximmetry/rendering-settings/#processor-load-display
It's likely that your controller machine is receiving or doing more than the slave PCs with similar hardware, which causes it to become overloaded compared to the slave PCs.

If your computer has no performance issues, then you could try increasing the In to Out latency to see if that resolves the issue:Too many String input pins

If increasing the latency does not help, you should revert it to a low value.


Regarding the audio desynchronization, could you specify what device is being used to output the audio to the audio deck? This information will help us determine why there is a desynchronization when frames are missed.

You can potentially fix the audio desync without stopping the compound by toggling the Audio Out's Open pin Off, and then On:

Warmest regards,

;