Three.js: рдиреЛрдб рд╕рд╛рдордЧреНрд░реА

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдирд╡ре░ 2015  ┬╖  161рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mrdoob/three.js

рдирдорд╕реНрддреЗред

рдореИрдВрдиреЗ 3D рд╕рдВрд▓реЗрдЦрди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдореЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ THREE.NodeMaterial рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред SEA3D рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЕрд▓реНрдмреЗрдбреЛ рдореЗрдВ рдорд╛рд╕реНрдХ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдорд┐рд╢реНрд░рдг рдореЛрдб, рд░рд┐рдо рд╢реЗрдбрд░ рдФрд░ рдЕрдиреНрдп рдХреЗ рдмрд┐рдирд╛ рдХрд╕реНрдЯрдо рд╢реЗрдбрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкрд░рддреЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдиреЛрдб рд╢реЗрдбрд░ рдХреЗ рд╕рд╛рде рддреАрди.рдЬреЗрдПрд╕ рдореЗрдВ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ MeshPhongMaterial, MeshPhysicalMaterial рдФрд░ рдЕрдиреНрдп рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЗрд╡рд▓ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдпрд╛ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ NodeMaterial рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрджреНрдпрддрди
http://sunag.github.io/sea3d/Labs/Three.JS-NodeMaterial/webgl_materials_nodes.html
http://sunag.github.io/sea3d/Labs/Three.JS-NodeMaterial/webgl_postprocessing_nodes.html

рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП UV1 рдпрд╛ UV2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг:

var usesUv2 = true;
var isLightmap = false;

var t = new THREE.NodeTexture( texture, new THREE.NodeUV( usesUv2 ) );

var nodemat = new THREE.NodePhongMaterial();
if (isLightmap) nodemat.light = t;
else nodemat.color = t;
nodemat.build(); // build shader

рдореИрдВ рдПрдХ рд╕рдВрдкрд╛рджрдХ рднреА рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдЧрд╛ред рд░рдВрдЧ рдЕрд▓реНрдмреЗрдбреЛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╢реАрд░реНрд╖ рд╕реНрдерд┐рддрд┐ рд╣реИред
editor

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рднреА рдзреНрдпрд╛рди рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдбрд┐рдлрд░реНрдб рд╢реЗрдбрд┐рдВрдЧ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдм рдореИрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рдЕрдкрд╡рд░реНрддрди рдЗрдирдкреБрдЯ рдмрдирд╛рдКрдВрдЧрд╛ред

рдкреАрдЖрд░ рдХреЛ рд╕рдорд╛рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗ, рд╕реБрдЭрд╛рд╡, рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡реГрджреНрдзрд┐ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ: +1:

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдареАрдХ рд╣реИ, TS рд╕рдорд░реНрдерди рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рд╣реИ R017

рд╕рднреА 161 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рджрд┐рд▓рдЪрд╕реНрдк!

@sunag рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдореЗрдВ рдмрд╣реБрдд рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреА рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ? рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдХрд╛рдлреА рдордирдорд╛рдирд╛ рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддрд╛рдХрд┐ рдордзреНрдпрд╡рд░реНрддреА рдиреЛрдбреНрд╕ рднреА рдЗрдирдкреБрдЯ рд▓реЗ рд╕рдХреЗрдВред рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдЧреНрд░рд╛рдл рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдПрдХ рдмрдирд╛рд╡рдЯ(tex1, uv1)
рдмреА рдмрдирд╛рд╡рдЯ (рдЯреЗрдХреНрд╕ 2, рдпреВрд╡реА 2)
рд╕реА рдмреНрд▓реЗрдВрдб (рдП, рдмреА, рдореЛрдб)
рдбреА рд╢реЛрд░ (рдкрд░рдо 1, рдкрд░рдо 2)
рдИ рдмреНрд▓реЗрдВрдб (рд╕реА, рдбреА, рдореЛрдб)

рдФрд░ рдлрд┐рд░ рдЙрд╕ рдЕрдВрддрд┐рдо рдиреЛрдб рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВред

рддреЛ рдпрд╣ рдмрд╣реБрдд рд╣реА рдордирдорд╛рдирд╛ рд╣реИ, рдХреЗрд╡рд▓ рдмрдирд╛рд╡рдЯ рддрдХ рд╣реА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред

рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдЕрдЧрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛред рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╢реЗрдбрд░рдЧреНрд░рд╛рдл рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд░рд╣рд╛ рдерд╛: https://github.com/mrdoob/three.js/issues/7339 рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕реАрдзреЗ рдереНрд░реАрдЬреЗрдПрд╕ рдХреЗ рднреАрддрд░ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рддрдм рддрдХ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рд╡рд╣ рд▓рдЪреАрд▓рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдореИрдВ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕ рдкрд░ рд╕рд╣рдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

(1) рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рд╣реЛрдЧреАред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдирд╛рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рд╡реЗ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗ, рдФрд░ рд╕рд╛рдордЧреНрд░реА рдЙрд╕ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдХреЛрдб рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреЗрдЧреАред рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдЪрд░ (рд╡рд░реНрджреА/рднрд┐рдиреНрдирддрд╛) рдиреЛрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдиреЛрдбреНрд╕ рдХреЛ рдЕрдзрд┐рдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдмрдЬрд╛рдп рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреИрд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЦрдВрдб рдФрд░ рд╢реАрд░реНрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реЛрддреЗ рд╣реИрдВред

(2) рдореИрдВ рд▓рд╛рдЗрдЯ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдЬреНрдпреЛрдореЗрдЯреНрд░реАрдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рд╣реА рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

(3) рдореЗрд░реЗ рдкрд╛рд╕ рдпреВрд╡реА рд╣реИ рдмрд╕ рдПрдХ рдФрд░ рд╕рдВрджрд░реНрдн рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ NodeTexture рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдиреЛрдб рдЗрдирдкреБрдЯ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди UVs рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

(4) рдореИрдВ NodeCube, NodeTextureCube рдХреЛ рдмрд╛рдХреА рддреАрди.JS рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реВрдВрдЧрд╛ред рдФрд░ рдореИрдВ рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рд╕реЗ рдХрд┐рд░рдг рдХреИрд╕реЗ рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд╛рдирдХ рдХреНрдпреВрдм рдореИрдкреНрд╕ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдпрд╛ рдбрд┐рдлреНрдпреВрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдХреНрд╡реЗрд░реА рдирд╣реАрдВ рдбрд╛рд▓реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдзрд╛рд░ рдлреЛрдВрдЧ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╣реИ, рдФрд░ рдЖрдк рдХреЗрд╡рд▓ рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХреНрдпреВрдмрдореИрдк рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рдпрдВ (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░рдВрдЧ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред) рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ? рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдШрди рдмрдирд╛рд╡рдЯ рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп (рдПрдХ рджрд┐рд╢рд╛ рдФрд░ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣/рд▓реЙрдб рджреНрд╡рд╛рд░рд╛ рдкреВрдЫрддрд╛рдЫ рдпреЛрдЧреНрдп, рдФрд░ рдПрдХ рд░рдВрдЧ рджреЗрддрд╛ рд╣реИ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╡рд┐рдХрд┐рд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдШрди рдмрдирд╛рд╡рдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛред рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдиреЛрдб рд╕реНрд╡реИрдк рдХреЗ рд░реВрдк рдореЗрдВ @tschw рдХреЗ cubeToUV2 рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд╕рд╛рде рд╕рдЪ sampleCube рдмрд╛рд╣рд░ рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

(5) рдореИрдВ рдПрдХ NodeFunction рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рдХреЛ рдЖрдкрдХреЗ NodeOp рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдордирдорд╛рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдпрд╛ рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдлреИрд╢рди рдореЗрдВ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред)

(6) рдореИрдВ рд╕рднреА рд╡рд░реНрдмреЛрдЬрд╝ NodeNormal, NodeTransform, NormalMap, рдЖрджрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реНрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдКрдВрдЧрд╛ рдФрд░ рдмрд╕ рдХреБрдЫ рд╕рд░рд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИрдВ рдЬреЛ рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ NodeReference рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред NodeReference рд╡рд░реНрджреА, рднрд┐рдиреНрдирддрд╛ рдФрд░ рд╕рд╛рде рд╣реА рд╢реЗрдбрд░ рдореЗрдВ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

(7) рдореБрдЭреЗ NodeEnvironment рдФрд░ NodeCube рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NodeEnvironment рдЕрдзреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

(8) рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХрд┐ NodePhong рдХреЛ NodeMaterial рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ NodeMaterial ShaderMaterial рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдиреЗ ShaderMaterial, GraphMaterial (рдпрд╛ NodeGraphMaterial) рд╕реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╣рд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдПрдХ рд╕рд╛рде рдиреЛрдбреНрд╕ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд╣ рдЧреНрд░рд╛рдл рд╣реИ рдЬреЛ рд╕рд╛рдордЧреНрд░реА рдмрди рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдиреЛрдбред

(9) рдореИрдВ рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ рд╡рд┐рд╡рд┐рдз рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред рдореИрдВ рд░реВрдЯ рдиреЛрдб, рдордЯреЗрд░рд┐рдпрд▓ рдиреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдХреЛрдИ рдЗрд╕рд╕реЗ PhongMaterialNode рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╡реЗрдХреНрдЯрд░ 3 рдиреЛрдб, рдлреНрд▓реЛрдЯрдиреЛрдб, рдЖрджрд┐ рд╣реИ рдЬреЛ ValueNode рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИ - рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╕реНрдерд┐рд░ рд╣реЛ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рд╣реЛред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛрдИ рддреАрди рдлреНрд▓реЛрдЯрдиреЛрдбреНрд╕ рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ 3 рдиреЛрдб рдореЗрдВ рдкрд╛рдЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 10 рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдмрдЬрд╛рдп рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдкрдВрдХреНрддрд┐ рдпрд╛ рддреЛ рдШреЛрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред

(10) рдореИрдВ "рдиреЛрдб" рдирд╛рдо рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдореЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдКрдБрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдереНрд░реАрдЬреЗрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рднреА рдРрд╕рд╛ рд╣реА рд╣реИред

(11) рдореИрдВ рдирдпрд╛ рдордЯреЗрд░рд┐рдпрд▓рдиреЛрдб рд╡рд░реНрдЧ рдмрдирд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╡рд░реНрджреА рдФрд░ рднрд┐рдиреНрдирддрд╛ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рднреА рдЯреНрд░реИрдХ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрд╕рдиреЗ рдХреМрди рд╕рд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗ рдХрд┐ рдХреМрди рд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡реНрдпреБрддреНрдкрдиреНрди PhongMaterialNode рдореЗрдВ рдПрдХ рд╕реАрдорд┐рдд рд╕рдВрдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд░рд▓ рд▓реЛрдЧреЛрдВ (рднрд┐рдиреНрди, рд╡рд░реНрджреА) рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд░реНрдЧ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдЧрд╛ред

(12) рдореИрдВ NodePhong рдФрд░ NodePhongMaterial рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЗ рдмреАрдЪ рднреНрд░рдорд┐рдд рд╣реВрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЕрдм рддрдХ рджреЛрдиреЛрдВ рдереЗред

(13) рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рд╣реИ:

THREE.NodeGLPosition.prototype = Object.create( THREE.Node.prototype );
THREE.NodeGLPosition.prototype.constructor = THREE.NodeGLPosition;

THREE.NodeGL.prototype.generate = function( material, shader ) {

рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рдКрдкрд░ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА generate рдХреЛ NodeGL рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдиреЗ NodeGLPosition рд▓рд┐рдП рдПрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ-рдПрдбрд┐рдЯ рддреНрд░реБрдЯрд┐ рд╣реИред

(14) рдореИрдВ NodeReflectUVW рдФрд░ NodeRefractVector рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╕ рдЗрд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рдмрдирд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕реЗ рдХреЛрдИ рд╕рдВрджрд░реНрдн рд╕рдорд╛рдзрд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡реЗрдХреНрдЯрд░ рдХреА рдЧрдгрдирд╛ рд╕реАрдзреЗ рдЖрдЧреЗ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдЕрдирдорд░реНрдЬ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдереНрд░реАрдЬреЗрдПрд╕ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ GeometryContext рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред

(15) рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рдЕрдкрд╡рд░реНрддрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛, рд╡рд╣ рд╕рд╛рдордЧреНрд░реА рдкрд░ рд░рдВрдЧ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛ред рдЖрдк рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд░рд┐рдлреЗрдХреНрдЯ, рд░рд┐рдлреНрд▓реЗрдХреНрдЯ рдПрд▓рдУрдбреА, рдФрд░ рд░реЗрдлреНрд░реЗрдХреНрдЯ, рд░реЗрдлреНрд░реЗрдХреНрдЯрдПрд▓рдУрдбреА рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдХреЗ рдмрдирд╛рд╡рдЯ рдХреНрдпреВрдм рд╕рдордХрдХреНрд╖ (рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдпрд╛ рдирдореВрдирд╛ рдХреНрдпреВрдм-рдЖрдзрд╛рд░рд┐рдд) рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рд░рдВрдЧ рдХреЛ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдХреНрдпрд╛ рдЖрдк рдРрд╕рд╛ рд╣реА рдХрд░ рд░рд╣реЗ рдереЗ?

(16) рдореИрдВ рдкреНрд░рдХрд╛рд╢ рдЗрдирдкреБрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ - рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рдореЗрдВ рд░реЛрд╢рдиреА рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд░рдХрд╛рд╢ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЖрдк рдЗрд╕рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

@bhouston рд╡рд╛рд╣, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдореБрдЭреЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкрджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА :)

рдореБрдЭреЗ рдХрд╛рдлреА рдордирдорд╛рдирд╛ рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддрд╛рдХрд┐ рдордзреНрдпрд╡рд░реНрддреА рдиреЛрдбреНрд╕ рднреА рдЗрдирдкреБрдЯ рд▓реЗ рд╕рдХреЗрдВред рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдЧреНрд░рд╛рдл рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдПрдХ рдмрдирд╛рд╡рдЯ(tex1, uv1)
рдмреА рдмрдирд╛рд╡рдЯ (рдЯреЗрдХреНрд╕ 2, рдпреВрд╡реА 2)
рд╕реА рдмреНрд▓реЗрдВрдб (рдП, рдмреА, рдореЛрдб)
рдбреА рд╢реЛрд░ (рдкрд░рдо 1, рдкрд░рдо 2)
рдИ рдмреНрд▓реЗрдВрдб (рд╕реА, рдбреА, рдореЛрдб)

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред Uv1 рдСрдлрд╝рд╕реЗрдЯ рдЪреЗрддрди рдЙрджрд╛рд╣рд░рдг:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NodeMaterial to MaterialNode рдФрд░ THREE.PhongMaterialNode рдпрд╣ рднреА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

var uv2 = false;
var uv_offset = new THREE.NodeFloat(0);     
var uv = new THREE.NodeOperator( '+', new THREE.NodeUV( uv2 ), uv_offset);
var texture = new THREE.NodeTexture( imgTexture, uv );

nodematerial.color = t;

// onUpdate
uv_offset.number += .01;

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рдХреНрд░рдо рдХреЛ рдЙрд▓рдЯ рджреЗрдВ (рдореЛрдб, рдП, рдмреА) рд╕реЗ (рдП, рдмреА, рдореЛрдб) рдмреЗрд╣рддрд░ рд╣реЛ рдЬрд╛рдПрдВред рдореИрдВ рд░рд┐рдлреНрд▓реЗрдХреНрд╕ рдореИрдкреНрд╕, рдХреНрдпреВрдмрдореИрдк рдФрд░ рдЕрдиреНрдп рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реВрдВ ...

рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рдХреНрдпреВрдмрдореИрдк рдЕрдзреВрд░реЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдмрдЧ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░реВрдк рдХрдирд╡рд░реНрдЯрд░ рдЕрднреА рднреА рдЕрдзреВрд░рд╛ рд╣реИред рдпрд╣ рд╡реЗрдХреНрдЯрд░ рд░реВрдкрд╛рдВрддрд░рдг рджреНрд╡рд╛рд░рд╛ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП vec3 рд╕реЗ vec4 рдпрд╛ vec4ред

https://github.com/sunag/sea3d/blob/gh-pages/Labs/Three.JS-NodeMaterial/index.html#L365

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рд╢реНрд░рдг "рдмрдирд╛рд╡рдЯ": (рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)
рдЗрд╕реЗ рддреАрди.рдиреЛрдбрдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

https://github.com/sunag/sea3d/blob/gh-pages/Labs/Three.JS-NodeMaterial/index.html#L1105

THREE.NodeBlend = function( a, b, mode ) {

    THREE.NodeInput.call( this, 'blend' );

    this.mode = mode;
    this.a = a;
    this.b = b;

};

THREE.NodeBlend.prototype = Object.create( THREE.NodeInput.prototype );
THREE.NodeBlend.prototype.constructor = THREE.NodeBlend;

THREE.NodeBlend.prototype.generate = function( material, shader, output ) {

    var a = this.a.build( material, shader, output );
    var b = this.b.build( material, shader, output );

    switch(this.mode)
    {
        case 'multiply':

            return this.format( '(' + a + '*' + b + ')', this.a.type, output);

            break;
    }

    return a;

};

.generate() рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЗрдирдкреБрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреИрд▓реНрдХреНрд╕ рдХреЛрдб рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред

рдлрд┐рд░ рднреА рдореИрдВ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рдпрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ ...

рд╕рдВрдХрд▓рди рд╢реАрд░реНрд╖ рдФрд░ рдЦрдВрдб рдХреЛрдб рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб () рдореЗрдВ рдкреНрд░рдЪрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд╕рд╣рдпреЛрдЧреА рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдБ? рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рднреА рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд╕рд╣рдпреЛрдЧреА рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдБ? рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рднреА рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ред

рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдмрдирд╛рдКрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХреГрддрд┐ рджреЗ рд╕рдХреЗрдВред

рдореИрдВрдиреЗ рдЖрдкрдХреЛ (рд╕рд╛рде рд╣реА @mrdoob , @WestLangley рдФрд░ @tschw) рдХреЛ рдореЗрд░реЗ рдПрдХ рд╕рд╛рдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдиреЛрдбреНрд╕ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд░реЗрдВрдбрд░рд░реНрд╕ рдХреЗ рдмреАрдЪ рд╣рд╕реНрддрд╛рдВрддрд░рдгреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЗрд╕ рд╢реЗрдбрд░ рдЧреНрд░рд╛рдлрд╝ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдореИрдк рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рд░реЗрдкреЛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдЕрднреА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХреА рд╣реИред рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд░реВрдЪрд┐ рд░рдЦрддрд╛ рд╣реВрдВред

