Как включить затенение в складках 3D модели? - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь настроить черную тень в областях глубины продукта на сцене ARKit, но безуспешно. Я пробовал с этим кодом:

node.geometry?.materials.first?.ambientOcclusion.contents = 0.5

Я приложил требуемое изображение результата и изображение текущего результата.

Текущий результат

enter image description here

Ожидаемый результат

expected result

1 Ответ

0 голосов
/ 11 июля 2019

Самый надежный и простой способ работы с самозатенением и Ambient Occlusion для 3D-моделей заключается в создании подделкиUV-mapped texture для этого (вместо рендеринга самозатенения в сгибах в реальном времени).Так что с поддельной текстурой AO на 3D-модели нагрузка на CPU / GPU минимальна, и ваша батарея также очень вам благодарна.

Для создания текстур Diffuse и Ambient Occlusion с UV-отображением вам понадобится UV Texture Editor, который вы можете найти в любом популярном приложении для 3D-авторинга (например, Maya или 3dsMax).После рендеринга текстуры AO с UV-отображением ( в виде четырехканального PNG-файла с предварительно умноженным альфа-значением RGBxA ) вы можете просто назначить ее, используя этот код:

node.geometry?.materials.first?.ambientOcclusion.contents = UIImage(named: "AO.png")

Посмотрите на эти 2 uv-сопоставленные текстуры, хранящиеся в 2 разных файлах png:

enter image description here

Вот ссылка на 5-минутное видео о том, как сделать UV-картутекстуры в Maya.

Или, как еще более простое решение, вы можете нарисовать UV-mapped Diffuse texture в приложении, похожем на Photoshop, используя полупрозрачную кисть черного цвета .

Затем назначьте теневую текстуру через слот diffuse:

node.geometry?.materials.first?.diffuse.contents = UIImage(named: "diffuseWithShadows.png")

enter image description here

enter image description here

...