forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Загрузка SBS (http://forum.boolean.name/showthread.php?t=8032)

HolyDel 21.03.2009 21:48

Загрузка SBS
 
теоретически, SBS сюрфейсы могут работать быстрее, из-за сортировки индексов так, чтобы максимальное число вершин попадало в TnL кеш.

на практике я как таковой разницы в блице не заметил. у меня получалось выигрывать таким способом 10-20% в скорости.

Код:

Function LoadSBS(filename$)
        e =ReadFile(filename)
        m = CreateMesh()
        s = CreateSurface(m)
       
        chr_0 = ReadByte(e)
        chr_1 = ReadByte(e)
        chr_2 = ReadByte(e)
        chr_3 = ReadByte(e)
        chr_4 = ReadByte(e)
        chr_5 = ReadByte(e)
       
        fake0 = ReadInt(e)
        fake1 = ReadInt(e)
        fake2 = ReadInt(e)
       
        primtype = ReadInt(e)
        DebugLog primtype
       
        ci = ReadInt(e)
        cv = ReadInt(e)
        For i = 1 To ci/3
                i0 = ReadShort(e)
                i1 = ReadShort(e)
                i2 = ReadShort(e)
               
                AddTriangle(s,i0,i1,i2)
        Next
       
        For i = 1 To cv
                u# = ReadFloat(e)
                v# = ReadFloat(e)
               
                r = ReadFloat(e)
                g = ReadFloat(e)
                b = ReadFloat(e)
                a = ReadFloat(e)
               
                nx# = ReadFloat(e)
                ny# = ReadFloat(e)
                nz# = ReadFloat(e)
       
                x# = ReadFloat(e)
                y# = ReadFloat(e)
                z# = ReadFloat(e)
                       
                AddVertex(s,x,y,z,u,v)
                VertexNormal(s,i-1,nx,ny,nz)
        Next
       
        RotateMesh m,-90,0,0
        DebugLog ci
        DebugLog cv
        CloseFile(e)
        Return m
End Function

http://likosoft.ucoz.ru/SBSloader.zip

ABTOMAT 21.03.2009 22:36

Ответ: Загрузка SBS
 
Цитата:

сортировки индексов так, чтобы максимальное число вершин попадало в TnL кеш.
Можно поподробней?

HolyDel 21.03.2009 22:47

Ответ: Загрузка SBS
 
можно. есть видеокарта, у нее есть процессор, который обрабатывает вершины. часто бывает так, что некоторые вершины надо обрабатывать несколько раз. Если к ней "привязан" не один треугольник. После обработки вершины (положения, освещения, скорее всего после обработки вершинным шейдером вообще) результат помещается в некий кеш - post - TnL кешом он называется. Так вот, если мы будем обрабатывать треугольники так, чтобы вершины были в кеше - то заново их рассчитывать не придется, что ускорит вывод

http://www.gamedev.ru/articles/?id=20124

ABTOMAT 21.03.2009 22:56

Ответ: Загрузка SBS
 
Про кэш знал, про такой чуднОй способ оптимизации - нет. Спасибо.


Часовой пояс GMT +4, время: 18:07.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot