Самый надежный и простой способ работы с самозатенением и 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:
Вот ссылка на 5-минутное видео о том, как сделать UV-картутекстуры в Maya.
Или, как еще более простое решение, вы можете нарисовать UV-mapped Diffuse texture
в приложении, похожем на Photoshop, используя полупрозрачную кисть черного цвета .
Затем назначьте теневую текстуру через слот diffuse
:
node.geometry?.materials.first?.diffuse.contents = UIImage(named: "diffuseWithShadows.png")