Toon


Автор Сообщение

мастер
Группа: Участники
Сообщений: 115
Добавлено: 03-09-2009 19:16
есть ли возможность использовать такой эффект в данном движке. Недавно видел пример по его созданию в блендере, там смысл очень прост: создаем модель, клонируем её, делаем чуть больше и правим что бы она "поглощала" родительскую модель. Затем назначаем ей чёрную текстуру без эффекта отражения, выделяем все полигоны и поворачиваем нормаль в другую сторону. После нажатия клавиши "P" в блендере мы запустим встроенный игровой движок и увидим черную контур вокруг модели. Думаю можно и тут выкрутится таким способом. но по моему это лишняя нагрузка на движок/комп, хотя она будет компенсировать некоторые недостатки всей картинки. Или не будет?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 03-09-2009 20:18
Ну, это дело элементарное. Грузим две модели - одну обычную, другую с вывернутыми нормалями, применяем текстуры и дело с концом. Нормали, если они в модели вывернуты, такими и загрузятся.
Можно вместо двух моделей использовать одну, разницы особой нет.

Нагрузка, само собой, будет чуть выше, особенно если модель хайполи. Но ведь ничто не мешает убрать на "вывернутой" копии излишние внутренние детали (которые все равно не будут видны), оставив только внешний силуэт.

А чем OutlineShader не устраивает?

мастер
Группа: Участники
Сообщений: 115
Добавлено: 03-09-2009 20:48
отсутствием знаний. Я и спрашивал в каком направлении копать.

мастер
Группа: Участники
Сообщений: 115
Добавлено: 23-09-2009 11:07
Прикрутил к модели этот шеёдер, однако он стал "затирать" текстуру.



код:

mesh1=FreeformCreate('DATA/OBJECT/grib2.obj',global.shadow_caster);
ObjectSetMaterial(mesh1);
ObjectPitch(mesh1,90);
ObjectSetScale(mesh1,2,2,2);
ObjectSetPosition(mesh1,20,0,10);
ObjectRotate(mesh1,-90,0,0);
MaterialCreate('mMesh1','DATA/TEXTURES/grib1.jpg');
ObjectSetMaterial(mesh1,'mMesh1');


cel=CelShaderCreate(true);
CelShaderSetLineWidth(cel,1);
CelShaderSetLineColor(cel,c_black);
HiddenLineShaderSetLineSmooth(cel,true);
HiddenLineShaderSetSolid(cel,true);
ShaderEnable(cel,true);
MaterialSetShader('mMesh1',cel);



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

P.P.S переименуйте тему в "Toon"

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 23-09-2009 12:19
А какой именно шейдер нужен-то? OutlineShader, CelShader и HiddenLineShader - это три разные вещи:
OutlineShader - рисует контур
CelShader - рисует контур + делает мультипликационное затенение, типа как в аниме
HiddenLineShader - рисует линии, составляющие полигоны.

Судя по всему, тебе нужен CelShader. А как он затирает текстуры? Смотрел скрин, но не понял. Работает вроде как и должен.

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

Для этого надо знать имена загруженных с моделью материалов. Я сейчас работаю над этим.

мастер
Группа: Участники
Сообщений: 115
Добавлено: 23-09-2009 12:29
да, нужен именно Cel. Затирает, прости что пояснение к картинке не дал, Там два "гриба" один желтый в "крапинку" другой серый, им обоим прописана одна текстура-желтого, а вот рендерится почему-то серый без текстуры. Затирает или заменяет, не знаю как правильно выразиться.

__________________________

все, просто удалил лишнее.






____




cel=CelShaderCreate(true);
CelShaderSetLineWidth(cel,1);
CelShaderSetLineColor(cel,c_black);
ShaderEnable(cel,true);
MaterialSetShader('mMesh1',cel);



 

Offtop.ru © 2003