Blender OSL и P (position) относительно масштаба объекта - PullRequest
0 голосов
/ 07 сентября 2018

Я работаю над шейдерами в узле скриптов blender / cycle. Я тестирую шейдер "шумовой текстуры", взятый непосредственно из исходного кода blender и просто помещенный в узел Script.

Я не могу понять, как управляется глобальный P, в стандартном узле Noise Texture и в узле Script относительно масштаба объекта.

Если я масштабирую объект при применении стандартного узла Noise Texture, текстура не изменяется (масштабируется в соответствии с объектом).

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

Это похоже на то, что blender передает свойство масштаба объекта в Noise Texture, но не передает его узлу Script.

Любая информация или идеи, как ее решить?

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

Спасибо.

1 Ответ

0 голосов
/ 07 сентября 2018

я нашел правильный путь от https://blendersushi.blogspot.com/2013/08/osl-shader-writing-journey-to-unknown.html

ТРАНСФОРМАЦИОННАЯ ТЕКСТУРА С ОБЪЕКТОМ
Чтобы избежать «текстуры плавания», нам нужно назначить текстурное пространство для нашей текстуры OSL. Мы можем либо сделать это непосредственно внутри OSL или с помощью узла Blender Cycles Texture Coordinate и узел Mapping, который переходит в векторную позицию.

Если вы добавите один код ниже, он правильно назначит текстурное пространство в пространство "объекта".

point p = transform("object", P);

...