3Dc және 3Dc+ алгоритмдері: Нормальдық карталарды қысу әдісі
3Dc
3Dc (DXN, BC5) – ATI ұсынған нормальдық карталар үшін қолданылатын сандық алгоритм. ДXT5 негізінде құрылған, Nvidia қолдайды. Графика жүктемесін азайтады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
3Dc (FourCC: ATI2), сондай-ақ DXN, BC5 немесе Block Compression 5 деп белгілі, – бұл ATI компаниясы ойлап тапқан және алғаш рет қолданған нормальдық карталар үшін жоғалтулы деректерді қысу алгоритмі. Ол бұрынғы DXT5 алгоритміне негізделген және ашық стандарт болып табылады. Қазіргі таңда 3Dc алгоритмін ATI және Nvidia екеуі де қолданады.
3Dc (FourCC : ATI2), also known as DXN, BC5, or Block Compression 5 is a lossy data compression algorithm for normal maps invented and first implemented by ATI. It builds upon the earlier DXT5 algorithm and is an open standard. 3Dc is now implemented by both ATI and Nvidia.
Мақсатты қолдану
Нысаналы қолданба – нормальды карталау – бұл геометриялық беттердегі жарықтандыруды текстуралық картаға ұқсас тіктөртбұрышты тордан беттік нормаларды оқу арқылы имитациялайтын bump mapping-тің кеңейтілген түрі, соның арқасында қарапайым модельдерге күрделілік сезімі тудырылады. Дегенмен, бұл қосымша канал графикалық жүйенің жад еніне жүктемені арттырады. Тұтынушылардың 3D аппараттарында бұрын қолданылған жоғалтулы сығылу алгоритмдері нормальды карталарды көзге көрінетін артефактілерсіз қайта жасайтын қажетті дәлдікке ие болмады, бұл 3Dc-ні әзірлеуді қажет етті.
The target application, normal mapping, is an extension of bump mapping that simulates lighting on geometric surfaces by reading surface normals from a rectilinear grid analogous to a texture map giving simple models the impression of increased complexity. This additional channel however increases the load on the graphics system's memory bandwidth. Pre existing lossy compression algorithms implemented on consumer 3D hardware lacked the precision necessary for reproducing normal maps without excessive visible artefacts, justifying the development of 3Dc.
Алгоритм
Жер бетінің нормальдары – бірлік ұзындығы бар үш өлшемді векторлар. Ұзындығының шектеулі болуына байланысты, кез келген нормальдың тек екі элементін сақтау жеткілікті. Сондықтан, кіріс деректер екі өлшемді мәндер массиві болып табылады. Сығу 4x4 блоктар арқылы жүзеге асырылады. Әрбір блокта әр мәннің екі компоненті жеке-жеке сығылады. Әрбір блок үшін екі компоненттің әрқайсысы 8 мәннен тұратын палитраға ие. Палитралар сызықтың бастапқы және соңғы нүктелерін көрсететін екі мәннен құралады, ал қалған алты мән бастапқы және соңғы мәндердің сызықтық комбинациясы ретінде жасалады. Сығу, сығылатын 16 пикселдің ең төменгі және ең жоғары мәндерін анықтап, оларды 8 биттік сан ретінде сақтау арқылы жүзеге асырылады. 4x4 блоктарындағы жеке элементтер әрқайсысы 3 битпен сақталады, бұл олардың ең төменгі мәннен ең жоғары мәнге дейінгі 8 қадамдық сызықтық шкаладағы орнын көрсетеді. Әрбір пикселдің 3 биттік мәні (палитра индексі) бастапқы мәндерге ең жақын палитра элементін таңдау арқылы анықталады. Екі бастапқы компонентті ескергенде, 4x4 блок үшін жалпы сақтау көлемі 128 бит құрайды. 8 биттік дәлдікпен салыстырылатын сығылмаған схемада, бірдей аумақ үшін 32 8 биттік мән қажет болады, бұл 256 бит алады. Осылайша, алгоритм 2:1 сығу қатынасын қамтамасыз етеді. Сығу қатынасы кейде "4:1-ге дейін" деп аталады, себебі кіріс деректері үшін 8 бит емес, 16 биттік дәлдік қолданылуы жиі кездеседі. Бұл кіріс деректерінен 1/4 көлемдегі сығылған шығысқа әкеледі, бірақ бұл дәлдік деңгейімен салыстыруға келмейді.
Surface normals are three dimensional vectors of unit length. Because of the length constraint only two elements of any normal need to be stored. The input is therefore an array of two dimensional values. Compression is performed in 4×4 blocks. In each block the two components of each value are compressed separately. For each block, each of the two components have a palette of 8 values to choose from. The palettes are generated from two values representing the start and end of a line and the other six values being generated as linear combinations of the start and end values. Compression is natively achieved by finding the lowest and highest values of the 16 pixels to be compressed and storing each of those as an 8 bit quantity. Individual elements within the 4×4 block are then stored with 3 bits each, representing their position on an 8 step linear scale from the lowest value to the highest. Each pixel's 3 bit value (the palette index) would be chosen by choosing the palette entry with the minimum distance from the original values. Total storage is 128 bits per 4x4 block once both source components are factored in. In an uncompressed scheme with similar 8 bit precision, the source data is 32 8 bit values for the same area, occupying 256 bits. The algorithm therefore produces a 2:1 compression ratio. The compression ratio is sometimes stated as being "up to 4:1" as it is common to use 16 bit precision for input data rather than 8 bit. This produces compressed output that is literally 1/4 the size of the input but it is not of comparable precision.
3Dc+
3Dc+ (FourCC: ATI1) (BC4 немесе Block Compression 4) текстураларды, яғни жарық карталарын, көлеңке карталарын, HDR текстураларын және материал қасиеттерін қысуға мүмкіндік береді. 3Dc+ бір компонентті (DXT5 alpha) 8 биттік бүтін санды текстуралар үшін 2:1 қысу коэффициентін, ал қалыпты карталар мен екі 8 биттік бүтін санды компоненттен тұратын текстуралар үшін 4:1 қысу коэффициентін ұсынады.
3Dc+ (FourCC: ATI1) (also known as BC4 or Block Compression 4) can compress textures, i. e. light maps, shadow maps, HDR textures and material properties. 3Dc+ provides 2:1 compression ratio with single component (DXT5 alpha) 8 bit integer textures and 4:1 compression ratio with normal maps and textures consisting of two 8 bit integer components