![]() |
Ответ: Советы по оптимизации
burovalex сделай LOD как в STALKERE или Crysis, забудь про всякие пиксели!
Стандартно LOD делается следующим образом делается от 2 до N количество моделей разного качества(количество полигонов,текстур - если двиг не умеет сам пережимать их и так далее). Если не нравится резкий переход моделей то тут только в помощь либо морф, как уже говорил HolyDel, либо теселяция. |
Ответ: Советы по оптимизации
я знаю о чём речь, раньше в играх любили делать по альфе переход из одного лода в другой, но чем сложнее становился рендер и геометрия, тем напряжнее было юзать повсюду альфабленд, поэтому щас много где (мафия2, гта4 итд) делают переход типа ноизом, исчезающий лод исчезает, теряя пиксели постепенно, новый лод появляется, набирая пиксели на экране.
сделать такое просто - имеешь ЧБ текстуру ноиза, проверить можешь её сразу в шопе с помощью image->adjusments->threshold, у тебя должно выйти, чтобы при кручении слайдера картинка переходила из чёрной в белую шумом. дальше делаешь тот же threshold в шейдере, наподобие float clipMask = tex2D(noise, IN.TexCoordsForMask).r; // TexCoordsForMask могут быть в скринспейсе полученные из VPOS, могут быть обычные, надо смотреть как лучше if (clipMask*maskVisibility < clipThreshold) discard; |
Ответ: Советы по оптимизации
Спасибо Mr_F_ сам я шейдер пока такой не напишу, я только начал их изучать, думал может есть готовый вариант.
Я вот подумал, а если на мешу накладывать 2-ю ЧБ текстуру, и блендом смешивать с альфой, и эту ЧБ текстуру рандомно заполнять белым. Если вариант, то как думаете, по быстродействию с шейдером сильно отличаться будет? |
Ответ: Советы по оптимизации
без шейдера можно сделать в DX с помощью D3DRS_ALPHAREF. в ксорсе, насколько я помню, есть функция xSetAlphaRef для того же самого.
в блице никак/плагином/через задницу. |
Ответ: Советы по оптимизации
Вот спасибо Mr_F_!! У меня как раз ксорс. Я совсем про эту функцию забыл) Я ей пользовался когда на меш накладывал маскированную текстуру, она хорошо сглаживает резкие края.
Попробую, что получится отпишусь :) |
Ответ: Советы по оптимизации
Не работает (
Код:
Global ref=0 Походу буду учить правописание шейдеров.. У меня вот вопросик такой родился ) Через шейдер быстрее обрабатываются меши, чем стандартно? Если да, то что, все меши можно прогонять через него или не вытянет? |
Ответ: Советы по оптимизации
Цитата:
поэтому я и расписал какую текстуру ноиза тебе надо сделать для альфы. Цитата:
|
Ответ: Советы по оптимизации
АААааа, теперь понял) Таким методом на каждом объекте будет альфа. А это не есть хорошо, потом артефакты вылазить начнут.
Я всё таки решил попробывать через шейдеры. Даже кое что научился. Но вот одно не могу понять. У меня например есть такой код пикс. шейдера: Код:
float4 tex = tex2D(Texture0, TEXCOORD0); Конкретно мне нужно просто альфу изменять. Чтоб выглядело так Код:
return r,g,b,alpha*distance; Код:
float3 rgb=...; |
Ответ: Советы по оптимизации
Цитата:
Цитата:
return float4(tex.r, tex.g, tex.b, tex.a*distance); |
Ответ: Советы по оптимизации
Вот спасибо тебе, Mr_F_!!!
Я вообще тобой поражаюсь. На любой вопрос можешь ответить! |
Ответ: Советы по оптимизации
Блин, ничего не могу понять
Короче нашел програмку для написания шейдера, RenderMonkey. Все получалось. А вот щас начал писать как ты предложил, и у меня альфа вообще не меняется на пред. просмотре. Даже пробывал так написать return float4(0.5 ,0.5 ,0 , 0); Цвета меняются, а альфа вообще не шевелится..... |
Ответ: Советы по оптимизации
Цитата:
xEntityAlpha достаточно в ксорсе, чтобы включить альфаблендинг на объекте. но для исчезания объектов ноизом альфа не нужна (!). если ты можешь её для этого юзать, то не парься, а тупо плавно её вводи-уводи у лодов, будет только лучше смотреться. фишка попиксельного исчезания именно в том, что не нужно юзать полупрозрачности - нужно просто выкидывать пиксели. забей на альфа компоненту и юзай функции clip/discard. |
Ответ: Советы по оптимизации
Всё понял, кроме функций. Что такое clip discard?
|
Ответ: Советы по оптимизации
эти функции применяются в пиксельном шейдере.
clip функция, которая отбрасывает(не рисует) пиксель если ее аргумент меньше нуля. discard отброасывает пиксель в любом случае |
Ответ: Советы по оптимизации
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) |
Часовой пояс GMT +4, время: 21:09. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot