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

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

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

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

Ответ
 
Опции темы
Старый 05.11.2012, 22:13   #61
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Советы по оптимизации

это оператор вопроса

(expression)?(true expression) : (false expression)

Может это означает что при false = -1 , а при true = 1 ?
да. именно так

return float4 (clip(color.r<20 ? -1:1),color.g,color.b,color.a)
так вроде нельзя.

clip(color.r<20 ? -1:1);
return float4 (color.r,color.g,color.b,color.a)ж
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (05.11.2012)
Старый 06.11.2012, 00:46   #62
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

КРУУТААА!!!
Всё работает!!
СПАСИБО ВСЕМ ОГРОМНОЕ ЗА ПОМОЩЬ!!!!!

оказалось все просто
Vertex shader
float4x4 matViewProjection;

void vs_main(
   in float4 iPOS : POSITION,
   in float2 iTC : TEXCOORD,
   
   out float4 oPOS : POSITION,
   out float2 oTC : TEXCOORD0,
   out float2 oDIST : TEXCOORD1)  //для дистанции хватит и одного флоата, но не знаю каким типом заменить
   
{
   oPOS = mul(iPOS, matViewProjection );
   oTC = iTC;
   oDIST = oPOS.z;
}
Pixel shader
sampler TX1;
float4 ps_main(
   float2 TXC : TEXCOORD0,
   float2 DIST : TEXCOORD1
   ) : COLOR0
{   
   float4 TXOUT = tex2D(TX1, TXC);
   clip(DIST<300 ? -1:1);    //почему то дистанция 300 - а по рисунку не скажешь что так много 
   return TXOUT;
}

Теперь такой шейдер я хочу наложить на на 3 уровня мешей (low,normal,hi) и должно получится так, что один меш начнет срезаться, а другой на месте среза появляться.
Вот только есть одно но - меш который будет normal, должен исчезать на одной дистанции и появляться на другой.
Можно ли использовать оператор AND?
т.е.
clip(DIST<300 AND DIST>1000 ? -1:1);
И еще вот такой вопросик, надо ли в блитце дополнительно скрывать ентити, чтобы видяха не обрабатывала уже "вырезанный" меш?
Миниатюры
Нажмите на изображение для увеличения
Название: temp.jpg
Просмотров: 637
Размер:	101.7 Кб
ID:	17984  
__________________
(Offline)
 
Ответить с цитированием
Старый 06.11.2012, 02:06   #63
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

И еще вот такой вопросик, надо ли в блитце дополнительно скрывать ентити, чтобы видяха не обрабатывала уже "вырезанный" меш?
да

clip(DIST<300 AND DIST>1000 ? -1:1);
clip( ((DIST<300) && (DIST>1000)) ? -1:1) )
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (06.11.2012)
Старый 08.11.2012, 12:44   #64
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

У меня опять косяк с шейдером. Я думал что сюда:
texture iTEX;
sampler TEX_DIFFUSE=sampler_state{};
будет ложиться конкретная текстура в разных случаях. А у меня какая последняя текстура сюда положится, та и накладывается на все модели. Помогите разобраться.


float4x4 matWVP;

const float LODDISTHI;
const float LODDISTLO;

texture iTEX;
sampler TEX_DIFFUSE=sampler_state{};

//===================LOD HIGHT================================
void vs_lodhi(
   in  float4 iPos  : POSITION0,
   in  float3 iTXC  : TEXCOORD0,
   out float4 oPos  : POSITION0,
   out float3 oTXC  : TEXCOORD0,
   out float3 oDIST : TEXCOORD1)
{
   oPos  = mul( iPos, matWVP );
   oTXC  = iTXC;
   oDIST = oPos.z;
}

float4 ps_lodhi(float3 TXC:TEXCOORD0,  float3 DIST: TEXCOORD1) : COLOR0
{
   float4 oTEX = tex2D(TEX_DIFFUSE,TXC);
   clip(DIST<LODDISTHI ? -1:1);
   return oTEX;
}

technique LODHI {pass P0{VertexShader = compile vs_2_0 vs_lodhi(); PixelShader  = compile ps_2_0 ps_lodhi();}}
__________________
(Offline)
 
Ответить с цитированием
Старый 08.11.2012, 14:52   #65
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

А у меня какая последняя текстура сюда положится, та и накладывается на все модели.
а как ты её в шейдер передаёшь?
(Offline)
 
Ответить с цитированием
Старый 08.11.2012, 15:41   #66
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Чтото помучил, вроде заработало. Передавал так:
Global mesh2=xLoadMesh("./data/mesh/plant/grass1nr.b3d")
tx2=xLoadTexture("./data/mesh/plant/grass1nr.png",4)
xSetEntityEffect mesh2,LODFX
xSetEffectTechnique mesh2,"LODHI"
xSetEffectMatrixSemantic mesh2,"matWVP",WORLDVIEWPROJ
xSetEffectTexture mesh2,"iTEX",tx2
xSetEffectFloat mesh2,"DistHiPoly",7
Текстура то теперь передается, а вот то что она маскированная - шейдеру пофиг
__________________
(Offline)
 
