Цитата:
Сообщение от Firefox3860
Sanderfol, это "естественный" баг 3d-рендеринга, связанный с z-буфером. Когда более дальняя полупрозрачная поверхность рисуется в кадре после ближней, то её пиксели, перекрываемые ближней, отбрасываются, как и происходит со всеми остальными, непрозрачными поверхностями. Вообще, это должно решаться на уровне движка - путём сортировки на каждом кадре всех полупрозрачных поверхностей в зависимости от их дальности от камеры и отрисовки их в соответствии с этим порядком: от самых дальних к самым близким.
Ты, наверное, видел этот же баг с альфа-текстурами, когда делал свою визуализацию 4ds. Я, когда делал свою, тоже с этим столкнулся, у меня в программе идёт сортировка по лок. осям объектов. Но этого всё равно не достаточно, так как лок. ось не совпадает точно с каждой точкой геометрии объекта. В идеале надо сортировать по полигонам или отдельным вершинам, но это крайне сложно, и тоже идеальный результат не гарантирует...
В общем, это вина логики движка, а редактированием моделей это не исправить.
|
Я понял, что проблема кроется на уровне самого движка, хотя надеялся обойти её в 4DS с помощью экспериментов с флагами рендера. Кстати, в 4DS предусмотрен Z-bias (Depth bias), но он нужен лишь для предотвращения Z-fighting'а с обычными поверхностями. Как мне объяснили на MafiaHub, этот баг с некорректной сортировкой объектов с альфа-текстурами действительно можно исправить, но для этого придется лезть в код движка. То есть необходим реверс-инжиниринг (через Ghidra или IDA Pro), а затем - исправление логики (возможно, с привлечением ИИ вроде Claude или ChatGPT). В итоге, чтобы не тратить время на движок, проще сделать одну плоскость с альфой и забыть о проблеме))
|