(2) рдореИрдВ рд▓рд╛рдЗрдЯ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдЬреНрдпреЛрдореЗрдЯреНрд░реАрдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рд╣реА рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд░реЛрд╢рдиреА рдПрдХ рд▓рд╛рдЗрдЯрдиреЛрдб рд╣реЛред рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

(3) рдореЗрд░реЗ рдкрд╛рд╕ рдпреВрд╡реА рд╣реИ рдмрд╕ рдПрдХ рдФрд░ рд╕рдВрджрд░реНрдн рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ NodeTexture рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдиреЛрдб рдЗрдирдкреБрдЯ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди UVs рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдк рдпреВрд╡реА рдХреЛ рдПрдХ vec2 рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рдпрд╣ рд╣реЛрдЧрд╛?

(5) рдореИрдВ рдПрдХ NodeFunction рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рдХреЛ рдЖрдкрдХреЗ NodeOp рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдордирдорд╛рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдпрд╛ рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдлреИрд╢рди рдореЗрдВ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред)

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореБрдЦреНрдп рд░реВрдк рд╕реЗ BlendNode рдХреЗ рд▓рд┐рдПред

(6) рдореИрдВ рд╕рднреА рд╡рд░реНрдмреЛрдЬрд╝ NodeNormal, NodeTransform, NormalMap, рдЖрджрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реНрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдКрдВрдЧрд╛ рдФрд░ рдмрд╕ рдХреБрдЫ рд╕рд░рд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИрдВ рдЬреЛ рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ NodeReference рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред NodeReference рд╡рд░реНрджреА, рднрд┐рдиреНрдирддрд╛ рдФрд░ рд╕рд╛рде рд╣реА рд╢реЗрдбрд░ рдореЗрдВ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рдЪрд╛рд░ рдХреА рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ MaterialNode рднреМрддрд┐рдХ рдлреЛрдВрдЧ рдФрд░ рднреМрддрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

(7) рдореБрдЭреЗ NodeEnvironment рдФрд░ NodeCube рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NodeEnvironment рдЕрдзреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдЕрднреА рднреА рдЗрди рдиреЛрдбреНрд╕ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

(8) рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХрд┐ NodePhong рдХреЛ NodeMaterial рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ NodeMaterial ShaderMaterial рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдиреЗ ShaderMaterial, GraphMaterial (рдпрд╛ NodeGraphMaterial) рд╕реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╣рд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдПрдХ рд╕рд╛рде рдиреЛрдбреНрд╕ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд╣ рдЧреНрд░рд╛рдл рд╣реИ рдЬреЛ рд╕рд╛рдордЧреНрд░реА рдмрди рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдиреЛрдбред

NodeMaterial рд░реВрдЯ рдиреЛрдб рд╕рд╛рдордЧреНрд░реА рд╣реЛрдЧреА, рд╢реАрд░реНрд╖ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред NodePhong рд╣рд╛рдЗрдмреНрд░рд┐рдб рд╣реИ рдФрд░ NodePhongMaterial рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреНрд▓рд╛рд╕ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

(9) рдореИрдВ рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ рд╡рд┐рд╡рд┐рдз рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред рдореИрдВ рд░реВрдЯ рдиреЛрдб, рдордЯреЗрд░рд┐рдпрд▓ рдиреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдХреЛрдИ рдЗрд╕рд╕реЗ PhongMaterialNode рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╡реЗрдХреНрдЯрд░ 3 рдиреЛрдб, рдлреНрд▓реЛрдЯрдиреЛрдб, рдЖрджрд┐ рд╣реИ рдЬреЛ ValueNode рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИ - рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╕реНрдерд┐рд░ рд╣реЛ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рд╣реЛред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛрдИ рддреАрди рдлреНрд▓реЛрдЯрдиреЛрдбреНрд╕ рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ 3 рдиреЛрдб рдореЗрдВ рдкрд╛рдЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 10 рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдмрдЬрд╛рдп рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдкрдВрдХреНрддрд┐ рдпрд╛ рддреЛ рдШреЛрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред

рдмрдврд╝рд┐рдпрд╛ рд╣реИред

(16) рдореИрдВ рдкреНрд░рдХрд╛рд╢ рдЗрдирдкреБрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ - рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рдореЗрдВ рд░реЛрд╢рдиреА рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд░рдХрд╛рд╢ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЖрдк рдЗрд╕рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рд▓рд╛рдЗрдЯрдореИрдк рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд▓рд╛рдЗрдЯрдиреЛрдб рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред

рдпрд╣ рд▓рд╛рдЗрдЯрдореИрдк рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд▓рд╛рдЗрдЯрдиреЛрдб рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд▓рд╛рдЗрдЯрдореИрдк рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЗрд╕рдХреЗ рд▓рд┐рдП рдпреВрд╡реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред :)

@bhouston рдЖрдЬ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рдареАрдХ рдХрд░реЗрдВ: рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдирд╛
https://github.com/sunag/sea3d/blob/gh-pages/Labs/Three.JS-NodeMaterial/three.node.js

рдпрд╣ рд╡рд╣ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ: рдХрд▓рд╛: рдмрдирд╛рд╡рдЯ рдФрд░ рдмрдЯрди рдПрдХ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рд╣реИ, рдХреЗрд╡рд▓ рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

http://sea3d.poonya.com/flow/

рдЕрджреНрднреБрдд рд╕рд╛рдорд╛рди! рдмрдХрд╡рд╛рд╕! рдпрд╣ рдЦреВрдмрд╕реВрд░рдд рд╣реИред

рдХреНрдпрд╛ рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рднреА рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХреВрдВ? рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреАрдЖрд░ рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рд░реВрдк рдореЗрдВ?

рдЖрдк рдпрд╣рд╛рдБ Sea3D рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

https://github.com/sunag/sea3d/tree/gh-pages/Labs/Three.JS-NodeMaterial

рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдлреЛрд░реНрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдХреНрдпрд╛ рдЖрдк рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ? рд╣рдо рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рд╣рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдкреВрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди @mrdoob рд╢рд╛рдпрдж (?) рдЗрд╕реЗ рдереНрд░реАрдЬреЗрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рднреАрддрд░ рд╣реА рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ!

рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдлреЛрд░реНрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдХреНрдпрд╛ рдЖрдк рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ? рд╣рдо рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рд╣рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмреЗрд╢рдХ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдорджрдж рдЕрджреНрднреБрдд рд╣реЛрдЧреАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛, рдореБрдЭреЗ рд╕рдВрддреГрдкреНрддрд┐, рд╢реЛрд░ рдЬреИрд╕реЗ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдкреНрд░рдХрд╛рд░ рднреА рд▓рд╛рдиреЗ рд╣реЛрдВрдЧреЗред

рдЖрдк рдпрд╣рд╛рдБ Sea3D рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдпрд╣ рд╕рдм рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

@mrdoob рд╕рд╛рдордЧреНрд░реА рдХреЗ рдирд╛рдо, рддреАрди.MaterialNode рдпрд╛ рддреАрди.NodeMaterial рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ?

рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ THREE.NodeMaterial рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпреВрдкреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдХреЗ рдХрд░реАрдм рд╣реВрдВ?
https://github.com/sunag/sea3d/commit/55cf70aea38b2b72110abf96f7b96924dad81c54

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреНрдпреВрдмрдореИрдк рдХреЛ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдмрдирд╛рд╡рдЯ рдореЗрдВ рдЦреАрдВрдЪреЗрдВ
https://raw.githubusercontent.com/mrdoob/three.js/master/examples/textures/skyboxsun25degtest.png

http://sea3d.poonya.com/flow/

рдПрдХ рд░рд┐рдо рд╢реЗрдбрд░ рдЙрджрд╛рд╣рд░рдг
flow-rimshader-example

рдХреНрд╖реЗрддреНрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЙрджрд╛рд╣рд░рдг
flow-areareflection

рдпрд╣ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реИ @sunag!

@рднреВрд╕реНрдЯрди рдзрдиреНрдпрд╡рд╛рдж! рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ R74 рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛?

рдпрд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдХрд╛рдо рд╣реИ! рдореБрдЭреЗ рд╢реЗрдбрд░рдлреЛрд░реНрдЬ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдЕрдм рддрдХ!

@ рд╕реБрдирдЧ рдпрд╣ рдереЛрдбрд╝рд╛ рдХрд╛рдо рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░

рд╕реБрдВрджрд░ рдЖрджрдореА рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрддрд╛ рд╣реИ: рдХреНрдпрд╛ рдореИрдВ рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЗрдВрдбрд░ 3 рдбреА рдиреЛрдб рд╕рдВрдкрд╛рджрдХ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдпрд╣ рд╕реБрдкрд░ рдХреБрд╢рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдмреНрд▓реЗрдВрдбрд░ рдХреЗ рдиреЛрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдмреАрдЖрд░ рдкрд░ рдХреБрдЫ рдмреЗрд╣рддрд░реАрди рд╡реАрдбрд┐рдпреЛ рднреА рд╣реИрдВ рдФрд░ рдкреАрдмреАрдЖрд░ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдиреЛрдб рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ:

https://www.youtube.com/playlist?list=PLlH00768JwqG4__RRtKACofTztc0Owys8

рдпрд╣ рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдФрд░ R74 рд╢реЗрдбрд░ рдХреЛрдб рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдбрд╝реЗ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрд░реА рдЧрд▓рддреА рд╣реИрдВред :)

@bhouston рд╡рд╛рд╣ред рдирдП r74 рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рдл рдерд╛ред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЕрднреА рднреА рдорд╛рдирдХ рд╕рд╛рдордЧреНрд░реА рдЧрд╛рдпрдм рд╣реИред рдХреЛрдИ рднреА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдореИрдВ рдпрд╣рд╛рдБ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдБ:) рдзрдиреНрдпрд╡рд╛рдж
https://github.com/sunag/sea3d/commit/d544ad7993272348f8bbea2337cdceb52159a6a8

рдПрдХ рдФрд░ рдЪреАрдЬ рдЬреЛ рд╣рдо рдЕрднреА рднреА рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╣реИ рдЕрдкрд╡рд░реНрддрдиред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреНрдпреВрдмрдореИрдк рдЖрд░рдЯреАрдЯреА рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдЧрд╛ред

@GGAlanSmithee рдореЗрд░реЗ рдкрд╛рд╕

@richardanaya рдЕрджреНрднреБрдд рд╡реАрдбрд┐рдпреЛред рдзрдиреНрдпрд╡рд╛рдж!

@mrdoob рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд┐рд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ? three.js рд░реВрдЯ (src/materials/node) рдпрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ?
https://github.com/sunag/sea3d/tree/gh-pages/Labs/Three.JS-NodeMaterial/node

рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ "рдордЯреЗрд░рд┐рдпрд▓ рдЧреНрд░рд╛рдл" рдпрд╛ рдЙрд▓реНрдЯреЗ рдереНрд░реАрдЬреЗрдПрд╕ рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ "рдЧреНрд░рд╛рдлрдордЯреЗрд░рд┐рдпрд▓" рдХрд╣рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдпрд╛ рдпрджрд┐ рдЖрдк "рдиреЛрдб" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ "рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА" рдХрд╣реВрдВрдЧрд╛ред рдЗрди рджреЛрдиреЛрдВ рдирд╛рдореЛрдВ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдиреЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдиреЛрдбреНрд╕

рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ "рдордЯреЗрд░рд┐рдпрд▓ рдЧреНрд░рд╛рдл" рдпрд╛ рдЙрд▓реНрдЯреЗ рдереНрд░реАрдЬреЗрдПрд╕ рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ "рдЧреНрд░рд╛рдлрдордЯреЗрд░рд┐рдпрд▓" рдХрд╣рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдпрд╛ рдпрджрд┐ рдЖрдк "рдиреЛрдб" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ "рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА" рдХрд╣реВрдВрдЧрд╛ред рдЗрди рджреЛрдиреЛрдВ рдирд╛рдореЛрдВ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдиреЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВред рдореИрдВ рдлреИрд╕рд▓рд╛ @mrdoob рдкрд░

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ @ рд╕реБрдирдЧ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рдЕрдкрд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдХреНрдпреВрдмрдореИрдкреНрд╕ рдХреЗ рд╕рд╛рде рд░рд╣реВрдВрдЧрд╛, рдпрд╣ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдХреЛрдИ рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЖрд░рдЯреАрдЯреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ 128^2 рдпрд╛ 256^2 рдкрд░ рддреЗрдЬреА рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ @ рд╕реБрдирдЧ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рдЕрдкрд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдХреНрдпреВрдмрдореИрдкреНрд╕ рдХреЗ рд╕рд╛рде рд░рд╣реВрдВрдЧрд╛, рдпрд╣ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдХреЛрдИ рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЖрд░рдЯреАрдЯреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ 128^2 рдпрд╛ 256^2 рдкрд░ рддреЗрдЬреА рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд╣рд╛рдБ, рд╣рдо рджреЛрдиреЛрдВ рдХреЛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рджрд░реНрд╢рди x рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдЪрд░реНрдЪрд╛ рд╣реЛрдЧреАред рдЕрднреА рднреА рд╡рд┐рдорд╛рди рдЕрдкрд╡рд░реНрддрди (рдХрд╛рдВрдЪ, рдкрд╛рдиреА) рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреНрдпреВрдмрдореИрдк (рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП) рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдмрдлрд░ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред

NodeStandard рдХреЛ рдПрдирд╛рд▓рд╛рдЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CubeMap рдХреЛ рдЦреАрдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
https://raw.githubusercontent.com/mrdoob/three.js/master/examples/textures/skyboxsun25degtest.png
http://sea3d.poonya.com/flow/

рд╕реНрд░реЛрдд:
https://github.com/sunag/sea3d/blob/gh-pages/Labs/Three.JS-NodeMaterial/node/NodeStandard.js

@mrdoob рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд┐рд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ? three.js рд░реВрдЯ (src/materials/node) рдпрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ?

рдореИрдВ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд░рдЦреВрдВрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ src . рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ "рдордЯреЗрд░рд┐рдпрд▓ рдЧреНрд░рд╛рдл" рдпрд╛ рдЙрд▓реНрдЯреЗ рдереНрд░реАрдЬреЗрдПрд╕ рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ "рдЧреНрд░рд╛рдлрдордЯреЗрд░рд┐рдпрд▓" рдХрд╣рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдпрд╛ рдпрджрд┐ рдЖрдк "рдиреЛрдб" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ "рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА" рдХрд╣реВрдВрдЧрд╛ред

рдореЗрд░реЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВред рдореИрдВ рдлреИрд╕рд▓рд╛ @mrdoob рдкрд░

рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА NodeMaterial ... рд╢рд╛рдпрдж NodesMaterial ? NodeGraphMaterial ? @WestLangley рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдиреЛрдбреНрд╕ рдХрд╛ рдирд╛рдо рдмрджрд▓реВрдВрдЧрд╛ ... NodeColor , NodeFloat , NodeTexture , ... рд╕реЗ ColorNode , FloatNode , TextureNode

http://sea3d.poonya.dev/flow/

рдореИрдВ рдЗрд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛

рдореИрдВ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд░рдЦреВрдВрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ src рдореЗрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдмреНрд▓рд╢:

@mrdoob рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдиреЛрдбреНрд╕ рдХрд╛ рдирд╛рдо рдмрджрд▓реВрдВрдЧрд╛ ... NodeColor, NodeFloat, NodeTexture, ... рдХреЛ ColorNode, FloatNode, TextureNode

рдореИрдВ рдЗрд╕реЗ рддрдм рдлреЙрд░рд╡рд░реНрдб рдХрд░реВрдВрдЧрд╛ред

рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдпреВрдЖрд░рдПрд▓ рд╣реИ: рдмреНрд▓рд╢:, рдЗрд╕реЗ рдЖрдЬрдорд╛рдПрдВ:
http://sea3d.poonya.com/flow/

@WestLangley рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ THREE.FlowMaterial ред

рдореЗрд░реА рджреВрд╕рд░реА рдкрд╕рдВрдж рд╣реЛрдЧреА THREE.CustomMaterial ред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджрд░реНрд╢рдХ рдХреЗ рд░реВрдк рдореЗрдВред NodeMaterial рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣реА рдЙрдиреНрд╣реЗрдВ Blender3D . рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЕрдЧрд░ @mrdoob рдХреЛ

NodeMaterial рдпрд╣ рддреЛ . рд╣реИ

рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрдорд╛рд▓ рдХрд╛ рд╣реИ! рдЕрднреА рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдбреЗрдореЛ рджреЗрдЦрд╛ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдиреЛрдбреНрд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдереНрд░реА рдХреЛрд░ рдореЗрдВ рдЬрд╛рдПред рд╡реЗ рдмрд╣реБрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рдореИрдВ рднреА ShaderFrog.com рдХреЗ рд▓рд┐рдП рдПрдХ рддреАрди.рдЬреЗрдПрд╕ рд╢реЗрдбрд░ рдЧреНрд░рд╛рдл рд╕рдВрдкрд╛рджрдХ (рдЕрднреА рддрдХ рдЬрд╛рд░реА рдирд╣реАрдВ) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреЛрдб рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреИрд╕реЗ рд╕рдорд╛рди рдирд╛рдореЛрдВ рдХреЛ рдПрдХ рдЫреЛрдЯреА JSON рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рд╣реИ рдмрд╛рд╣рд░реА рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде

screen shot 2015-11-20 at 12 05 26 pm

рдпрд╣ рдЧреНрд░рд╛рдлрд╝ рд╕рдВрдкрд╛рджрдХ рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рдкреВрд░реНрдг рд╢реЗрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реЗрдбрд░ рдиреЛрдб рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдереНрд░реА рдХреЛрд░ рдХреЗ рдмрд╛рд╣рд░ рднреА рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ RawShaderMaterial рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдЗрд╕ рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдереНрд░реА рдХреЛрд░ рдХреЗ рдмрд╛рд╣рд░ рднреА рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рд╣реИ рдПрдХ RawShaderMaterial рд╣реИред

