47 подписчиков
В ответ на пост
Как составляются задачи
Под вчерашней задачей развернулась дискуссия на тему того, что условие недостаточно чёткое. Подробное решение я наверное оформлю статьёй с рисуночками, а сейчас хочется описать, как я в целом мыслю составляя задачи. Так как задачи я беру из головы, а не перепечатываю в сотый раз "найдите подстроку в строке" только на шарпе.
Итак, разберём на примере конуса. У нас есть такая модель. И есть интересные нюансы на тему того, как работает 3д в реалтайм рендере на той же модели ламберта. Ну то есть не все в курсе почему у юнити куба вершин 24, а не 8. Поэтому давайте для эксперимента проследуем моей логике.
Самый широкий вопрос. Сколько вершин у шипа в игре? Вообще строго говоря любое число вершин, а точнее какое захотите. И это не обязательно конус, это может быть и треугольник, и билборд quad для 3д, и много что ещё. Чуть уточним условие.
Сколько вершин у конуса, который используют шипы в вашей игре? Чуть лучше, мы ограничили понятие формы и теперь наш шип — это 3д конус. Условие шипа для нас в среднем убирает случаи усечённого конуса. Так что всё неплохо. Но в данный момент времени верный ответ всё ещё — любое число вершин. Вершина может быть одна, может быть две и так далее. С кастомными шейдерами всё зависит от задачи. А задачка была про нормали и PBR рендер. И по сути это переформулированная задача "почему у юнити куба 24 вершины". Напрямую говорить про PBR — для меня сразу очевидно, что подвох задачи в нормалях. Поэтому просто скажем standard shader. Вот мы и ограничили условие до нужного нам. Тут возможно стоило добавить, что в сцене есть свет. Но вообще зная связь меш-нормали-свет, опять-таки задачка становится слишком тривиальной, как и ответ на вопрос "почему".
При этом задача остаётся открытой. То есть вы можете написать решение "одна вершина" и обосновать его. Но строго говоря, с точки зрения PBR рендера одна вершина даст "устраивающий вас артефакт". И это не будет неверным. Но на самом деле решение единственно. N — по числу граней конуса.
И собственно да, эта задачка прикольная для собеседований на понимание человеком работы PBR рендера, что такое хадр эдж и связи нормали с освещением. Но на собеседованиях стоит помнить один нюанс. Лид на работе — это не препод. Нормального лида не интересует дадите ли вы ответ, который он хочет услышать. Ему интересны ваши рассуждения. Если вы скажете, что "а ещё тут можно сделать для оптимизации одну вершину и нормаль в ней направить вверх, чтобы получить засвет, который симпатично будет смотреться на многих шипах". Конечно же лид должен задать наводящий вопрос "что такое вверх", так как я как зануда попытался бы навести человека на "сонаправленно направлению шипа" или любую синонимичную формулировку. Но лид не расстроится от дополнительных решений, а скорее наоборот впечатлится.
Но тем не менее условия не совсем чёткие, но сформулированы таким образом, что ответ "вершин N по числу граней конуса". Связано это да действительно с нормалями. И стандарт шейдер ограничивает нас в среднем, что у нас модель ламберта. Все остальные решения уже полёт фантазии, который тоже полезен.
Задачи я публикую с одной точки зрения. Не чтобы услышать "верное решение". Я никого тут не собеседую XD А чтобы было на чём размять мозги чисто по фану. Так сказать один из "образовательных моментов" канала.
#мысли
2 минуты
3 февраля 2023