Вопрос или проблема
Я ищу программное обеспечение, способное выполнять трассировку лучей для неявных поверхностей (определяемых уравнением f(x,y,z)=0 для достаточно гладкой функции f) с симуляцией рассеянного света. Скорость не важна (я делаю высококачественные рендеры для коротких клипов, а не рендеринг в реальном времени).
- Surfer может это делать, но не поддерживает рассеянный свет.
- POV-Ray может это делать, но больше не поддерживается, и настройка рассеянного света (они называют это радиосити) довольно сложна, очень медленная, и мне не нравится результат.
- Blender может рендерить только небольшой набор неявных поверхностей, которые они называют метаболами (они преобразуются в сетки сразу перед рендерингом), но метаболы недостаточно хороши для того, что я хочу отрендерить (представьте себе идеально круглую тора, которая начинает деформироваться асимметрично); его рендер-движок Cycles имеет нужное качество для меня.
- В настоящее время я работаю с CGAL для создания последовательности сеток и Blender для их рендеринга с плагином Stop Motion OBJ для загрузки последовательности сеток, но рабочий процесс громоздкий и занимает время, CGAL очень сложно использовать, сетки не очень хорошие, мне не удалось исправить их с помощью CGAL, поэтому я исправляю их через Blender, но некоторые исправления нельзя применить пакетно (через то, что они называют модификаторами), и полученные объекты колеблются, а нормали нужно исправить, но я не знаю, как.
Blender может генерировать сетки из любой математической функции, которую вы можете определить на Python.
Встроенный аддон Add Mesh: Extra Objects поддерживает математические функции XYZ, Z и ряд регулярных тел.
Рендеринг и трассировка лучей могут осуществляться с помощью Cycles, как вы уже выяснили.
Графический калькулятор (графический калькулятор) от Pacific Software, похоже, справляется с этой задачей.
Ответ или решение
Существует несколько программных решений, которые могут помочь вам в трассировке лучей для заданных неявных поверхностей, определяемых уравнением f(x, y, z) = 0, с симуляцией диффузного света. Я перечислю несколько вариантов, основываясь на ваших требованиях:
-
Blender:
- Несмотря на то, что вы уже упомянули Blender, это наиболее универсальное решение. Blender позволяет создавать 3D-объекты из математических функций с помощью Python. Вы можете использовать встроенные аддоны, такие как "Add Mesh: Extra Objects", которые поддерживают разные виды математических функций, включая функции Z и другие регуляторные формы.
- После генерации геометрии вы можете использовать движок рендеринга Cycles для получения высококачественных изображений с поддержкой диффузного света. Для создания более сложных форм вам может потребоваться дополнительный скрипт или аддон.
-
OpenSCAD:
- OpenSCAD позволяет создавать 3D-объекты с помощью программного кода. Вы можете задать неявные функции через различные конструкции и математические формулы. Однако рендеринг в OpenSCAD не всегда так качественен, как в Blender, так что вам, возможно, придется экспортировать модели для дальнейшей обработки.
-
Write your own ray tracer:
- Если у вас есть навыки программирования, вы можете написать свой собственный трассировщик лучей, который будет поддерживать рендеринг неявных поверхностей. Хотя это может потребовать значительных усилий и времени, этот подход даст вам полный контроль над процессом и возможность настройки всех аспектов рендеринга.
-
POV-Ray:
- Несмотря на ваши замечания по поводу POV-Ray, стоит отметить, что он по-прежнему может быть полезным для некоторых пользователей, поскольку предлагает возможности для кастомизации через скрипты. Установка диффузных источников света в POV-Ray может потребовать некоторой практики, но если вы будете упорствовать, вы можете получить отличные результаты, хотя и с некоторыми усилиями.
-
Собственные библиотеки:
- Если вы работаете с такими библиотеками, как CGAL, рассмотрите возможность улучшения вашего рабочего процесса через создание пользовательских скриптов. Возможно, стоит использовать библиотеки для генерации мешей, которые более просты в использовании и могли бы лучше справляться с задачами, которые вы ставите перед собой.
-
Графический калькулятор:
- Как вариант, вы также упоминали графический калькулятор от Pacific Software, который может решить некоторые ваши задачи, хотя в принципе это более ограниченное решение.
Наилучшие результаты вы получите, если сочетаете возможности Blender для рендеринга и генерации геометрии, возможно, с некоторыми пользовательскими скриптами для достижения желаемого качества и параметров ваших неявных поверхностей.