Здравствуйте, AndrewVK, Вы писали:
AVK>>Это все сказки, не подкрепленные какими либо цифрами. Ты возьми, посчитай, сколько потребуется времени на пересылку по PCI-E текстур для самой навороченной двухмерной сцены.
Кстати, легко — это примерно вчетверо быстрее, чем BitBlt полноцветной 32-bpp картинки. Это очень медленно.
AVK>>Не забудь про сжатие текстур, кстати. MS>>Предполагаю, что сравнимо с временем растеризации. Возможно, даже существенно дольше. AVK>Вряд ли. Алгоритм там сверхпримитивный.
Кстати говоря, забыл спросить — какое такое сжатие? S3TC (sometimes also called DXTn or DXTC) — это действительно примитивная компрессия с потерей качества. Причем, нет никакой возможности управлять уровнем качества. И доступна она только для цветных текстур. То есть, для передачи растеризованного альфа-канала категорически непригодна. А других типов компрессии, понимаемых видео-железом пока не существует.
Складывается впечатление, что апологеты Микрософт живут в какой-то иллюзорной стране чудес, где, например, и шрифты с кривыми Безье могут рендериться с аппаратным ускорением.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Это распространенный миф. FSAA очень и очень небесплатен. Как только задействуются пиксельные шейдеры
А если не задействуют, то бесплатен. Это пример, понимаешь.
AVK>>Важно. Потому что Z-буфер реализован аппаратно. И аппаратный блендинг реализован с его помощью. Любой другой способ в лучшем случае удастся реализовать на шейдерах, а в худшем придется вобще отказаться от железной поддержки.
MS>Ты ошибаешься. Z-буфер работает не так.
Я нигде и не говорил, как работает Z-буфер. Я сказал другое — WPF использует аппаратный Z-буфер.
MS>Короче, я выяснил, что в SL никакой Direct3D не используется.
На данном этапе вполне возможно. Он еще в очень сыром состоянии, даже GoLive беты нет. WPF тоже довольно долгое время рендерил через GDI.
... << RSDN@Home 1.2.0 alpha rev. 675 on Windows Vista 6.0.6000.0>>
Здравствуйте, McSeem2, Вы писали:
MS>Складывается впечатление, что апологеты Микрософт живут в какой-то иллюзорной стране чудес, где, например, и шрифты с кривыми Безье могут рендериться с аппаратным ускорением.
Я такое когда нибудь говорил?
... << RSDN@Home 1.2.0 alpha rev. 675 on Windows Vista 6.0.6000.0>>
Здравствуйте, AndrewVK, Вы писали:
MS>>Это распространенный миф. FSAA очень и очень небесплатен. Как только задействуются пиксельные шейдеры
AVK>А если не задействуют, то бесплатен. Это пример, понимаешь.
Тоже небесплатен. Его можно считать условно бесплатным до тех пор, пока софт не успевает загружать конвейеры видеокарты по самые уши. А когда удается утилизировать 100% ресурсов видеокарты, то разница даже с 6x FSAA составляет 2-4 раза. Но как мы выяснили по наличию швов, WPF использует софтварную растеризацию с Edge AA. Соответственно, FSAA там будет только мешаться.
AVK>Я нигде и не говорил, как работает Z-буфер. Я сказал другое — WPF использует аппаратный Z-буфер.
А я объяснил как он работает и привел доводы в пользу того, что WPF не может использовать аппаратный Z-буфер. Еще раз: Z-буфер работает с Z-координатой, линейно интерполируемой по плоскости треугольника, но он никак не может задействовать значения пикселов из текстуры.
В общем, так и не понятно, что же именно в WPF рисуется аппаратно ускоренно. Нигде не нашел четкой информации — все какие-то обрывки и слухи. Подозреваю, что просто-напросто софтварно рендерится битмап целиком (от начала и до конца), который потом можно "натянуть" на произвольную 3D поверхность. А сомнения есть еще и потому, что спецификация векторной графики в XAML фактически содрана с SVG. И там и там есть много деталей, входящих в противоречие с устройством конвейеров в апрпаратных ускорителях.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>А я объяснил как он работает и привел доводы в пользу того, что WPF не может использовать аппаратный Z-буфер. Еще раз: Z-буфер работает с Z-координатой, линейно интерполируемой по плоскости треугольника, но он никак не может задействовать значения пикселов из текстуры.
А зачем ему знать что там за пискель? Текстуры сдят на мешах. Меши z-буфером отскаются. Далее остается только сгенерить изображение из того что получилось.
В общем, что ты ты загибаешь.
Мои эксперементы с WPF показали, что как раз все что связано с отображением текстур там акселерируется. Проблемы с созданием самих текстур. Вот эта задача не решена никак. WPF это в первую очередь средство создания ГУИ. А ГУИ, как это не прискорбно, в 90% случаев выводит на экран динамический текст. Это полностью нивелирует весь выигрышь в некоторых (весьма распространенных) задачах. От того WPF интерфейсы частенько при всей своей красивости не шибко информативные.
В прочем, к вопросу отсечения геометрических фигур это никак не относится.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, McSeem2, Вы писали:
MS>Соответственно, FSAA там будет только мешаться.
Блин, такое ощущение что ты читаешь по диагонали. Это пример, понимаешь, ПРИМЕР. Пример того, что далеко не всегда с амые быстрые алгоритмы в итоге позволят получить самый быстрый результат.
AVK>>Я нигде и не говорил, как работает Z-буфер. Я сказал другое — WPF использует аппаратный Z-буфер.
MS>А я объяснил как он работает и привел доводы в пользу того, что WPF не может использовать аппаратный Z-буфер.
Твои доводы ничего не стоят, потому что не соответствуют действительности.
MS>В общем, так и не понятно, что же именно в WPF рисуется аппаратно ускоренно. Нигде не нашел четкой информации — все какие-то обрывки и слухи.
Задай вопрос в соотв. форуме на MSDN, тебе скажут где поглядеть. Мне в свое время кое что в MSDN попадалось.
... << RSDN@Home 1.2.0 alpha rev. 675 on Windows Vista 6.0.6000.0>>
Здравствуйте, VladD2, Вы писали:
VD>А зачем ему знать что там за пискель? Текстуры сдят на мешах. Меши z-буфером отскаются. Далее остается только сгенерить изображение из того что получилось.
Объясняю популярно. Текстура растеризуется софтварно, так? Возьмем для примера круг. Теперь, чтобы его отобразить, надо выполнить два действия. Во-первых, загрузить текстуру в видеопамять — это просто. Во-вторых, надо сделать сетку. Для простой плоскости сетка представляеь собой два смежных треугольника, покрывающих текстуру. Z-буфер будет работать с этой сеткой, ничего не зная о содержимом текстуры. В результате, в случае с плоскостью, операция с Z-буфером "выкусит" целый прямоугольник, покрывающий текстуру, в то время, как нам требуется модифицировать только те пикселы в Z-буфере, которые имеют ненулевую альфу в нашей текстуре. А Z-буфер про текстуру ничего не знает. И даже не знает, что там у нас — текстура или сплошной цвет. Ну так вот он устроен.
Но это все фигня. Как только среди полигонов встречается хотя бы один полупрозрачный, то все — про Z-буфер можно забыть. Даже если один полу-прозрачный пиксел. А в растеризованных текстурах этих полупролзрачнгых пикселов много, даже если сам полигон непрозрачный (догадайся, почему).
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, AndrewVK, Вы писали:
MS>>А я объяснил как он работает и привел доводы в пользу того, что WPF не может использовать аппаратный Z-буфер.
AVK>Твои доводы ничего не стоят, потому что не соответствуют действительности.
Ну тогда тебе придется подкрепить свои слова чем нибудь более надежным, чем голословные утверждения. Итак, откуда дровишки?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали: MS>Z-буфер будет работать с этой сеткой, ничего не зная о содержимом текстуры. В результате, в случае с плоскостью, операция с Z-буфером "выкусит" целый прямоугольник, покрывающий текстуру, в то время, как нам требуется модифицировать только те пикселы в Z-буфере, которые имеют ненулевую альфу в нашей текстуре. А Z-буфер про текстуру ничего не знает. И даже не знает, что там у нас — текстура или сплошной цвет. Ну так вот он устроен. MS>Но это все фигня. Как только среди полигонов встречается хотя бы один полупрозрачный, то все — про Z-буфер можно забыть. Даже если один полу-прозрачный пиксел. А в растеризованных текстурах этих полупролзрачнгых пикселов много, даже если сам полигон непрозрачный (догадайся, почему).
Если мне не изменяет память, игрался с 8-м директ3D довольно давно, то Z-буфер вообще работает с экранными пикселями, и там еще есть логика когда обновлять содержимое Z буфера, и как раз про полигоны то он ничего и не знает. Да и насколько помню выкусыванием полигонов занимаются немного другие алгоритмы, там тоже используется Z но только это Z составляющая вектора нормали.
для забивания гвоздя надо выбирать правильный микроскоп.
Здравствуйте, McSeem2, Вы писали:
MS>В результате, в случае с плоскостью, операция с Z-буфером "выкусит" целый прямоугольник
С чего бы это? Z-буфер хранит глубину каждого пикселя результирующего изображения. Так что ничего он выкусывать не будет. Выкидывание целых полигонов это совсем другие алгоритмы.
MS> А Z-буфер про текстуру ничего не знает. И даже не знает, что там у нас — текстура или сплошной цвет.
MS>Но это все фигня. Как только среди полигонов встречается хотя бы один полупрозрачный, то все — про Z-буфер можно забыть. Даже если один полу-прозрачный пиксел.
Все это здорово. Непонятно только одно — как современные ускорители справляются с альфа-блендингом.
Здравствуйте, McSeem2, Вы писали:
MS>Ну тогда тебе придется подкрепить свои слова чем нибудь более надежным, чем голословные утверждения. Итак, откуда дровишки?
Извини, но точных ссылок у меня нет. Базовые сведения по аппаратной акселерации WFP — http://msdn2.microsoft.com/en-us/library/ms742196.aspx . Дальше, если интерсны детали, скачиваешь SDK, там есть утилитка XAMLPad, которая позволяет поиграться с геометрией, и утилитка WpfPerf, которая позволит посмотреть, что и где там происходит в плане рендеринга.
Здравствуйте, AndrewVK, Вы писали:
AVK>С чего бы это? Z-буфер хранит глубину каждого пикселя результирующего изображения. Так что ничего он выкусывать не будет. Выкидывание целых полигонов это совсем другие алгоритмы.
Максим говорит о том что если ты вывел некоторую текстуру натянутую на пару треугольников то в Z-buffer'е будет прямоугольних заполнений Z'ом этих треугольников. И ты больше ничего не сможешь вывести под этим прямоугольником даже если он полупрозрачный.
AVK>Все это здорово. Непонятно только одно — как современные ускорители справляются с альфа-блендингом.
Полигоны сортируют перед выводом.
Вобще умные игрушки сначала выводят все полностью не прозрачние полигоны. Причем сначала выводят ближайшие. Это позволяет ускорителю не заморачиваться с расчетом цвета пикселя ибо происходит отсечка по Z-buffer'у. А потом прозрачные. Но прозрачные нужно сначала выводить самые дальние. Это нужно чтобы несколько перекрывающихся полупрозрачных поверхностей наложились правильно.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, VladD2, Вы писали:
VD>>А зачем ему знать что там за пискель? Текстуры сдят на мешах. Меши z-буфером отскаются. Далее остается только сгенерить изображение из того что получилось.
MS>Объясняю популярно. Текстура растеризуется софтварно, так? MS> Возьмем для примера круг.
Ага. Но если ты рисуешь скажем текстурированный круг, то как я понимаю сам круг будет мешью. И стало быть z-бужер будет пахать по полной программе.
Куча ошибочных предположений поскипана.
MS> А Z-буфер про текстуру ничего не знает.
Как это не знает? Z-буфер берет пиксель из меши и переносит его в свою памтять давая ему признак глубины.
MS>Но это все фигня. Как только среди полигонов встречается хотя бы один полупрозрачный, то все — про Z-буфер можно забыть.
То же не верное предположение. Альфаблэндинг тоже выполняется аппоратно современными видюхами. И в WPF море примеров использования этого факта. В них полупрозрачные фишки крутятся в риалтайме как тебе захочется.
MS> Даже если один полу-прозрачный пиксел. А в растеризованных текстурах этих полупролзрачнгых пикселов много, даже если сам полигон непрозрачный (догадайся, почему).
Немогу дагадаться. Особенно сбивает то, что я сам видел отличню работу этого всего.
Еще раз повторюсь. Единственная проблема — это формирование самой текстуры. Особая проблема — это текст. Вот он тормозит безбожно. Даже хуже чем в ГДИ. В прочем современные процессоры работают довольно шустро и на них это не так заметно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ага. Но если ты рисуешь скажем текстурированный круг, то как я понимаю сам круг будет мешью. И стало быть z-бужер будет пахать по полной программе.
Z-буффер тебе не поможет даже для полупрозрачных кругов в виде сеток. Так как в Z-буффер при выводе полупрозрачной геометрии писать нельзя.
VD>Как это не знает? Z-буфер берет пиксель из меши и переносит его в свою памтять давая ему признак глубины.
Не знает. Он работает с треугольниками, то есть просто делает интерполяцию по двум координатам. С шейдерами что-нибудь можно было бы сочинить, но с полупрозрачными треугольниками все равно и они не помогут.
Здравствуйте, Cyberax, Вы писали:
C>Z-буффер тебе не поможет даже для полупрозрачных кругов в виде сеток.
А никто нигде и не писал, что альфа-блендингом занимается z-буфер. Тут конечно очень насточиво меняли тему, но исходный вопрос был об оверхеде на перекрытие элементов. Так вот — если они непрозрачны, то z-буфер прекрасно работает, а если полупрозрачны, то тут любой алгоритм должен отрисовать все такие полигоны по честному. Но, при этом, этот самый блендинг современные видюшки тоже выполняют аппаратно.
Здравствуйте, VladD2, Вы писали:
VD>Ага. Но если ты рисуешь скажем текстурированный круг, то как я понимаю сам круг будет мешью. И стало быть z-бужер будет пахать по полной программе.
Для того, чтобы круг был треугольной сеткой, его надо триангулировать. Для произвольного полигона эта задача является весьма нетривиальной. В нашем же случае весь меш — это описанный квадрат, порубанный на два треугольника и все.
VD>Как это не знает? Z-буфер берет пиксель из меши и переносит его в свою памтять давая ему признак глубины.
А признак глубины — это Z-координата, линейно интерполируемая по треугольникам. В частном случае чистого 2D она является банальной константой.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, AndrewVK, Вы писали:
AVK>А никто нигде и не писал, что альфа-блендингом занимается z-буфер. Тут конечно очень насточиво меняли тему, но исходный вопрос был об оверхеде на перекрытие элементов. Так вот — если они непрозрачны, то z-буфер прекрасно работает,
Он "прекрасно работает" только с честной сеткой. Для чего надо триангулировать полигоны в векторном виде.
AVK>а если полупрозрачны, то тут любой алгоритм должен отрисовать все такие полигоны по честному.
А теперь смотри, что получается. Текстура натянута на прямоугольник, порубанный на два треугольника. При этом часть квадрата (внутренность полигона) у нас непрозначна, другая часть — полностью прозрачна, пикселы на границе — полупрозрачны. Теперь думаем, где здесь место для Z-буфера.
AVK>Но, при этом, этот самый блендинг современные видюшки тоже выполняют аппаратно.
Безусловно, но Z-буфер здесь ни при чем.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Для того, чтобы круг был треугольной сеткой, его надо триангулировать. Для произвольного полигона эта задача является весьма нетривиальной. В нашем же случае весь меш — это описанный квадрат, порубанный на два треугольника и все.
Что обсуждать уже работающую технологию?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, McSeem2, Вы писали:
MS>>Ну тогда тебе придется подкрепить свои слова чем нибудь более надежным, чем голословные утверждения. Итак, откуда дровишки?
AVK>Извини, но точных ссылок у меня нет. Базовые сведения по аппаратной акселерации WFP — http://msdn2.microsoft.com/en-us/library/ms742196.aspx . Дальше, если интерсны детали, скачиваешь SDK, там есть утилитка XAMLPad, которая позволяет поиграться с геометрией, и утилитка WpfPerf, которая позволит посмотреть, что и где там происходит в плане рендеринга.
Хм. Забавно "Sub-pixel font rendering uses available pixel shaders on the graphics hardware." что-то я не заметил ускорения рендеринга фортов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.