Mikle
А в чем разница?
Я в фотошопе просто удалил по кругу как-бы лишнее, и сейвнул в пнг.
Я так понимаю, что дело в том какая инфа о цвете в том месте где прозрачно
т.е если убрать альфу из пнг, в том месте получается белый цвет тупо.
SilentPrayerCG
> Я так понимаю, что дело в том какая инфа о цвете в том месте где прозрачно
Да, при любом скейле или повороте такие места взаимно пересекаются, это касается не только SR2D, но и, например, Direct3D. Существуют правила того, как правильно делать альфу в спрайтах.
SilentPrayerCG
> если убрать альфу из пнг, в том месте получается белый цвет тупо
Там должен быть тот же цвет, какой в соседней точке с неубранной альфой, тогда всё будет нормально.
Mikle
тогда надо тга делать, с альфаканалом, что-бы не херилось в месте прозрачности
а ты как сделал этот градиент?
SilentPrayerCG
> тогда надо тга делать, с альфаканалом, что-бы не херилось в месте прозрачности
Просто не пользоваться для этого фотошопом.
SilentPrayerCG
> а ты как сделал этот градиент?
Сгенерировал так (код VB6):
Dim Spr As New SR2D_Sprite Const Pi As Single = 3.141593 Private Sub Gen() Dim x As Long, y As Long Dim dx As Single, dy As Single Dim A As Single, R As Single Spr.Init 320, 320 For y = 0 To 319 For x = 0 To 319 dx = x - 159.5 dy = y - 159.5 R = Sqr(dx * dx + dy * dy) R = (158 - R) * 255 If R > 255 Then R = 255 Else If R < 0 Then R = 0 A = Atn(dx / dy) + Pi / 2 If dy < 0 Then A = A + Pi A = A * 255 / (2 * Pi) Spr.SetPixel x, y, ARGB(R, A, A, A) Next x Next y Spr.SaveToFile "_BrushedRadial.png", FF_ARGB_PNG End Sub
Mikle
Я вот сейчас попытался исключить спрайты, и рисовать круговой градиент линией (твоей, из спрайта которая)
Не из-за альфы, скорее, а из-за того что антиалиасинг тут вредит сильно
и что-то странное, рисую линию по кругу, и получаются дыры
https://gamedev.ru/files/images/?id=142699
проверил, без линии, рисовал по пикселю, нормально (как и в прошлый раз когда я делал подобное)
https://gamedev.ru/files/images/?id=142700
это одинаковый шаг на первой и на второй картинке
даже линиями то медленновато выходит, пикселями очень медленно
наверное стоит все-таки спрайтами сделать, тогда жду когда сделаешь опцию отключить фильтрацию)
другой вариант через graphics ресайзить)
SilentPrayerCG
> антиалиасинг тут вредит сильно
А что за конечная цель?
Mikle
хотел сгенерить текстурку что-бы в рендере на ротейшен для анизотропии подцепить
из-за антиалиасинга там левые переходы цвета получаются, которые начинают на поворот влиять
https://gamedev.ru/files/images/?id=142749
видишь там где от белого к черному переходит выходит линия, и вокруг кружков контур
он из-за антиалиасинга получается)
SilentPrayerCG
> там где от белого к черному переходит выходит линия
Не вижу. Вижу белые радиусы на чёрном фоне.
SilentPrayerCG
> и вокруг кружков контур
Но с моей текстурой этого же нет?
Скейл без фильтрации я сделаю, просто сейчас занят постоянно. Но хочется понять, откуда проблемы, которых не должно быть.
Mikle
Я вот сейчас стал делать пример визуальный, и нашел баг, у нас нефига не отключается фильтрация для ротейшена. Как пофиксим покажу.
У ротейшена 0 это 0 градусов 255 это 360 градусов (ну или наоборот я не знаю точно)
а когда скейлишь такой градиент, в том месте где белый переходит в черный, образуется антиалиасинг, т.е пиксели усредненных между белым и черным цветом, и блик в этом месте начинает вращаться, из-за этого образуется шов
Так этот градиент используется как карта текстурных координат в 3D рендере? Тогда придётся отключать фильтрацию в нём, но тогда будет выглядеть ужасно.
Нужно принципиально менять подход - делать карту двухкомпонентную, обычно используют R и G компоненты, фактически как в бамп-маппинге. Тогда не придётся отключать фильтрацию ни в 2D, ни в 3D.
Спрайт должен быть таким:
https://gamedev.ru/files/images/?id=142757
Только для 3D рендера лучше сгенерировать картинку с размерами, равными степеням двойки, например, 512*512, чтобы мип-маппинг работал нормально.
Mikle
Не, там обычная чернобелая карта используется для ротейшена) как везде
ни разу не видел что-бы где-то двухцевтная карта использовалась
Рендер мои товарищи пишут, он опенсорный, на опенцл, если интересно вот наша группа https://vk.com/hydrarenderer если нет то ладно.
Слуш, я сейчас пытаюсь без АА все сделать, пока делаю маску через графикс
тут у меня такая проблема
я перегоняю битмап в спрайт
BrushMaskSprite = New Sprite(BrushMask)
BrushMask - это битмап
в общем после того как я таким образом инициализирую спрайт
битмапа брушмаск ломается
я не особо пойму что с ним происходит, вроде он не Nothing но все его параметры становятся вот так
https://gamedev.ru/files/images/?id=142760
не знает в чем дело и как это обойти? brushmask.clone что-ли делать?
сделал так BrushMaskSprite = New Sprite(new bitmap(BrushMask))
перестало ломаться
SilentPrayerCG
> там обычная чернобелая карта используется для ротейшена) как везде
Где "везде"? В плагинах 3DMax? Не занимался этим, но всё равно странно, если так. В любом графическом API это применимо только при отключении фильтрации, и речь не об этапе создания текстуры, а конечном рендере, где текстура используется, как карта для выборки.
Ты можешь написать последовательность действий в вашем рендере, на каком этапе данные передаются из SR2D в OpenCL? В частности - вот этот шов между 0 и 360 гр. возникает в SR2D, или уже в OpenCL?
Финалом работы SR2D является эта текстура?
Если так, то убирание фильтрации только на этапе SR2D не поможет.
А на каком этапе текстура становится такой?
Видишь, всё с фильтрацией, и никаких швов.
У меня завтра с утра будет время, постараюсь по-быстрому накидать скейл без фильтрации, но, подозреваю, это не решит проблему.
SilentPrayerCG
> после того как я таким образом инициализирую спрайт
> битмапа брушмаск ломается
Попробуй из LoadFromBitmap() убрать строку:
BmpDest.Dispose()
Mikle
в рендер системах, vray corona mental ray, octane итд
ср2д к рендеру напрямую не относится конечно), я просто пытался сгенерить текстуру в файл
сейчас у нас там косяк, не отлажена возможность отключать фильтрацию пока, но в движке она есть, по этому текстура с таким флагом в рендере уже будет без фильтрации и без каких либо левых цветов из-за алиасинга
текстура не становится такой, это анизотропный блик
я по умному наверное не объясню, это модель называется TRGGX, у нас, она поддерживает анизотропию, это симуляция бороздок параллельных на материале, грубо говоря
у анизотропии есть поворот, т.е это по сути поворот этих бороздок
короче знаешь крутилки громкости, у колонок к примеру, или у какого-нибудь оборудования, там как-бы круговой эффект такой, или полированный метал
вот это добивается за счет черно-белой карты поворота, вот с такими градиентами
пофиксят товарищи экспорт флага фильтрации покажу
---
по поводу диспоса понял, спасибо попробую, скорее всего из-за него, там битмап как типа ссылки получается, и скорее всего диспозится там, при инициализации спрайта
SilentPrayerCG
По поводу Dispose - поздравляю, ты нашёл баг.
Sub LoadFromBitmap должна выглядеть так:
А скейл без АА попробуй такой временный вариант, добавь в класс Sprite процедуру:
Это медленный временный вариант для проверки.
Mikle
хорошо, проверю, спасибо
да искать баги, это у меня дар
точнее натыкаться на них
Тема в архиве.