![]() |
Ответ: Советы по оптимизации
Цитата:
|
Ответ: Советы по оптимизации
Чтото помучил, вроде заработало. Передавал так:
Код:
Global mesh2=xLoadMesh("./data/mesh/plant/grass1nr.b3d") |
Ответ: Советы по оптимизации
Цитата:
|
Ответ: Советы по оптимизации
Я так уже сделал, но думал что есть вариант другой...
Код:
float4 oTEX = tex2D(TEX_DIFFUSE,TXC); И не могу понять, в моем случае условие "oTEX.rgb<0.004" проверяет сумму или умножение r,g и b ?? |
Ответ: Советы по оптимизации
Цитата:
Цитата:
|
Ответ: Советы по оптимизации
Не понял где надо AND оператор использовать, но пока робит вроде правильно - оставлю )
ВСЁ! У меня чтото получилось. Правда за основу взял не рябь, а сумму ргб, в результате более темные участки исчезают раньше. Посмотрите плиз пример в аттаче, коментируем по поводу всего!! И еще раз благодарю всех за помощь, и в особенности Mr_F_!!! |
Ответ: Советы по оптимизации
Вполне Годный способ! Добавь еще следующие в технику
Код:
AlphaTestEnable = 1; |
Ответ: Советы по оптимизации
Это прям в шейдер надо писать?
|
Ответ: Советы по оптимизации
Да
|
Ответ: Советы по оптимизации
Может опять чтото не то сделал, но ничего не изменилось.
Код:
technique LODMNR { |
Ответ: Советы по оптимизации
Цитата:
Код:
technique LODMNR { |
Ответ: Советы по оптимизации
Не помогло (
Дело в том, что я специально контур маски обводил карандашом с цветом (0,0,0) Т.е. в текстуре нету цвета, к примеру 0,0,1. Сам не понимаю откуда черная оконтовка берется... Мне кажется что это сам clip такой косяк оставляет |
Ответ: Советы по оптимизации
Сделай текстуру с альфа каналом
|
Ответ: Советы по оптимизации
Альфатест это тот же самый clip, альтернативный вариант, разницы нет. Режет по альфе, а тут чувак не возвращает из PS альфа компоненту.
Чтобы не было чёрного контура, достаточно подкрутить число с которым сравниваем в clip - это то же самое. контур остаётся из-за фильтрации, т.к. пиксели сглаживаются между собой чтобы не выглядеть резкими квадратами, в том числе с краёв они смешиваются с чёрным. решение - не юзать чёрный цвет а клипать по альфаканалу. |
Ответ: Советы по оптимизации
Да да, я именно так и сделал. Пришлось поднять до 0.03 - это примерно 8. Что наверное не есть хорошо, но думаю если маску собираешься использовать, все равно надо текстуру к этому подготавливать.
Может выложить куда-нибудь мой пример, вдруг пригодится. Только не знаю в какой раздел. То ли в Xors3d, то ли полезные библитеки... |
Ответ: Советы по оптимизации
доведи до ума пример и сделай небольшой тутор как это всё дело реализовать, и примеры где можно это применять, в Xors3d выкладывай.
|
Ответ: Советы по оптимизации
А вот еще вопросик появился.
Щас проверял копирует ли ксорс вместе с ентити шейдер. Вроде копирует. Т.е. можно создавать шаблон, на него накладывать нужные эффекты, потом копировать и у дочки менять только нужные входные параметры?? |
Ответ: Советы по оптимизации
Чтот потестил я эти ЛОДы и у меня скоро крышняк съедит. Ничего понять не могу!! Может руки у меня из Ж.ПЫ ростут...
Короче у меня вышло что без ЛОДа работает быстрее Посмотрите пример. Предупреждаю, архив запакован без папки. |
Ответ: Советы по оптимизации
На Blitz3D быстрее без Алгоритма, чем с последним.
как то так |
Ответ: Советы по оптимизации
Чушь какая то.. Это ж оптимизация вроде как.....
|
Ответ: Советы по оптимизации
Но при этом происходит больше перебора и вычислений?
Для Blitz3D намного лучше отобразить когда мало высокополигональных моделей, чем много примитивов. |
Ответ: Советы по оптимизации
Ладно, допустим у меня было пивот и на нем прикреплено 3 меша. Если вместо пивота, я буду хранить размер,положение в полях типа. И меш постоянно при смене ЛОД-уровня копировать с шаблона.
Стоит ли такая игра свеч?? Ентити станет вместо 4-х один.. |
Ответ: Советы по оптимизации
Я тестировал и вроде закреплённые меши - это не один меш.
Если только трианглы копией записывать в один. Но это более нагрузачно. В общем никак. Как дела в Xors3D я не знаю. |
Ответ: Советы по оптимизации
- если ты каждый пучок травы отдельно лодишь, это плохая идея, лодь сразу массивами по дофига объектов. нет смысла лодить меши в которых не дохрена поликов - так будет только один оверхед от лода.
- если у тебя код клипа по дистанции на всех пучках всегда, это плохая идея, он должен быть только на переходе из одной стадии в другую, остальные рендери обычным шейдером. - если у тебя лоды не видны из-за клипа, но не схайдены, это совсем плохая идея, т.к. вызовов отрисовки и работы для VS будет много все равно. ещё есть большая вероятность, что если ты вообще забьёшь на какую угодно альфу и сделаешь контуры травы полигонами (!), то выиграешь в производительности заметно. |
Ответ: Советы по оптимизации
Mr_F_, у меня не получится массивно, надо по пучкам, т.к. у меня трава сама растет и размножается.
Вот как раз клип у меня всегда висит. Видимо это основной косяк. Но я чтото плохо представляю как на ентити накладывать эффект только в определенных дистанциях. Вопрос даже в том, как это делать, надо както очищать ентити от шейдера? Цитата:
|
Ответ: Советы по оптимизации
Цитата:
Цитата:
некоторые оптимизации Z буфера отменяются, если использована альфа в любом виде, включая клип. траве такие оптимизации пригодятся, потому что у тебя много её перекрывает друг друга. вообще ты лучше скажи что тебе в финале нужно получить - какой ракурс камеры, какая механика вырастания травы, как много пучков в кадре. |
Ответ: Советы по оптимизации
Офигеть, ты мне раскрыл глаза на Z буффер. Это оказывается мощная штука!
На примере травы сделал тест, и оказалось что без альфы производительность возрастает в 3 РАЗА!! 1000 примитихных мешей с альфой скинули фпс до 40, в то время как 3000 таких же без альфы скинули до 45. Цитата:
Ну траву без альфы я без проблем сделаю, но если надо сделать кустаники и т.п. что без альфы не обойтись. Цитата:
|
Ответ: Советы по оптимизации
Цитата:
вкратце: ты рисуешь много объектов друг на друге, по идее каждый пиксель каждого объекта на экране должен быть нарисован - выходит что ты можешь отрисовать дофига пикселей впустую, которые потом закроются другими. у збуфера есть оптимизация - если рисуемый пиксель объекта дальше по глубине чем то что уже в нём нарисовано, то не надо его рисовать и прогонять его шейдер. поэтому если ты отсортируешь объекты от ближних к дальним, все загороженные пиксели им будут откинуты. ксорс вряд ли их сортирует (а может и сортирует), но даже при хаотичном порядке объектов часть пикселей всё же откинется. если ты юзаешь альфатест/клип/дискард, то видюхе придётся все равно все шейдеры всех пикселей прогонять, чтобы узнать где альфа, как минимум нужно текстуры с этой альфой прочитать. ну и если ты используешь альфаблендинг (альфу с полупрозрачностью), то движку необходимо рисовать объекты от дальних к ближним, так же как если бы ты клал полупрозрачные слои друг на друга в фотошопе - тут из принципа нельзя ничего откинуть, и это самое жестокое по производительности. на твоём месте я бы склеивал в рантайме массивы травы сразу по дофига пучков в цельный меш и не лодил бы никак по сути (точнее просто вырубал видимость их совсем вдалеке). зато так будет один объект/меш/сюрфейс - один вызов отрисовки для видюхи вместо тысячи, это может заметно повлиять на скорость. |
Ответ: Советы по оптимизации
Цитата:
Я к чему распинаюсь, у меня карта загружается с обычного рисунка 64х64 пикселя террайном, где 60% поверхности под водой )), и в принципе это для первого уровня должно хватить) Ну максимум я пока расчитываю карту 256х256, с 70% суши, и 30% растительностью, это примерно 20К мешей, с автофейдом максимум 70-80 будет рендериться допустим 7к мешей. Реально ли обойтись без сложностей? |
Ответ: Советы по оптимизации
а еще в хорсе есть инстансинг!
|
Ответ: Советы по оптимизации
По пути еще другой вопросик )
Как ты относишься к тому чтобы обрабатывать всё по фреймам - т.е. frame=frame+1 if frame>10 then frame=1 If (frame mod 10)=1 then часть операций 1 endif If (frame mod 10)=2 then часть операций 2 endif Если не заметно глазу конечно, ели заметно допустим каждый 2-й 3-й кадр. Как такой вариант? |
Ответ: Советы по оптимизации
Да Holydel, я пробывал его, не почуствовал особого прироста производительности.. Может руки опять же не оттуда )
|
Ответ: Советы по оптимизации
Цитата:
Цитата:
|
Ответ: Советы по оптимизации
Цитата:
|
Ответ: Советы по оптимизации
Не цепляйся к словам! ))
Не, если честно, должна быть очень полезной такая оптимизация, вот представь, допустим 1000 экземпляром разного типа, с десятком полей, и тебе надо будет не каждый проход их проверять, а например в первый кадр проверил траву, 2-й кадр деревья и т.д. Посадки фпс по процу точно не будет |
Ответ: Советы по оптимизации
Ну, в общем понаступав на пару десятков граблей я пришел к выводу, что в блитце самой большой проблемой является большое количество ентитей. Особенно я это понял когда 300-400 рисованных облачков с альфой начало хавать фпс.
Начал разбираться с синглсёрфом. с 10000 мешей начал снижаться фпс, и то не из-за рендера, а из-за большого списка. Сделал перемещение x,y,z, поворот y, а вот поворот х работоет коряво. Если есть у кого рабочий вариант, покажите плиз. выглядит код так Код:
Global mesh=xCreateMesh() |
Ответ: Советы по оптимизации
ржачна. мне нравится. ты только предупреждай, чтобы люди больные эпилепсией это не смотрели.
|
Ответ: Советы по оптимизации
Че вы наезжаете?! Здесь сосредоточено 10000 мешиков. У меня на игровом буке фпс было 50 (и то тормозит не из-за рендера, а из-за того что надо пройти по 10к записей за каждый проход), правда в начале пока не сдвинешь камеру лагает сильно, не понятно с чем связано.
Подскажите как поворачивать вертексы по оси Х, у меня в примере должны крутиться, а они только слегка наклоняются |
Ответ: Советы по оптимизации
Блин, да суть то не в том как выглядит, а как работает )
|
Ответ: Советы по оптимизации
на самом деле нормально работает. шустро.
просто медия слабовата. а в том примере, где 5 лямов - Эти 5 лямов были лишь со слов автора. Хотя выглядело куда круче, да. посчитаем: 1 - пропускная скорость шинф PCI-E 16x на процессорах с архитектурой SandyBridge составляет 5GB/s. или 5 368 709 120 бит в секунду. кажется много, но это всего лишь 671 088 640 байт в секунду. На один спрайт нужно два триса. это 6 вершин. на каждую вершину нужно 12 байт на позицию, 8 байт на текстурные координаты. я опустил нормали и цвет, но может они в блице и не используются. хз. итого 120 байт на трис, на 5 000 000 спрайтов нужно соответственно 600 000 000 байт. итого такая сцена с отправкой каждый кадр всех вершин на гпу по шине будет работать со скоростью чуть более одного фпс. а так-как у автора было значительно быстрее, значит за этими цифрами пряталась какая-лиюо хитрость. Или данные обновлялись не все, или было 5 000 000 травинок по сотне на каждый спрайт, или еще что-то. |
Ответ: Советы по оптимизации
Я тоже ее видел. Я согласен что она выглядит круто.
Я не согласен с приводимыми автором цифрами. Ибо они противоречат теоретическим пределам современного железа. |
Ответ: Советы по оптимизации
Ребят, ну помогите с трансформацией, не могу заставить вертексы правильно двигаться. Гуглю, не могу найти нормальынй пример.
Решил уже сделать пивот, выравнивать его относительно новых координат, и все равно коряво работает. Вот так: Код:
Function CloudUpdate(cloud.cloud) For cloud.cloud=Each cloud cloud\rotY=cloud\rotY+1 CloudUpdate(cloud.cloud) Next |
Ответ: Советы по оптимизации
У меня есть два треугольника, соединенные в квад. И того 4 вертекса. Мне надо крутить точки вокруг центра квада.
По сути нужно матрицу преобразования поставить в координаты центра квада и повернуть эту матрицу на нужные углы и в нее подставить координаты вертексов. Но не могу я понять как это сделать (( |
Ответ: Советы по оптимизации
Вложений: 1
УРААА!! Получилось! Вот я тугодум, два дня втыкал. Оказывается надо tForm для каждой координаты добавлять.
Мне кажется код нихрена не оптимальный. Ну хотя бы работает ) Код:
Function CloudCreate(x#,y#,z#,scale#=1,rotx#=0,roty#=0,rotz#=0) На качество травы не обращайте внимание, для примера, та же текстура только АльфаРеф накинул) Качаем, комментируем!! |
Ответ: Советы по оптимизации
работает на 60 фпс-ах.
иногда почемуто опускается до 45-50. Похоже, это происходит когда я пытаюсь все поле окинуть взглядом. травку на цпу вырвниваешь и шевелишь, или в шейдере? |
Ответ: Советы по оптимизации
burovalex, я тебе скидывал свой пример где все есть.
HolyDel, думаю на цпу ибо использует TForm. |
Ответ: Советы по оптимизации
Цитата:
Код:
For rep=1 To 10000 Цитата:
|
Ответ: Советы по оптимизации
burovalex, хм. Посмотрел код и понял что куда то делся код с разворотом квадов к камере. :)
|
Ответ: Советы по оптимизации
Цитата:
|
Ответ: Советы по оптимизации
Я вот чтото даже не могу представить как это делать. Получается шейдер накладывается на Весь меш, а в меше много элементов.
У каждого элемента может быть разные скорости перемещения, поворота, жизни, альфы и тд. Это ж не получится все упихать в шейдер |
Ответ: Советы по оптимизации
ну вот для этого и придуман инстансинг.
хотя я не понял, тебе нужно обновлять меш каждый кадр или нет? если не каждый - можно на цпу. если каждый - однозначно в шейдере. |
Ответ: Советы по оптимизации
Ну инстансинг вроде как лучше использовать в сложных моделях. Я пробывал простые объекты в инстансинге, результаты не впечатлили. И инстансинг приводит меня к началу, что большое количество ентити тоже ни к чему хорошему не приводит.
Ну пока что я хочу облака реализовать в один меш, их вроде не обязательно каждый кадр обновлять. Я вообще подумываю о таком варианте. Создать пару тройку мешей на большом расстоянии располагать квады а потом крутить эти меши с разными скоростями. Как такой вариант? |
Ответ: Советы по оптимизации
Цитата:
- какой/как ты юзал инстансинг? - если мы говорим о хардварном инстансинге (sm 3.0), то он лучше работает с простыми объектами (проверено). - с инстансингом у тебя 1 ентити. вся суть его работы в том чтобы за 1 вызов отрисовки рисовать кучу объектов с индивидуальными свойствами. свойства передаются в доп вертекс буфере (в более ранних инстансингах бывало по-другому типа в виде массива констант - но на константы сильное ограничение в DX). - не пробывал, а пробовал. это у тебя не опечатка а каждый раз, раздражает) Цитата:
|
Ответ: Советы по оптимизации
Цитата:
Цитата:
Цитата:
Цитата:
|
Ответ: Советы по оптимизации
Цитата:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Цитата:
|
Ответ: Советы по оптимизации
Вложений: 1
Будешь наверное смеяться над скрином, зато сам :rolleyes:
Квады или билборды, не знаю как правильней ) Код:
Const cloudKindCount=5 А потом кручу меш, и всё крутится вокруг центра - игрока :) |
Ответ: Советы по оптимизации
т.е. они всегда одной точкой находятся над головой игрока? такое можно одним мешем сделать. и даже одним сюрфейсом, если все варианты в атлас упаковать.
|
Ответ: Советы по оптимизации
Цитата:
|
Вложений: 1
Цитата:
Цитата:
Сделал окончательный для меня вариант. Посмотрите плиз, коменты, советы.. Буду рад любой критике, и простому варианту по рамдомному созданию квадов в меше без их пересечения. Можно ли использовать MeshIntesect, и долго ли он это проверяет? |
Ответ: Советы по оптимизации
MeshIntesect считает долго, хоть и точно.
|
Ответ: Советы по оптимизации
Начал рисовать лод-уровни для геометрии и столкнулся с такой заморочкой - хотел нарисовать сначала высокополигонный меш, сделать на него текстурную развёртку, а затем удалять точки для менее детализированных мешей. НО когда в 3д максе начал удалять точки и соединять разрывы -текстурная развертка на новые грани уже сбивается (а я думал что текстурные координаты хранятся в вертеках).
Если для каждого лод-уровня заново рисовать развертку и текстуру, то получится довольно кропотливая работа. Посоветуйте, как можно избежать потери текстурных координат в вертексах, или может прога нужна другая.. |
Ответ: Советы по оптимизации
Что, никто LOD не реализовал?
|
Ответ: Советы по оптимизации
гугли слово Ретопология.
в новых максах есть средства для этого, отдельные проги тоже есть. |
Ответ: Советы по оптимизации
Нашёл програмульку, называется Topogun 2.
Всё ништяк со штатным примером получается. Но вот как только начинаешь свой меш тестить, пишет ошибка - Неверная геометрия. Почитал и понял что косяк в том, что у меня UVS равен нулю. Но не понимаю как этот UVS добавить. |
Часовой пояс GMT +4, время: 20:50. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot