VRayMultiSubTex inside BerconTile not working correctly in VRay Standalone

Hello,

we’re using 3ds Max 2026 + VRay 7.3 with the following material setup:

  • VRayMtl → Diffuse: BerconTile
  • BerconTile → Color 1: VRayMultiSubTex (randomized by Tile ID)

Rendering directly from 3ds Max gives a sharp, correct result. Rendering the exported .vrscene via VRay Standalone gives a blurry result

Is BerconTile supported in VRay Standalone? Is there a known workaround to get the same result outside of 3ds Max?

Any help appreciated!

Kind regards,
Algato



Bercon_Tile_Test_2022_01.zip (228 KB)

Add a “Unwrap UVW” modifier on the object and set its map channel to 2, and it should work. Not sure yet why this is needed, I’ll continue investigating.

EDIT: I can’t seem to reproduce it on a new object. I reckon it’s your object’s UVs are messed up. Adding the UVW channel, setting it to map channel 2, and converting the object back to edit poly seems to resolve the issue.

Hi everyone,

I’ve done a complete technical analysis of the BerconTile rendering issues and published everything on GitHub:
GitHub - Alex-BB44/BerconTile-BlurFix: VRay BerconTile blur fix: documented UV derivative bug, working fix for Standalone CPU, GPU behavior proof · GitHub

Three bugs are documented, all sharing the same root cause in BerconSC.h.


[/HR]
Bug 1 — Blurry tiles in VRay Standalone (CPU)

BerconSC::UVW() returns tile-local UV correctly, but DUVW() is never overridden — it delegates unchanged to the original render context. The MIP sampler receives derivatives tile_width / tile_size times too large → too-coarse MIP level → blur.

Working fix today (format-dependent):

  • .tx files: UVWGenChannel.duvw_scale = tile_size / tile_width (e.g. 0.04 for tile_width=25)
  • .png / .jpg: BitmapBuffer.filter_blur = 0.01

Fix tool that patches existing .vrscene files automatically: src/test_blur_fix.py


[/HR]
Bug 2 — Random UV flip breaks normal maps

The per-tile UV flip (U_new = 1 - U_old) is applied to the coordinate but BumpBasisVectors() and DPdUVW() are never updated. The tangent-space X axis points the wrong way on flipped tiles → shading inconsistency across tile boundaries when BerconTile is used in a normal map slot.

Workaround: disable flip_X / flip_Y on the BerconTile node when used for normal maps.

Fix for Chaos: negate the tangent X component in BumpBasisVectors() when a U-flip was applied (Option B), or add a normal_map_mode parameter to skip flips entirely (Option A).


[/HR]
Bug #3 — No texture on GPU (CUDA / RTX)

Tested on VRay Standalone 7 with RTX 3070. Both rtEngine=5 and rtEngine=7 produce a grey surface with explicit warnings:
Bercon tile UV mapping is unsupported
Bercon tile randomization is unsupported

Render proof in the repo (proof/ folder).


[/HR]
Common root cause across all three bugs:

BerconSC (the ShadeContext wrapper in BerconSC.h, Apache 2.0: GitHub - Bercon/BerconMaps: BerconMaps is a 3rd party texture plugin for Autodesk 3ds Max · GitHub) overrides UVW() for tile-local coordinates but never updates the associated vector quantities:
Point3 DUVW(int channel) { return sc->DUVW(channel); } // Bug 1
void DPdUVW(Point3 dP[3], int channel) { sc->DPdUVW(dP, channel); } // Bug 2
int BumpBasisVectors(…) { return sc->BumpBasisVectors(…); } // Bug 2

A single consistent review of BerconSC.h would address all three. The tile geometry algorithm in src/tile.cpp is pure math with no 3ds Max dependencies — GPU-portable as a CUDA kernel.

Happy to answer questions or provide additional test data.

Kind regards
algato

The Bercon maps’ code on GitHub is for 3ds Max, not Standalone (not public). And from what I understood, you’re using Standalone, correct? Otherwise, bravo for finding a workaround. Also, I’ve forwarded the info to our devs to have a look.

Regarding #3: It’s written in the docs.

EDIT: I did some additional testing on your scene and found out that the UVs created by the “Real-World Map Size” option in the Box primitive are the culprit. If I disable it and add a UVW Map modifier (channel 2 so as to trigger Bercon’s UV Fit), I get identical results between STD and 3ds Max.

You can reproduce it within 3ds Max, too - by adding a UVW Map and enabling its own “Real-World Map Size”. This also answers why the initial workaround (with the UVW Unwrap) did the trick.

Thanks for looking into it!

Just to clarify — the blur issue I described isn’t related to Real-World Map Size or UV setup. The test scene uses a standard UVW Map modifier with consistent settings, and the same scene renders correctly in 3ds Max with an identical material setup.

The root cause appears to be inside BerconTile itself: DUVW() is never overridden in the render context wrapper, so MIP-map sampling receives incorrect derivatives when BerconTile tiles the UV space. This produces the blur regardless of how the UVs are set up on the object.

The full analysis with a minimal repro scene is on GitHub — happy to share if that helps the dev team reproduce it independently.

Kind regards
algato

Small update to the GitHub repository — two broken issue links in the README have been fixed, and a ready-to-use scene/demo.vrscene is now included so the demo scene can be rendered directly without running the build script first.

If you’ve visited the page before, please reload: GitHub - Alex-BB44/BerconTile-BlurFix: VRay BerconTile blur fix: documented UV derivative bug, working fix for Standalone CPU, GPU behavior proof · GitHub

Kind regards
algato

Thanks for the thorough work and feedback. I’ve logged the issue (VMAX-15576) for dev investigation and included the info you provided.