@DelvarWorld рд╣рд╛рдпред рд╣рд╛рдБ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд▓реЗрдХрд┐рди рдХрдЪреНрдЪреЗ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╢реЗрдбрд░ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЙрд╕ рд╕рдордп рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рд╕реНрдХрд┐рди / рдореЙрд░реНрдл рдФрд░ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЗ рдЕрдиреНрдп рдореВрд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд░рдЦрдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛:
"рдлреНрд▓реЛ" рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдиреЛрдбреНрд╕ рдЦреАрдВрдЪрддреЗ рд╕рдордп рдХрдиреЗрдХреНрдЯрд░ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдкрд░рддреЛрдВ рдпрд╛ рдХреБрдЫ рдФрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реА рд╣реЛред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдПрдХрдЬреБрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдореБрдЭреЗ рдПрдХ рдмрд╣реБрд╕реНрддрд░реАрдп рд╢реЗрдбрд░ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдмреАрдПрд╕рдбреАрдПрдл рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдЫрд╛рдпрд╛рдВрдХрди рдореЙрдбрд▓ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЕрднреА рдпрд╣ @sunag рдХреЗ рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдмрд╣реБрдд рдХрд╕рдХрд░ рдпреБрдЧреНрдорд┐рдд рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдХрд┐рд╕реА рдХреЛ рдорд╛рдирдХ рдпрд╛ рдлреЛрдВрдЧ рд╕рд╛рдордЧреНрд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХрдЪреНрдЪрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ @DelvarWorld рдХреЗ рдкрд╛рд╕ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╣рд╛рдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП

рдпрд╣ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╢реЗрдбрд░ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдореЛрдЯрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдпрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреИрд╕реЗ рд╕рдорд╛рди рдирд╛рдо, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ Three.js, рдЖрджрд┐ред https://github.com /DelvarWorld/ShaderFrog-рд░рдирдЯрд╛рдЗрдо/рдмреНрд▓реЙрдм/рдорд╛рд╕реНрдЯрд░/THREE_SHADER_FORMAT.md

рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╢реЗрдбрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдЪреНрдЪреЗ рд╢реЗрдбрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЪреВрдВрдХрд┐ GPU рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ) рдФрд░, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдореЛрдЯреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╢реЗрдбрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрдИ рдзрд╛рд░рдгрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбрд┐рд▓реАрд╡рд░реА рд╣реИред рдпрд╣ Three.js рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдВрдд рдореЗрдВ RawShaderMaterial рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдереНрд░реА.рдЬреЗрдПрд╕ рдореЗрдВ рд╢реЗрдбрд░реНрд╕ рдХреЛ рдкреЛрд░реНрдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдПрдХ рдорд╛рдирдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рджрд┐рдпрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдмрд╛рд╣рд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдПрдХ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдереВрдХ рджреЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рддрдХ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдереНрд░реА.рдЬреЗрдПрд╕ред

рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╢реЗрдбрд░ рдорд╛рдирдХ рдХрд╛ рддреАрди рдореЗрдВ рд╕реНрдерд╛рди рд╣реИ? рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрднреА рдпрд╣ рд╢рд╛рдпрдж рдореЗрд░реЗ рд▓рд┐рдП рдереНрд░реА рдХреЛрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдереНрд░реА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реЗрдбреНрд╕ рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред

@DelvarWorld рдореИрдВрдиреЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╢реЗрдбрд░ рдЧреНрд░рд╛рдл рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рдорд╛рдирдХреАрдХреГрдд рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛:

https://github.com/OpenMaterialGraph/OpenMaterialGraph

рдпрд╣рд╛рдВ рдиреЛрдб рд╡рд┐рдирд┐рд░реНрджреЗрд╢:

https://github.com/OpenMaterialGraph/OpenMaterialGraph/tree/master/spec/nodes

рдиреНрдпреВрдирддрдо рдмреАрдПрд╕рдбреАрдПрдл рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ:

https://github.com/OpenMaterialGraph/OpenMaterialGraph/tree/master/spec/bsdfs

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдУрд░ рдЙрдиреНрдореБрдЦ рд╣реИред

рдореЗрд░реА рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдереНрд░реАрдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЗрдбрд░ рдХрд╛ рдЦреЛрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрдЪреНрдЪреЗ рд╢реЗрдбрд░ рд╕реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рд╣реИ рд▓реЗрдХрд┐рди рдлреЛрдВрдЧ рд╢реЗрдбрд░ рд╕реЗ рдирд┐рдЪрд▓рд╛ рд╕реНрддрд░ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реЗрдбрд░ рдореЙрд░реНрдл рд▓рдХреНрд╖реНрдп, рд╣рдбреНрдбрд┐рдпреЛрдВ рдЖрджрд┐ рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рдпреЗ рд╕рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд╢ рдпреЛрдЬрдирд╛ рд╢реЗрдбрд░реНрд╕ (рдмреЗрд╕рд┐рдХ, рд▓реИрдореНрдмрд░реНрдЯ, рдлреЛрдВрдЧ, рд╕реНрдЯреИрдВрдбрд░реНрдб) рдЙрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрднреА рдПрдХ рдирд┐рд╣рд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢реЗрдбрд░ рд╣реИ (рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╢реЗрдбрд░ рдореЗрдВ рд╕рдорд╛рди рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ) - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╣рд╛рдВ рдкреНрд▓рдЧ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдкреНрд░рдХрд╛рд╢ рдпреЛрдЬрдирд╛рдУрдВ (рдлреЛрдВрдЧ, рд▓реИрдореНрдмрд░реНрдЯ, рдмреЗрд╕рд┐рдХ, рдпрд╛ рдмрд╣реБрд╕реНрддрд░реАрдп) рдореЗрдВ рдкреНрд▓рдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЙрди рдкреНрд░рдХрд╛рд╢ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдиреЛрдб рд╣реИрдВред

@bhouston рдУрд╣ рдЕрдЪреНрдЫрд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ, рдЙрд░реНрдл тАЛтАЛтАЛтАЛрдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди, рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо, рдорд╛рдирд╡ рдкрдардиреАрдп рд╡рд┐рд╡рд░рдг, рдЖрджрд┐ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдореВрд▓реА рдЖрд╕рд╛рди рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рдЖрдк рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдЙрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВред

рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╢реЗрдбрд░ рдкреНрд░рд╛рд░реВрдк рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ lib рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд╕рдХреЗред рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬреЛ рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдРрд╕рд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ? рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдФрд░ рдХреБрдЫ рдирд╣реАрдВред

*рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рддреАрди.рдЬреЗрдПрд╕ рдореЗрдВ рдХрд▓реНрдкрдирд╛ рд╣реЛрдиреЗ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЕрдиреНрдп рдкреНрд░рддрд┐рдкрд╛рджрди рдкрд╛рдЗрдкреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред

рдЕрднреА рдпрд╣ рд╢рд╛рдпрдж рдореЗрд░реЗ рд▓рд┐рдП рдереНрд░реА рдХреЛрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдереНрд░реА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реЗрдбреНрд╕ рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╛рд░ NodeMaterial(*Flow) рдПрдХ рджреГрд╢реНрдп рднрд╛рд╖рд╛ рд╣реЛрдиреЗ рдкрд░ THREE.NodeGL.prototype.generate рдЕрдВрджрд░ рд╕рдВрд╢реЛрдзрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрд╕реА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреВрд╕рд░реА рднрд╛рд╖рд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред NodeBuilder рдЗрд╕рдХрд╛ рджреНрд╡рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рдордзреНрдпрд╕реНрде рд╣реИред

рдореИрдВрдиреЗ рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ "рдХрдЪреНрдЪреЗ" рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛: рдпрд╣ рдЕрднреА рднреА рдХрдИ рдмрдЧ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
https://github.com/sunag/sea3d/blob/gh-pages/Labs/Three.JS-NodeMaterial/index.html#L179
https://github.com/sunag/sea3d/blob/gh-pages/Labs/Three.JS-NodeMaterial/node/NodeMaterial.js#L9

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдиреЛрдбреНрд╕ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдорд▓реНрдЯреА-рдкрд╛рд╕ рдХреЗ рд▓рд┐рдП NodePass рдФрд░ PR рдХреЗ рдмрд╛рдж NodeMaterialD рдореБрдЭреЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдПрдХ рд░рдирдЯрд╛рдЗрдо рд╢реЗрдбрд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ THREE.ShaderFrogLoader рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред

"рдлреНрд▓реЛ" рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдиреЛрдбреНрд╕ рдЦреАрдВрдЪрддреЗ рд╕рдордп рдХрдиреЗрдХреНрдЯрд░ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред

@MasterJames рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд▓реВрдВрдЧрд╛ред

:+1:

рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред :рдкрд╕реАрдирд╛_рдореБрд╕реНрдХреБрд░рд╛рдирд╛:
http://sunag.github.io/sea3d/Labs/Three.JS-NodeMaterial/webgl_materials_nodes.html

рд╡рд┐рдЪрд╛рд░?

@sunag +1 : - )

+1!

рдпрд╣ рддреЛ рдХрдорд╛рд▓ рд╣реИред рдореИрдВ рдмрд╛рджрд▓реЛрдВ рдХреА рддрд░рд╣ рд╡рд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрдЬрд╛рдп рдкреМрдзреЛрдВ + рджреАрд╡рд╛рд░ рдмрдирд╛рд╡рдЯ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реВрдВред :) рд╡рд╣ рдмрд╕ рд╕реБрдВрджрд░ рд╣реИред

рдореИрдВ рдмрд╛рджрд▓реЛрдВ рдХреА рддрд░рд╣ рд╡рд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрдЬрд╛рдп рдкреМрдзреЛрдВ + рджреАрд╡рд╛рд░ рдмрдирд╛рд╡рдЯ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реВрдВред

рдЖрдк 'рдкрд░рддреЛрдВ' рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ? рдлрд┐рд░ рднреА рдореИрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛

рдЬреАрдкреАрдпреВ рд╕реЙрдлреНрдЯ-рдмреЙрдбреА
soft-body

рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, Shader Frog рдЧреНрд░рд╛рдл рд╕рдВрдкрд╛рджрдХ рдЕрдм рд▓рд╛рдЗрд╡ рд╣реИ, рдФрд░ рдпрд╣ "рдХрд┐рдХ рдж рдЯрд╛рдпрд░реНрд╕" рдЪрд░рдг рдореЗрдВ рд╣реИред рдореИрдВ рдпрд╣ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рддреАрди.рдЬреЗрдПрд╕ рдХреЛрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

ShaderFrog рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдиреЛрдб рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирдВрдд рдиреЛрдб рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╢реЗрдбрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдФрд░ рд╕рдордЭ рдПрдХ рдЪрдордХ рд╢реЗрдбрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╢реЗрдбрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдФрд░ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рд╣реЛрддрд╛ рд╣реИ:

screen shot 2015-12-08 at 1 48 24 pm

... рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╢реЗрдбрд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВ ...

screen shot 2015-12-08 at 1 49 39 pm

... рд╢реЗрдбрд░ рдЧреНрд░рд╛рдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ...

screen shot 2015-12-08 at 1 50 40 pm

рдФрд░ рдЯрд╛-рджрд╛! рдПрдХ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд░рд┐рдо рд╢реЗрдбрд░ ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╢реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдиреНрд╣реАрдВ рджреЛ рд╢реЗрдбреНрд╕ рдХреЛ рдорд╛рд╕реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣:

screen shot 2015-12-08 at 1 56 03 pm

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЗрд╡рд▓ "рдиреЛрдб рдкреНрд░рдХрд╛рд░" рдПрдХ рдЧреБрдгрд╛ рдиреЛрдб рд╣реИ (рд╢реЗрдбрд░рдлреНрд░реЙрдЧ рдореЗрдВ рдЕрдиреНрдп рд╣реИрдВ), рдЬреЛ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред ShaderFrog рдХрд┐рд╕реА рднреА рд╢реЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдирдВрдд рдиреЛрдб рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдпрд╣ рдЙрдиреНрдирдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдереНрд░реА.рдЬреЗрдПрд╕ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдЗрд╕ рд╣реЗрд░рдлреЗрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

ShaderFrog рдХреЗ рдкрд╛рд╕ Three.js рдХреЛ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рд╕рдорд░реНрдерди рдореБрдлреНрдд рдореЗрдВ рд╣реИред рд╕рднреА рддреАрди.рдЬреЗрдПрд╕ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ред Sea3D рдПрдХ рддреГрддреАрдп рдкрдХреНрд╖ рдЙрддреНрдкрд╛рдж рд╣реИ, рдЬреИрд╕реЗ ShaderFrogред рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЙрддреНрдкрд╛рдж рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЛ рдереНрд░реА рдХреЗ рдореВрд▓ рдореЗрдВ рд░рдЦрдирд╛ рдПрдХ рдЕрдиреБрдЪрд┐рдд рд▓рд╛рдн рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рд░рд╛рдЬрдиреАрддрд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

@DelvarWorld рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрдХрдиреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЛрдб-рдЖрдзрд╛рд░рд┐рдд рд╢реЗрдбрд░ рдирд┐рд░реНрдорд╛рдг

рдореЗрд░реЗ рдЬреИрд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ (рдмреНрд▓реЗрдВрдбрд░ 3 рдбреА рдЬреИрд╕реЗ рдЯреВрд▓ рд╕реЗ) рд╢реЗрдбреНрд╕ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВ, рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдореЗрд░реЗ рд▓рд┐рдП рдЕрдкрдиреЗ 3 рдбреА рдореЙрдбрд▓рд┐рдВрдЧ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реЗрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреАрдмреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдиреЛрдб рд╕реЗрдЯрдЕрдк рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХрднреА рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рднрдЧрд╡рд╛рди рдореЗрд░реА рдорджрдж рдХрд░реЗрдВред

@DelvarWorld рдХрдорд╛рд▓ рд╣реИред рдореБрдЭреЗ рдирдпрд╛ рд╕рдВрдкрд╛рджрдХ рдкрд╕рдВрдж рд╣реИред

@DelvarWorld +1 рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! :- )

рдзрдиреНрдпрд╡рд╛рдж! :)

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрдХрдиреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЛрдб-рдЖрдзрд╛рд░рд┐рдд рд╢реЗрдбрд░ рдирд┐рд░реНрдорд╛рдг рдЕрдмрд╛рд╕реНрдЯреНрд░рдХреНрд╢рди рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред

рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреАрдмреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдиреЛрдб рд╕реЗрдЯрдЕрдк рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ

рдпрд╣рд╛рдВ рдореЗрд░реЗ рдХрд╛рдЙрдВрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрди рджреЛрдиреЛрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдереНрд░реА.рдЬреЗрдПрд╕ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдореБрдлреНрдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА ShaderFrog рд╢реЗрдбреНрд╕ рдУрдкрди рд╕реЛрд░реНрд╕ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП PBR рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдиреЛрдб рдХреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рд╕реАрдЦрд╛, рд╕рдВрдкрд╛рджрд┐рдд рдФрд░ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╢реЗрдбрд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рддреАрди.js рдХреЛрд░ рдореЗрдВ рдХреБрдЫ рд╕рдмрд╕реЗрдЯ)ред рдореЗрд░реЗ рд▓рд┐рдП, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рддреАрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рдмреАрдЪ рдХреА рд░реЗрдЦрд╛ рдХреЛ рдПрдХ рд╡реЗрдмрдЧреНрд▓ рд░реИрдкрд░ рдПрдкреАрдЖрдИ рд╣реЛрдиреЗ рдФрд░ рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмреАрдЪ рдХреА рд░реЗрдЦрд╛ рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд░рддрд╛ рд╣реИред рд╢реЗрдбрд░ рдиреЛрдб рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдРрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдиреЛрдб рд╕рдВрдкрд╛рджрдХ рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рд╣реИ? рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@DelvarWorld рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, ShaderFrog рдЕрднреА рднреА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдФрд░ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ рддреЛ рдЧреНрд░рд╛рдлрд╝рдордЯреЗрд░рд┐рдпрд▓ рд╕реЗ рдЖрдЧреЗ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдЧреНрд░рд╛рдлрдордЯреЗрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрд╛, рдФрд░ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рд╕рд╛рджрдЧреА рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдорд╛рдзрд╛рди/рд╕рдВрдкрд╛рджрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛ рднреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдРрд╕реА рд╕рд╛рдордЧреНрд░реА рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдП рдЬреЛ рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдереНрд░реАрдЬреЗрдПрд╕ рдХреА рдПрдХ рдЙрдЪрд┐рдд рдЪрд┐рдВрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NodeMaterial рдФрд░ Flow рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлреЛрдХрд╕ рд╣реИрдВред рдлреНрд▓реЛ рдФрд░ рд╢реЗрдбрд░рдлреНрд░реЙрдЧ рджреЛрдиреЛрдВ рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░реНрд╕ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рд╕реЙрд▓реНрдпреВрд╢рди рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрд▓реЛрдЬреНрдб рд╕реЛрд░реНрд╕ рдореЗрдВ рд╣реИрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдореЗрдВ) рдЕрдиреНрдп рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рд╢реЗрдбрд░ рдПрдбрд┐рдЯрд░ рд╣реИред рдореИрдВ @richardanaya рд╕реЗ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ ShaderFrog рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдкрд░ NodeMaterial рд╕реЗ рдЖрдЧреЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлреНрд▓реЛ рдХреЛ рд╕рд┐рд░реНрдл рдПрдХ рднреМрддрд┐рдХ рд╕рдВрдкрд╛рджрдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ ShaderFrog рдХреЗ рдорд╣рд╛рди рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдкреЛрдВрдЫ: рдХрд╛рд╕реНрдЯрд┐рдХ-рд╡реЛрд░реЛрдиреЛрдИ
http://sunag.github.io/sea3d/Labs/Three.JS-NodeMaterial/webgl_materials_nodes.html
caustic

