[Runtime Feature]: Additional Remix Api Methods
What is the context of the feature/improvement?
Extending the feature set of the remix api.
While the current api already allows for a lot more freedom and interaction with the runtime, it's fundamental scope is to directly interact with the remix renderer without relying on the d3d pipeline and thus, it's lacking a few features for projects that are either not open source or just need simpler methods (game script methods in a way).
Please describe the feature/improvement?
-
Remix Config Variables:
It's already possible to animate remix variables to create event triggered effects or transitions (eg. tonemap color tint) or settings that are applied per map but resetting or transitioning back to the original-saved value is not as straight forward as it's currently not possible to retrieve the value/s of a remix variable so:
- a method to retrieve the current value of a remix variable, eg:
GetConfigVariablewould be a nice addition. - a method to reset a remix variable back to it's saved state, eg:
ResetConfigVariablewould be a nice addition.
As a workaround (and for context):
I'm currently using logic that parses the
rtx.confon game startup and places the remix variables into an unordered_map that holds information about thereset value(the initial conf value), thecurrentvalue and the variabletype. If I now want to change a remix variable via the api, I'm updating thecurrentvalue in the unordered_map and then send it to the runtime viaSetConfigVariableafter crafting the value string. This then allows me to transition back to the original value as long as I properly keep track of the variable.It's up for debate if something like this could be included in the api header (maybe a second header specifically for helper functions) or if that is a community task via "extensions".
🟠 As a side note: It would be really nice if remix variables of type
floatcould be displayed as such in thertx.conf. Meaning adding.fto the value even if it's saved state does not contain any decimals. I'm currently having to interpret everything asfloatas there is no way to differentiate between integers and floats. - a method to retrieve the current value of a remix variable, eg:
-
Mesh / Material Properties
Tweaking mesh / material properties of objects that are not created via the api, meaning objects that the runtime intercepts via the D3D api (if fundamentally possible) would be a nice addition. It would be great if that would also work for objects that already have replacements (via an usd mod layer). Some ideas in that regard:
-
Tweaking specific properties:
User specifies the object hash and the property to change. Function returns the previous value of the property so that the user can restore the property when needed.
-
If the above is possible:
A method to restore all changed object properties back to their default values at once
Conceptually, properties changed in this way would act like the a virtual usd layer with the highest priority? Restoring the original properties would remove all overrides for the given hash in this case.
While all of this is already possible when the object is created and managed via the api, this also requires the user to specifically disable drawing of this object in the game's code (which might require logic similar to the hashing logic the runtime uses to uniquely identify the mesh) and with that, also looses the ability to edit it via the traditional capture -> toolkit -> mod layer way. It's currently this or that. A mix of both worlds would be great is what I'm trying to say.
-
-
Hide / Show USD Layers
I think it would be a really great addition if there was an api method to hide or show usd layers given that they are already part of the mod.usda in either a visible or hidden state. This would come in handy in multiple ways. A user could make specific overrides to certain meshes or materials that can be toggled eg. when a specific event is triggered or when the map changes.
Usage examples:
- enabling a layer containing lights when a map switches to night time
- if a model is used on multiple levels, one could switch that to a different model that is specifically made for that level
It's more or less the same as tweaking individual mesh / material properties but in a more general way and involves toolkit usage which would make it a "best of both worlds" feature 🙂
What would be your solution? (optional)
No response
Version
latest
Media
I've posted a video in the showcase channel on the remix showcase discord with remix variable transitions: https://discord.com/channels/1028444667789967381/1028600697463263314/1269343492199420009
Adding onto Mesh / Material Properties or if another route is thought of
Once we have the ability to talk to meshes not created by API, or if we can manually set a hash
A way to kinda custom AntiCull via saving a meshes hash and force drawing it.
Since the cull is done after a mesh is rendered, the ability to manually set a force draw on that mesh at all times
Its explained more below but tldr would be, I have access to a stable hash, game culls it ,would there be a way to freeze it and force it to draw.
Or possibly in a capture a way to freeze a mesh
WALL OF TEXT FOR PER GAME PROBLEM IM TRYING TO SOLVE AND MAYBE IT WOULD BENEFIT OTHER GAMES
For C&C Renegades:
There is a way to turn off culling but it makes playing unstable and almost unplayable frame rates.
anti culling doest work at all in the game, but all hashes are stable, and the culling is odd, if you walk into a room in back of a church and barely don't look at a wall or roof or floor it will cull and bleed in light, and I can find no stable meshes on any map, so literally if it could remember all manually set meshes it would be an easy fix, I've thought about manually putting on more meshes attached to opposite cull
Ie floor mesh attached to roof, right wall attached to left wall, but that is a stupid amnt of work
Thanks!
REMIX-3419, 3420, and 3421 for tracking each feature separately