Ответить с цитированием
Старый 08.11.2012, 17:28   #67
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

Текстура то теперь передается, а вот то что она маскированная - шейдеру пофиг
маскирование тебе придётся самому в шейдере писать
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (08.11.2012)
Старый 08.11.2012, 18:20   #68
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Я так уже сделал, но думал что есть вариант другой...
   float4 oTEX = tex2D(TEX_DIFFUSE,TXC);
   clip(DIST<DistLoPoly ? -1:1);
   clip(oTEX.rgb<0.004 ? -1:1);
   return oTEX;
Кстати, проверил xloadtexrute("tex",2), т.е. с альфой шейдер работает без проблем. А когда загружаешь текстуру с флагом маска получается в текстуру альфа не ложится? Это значит ксорсом обрабатываются маски?

И не могу понять, в моем случае условие "oTEX.rgb<0.004" проверяет сумму или умножение r,g и b ??
__________________
(Offline)
 
Ответить с цитированием
Старый 08.11.2012, 18:33   #69
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

А когда загружаешь текстуру с флагом маска получается в текстуру альфа не ложится? Это значит ксорсом обрабатываются маски?
тогда ксорс скорее всего создаёт в видеопамяти текстуру без альфаканала.

И не могу понять, в моем случае условие "oTEX.rgb<0.004" проверяет сумму или умножение r,g и b ??
скорее всего это oTEX.rgb < float3(0.004,0.004,0.004) и AND операция всех результатов. ваще даже не думал что оно так скомпилится.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (08.11.2012)
Старый 08.11.2012, 20:35   #70
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Не понял где надо AND оператор использовать, но пока робит вроде правильно - оставлю )

ВСЁ! У меня чтото получилось. Правда за основу взял не рябь, а сумму ргб, в результате более темные участки исчезают раньше.

Посмотрите плиз пример в аттаче, коментируем по поводу всего!!

И еще раз благодарю всех за помощь, и в особенности Mr_F_!!!
__________________

Последний раз редактировалось burovalex, 10.01.2013 в 23:17.
(Offline)
 
Ответить с цитированием
Старый 08.11.2012, 21:00   #71
FREE MAN
Разработчик
 
Регистрация: 20.02.2010
Сообщений: 397
Написано 173 полезных сообщений
(для 565 пользователей)
Ответ: Советы по оптимизации

Вполне Годный способ! Добавь еще следующие в технику

AlphaTestEnable  = 1;
 AlphaRef             = 80;
  AlphaFunc            = 5;
что бы не было чёрной обводки на маске
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (08.11.2012)
Старый 08.11.2012, 21:06   #72
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Это прям в шейдер надо писать?
__________________
(Offline)
 
Ответить с цитированием
Старый 08.11.2012, 21:09   #73
FREE MAN
Разработчик
 
Регистрация: 20.02.2010
Сообщений: 397
Написано 173 полезных сообщений
(для 565 пользователей)
Ответ: Советы по оптимизации

Да
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (08.11.2012)
Старый 08.11.2012, 21:52   #74
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Может опять чтото не то сделал, но ничего не изменилось.
technique LODMNR {
pass P0{
VertexShader = compile vs_2_0 vs_lodmnr(); 
PixelShader  = compile ps_2_0 ps_lodmnr();
AlphaTestEnable = 1;
AlphaRef = 80;
AlphaFunc = 5;
}}
Может это связано с тем, что я не альфой маску создаю, а отбрасываю с рендера (clip)?
__________________
(Offline)
 
Ответить с цитированием
Старый 08.11.2012, 22:11   #75
FREE MAN
Разработчик
 
Регистрация: 20.02.2010
Сообщений: 397
Написано 173 полезных сообщений
(для 565 пользователей)
Ответ: Советы по оптимизации

Сообщение от burovalex Посмотреть сообщение
Может опять чтото не то сделал, но ничего не изменилось.
technique LODMNR {
pass P0{
VertexShader = compile vs_2_0 vs_lodmnr(); 
PixelShader  = compile ps_2_0 ps_lodmnr();
AlphaTestEnable = 1;
AlphaRef = 80;
AlphaFunc = 5;
}}
Может это связано с тем, что я не альфой маску создаю, а отбрасываю с рендера (clip)?
Сделай вот так

technique LODMNR {
pass P0{

AlphaTestEnable = 1;
AlphaRef = 80;
AlphaFunc = 5;
AlphaBlendEnable = 0;
CullMode         = NONE;

VertexShader = compile vs_2_0 vs_lodmnr(); 
PixelShader  = compile ps_2_0 ps_lodmnr();

	}
}
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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