@ рд╕реБрдирдЧ рдореИрдВ рдЖрдЬ рд░рд╛рдд рдЖрдкрдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ

  • рдореИрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдПрдХ рдкреАрдЖрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред :)
  • рдХреЗрд╡рд▓ рдорд╛рдирдХ рд╡рд╛рд▓реЗ (uv, uv2, рд╕рд╛рдорд╛рдиреНрдп, рд╕реНрдерд┐рддрд┐, рдЖрджрд┐) рдХреЗ рдмрдЬрд╛рдп рдордирдорд╛рдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╢реЗрдбреНрд╕ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ vec4s рд╕реЗ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ 2 uvs рд╕реЗ рдЕрдзрд┐рдХ рдФрд░ рдХрдИ рд░рдВрдЧ рднреА рдЧреБрдгред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдВ рдПрдХ рдЕрдиреБрд░реЛрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд░рдгреА рдпрд╛ рдХреБрдЫ рдореЗрдВ рдЬрд░реВрд░рддреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░реВрдВрдЧрд╛ред
  • рдореИрдВ рдиреЛрдбреНрд╕ рдХреЗ рдХреБрдЫ рд╕рдВрдЧрдарди рдХреЛ рдореБрдЦреНрдп рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓, рдмреАрдЖрд░рдбреАрдПрдл (рдлреЛрдВрдЧ, рд╕реНрдЯреИрдВрдбрд░реНрдб, рдЖрджрд┐), рдмрдирд╛рд╡рдЯ рдиреЛрдбреНрд╕ (рдиреЛрдбрдХреНрдпреВрдмрдЯреЗрдХреНрдЪрд░, рдиреЛрдбрдЯреЗрдХреНрдЪрд░), рдПрдХреНрд╕реЗрд╕рд░ (?) рдиреЛрдбреНрд╕ (рдиреЛрдбрдкреЛрдЬрд┐рд╢рди, рдиреЛрдбрдиреЙрд░реНрдорд▓), рдЧрдгрд┐рдд рдиреЛрдбреНрд╕ (рдиреЛрдбрдСрдкрд░реЗрдЯрд░, рдЖрджрд┐) рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред ), рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдиреЛрдбреНрд╕ (NodeSwitch, ...), рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд (?) (NodeVelocity, ...) рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреАред
  • рдкреНрд░реЛрдЬреЗрдХреНрд╢рди, рд╡реНрдпреВ рдФрд░ рд╡рд░реНрд▓реНрдб рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
  • рдЖрдк рдХреБрдЫ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ: % ^ & << >> ~ |
  • рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдм рдХрдХреНрд╖рд╛ рдЗрддрдиреА рдЫреЛрдЯреА рд╣реЛрддреА рд╣реИ рддреЛ рдореБрдЭреЗ NodePhongMaterial рдореЗрдВ рдорд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдореБрдЭреЗ рдмрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ NodePhong рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ NodeMaterial рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣ рдирд╛рдо рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, GraphMaterial рдмрд╣реБрдд рдХреБрдЫ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреНрд░рдХреГрддрд┐, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВред)
  • рдореИрдВ NodeTimer -> NodeTime... рдХреЛ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛ рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реАрдпрддрд╛ред
  • рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХрдИ рдЪрд░ рдиреЛрдбреНрд╕ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдкрдиреЗ рдиреЛрдбрдореИрде #, рдиреЛрдбрдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рд╣реИред рдпреЗ рдмрд╣реБрдд рд╕рдорд╛рди рд▓рдЧрддреЗ рд╣реИрдВ: NodeViewPosition, NodeWorldPosition, NodeViewNormal, NodeTransformedNormal, NodeTransformedPosition, NodeProjectPosition...
  • рдореИрдВ NodeMath#, NodeOperator рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХреЛрдВ рдХрд╛ рд╕реЗрдЯ рдПрдХ рдРрд╕реЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╕реВрдЪреА рд╣реЛ, рддрд╛рдХрд┐ рдХреЛрдИ рдЗрд╕рдХреЗ рд╕рд╛рде рдбреНрд░реЙрдкрдбрд╛рдЙрди рдмреЙрдХреНрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░ рд╕рдХреЗред рдЕрднреА рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рджрд╕реНрдп рд╣реИрдВ рдЬреЛ рд╕рд┐рд░реНрдл рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкреВрдВрдЬреАрдХреГрдд рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкрд╣рдЪрд╛рдирдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИред рдореИрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдЬреЛ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдмрд╕ рдЙрди рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ?
  • NodeTransformedNormal, NodeTransformedPosition рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рд╡реЗ рдХреНрдпрд╛ рд╣реИрдВред рдХреНрдпрд╛ рд╡реЗ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╣реИрдВ, рдЕрдВрддрд░рд┐рдХреНрд╖ рджреЗрдЦреЗрдВ, рд╡рд╕реНрддреБ рд╕реНрдерд╛рди? "рд░реВрдкрд╛рдВрддрд░рд┐рдд" рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрдж рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ред рдореИрдВ рдЕрдм рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдб рджреЗрдЦреВрдВрдЧрд╛ ....
  • рдореИрдВ NodeUV рдФрд░ NodeColor рдХреЛ рдХреНрд░рдорд╢рдГ 2 рдФрд░ 1 рдЪреИрдирд▓ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреВрдВрдЧрд╛ред рдлрд┐рд░ рд╕реЗ рдореИрдВ рдЗрди рдирд┐рд░реНрдорд┐рдд рдЬреЗрдиреЗрд░рд┐рдХ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреИрдирд▓реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдб рдХреЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдХрдИ рдкреНрд░реАрд╕реЗрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рдЪрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдХреБрдЫ рд╕рдорд░реНрдкрд┐рдд рдХреЛрдб рдкрде рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдХреЗрд╕ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред

рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:

  • рдореИрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмреАрдЖрд░рдбреАрдПрдл, рдореВрд▓ рд░реВрдк рд╕реЗ рджреЛ рдорд╛рдирдХ рдмреАрдЖрд░рдбреАрдПрдл рдХреЗ рд╕рд╛рде рдПрдХ рдЧреНрд░рд╛рдл рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдЙрдирдХреЗ рдмреАрдЪ рдКрд░реНрдЬрд╛ рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдкреАрдЖрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛ рджреЗрдЧрд╛ред

@bhouston рд╡рд╛рд╣! рд╢реБрдХреНрд░рд┐рдпрд╛!

рдЕрдиреБрд░реЛрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХрд╛ рд╕рдВрдЧрдарди, NodeTime, NodePosition, NodeNormal, NodeView рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред +3 рдЙрджрд╛рд╣рд░рдг рднреА рдЬреЛрдбрд╝реЗред

рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╣рдореЗрдВ integer рдФрд░ matrix рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдЬреЛрдбрд╝рдиреА рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рд▓рд┐рдП рдлреНрд▓реЛрдЯ/рд╡реЗрдХреНрдЯрд░# рдЬреИрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдЕрдЧрд▓реЗ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рдлрд╝реА рдХрд╛рдо рд╣реИ.. :sweat_smile:

рдХрд▓ рдореИрдВ рдкреАрдЖрд░ рдмрдирд╛рдКрдВрдЧрд╛ред рдореБрдЭреЗ рдЕрднреА рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реИред

@рд╕реБрдирд╛рдЧ :

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ:

addGui( 'metalnessA', roughnessA.number, function( val ) {

                        roughnessA.number = val;

                    }, false, 0, 1 );

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ:

рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рдЙрджрд╛рд╣рд░рдг рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдкреАрдмреАрдЖрд░ рдиреЛрдб рдЧреНрд░рд╛рдлрд╝ <3 . рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЪрдХреНрдХрд░ рдЖрдпрд╛

<3
рдкрд┐рдЫрд▓реЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди
https://github.com/sunag/sea3d/commit/a2e3813b53902331e91dbc0f6bae0136a384ad0c

рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рд░реЗрд╡ 4 + рдиреЛрдбрдкрд╛рд╕

refraction

http://sunag.github.io/sea3d/Labs/Three.JS-NodeMaterial/webgl_postprocessing_nodes.html

рдЕрдЪреНрдЫрд╛!

рдореИрдВ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ, рдпрд╣ рд╕реБрдВрджрд░ рд╣реИ!

рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рд░реЗрд╡ 5 + рд▓рд╛рдЗрдЯрдиреЛрдб

http://sunag.github.io/sea3d/Labs/Three.JS-NodeMaterial/webgl_materials_nodes.html

рддреНрд╡рдЪрд╛
nodematerial-rev5-skin

рддреВрди рдЫрд╛рдпрд╛рдВрдХрди
nodematerial-rev5-toon

++ color-adjustment рдФрд░ plush рдЙрджрд╛рд╣рд░рдгред

рдирд┐рдЗрд╕!

subsurface scattering :sweat_smile:

рдпрд╣ рдПрдХ рддрд░рд╣ рдХрд╛ рд╢реЗрдбрд░ рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЕрдкрдбреЗрдЯ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

http://sunag.github.io/sea3d/Labs/Three.JS-NodeMaterial/webgl_materials_nodes.html

sss-img1
sss-img2

!

рднрдпрд╛рдирдХ NodeMaterial рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ/рдмрдЧ рд╣реИрдВ:

  • рдЕрдиреБрдЧрд╛рдореА рд╡реНрд╣реЙрдЯреНрд╕рдПрдк рдмреНрд░реЗрдХ рдлрдВрдХреНрд╢рди рдиреЛрдб
var n1 = new THREE.FunctionNode(" float mul_2_float(float x) { return x*2.0; }"); // problem
var n2 = new THREE.FunctionNode("float mul_2_float(float x) { return x*2.0; }"); // ok
  • рдлрд╝рдВрдХреНрд╢рди рдиреЛрдб рдореЗрдВ int рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛

рдлреНрд▓реЛрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг:

var floatFuncNode= new THREE.FunctionNode("float mul_2_float(float x) { return x*2.0; }");

var funcCallNode = new THREE.FunctionCallNode(floatFuncNode);
funcCallNode.inputs.x = new THREE.FloatNode(0.2);

var colorResNode = new THREE.OperatorNode(new THREE.ColorNode(0x00ff00),
    funcCallNode, THREE.OperatorNode.MUL);

var mat = new THREE.PhongNodeMaterial();
mat.color = colorResNode;

int рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЯреВрдЯрд╛ рд╣реБрдЖ рдЙрджрд╛рд╣рд░рдг:

var intFuncNode= new THREE.FunctionNode("float mul_2_int(int x) { return float(x)*2.0; }");

var funcCallNode = new THREE.FunctionCallNode(intFuncNode);
funcCallNode.inputs.x = new THREE.IntNode(1);

var colorResNode = new THREE.OperatorNode(new THREE.ColorNode(0x00ff00),
    funcCallNode, THREE.OperatorNode.MUL);

var mat = new THREE.PhongNodeMaterial();
mat.color = colorResNode;
  • рд╕реБрдЭрд╛рд╡: FunctionCallNode рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реЗрдВ
//current:
var funcCallNode = new THREE.FunctionCallNode(floatFuncNode);
funcCallNode.inputs.param1 = new THREE.FloatNode(1);
funcCallNode.inputs.param2 = new THREE.ColorNode(0x0f0f0f);

// proposed:
var funcCallNode = new THREE.FunctionCallNode(floatFuncNode, 
    { param1: new THREE.FloatNode(1), param2: new THREE.ColorNode(0x0f0f0f) } );

// and, i think suitable in some cases: 
var funcCallNode = new THREE.FunctionCallNode(floatFuncNode, 
    [ new THREE.FloatNode(1), new THREE.ColorNode(0x0f0f0f) ] );
  • рдХреНрдпрд╛ PhongNodeMaterial рдмрдВрдк рдореИрдк рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ?

рдХреБрдЫ рдФрд░ рдиреЛрдЯ:

  • рд╕реНрдерд┐рддрд┐ рдиреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ред "рдХрдЪреНрдЪреЗ" NodeMaterial рдореЗрдВ рдЦрдВрдб shader рдореЗрдВ LOCAL:
var material = new THREE.NodeMaterial(
        new THREE.RawNode( new THREE.PositionNode( THREE.PositionNode.PROJECTION ) ),
        new THREE.RawNode( new THREE.PositionNode( THREE.PositionNode.LOCAL ) )
    );

рдкрд░рд┐рдгрд╛рдореА рд╢реЗрдбреНрд╕:

varying vec3 vPosition;
void main(){
gl_Position = (projectionMatrix * modelViewMatrix * vec4( position, 1.0 ));
vPosition = transformed;
}
varying vec3 vPosition;
void main(){
gl_FragColor = vec4(vPosition,0.0);
}

рд╕рдВрднрд╡рддрдГ "рд░реВрдкрд╛рдВрддрд░рд┐рдд" рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдлреЛрдВрдЧ/рд╕реНрдЯреИрдВрдбрдЖрд░реНрдЯ рдиреЛрдб рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

  • рдХреЙрдиреНрд╕реНрдЯрдиреЛрдб рдЙрдкрдпреЛрдЧ
    var material = new THREE.NodeMaterial(
        new THREE.RawNode( 
            new THREE.OperatorNode(
                new THREE.PositionNode( THREE.PositionNode.PROJECTION ),
                new THREE.ConstNode("float TWO = 2.0;"),
                THREE.OperatorNode.MUL)
            ),
        new THREE.RawNode( new THREE.ColorNode( 0xff0000 ) )
    );

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╢реЗрдбрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ
gl_Position = ((рдкреНрд░реЛрдЬреЗрдХреНрд╢рдирдореИрдЯреНрд░рд┐рдХреНрд╕ * рдореЙрдбрд▓рд╡реНрдпреВрдореИрдЯреНрд░рд┐рдХреНрд╕ * vec4 (рд╕реНрдерд┐рддрд┐, 1.0)) * рджреЛ);
рд▓реЗрдХрд┐рди рджреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдореЗрд░реА рдЧрд▓рддреА рд╣реИ рдпрд╛ рдмрдЧ?
рд╕рд╛рде рд╣реА, ConstNode рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП "рдлреНрд▓реЛрдЯ TWO = 2.0" рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @dimarudol ! рдпрджрд┐ рдЖрдк рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдореБрдХреНрдд рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдиреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдирдпрд╛ рд░рд┐рд╡реАрдЬрди рдХрд░реЗрдВред

рд▓реЗрдХрд┐рди рджреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдореЗрд░реА рдЧрд▓рддреА рд╣реИ рдпрд╛ рдмрдЧ?

рдореИрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдЗрд╕ рддрд░реАрдХреЗ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП material.include( node ) рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛

рдЙрд╕ рд╕рдордп рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

var TWO = new THREE.ConstNode("float TWO = 2.0;");
THREE.NodeLib.add( TWO ); // global

 var material = new THREE.NodeMaterial(
        new THREE.RawNode( 
            new THREE.OperatorNode(
                new THREE.PositionNode( THREE.PositionNode.PROJECTION ),
                TWO,
                THREE.OperatorNode.MUL)
            ),
        new THREE.RawNode( new THREE.ColorNode( 0xff0000 ) )
    );

рд╣рд╛рдп @ рд╕реБрдирдЧ , рдореИрдВ Sea3d Flow рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдмрд╕ рдпрд╣ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реЗрдкреЛ рд╣реИред
рд╕рд╛рджрд░ред

рдирдорд╕реНрддреЗ @rraallvv , рдЕрднреА рдирд╣реАрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рд╣реИред рдореИрдВ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЦрдмрд░ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред

рдзрдиреНрдпрд╡рд╛рдж @ рд╕реБрдирдЧ , рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рд╣рд╛рдп @рд╕реБрдирд╛рдЧ ! рдЖрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛!
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ: рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдиреЛрдбреНрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреНрд░рддрд┐ рд╢реАрд░реНрд╖ рд░рдВрдЧ (рдФрд░ рдХрд╕реНрдЯрдо рдкреНрд░рддрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ рдлреНрд▓реЛрдЯ рд╡реИрд▓реНрдпреВ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдиреЛрдбреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХрд▓рд░рдиреЛрдб рдФрд░ рдлреНрд▓реЛрдЯрдиреЛрдб рдкреВрд░реЗ рдЬрд╛рд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ .. рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдлрд╝рд░рдХреЛрд▓реЛрд░рдиреЛрдб (рддреАрди.рдмрдлрд╝рд░рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рджреГрд╢реНрдп рдорд┐рд▓рд╛ рд╣реИ:

screenshot from 2016-08-31 16 27 06

рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХрд╛ рдЕрдкрдирд╛ рд░рдВрдЧ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ THREE.BufferAttribute рдФрд░ рдПрдХ THREE.ShaderMaterial рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдХреБрдЫ рдЪрд╛рд╣рд┐рдП рд╣реЛрдЧрд╛:
`рдЪрд▓реЛ рд╕рд╛рдордЧреНрд░реА = рдирдпрд╛ рддреАрдиред StandardNodeMaterial ();
рдЪрд▓реЛ texColorMap = рдирдпрд╛ рддреАрдиред TextureNode (рдирдпрд╛ рддреАрдиред TextureLoader ()ред рд▓реЛрдб ("colorMap.jpg"));
рдЪрд▓реЛ customData = рдирдпрд╛ рддреАрдиред BufferFloatNode (рдирдпрд╛ Float32Array (...), "рдбреЗрдЯрд╛"); // рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо рд╣реИ

рдЪрд▓реЛ colorMap = рдирдпрд╛ рддреАрдиредFunctionNode([
"vec3 colorMap (sampler2D texColorMap, рдлреНрд▓реЛрдЯ рдбреЗрдЯрд╛) {",
"рд╡рд╛рдкрд╕реА vec3 (texture2D (texColorMap, customFunc (рдбреЗрдЯрд╛)));", // customFunc рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ vec2 рд▓реМрдЯрд╛рддрд╛ рд╣реИ
"}"
]ред рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ ("рдПрди"));

рдЪрд▓реЛ colorMapCall = new THREE.FunctionCallNode(colorMap);
colorMapCall.inputs.texColorMap = texColorMap;

рд╕рд╛рдордЧреНрд░реАред рд░рдВрдЧ = colorMapCall;
рд╕рд╛рдордЧреНрд░реА.рдмрд┐рд▓реНрдб (); `

рд╡реИрд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ FunctionNode рдХреЗ рд▓рд┐рдП sampler2D рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ...

рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдореИрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ :)

@martinRenou рдзрдиреНрдпрд╡рд╛рдж! рд╣рдореНрдо, рд╢рд╛рдпрдж рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛:

bufferGeometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 4 ) );
...
colorMapCall.inputs.data = new THREE.ColorsNode(); // send color.x to float slot

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдиреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ ... рд╢рд╛рдпрдж THREE.BufferAttributeNode рдЬреИрд╕рд╛ рдХреБрдЫ ...

@sunag рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)
рдореИрдВ рд╡рд╣ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ рддреЛ рдореИрдВ рддреАрди.рдмрдлрд░рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдиреЛрдб рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛, рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЕрднреА рднреА рдЖрдкрдХрд╛ рдХреЛрдб рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

  1. THREE.FunctionNode рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдПрдХ рдирдореВрдирд╛ 2D рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд░рдВрдЧ рдореИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдмрдирд╛рд╡рдЯ 2 рдбреА () рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдмрдирд╛рд╡рдЯ 2 рдбреА () рдХреЗ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЧрдгрдирд╛ рдореЗрд░реЗ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИред (рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рдкрдорд╛рди рд╣реИ)ред
    рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ рдХрд┐ vec3 рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдорд┐рддреНрд░рд╡рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рд▓реЗрдХрд┐рди FunctionNode, sampler2D рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛?
  2. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, THREE.FunctionNode рдХреЗрд╡рд▓ рдЦрдВрдб рд╢реЗрдбрд░ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдореЗрдВ рднреА рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рдпрд╣ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛, рдЗрд╕реЗ IsoColor рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рдВрдЧ рдбреЗрдЯрд╛ (рддрд╛рдкрдорд╛рди, рджрдмрд╛рд╡ ...) рд▓рд╛рд▓ -> рдЙрдЪреНрдЪ рддрд╛рдкрдорд╛рди, рдиреАрд▓рд╛ -> рдирд┐рдореНрди рддрд╛рдкрдорд╛рди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИ:
