#three.js #shader
#three.js #шейдер
Вопрос:
В моей сцене работает InstancedBufferGeometry. Однако некоторые экземпляры являются зеркалами источника, следовательно, они имеют отрицательный масштаб для представления геометрии.
Это меняет порядок намотки этих экземпляров и выглядит неправильно из-за отбраковки задней грани (которую я хочу сохранить).
Я полностью осведомлен об ограничениях этого подхода, но мне было интересно, есть ли способ решить эту проблему, с которой я, возможно, еще не сталкивался? Может быть, какой-то трюк в шейдере, чтобы указать, какие из них являются лицевой стороной, а какие — задней? Я не помню, чтобы это было возможно…
Или я должен выполнять две отдельные загрузки? (Который будет дублировать вызовы рисования) Я загружаю много разных геометрий (которые все созданы), поэтому пытаюсь убедиться, что я получаю максимально возможную производительность.
Спасибо!
Муравей
[РЕДАКТИРОВАТЬ: добавлено немного больше деталей]
Ответ №1:
Было бы полезно, если бы вы привели пример. Насколько я понимаю ваш вопрос, простой ответ — нет, вы не можете этого сделать. Насколько мне известно, примитивы отклоняются до того, как они попадают в шейдер, а это означает, что это не в вашей власти. Если вы хотите использовать отрицательное масштабирование и убедиться, что поверхности все еще видны, включите рендеринг обеих граней (передней и задней). В качестве альтернативы, вы могли бы просто вращать объекты и придерживаться положительного масштаба — если вам нужно зеркальное отображение — вам здесь не повезло. Еще одна идея: у вас есть 2 экземпляра объектов, один с нормальной геометрией и один с зеркальным отображением, вы можете исправить нормали в зеркальной геометрии.
Комментарии:
1. Спасибо за ваш отзыв, Травник. У меня сложилось впечатление, что это будет ответ, но, поскольку я все еще изучаю все тонкости, мне было интересно, есть ли какой-то особый соус, который я могу пропустить… В настоящее время я подумываю о том, чтобы попробовать другую тактику, поскольку наличие двух экземпляров удвоит вызовы draw, если я хочу сохранить отбраковку backface. Приветствия!