Как включить затенение в складках 3D модели?
Я попытался установить черную тень в областях глубины продукта в ARKit
сцена, но не успех. Я пытался с этим кодом:
node.geometry?.materials.first?.ambientOcclusion.contents = 0.5
Я приложил требуемое изображение результата и изображение текущего результата.
Текущий результат
h ttps:https://stackru.com/images/9408c7f2261e1cf527770fbb8e7a1663b7c247c0.jpg
ожидаемый результат
h ttps:https://stackru.com/images/524ce94b1d101c4c5a4a5f906dff2a2cd5fd0c72.jpg
1 ответ
Самым надежным и простым способом работы с самозатенением и Ambient Occlusion для 3D-моделей является создание подделки UV-mapped texture
для этого (вместо рендеринга самозатенения в складках в реальном времени). Так что с поддельной текстурой AO на 3D-модели нагрузка на CPU/GPU минимальна, и ваша батарея также очень вам благодарна.
Для создания UV-карт Diffuse и Ambient Occlusion вам понадобится UV Texture Editor
что вы можете найти в любом популярном приложении для создания 3D (например, Maya или 3dsMax). После рендеринга текстуры AO с UV-отображением (как четырехканальный PNG-файл с предварительно умноженным альфа-значением RGBxA) вы можете просто назначить его, используя этот код:
node.geometry?.materials.first?.ambientOcclusion.contents = UIImage(named: "AO.png")
Посмотрите на эти 2 uv-mapped текстуры, хранящиеся в 2 разных файлах png:
Вот ссылка на 5-минутное видео о том, как использовать uv-map текстуры в Maya.
Или, как еще более простое решение, вы можете нарисовать
UV-mapped Diffuse texture
в Photoshop-подобном приложении, используя полупрозрачную кисть черного цвета.
Затем назначьте теневую текстуру с помощью diffuse
слот:
node.geometry?.materials.first?.diffuse.contents = UIImage(named: "diffuseWithShadows.png")