Какой формат для целей рендеринга #greyscale в DirectX?

У меня есть игровой движок Directx9, который создает свой обычный адаптер с этим форматом: D3DFMT_X8R8G8B8 У меня есть система, в которой я визуализирую некоторые объекты на закадровую цель рендеринга, как карты освещения. Затем я использую эти данные карты освещения для компоновки обратно в задний буфер, где они действуют как полноэкранная «маска» и позволяют мне получить эффект факелов или других источников света на темной сцене. Все работает просто отлично. Проблема в том, что я знаю, что мои большие закадровые цели рендеринга карты освещения имеют размер 16 МБ каждая, при большом разрешении, и мне действительно нужно только 8 бит данных (оттенки серого) от них, поэтому 75% 32-битной памяти цели рендеринга занимает отходы. (Я ориентируюсь на карты с низкими характеристиками). Я попытался создать цели рендеринга как D3DFMT_A8, но directx молча терпит неудачу (если я добавлю CheckDeviceFormat(), я вижу, что это происходит) и все равно создает 32-битный. Я использую функцию D3DXCreateTexture. У меня вопрос: какой формат лучше всего подходит для создания этих закадровых буферов?

Спасибо за вашу помощь, я не силен в вещах, связанных с рендерингом :)


person cliffski    schedule 28.06.2011    source источник


Ответы (2)


D3DFMT_L8 — это 8-битная яркость. Я полагаю, что он поддерживается на GeForce 3 (то есть на первой потребительской карте с шейдером 1.1!), поэтому должен быть доступен везде. Я думаю, что цвет читается как L, L, L, 1, т.е. rgb = значение яркости, альфа = 1.

Изменить: этот инструмент полезен для поиска заглавных букв:

http://zp.lo3.wroc.pl/cdragan/wizard.php

person Robinson    schedule 28.09.2011

Ontopic: если вы нацелены на карты с более низкими характеристиками, вы, скорее всего, будете работать в системах, где 8-битные одноканальные цели рендеринга вообще не поддерживаются.

Если вы используете шейдеры для рендеринга и композитинга, должна быть возможность использовать каналы rgba для 4 чередующихся пикселей вашей карты освещения, упаковывая вашу информацию. Возможно, вы можете рассказать нам немного больше о ваших текущих настройках рендеринга?

Offtopic: УДИВИТЕЛЬНО видеть вас здесь, на StackOverflow, большой поклонник вашей работы!

person Paul-Jan    schedule 28.06.2011
comment
Спасибо, оказалось, что я могу использовать D3DFMT_R5G6B5 без потери визуальных эффектов и уменьшения использования памяти, так что это лучше, чем ничего. По сути, у меня есть цель полноэкранного рендеринга, используемая для карт освещения, а также мой обычный (бэкбуферный) RT. Когда я визуализирую что-то яркое, я копирую это в буфер карты освещения. Затем, в конце кадра, я рисую карту освещения RT поверх заднего буфера, точно так же, как большое пятно текстуры, которое затемняет все, кроме битов яркого источника света. - person cliffski; 28.06.2011
comment
Прохладный. D3DFMT_R5G6B5 будет доступен везде, так что это беспроигрышный вариант. - person Paul-Jan; 28.06.2011