Three.js: MeshLambertMaterial๊ณผ ํ•จ๊ป˜ ์ปค์Šคํ…€ ๋ฒ„ํ…์Šค ์…ฐ์ด๋”๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2011๋…„ 12์›” 02์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mrdoob/three.js

์•ˆ๋…•ํ•˜์„ธ์š” ์ €๋Š” ์ปค์Šคํ…€ ์…ฐ์ด๋”๋ฅผ ๋งŒ๋“ค๋ ค๊ณ ํ•˜๋Š”๋ฐ ๋จธํ‹ฐ๋ฆฌ์–ผ์ด ์•„๋‹Œ ๋ฒ„ํ…์Šค ์œ„์น˜ ๋งŒ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. MeshLambert๋Š” ์ด๋ฏธ ๋น›, ์งˆ๊ฐ ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ •์ ์„ ์ˆ˜์ •ํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์—๊ฒŒ ๋ฐฉํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ !!

Question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@maurrubio ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์ณค์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  9 ๋Œ“๊ธ€

์–ด๋–ค ์‚ฌ๋žŒ?

๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์ •์  ์…ฐ์ด๋”์— ์‚ฌ์šฉ์ž ์ง€์ • ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ lambert์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ง€์ • ShaderMaterial ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ ํ‘œ์ค€ ๋จธํ‹ฐ๋ฆฌ์–ผ์€ ShaderMaterial๊ณผ ๋˜‘๊ฐ™์€ ๊ธฐ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLShaders.js#L1187

์•ˆ๋…•ํ•˜์„ธ์š” @alteredq ์‘๋‹ต

์ด๊ฒƒ์ด ๋‹น์‹ ์ด ์–ธ๊ธ‰ ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?
http://www.interactiveuniverse.net/Shaders.js

lambert ์…ฐ์ด๋”์—์„œ ์ œ๊ณต๋˜๋Š” ๋ฐฐ์—ด์—์„œ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์ƒˆ ShaderMaterial ์ธ์Šคํ„ด์Šค๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ํฌ์ธํŠธ ๋ผ์ดํŠธ์˜ ์˜ํ–ฅ์„๋ฐ›์ง€ ์•Š๊ณ  ๊ฒ€์€ ์ƒ‰ ์žฌ์งˆ์ด๋ฉ๋‹ˆ๋‹ค.

๊ฑฐ์˜ ๋‹ค ์™”์–ด ;)

ํ‘œ์ค€ ์žฌ์งˆ์˜ ๊ธฐ๋Šฅ์ด ShaderMaterial ํ•˜๋ ค๋ฉด ์žฌ์งˆ ํ”Œ๋ž˜๊ทธ (๋ผ์ดํŠธ, ์•ˆ๊ฐœ ๋“ฑ)๋„ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

https://github.com/mrdoob/three.js/blob/master/src/materials/ShaderMaterial.js#L40

shaderMaterial = new THREE.ShaderMaterial( {

    uniforms:       uniforms,
    vertexShader:   vertexShader,
    fragmentShader: fragmentShader,
    lights:         true
    }); 

์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค !!! ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ๋๋‚˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„๋“ค๊ณผ ๋‚˜๋ˆ„๊ฒ ์Šต๋‹ˆ๋‹ค.

@alteredq ์˜ ๋งˆ์ง€๋ง‰ ์งˆ๋ฌธ์€ ๊ฐ์ฒด์— ํ™˜๊ฒฝ ๋งต์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…์Šค์ฒ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. MeshLambertMaterial์— ํฌํ•จ ๋œ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ?

ํ . ์ ์ ˆํ•œ uniform ( envMap )์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ด์•ผํ•˜๋ฉฐ ๋ฒ„ํ…์Šค ๋ฐ ํ”„๋ž˜๊ทธ๋จผํŠธ ์…ฐ์ด๋” #define USE_ENVMAP ๋ชจ๋‘ ์ƒ๋‹จ์— ๊ณ ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

uniforms[ "envMap" ].texture = myCubeTexture;
vertexShader= [

"#define USE_ENVMAP",

"varying vec3 vLightWeighting;",

THREE.ShaderChunk[ "map_pars_vertex" ],
THREE.ShaderChunk[ "lightmap_pars_vertex" ],

...
fragmentShader = [

"#define USE_ENVMAP",

"uniform float opacity;",

...

์…ฐ์ด๋”์—์„œ ์ •์  ์œ„์น˜๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์ •์  ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์—์„œ ๋‚˜์˜ค๋Š” ๋ฒ•์„ ์ด ๋” ์ด์ƒ ์ •ํ™•ํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ด์ „ ์œ„์น˜์— ๋”ฐ๋ผ ์Œ์˜ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๊ฒƒ์€ ์ผํ–ˆ๋‹ค : D

์—ฌ๋Ÿฌ๋ถ„์€ ์ •๋ง ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์—‡์„ํ•˜๋Š”์ง€๋ณด๊ณ  ์‹ถ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณง ํ”„๋กœ์ ํŠธ๋ฅผ ์™„๋ฃŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค (์ด๋Š” ์ œ ๊ฐœ์ธ ํฌํŠธํด๋ฆฌ์˜ค์ด๋ฉฐ ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฐ„ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ์ฒด์™€ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (๊ฐ๊ฐ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ) ์‚ฌ์šฉ์ž๋Š” ๊ณต๊ฐ„์„ ํƒ์ƒ‰ํ•˜๊ณ  ๊ฐ ์‚ฌ์šฉ์ž๋Š” ๋‚ด ์ž‘์—…์„ ๊ฐ€๋กœ ์งˆ๋Ÿฌ ์›€์ง์ด๋Š” ๋‹ค๋ฅธ ๋™์  ํฌ์ธํŠธ ๋ผ์ดํŠธ์ž…๋‹ˆ๋‹ค.

์—”์ง„์€ ๊ฝค ๊ธฐ๋Šฅ์ ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋” ๋งŽ์€ ๊ฒƒ์„ ๋””์ž์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

@maurrubio ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์ณค์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