3d форум по Blender

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

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

вот что у меня на текущий момент получилось:
out 11

и вот "Sculpt Mode":
out 13

... для себя сделал в 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

[вложение удалено Администратором]
Название: 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

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

по поводу этого видео
MatCap03.在後製使用MatCap этого метода. Он действует, но только в 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
но я не знаю как там через ноды смешать маткапы как мне нужно (как я описывал в самом начале), если кто знает то подскажите
Название: 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
Название: Re: как можно сделать matcap в cycles?
Отправлено: sungreen от 07 Ноябрь 2013, 07:03:49
... написал "OSL" скрипт для конвертации "Matcap" в "Equirectangular" ...
... нужно просто подставить  изображение и отрендерить ...
... в результате можно получить необходимые текстуры окружения для узла "Environment Texture" ...
... думаю это не сложно, и появляется возможность микшировать "Matcap" в "Cycles" ...
... во вложении файл для конвертации ...
... вот мувик как делать ...

out 15

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

out 16

... добавлю несколько слов об 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

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

out 25

... все три метода работают, из них два последних работаю в "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