forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   xCreateInstance (http://forum.boolean.name/showthread.php?t=14984)

Randomize 25.06.2011 04:21

xCreateInstance
 
Вложений: 2
Во первых я рад, что появилась реальная причина хоть что-то написать "по делу". Во вторых хочу поагитировать многих тоже попробовать Xors3D для своих проектов, благо движок уже достаточное время все улучшается и улучшается. А проекты Evil`а - прямое доказательство, что движок уже как минимум вполне пригоден для создания игр ААА класса :).
Оглашу некий список "говорящих за себя функций", которые мне понравились:

3D линии:
xCreate3DLine, x3DLineAlpha, xGet3DLineUseZBuffer, x3DLineColor, x3DLineAddNode, x3DLineNodesCount, etc...

Cоздание миров и переключение между ними:
xCreateWorld, xDeleteWorld, xSetActiveWorld, etc...

Работа с запакаоваными ресурсами !!!
xMountPackFile, xUnmountPackFile,

Логирование (особенно крут html лог):
xClearLogString, xCloseLog, xCreateLog ,xLogError,xLogFatal ,xLogInfo, xLogMessage, xLogWarning, xSetLogLevel, xSetLogTarget

Дебажить стало куда проще с ним!

Текстуры:
xCreateTextureFromData, xGetTextureData, xGetTextureDataPitch, xGetTextureFrames, xGetTextureSurface

Тени:
Тени реализованы очень удобно. Не буду перечислять ф-ции, просто скажу, что дело это юзаемо, я проверял.

Геометрия:
xCreateTorus (а блиц так не умел :-) ), xLightMesh, xSaveMesh (fbx)

Ну пока хватит.



Так, а теперь вопрос к тупым, не имеющим никакого отношения к хорсу разработчикам сего движка:


Я недавно купил видяху (^_____^) и у меня заработала такая штука, как Hardware Instancing и я сразу побежал делать майнкрафт. Открываю семпл и смотрю, что на родитель инстансов надо натянуть шейдер перед тем как начинать массово плодить дешёвых клонов.

Пробую. Тестовые кубики с вашим логотипом их 20x20x20 = 20^3 = 8000 Нормальный тест. Поехали:

HWInstacing
Цитата:

FPS: 46
TrisRendered: 111132
DIP calls: 1
Shader emulation
Цитата:

FPS: 17
TrisRendered: 444528
DIP calls: 374
Without shader
Цитата:

FPS: 7
TrisRendered: 986760
DIP calls: 556
CopyEntity
Цитата:

FPS: 10
TrisRendered: 1683600
DIP calls: 35787
А теперь вопрос:
Можно хотябы намекнуть что же там такое внутри xCreateInstace накладное делается?
Почему он без шейдера тормознее чем CopyEntity?
Каковы критерии написания шейдера для того, чтоб с ним работала ф-ция xCreateInstance?

Данные о системе:
Цитата:

1 CPU: AMD Athlon(tm) 64 Processor 3000+ at 1808MHz (MMX, SSE, SSE2, SSE3, 3DNow!)
RAM: 1023 MBytes. Paged memory: 3162 MBytes.
Video: NVIDIA GeForce GT 440. VRAM: 993 MBytes.
Physical screen size: 410mm x 230mm. Aspect ratio: 1.78261 (41:23).

Баг
Не работает xClearWorld() Вылетает окно семёрки "Диагноста проблем и тд"
Его товарищ xReleaseWindow() Делает абсолютно тоже самое.
Однако ежели заглянуть в лог, то отчётливо видно, что ресурсы все почистились от начала до конца.


Прикладываю архив с тестами.
Пробел -> следующий тест + запись в файл показателей
Esc -> выход в любой момент

NitE 25.06.2011 04:38

Ответ: xCreateInstance. Нет проблем, просто интересно.
 
Цитата:

Используя shaderinstancing.fx из примеров получаем:
Цитата:

Испольуя shaderinstancing.fx из примеров получаем:
Мне удалось найти только 1 отличие. Помоему ты вообще всё с результатами напутал.

Randomize 25.06.2011 05:26

Ответ: xCreateInstance. Нет проблем, просто интересно.
 
Цитата:

Сообщение от NitE (Сообщение 193028)
Мне удалось найти только 1 отличие. Помоему ты вообще всё с результатами напутал.

Напутал при написании поста. И только с 1 тестом. Исправил.
Апд. Сори, аттач не тот :/
Всё. Теперь все тесты в одном файле, прошу тестировать на своей системе и накидывать результаты сюда в научных целях. Просто интересно: мало ли у кого 2 вариант быcтрее первого (хотя не должен) и тд.

HolyDel 25.06.2011 06:55

Ответ: xCreateInstance. Нет проблем, просто интересно.
 
Цитата:

FPS: 10
TrisRendered: 1683600
DIP calls: 35787
выглядит нереально. на 35 тыщях дипов должен был быть ппц.

upd:
результаты на GF9600M + Win7:
HW Instancing - 60 FPS (вертикальная синхронизация почему-то не выключается в драйверах )
Shader Emulation - 17 FPS
Without Shader - 4 FPS
Copy Entity - 1 FPS

число дипов удивляет. По идее должно быть 1 - 1 - 8000 - 8000.

Randomize 25.06.2011 06:59

Ответ: xCreateInstance. Нет проблем, просто интересно.
 
Цитата:

Сообщение от HolyDel (Сообщение 193030)
выглядит нереально. на 35 тыщях дипов должен был быть ппц.

Читни сорс. Благо он понятный (надеюсь). Может я где накосячил.
Не удалил что-то.

Upd:
Опс. В сорце мат, прошу прощения.
Терзают меня смутные сомнения, что xFreeEntity не всегда срабатывает.
Там есть строка:
PHP код:

if clone[xyz]>0 then xFreeEntity(clone[xyz])
            
If 
_testIndex TEST_COPYENTITY Then
    
clone[xyz] = xCopyEntity(cube)
Else
    clone[
xyz] = xCreateInstance(cube)
EndIf
xPositionEntity clone[xyz], 2.52.52.5 

Может глюк с удалением инстанса?

Upd 2:
Ан нет. Всё чистится полностью. Проверил опытным путём.
Кстати кубов 21x21x21 = 21^3 = 9261 (там же у меня To)

HolyDel 25.06.2011 07:15

Ответ: xCreateInstance. Нет проблем, просто интересно.
 
конфиг твоего компа в студию!

Randomize 25.06.2011 07:21

Ответ: xCreateInstance. Нет проблем, просто интересно.
 
Цитата:

Сообщение от HolyDel (Сообщение 193033)
конфиг твоего компа в студию!

* В первом посте

HolyDel, спасибо за тесты и ценные комментарии.

Я повнимательнее посмотрел исходник и провёл пару экспериментов. Видать проблема с удалением всё же имеет место быть :-( Не удаляется часть Entity.

Обновил первый пост. Добавил второй тест.
VSync выключил. (случайно его включил пока баловался)
Во втором тесте я в начале каждого теста вызываю конструкцию: xSetActiveWorld(xCreateWorld())
Пока не знаю куда девается всё на предыдущем мире, но плоды это дало в плане "честности" тестирования.

HolyDel 25.06.2011 11:09

Ответ: xCreateInstance
 
на новом тесте:

HW - 89 /109
Shader - 48 / 57
wo shader - 17/57
copy entity - 18/65

первая цифра - все кубы в камере
вторая - все кубы вне камеры

St_AnGer 25.06.2011 11:28

Ответ: xCreateInstance
 
Цитата:

Сообщение от Randomize (Сообщение 193026)
Не работает xClearWorld() Вылетает окно семёрки "Диагноста проблем и тд"

давно с этим сталкивался, xClearWorld (1, 0, 1) спасало. Второй параметр помоему браши (?)

Randomize 25.06.2011 11:30

Ответ: xCreateInstance
 
Цитата:

Сообщение от St_AnGer (Сообщение 193041)
давно с этим сталкивался, xClearWorld (1, 0, 1) спасало. Второй параметр помоему браши (?)

Да, именно так. Но при повторном очищении всё крэшится.
Хотя на офф сайте написано:
Цитата:

Sunday, 8 May 2011 12:04
...
Fixed crash on xClearWorld() and xDestroyGraphics().
...

SBJoker 25.06.2011 12:51

Ответ: xCreateInstance
 
Мои результаты:
Цитата:

HWInstancing
FPS: 182
TrisRendered: 86784
DIP calls: 1

ShaderEmulation
FPS: 98
TrisRendered: 89508
DIP calls: 150

WithoutShader
FPS: 46
TrisRendered: 89508
DIP calls: 1

CopyEntity
FPS: 46
TrisRendered: 89508
DIP calls: 7459

St_AnGer 25.06.2011 13:36

Ответ: xCreateInstance
 
Результаты теста 2 (конфиг в подписи):

Код:

HWInstancing
 FPS: 93-105
 TrisRendered: 111132
 DIP calls: 1

 ShaderEmulation
 FPS: 54-56
 TrisRendered: 1111132
 DIP calls: 186

 WithoutShader
 FPS: 18-20
 TrisRendered: 111132
 DIP calls: 1

 CopyEntity
 FPS: 30-34
 TrisRendered: 111132
 DIP calls: 9261


зыЖ по теме xClearWorld. Только что нашёл свой старый проектик, переделал его под последнюю ревизию ксорса. xClearWorld (1, 0, 1) работает хорошо, никаких вылетов (использую при смене разрешения экрана, т.е. как минимум при 10-12 сменах резрешения команда работает)

.Squid 02.07.2011 01:36

Ответ: xCreateInstance
 
Я только вернулся из Крыма. В понедельник перечитаю все эти посты, а то что-то голова совсем не варит, и буду решать.

Randomize 04.07.2011 11:17

Ответ: xCreateInstance
 
Понедельник на дворе, посты готовы читаться.

.Squid 05.07.2011 01:24

Ответ: xCreateInstance
 
1. В цикле
Код:

Local clone:Int[21, 21, 21]
Очевидно, что
Код:

if clone[x, y, z]>0 then xFreeEntity(clone[x, y, z])
срабатывать не будет.

2.
Код:

If shader > 0 Then xFreeEffect(shader)
Сейчас после удаления шейдера еще нужно вручную сбрасывать в ноль шейдер энитити, на котором был удаленный шейдер.
Понятия не имею, как можно было упустить такую фигню из виду. И существует она уже довольно давно. Стыд и печаль. Буду править.

3. Софтварный инстансинг вообще лучше не юзать. Фигня на постном масле. Тоже будет выпиливаться.

4. xClearWorld у меня работает о_О. Можно пример попроще, в котором было бы видно, что оно действительно не работает? А то сейчас, я смотрю, вы и текстуры чистите, а потом опять их накладываете - беда...

Randomize 05.07.2011 21:16

Ответ: xCreateInstance
 
Вложений: 2
Цитата:

Сообщение от .Squid (Сообщение 194327)
...
А то сейчас, я смотрю, вы и текстуры чистите, а потом опять их накладываете - беда...

Не придирайся к мелочам - это всё не важно. Всё делалось исключительно ради теста. Делал наскоро чтоб тупо работало.

Значит так. По поводу xClearWorld() и xReleaseGraphics()
Прикладываю аттач с примером и скрин ошибки.
Испытывал следующие варианты:
Код:

'xClearWorld() ' Ошибка
'xClearWorld(1, 0, 1) ' так тоже
'xClearWorld(1, 0, 0) ' так работает
'xReleaseGraphics() ' тоже ошибка


.Squid 06.07.2011 02:12

Ответ: xCreateInstance
 
Я не придираюсь.
Ты чистишь мир вместе с текстурами, а затем в цикле опять накладываешь текстуру (в переменной то адрес текстуры остался, в ноль она не сбрасывается).

С r704 твой пример работает.

burovalex 18.08.2012 23:02

Ответ: xCreateInstance
 
Вообще понравился пример!!! Супер!
Такая разница колосальная!!

Xors3d Engine version: 1.15.688.0 ( May 07 2011 )
OS: Microsoft Windows 7
4 CPUs: Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz at 2128MHz (MMX, SSE, SSE2, SSE3)
RAM: 1908 MBytes. Paged memory: 3816 MBytes.
ATI Mobility Radeon HD 5730. VRAM: 1016 MBytes.

HWI
PHP код:

FPS61
TrisRendered
111132
DIP calls


shaderEmul
PHP код:

FPS16
TrisRendered
444528
DIP calls
374 

withoutShader
PHP код:

FPS5
TrisRendered
1000188
DIP calls
564 

FackingCopyEntity
PHP код:

FPS3
TrisRendered
1778112
DIP calls
37796 

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

burovalex 18.08.2012 23:17

Ответ: xCreateInstance
 
Я накидал, но я пока плохо разбираюсь в шейдерах эффектах.., и меши у меня просто исчезают

Код:

Include "xors3d.bb"
xGraphics3D 800,600,32,1,1

camera = xCreateCamera()
xPositionEntity camera, 0,2,-20

light = xCreateLight()

Global sp=xCreateSphere(16)
tx=xLoadTexture("accept.png")
xEntityTexture sp,tx
Global HWIFX=xLoadFXFile("hwinstancing.fx")
xEntityFX sp,HWIFX
xSetEffectTechnique sp, "Instancing"
xSetEffectMatrixSemantic sp,"MatViewProj",WORLDVIEWPROJ
xSetEffectMatrixSemantic sp,"MatWorld",WORLD

Dim c(10000)
For i=1 To 10000
c(i)=xCreateInstance(sp)
xPositionEntity c(i),Rnd(-3,3),Rnd(0,0.5),Rnd(-3,3)
Next

Global frame, xframe, time
xframe=xMillisecs()-1
While Not xKeyHit(1)
frame=xMillisecs()
xRenderWorld()


xText 5,5,time
xFlip

time=1000/(frame-xframe)
xframe=frame
Wend
End


FREE MAN 19.08.2012 00:05

Ответ: xCreateInstance
 
Посмотри в стандартных примерах, как это делать.
xEntityFX sp,HWIFX так не применишь эффект к объекту.
Надо так xSetEntityEffect sp, HWIFX

FREE MAN 19.08.2012 11:40

Ответ: xCreateInstance
 
Цитата:

Сообщение от burovalex (Сообщение 236624)
Я накидал, но я пока плохо разбираюсь в шейдерах эффектах.., и меши у меня просто исчезают

На кокой конфигурации компьютера делаешь?
Хардвэрный инстенсинг не все видяхи держат.

burovalex 19.08.2012 20:56

Ответ: xCreateInstance
 
Спасибо Phyton! Всё заработало!
Вот только разница в фпс не большая
вывел 10к сфер 16-го порядка
CopyEntity - 20 fps
Instancing - 30 fps

Можно ли на сферы сделать один сурфейс??

Повертексно создавая меш, я научился односурфейсные меши лепить, а вот на загружаемые меши не знаю как..

FREE MAN 19.08.2012 21:04

Ответ: xCreateInstance
 
Цитата:

Сообщение от burovalex (Сообщение 236697)
Спасибо Phyton! Всё заработало!
Вот только разница в фпс не большая
вывел 10к сфер 16-го порядка
CopyEntity - 20 fps
Instancing - 30 fps

Можно ли на сферы сделать один сурфейс??

Повертексно создавая меш, я научился односурфейсные меши лепить, а вот на загружаемые меши не знаю как..

Эээ, ты чего так за махнул та! 10К сфер это перебор, лучше делать на один инстанс примерно на 200 объектов, думаю так лучше будет.

burovalex 19.08.2012 22:48

Ответ: xCreateInstance
 
ну хз, лучше не стало, (может не правильно) переделал так:

Код:

Global sp=xCreateSphere(16)
tx=xLoadTexture("accept.png")
xEntityTexture sp,tx
Global HWIFX=xLoadFXFile("hwinstancing.fx")
xSetEntityEffect sp,HWIFX
xSetEffectTechnique sp, "Instancing"
xSetEffectMatrixSemantic sp,"MatViewProj",WORLDVIEWPROJ
xSetEffectMatrixSemantic sp,"MatWorld",WORLD
xHideEntity sp

Dim c(10000)
Dim s(500)
For y=0 To 90
s(y)=xCopyEntity(sp)
xHideEntity s(y)
        For i=1 To 100
        c(i*y)=xCreateInstance(s(y))
        xPositionEntity c(i*y),Rnd(-3,3),Rnd(0,0.5),Rnd(-3,3)
        xScaleEntity c(i*y),0.1,0.1,0.1
        xShowEntity c(i*y)
        Next
Next

Получилось 9к сфер, а фпс 26

HolyDel 20.08.2012 18:07

Ответ: xCreateInstance
 
у тебя сколько треугольников выводится? сколько треугольников на сферу? так-то чем меньше трисов - тем больше эффекта от инстансинга.

FREE MAN 20.08.2012 19:18

Ответ: xCreateInstance
 
burovalex Еще раз спрашиваю! Какая у тебя конфигурация ПК? возможно проблема не в инстансиге, а в твоем компе...
посмотри еще раз как в примерах сделано, у тебя где то косяк в коде это точно...
Опиши задачу для чего тебе нужен инстансинг? лес да пожалуйста, стандартный пример ксорса.
На фпс не бросаться пример без оптимизаций!!!

FREE MAN 20.08.2012 20:18

Ответ: xCreateInstance
 
Цитата:

Сообщение от burovalex (Сообщение 236720)
ну хз, лучше не стало, (может не правильно) переделал так:

Код:

Global sp=xCreateSphere(16)
tx=xLoadTexture("accept.png")
xEntityTexture sp,tx
Global HWIFX=xLoadFXFile("hwinstancing.fx")
xSetEntityEffect sp,HWIFX
xSetEffectTechnique sp, "Instancing"
xSetEffectMatrixSemantic sp,"MatViewProj",WORLDVIEWPROJ
xSetEffectMatrixSemantic sp,"MatWorld",WORLD
xHideEntity sp

Dim c(10000)
Dim s(500)
For y=0 To 90
s(y)=xCopyEntity(sp)
xHideEntity s(y)
        For i=1 To 100
        c(i*y)=xCreateInstance(s(y))
        xPositionEntity c(i*y),Rnd(-3,3),Rnd(0,0.5),Rnd(-3,3)
        xScaleEntity c(i*y),0.1,0.1,0.1
        xShowEntity c(i*y)
        Next
Next

Получилось 9к сфер, а фпс 26

Сделай проще, должно работать.

amount = 100
For i = 0 To amount
copy_entity = xCreateInstance(entity)
x# = Rand(0, 1500)
z# = Rand(0, 1500)
xPositionEntity copy, x, 0, z
Next

burovalex 20.08.2012 21:50

Ответ: xCreateInstance
 
Я же выше участвовал в тесте.
120к треугольников. Я подставил кубики.
Но все равно разница с топовым тестом очень большая.
У него 61 фпс выдает, а у меня 40-43

Xors3d Engine version: 1.15.688.0 ( May 07 2011 )
OS: Microsoft Windows 7
4 CPUs: Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz at 2128MHz (MMX, SSE, SSE2, SSE3)
RAM: 1908 MBytes. Paged memory: 3816 MBytes.
ATI Mobility Radeon HD 5730. VRAM: 1016 MBytes.

FREE MAN 20.08.2012 22:11

Ответ: xCreateInstance
 
Цитата:

Сообщение от burovalex (Сообщение 236774)
Я же выше участвовал в тесте.
120к треугольников. Я подставил кубики.
Но все равно разница с топовым тестом очень большая.
У него 61 фпс выдает, а у меня 40-43

Xors3d Engine version: 1.15.688.0 ( May 07 2011 )
OS: Microsoft Windows 7
4 CPUs: Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz at 2128MHz (MMX, SSE, SSE2, SSE3)
RAM: 1908 MBytes. Paged memory: 3816 MBytes.
ATI Mobility Radeon HD 5730. VRAM: 1016 MBytes.

А стандартные примеры инстансинга сколько выдают фпс?
Да и еще почему у тебя стоит старая версия 688? поставь 750, скачай с официального сайта ксорса триалку там в новой версии есть интересные примеры... у меня 80 фпс выдает без проблем!

burovalex 21.08.2012 21:00

Ответ: xCreateInstance
 
Спасибо! Буду качать, хотя вроде тоже с офсайта качал..
Рассмотрю подробнее примеры!

Andrew_00001 26.09.2012 12:54

Ответ: xCreateInstance
 
Ребят, а где можно почитать о том, что такое Instance ?
В официальной справке команда xCreateInstance отсутствует.
Запрос в Яндексе "xCreateInstance" выдает аж 4(четыре) ответа. Гугл немножко больше, но инфы там ноль. По форуму все как-то вскользь.

St_AnGer 26.09.2012 16:59

Ответ: xCreateInstance
 
Инстансинг геометрии

Ссылка из википедии на геймдев.ру

HolyDel 26.09.2012 17:08

Ответ: xCreateInstance
 
я думаю автору интересны не теоретические подробности реализации инстансинга, а то, как с ним работать в Хорсе. Вообще, имхо, хорс очень простой движок, и по листингам выше итак все должно быть понятно.

насколько я понимаю, достаточно вместо хCopyEntity писать xCreateInstance

Andrew_00001 27.09.2012 01:07

Ответ: xCreateInstance
 
А xCreateInstance работает со спрайтами?
Воюю сейчас с травой, создаю к примеру 10 000 спрайтов (через копиЭнтити). FPS - около 8.
Пытаюсь сделать через xCreateInstance - ничего не отображается.

Делаю 10 000 кубов через xCreateInstance FPS - около 18.
С использованием xHWInstancingAvailable() FPS - около 30. (файл шейдера спёр из сэмпла Instancing.

И вот пытаюсь ответить на такие вопросы:
1. xCreateInstance работает со спрайтами? если да, то как?
2. Что за штука такая чудесная - xHWInstancingAvailable() (я понял конечно, что аппартное ускорение инстанса, но как ее использовать, нужно ли писать для каждого конкретного случая свой файл шейдеров или есть какие-то заготовки) ?

Может кто намекнет, в каком направлении копать.

Nex 27.09.2012 01:14

Ответ: xCreateInstance
 
Цитата:

Сообщение от Andrew_00001 (Сообщение 239256)
Может кто намекнет, в каком направлении копать.

Цитата:

создаю к примеру 10 000 спрайтов
Это уже не правильно. Надо создавать только вокруг игрока/камеры траву в определенном радиусе.

Andrew_00001 27.09.2012 01:20

Ответ: xCreateInstance
 
Цитата:

Сообщение от Nex (Сообщение 239259)
Это уже не правильно. Надо создавать только вокруг игрока/камеры траву в определенном радиусе.

Да-да, я это уже читал где-то на форуме, просто сейчас экспериментирую, чтобы пощупать возможности сорса-компа и понять на что можно расчитывать. Все-таки несколько тысяч высококачественных спрайтов травы шикарно выглядят! но, увы, неиграбельны, а вот с помощью инстансов вижу, можно сделать их играбельными.
Так все таки не подскажите по поводу спрайтов и инстансов?

HolyDel 27.09.2012 02:19

Ответ: xCreateInstance
 
ты можешь делать не спрайт, а просто сюрфейс квада. и ориентировать их на камеру в шейдере инстансинга.
но, кончено, такие вещт лучше как то печь в один сюрфейс.

Andrew_00001 27.09.2012 03:45

Ответ: xCreateInstance
 
Цитата:

Сообщение от HolyDel (Сообщение 239263)
ты можешь делать не спрайт, а просто сюрфейс квада. и ориентировать их на камеру в шейдере инстансинга.
но, кончено, такие вещт лучше как то печь в один сюрфейс.

ОГО!
Делал 1000 спрайтов и 1000 сюрфейсов с одинаковыми текстурами.
Счёт по FPS:
Спрайты - 18.
Сюрфейсы - 94!
Правда еще не прикрутил поворот.
Два вопроса:
1. Как сделать сюрфейс прозрачным ? Перепробовал все команды, что влияют на альфу сюрфейса из оф.доки - ничего не берет - белый и все тут? (может кстати это и причина высокого ФПС).
2. При выходе из проги с сюрфейсами виндовз выдает ошибку, может их как-то из памяти удалять нужно?

Nex 27.09.2012 03:53

Ответ: xCreateInstance
 
Цитата:

Делал 1000 спрайтов и 1000 сюрфейсов с одинаковыми текстурами.
Лучше 1к квадов на 1 сюрфейс. Фпс будет еще лучше.
Цитата:

Как сделать сюрфейс прозрачным ?
Грузи текстуру с альфа каналом и загружай с флагами "1+2"
Цитата:

При выходе из проги с сюрфейсами виндовз выдает ошибку
У тебя где то в коде косяк.

Andrew_00001 27.09.2012 04:24

Ответ: xCreateInstance
 
Цитата:

Сообщение от Nex (Сообщение 239269)
Лучше 1к квадов на 1 сюрфейс. Фпс будет еще лучше.

Грузи текстуру с альфа каналом и загружай с флагами "1+2"

У тебя где то в коде косяк.

Спасибо за подсказку. Как и ожидалось ФПС с включением альфы упало до 20. Прикручу поворот будут как раз самые 18, что и у спрайтов. Движок их видимо реализует одним и тем же способом.
Я не совсем понял, точнее совсем не понял:)), как это "1000 квадов на 1 сюрфейс" ? что это за сюрфейс и как он должен располагаться?

Nex 27.09.2012 04:30

Ответ: xCreateInstance
 
Квад это два треугольника. Получется тот же спрайт.
Создаешь меш и один сюрфейс и в сюрфейсе создаешь уже квады.
Вот пример который я как то выкладывал. Ссылка
Минус в том что тяжеловато манипулировать кучей квадов на одном сюрфейсе. Инстансингом не пользовался, но уверен, что его использовать будет лучше.

HolyDel 27.09.2012 09:52

Ответ: xCreateInstance
 
у тебя 1000 сюрфейсов? 1000 ентити? - это все равно много.

тебе нужен 1 сюрфейс из 2000 вершин. по 2 на травинку.
инстансинг скорее-всего будет медленнее, чем синглсюрфей из-за накладываемого движком оверхеда на обработку ентити, хотя хз как это реализовано.
с альфой будут траблы, ибо спрайты надо сортировать от дальнего к ближнему, иначе будут косяки. можно попробовать маску.

и что за машина такая, если фпс падает от 94 до 20 при включенной альфе?

Andrew_00001 27.09.2012 14:07

Ответ: xCreateInstance
 
Цитата:

Сообщение от Nex (Сообщение 239271)
Квад это два треугольника. Получется тот же спрайт.
Создаешь меш и один сюрфейс и в сюрфейсе создаешь уже квады.
Вот пример который я как то выкладывал. Ссылка
Минус в том что тяжеловато манипулировать кучей квадов на одном сюрфейсе. Инстансингом не пользовался, но уверен, что его использовать будет лучше.

Пример интересный, вроде бы все понятно, но ума не приложу как это можно применить к траве на террайне, он ведь не плоский

Nex 27.09.2012 16:37

Ответ: xCreateInstance
 
Цитата:

Сообщение от Andrew_00001 (Сообщение 239283)
Пример интересный, вроде бы все понятно, но ума не приложу как это можно применить к траве на террайне, он ведь не плоский

В примере я квады использую как частицы (камера смотрит с верху и квады движутся только по двум плоскостям). Посути это теже самые спрайты. Создавай их над землей вокруг игрока и все.
И еще самый большой минус, что через команду нельзя взять и удалить 1 квад. Для удаления надо копировать все вертексы, удалить не нужные и перезаписывать сюрфейс. :crazy:

dsd 27.09.2012 19:50

Ответ: xCreateInstance
 
Цитата:

Сообщение от Nex (Сообщение 239287)
И еще самый большой минус, что через команду нельзя взять и удалить 1 квад. Для удаления надо копировать все вертексы, удалить не нужные и перезаписывать сюрфейс. :crazy:

Вообще при большом желании можно сложить в точку этот ненужный квад.


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

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