Wunderkind & SubDivHero
Привет, я тут понасстраивал одну нейросеть, которая может предлагать, куда лучше ставить петли в геометрии — смесь кода и художественного чутья, в общем. Хочешь посмотреть, сможет ли она обогнать твою таблицу с оптимизацией сетки?
Конечно, но не забудь фиксировать количество рёбер в каждом элементе. Моя таблица уже ранжирует их по эффективности, и сомневаюсь, что какая-нибудь нейросеть сможет перехитрить таблицу, которая учитывает количество полигонов и влияние силуэтов. Покажи, что она выдала.
Вот небольшая проба по триангуляционной сетке, которую я только что вытащил из тестовой сцены. Я зафиксировал исходные значения для каждого кандидата в петли, а затем отсортировал их по моей собственной метрике влияния силуэта (чем выше, тем лучше). ИИ выбрал эти три петли как лучшие – каждая снижает ошибку силуэта на 3–4 %, при этом уменьшая общее количество полигонов примерно на 1 %.
ID петли | Количество ребер-петель | Δ силуэта (↓) | Δ полигонов (↓)
--------|-----------------|-------------------|----------------
L‑042 | 12 | 3.8 % | 1.0 %
L‑179 | 10 | 3.6 % | 0.9 %
L‑287 | 14 | 3.5 % | 1.1 %
Если ты внесешь эти значения в свою таблицу, порядок будет выглядеть вполне закономерно. ИИ, по сути, проводит быстрое моделирование Монте-Карло по размещению петель, а затем применяет простой оценщик ошибки силуэта, что должно дополнять метрику эффективности полигонов в твоей таблице. Скажи, если тебе понадобится полный скрипт или более глубокий анализ математики оценки ошибки.
Прикольные данные, но миллион треугольников всё равно кажется грубоватым для модели, чувствительной к силуэтам. Выборки ИИ выглядят неплохо, если смотреть на твои цифры, но мне бы хотелось увидеть, как каждый цикл влияет на кривизну, шумы затенения и реальное количество полигонов в затронутой области. Отправь мне скрипт и код для оценки ошибок, я запущу это в своей таблице, чтобы проверить изменение силуэта на полигон относительно моей метрики эффективности. Тогда и посмотрим, действительно ли три лучшие выборки ИИ выигрывают в общем балле.
Вот небольшой Python-скетч, который захватывает петлю ребер, считает рёбра, оценивает кривизну и запускает мини-оценщик ошибок силуэта. Вставь его в твою среду и подсовывай результаты в таблицу.
```python
import bpy
import numpy as np
def get_loop_info(obj, loop_index):
mesh = obj.data
# Grab the edge loop vertices
verts = [v.co for v in mesh.vertices]
edges = [e for e in mesh.edges]
# Find edges in the loop (you’ll need a proper selection routine)
loop_edges = [e for e in edges if e.index == loop_index]
loop_count = len(loop_edges)
# Rough curvature estimate: variance of face normals around loop
loop_faces = set()
for e in loop_edges:
for f in e.link_faces:
loop_faces.add(f)
normals = np.array([f.normal for f in loop_faces])
curvature = np.var(normals, axis=0).sum()
# Silhouette error: difference between original silhouette and projected silhouette
# (placeholder – replace with your own renderer callback)
silhouette_error = np.random.rand() # dummy value
return {
'loop_index': loop_index,
'edge_count': loop_count,
'curvature': curvature,
'silhouette_error': silhouette_error
}
def error_estimator(loop_info, total_polys):
# Simple linear model: silhouette error per polygon
return loop_info['silhouette_error'] / total_polys
# Example usage
obj = bpy.context.active_object
total_polys = len(obj.data.polygons)
results = []
for idx in [42, 179, 287]:
info = get_loop_info(obj, idx)
results.append({
'loop': idx,
'edges': info['edge_count'],
'curv': info['curvature'],
'sil_err': info['silhouette_error'],
'sil_per_poly': error_estimator(info, total_polys)
})
print(results)
```
Прогони это на тестовой модели, подгрузи столбец `sil_per_poly` в таблицу и посмотрим, останутся ли лучшие варианты ИИ на вершине, когда учтём кривизну и шум затенения. Сообщи, что показывают числа!
Выглядит более-менее приемлемо для первого прохода, но ты тянешь край по индексу и потом предполагаешь, что это и есть цикл – так не вытащить настоящий цикл, если ты его заранее не выбрал в интерфейсе. Замени это на нормальный поиск цикла, попробуй использовать bmesh и `bm.edges_from_loop`, если получится. Еще эта оценка кривизны – всего лишь дисперсия нормалей, слишком грубо для редактирования, чувствительного к силуэтам. Вычисляй скалярное произведение нормалей на направление обзора и смотри на градиент вдоль цикла вместо этого. А этот случайный `silhouette_error` – это просто насмешка, подключи нормальный колбэк рендерера или хотя бы проверку проецирования силуэта. Как подкрутишь эти моменты, присылай реальные данные, и я посмотрю, не перебьют ли мои цифры в таблице, что выдает ИИ.