screenshot from 2016-09-01 17 29 58

  1. рдореИрдВ рдПрдХ рддреАрди рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБредIsoColorNode (рдЬреЛ рдореЗрд░реЗ рдЖрд░реЗрдЦ рдХреЗ FunctionNode рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛), рдФрд░ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдЬреЛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдВрдЧреЗред рдХреНрдпрд╛ рдЖрдк рдЙрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? @mrdoob рдХреНрдпрд╛ рдЖрдк рднреА рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ?

THREE.FunctionNode рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдПрдХ рдирдореВрдирд╛ 2D рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд░рдВрдЧ рдореИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдмрдирд╛рд╡рдЯ 2 рдбреА () рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдмрдирд╛рд╡рдЯ 2 рдбреА () рдХреЗ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЧрдгрдирд╛ рдореЗрд░реЗ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИред (рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рдкрдорд╛рди рд╣реИ)ред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ рдХрд┐ vec3 рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдорд┐рддреНрд░рд╡рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рд▓реЗрдХрд┐рди FunctionNode, sampler2D рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛?

рдореИрдВ рдЕрдм рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдБ! рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ @dimarudol рдХреЗ рдЕрдиреНрдп рдиреЛрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, THREE.FunctionNode рдХреЗрд╡рд▓ рдЦрдВрдб рд╢реЗрдбрд░ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдореЗрдВ рднреА рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рджреЛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реЗ:

  • sampler2D triangle-blur рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИрдВ
  • рдХрд╕реНрдЯрдо BufferAttribute custom-attribute рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИрдВ

рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдХреЛрдб рдореЗрдВ рдкреЙрд▓рд┐рд╢ рджреВрдВрдЧрд╛ ...

https://github.com/mrdoob/three.js/pull/9636

рд╡рд╛рд╣ ! рдЖрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ: рдореБрд╕реНрдХрд╛рди:

рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рдп @рд╕реБрдирд╛рдЧ ,

рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд╢реВрдиреНрдп" рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде FunctionNode рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ (рд░рдВрдЧ, рдЕрд▓реНрдлрд╛ ...) рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдореИрдВ рдПрдХ рдХреНрд▓рд┐рдк рдкреНрд▓реЗрди рдлрдВрдХреНрд╢рдирдиреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╢реЗрдбрд░ рднрд╛рдЧ рд▓рд┐рдЦреЗрдВ:

void clipPlane(vec4 plane){
 if(dot(position, plane.xyz) > plane.w) discard;
}

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ ... рдПрдХ рд╕рдорд╛рдзрд╛рди рдПрдХ рдлреНрд▓реЛрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЕрд▓реНрдлрд╛ рдирд╣рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдл рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдХреБрдЫ рд╢реВрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

var clipPlane = new FunctionNode([
"void clipPlane(vec 4 plane){",
" if (dot(position, plane.xyz) > plane.w) discard;",
"}"].join("\n"));
var clipPlaneCall = new FunctionCallNode(clipPlane);
clipPlaneCall.inputs.plane = myVec4Node;

var threshold = new FunctionNode([
"void threshold(float upperBound, float lowerBound, float data){",
" if(data < lowerBound) discard;",
" if(data > upperBound) discard;",
"}"].join("\n"));
var thresholdCall = new FunctionCallNode(threshold);
thresholdCall.inputs.upperBound = myFloatNode1;
thresholdCall.inputs.lowerBound = myFloatNode2;
thresholdCall.inputs.data = myAttributeNode;

var myMaterial = new StandardNodeMaterial();
myMaterial.color = ...
myMaterial.alpha = ...

// voidFunctions is not a good name I'm not inspired...
myMaterial.voidFunctions = [clipPlaneCall, thresholdCall];

рдЕрдзрд┐рдХ "рдбрд┐рдЬрд╝рд╛рдЗрди" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рдЗрд╕ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЪрд╛рдпрджрд╛рдиреА рдкрд░ рдЫреЗрдж рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ:
wood-hole-texture
рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

var holes = new FunctionNode([
"void holes(vec3 texColor){",
" if (/*texColor too much dark*/) discard;",
"}"].join("\n"));
var holesCall = new FunctionCallNode(holes);
holesCall.inputs.texColor = new TextureNode(LoadTexture("holes-text.jpg"));

var myMaterial = new StandardNodeMaterial();
myMaterial.voidFunctions = [holesCall];
myMaterial.side = THREE.DoubleSide;

рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╢реЗрдбреНрд╕ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреНрд░рдо рдкрд░ рд╣рдорд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдХрдореНрдпреВрдЯрд┐рд╡ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИ ...

рдЖрдЗрдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВ:

var transparencyPlane = new FunctionNode([
"float transparencyPlane(vec 4 plane){",
" if (dot(position, plane.xyz) > plane.w) return 0.5.;",
" return 1.;",
"}"].join("\n"));
var transparencyPlaneCall = new FunctionCallNode(transparencyPlane);
transparencyPlaneCall.inputs.plane = myVec4Node;

var displacement = new FunctionNode([
"vec3 displacement(vec3 vector){",
" return position + vector;",
"}"].join("\n"));
var displacementCall = new FunctionCallNode(displacement);
displacementCall.inputs.vector = myVec3Node;

var myMaterial = new StandardNodeMaterial();
myMaterial.transform = displacementCall;
myMaterial.alpha = transparencyPlaneCall;

рдпрджрд┐ рдХреЛрдИ рдмрд┐рдВрджреБ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рддрд▓ рдХреЗ рдкреАрдЫреЗ рд╣реИ рдФрд░ рд╡рд┐рд╕реНрдерд╛рдкрди рдХреЗ рдХрд╛рд░рдг рдкрд░реЗ рдЖрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд┐рд╕реЗ "transparencyPlaneCall" рдХреЛ "рд╡рд┐рд╕реНрдерд╛рдкрди рдХреЙрд▓" рдЕрд▓реНрдлрд╛ = 1 рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕реЗ рдЕрд▓реНрдлрд╛ = 0.5 рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдХреНрд░рдо рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ... рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?

рдирдорд╕реНрддреЗ @martinRenou

рд╣рдореНрдо, рд▓рдЧрднрдЧ void рд╕реНрд▓реЙрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж ProxyNode рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдСрд░реНрдбрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдХреЛрдб рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдпрд╛ рдЕрдВрдд рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╢рд╛рдпрдж functionsStart рдпрд╛ functionsEnd рд╕реНрд▓реЙрдЯ...

alpha рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрджрд┐ alpha 0 рд╣реИ рддреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
https://github.com/mrdoob/three.js/blob/dev/examples/js/nodes/materials/PhongNode.js#L180

рддреЛ рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдХреНрд░рдо рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ...

рдПрдХ рдЕрдиреБрдХреНрд░рдо рдореМрдЬреВрдж рд╣реИ рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ:
https://github.com/mrdoob/three.js/blob/dev/examples/js/nodes/materials/PhongNode.js#L122

рдлрд╝рдВрдХреНрд╢рди рдСрд░реНрдбрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд░рд▓ dependencies рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, FunctionCall рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕реНрд▓реЙрдЯ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, color рдкрд╣рд▓реЗ рд╣реИ specular рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╣реИред

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реЗрдбрд░ рдХреЛрдб рд╣реИ: fragment рд╕реЗ transparencyPlaneCall рдФрд░ vertex рд╕реЗ displacementCall ред

рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ ( varying рдФрд░ рд╕реНрдерд╛рдиреАрдп) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдХреЙрдиреНрд╕ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж рдПрдХ VarNode ...

рд╣реЛ рдЧрдпрд╛ r6 - https://github.com/mrdoob/three.js/pull/9636

рдпрджрд┐ рдЕрд▓реНрдлрд╛ 0 рд╣реИ рддреЛ рдЕрд▓реНрдлрд╛ рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ред

рдлрд╝рдВрдХреНрд╢рди рдСрд░реНрдбрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдирд┐рд░реНрднрд░рддрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрдВрдХреНрд╢рдирдХреЙрд▓ рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕реНрд▓реЙрдЯ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рдкрд╣рд▓рд╛ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рджреВрд╕рд░рд╛ рд╣реИред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЕрд╕рд▓ рдореЗрдВ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдореБрдЭреЗ рдЕрд▓реНрдлрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдореЗрд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдареАрдХ рдмрд╛рдж рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ: рд╕реНрдорд╛рдЗрд▓реА:

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реЗрдбрд░ рдХреЛрдб рд╣реИ: рдлреНрд░реИрдЧрдореЗрдВрдЯ рдЯреВ рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрд╕реАрдкреНрд▓реЗрдирдХреЙрд▓ рдФрд░ рд╡рд░реНрдЯреЗрдХреНрд╕ рдЯреВ рд╡рд┐рд╕реНрдерд╛рдкрдирдХреЙрд▓ред

рд╕рд╣реА ! рддреЛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдерд╛ред рдореЗрд░реА рдЧрд▓рддреАред

рд╣реЛ рдЧрдпрд╛ r6 - #9636

рдардВрдбрд╛ ! рдЖрдкрдХреЗ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ (рдЕрд▓рдЧ-рдЕрд▓рдЧ рдФрд░ рд╕реНрдерд╛рдиреАрдп) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдХреЙрдиреНрд╕ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж рдПрдХ VarNode...

рдЕрдЪреНрдЫрд╛ рднреА рд▓рдЧрддрд╛ рд╣реИ, рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ varNode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛?

@ рд╕реБрдирдЧ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдореЗрдВ FunctionNode рдХреЗ рд╕рд╛рде AttributeNode рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдб рд╣реИ:

var customData = new THREE.AttributeNode("data", "float");

var myFunc = new THREE.FunctionNode([
 "vec3 myFunc(float data){",
 " return vec3(data, 0., 0.);"
 "}"].join("\n"));
var myFuncCall = new THREE.FunctionCallNode(myFunc);
myFuncCall.inputs.data = customData;

material.transform = myFuncCall;

рд╢реЗрдбрд░ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:

...
varying float nVdata;
attribute float data;
...
float myFunc(float data){
 return return vec3(data, 0., 0.);
}

void main(){
...
transformed = myFunc(nVdata); // We use nVdata but it is not initialized
...
nVdata = data;
...
}

рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП nVdata рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд┐рдХреНрд╕ рд╣реЛрдЧрд╛?

рдЕрдЪреНрдЫрд╛ рднреА рд▓рдЧрддрд╛ рд╣реИ, рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ varNode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛?

рд╣рд╛рдВ! рд╡рд┐рдЪрд╛рд░ рд╢реАрд░реНрд╖ / рдЯреБрдХрдбрд╝рд╛ shaders рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдмреЗрд╣рддрд░ рд╕рдВрдЪрд╛рд░ рд╣реИ varying рдХреЗ рд░реВрдк рдореЗрдВ VarNode ред рдпрд╣ keywords рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЕрдм рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рдиреНрдпреВрдирддрдо varying рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ void function рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдореЗрдВ FunctionNode рдХреЗ рд╕рд╛рде AttributeNode рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдлрд┐рдХреНрд╕реНрдб - https://github.com/mrdoob/three.js/pull/9681

рд╣рд╛рдп @ рд╕реБрдирдЧ , рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛, рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ mtl.transform рдореЗрдВ рдЖрдкрдиреЗ рдХрд┐рдпрд╛ рдерд╛ ... рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╢реВрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЖрдк рдЗрд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ?
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреАрд╡рд░реНрдб рдореЗрдВ :рд╕реНрдорд╛рдЗрд▓реА:

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рднрд┐рдиреНрдирддрд╛рдУрдВ рдХреЛ mtl.varyings (mtl.varyings рдПрдХ рд╕рд░рдгреА рд╣реИ) рдореЗрдВ рд░рдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛: mtl.varyings.push(myVar) ред рдЙрд╕реА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдлреНрд░реИрдЧрдореЗрдВрдЯ рд╢реЗрдбрд░реНрд╕ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ: mtl.vertexFunctions.push(myVertexFunctionCall) , рдЙрд╕реА рддрд░рд╣ mtl.fragmentFunctions ред

рдЗрд╕ рддрд░рд╣ рд╣рдо рдЙрди рднрд┐рдиреНрдирддрд╛рдУрдВ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдВрдЧрдгрдирд╛рдПрдБ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдХрд╛рд░реНрдп рд╢реВрдиреНрдп рдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗред

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рд╣реИ рдЬрд╣рд╛рдВ рдиреЛрдбреНрд╕ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рд╣рдо рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд░рдЪрдирд╛рдХрд╛рд░ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдПрдХ рдиреЛрдб рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ (рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд) рджреВрд╕рд░реЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд╣реИ (рдпрд╣ рдЗрд╕рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдиреЛрдбреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ)? рдХреНрдпрд╛ рдПрдХ рдиреЛрдб рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ? рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд╕рд░реЗ рдиреЛрдб рдореЗрдВ рдХрд┐рддрдиреЗ рдиреЛрдб рдЗрдирдкреБрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣ рд╕реАрдорд┐рдд рд╣реИ?

@trusktr рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдЕрдзрд┐рдХ CPU рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ GPU рдХреА рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред рдиреЛрдбреНрд╕ рдХреЛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП float рд╕реЗ vec2 рдпрд╛ vec3 рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИ, рдФрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдХреИрд╢ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ (рджреЗрдЦреЗрдВ TempNode )ред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: PositionNode рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ рд╣реИ:
https://github.com/mrdoob/three.js/blob/789efa65bafe022e178c7e93e0985a7607a54403/examples/js/nodes/accessors/PositionNode.js#L5

@mrdoob @sunag рдХреНрдпрд╛ рдЖрдк NodeMaterial рдХреЛрдб рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реЛрдВрдЧреЗ, рдФрд░ рдпрд╣ рддреАрди.js рд░реЛрдбрдореИрдк рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ?

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдо рдЕрдм рдХрдИ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:

  • GlTF рдпреБрдХреНрддрд┐/рдЧреНрд▓реЙрд╕ PBR рд╕рд╛рдордЧреНрд░реА рдХреЛ NodeStandardSGMaterial рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  • рдкреНрд░рддрд┐-рдорд╛рдирдЪрд┐рддреНрд░ рдпреВрд╡реА рд╕реЗрдЯ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
  • рдЗрдВрд╕реНрдЯреЗрдВрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдЯрд┐рди рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ

