3d форум по Blender

Blender => Материалы и текстурирование => Тема начата: sungreen от 06 Ноябрь 2013, 06:14:06

Название: как можно сделать matcap в cycles?
Отправлено: sungreen от 06 Ноябрь 2013, 06:14:06
... насколько понял, эта тема в интернетах обсуждаема, но готового решения так и не нашел (возможно плохо искал) ...

вот что у меня на текущий момент получилось:
out 11 (http://www.youtube.com/watch?v=LiQkAAOclCE#)

и вот "Sculpt Mode":
out 13 (http://www.youtube.com/watch?v=XfZ0EpL5o1c#)

... для себя сделал в cycles через ноду "Environment Texture" с проекцией входного изображения "Equirectangular", поелику MatCap – шейдер для создания светоотражающих поверхностей с равномерной окраской, для которого берется изображение сферы как карта окружения ...

(http://content-22.foto.mail.ru/mail/unixinfo/_myphoto/s-531.png)

... по ходу нужно решить две задачи как сделать или где взять эту карту окружения и как сделать shadeless в cycles ...

... как отключить чувствительность материала к свету и теням можно найти здесь "Making Shadeless Materials for Cycles in Blender" http://cgcookie.com/blender/2012/03/09/making-shadeless-materials-cycles-in-blender/  ...

... для карты окружения запек текстуру matcap на сферу, у которой UV развертка имеет вид прямоугольника ...

(http://content-12.foto.mail.ru/mail/unixinfo/_myphoto/s-533.png)

(http://content-27.foto.mail.ru/mail/unixinfo/_myphoto/s-532.jpg)

... во вложении модель для эксперементов, но без "shadeless" ...

еще информация по теме:
MatCap03.在後製使用MatCap (http://www.youtube.com/watch?v=wmIFp1jVkjE#ws)

[вложение удалено Администратором]
Название: Re: как можно сделать matcap в cycles?
Отправлено: aarrsseennyy от 06 Ноябрь 2013, 10:19:04
мне нужно было смешать 2 маткапа вот примерно таким образом:
(https://www.monosnap.com/image/1C029tefOJaY83T8MgqxLM7Jq.png)
причем вот эта маска (alpha канал), брались бы из координат UV объекта:
(https://www.monosnap.com/image/lgGbxmP3mAZ9a1xMzqGJyBUdH.png)
тоесть я бы просто контролировал смешение 2х... 3х или N-ое количество маткапов на сетке объекта в сцене


вот что у меня на текущий момент получилось:
out 11 (http://www.youtube.com/watch?v=LiQkAAOclCE#)

Вроде бы отличный, подходящий мне метод, но у меня какие-то глюки. результат, например, сферы не соответствует:
(https://www.monosnap.com/image/5ExdXXjYqJVBMq6R2Jo8bHe26.png)
у меня blender 2.69 я заметил у вас на скриншоте версию blender 2.69.1 — попробовал в этой версии (скачав вот тут http://www.graphicall.org/110) но были такие же проблемы

по поводу этого видео
MatCap03.在後製使用MatCap (http://www.youtube.com/watch?v=wmIFp1jVkjE#ws) этого метода. Он действует, но только в internal.
вот та же сцена в internal:
(https://www.monosnap.com/image/uFz4SpmllAffoBseyM8uginlq.png)
Все вроде бы ок и можно сделать как мне нужно, но:

1)желательно к cycles так как я к нему привык и там можно примешать GI
2) до меня не доходит как можно смешать там маткапы через маску из uv

а вот тот же метод на тай же сцене, только, собственно, в cycles:
(https://www.monosnap.com/image/UftnZLn00XNlu0o2j9pPLIxIZ.png)

думаю причина в том как генерируется изображение из пасса normal в render layer
вот так генерирует его internal:
(https://www.monosnap.com/image/swpa7u57us0kMjwnVWSouq2Y1.png)

в вот так cycles:
(https://www.monosnap.com/image/36x4WNpmsZe0O8bkK2Y1h1otT.png)

есть простой метод в internal Matcaps in Blender (http://www.youtube.com/watch?v=8zlMtefj1pc#)
но я не знаю как там через ноды смешать маткапы как мне нужно (как я описывал в самом начале), если кто знает то подскажите
Название: Re: как можно сделать matcap в cycles?
Отправлено: sungreen от 06 Ноябрь 2013, 13:38:29
>> но у меня какие-то глюки
... попробуй вместо 3.jpg подставить этот файл ...
... он немного грязный просто проверь что получиться ...


>> 2) до меня не доходит как можно смешать там маткапы через маску из uv
... выложи отдельно маску, matcap1 и matcap2 (ну и модель если не сложно) ...

[вложение удалено Администратором]
Название: Re: как можно сделать matcap в cycles?
Отправлено: aarrsseennyy от 06 Ноябрь 2013, 21:01:40
Цитировать
... он немного грязный просто проверь что получиться ...

допустим такая картинка подойдет, допустим она была бы даже не грязная, но это несколько неудобно, хотя и работает. неуднбно тем, что картинку сферы маткапа нужно трансформировать такм образом (хотя, если через ноды в blender) или скриптом в Ps, то это удобно.

Цитировать
... выложи отдельно маску, matcap1 и matcap2 (ну и модель если не сложно) ...
я разобрался. выложить рабочий файл, я, к сожалению, не могу, но я сделал пример и прикладываю файл. в файле мартышка, 2 маткапа, маска. смотреть в ноды файл тут http://www.sendspace.com/file/fqnwwd

только таким образом удобно накладывать 2 маткапа, как сделать несколько масок и N маткапов на объекте в данном случае не догадываюсь.
Название: Re: как можно сделать matcap в cycles?
Отправлено: sungreen от 06 Ноябрь 2013, 21:41:58
>> или скриптом в Ps, то это удобно.
... постараюсь завтра сделать OSL скрипт, тогда действительно ненужно будет промежуточного шага с трансформацией ...

... но может cycles и не нужен, вот что если по поводу смешивания "matcap" в internal ...
(http://content-26.foto.mail.ru/mail/unixinfo/_myphoto/s-534.png)

... файл с примером ...
http://files.mail.ru/7A66DF4F090E483CB7B98C8350F65379

... и мувик как делать ...
out 14 (http://www.youtube.com/watch?v=Vei6yOxR-BA#)
Название: Re: как можно сделать matcap в cycles?
Отправлено: sungreen от 07 Ноябрь 2013, 07:03:49
... написал "OSL" скрипт для конвертации "Matcap" в "Equirectangular" ...
... нужно просто подставить  изображение и отрендерить ...
... в результате можно получить необходимые текстуры окружения для узла "Environment Texture" ...
... думаю это не сложно, и появляется возможность микшировать "Matcap" в "Cycles" ...
... во вложении файл для конвертации ...
... вот мувик как делать ...

out 15 (http://www.youtube.com/watch?v=hcMTGhOvCgE#)

... вот мувик как микшировать с учетом "UV карты" для "Cycles" ...
... либо через mixrgb либо mix shader ...

out 16 (http://www.youtube.com/watch?v=1ODlP89KkdY#)

... добавлю несколько слов об OSL скрипте (для тех кому будет интересно) ...
... на нашем форуме была тема "изогнуть видео под сферическое зеркало", в которой упоминались работы Paul Bourke http://blender-3d.ru/forum/index.php/topic,414.msg5206.html#msg5206 , а предложенные им алгоритмы стали основой этого скрипта ...

http://paulbourke.net/dome/warpplayer/

... вот этот скрипт ...

Код: OSL
#include "stdosl.h"
shader simple(
vector Vi = 0,
output vector Vo = 0
){
    float x = Vi[0];
    float y = Vi[1];
     
    x = (2 * x - 1) * 2;
    y = 2 * y - 1;
   
    if(x>1) x = 2 - x;
    if(x<-1) x = -2 - x;

float theta = M_PI_2 + x * M_PI_2;
float phi = y * M_PI_2;

float px = cos(phi) * cos(theta);
float py = cos(phi) * sin(theta);
float pz = sin(phi);

theta = atan2(pz,px);
phi = atan2(sqrt(px*px+pz*pz),py);

float r = phi / M_PI_2;
float us = (1  + r * cos(theta)) / 2;
float vs = (1  + r * sin(theta)) / 2;
   
    Vo = vector(us,vs,0);
}





[вложение удалено Администратором]
Название: Re: как можно сделать matcap в cycles?
Отправлено: sungreen от 08 Ноябрь 2013, 05:34:49
... вот еще вариант, третий уже ...

(http://content-24.foto.mail.ru/mail/unixinfo/_myphoto/s-535.png)

... дописал OSL скрипт, теперь можно использовать в "Cycles" текстуры "Matcap" без конвертации ...

out 23 (http://www.youtube.com/watch?v=2cBoKlXkPC0#)

... то есть на текущий момент получилось три варианта решения это задачи:
1) смешивать текстуры "Matcap" в "Internal"
2) конвертировать текстуры "Matcap" в "Equirectangular" и использовать ноды "Environment Texture" для смешивания в "Cycles"
3) вариант использовать OSL скрипт, который трансформирует вектор таким образом чтобы стандарная нода "Image Texture" c "Matcap" работала как и нода "Environment Texture" с изображением "Equirectangular" ...

out 25 (http://www.youtube.com/watch?v=Z2VKtl3mlnU#)

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

... вот код OSL скрипта ...
Код: OSL
// name: matcap_emul_for_cycles
// author: sungreen
// version: (0, 1, 2)
// blender: (2, 6, 9)
// description: matcap for cycles
// url: [url]http://blender-3d.ru/forum/index.php/topic,602.msg6155/topicseen.html#msg6155[/url]

#include "stdosl.h"
#include "node_color.h"

vector to_fish(vector Vi)
{
    float x = Vi[0];
    float y = Vi[1];
    float z = Vi[2];

float u = -atan2(y, x) / (M_2PI) + 0.5;
float v = atan2(z, hypot(x,y)) / M_PI + 0.5;
     
    x = (2 * u - 1) * 2;
    y = 2 * v - 1;
   
    if(x>1) x = 2 - x;
    if(x<-1) x = -2 - x;

float theta = M_PI_2 + x * M_PI_2;
float phi = y * M_PI_2;

float px = cos(phi) * cos(theta);
float py = cos(phi) * sin(theta);
float pz = sin(phi);

theta = atan2(pz,px);
phi = atan2(sqrt(px*px+pz*pz),py);

float r = phi / M_PI_2;
float us = (1  + r * cos(theta)) / 2;
float vs = (1  + r * sin(theta)) / 2;
   
    return vector(us,vs,0);
}

shader node_environment_texture(
vector Vi = N,
output vector Vo = 0.0)
{

vector p = Vi;
    p = transform("world","camera",p);

    p = rotate(p, M_PI_2, vector(0,0,0), vector(1,0,0));
    p = rotate(p, M_PI_2, vector(0,0,0), vector(0,0,1));

    p = normalize(p);
    p = to_fish(p);

    Vo = p;
}

Название: Re: как можно сделать matcap в cycles?
Отправлено: aarrsseennyy от 09 Ноябрь 2013, 18:17:50
 ;D
Цитировать

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


Супер! Это то, что надо, но вот беда... блендер стал падать после рендеринга с OSL на некоторых сценах , но вы молодец.
Название: Re: как можно сделать matcap в cycles?
Отправлено: sungreen от 09 Ноябрь 2013, 18:26:59
... конечно в коде могут быть блохи, но если падает в конкретном месте и проявляется каждый раз, то могу в дебаггере посмотреть в чем проблема ...
... с конвертацией текстур должно быть по-стабиленее ...
Название: Re: как можно сделать matcap в cycles?
Отправлено: aarrsseennyy от 09 Ноябрь 2013, 18:42:50
Нет все ок. это просто сцена была с глючащей группой нодов. пока все ок.
Название: Re: как можно сделать matcap в cycles?
Отправлено: sungreen от 09 Ноябрь 2013, 19:04:16
>>но вы молодец.
... аллаверды, спасибо за интересную тему; даже если и есть готовое или более простое решение, то было интересно поднапрячь мозг в сжатые сроки ...
Название: Re: как можно сделать matcap в cycles?
Отправлено: aarrsseennyy от 20 Сентябрь 2018, 13:45:19
Некропост, конечно, но в 2.79 я заметил, что не корректно работает скрипт
Название: Re: как можно сделать matcap в cycles?
Отправлено: Samovar от 22 Сентябрь 2018, 10:09:47
Вариант без скрипта:
Название: Re: как можно сделать matcap в cycles?
Отправлено: Николай Николаев от 22 Сентябрь 2018, 19:59:47
>> Вариант без скрипта:
... если это работает и даёт адекватный результат, то просто супер, поскольку однозначно быстрее в силу того, что можно на вычислять на gpu ...
Название: Re: как можно сделать matcap в cycles?
Отправлено: Samovar от 23 Сентябрь 2018, 14:19:20
Не знаю насколько результат адекватен. Для вида именно из камеры, вроде, нормально работает. Во всяком случае, можно настроить масштаб по X и Y, вместо 0.5, поставив 0.48 или 0.49