-
Notifications
You must be signed in to change notification settings - Fork 224
Tracks – Local cubemaps
Usually all the things in AC use one global cubemap (like a 360° picture) shot around camera position for reflections. Because of that, if you have a glossy building, for example, when camera moves, reflections start to move too, often too much:
Notice how reflection changes even though the angle between look direction and building surface doesn’t change.
And this is how this glass looks with local cubemap:
[LOCAL_CUBEMAP_...]
MESHES = base_vetri ; list of track meshes to have their own cubemap
POSITION = 100, 1, 10 ; (optional) cubemap position, if not set, center of meshes will be used
OFFSET = 0, 0, 0 ; (optiona) offset for position guessed from meshes
EXCLUDE = base_vetri ; list of meshes to exclude from cubemap (speeds things up as well)
CLIP_PLANE_NEAR = 2 ; near clipping plane, meters (might help to remove reflections from close things)
HIGH_RESOLUTION = 0 ; set to 1 to use high resolution cubemap (for large flat surfaces)
LOW_RESOLUTION = 0 ; set to 1 to use low resolution cubemap (for dynamic cubemaps)
IS_DYNAMIC = 0 ; set to 1 to switch to dynamic mode
DYNAMIC_FAST = 0 ; (not recommended!) set to 1 to update one face per frame
STATIC_FACES = TOP, LEFT, REAR, BOTTOM ; static faces to exclude from dynamic updates (see tips)
INCLUDE_SKY = 1 ; set to 0 to exclude sky and speed things up a tiny bit (if not needed)
INCLUDE_CARS = 0 ; set to 1 to include cars
DYNAMIC_LIGHTING = 0 ; set to 1 to include lights in reflection
DEBUG = 0 ; set to 1 to see the center of cubemap and static faces highlighted red
DEBUG_CLEAR = 0 ; disable sky and set to 1 to test refresh rate
With dynamic cubemap and shown cars, you can make those mirrors more lively:
But please be careful, that stuff is pretty expensive. If you have several mirrors on a track, you can use the single moving local cubemap to cover all of them:
[LOCAL_CUBEMAP_...]
POSITION_0 = 10, 1, 100 ; position of first mirror
POSITION_1 = 10, 1, 200 ; position of second mirror
POSITION_2 = 10, 1, 300 ; position of third mirror
...
And cubemap will move to the position which is closer to viewer.
-
Don’t worry about static cubemaps with changing time of day: even static ones will update from time to time to follow changing lighting conditions.
-
Please remember about performance. Avoid using high resolution, dynamic, lighting or cars unless needed.
-
One cubemap with low resolution takes 2.6 MB of VRAM, with normal resolution — 12.5 MB, with high resolution — 50.3 MB. Keep that in mind as well, please.
-
Do not use
DYNAMIC_FAST
unless there is a real need for it. -
Without
DYNAMIC_FAST
, local cubemap updates a face once every couple of frames or so. Usually though, only a couple of faces needs to be updated frequently. Mark other ones inSTATIC_FACES
(usingDEBUG = 1
to check which ones are which) and one face per couple of frames would be more than enough (as in that GIF). -
I suggest to position cubemaps manually. Keep in mind, cubemap reflections are 100% perfect for a surface point at the center of the cubemap, and the further points are from the center, the less accurate reflections become. If you have a big building with glass windows, position cubemap closer to the side facing the track, and maybe a bit lower, so mainly visible area would look more accurate at expense of other sides.
-
Another way to use this thing is to have one static cubemap for a lot of objects all over the track where you don’t need good reflections, just need to stop them from moving and be in a certain theme. For example, windows of houses in Highlands. With something as simple like that:
[LOCAL_CUBEMAP_...] MESHES = material:House_02, material:house? POSITION = 842.36, 6.79, 612.28 ; position somehere in that town, so houses would reflect some other houses LOW_RESOLUTION = 1
Those windows will get a nice stable reflections and since it’s not dynamic and in lower resolution, it might actually render faster than original (considering user would use cubemaps with resolution higher than 256×256).
-
Or, even set position somewhere from above, so it would be mainly sky.
Settings listed in Syntax paragraph are the ones used by default for all cars.
If you have any question or suggestions, please feel free to add a new issue.
- Enabling Extended Physics
- Aerodynamics
- Body Flex
- Custom Suspension Joints
- Driver Weight Shift for Karts
- Extra Turbo Options
- More Clutch Damage
- New Inputs for Dynamic Controllers
- Physics Scripts
- Setup Items Driven By Controllers
- Suspension
- Cosmic Suspension
- Tyre Types
- Enabling Extended Physics
- General Options
- Custom Raycasting
- Collision Parameters
- Dynamic Physics Objects
- Geometric colliders
- Surface Tweaks
- Extra FX Flags
- Extra FX Emissive
- Mesh Adjustments
- Model Replacements
- Shader Replacements
- Scene Queries
- UV2
- General Options
- Analog Instruments
- Animations
- Digital Instruments
- Emissive Objects
- Extra Switches
- Inputs
- LED panels
- Multichannel Emissives
- Vintage Tachometers
- Audio
- Brake Disc FX
- Deforming Bonnets
- Driver Model
- Exhaust Smoke
- Exhaust Flames
- Extra Lights
- Fake Shadows FX
- Local Cubemaps
- Mesh Splitting
- Miscellaneous Options
- Neck FX
- Node Adjustments
- Smart Mirror
- Sparks
- Tyres FX
- Visually Adjustable Wings
- Wheels
- Wobbly Bits
- Wobbly Wipers