рд▓реЗрдХрд┐рди рд╕рднреА рдиреЛрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП GLTFLoader рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдФрд░ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдиреЛрдбреНрд╕ рдХреЛ src/* рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореБрд░реНрдЧреА рдХрд╛ рдЕрдВрдбрд╛ред рдореИрдВ

NodeMaterial рдХреЗ рд▓рд┐рдП рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдпреЛрдЬрдирд╛ рдХреЛ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ (рдпрд╛ рдирд╣реАрдВ рд╣реИрдВ) ... рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдорджрдж рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@ рд╕реБрдирдЧ рд╣рд╛рдБ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрддреНрд╕реБрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдХреА рдХреЛрдИ рдФрд░ рдпреЛрдЬрдирд╛ рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдо рдЕрдм рдХрдИ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:

  • GlTF рдпреБрдХреНрддрд┐/рдЧреНрд▓реЙрд╕ PBR рд╕рд╛рдордЧреНрд░реА рдХреЛ NodeStandardSGMaterial рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  • рдкреНрд░рддрд┐-рдорд╛рдирдЪрд┐рддреНрд░ рдпреВрд╡реА рд╕реЗрдЯ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
  • рдЗрдВрд╕реНрдЯреЗрдВрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдЯрд┐рди рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ

рдЗрди рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджреЛрдВ рдореЗрдВ рдЕрдм рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдХрд┐ рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреЛрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП:

рдЗрдВрд╕реНрдЯреЗрдВрд╕рд┐рдВрдЧ:
https://github.com/mrdoob/three.js/pull/10750 (рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд, рдХреЛрд░ рдХреЛ рдЫреВрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдВрджрд░-рдкреИрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
https://github.com/mrdoob/three.js/pull/14166 (onBeforeCompile рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░рд▓, рд╕рд╛рдордЧреНрд░реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди)
https://github.com/mrdoob/three.js/pull/14012 (рдореЛрдХреА-рдкреИрдЪрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░рд▓, рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рд╕реНрддрд╛рд░)

рдкреНрд░рддрд┐-рдорд╛рдирдЪрд┐рддреНрд░-рдпреВрд╡реА рд╕реЗрдЯ
https://github.com/mrdoob/three.js/pull/14174

рдХрд▓реНрдкрдирд╛-рдЪрдордХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ
https://github.com/mrdoob/three.js/pull/14099

рд╢рд╛рдпрдж рдпрд╣ NodeMaterial рдХреЛ рдХреЛрд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдХреА рднрд╛рд╡рдирд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ :)ред

рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, https://github.com/mrdoob/three.js/pull/14149 рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдЪрд▓ рд░рд╣реА рд╣реИ

#14149 рд╕реЗ рдзрд╛рдЧреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛:

tl; dr - NodeMaterial рдореБрдЭреЗ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд╢рд╛рдЬрдирдХ рдЕрдЧрд▓рд╛ рдХрджрдо рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ NodeMaterial рдХреЛ рдЕрдкрдирд╛рдирд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ:

  • рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдШрд░реНрд╖рдг
  • рдПрдХ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдХреА рдХрдореА
  • рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг, рдбреЙрдХреНрд╕

рдореИрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдХрд┐ рдХрдм/рдХреНрдпрд╛ NodeMaterial src/ рд╕реЗ @mrdoob рдФрд░ @sunag рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рддреАрди рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реБрдП (рдХрдо рд╕реЗ рдХрдо) рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЬрд╛рдирдирд╛ рднреА рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреНрдп рд▓реЛрдЧ NodeMaterial рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓реА рдпрд╛ рдкреВрд░реНрдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред



рдЬреАрдПрд▓рдЯреАрдПрдлрд▓реЛрдбрд░ рд╣рд┐рддрдзрд╛рд░рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреНрд░рд╡реНрдпрдорд╛рди рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореЗрд░рд╛ (рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ) рдЕрд╡рд▓реЛрдХрди рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡рд░реЗрдВрдбрд░ (рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг) рдкрд░ рдЕрдиреБрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд┐рдП рдЬрд╛рдиреЗ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкрд╣рд▓реЗ рдХрдВрдкрд╛рдЗрд▓ (рдПрдХ рдЙрджрд╛рд╣рд░рдг) рдкрд░ рдХрдо рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред

@pailhead рдореИрдВрдиреЗ рдП-рдлрд╝реНрд░реЗрдо рдореЗрдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GLTFLoader рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореИрдВ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рднреА рд╣реВрдВред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓реА рд▓рдХреНрд╖реНрдп рд╣реИ, рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ред рдиреЛрдб рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХреАрдХреГрдд (рдпрд╛ рдПрдХреАрдХреГрдд рдирд╣реАрдВ) рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рддреАрди.рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрддрд┐рдо-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпреЛрдЧреНрдпрддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рд╕реБрд╡рд┐рдзрд╛рдПрдБ, рд▓рдЪреАрд▓рд╛рдкрди, рдПрдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдПрдкреАрдЖрдИред

рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ onBeforeCompile рдФрд░ onBeforeRender рд╣реБрдХ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рд▓рдЪреАрд▓реЗ рд╣реИрдВ; рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╢реЗрдбрд░реНрд╕ рдХреЛ рдЖрдк рдХрд┐рддрдиреА рджреВрд░ рддрдХ рд╣реЗрд░рдлреЗрд░ рдпрд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдкреНрд░рд╛рдердорд┐рдХ рд╕рд╛рдордЧреНрд░реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рди рд╣реА рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИрдВ:

  1. рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рд╛рдордЧреНрд░реА API рдореЗрдВ WebGL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИ
  2. рдХреЛрд░ рд╕рд╛рдордЧреНрд░реА рд╢реЗрдбрд░реНрд╕ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдордп рдХреЗ рд╕рд╛рде рдХреЛрд░ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдирд╛рдЬреБрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  3. рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдо рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп
  4. рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп

рд╕рдЬреНрдЬрд╛рдХрд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП #14206) рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реБрдзрд╛рд░рддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдЕрдЧрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдореМрдЬреВрджрд╛ рд╕рд╛рдордЧреНрд░реА рд╢реЗрдбрд░реНрд╕ рдХреЗ рдКрдкрд░ рддреЗрдЬреА рд╕реЗ рдЬрдЯрд┐рд▓ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛, рддреЛ рдпрд╣ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдПрдХ рд░рдЦрд░рдЦрд╛рд╡ рдЦрддрд░рд╛ рд╣реИред

рдиреЛрдб рд╕рд╛рдордЧреНрд░реА рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдиреНрдп рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЯреВрд▓ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рдореБрдЦ рд▓рд╛рдн рд╣реИрдВ:

  1. рд▓рдЪреАрд▓рд╛ рдФрд░ рд░рдЪрдирд╛ рдпреЛрдЧреНрдп
  2. рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╡рд╣рд╛рдВ рд╕рд╛рджреЗ рд╢реЗрдбреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд╣рдЯрд╛рдП рдмрд┐рдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╡реЗрдмрдЬреАрдПрд▓ рд╢реЗрдбрд░реНрд╕ рд╕реЗ рдЕрдореВрд░реНрддрддрд╛ рдХреА рдПрдХ рдкрд░рдд рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
  3. рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдФрд░ рдЧреЗрдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рдордЧреНрд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡
  4. рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╣рдж рддрдХ рдХреНрд░рдордмрджреНрдз (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреНрдп рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдЕрднреА рднреА рдХрдард┐рди рд╣реИ)

рдпрд╣ рд╢рд╛рдпрдж рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ onBeforeCompile рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ - рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдпрд╣ рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд┐рдкрдХ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдП-рдлреНрд░реЗрдо рдпрд╛ рддреАрди.рдЬреЗрдПрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ; рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдиреНрдп 3D рдЯреВрд▓ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред

  • рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдШрд░реНрд╖рдг

рдпрд╣ рдШрд░реНрд╖рдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдпрд╛ рдХреБрдЫ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рддрдиреЗ рд▓реЛрдЧ рдмрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдХрд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред рдПрдЪрдЯреАрдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2018 рдореЗрдВ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ , рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдзрд╛рд░рдгрд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдпреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдиреЛрдб рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдФрд░ import/export рдареАрдХ рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

  • рдПрдХ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдХреА рдХрдореА
  • рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг, рдбреЙрдХреНрд╕

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЛрд░ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдЧреНрд▓реЙрд╕ рдордЯреАрд░рд┐рдпрд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ GLTFLoader рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рди рд╣реЛред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ /src рдпрд╛ /examples рдореЗрдВ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

@donmccurdy

рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ onBeforeCompile рдФрд░ onBeforeRender рд╣реБрдХ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рд▓рдЪреАрд▓реЗ рд╣реИрдВ; рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╢реЗрдбрд░реНрд╕ рдХреЛ рдЖрдк рдХрд┐рддрдиреА рджреВрд░ рддрдХ рд╣реЗрд░рдлреЗрд░ рдпрд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рджрд╛рд╡рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ onBeforeRender рдЬреИрд╕рд╛ рдПрдХ рд╣реБрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм GLTFLoader (рдЗрд╕рд▓рд┐рдП #14099)ред

onBeforeCompile рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рд╛рд▓рд┐рдпрд╛ рдкреАрдЖрд░ #14214 рд╣реИред рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ ( build() needsUpdate рдкрдХреНрд╖ рдореЗрдВ) рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рд╡рд╣рд╛рдВ onBeforeCompile рджреЗрдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ onBeforeParse рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдХрд┐рд╕реА рднреА #include <foo> рдХрдерди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рднреА рд╡реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рдж рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рд░реНрд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреАрдЖрд░ рдореЗрдВ рдЗрд╕реЗ onWillRefreshMaterial рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЬрд┐рд╕ рджрд░реНрд╢рди рдХреЛ рдореИрдВ рдкрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрдирдХрд╛ рдирд╛рдордХрд░рдг рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддрдиреА рдЪрд╛рд╣рд┐рдПред

#14214 рдЗрд╕ рдмрд╛рдд рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ NodeMaterial рдХреЛ рдХреЛрд░ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдо рд╕реЗ рдХрдо /renderer рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  1. рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рд╛рдордЧреНрд░реА API рдореЗрдВ WebGL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИ

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрд╣рд▓реЗ рд╕реБрдирд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╡реИрд╕реЗ рднреА "рд╕рд╛рдордЧреНрд░реА рдПрдкреАрдЖрдИ" рдХреНрдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ "рдпрд╣рд╛рдВ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕рддрд╣ рдЫрд╛рдпрд╛рдВрдХрди рд╕рд╛рдордЧреНрд░реА" рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдирдХреНрд╢рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ material.map , рдпрд╛ 'material.color' NodeTexture , GLSLTexture , TextureTexture рдирд╣реАрдВ рд▓реЗ рд╕рдХрд╛ред

myMaterial.color = new SomeNodeGraph() //outputs vec4 in the end

myMaterial.color = new GLSLInput() // inputs various documented variables, outputs some vec4

myMaterial.color = new THREE.Color()

myMaterial.color = new CustomColorGradientTopBottom() // dunno if its Node, GLSL, regular color whatever, i just know it's compatible with the slot
  1. рдХреЛрд░ рд╕рд╛рдордЧреНрд░реА рд╢реЗрдбрд░реНрд╕ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдордп рдХреЗ рд╕рд╛рде рдХреЛрд░ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдирд╛рдЬреБрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ onBeforeCompile рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рд╣рдж рддрдХ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЖрдк рдЬреЛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдФрд░ рдЕрдзрд┐рдХ рдирд╛рдЬреБрдХ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдкреЗрд╢реЗрд╡рд░ рдЬреАрд╡рди рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рдкрд╣реБрдВрдЪ рдЪреБрдХрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдХреЛрдб рд╣реИ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рддрдирд╛ рдирд╛рдЬреБрдХ рд╣реИ, рдмрд╣реБрдд рддрдирд╛рд╡ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ :(

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдбреЗрдХреЛрд░реЗрдЯрд░ #14206 рдЗрд╕ рдкреАрдЖрд░ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рд░реБрдХреЗ рд╣реБрдП рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рдпрдВ 3 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдардк рд╣реИред рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ #14206 рдЗрди рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡, рдХрдо рдердХрд╛рдК рдФрд░ рдХрдо рдирд╛рдЬреБрдХ рдмрдирд╛ рджреЗрдЧрд╛ред рдпрд╣ рдХреЛрдб рдХреА 30 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЗрди рдкреНрд░реЗрдд рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдореЗрдВ onBeforeCompile рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрдж рдХреЛ рд▓рдЯрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд░рд╕реНрд╕реА рджреА рдЧрдИ рд╣реИ рддреЛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдорд╛рдирд╡реАрдп рдХреНрдпреЛрдВ рди рдмрдирд╛рдПрдВ? :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдирд╛рдЬреБрдХ рд╕реНрддрд░ рдХрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВред

  1. рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдо рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдЙрдкрдХрд░рдг рдФрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдиреНрд╣реЗрдВ "рдмреЗрдХреНрдб" рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ NodeMaterial рдмрдирд╛рддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдХрд▓рд╛рдХрд╛рд░ рдПрдХ рд╢реЗрдбрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЗрд╕реЗ "рд╕рдВрдХрд▓рд┐рдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд▓реЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдХреЗрд▓реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдХрд▓рд╛рдХрд╛рд░ рдЧреНрд░рд╛рдл рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрд╕рд╛рди рд╣реИ ("рд╕рдВрдХрд▓рд┐рдд" рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рд▓реЗрддрд╛ рд╣реИ)ред

рд╕рд╛рде рд╣реА, рдпрд╣рд╛рдВ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдХреБрдЫ рдЖрдВрдХрдбрд╝реЗ рд╣реИрдВ, рдПрдХ рдФрд╕рдд "рдХрд▓рд╛рдХрд╛рд░" рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд╡реЗ рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдПрдХрддрд╛ рдирд╣реАрдВ, рдпрд╛рдиреАред рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╣реИ. рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдЗрдВрдЬреАрдирд┐рдпрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХреНрдпреЛрдВ рди рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЯреВрд▓ рдЬреЛ рдХрд┐рд╕реА рддрд░рд╣ рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреБрдЫ рддрдХрдиреАрдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЕрдкрдирд╛рддреА рд╣реИ рдЖрджрд┐ред рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддрд┐ рд╕рдкреНрддрд╛рд╣ 40k npm рдбрд╛рдЙрдирд▓реЛрдб рдХрд▓рд╛рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рд╡рд╣рд╛рдБ рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рддрд░рд╣ рдХреЗ рдЗрдВрд╕реНрдЯрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдмрд┐рд▓реНрдб рдЯреВрд▓реНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рд╣реЛрдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдФрд░ рдмрд┐рдВрджреБ 2 рджреЛрдиреЛрдВ рдкрд░, рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдХрд▓рд╛рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рдордЯреАрд░рд┐рдпрд▓ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдмрд┐рд▓реНрдЯ-рдЗрди рдореИрдЯреЗрд░рд┐рдпрд▓реНрд╕ рдХреЗ рдКрдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ, рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЫреАрд▓рдиреЗ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрдирдкреИрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЙрд╕ рдХреЛрдб рдХреЛ рдШрд░ рдореЗрдВ рд╕рдВрд░рдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЫреЛрдЯреЗ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИред

  1. рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп

рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдпрд╣ рддрд░реНрдХ рдкрд╣рд▓реЗ рднреА рд╕реБрдирд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдХреБрдЫ рдХреЛрдб рджреЗрдЦрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╕рдордЭ (рдХреЛрдИ рдирд╣реАрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ) рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ

"materialFoo": {
  "color":"#ff0000",
  "specularMap": "some_path.jpg",
  "glossiness": "0.5"
}

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ NodeMaterial рд╕рд╛рде рдирд┐рд░реНрдорд┐рдд рдПрдХ рд╕реНрдкреЗрдХ рдЧреНрд▓реЙрд╕ рд╕рд╛рдордЧреНрд░реА рд╣реИ, рдЖрдк рдкреВрд░реЗ рдЧреНрд░рд╛рдл рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ? SpecGloss рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдХреНрд░рдорд╛рдВрдХрди рдЬреЛ рднреА рд╣реЛ, рдЙрд╕реЗ рд╡рд╣реА рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд╢рд╛рдпрдж рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рдХреБрдЫ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗред

рдкреБрди: рдХреНрд░рдорд╛рдВрдХрди

рдХреНрдпрд╛ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛:

https://github.com/mrdoob/three.js/blob/dev/src/materials/Material.js#L160

customSerializer( data )

рдФрд░ рдлрд┐рд░ рдХреБрдЫ

SpecularGlossMaterial.prototype.toJSON = ()=>{
  Material.prototype.call(this, undefined, data =>{
    if ( this.roughness !== undefined ) data.roughness = this.roughness;
  })
}

specularMap рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://github.com/mrdoob/three.js/blob/dev/src/materials/Material.js#L213

рд▓реЗрдХрд┐рди рдпрд╣ рдереЛрдбрд╝реЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, Material рд╡рд░реНрдЧ рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдЬреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ?

@donmccurdy рдпрджрд┐ рдЖрдк рдпрд╣ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреАрдЖрд░, # 14206 рдореЗрдВ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдСрдлрд╝рд▓рд╛рдЗрди рдореИрдВ рдЦрд╛рдбрд╝реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╣реАрдВ рднреА рдмрд┐рдпрд░ рдпрд╛ рдХреЙрдлреА рдкрд░ рдПрдХ рдХрд╛рд░реНрдп рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реВрдВ: рдереЛрдбрд╝рд╛_рд╕реНрдорд╛рдЗрд▓рд┐рдВрдЧ_рдлреЗрд╕:

рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдПрдХрд╛рдзрд┐рдХ рдлрд╝рд╛рдЗрд▓реЗрдВ _ should't_ рдШрд░реНрд╖рдг рд╣реЛ, рдФрд░ рдпрд╣ NodeMaterial рдХреЛ src/ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдХрдИ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, NodeMaterial рдХрд╛ рдЕрднреА рддрдХ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рднреА рд╣реИрдВред рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ src/ рдореЗрдВ NodeMaterial рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ examples/js рдпрд╛ рдПрдХ рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЧреЛрдж рд▓реЗрдиреЗ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдПрдХ рд╢рд░реНрдд рд╣реЛрдЧреАред

рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рджрд┐рд╢рд╛ рдХреЗ рд░реВрдк рдореЗрдВ NodeMaterial рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢рд╛рд╡рд╛рджреА рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ src/ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдФрд░ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ onBeforeCompile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рд╣рдо WebGL2 рдФрд░ (рдЕрдВрддрддрдГ) WebGPU рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдУрд░

рджреВрд╕рд░реА рдУрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ-рджреВрд╕рд░реЗ рдХреА рдЪрд┐рдВрддрд╛рдУрдВ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЕрд╕рд╣рдордд рд╣реИрдВред рдореИрдВрдиреЗ рд╡рд╣ рд╕рдм рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдмреИрдареВрдВрдЧрд╛ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рджреВрдВрдЧрд╛ред рдЗрд╕ рдкрд░ рдЧрд╣рди рдФрд░ рд╡рд┐рдирдореНрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ

рдореИрдВ рдПрдХ рдлреИрд▓рд╛рдирд╛ рдмрдирд╛рд╡рдЯ рдкрд░ рдЧреБрдгрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рд╡реЗрд╢ рд░реЛрдбрд╝рд╛ рдмрдирд╛рд╡рдЯ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

const aoNode = new OperatorNode(
        new Math1Node( aoTexture, Math1Node.INVERT ),
        aoScale,
        OperatorNode.MUL
    );
material.ao = aoNode;

рдпрд╣ рдореЗрд░рд╛ рдПрдУ рдмрдирд╛рд╡рдЯ рд╣реИ
ao sx

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдкрд░ рдкрд░рд┐рд╡реЗрд╢ рд░реЛрдбрд╝рд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ?
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдореМрдЬреВрджрд╛ рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рдЯреВрд▓ рд╕реЗ рдереНрд░реАрдЬреЗ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рддрдХ рдореИрдкрд┐рдВрдЧ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдирддреАрдЬрддрди рдореИрдВ рдПрдХ рдЙрдЪрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд╕рд╛рде src/ рдореЗрдВ NodeMaterial рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

@рдЖрдИрдПрдЖрд░рдЖрдИ

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдореМрдЬреВрджрд╛ рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?

@donmccurdy

рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рднреА рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рддреЛ рдпрд╣ рд╕рд╛рдордЧреНрд░реА:

рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рд░реВрдк рдореЗрдВ onBeforeCompile рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ,

onBeforeCompile рднрдпрд╛рдирдХ рд╣реИ, рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдзрд╛рдЧреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ #13198 рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВ onBeforeCompile рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореИрдирд┐рдкреБрд▓реЗрд╢рди рд╕реЗ рдмреЗрд╣рддрд░ рдорд╛рдирддрд╛ рд╣реВрдВред

рдпрд╣ рддреАрди.рдЬреЗрдПрд╕ рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреИрдЯрд░реНрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рджреБрдЦ рд╣реИ рдХрд┐ @bhouston рдиреЗ рдЗрд╕ рд╕рд╛рдорд╛рди рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдкрд░ рдХреЛрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЙрддреНрд╕реБрдХрддрд╛ рд╣реЛрдЧреА рдЕрдЧрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╢реЗрдбрд░реНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдврд╛рдВрдЪрд╛ рдмрдирд╛рдпрд╛ рд╣реИ, рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рдХреЛ рд╣реИрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред

рдкреНрд░рддрд┐ рдЪреИрдирд▓ рдпреВрд╡реА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдпрд╛ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдЙрдВрдЧрд╛ред рдЕрдЧрд░ рд╣рд░ рд╣рдлреНрддреЗ 3 рд▓реЛрдЧ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореВрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ 20k рд▓реЛрдЧ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рдд: рддреАрди.рдЬреЗрдПрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

onBeforeCompile рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдб рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛, https://github.com/mrdoob/three.js/pull/14214 , рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП onBeforeCompile рдФрд░ NodeMaterial рд╣реИрдВ, рдореИрдВ рддреАрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВред onBeforeCompile рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ NodeMaterial рд╕реЗ рдмрд╣реБрдд рдЫреЛрдЯрд╛ред

рд╣рд╛рд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде:
https://github.com/mrdoob/three.js/pull/14206

рдкреБрд░рд╛рдиреА рдЪрд░реНрдЪрд╛:
https://github.com/mrdoob/three.js/pull/13198

@pailhead рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдмреНрд▓реЗрдВрдбрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдиреЛрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдореБрдЭреЗ рдпреВрдирд┐рдЯреА рд╢реИрдбрд░рдЧреНрд░рд╛рдл рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреЗрдЧрд╛ред

@claudioviola рдЖрдк material.shadow рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдлреИрд▓рд╛рдирд╛ material.color = diffuse * oclusion рдЧреБрдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢ рдХреА рдирд┐рд░реНрднрд░рддрд╛, AmbientLight , HemisphereLight ...

@рдЖрдИрдПрдЖрд░рдЖрдИ

рдореИрдВ ShaderGraph рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП 7.5 рдЧреАрдЧрд╛ рдпреВрдирд┐рдЯреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: рдереЛрдбрд╝рд╛_рд╕реНрдорд╛рдЗрд▓рд┐рдВрдЧ_рдлреЗрд╕:: рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╢реЗрдбрд░ рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╢реЗрдбрд░ рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рдХреНрдпрд╛ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рд╕рдВрд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЙрдкрдХрд░рдг рд╣реИрдВ? рдореИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рддрд░рд╣ рдХреНрдпрд╛ рдЗрд╕ рдЧреНрд░рд╛рдл рднреА рдмрдЪрд╛рддрд╛ рд╣реИ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХреИрд╕реЗ Three.js рдХрд░рдиреЗ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдФрд░ рд╣реЛрдЧрд╛ NodeMaterial рдореЗрдВ /src ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @pailhead рдЗрд╕ рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ рдкрд░ NodeMaterials рдХреЗ рдХреЛрд░ рдореЗрдВ рдЗрд╕ рдХрджрдо рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @pailhead рдХреЗ рд╕рд╛рде рджрд┐рдиреЛрдВ рддрдХ рдмрд╣рд╕ рдХрд░рдирд╛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрд┐рд╕реА рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдЬрд▓реНрджрдмрд╛рдЬреА рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдЗрд╕реЗ рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реБрдирдЧ рдиреЗ рдЗрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдерд╛ред рдЕрднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ (рдЬреИрд╕реЗ рд╡рд┐рд▓рдп) рддреЛ рдЪрд▓рд┐рдП рдЗрд╕ рд░рд╛рд╕реНрддреЗ рдХреЛ рдЖрдЬрдорд╛рддреЗ рд╣реИрдВред

рд╣рд░ рдкреНрд░рдореБрдЦ рдЙрдкрдХрд░рдг, 3DS рдореИрдХреНрд╕, UE4, рдмреНрд▓реЗрдВрдбрд░, рдпреВрдирд┐рдЯреА, рдорд╛рдпрд╛, рд╕реНрдХреЗрдЪрдлреИрдм, рд╢реЗрдбрд░ рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рддрд░реНрдХ рджреЗрдирд╛ рдХрд┐ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рддреАрди.рдЬреЗрдПрд╕ рдХреЛ рд╕реНрдерд╛рдпреА рдиреБрдХрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЧреНрд░рд╛рдл-рдЖрдзрд╛рд░рд┐рдд рд╢реЗрдбрд░ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рд╕рдордп рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдпрд╣ рдХреЛрд░ рдореЗрдВ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЖрдЧреЗ рднреА рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдореЗрдВ PhoneMaterial, StandardMaterial, рдЖрджрд┐ рдХреЗ API рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ рддрд╛рдХрд┐ рд╣рдо рддреАрди.js рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ 95% рдХреЛ рди рддреЛрдбрд╝реЗрдВ, рдРрд╕рд╛ рдХрд░рдирд╛ рдЧреИрд░-рдЬрд┐рдореНрдореЗрджрд╛рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕реЗ рд╕рд░рд▓реАрдХреГрдд рд╕реАрдзреЗ рдЖрдЧреЗ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рди рддреЛ рдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдЗрд╕реЗ рдХреЛрд░ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдкреАрдЖрд░ рдХреЛ рдЕрдирдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЕрд╡рд░реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред @bhouston , рдХрднреА рднреА рдЖрдкрдХреЗ рд╕рд╛рде рдмрд╣рд╕ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рдерд╛, рдореИрдВ рд╕рд┐рд░реНрдл рдЖрдкрдХреЗ рдХрд╛рдВрдЯреЗ рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрднрд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рдерд╛ред

рдЬрдм рдореИрдВ рдПрдХ рднреВрдЦреЗ 3рдбреА рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рд╕рднреА рдЪреАрдЬреЗрдВ рдкрд╕рдВрдж рд╣реИрдВред Nuke рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрдЧреАрддрдХрд╛рд░ рдерд╛, рдФрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдг рдмрдирд╛рдирд╛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред рдореИрдВ рдмрд╕ рдпрд╣реА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ #14231 рдХреЛ рдЕрдирдмреНрд▓реЙрдХ рдХрд░реЗред рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдЦрдиреЗ рдХреЗ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рд╣реИ рддреЛ рдореИрдВ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛, рдзрдиреНрдпрд╡рд╛рджред

@pailhead рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдкрджрд╛рд░реНрде рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ? рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд╡рд╣ рдЙрдкрдХрд░рдг рдЧреНрд░рд╛рдл/рд╢реЗрдбрд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рднреА рдЖрдЧреЗ рдЬрд╛рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реБрд░рд╛рдЧ рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рд╕реЗ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЯреВрд▓ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдПрдХ рддреНрд╡рд░рд┐рдд Google рдЦреЛрдЬ рдиреЗ рдЗрди рджреЛрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛:

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдереНрд░реАрдЬреЗрдПрд╕ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣ рдЯреВрд▓ рд╣реИ , рдЬреЛ рдореБрдЭреЗ 2015 рд╕реЗ @mrdoob рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЯреНрд╡рд┐рдЯрд░ рдкреЛрд╕реНрдЯ рдореЗрдВ рдорд┐рд▓рд╛ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрднреА рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ ....

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдЙрдкрдХрд░рдг рдХреЛ рдпрд╣рд╛рдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рднреА рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдкрд╣рд▓рд╛ рд▓рд┐рдВрдХ рдЕрджреНрднреБрдд рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИ, рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА NodeMeterial , рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ ShaderMaterial рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХрддрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реЗрдбрд░ рдЧреНрд░рд╛рдлрд╝ рдЯреВрд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛,

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдЕрдЧрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдмреНрд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рд░ рддрд░рд╣ рд╕реЗ рдЕрдирдмреНрд▓реЙрдХ рдХрд░ рджреЗрдВред рдкреАрдЖрд░ 2015 рд╕реЗ рд╣реИ, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ 8 рджрд┐рди рдкрд╣рд▓реЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдерд╛ред

(рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рд╣рдЯрдХрд░ рд╣реИ ..)
@pailhead For Unity shadergraph: рдЖрдкрдХреЛ рд▓рд╛рдЗрдЯрд╡реЗрдЯ рд░реЗрдВрдбрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдпреВрдирд┐рдЯреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдпреВрдирд┐рдЯреА рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк Render-pipelines.light рдкреИрдХреЗрдЬ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ: https://youtu.be/Ar9eIn4z6XE?t=98

рд╡рд╣ Sea3D рдкреНрд░рд╡рд╛рд╣ рд╕рд╛рдордЧреНрд░реА рдиреЛрдб рд╕рдВрдкрд╛рджрдХ (http://sea3d.poonya.com/flow/) @sunag рджреНрд╡рд╛рд░рд╛ рд╣реИ, рд╡рд╣реА рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рд╕рдиреЗ NodeMaterial рд▓рд┐рдЦрд╛ рдерд╛ред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @sunag
рдореИрдВ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдХреНрдпрд╛ рдпрд╣ рд░реЗрдВрдбрд░рд░ рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рд╣реИ рдпрд╛ рдореИрдВ рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдореИрдВ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдпрд╛рдиреА рд╕рдВрддреГрдкреНрддрд┐ рдмрджрд▓реЗрдВ)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдорд╛рд╕реНрдХрд┐рдВрдЧ (рдпрджрд┐ рдХреЛрдИ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ (рдЧреИрд░-рдиреЛрдб) рдЖрдЙрдЯрд▓рд╛рдЗрдирдкрд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдмрдлрд░ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рд╕рд╛рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдорд╛рдореВрд▓реА рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд░реЗрдВ рдпрд╣ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рдеред

Sea3D рдкреНрд░рд╡рд╛рд╣ рд╕рд╛рдордЧреНрд░реА рдиреЛрдб рд╕рдВрдкрд╛рджрдХ рддреАрди.js рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рдорд╛рди рд╣реА рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╣реЛрдЧрд╛, рдпрд╛ рдЗрд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛? рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрдм рднреА Sea3D рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдХреБрдЫ рдФрд░ three.js рд╕рдВрдмрдВрдзрд┐рдд? рдЙрд╕ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдХреЛ рддреАрди.рдЬреЗрдПрд╕ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @sunag рдзрдиреНрдпрд╡рд╛рджред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЬрд░рд╛ рд╕рд╛ рднреА рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред

@рдЖрдИрдПрдЖрд░рдЖрдИ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк GLSL рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк OutlinePass рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдХреЛрдб рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдиреЛрдб рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ, рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдЖрдк рдЗрд╕реЗ рдиреЛрдб рдХрд░рдирд╛ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд╣рд╛рдВ рд╣реИ?

рдореИрдВрдиреЗ 2016 рд╕реЗ рдпреЗ рдкреЛрд╕реНрдЯ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рджреЗрдЦреАрдВред Shader Frog рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡рд┐рдо рдмрдирд╛рдо рдПрдордПрд╕реАрдПрд╕ рдпрд╛ рдХреБрдЫ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ Sublime Text рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ, рдЖрдк рдХреБрдЫ рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдХреЛ рд╢реЗрдбрд░ рдлреНрд░реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ, рджреВрд╕рд░реЗ рдХреЛ рдереНрд░реА.рдЬреЗрдПрд╕ рдХреЗ рд╕реА3рдбреА рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИред

рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╢реЗрдбрд░ рдореЗрдВрдврдХ рд╕рд┐рд░реНрдл рдПрдХ рд╢реЗрдбрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдЧрд░ 3 рдбреА рдХреА рддрд░рд╣ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИред

рдлрд┐рд░ рдпрд╣ рд╣реИред

рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЙрддреНрдкрд╛рдж рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЛ рдереНрд░реА рдХреЗ рдореВрд▓ рдореЗрдВ рд░рдЦрдирд╛ рдПрдХ рдЕрдиреБрдЪрд┐рдд рд▓рд╛рдн рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рд░рд╛рдЬрдиреАрддрд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

рдореЗрд░реЗ рд▓рд┐рдП, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рддреАрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рдмреАрдЪ рдХреА рд░реЗрдЦрд╛ рдХреЛ рдПрдХ рд╡реЗрдмрдЧреНрд▓ рд░реИрдкрд░ рдПрдкреАрдЖрдИ рд╣реЛрдиреЗ рдФрд░ рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИред рд╢реЗрдбрд░ рдиреЛрдб рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдРрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдиреЛрдб рд╕рдВрдкрд╛рджрдХ рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рд╣реИ? рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@рднреВрд╕реНрдЯрди
рдореИрдВ NodeMaterial рдХреЗ рдЙрддрд░рдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдп рдкреАрдЖрд░ рдХреЛ рдЕрдирдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬреАрд╡рди рд╡рд╛рдкрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЖрд╡рд╛рдЬрд╝реЛрдВ рдиреЗ рдЕрддреАрдд рдореЗрдВ рдЗрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @pailhead рдЗрд╕ рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ рдкрд░ NodeMaterials рдХреЗ рдХреЛрд░ рдореЗрдВ рдЗрд╕ рдХрджрдо рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрд┐рд╕реА рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзрдиреНрдпрд╡рд╛рджред

рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЙрдЯрд▓рд╛рдЗрдирдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдПрдХ рддрд░рд╣ рд╕реЗ рдЬреЛ рдкрдардиреАрдп, рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдореЙрдбреНрдпреВрд▓рд░ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рднрд╛рдЧреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдиреЛрдбреНрд╕ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрдлрд░ рдФрд░ рд╕рд╛рдорд╛рди рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ glsl рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдФрд░ рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ - рдореЗрд░реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ - рдЧрдзреЗ рдореЗрдВ рдПрдХ рд╕реБрдкрд░ рджрд░реНрдж рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбрд░ рдХреЛрдбред рдФрд░ рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рджрд░реНрджрдирд╛рдХ рд╣реИ рдпрджрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рддрд╛рд░реЛрдВ рдореЗрдВ рдПрдХ рдмреЗрд╡рдХреВрдл рд╕рд░рдгреА рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд╡реЗрдмрдкреИрдХ рдпрд╛ рдХреБрдЫ рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ?

рдмреЗрд╡рдХреВрдл рд╕рд░рдгреА

рдпрд╣ рдХреЗрд╡рд▓ рдмреЗрд╡рдХреВрдлреА рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдПрдХ .html рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИред рдЬрдм рдЖрдк рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдзреБрдирд┐рдХ JS рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреЗ GLSL рдХреЛ .glsl, .vs, .fs рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдЖрджрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

shader.fs:

void main(){
  gl_FragColor = vec4(1.);
} 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рджреЗрдЦреЛ рдорд╛рдБ, рдХреЛрдИ рдмреЗрд╡рдХреВрдл рд╕рд░рдгрд┐рдпрд╛рдБ рдирд╣реАрдВ)

import mShader from './shader.fs'

рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдореЗрдВ рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рди рдХрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХреНрдпрд╛ NodeMaterial рд╣рдЬрд╛рд░реЛрдВ "рдореИрдВ рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рдХреИрд╕реЗ рдЫрд╛рдпрд╛рдВрдХрд┐рдд рдХрд░реВрдВ" рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рджрд░рд╡рд╛рдЬреЗ рдЦреЛрд▓реВрдВрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрддреНрддрд░ рд╣реЛрдЧрд╛:

рдиреЛрдбреНрд╕ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ, рд▓реНрдпреВрдХ!

рдирд╣реАрдВ, рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдкрдврд╝рдирд╛ (рдЕрдХреЗрд▓реЗ рд▓рд┐рдЦрдирд╛) рдореЗрд░реЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдПрдХ рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реЗрдмрдкреИрдХ рдХреБрдЫ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдЖрдк рддреАрдиjs рдЙрджрд╛рд╣рд░рдг рд╢реЗрдбрд░ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рд▓рд╛рдЗрдирдмреНрд░реЗрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рдмрджрд╕реВрд░рдд рд╕реНрдЯреНрд░рд┐рдВрдЧрд░реЗ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╣реИрдВред
рд╡реИрд╕реЗ рднреА, рдпрд╣ рдореБрджреНрджрд╛ рдиреЛрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдиреЛрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рд╢реНрди рдкреВрдЫрд╛ - рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ - рдЬреЛ рдХрд╣реАрдВ рднреА рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рддрд╛ рд╣реИред

@рдЖрдИрдПрдЖрд░рдЖрдИ

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдирд╣реАрдВ рджреЗрдЦрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрдкрдХрд╛ рдкреНрд░рд╢реНрди рдпрд╛рдж рдЖрдпрд╛ред

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред рдореИрдВ "рдореИрдВ рдпрд╣ рд╢реЗрдбрд░ рдХреИрд╕реЗ рдмрдирд╛рдКрдВ" рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╣рдбрд╝рдмрдбрд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВред

рдкрд╣рд▓реЗ, рдпрд╣ рдмрд╛рд░ рдХрд╛рдлреА рдКрдВрдЪрд╛ рдерд╛, рд▓реЛрдЧ рдмрд╕ i don't know glsl рдпрд╛ рдЬрдм рд╡реЗ "рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдХ рдмреЗрд╡рдХреВрдл рд╕рд░рдгреА" рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХрдо рд╣реИ, рддреЛ рд╣рд░ рдХреЛрдИ рд╢реЗрдбреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдЖрдкрдХрд╛ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣:

рдореИрдВ рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рдХреЗ рд╕рд╛рде рдЯреВрдирд╢реИрдбрд░ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЙрддреНрддрд░ рдХреНрдпрд╛ рд╣реИред

рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ NodeMaterial рдХреБрдЫ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдиреЛрдбреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ NodeMaterial рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЯреВрдЯрдиреЗ рд╕реЗ рдлрд╛рдпрджрд╛ рд╣реЛ? рдпрд╣ рдкрджреЛрдВ рдХреА рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдкреАрдЫреЗ (2015)ред NodeMaterial /examples рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдЕрдкрдирд╛ рдЯреВрди рд╢реЗрдбрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдХреЛрдИ рдЕрдиреНрдп рдореБрджреНрджрд╛ рдпрд╛ рдкреЛрд╕реНрдЯ рдЦреЛрд▓ рд╕рдХреЗрдВ, рдФрд░ рд╢реЗрд╖ рдмрд╛рддрдЪреАрдд рдПрдХ рдирдП рдореБрджреНрджреЗ рдкрд░ рдЬрд╛ рд╕рдХрддреА рд╣реИ?

рд╣рдо рдЦреБрд╢реА-рдЦреБрд╢реА рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдХрд╣реАрдВ рдФрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХреЛрдИ рд╕реБрд╕реНрдд рдЪреИрдирд▓ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА - рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░реЗрдЧрд╛ред

рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдордВрдЪ рд╕реБрд╕реНрдд рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@pailhead , рдпрд╣ рдкреВрд░реА рдЪрд░реНрдЪрд╛ рдЙрддреНрдкрд╛рджрдХ рд╣реЛрдиреЗ рд╕реЗ рдкрдЯрд░реА рд╕реЗ рдЙрддрд░ рдЧрдИ рд╣реИред рд╕рд╛рде рд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдПрдХ рдирдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

@рднреВрд╕реНрдЯрди

рд╕рд╣рдордд, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рдореБрджреНрджреЗ рд╣реИрдВред

  • рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
  • рдХреНрдпрд╛ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдФрд░ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдкреАрдЖрд░ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдВ рдЬреЛ рдХреБрдЫ рд╢реЗрдбрд░ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбрд░ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ

рдореИрдВ рдиреЛрдбрдордЯреЗрд░рд┐рдпрд▓ рдХреЗ рд╕рд╛рде рдЯреВрдирд╢реИрдбрд░ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЙрддреНрддрд░ рдХреНрдпрд╛ рд╣реИред
рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ NodeMaterial рдХреБрдЫ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдиреЛрдбреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ NodeMaterial рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЬрд╝реЛрд░ - рдЬрд╝реЛрд░ рд╕реЗ рд╣рдВрд╕рдирд╛ред рдореИрдВ @bhouston рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ... рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдордЬрд╛рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЗ рдХрд╣рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдЙрджрд╛рд╣рд░рдг webgl_materials_nodes рджреЗрдЦ рд╕рдХрддреЗ рдереЗ?

рдФрд░ рдпрджрд┐ рдЖрдк рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ FunctionNode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреЗрдЦреЗрдВред

toon

@ рд╕реБрдирдЧ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдореБрдЭреЗ рдЧрд▓рдд рд╕рдордЭрд╛ред рдореИрдВ рдЙрддреНрд╕реБрдХ рдерд╛ рдХрд┐ рдХреНрдпреЛрдВ, рдпрджрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ /examples рдФрд░ /src рд╣реИ рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХрд╛ рдирд╛рдЧрд░рд┐рдХ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ 2015 рдореЗрдВ @AndrewRayCode рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВрдиреЗ рдЕрднреА рдХрд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИ, 2015 рдореЗрдВ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╕реЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╕реЗред рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рдкреВрдЫрд╛ "рдореИрдВ whatever " рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдЧрд░ рдпрд╣ рддреАрди.рдЬреЗрдПрд╕ _ (рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХрддрд╛ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдореБрдЭреЗ рдХреБрдЫ рд╣рдж рддрдХ рдбрд░рд╛рддрд╛ рд╣реИ) рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдУрд╡рд░рд╣рд╛рд▓ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрдердм рдкрд░ рд╕рдорд░реНрдкрд┐рдд рдПрдХ рдЬрд╛рд░реА рдореБрджреНрджрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - usage of NodeMaterial . рдЬреИрд╕рд╛ рдХрд┐, рдЬреЛ рд▓реЛрдЧ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪреАрдЬреЗрдВ рдорд╛рдВрдЧ рд░рд╣реЗ рд╣реИрдВ (# 14232) рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рд╕рдВрдЪрд╛рд░ рдХреЛ рдЧрдиреНрджрд╛ рдмрдирд╛рддрд╛ рд╣реИ :)

рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдЯреВрди рд╢реЗрдбрд░ рд▓рд┐рдЦрдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @WestLangley рдХреА рдореЛрдЯреА рд░реЗрдЦрд╛рдПрдВред рддреЛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ "рддреВрди" рд╢реЗрдбрд░ рдЦрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ред рдЗрд╕рдореЗрдВ рд╡рд╕рд╛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ NodeMaterial рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╖рдп рд╣реИрдВ рдЬреЛ рдпрд╣рд╛рдВ рдЬрдЯрд┐рд▓ рд╣реИрдВред

рдФрд░ рдпрджрд┐ рдЖрдк рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ FunctionNode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреЗрдЦреЗрдВред

рдЕрдЧрд░ рдореИрдВ рдХреЛрдб рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд╛рда рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, ShaderMaterial рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рд╣реИ FunctionNode рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдореИрдВ рджреГрд╢реНрдп рдкреНрд░рднрд╛рд╡ рдмрдирд╛рддрд╛ рд╣реВрдВ, рддреЛ рд╢рд╛рдпрдж рдореИрдВ рдПрдХ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдХреЛ рджреЗрдЦреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реА рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ рдЕрдиреНрдп рдкреАрдЖрд░ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ рд╣реИ :) рдореБрдЭреЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЙрддрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрдиреЛрдВ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рд╣рд┐рдд рдореЗрдВ рд╣реИред рдЗрд╕ рдмрд╛рддрдЪреАрдд рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рд╕реЗ рд╢рд╛рдпрдж рдЬрд▓реНрджрдмрд╛рдЬрд╝реА рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рдЗрд╕рдореЗрдВ рдореИрдВ @bhouston рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдпрд╣ рдЬрд▓реНрдж рдпреЛрд▓реЙрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!

рдзрдиреНрдпрд╡рд╛рджред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП: рдореБрдЭреЗ рдЯреВрди рд╢реЗрдбрд░ рдпрд╛ рдЙрд╕рдХреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рд░рд▓ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдкреНрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдиреЛрдбреНрд╕ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА рдмреБрдирд┐рдпрд╛рджреА рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреЛрдбрд┐рдВрдЧ рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдмрд┐рдирд╛ рдиреЛрдбреНрд╕ рдХреЗ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛: рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ , рдпрд╣ рдПрдХрд╛рдзрд┐рдХ рд░реЗрдВрдбрд░ рдкрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдиреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╢рд╛рдпрдж рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдпрд╣ рдХрдо рдкрдардиреАрдп рд╣реЛрдЧрд╛, ...

рд╕рднреА рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЛ рдкрддрд╛ рд╣реИ, рдЙрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдиреЛрдбреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рдлреИрд╢рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдмреНрд▓реЙрдЧ рдЖрд▓реЗрдЦ рдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЬреИрд╕реЗ рдиреЛрдбреНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рдЕрд╕реНрд╡реАрдХрд░рдг: рдореИрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд╛рдВрдЧ рд░рд╣рд╛ рд╣реВрдВ, рдмрд╕ рдКрдкрд░ рд╕реЗ рдореЗрд░реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред
рдпрд╣рд╛рдВ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж - рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЕрджреНрднреБрдд рд╣реИред

рдореБрдЭрд╕реЗ рдиреЛрдб-рдЖрдзрд╛рд░рд┐рдд рд╢реЗрдбрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/mrdoob/three.js/issues/14232 рдереНрд░реЗрдб рдореЗрдВ рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЧрд░реАрдм рд╣реИред рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЪреВрдВрдХрд┐ рдореИрдВ рдЗрддрдирд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рдареЛрд╕ рдХрд╛рд░рдг рдмрддрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

understandability

рдиреЛрдбреНрд╕ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж - рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдПрдХ рдмрдбрд╝реА рдЪреБрдиреМрддреА рд╣реИред

  • рдЪрд░ рдирд╛рдо рдЧреИрд░-рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╣реИрдВ
  • рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ
  • рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдЕрд╕реНрдкрд╖реНрдЯ рдпрд╛ рд╕рд░реНрд╡рдерд╛ рднреНрд░рд╛рдордХ рд╣реИрдВред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ "рдмрд┐рд▓реНрдб" рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ? - рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ)

рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рд╕рд░реНрд╡рдерд╛ рдЕрдЬреАрдм рд╣реИред рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
https://github.com/mrdoob/three.js/blob/e2b49c017b2d1f37ab34317033a27df7b5a71d4d/examples/js/nodes/FunctionNode.js#L39 -L50

рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

return this.inputs.find(input => input.name === name);

"рдЖрдХрд╕реНрдорд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛"

рдПрдХ "рдиреЛрдб" рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди "рдиреЛрдбреНрд╕" рдХреЗ рдмреАрдЪ рдереЛрдбрд╝реА рд╕рдорд╛рдирддрд╛ рд╣реИ, рдпрд╣ рдбрдХрдЯрд╛рдЗрдкрд┐рдВрдЧ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдиреЛрдб рдХреА рддрд░рд╣ рд╣реИ - рдпрд╣ рдПрдХ рдиреЛрдб рд╣реИред

рдЪрд┐рдВрддрд╛рдУ рдХрд╛ рд╡рд┐рднрд╛рдЬрди

рдЖрдк Node рд╕реЗ ShaderMaterial рдХреИрд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ? рдЕрднреА рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рд╕реЗ рддрд░реНрдХ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЯреБрдХрдбрд╝реЛрдВ, рдХреБрдЫ рдмрд┐рд▓реНрдбрд░реЛрдВ, рдХреБрдЫ рдХреИрд╢, рдкрд╛рд░реНрд╕рд░реНрд╕ рдЖрджрд┐ рдХреЗ рдмреАрдЪ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдиреЛрдб рдиреЛрдбрдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ ...? рдирд╛рдо рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдиреЛрдбрдмрд┐рд▓реНрдбрд░ рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИ рдЬреЛ рдиреЛрдбреНрд╕ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХрд╛рдлреА рдЕрд▓рдЧ рдХрд╛рдо рдХрд┐рдП рдЬрд╛рдиреЗ рд╣реИрдВ:

  • рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рдПрдВ
  • рдорд╛рдиреНрдп
  • рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рдПрдБ
  • рдЕрдиреБрдХреВрд▓рди
  • GLSL . рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ

рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдорд╛рдирддрд╛ рд╣реВрдВред рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдФрд░ рдбрд┐рдЬрд╛рдЗрди рдХреА рдХрдореА рдХреА рдмрд╛рдд рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ рдФрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╢реАрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

@Usnul рд╣рдо рдХрднреА рднреА рдереНрд░реА.рдЬреЗрдПрд╕ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ "рдЗрд╕реЗ рд▓реМрдЯрд╛рдПрдВред рдЗрдирдкреБрдЯред рдвреВрдВрдвреЗрдВ (рдЗрдирдкреБрдЯ => рдЗрдирдкреБрдЯред рдирд╛рдо === рдирд╛рдо);"

рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ "=>" рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлреЙрд░-рд▓реВрдк рдпрд╛ рдЬрдмрдХрд┐-рд▓реВрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдмрд╣реБрдд рдзреАрдореА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреЙрд▓рдмреИрдХ рдУрд░рд┐рдПрдВрдЯреЗрдб рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред All of Three..JS рдЗрд╕ рддрд░рд╣ рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рд╣реИред

@ рдЙрд╕реНрдиреБрд▓ , рдЖрдкрдХреА рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдВрдмрдВрдзреА рдЪрд┐рдВрддрд╛рдПрдБ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЖрдкрдХреЗ рдбрд┐рдЬрд╛рдЗрди рдЗрдирдкреБрдЯ рдФрд░ рдпреЛрдЧрджрд╛рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдЧрд╛ред :)

рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ "=>" рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлреЙрд░-рд▓реВрдк рдпрд╛ рдЬрдмрдХрд┐-рд▓реВрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдмрд╣реБрдд рдзреАрдореА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреЙрд▓рдмреИрдХ рдУрд░рд┐рдПрдВрдЯреЗрдб рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред All of Three..JS рдЗрд╕ рддрд░рд╣ рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рд╣реИред

рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдмрд┐рдВрджреБ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореЗрд░рд╛ рджрд░реНрд╢рди рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдкрдардиреАрдпрддрд╛ рдПрдХ рдкреИрдорд╛рдиреЗ рдкрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдирд┐рд░рдВрддрд░рддрд╛ рдЕрдЪреНрдЫреА рд╣реИред рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рд╕рд░рдгреА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ:

for(var i=0, count=array.length; i<count; i++){
    var element = array[i];
    ...
}

рдпрд╛ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬреЛ рдлрд╝реЙрд░реНрдо рдХреА 50 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рдВрдмреА рд╣реИ:

function complex(a){
  if(a){
      //do a ton of stuff
      ...
      return result;
  }
}

рдпрд╣ рдЙрддрдирд╛ рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛:

function complex(a){
  if(!a){
      //omg! not A?!11 
      return;
  }
  //do a ton of stuff
  ...
  return result;
}

@Usnul рдХреНрдпрд╛ рдЖрдк рдЗрдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ

@usnul рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдЗрд╕реЗ
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдЧрд░ рд░реЗрдлреНрд░реЗрдХреНрдЯрд░реНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣реИ (рдпрд╛ рд╕рдВрднрд╡рддрдГ рдПрдХ рдФрд░ рд░реЗрдкреЛ) рдпрд╛ рдЗрд╕реЗ рд╕реАрдзреЗ рд╕реНрд░реЛрдд рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ @bhouston рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реИред

@рдЖрдИрдПрдЖрд░рдЖрдИ

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ glsl рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ , рдФрд░ рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ - рдореЗрд░реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ - рдЧрдзреЗ рдореЗрдВ рдПрдХ

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЛ рдкрддрд╛ рд╣реИ ,

рдореИрдВ рдпрд╣ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдореИрдВ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреЛ рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рдЬрд╛рдирддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирддрд╛ рд╣реВрдВред рдореИрдВ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реВрдВ, рдЙрд╕рд╕реЗ рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ @usnul рдиреЗ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ @AndrewRayCode рдиреЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИред рдореБрдЭреЗ GLSL рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдиреЛрдб рдЪреАрдЬрд╝

рдпрджрд┐ рдЖрдк рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рд╕реЗ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдпрджрд┐ рд╣рдо judge on what you know , рдФрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ you don't know glsl рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдПрдХ рдЕрд╕реНрд╡реАрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП :)

рдпрд╣ рдРрд╕рд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд╣рд╛:

рдЬрд╛рдкрд╛рди рдЗрд╕ рдЧреНрд░рд╣ рдкрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдЬрдЧрд╣ рд╣реИ... рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рдЬрд╛рдкрд╛рди рдирд╣реАрдВ рдЧрдпрд╛"ред

рдзрдиреНрдпрд╡рд╛рджред

рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдЕрд╕реНрдкрд╖реНрдЯ рдпрд╛ рд╕рд░реНрд╡рдерд╛ рднреНрд░рд╛рдордХ рд╣реИрдВред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ "рдмрд┐рд▓реНрдб" рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ? - рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ)

рд╡рд╛рд╣, рдореБрдЭреЗ рдпрд╣ рднреА рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдиреАрдЪреЗ ShaderMaterial рд╣реИред рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ THREE.WebGLRenderer рд╢реЗрдбрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ glsl рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдФрд░ рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ - рдореЗрд░реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ - рдЧрдзреЗ рдореЗрдВ рдПрдХ рд╕реБрдкрд░ рджрд░реНрдж рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбрд░ рдХреЛрдбред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЛ рдкрддрд╛ рд╣реИ, рдЙрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдиреЛрдбреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рдлреИрд╢рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред

@pailhead рдЙрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрддрд░ рд╣реИрдВред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рдЕрд▓рд╛рд░реНрдо рдХреНрдпреЛрдВ рд╣реИред @mrdoob рдХрднреА рднреА рдПрдХ рдорд╣рд╛рди рд╕рдорд╛рдзрд╛рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╕рднреА рдорд╣рд╛рди рдкреАрдЖрд░, NodeMaterial рдореЗрдВ рдХрд┐рд╕реА рд╕реЗ рднреА рд╕реБрдзрд╛рд░ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рдореВрд▓ рдореЗрдВ рд╡рд┐рд▓рдп рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рдо рдХреЗ рд╕рд╛рде рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@ рд╕реБрдирдЧ рдХреНрдпрд╛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд▓реЛрдЧ рдХреБрдЫ рдЦрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдБред

@ рд╕реБрдирдЧ рдХреНрдпрд╛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд▓реЛрдЧ рдХреБрдЫ рдЦрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдБред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓реА рдЕрджреНрднреБрдд рд▓рдЧрддреА рд╣реИ, рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧреАред

рд╣рдо рдореМрдЬреВрджрд╛ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдХреЛрд░ рдореЗрдВ рдиреЛрдб рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХреИрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗ? рдХреНрдпрд╛ рд╣рдо рджреЛрдиреЛрдВ рджреЛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ рдпрд╛ рдореМрдЬреВрджрд╛ рдПрдХ рдХреЛ рдиреЛрдб рдПрдХ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╢рд╛рдпрдж рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрдХрдбрд╝ рдкрд╛ рд░рд╣рд╛ рд╣реВрдБ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ...

рдХреНрдпрд╛ рд╣рдо рджреЛрдиреЛрдВ рджреЛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ рдпрд╛ рдореМрдЬреВрджрд╛ рдПрдХ рдХреЛ рдиреЛрдб рдПрдХ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ?

рдореИрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ MeshStandardNodeMaterial рдФрд░ рдЕрдиреНрдп рдиреЛрдб рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреЛрд░ рд░рди рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдЬреБрдЕрд▓, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХреЛрд░ рдХреА рддрд░рд╣ рдЪрд▓рд╛рдирд╛ рд╣реИред

рдбрдмреНрд▓реНрдпреВрдЖрдИрдкреА https://github.com/mrdoob/three.js/pull/14333

рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢реИрдбреЛрдореИрдк рджрд┐рдЦрд╛рдирд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рдФрд░ 2 рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд╛рд▓рд╛ рдПрдХ рджреГрд╢реНрдп рд╣реИ рдЬреЛ MeshStandardNodeMaterial рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕реНрд╡рд┐рдЪ рдСрди рдХрд░ рджрд┐рдпрд╛ рд╣реИ
рдХрд╛рд╕реНрдЯрд╢реИрдбреЛ = рдкреНрд░рдХрд╛рд╢ рдХреЗ рд▓рд┐рдП рд╕рддреНрдп
рджреЛрдиреЛрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд╕реНрдЯрд╢реИрдбреЛ рдФрд░ рд░рд┐рд╕реАрд╡рд┐рдВрдЧ рд╢реИрдбреЛред
рдЫрд╛рдпрд╛ рд╕рдХреНрд╖рдо = рд░реЗрдВрдбрд░рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА

рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛?
рдХреНрдпрд╛ рдореБрдЭреЗ MeshStandardNodeMaterial рдХреА рдЫрд╛рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣реА рдЙрджреНрджреЗрд╢реНрдп рд╣реИ?

рдХреЛрдИ рдореБрдЭреЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдзрдиреНрдпрд╡рд╛рдж!

@claudioviola
рд╕рдорд░реНрдерди рдкреНрд░рд╢реНрди рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рдордВрдЪ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред

@sunag рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NodeMaterial рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд┐рд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдШреЛрд╖рдгрд╛ рдлрд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрдбрд╝реЗ рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдп рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ NodeMaterial рдмрд┐рдирд╛ TS рд╕рдорд░реНрдерди рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдореВрд╣ рд╣реИред

@sunag рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NodeMaterial рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдлрд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрдбрд╝реЗ рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдп рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ NodeMaterial рдмрд┐рдирд╛ TS рд╕рдорд░реНрдерди рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдореВрд╣ рд╣реИред

@ Mugen87 рд╣рд╛рдВ, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрдзрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Add TS рд╕рдкреЛрд░реНрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ

рдареАрдХ рд╣реИ, TS рд╕рдорд░реНрдерди рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рд╣реИ R017

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

boyravikumar picture boyravikumar  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

akshaysrin picture akshaysrin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jens-duttke picture jens-duttke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

scrubs picture scrubs  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Horray picture Horray  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