Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 29.10.2012, 21:44   #46
FREE MAN
Разработчик
 
Регистрация: 20.02.2010
Сообщений: 397
Написано 173 полезных сообщений
(для 565 пользователей)
Ответ: Советы по оптимизации

burovalex сделай LOD как в STALKERE или Crysis, забудь про всякие пиксели!
Стандартно LOD делается следующим образом делается от 2 до N количество моделей разного
качества(количество полигонов,текстур - если двиг не умеет сам пережимать их и так далее). Если не нравится резкий переход моделей то тут только в помощь либо морф, как уже говорил HolyDel, либо теселяция.
(Offline)
 
Ответить с цитированием
Старый 29.10.2012, 22:32   #47
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

я знаю о чём речь, раньше в играх любили делать по альфе переход из одного лода в другой, но чем сложнее становился рендер и геометрия, тем напряжнее было юзать повсюду альфабленд, поэтому щас много где (мафия2, гта4 итд) делают переход типа ноизом, исчезающий лод исчезает, теряя пиксели постепенно, новый лод появляется, набирая пиксели на экране.
сделать такое просто - имеешь ЧБ текстуру ноиза, проверить можешь её сразу в шопе с помощью image->adjusments->threshold, у тебя должно выйти, чтобы при кручении слайдера картинка переходила из чёрной в белую шумом.
дальше делаешь тот же threshold в шейдере, наподобие
float clipMask = tex2D(noise, IN.TexCoordsForMask).r; // TexCoordsForMask могут быть в скринспейсе полученные из VPOS, могут быть обычные, надо смотреть как лучше
if (clipMask*maskVisibility < clipThreshold) discard;
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
burovalex (29.10.2012), HolyDel (29.10.2012)
Старый 29.10.2012, 22:55   #48
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Спасибо Mr_F_ сам я шейдер пока такой не напишу, я только начал их изучать, думал может есть готовый вариант.

Я вот подумал, а если на мешу накладывать 2-ю ЧБ текстуру, и блендом смешивать с альфой, и эту ЧБ текстуру рандомно заполнять белым.
Если вариант, то как думаете, по быстродействию с шейдером сильно отличаться будет?
__________________
(Offline)
 
Ответить с цитированием
Старый 30.10.2012, 02:45   #49
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

без шейдера можно сделать в DX с помощью D3DRS_ALPHAREF. в ксорсе, насколько я помню, есть функция xSetAlphaRef для того же самого.
в блице никак/плагином/через задницу.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (31.10.2012)
Старый 31.10.2012, 14:23   #50
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Вот спасибо Mr_F_!! У меня как раз ксорс. Я совсем про эту функцию забыл) Я ей пользовался когда на меш накладывал маскированную текстуру, она хорошо сглаживает резкие края.
Попробую, что получится отпишусь
__________________
(Offline)
 
Ответить с цитированием
Старый 02.11.2012, 01:19   #51
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Не работает (

Global ref=0
Global tmr=0
While Not xKeyHit(1)
xRenderWorld(1,0)
ref=ref+1
xEntityAlphaRef(mesh,ref)
xText 10,10,ref
xFlip
Wend
Эта функция до какогото числа сглаживает края, а потом меш тупо исчезает.
Походу буду учить правописание шейдеров..

У меня вот вопросик такой родился )
Через шейдер быстрее обрабатываются меши, чем стандартно?
Если да, то что, все меши можно прогонять через него или не вытянет?
__________________
(Offline)
 
Ответить с цитированием
Старый 02.11.2012, 01:22   #52
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

Эта функция до какогото числа сглаживает края, а потом меш тупо исчезает.
она не сглаживает края, она отбрасывает из рендера все пиксели, у которых альфа < ref.
поэтому я и расписал какую текстуру ноиза тебе надо сделать для альфы.

Через шейдер быстрее обрабатываются меши, чем стандартно?
Если да, то что, все меши можно прогонять через него или не вытянет?
сегодняшние видюхи сделаны для шейдеров, даже если ты будешь пытаться рендерить без них, внутри драйвера это будет симуляция шейдерного рендеринга, т.е. один хрен.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (02.11.2012)
Старый 02.11.2012, 11:46   #53
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

АААааа, теперь понял) Таким методом на каждом объекте будет альфа. А это не есть хорошо, потом артефакты вылазить начнут.

Я всё таки решил попробывать через шейдеры. Даже кое что научился.
Но вот одно не могу понять.
У меня например есть такой код пикс. шейдера:
float4 tex = tex2D(Texture0, TEXCOORD0);
return tex;
Вот не могу найти, как можно использовать каждую компоненту цвета.
Конкретно мне нужно просто альфу изменять.
Чтоб выглядело так
return r,g,b,alpha*distance;
И клёво было бы, если можно так
float3 rgb=...;
float alpha=...;
return rgb,alpha*distance;
__________________
(Offline)
 
Ответить с цитированием
Старый 02.11.2012, 13:13   #54
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

float4 tex = tex2D(Texture0, TEXCOORD0);
return tex;
return r,g,b,alpha*distance;
float4 tex = tex2D(Texture0, TEXCOORD0);
return float4(tex.r, tex.g, tex.b, tex.a*distance);
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (02.11.2012)
Старый 02.11.2012, 13:43   #55
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Вот спасибо тебе, Mr_F_!!!
Я вообще тобой поражаюсь. На любой вопрос можешь ответить!
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Colossus (03.11.2012)
Старый 03.11.2012, 01:01   #56
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Блин, ничего не могу понять
Короче нашел програмку для написания шейдера, RenderMonkey. Все получалось. А вот щас начал писать как ты предложил, и у меня альфа вообще не меняется на пред. просмотре.
Даже пробывал так написать

return float4(0.5 ,0.5 ,0 , 0);

Цвета меняются, а альфа вообще не шевелится.....
__________________
(Offline)
 
Ответить с цитированием
Старый 03.11.2012, 01:37   #57
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

Цвета меняются, а альфа вообще не шевелится.....
альфаблендинг или альфатестинг должны быть включены.
xEntityAlpha достаточно в ксорсе, чтобы включить альфаблендинг на объекте.
но для исчезания объектов ноизом альфа не нужна (!). если ты можешь её для этого юзать, то не парься, а тупо плавно её вводи-уводи у лодов, будет только лучше смотреться. фишка попиксельного исчезания именно в том, что не нужно юзать полупрозрачности - нужно просто выкидывать пиксели.
забей на альфа компоненту и юзай функции clip/discard.
(Offline)
 
Ответить с цитированием
Старый 04.11.2012, 12:28   #58
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Всё понял, кроме функций. Что такое clip discard?
__________________
(Offline)
 
Ответить с цитированием
Старый 04.11.2012, 13:03   #59
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Советы по оптимизации

эти функции применяются в пиксельном шейдере.
clip функция, которая отбрасывает(не рисует) пиксель если ее аргумент меньше нуля.
discard отброасывает пиксель в любом случае
(Offline)
 
Ответить с цитированием
Старый 05.11.2012, 21:59   #60
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Discart я чтото даже в майкроовской библиотеке не нашел http://msdn.microsoft.com/en-us/library/bb204826

Зато там нашел пример с Clip
И чтото я его немного не понял, т.к. он не полный
clip( Input.Color.A < 0.1f ? -1:1 );

Я понял что проверяется условие при котором отсеивать пиксель, но не понял что значит " ? -1 : 1 "
Может это означает что при false = -1 , а при true = 1 ?

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

может так?
return float4 (clip(color.r<20 ? -1:1),color.g,color.b,color.a)
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com