Войти
Blender cообществоФорум

Артефакты при отрисовке созданной в Блендере модели с помощью OpenGL

#0
12:59, 11 мая 2010

Я отрисовываю  с помощью ОпенГЛ 3д-модели, созданные в Блендере (экспортирую модели из Блендера в h файл с помощью http://iphonedevelopment.blogspot.com/2009...er-export.html).
При открытии моделей в Блендере они выглядят правильно. При отрисовке с помощью программы на поверхности модели видны черные трехугольники (самма модель раскрашена в серый). При вращении и приближении модели треугольники "меняют" свое расположение на поверхности модели.
В чеи вероятнее всего может быть причина появления артефактов и как от них избавиться?

В самой ОпенГЛ-программе все просто, поэтому полагаю, что следует разбираться с настройками  в Блендере.

Модель очень простая - тело , раскрашенное в серый цвет (vertex paint). Волосы покрашены в черный. больше цветов нет.
На скриншоте показана голова (волосы) - на ней глюк очень замеетен. Возможно, это связано с тем, что модель сначала полностью красилась в серый цвет, а потом волосы красилисьв черный?

Обратл внимание - чем ближе модель, тем менее заметен артефакт (меньше "неправильных" треугольников)

#1
14:20, 11 мая 2010

Если повернуть модель лицом (чтобы окрашенная в черный цвет часть была не видна) - то через серое лицо "просвечивают" черные тругольники.

#2
14:46, 11 мая 2010

Petya
> При вращении и приближении модели треугольники "меняют" свое расположение на поверхности модели.
Пахнет Z-fight'ингом. Проверь, что в модели нет дублирующихся треугольников, треугольников, лежащих в одной плоскости и т.д.
Проверь также нормали. Все ли смотрят наружу.
Если можешь, выложи blend-файл с проблемной моделью тут.

#3
13:17, 12 мая 2010

В самой модели только один глючок.
На внутренней стороне шапки волос, прямо на макушке:
issue0 | Артефакты при отрисовке созданной в Блендере модели с помощью OpenGL

При рендере страдает вся модель, или только волосы?
Тут остается только грешить либо на экспортер (кстати, линк дохлый, или некорректно вставлен),
либо на буфер глубины дивайса. Волосы не двухсторонние, а вполне себе объемная шапка, с уверенной толщиной между внешней и внутренней стороной.
Тут еще вариант - что за формат на выходе экспортера, и не рубит ли он точность, пригоняя координаты вершин к целочисленным на грубой сетке.

#4
13:28, 12 мая 2010

Толко волосы

Ссылка - вот
http://iphonedevelopment.blogspot.com/2009/07/improved-blender-export.html

На выходе - h-файл , такого вида

static const ColoredVertexData3D modelData[] = {
  {/*vert:*/{-3.058000, 1.155600, 7.883200}, /*normal:*/{0.596545, -0.233161, -0.767937}, /*color:*/{0.654902, 0.654902, 0.654902, 1.000000}},
...
};

Глюки возникают на видимых частях модели, за которыми имеются (не видимые с текущей позиции) части модели другого цвета. Например, если смотреть на черные волосы, то глюк возникает ( за черными волосами есть серое лицо, не видимое с текущей позиции).

#5
17:03, 12 мая 2010

ох жестокий формат... Никакой индексации.

>Глюки возникают на видимых частях модели, за которыми имеются (не видимые с текущей позиции) части модели другого цвета.
Тест глубины включен? А то может случиться, что задние фейсы нарисуются поверх ближних, просто потому, что они рисуются позже (лежат дальше от начала массива вершин).

#6
11:01, 13 мая 2010

Включен

#7
11:38, 13 мая 2010

Обратил внимание - чем ярче пятно окраски, тем заметнее артефакт (больше треугольников "неправильного" цвета)
Модель tsvetok и скриншоты из программы Screenshots

#8
13:42, 13 мая 2010

Ищи грабли в коде на своей стороне.
Вот прям щас прочитал tsvetok, экспортированный тем скриптом. И влобно отрисовал (жаба).
Получается ровно то же, что и в блендере:

table | Артефакты при отрисовке созданной в Блендере модели с помощью OpenGL

Проверь, что ты не рисуешь ту же модель дважды в своем коде. С разными материалами, или освещением.

#9
16:06, 14 мая 2010

Спасибо!
Проверю.

#10
13:45, 21 мая 2010

Проверли - все вроде бы ок.
Обратил внимание - если повернуть стол вверх ногами, то ярко-красное пятно и вазу видно "сквозь" стол, хотя стол имеет толщину.
Скриншот Screenshot 2010.05.21 13.37.58 | Артефакты при отрисовке созданной в Блендере модели с помощью OpenGL

#11
16:27, 21 мая 2010

Какая разрядность буфера глубины на устройстве, и какие стоят расстояния до near/far плоскостей отсечения?

#12
13:53, 22 мая 2010

Petya
блендинг проверь

#13
11:32, 24 мая 2010

Нашел похожую проблему
http://www.iphonedevsdk.com/forum/iphone-sdk-development/5239-ope… -culling.html


Исправил так
const GLfloat zNear = 1.0f /*0.01*/ , zFar =  /*1000.0*/ 5000.0f,
(в комментариях старые значения) - проблема исчезла
RPGman, большое спасибо!

#14
12:24, 24 мая 2010

Petya
> Исправил так , zFar = 5000.0f,
Т.е. это все-таки был Z-fighting.
Совет - оцени, каких масштабов будет сцена, и не задвигай zFar так далеко.
Приравняй виртуальный метр в сцене реальному метру. Если игровая сцена охватывает вглубь ну максимум сотню метров, так ли нужно отодвигать заднюю плоскость на расстояние 5 километров?
Точность буфера глубины очень сильно хромает при огромных значениях zFar (как и при маленьких значениях zNear).

Blender cообществоФорум

Тема в архиве.