์ด๊ฒ์ด ์ด๋ฏธ ๊ณํ๋ ๊ธฐ๋ฅ์ธ์ง ์๋๋ฉด ์์ฑ๋ ๊ธฐ๋ฅ์ธ์ง ํ์คํ์ง ์์ผ๋ฏ๋ก ๋จผ์ ์์ ์ ์ค๋ช ํ๋ ค๊ณ ํฉ๋๋ค.
๋ค๋ฅธ ๋ฐฉ์ ๋ํด ์ ํ์ ์กฐ๋ช ์ ์ํํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ๊ฐ์ ๋ฐฉ์ด ์์ต๋๋ค. ํ๋์ ์กฐ๋ช ์ ํ ๋ฐฉ์ ๋ฌผ์ฒด์ ๋ด๋ฒฝ์๋ง ์ํฅ์ ๋ฏธ์ณ์ผ ํฉ๋๋ค. ๋ ๋ฒ์งธ ๋ฐฉ์ ์ด ๋น์ ์ํฅ์ ๋ฐ์ง ์์์ผ ํฉ๋๋ค.
ํ์ฌ ์ฅ๋ฉด์ ์กฐ๋ช ์ ์ถ๊ฐํ๋ฉด ๊ฑฐ๋ฆฌ์ ์๋ ๋ชจ๋ ๊ฐ์ฒด์ ์ํฅ์ ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ด ๋ ๋ฒ์งธ ๋ฐฉ์ "๋ฒฝ์ ํตํด" ๋ค์ด์ฌ ๋ ์ด์ํ ํจ๊ณผ๋ฅผ ์ป์ต๋๋ค.
๊ทธ๋์ ํ ๊ด์์ ์ํฅ์ ๋ฐ๋ ๊ฐ์ฒด์ ๋ค๋ฅธ ๊ด์์ ์ํฅ์ ๋ฐ๋ ๊ฐ์ฒด๋ฅผ ์ค์ ํ ์ ์๋๋ก ์กฐ๋ช ์ ์ํ ์ผ์ข ์ ๊ทธ๋ฃน์ด๋ ์ฑ๋์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์กฐ๋ช ์ด๋ ์ฌ๋ฌผ์์ ๊ทธ๋ฐ ๊ฒ์ ์ฐพ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ข์ ๊ธฐ๋ฅ์ด ์๋๊น ํ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ btw, ์์ง ๊ตฌํ๋์ง ์์๋ค๋ฉด three.js์ ํ์ฌ ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฌด์์ ๋๊น?
๋ด๊ฐ ๋งํ๊ณ ์๋ ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ค channel
ํ๋ THREE.Light
๋ฐ lightChannel
ํ๋ THREE.Mesh
๊ทธ๋ฐ์ด๋ ๋ญ. ํ์๊ฐ null์ด๋ฉด ๋ชจ๋ ๊ด์์ ์ํฅ์ ๋ฐ์ต๋๋ค. ํ์๊ฐ null์ด ์๋๋ฉด ๋์ผํ ๊ฐ์ ๊ฐ์ง ๋ผ์ดํธ ์ฑ๋์๋ง ์ํฅ์ ์ค๋๋ค.
๋๋ ๋ฉ์ ์์ฒด๊ฐ ์๋๋ผ ๋ฉ์ ์ง์ค๋ฉํธ๋ฆฌ์ ๋ฉด์ ๋ถ๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐํ ์ ์์ต๋๋ค.
๊ทธ๋ฆผ์๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒ ๊ฐ์ต๋๊น?
๊ธ์, ๋๋ ๊ทธ๋ฆผ์๋ก ๊ทธ๋ฐ โโ๊ฒ์ ์ป์ ์ ์์์ง๋ง (๊ทธ๋ฆฌ๊ณ ๋๋ ์ด๋ฏธ ์๋ํ์ต๋๋ค) ๋ค๋ฅธ ๋ถ์์ฉ์ ์ผ์ผํค๊ณ ํดํน์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋ํ๋ฉด ์ผ๋ถ ๋ฌผ์ฒด์ ๋ถ์ ๋ถ์ด๊ณ ๊ทธ๋ฆผ์๋ฅผ ๋์ง ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค . ์ฒ์๋ถํฐ ๋ถ์ ๋ถ์ด๋ฉด ์ ๋ฉ๋๋ค.
๋ด๊ฐ ํ์ํ ๊ฒ์ ํน์ ๊ด์์ด ํ ์ธํธ์ ๋ฉ์ฌ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ค๋ฅธ ์ธํธ์๋ ์ํฅ์ ๋ฏธ์น๋ค๋ ๊ฒ์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํฉ๋๋ค. ํ ๋ก ์ค๋ ๋ ์ :
glEnable(GL_LIGHT0);
//...
glEnable(GL_LIGHTn);
// Draw the walls to room 1
DrawWalls(room[0]);
// Draw the contents of room 1
DrawContents(room[0]);
glDisable(GL_LIGHT0);
//...
glDisable(GL_LIGHTn);
// Draw the walls to room 2
DrawWalls(room[1]);
// Draw the contents of room 2
DrawContents(room[1]);
๋ฐ๋ผ์ ๊ทธ๋ฆผ์์๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ฒ๋ผ ๋ณด์ ๋๋ค. ์๋๋ฉด ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
๋ค... ์ ๋ง ํธ๋ฆฌํ ๊ฒ ๊ฐ์์. API๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ํ์คํ์ง ์์ต๋๋ค.
์๋ง๋ ๊ฐ์ฅ ๊ฐ๋จํ ์๋ฃจ์ ์ด ์ฌ๊ธฐ์์ ๊ฐ์ฅ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
channel
(๋๋ group
)๋ฅผ THREE.Light
affectedByLightChannel
(๋๋ affectedByLightGroup
)๋ฅผ THREE.Mesh
(๋๋ ํ์์ ๋ฉด์๋ ์ถ๊ฐ)์ด๋ป๊ฒ ์๊ฐํด?
'affectedByLightChannel'์ด ๋๋ฌด ๊ธธ๊ณ 'lightChannel'๊ณผ ๊ฐ์ ๊ฒ์ด ๊ฐ๋ฅํ ์๋ ์์ง๋ง ํธ๋ฆฌํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ด์๊ณผ ์์ ๊ธฐ์ ์ฑ๋ ๋ฒํธ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ ๊ฒ:
light = new THREE.PointLight(0xFFF7D6, 1.0, 15)
light.channel = 123
testScene.add(light)
testScene = new THREE.Scene
geometry = new THREE.BoxGeometry(2,2,2)
material = new THREE.MeshLambertMaterial
color: 0xffffff
cube = new THREE.Mesh(geometry, material)
cube.lightChannel = 123
testScene.add(cube)
lightChannel
๊ฐ 0์ด๋ฉด ๋ชจ๋ ์ฑ๋์ ์ํฅ์ ๋ฐ์ต๋๋ค. channel
๊ฐ 0์ด๋ฉด ๋ชจ๋ ๋ฉ์์ ์ํฅ์ ์ค๋๋ค.
๋ฐ๋ผ์ ํ์ฌ ๋์๊ณผ ์์ ํ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋ฉ๋๋ค.
์ดํดํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ค์ธ ์ ์์ต๋๋ค ... ์ด์ฉ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด ๋ ๋์ ์ ์์ต๋๋ค.
cube.lightInfluences = [ light1, light2 ];
๋์๊ฒ ์ ๋์ ์ผ๋ก ๊ด์ฐฎ์ ๋ณด์ธ๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ๊ธฐ๊ฐ ์กฐ๊ธ ๋ ์ด๋ ค์ธ ์๋ ์์ง๋ง ๋ถ๋ช ํ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
๋ฉ์ฌ์ ์กฐ๋ช ์ ๋ํ ๊ฐ๋จํ ์ ์ ๋ง์คํฌ ์์ฑ์ ์ด๋ป์ต๋๊น?
light = new THREE.PointLight(0xFFF7D6, 1.0, 15)
light.mask = 0xffffffff; // default mask
testScene.add(light);
cube = new THREE.Mesh(geometry, material)
cube.mask = 0xffffffff; // default
testScene.add(cube);
๊ทธ๋ฐ ๋ค์ ๋ง์คํฌ์ ๋
ผ๋ฆฌ์ AND๊ฐ 0์ด ์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ์ฒด์ ์กฐ๋ช
์ด ์ผ์ง๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ค๋ธ์ ํธ์ ๋ํ ์ถ๊ฐ ๋ฐฉ๋ฒ ์์ด ์กฐ๋ช
์ด ๋ ์ด์์ ์ฑ๋์ ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค.
๋ง์คํฌ ๊ธฐ๋ณธ๊ฐ 0xffffffff๋ ๊ธฐ์กด ์ฝ๋์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
@satori99๊ฐ ๋งํ ๊ฒ.
๊ทธ๋ฌ๋ mask
๋ ๋์ Light
๋ฐ Mesh*Material
์ ์์ฑ์ด์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. (๋ผ์ดํธ์ ์ํฅ์ ๋ฐ๋ ์ฌ๋ฃ๋ง)
๋ํ ์์ฑ ์ด๋ฆ์ lightMask
, lightChannel
๋๋ channel
์ง์ ํ ์ ์์ต๋๋ค.
์ฑ๋/๋ง์คํฌ ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ๋ ์ฌ์ฉ์๊ฐ ๋นํธ ์ฐ์ฐ์ ์ดํดํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. API์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๋น๊ตํ๋ฉด ์ฝ๊ฐ ๋๋ฌด ๊ฐ๋ ฌํฉ๋๋ค.
์ด๋ ์ด ์ ๊ทผ ๋ฐฉ์์ผ๋ก๋ ํ ์ ์๋ ๋ง์คํฌ๋ก ๋ฌด์์ ํ ์ ์์ต๋๊น?
์์ ๋ ๊ฐ์ ๋ฐฉ์ด ์๋ ์์ ์ ์๋ฅผ ๋ค ์ ์์ต๋๋ค.
์ด๋ ์ด ๋ฐฉ์๋ณด๋ค ์ฑ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ ์ฃผ์ ํฌ์ธํธ๋ ์ด๋ ์ด๋ฅผ ์ฌ์ฉํ๋ฉด 'light1์ 1๋ฒ ๋ฐฉ์์ 2๋ฒ ๋ฐฉ์ผ๋ก ์ด๋'๊ณผ ๊ฐ์ ๊ฐ๋จํ ์์ ์ด ๋ ๋ณต์กํด์ง๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฅ ์ค์ ํ๋ ๊ฒ๋ณด๋ค
light1.channel = 2
(์ด์ ์๋ 1๋ก ์ค์ ๋จ)
์ด์ ์ lightInfluences ๋ฐฐ์ด์ light1์ด ์์๋ ๋ฐฉ 1์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ๋ค์ ํด๋น ๋ฐฐ์ด์์ ๋น์ ์ ๊ฑฐํ ๋ค์ ๋ฐฉ 2์ ๋ชจ๋ ๊ฐ์ฒด์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
'๊ฐ์ฒด 1์ 1๋ฒ ๋ฐฉ์์ 2๋ฒ ๋ฐฉ์ผ๋ก ์ฎ๊ธฐ๊ธฐ'์ ๊ฐ์ ๊ฐ๋จํ ์กฐ์๊ณผ ๊ฐ์ ์ด์ผ๊ธฐ์ ๋๋ค. InfluenceChannel์ 1์์ 2๋ก ์ค์ ํ๋ ๋์ ํด๋น ๋ฐฉ์ ๋ชจ๋ ์กฐ๋ช ์ ์ฐพ์ ๋ค์ ์ํฅ ๋ฐฐ์ด์์ ์ ๊ฑฐํ ๋ค์ ๋ฐฉ 2์ ๋ชจ๋ ์กฐ๋ช ์ ์ฐพ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
ํ ์ ์๋ค๋ ๊ฒ์ด ์๋๋ผ lightInfluences ์ ๊ทผ ๋ฐฉ์์ด ๋์๊ฒ ์ ๋์ ์ผ๋ก ์ข๋ค๊ณ ๋งํ ์ด์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฑ๋ ํญ๋ชฉ์ 1๊ฐ์ ํ ๋น๋งํผ ๊ฐ๋จํ ๊ณตํต ์์ ์ ๋ง๋ค๊ธฐ ์ํด ๋ ์์ ์ ์ํด ๊ทธ ์์ ๊ตฌํํ๋ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ด ๋ ๊ฒ์ ๋๋ค.
๋ง์คํฌ๋ก ๊ตฌํํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. (CPU์์ ๊ตฌํ๋๋์ง GPU์์ ๊ตฌํ๋๋์ง๋ ๋์ค์ ๋ ผ์ํ ๋ฌธ์ ์ ๋๋ค.)
์ฐ๋ฆฌ๋ ์ค์ ๋ฐฉ๋ฒ์ ์์ ๋ฅผ ํตํด ๋ณด์ฌ์ค ์ ์์ผ๋ฉฐ ์ฌ์ฉ์๋ ํจํด์ ๋ฐ๋ฅผ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ์ฌ์ ํ ๋๋ฌด ๋ณต์กํ๋ค๊ณ ์๊ฐ๋๋ฉด THREE.Channels
API๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
light.channels = new THREE.Channels();
...
light.channels.clear();
light.channels.add( channel );
light.channels.remove( channel );
light.channels.all();
Mesh*Material
๋ํ ๋์ผํ ๋ฐฉ๋ฒ์
๋๋ค.
๋๋ ๊ทธ API๋ฅผ ์ข์ํ๋ค :)
๋๋ ์ด๊ฒ์ด ๋ฌผ์ฒด์ ์กฐ๋ช
์ ๋ํด ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์์ง๋ง, ๋จธํฐ๋ฆฌ์ผ์ ๋ํด์๋ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
์ฌ๋ฃ๋ง ์กฐ๋ช ์ ๋ฐ์ํฉ๋๋ค. ์ด๊ฒ์ ์ฌ๋ฃ์ ์์ฑ์ด์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@westlangley์ ์๊ฒฌ์ ๋์ํฉ๋๋ค. ์กฐ๋ช ์ ์ฌ๋ฃ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
'๊ฐ์ฒด 1์ 1๋ฒ ๋ฐฉ์์ 2๋ฒ ๋ฐฉ์ผ๋ก ์ฎ๊ธฐ๊ธฐ'์ ๊ฐ์ ๊ฐ๋จํ ์กฐ์๊ณผ ๊ฐ์ ์ด์ผ๊ธฐ์ ๋๋ค.
๊ทธ๊ฒ ๋ฌธ์ ์ผ. Channels
๋ ๊ฐ์ฒด ๊ธฐ๋ฐ์ด ์๋๋๋ค.
๊ทธ๊ฒ ๋ฌธ์ ์ผ. ์ฑ๋์ ๊ฐ์ฒด ๊ธฐ๋ฐ์ด ์๋๋๋ค.
ํ์ง๋ง ์? ๊ธฐ์ ์ ํ๊ณ์ธ๊ฐ?
์๋ํ๋ฉด ๊ทธ๊ฒ์ ๊ทธ ๋ชจ๋ ๊ฒ์ ์ ์ฒด ์์ด๋์ด๋ฅผ ๋ฌดํจํํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ์ ์ฌ๋ฃ๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์์ ์ ์์ง๋ง ๊ทธ ์ค ํ๋๋ ์ผ์ ธ ์์ด์ผ ํ๊ณ ๋ค๋ฅธ ํ๋๋ ์ผ์ ธ ์์ผ๋ฉด ์ ๋ฉ๋๋ค.
ํ์ง๋ง ์? ๊ธฐ์ ์ ํ๊ณ์ธ๊ฐ?
์๋์ค. ๋ฌผ์ฒด๊ฐ ๋น์ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ๋ฃ๋ง ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ์ ์ฌ๋ฃ๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์์ ์ ์์ง๋ง ๊ทธ ์ค ํ๋๋ ์ผ์ ธ ์์ด์ผ ํ๊ณ ๋ค๋ฅธ ํ๋๋ ์ผ์ ธ ์์ผ๋ฉด ์ ๋ฉ๋๋ค.
์ฅ๋ฉด์ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํด ๋์ผํ ์ฌ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ง์ ๋ค๋ฅธ ๊ท ์ผ ๊ฐ์ด ํ์ํ ๊ฐ์ฒด์ ์ฌ์ง์ clone
๋ฟ์
๋๋ค. ๋ชจ๋๊ฐ ๊ณต์ ํ๋ ๋จ ํ๋์ ์
ฐ์ด๋ ํ๋ก๊ทธ๋จ๋ง ์์ด์ผ ํฉ๋๋ค.
๋ง์คํฌ๋ก ๊ตฌํํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. (CPU์์ ๊ตฌํ๋๋์ง GPU์์ ๊ตฌํ๋๋์ง๋ ๋์ค์ ๋ ผ์ํ ๋ฌธ์ ์ ๋๋ค.)
GPU์์ ์ง์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๊น?
GPU์์ ์ง์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๊น?
์, ์กฐ๋ช
๊ณผ ์ฌ๋ฃ์ ๋ํ ์ถ๊ฐ channels
์ ๋ํผ์ ์ ๋ฌํด์ผ ํฉ๋๋ค.
๊ณ์ธต ๊ด๋ฆฌ ์์คํ ์ ์ด๋ป์ต๋๊น? ๋ฉ์ฌ๋ฅผ ๋ ์ด์ด๋ก ๊ทธ๋ฃนํํ๊ณ ๊ฑฐ๊ธฐ์์ ๋ง์คํฌ๋ฅผ ์ ์ฉํฉ๋๋ค(์กฐ๋ช , ๊ทธ๋ฆผ์, ๊ฐ์์ฑ ๋ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์์). ๋จ์ผ์ฑ์ด ์ข์ ์๊ฐ ๋ ๊น์?
๊ทธ๋ฆผ์๋ ๊ด๋ จ ์ฃผ์ ์ ๋๋ค. ์ ํ์ ์๋์ฐ ์บ์คํ ๊ฐ์ ๊ฒ๋ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํด์. 'receiveShadow = true' ๋์ 'receiveShadowFrom = ...'(๋ฐ ์์ค ๋ชฉ๋ก)๊ณผ ๊ฐ์ต๋๋ค.
ํน์ ๋ฐฉ์๋ง ์ํฅ์ ๋ฏธ์น๋ ์กฐ๋ช ์ ์ค์ ํ ๋(์ ์์์๋) ํด๋น ์กฐ๋ช ์ด ์ด ๋ฐฉ ๊ฐ์ฒด์๋ง ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ฐ๋๋ก ์ฆ์ ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฆผ์ ์์ฑ์ ์ด ์ค๋ ๋์์ ์์ ๊ฐ์ ์ด์ ๋ก ๊ฐ์ฒด๊ฐ ์๋๋ผ ์ค์ ๋ก ์ฌ๋ฃ์ ์์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฆผ์ ์์ฑ์ ์ด ์ค๋ ๋์์ ์์ ๊ฐ์ ์ด์ ๋ก ๊ฐ์ฒด๊ฐ ์๋๋ผ ์ค์ ๋ก ์ฌ๋ฃ์ ์์ด์ผ ํฉ๋๋ค.
๋ค, ์ดํด๊ฐ ๋ฉ๋๋ค!
์ด ๊ธฐ๋ฅ์ ํฌํจํ ๊ณํ์ด ์์ต๋๊น(์: ์ฒซ ๋ฒ์งธ ์ด์์ ๋ํ ๊ณํ๋ ๋์ ๋ฆด๋ฆฌ์ค)?
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ ๋ฐฉ(๋ฐ ํด๋น ์กฐ๋ช )์ ๋ํด ๋ณ๋์ ์ฅ๋ฉด์ ์ค์ ํ์ฌ ๋๋ถ๋ถ์ ์๊ตฌ ์ฌํญ์ ๋ฌ์ฑํ ์ ์์ต๋๊น?
renderer.autoClear = false;
...
renderer.render( scene1, camera );
renderer.render( scene2, camera );
ํ , ์ด ๋ฐฉ๋ฒ์ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค!
์ ํ์ ์กฐ๋ช /๊ทธ๋ฆผ์๋ ํฅํ ๋ฒ์ IMO์ ํ์์ ๋๋ค.
์ด๊ฒ์ ๋ํด BIG +9999, ์ฌ์ง์ด ๊ด์ A์์ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ธ์ง ์๋๋ฉด ๊ด์ B์์ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ธ์ง ์ ํํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. ํ์ฌ ๋ ์ฅ๋ฉด์ด ์๋ ๋ค๋ฅธ ์๋ฃจ์ ์ ๊ฐ์ง๊ณ ์๋ ์ฌ๋์ด ์์ต๋๊น? ๋์๊ฒ ๊ฝค ๊ณ ํต์ค๋ฌ์ด ์ผ์ด ๋ ๊ฑฐ์ผ...
์ด๋ฐ ์ ์ฅ ์ด๋ป๊ฒ ์์ง๋ ๊ตฌํ๋์ง ์์ต๋๊น? rohan์์ +9999 ์ดํ)
ํํ ์ ์ถ์ธก์ผ๋ก๋ @tsone ์ ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ์ต๋๋ค . ํด๋น ์ปค๋ฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น? ์ง๊ธ ์ ํ ํด๋ผ์ด์ธํธ์์ ํ์ ์ค
์ด๊ฒ๋ค์ด ๋จ์ง ์ฌ๋ฃ์ ์ ๋ฌ๋๋ ์ ๋ํผ์ด๋ผ๋ฉด ๊ตฌํํ๊ธฐ๊ฐ ์ผ๋ง๋ ์ด๋ ต์ต๋๊น? ๊ทธ๋ค์ด ํด์ผ ํ ์ผ์ webgl ๋ ๋๋ฌ์ ๊น์ํ ๊ณณ์ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ฌ์ง์ ์ ์๋ ์กฐ๋ช ์ ์ ์ญ ๋ชฉ๋ก์ ๋์ฒดํ๋ ๊ฒ์ ๋๋ค.
๋ค์์ Dev ๋ถ๊ธฐ์ Layers ๊ตฌํ์ ํ
์คํธํ๋ ๊ฐ๋จํ JSFiddle์
๋๋ค.
https://jsfiddle.net/Angrypickle/t8f7q3vo/4/
๋ถํํ๋ ํ์ฌ๋ก์๋ ์ ๋๋ก ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ์๋๋ฉด ๋ด๊ฐ ๋ญ๊ฐ ์๋ชปํ๊ณ ์์ต๋๊น?
์. ๋ ์ด์ด๋ ์์ง ์กฐ๋ช ๊ณผ ํจ๊ป ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ค์ ์นด๋ฉ๋ผ/๊ฐ์ฒด์ ํจ๊ป ์๋ํฉ๋๋ค! ๐
๋ก์ ๊ทธ ์ ์๋! ๋ค์์ ์ค์ฒฉ ์นด๋ฉ๋ผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ด์ด๋ก ์ ํ์ ์กฐ๋ช
์ ๊ตฌํํ๋ ์
๋ฐ์ดํธ๋ JSFiddle์
๋๋ค.
https://jsfiddle.net/Angrypickle/t4a1eusL/
๋ฐ์คํฌํฑ๊ณผ ๋ชจ๋ฐ์ผ์์ ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ตฌ๋ ์ง ์ด ์ ๊ทผ ๋ฐฉ์์์ ์ฌ๊ฐํ๊ฒ ๋์ ์ ์ ๋ณธ ์ ์ด ์์ต๋๊น? ์ต์ํ ์กฐ๋ช
์ด ๋ ์ด์ด ๊ธฐ๋ฅ์ ์ฐ๊ฒฐ๋ ๋๊น์ง?
๋๊ตฌ๋ ์ง ์ด ์ ๊ทผ ๋ฐฉ์์์ ์ฌ๊ฐํ๊ฒ ๋์ ์ ์ ๋ณธ ์ ์ด ์์ต๋๊น?
๋ฌผ๋ก ๋์๋ค. ํ ๋์ ์นด๋ฉ๋ผ๋ก ํ์ฅ์ ํ์ํ๋ ๋์ ์ฌ๋๋ค์ ์ด์ ์ผ์ ํด์ผ ํฉ๋๋ค. camera1.add( camera2 );
์ ๊ฐ ๋ณผ ๋ ์ด๊ฒ์ WTF๋ผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฌด์์ฒ๋ผ? ๋ด ์นด๋ฉ๋ผ์ ์นด๋ฉ๋ผ? ๊ฐ๋ณ์ ์ผ๋ก ์กฐ๋ช
์ ์ผ์ผ ํ๋ ์์ญ ๊ฐ์ ๋ฐฉ์ด ์๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ์ผ๋ง๋ ๋ง์ ์นด๋ฉ๋ผ๊ฐ ํ์ํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ ๋ ์ด์ด... ์ด์ ๋ ๋ ์ด์ด๊ฐ ์์์ต๋๋ค. ๋ง์ฃ . ์ด์ ๋ ์ด์ด์ ๋ํด lฬฒeฬฒaฬฒrฬฒnฬฒ ํด์ผ ํฉ๋๋ค.
๋ด๊ฐ ์ด๊ฒ์ ๋ํ ์๋ฒฝํ ์๋ฃจ์ ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, alternativa3d ์ฌ๋๋ค์ ๋น์ ๊ฒฝ๊ณ ์์์ ์๋ ๋ฌผ๊ฑด์ ๋น์ ๋น์ถ๊ณค ํ์ต๋๋ค. ์ด๊ฒ์ ์ต์ข ์ฌ์ฉ์๋ฅผ ์ํ 0์ ๊ฐ๊น์ด ์ค์ ์ ์ด์ ์ด ์์์ง๋ง ์กฐ๋ช ์ฌ์ด์ ๊ฒฝ๊ณ๊ฐ ๋น์ค๋ฌํด์ผ ํ ๋ ๋ฌด๋์ง๊ณ ์์์ต๋๋ค. ํ์ง๋ง ๊ทธ๋๋ ์ง๊ธ ๋น์ฅ ์ค์ ํ๋ก์ ํธ์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค๋ฉด ์ฌ์ฉ๋ ํ์ค ์ฌ๋ฃ๋ฅผ ShaderMaterial-์ ๊ธ์ด ๋ชจ์ ๊ฑฐ๊ธฐ์ ๋ด๊ฐ ์ํ๋ ์กฐ๋ช ์ ์ง์ ์ ๋ฌํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ ๊ฒ์ ๋๋ค.
@makc ๋ ์ด์ด๋ ์ค์ ๋ก ๋งค์ฐ ๊ฐ๋จํ๊ณ ๊ฐ๋ ฅํฉ๋๋ค!
@Zob1 ์ ์ ๊ทผ ๋ฐฉ์์ ํ์คํ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ์๋๋๋ค. ๋ ์ด์ด๊ฐ ์กฐ๋ช
๊ณผ ํจ๊ป ์๋ํ ๋๊น์ง ์ค๋ ๊ฑธ๋ฆฌ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ๋ฅด๊ณ ์๋์ง ํ์ธํ์ญ์์ค. ๋จ์ผ ์ฅ๋ฉด๊ณผ "์ฃผ" ๊ด์์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ํน์ ์ฌ๋ฃ๊ฐ ์ด ์ฃผ ๊ด์์ ๋ฌด์ํ๊ณ ๋ค๋ฅธ ๊ด์์์ ๊ทธ๋ฆผ์๋ฅผ ๋๋ฆฌ์ธ ์ ์์ต๋๊น?
๊ธ์, ๊ทธ๊ฒ์ ์ํด ์ฐ๋ฆฌ๋ ๋ํ ์ฌ๋ฃ์ ๋ ์ด์ด ์ง์์ ์ถ๊ฐํด์ผ ํ ๊ฒ์ ๋๋ค.
ํ์ฌ ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์ ์นด๋ฉ๋ผ์์ ๊ฐ์ฒด๋ฅผ ํ์/์จ๊ธฐ๊ธฐ์ ๋๋ค.
๊ฒ์์ ํ๊ณ ์๊ณ ํธ์ง๊ธฐ์์ ๊ตฌ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ถฉ๋์ฒด๋ฅผ ํ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ ๊ตฌ์ฒด๋ ๋ ์ด์ด 1๋ก ์ค์ ํ ์ ์๊ณ ์นด๋ฉ๋ผ์ ํธ์ง๊ธฐ๋ ๋ ์ด์ด 0๊ณผ 1์ ํ์ฑํํ ์ ์์ง๋ง ๊ฒ์ ์นด๋ฉ๋ผ๋ ๋ ์ด์ด 0์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ํธ์ง๊ธฐ์์ ๋ชจ๋ ๋๋ฏธ๋ฅผ ๋ณผ ์ ์์ง๋ง ๊ฒ์์์๋ ' ๋ค์ ๊ฐ๋ค.
ํธ์ง๊ธฐ ์์ฒด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋๋ง๋ค ์ด๊ฒ์ด ๋ ์ดํด๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ์๋ฅผ ๋ค์ด์ผ ํ ๊ฒ์ ๋๋ค.
์ค๋ฅธ์ชฝ! ๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ฐ ํ๊ณ ์ถ์ ๊ฒ์ ์ Three JS ์ธ๊ณ์ 2D ์บ๋ฆญํฐ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์บ๋ฆญํฐ๋ ํ๊ฒฝ์ ์ผ๋ถ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ก "์ " ๊ทธ๋ฆผ์๊ฐ ํ์ํฉ๋๋ค. ์ ๋ ํ์ฌ ๋ฐ์ ํฌ๋ช ํ ๊ฒ์์ ์ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ๋ฐฐ์นํ๊ณ ๋น์ค๋ฌํ ์๋ํ๋๋ก ํ๋ ์๋นํ ํดํน๋ ๊ฒ๋ค์ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํ๊ณ ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ณต์กํ ํ๋ฉด์์๋ ์ ํ ์ ์๋ํ์ง ์์ต๋๋ค.
๋ด ์๋ ์์ด๋์ด๋ ๋ณด์ด์ง ์๋ ์ํ ๊ธฐํํ ์์น๋ฅผ ๊ฐ ์บ๋ฆญํฐ ์์ "ํ๊ด"์ผ๋ก ๋ฐฐ์นํ๊ณ ์ ์ฒด ์ฅ๋ฉด์ ๋ฎ๋ ์ง์ ์๋๋ฅผ ๊ฐ๋ฆฌํค๋ ์กฐ๋ช ์ ๋ง๋๋ ๊ฒ์ด์์ต๋๋ค. ์ด ํ๊ด์ ์ด ๊ด์์ ๊ทธ๋ฆผ์๋ง ํฌ์ฌํ๋ ๋ฐ๋ฉด ์ฅ๋ฉด์ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ "์ฃผ" ๊ด์์ ๊ทธ๋ฆผ์๋ฅผ ํฌ์ฌํฉ๋๋ค.
์ด ์์ด๋์ด๊ฐ ์๋ํ๋ ค๋ฉด ๋ ์ด์ด๊ฐ ํ์ํ์ง ์๋์?
์ด ํ๊ด์ ์ด ๊ด์์ ๊ทธ๋ฆผ์๋ง ํฌ์ฌํ๋ ๋ฐ๋ฉด ์ฅ๋ฉด์ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ "์ฃผ" ๊ด์์ ๊ทธ๋ฆผ์๋ฅผ ํฌ์ฌํฉ๋๋ค.
shadowOnly
์ต์
์ด ์์์ง๋ง ์ ๊ฑฐ๋์์ต๋๋ค.
FWIW, ๊ทธ๋ฆผ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค ...
์, ํ์ง๋ง shadowOnly๋ ์ค์ ๋ก ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ํ๊ด์ด ๋ ๊ด์ ๋ชจ๋์์ ๊ทธ๋ฆผ์๋ฅผ ํฌ์ฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ๋ ๊ทธ๋ค์ด ํ๋์ ๊ด์์์๋ง ๊ทธ๋ฆผ์๋ฅผ ํฌ์ฌํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์ง๊ธ ์ ํ๋ก ๊ทธ ์๋ฅผ ํ์ธํ๊ฒ ์ง๋ง ์ ๋งํด ๋ณด์ ๋๋ค.
ํ ํธ์ง ํ์ง๋ง ๊ทธ ๊ตฌ์ฒด๊ฐ ์ฅ๋ฉด์์ ์์น๋ฅผ ๋ณ๊ฒฝํ๊ณ ๊ทธ๋ผ์ด๋ ๋ฉ์์ ๋์ด๊ฐ ๋ค์ํ๋ค๋ฉด ๊ทธ ๊ทธ๋ฆผ์๊ฐ ์ง๋ฉด์ ํ๋ฉด ๋ฒ์ ๊ณผ ์ฌ๋ฐ๋ฅด๊ฒ ์ผ์นํ ๊น์?
์๋์...
๊ทธ๋ ๊ทธ๋ ๊ฒ ์๊ฐํ๋ค. ๋ ์ด์ด๊ฐ ํ์ํฉ๋๋ค! ํคํค
์๋ ํ์ธ์ @rohan-deshpande ,
์, ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ ์ผ์ข ์ ๋ ์ด์ด๊ฐ ํ์ํฉ๋๋ค. ์ ๋ ์ผ๋ง์ ์ ์๋์ฐ๋ฉ์ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ฌ๋์ด์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ๋จ์ผ ํ๋ฉด ๊ทธ๋ฆผ์์ด๊ธฐ ๋๋ฌธ์ ํํํ ๋ฐ๋ฅ์ด๋ ์ง๋ฉด์ ํฌํจํ๋ ์ฅ๋ฉด์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น ๋ฅด๊ณ ์ ๋ ดํ์ง๋ง ์ ํํ ๋จ์ผ ํ๋ฉด ๊ทธ๋ฆผ์๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฑ๋ฅ ๋ฉด์์ ์ด๋ฅผ ๋ฅ๊ฐํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด๊ฒ์ ์ถ๊ฐํ ์ด์ ๋ ๊ฐ๋จํ ๋ฐ๋ชจ ์ฅ๋ฉด์ ๊ฒฝ์ฐ์๋ ์๋์ฐ๋งต์ด ๋ด ํ๋ ์ ์๋๋ฅผ ์๋นํ ๋จ์ด๋จ๋ ธ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ฉด์ Shadowmeshes๋ ๋ด ์ ํ์์๋ ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค.
์ฌ๊ธฐ์์ ์ฌ์ฉํ๋ ๊ฒ์์ ํ์ธํ ์ ์์ต๋๋ค.
https://github.com/erichlof/3dLightCycles
2๊ฐ์ ๋ค๋ฅธ ๋ทฐํฌํธ๋ฅผ ํตํด ์ฅ๋ฉด์ ๋ ๋ฒ ๋ ๋๋งํ๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ ๊ฐ์ฒด(์ฃผ๊ธฐ ๋ฐ ํธ๋ ์ผ ๋ฒฝ)์ ์ฌ๋ฐ๋ฅธ ๊ทธ๋ฆผ์๊ฐ ์์ต๋๋ค. ๋ด ์ค๋งํธํฐ์์ ๋งค๋๋ฝ๊ฒ ์คํ๋๋๋ฐ, ์ด๋ ํ๋ ์๋น 2๊ฐ์ ์ฅ๋ฉด ๋ ๋๋ง์ ์ํ ์๋์ฐ๋งต์ผ๋ก๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ฏธ๋์ ๋ ์ด์ด์ ๋ํด ์ฌ๊ธฐ์์ +1 :)
@erichlof ๊ฒ์์
์๊ฒ ์ต๋๋ค. ๋ ์ด์ด๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ์ต๋๋ค. ๊ทธ๋๊น์ง๋ ๋ด ํดํน ์๋ฃจ์ ์ผ๋ก ์ถฉ๋ถํด์ผ ํฉ๋๋ค.
์๋ค ์
์ด๊ฒ ๊ตฌํ๋๊ฑด๊ฐ์?
http://stackoverflow.com/questions/33689781/casting-shadows-based-on-a-specific-light?noredirect=1#comment55153706_33689781
์๋์ ์์ง ๊ตฌํ๋์ง ์์์ต๋๋ค. ๋ ์ด์ด๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ITT์ ๋์ด๋ ์๋ฃจ์ ์ค ํ๋๋ฅผ ์๋ํด์ผ ํฉ๋๋ค(์: ๋ณ๋์ ์ฅ๋ฉด).
๋ค์ +99999
์ด๊ฒ์ ํ์คํ ๋งค์ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ ์ด์ด๊ฐ ์๋ํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ์ด๊ฒ์ ์ ์งํ๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์, ์ฌ๊ธฐ ๋ค์ ํ ์ถฉ๋์ด ์์ต๋๋ค. ;-)
@manthrax ์ด๊ฒ์ ํ์ธํ์ญ์์ค!
๋ค์ +99999
๋๋ ์ด๊ฒ์ ์ข์ํ ๊ฒ์ ๋๋ค. ๊ฐ ์๋ฐํ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ์กฐ๋ช ์ ์ํด์๋ง ์กฐ๋ช ๋๋ ์ํฉ์ด ์๊ณ ์ฅ๋ฉด์ ์์ฒ ๊ฐ์ ์กฐ๋ช ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ฐ ์๋ฐํ์ ๋ํด ๋จ์ผ ์กฐ๋ช ์ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๋
!
์ด ๊ธฐ๋ฅ์ด ํ์ํ๊ณ ๊ตฌํํ๋ ค๊ณ ์๊ฐํ์ต๋๋ค. ์ด ์์
์ ์ํํ ์ ์๋ ์์น( initMaterial
in WebGLRenderer
)๋ฅผ ์ฌ์ฉํ์ฌ ๋งค์ฐ ๊ฐ๋จํด์ผ ํฉ๋๋ค. ๊ธฐ์กด ๋ ์ด์ด.
ํน์ ์กฐ๋ช
๊ฐ์ฒด(์กฐ๋ช
์์ฒด ๊ฐ์ฒด ๋ ์ด์ด์ ๋ฌด๊ด)์ ์ํฅ์ ๋ฐ๋ ๋ ์ด์ด๋ฅผ ์ ํํ๊ธฐ ์ํด ์กฐ๋ช
๋ณ ๋นํธ ๋ง์คํฌ( Layers
๊ฐ์ฒด๋ก)๋ฅผ ๋ง๋ ๋ค์ ์กฐ๋ช
/์๋์ฐ๋งต์ ํํฐ๋งํ์ฌ ์์์ ์ธ๊ธํ ํจ์์์ ๊ฐ ๊ฐ์ฒด์ ๋ํด ์ ๋ํผ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
๊ด๋ จ์ด ์์๊น์?
๋น์ ์ด ๊ทธ ์ ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋๋ฅผ ๋ฆฌ๋๋ ์ ํ์ง ์๋ ํ ์ด๊ฒ์ ์๋ํ๊ณ ๋ด๊ฐ ์ด๊ฒ์ ๋ฌ์ฑํ๋ ์ฆ์ ํ ์์ฒญ์ ์ ์ถํ ๊ฒ์ ๋๋ค.
์ ๋ฐ์ดํธ:
https://github.com/tiesselune/three.js/tree/selective-lighting
๋๋ ์ด๋๊ฐ์ ๋์ฐฉํ๊ณ ์๋ค. ์ด๊ฒ์ด ์ฑ๋ฅ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ง ๋๋ ์ฑ๋ฅ์ ์ํด ๋ด ์ฝ๋๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ํ์คํ์ง ์์ง๋ง ๋ด๊ฐ ๋ง๋ ๋ช ๊ฐ์ง ํ ์คํธ์์ ์๋ํ๊ณ ์์ต๋๋ค. ๋ ์ด์ด๋ณ ์กฐ๋ช ! ์ผ!
๊ทธ๋๋ ์์ง ๋ ํ ์คํธํด์ผ ํ๊ณ pull ์์ฒญ์ ์ ์ถํ๊ธฐ ์ ์ ๊ด๋ จ ์์ ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์ ๋ฐ์ดํธ:
๋ช ๊ฐ์ง ์ถ๊ฐ ํ
์คํธ๋ฅผ ์ํํ์ผ๋ฉฐ ์๋ก ๋ค๋ฅธ ๋ ์ด์ด์ ์๋(๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์กฐ๋ช
์ค์ ์ ๊ฐ์ง) ๋ ๊ฐ์ฒด์ ๋์ผํ ์ฌ์ง์ ์ฌ์ฉํ๋ฉด ์กฐ๋ช
์ค์ ์ดํ ๋ ๋๋ฌ๊ฐ ์ง์์ ์ผ๋ก ์ฌ์ง์ ์
๋ฐ์ดํธํฉ๋๋ค( needsUpdate
). ์ด์ ์๋ ๋ถ๊ฐ๋ฅํ๋ ๋ ๋ฌผ์ฒด ์ฌ์ด์ ๋ฌผ์ง์ ๋ณํ์ ๋ํด. ์ด๊ฒ์ ์์ฒญ๋ ์ฑ๋ฅ ์ ํ์ ์๊ฐ์ ์ด์์ ์๋ฏธํฉ๋๋ค(๋ง์ง๋ง ์ฌ๋ฃ ์
๋ก๋๊ฐ ๋ ๋๋ง ์๊ฐ์ ์น๋ฆฌํ๊ธฐ ๋๋ฌธ์).
๋ฌผ๋ก , ์กฐ๋ช ์ค์ ์ด ๋ค๋ฅธ ๋ ์ค๋ธ์ ํธ์ ๋ํด ๋๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๋์ ์ ๋จธํฐ๋ฆฌ์ผ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ด๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๋ฅผ ์ํด ๋ณต์ ํ๋ ๊ฒ์ด ์ข์ ์๊ฐ์ธ์ง ์์ฌ์ค๋ฝ์ต๋๋ค. ์๋ณธ ์๋ฃ์์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ์ฌ ๋ณต์ ์ ๋ฏธ๋ฌ๋งํ๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค์์ ๋ด๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ ๊ฐ์ง ์๋ฃจ์ ์ ๋๋ค.
์กฐ๋ช ์ค์ ์ด ๋ค๋ฅธ ๋ ์ด์ด์ ๋ ๊ฐ์ฒด๊ฐ ๋์ผํ ์ฌ์ง์ ๊ณต์ ํ ๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ณต์ ์ฌ์ง์ ๋ง๋ค๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ค๋ธ์ ํธ ๋ ๋ฒจ ๋์ ์ฌ๋ฃ ๋ ๋ฒจ์์ ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ์กฐ๋ช ์ ๋ํ ๋ณ๋ ฌ ๋ ์ด์ด ์์คํ ์์ฑ). ๋ฐ๋ผ์ ๋ค๋ฅธ ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์กฐ๋ช ์ค์ ์ ๋ฌ์ฑํ๋ ๊ฒ์ด ํ์์ ๋๋ค. ์ด๋ ๊ฐ์์ฑ์ ์ํ ํ์ฌ ๋ ์ด์ด ์์คํ (์ค๋ธ์ ํธ ๋ฐ ์นด๋ฉ๋ผ)๊ณผ ์กฐ๋ช (์ฌ๋ฃ ๋ฐ ์กฐ๋ช )์ ๋ํ ๋ค๋ฅธ ์์คํ ์ด ์์์ ์๋ฏธํฉ๋๋ค.
์ฌ๋ฌ๋ถ์ ์ด๋ป๊ฒ ์๊ฐํ์ธ์?
๋๋ ๋น์ ์ ์๊ฒฌ์ด ๋ค์ด์ค๋ ๊ฒ์๋ณด๊ณ ์ด๊ฒ์ ๋ํด ์๊ฐํ์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์๋ง ๊ทธ๊ฒ์ ๋ณด์ง ๋ชปํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ๋ ๊ฒ์ ๋์์ด๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ์ค ์ ๋ ํ์คํ ๋ฌผ์ฒด๋ณด๋ค๋ ์ฌ์ง์ ๋ผ์ดํธ ๋ ์ด์ด๋ฅผ ์ค์ ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ๋ค์ ์ง๊ด์ ์ด์ง ์์ง๋ง ์ฌ์ ํ ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋ช
ํํ ํ์๋ฉด needsUpdate
๊ฐ ์ค์ ๋์์ ๋ ์ด ๊ฒฝ์ฐ์๋ ๊ท ์ผํ ๊ฐ๋ง ๋ค์ ๊ณ์ฐํ๋ ๊ฒ ์๋๊ฐ์? ๋ค๋ฅธ ์
ฐ์ด๋๊ฐ ๋ชจ๋ ์บ์๋์ด์ผ ํ๋ฏ๋ก ์
ฐ์ด๋๋ฅผ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ค ์ฑ๊ณผ๋ฅผ ๋ณด๊ณ ์์ต๋๊น? ์ถ๊ฐ ๊ณ์ฐ์ด ๋ฐ์ํ๋ ์ ํํ ์์น๋ฅผ ํ์ธํ๊ธฐ ์ํด ํ๋กํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ต๋๊น?
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , filterAmbiantLights
๋ filterAmbientLights
์ด์ด์ผ ํฉ๋๋ค.
์ฒ ์ ์ค๋ฅ์ ๋ํด ๋น์ ์ด ์ณ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํ๋ ธ๋ค๋ ๊ฒ์ ์์์ฐจ๋ฆฌ๊ธฐ ์ ์ ์ค์ ๋ก "ambiant"๋ก ๋ชจ๋ ๊ฒ์ ์์ฑํ๊ณ ๋๋ ๊ทธ ๋ฐ์์ ์์์ต๋๋ค. ๐
๊ทธ๋ฐ ๋ค์ ์ฌ๋ฃ์ ๋ ์ด์ด ์ ๋ณด๋ฅผ ์ด๋ํ ๊ฒ์ ๋๋ค. ์๋ ๋ฐฉ์๊ณผ ๋ ๊ด๋ จ์ฑ์ด ์๊ณ ์ผ๊ด์ฑ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
initMaterial
(๊ทธ๋ฆฌ๊ณ acquireProgram
๋ฐ getShaderParameter
๋ ์ด๋ค ์ด์ ๋ก ์์ฒญ๋๊ฒ ๋๋ฆผ)๊ฐ ๋งค ํ๋ ์๋ง๋ค ์ฌ๋ฌ ๋ฒ ํธ์ถ๋์ด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ์ต๋๋ค lightHash
๋ ๋งค๋ฒ ๋ค๋ฅด๋ฉฐ material.needsUpdate
๋ฅผ true
ํฉ๋๋ค.
BTW Chrome์ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. (ํ์๋ผ์ธ ๋ฐ ํ๋กํ์ผ๋ฌ).
์ ์๊ฐ์๋ ๊ด์ฐฎ์ง๋ง acquireProgram
๊ฐ ํญ์ ์คํ๋์ด์ผ ํ๋ ์ด์ ๊ฐ ํ์คํ์ง ์์ต๋๋ค. ํ๋ก๊ทธ๋จ ๋งค๊ฐ๋ณ์์ ๊ฐ ์กฐ๋ช
์ ํ์ ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋งค๋ฒ ์
ฐ์ด๋๋ฅผ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์๊ฒ ์ฃ ?
๋๋ ์ดํด๊ฐ ์ ๊ฐ๋ค;
๋ค์์ ํธ์ถ ์คํ(๋ชจ๋ ํ๋ ์์์)๊ณผ ๊ทธ์ ๋ฐ๋ฅธ ๋์ฐํ ๋ฉ๋ชจ๋ฆฌ ๋์์
๋๋ค. ์ด์ ๋ํด ์ ์๊ณ ์๋ค๋ฉด ๋ฌด์์ด ์๋ชป๋์๋์ง ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค. ๋งค ํ๋ ์๋ง๋ค ์๋ก์ด WebGLProgram
์์ฑํ๋ ๊ฒ ๊ฐ์ต๋๋ค...
WebGLProgram์ด ์์ฑ๋๋ ๋์ ์ ์ /์กฐ๊ฐ ์
ฐ์ด๋ ์ฝ๋๋ฅผ ์
๋ฐ์ดํธํ์ฌ ๋ค์ ์ปดํ์ผํ๊ฑฐ๋ ๋ค๋ฅธ ์
ฐ์ด๋๋ก ๊ฐ์ฃผํ๋ replaceLightNums
์ ์์ต๋๋ค. ?
ํธ์ง : ์ด์จ๋ , ์ฌ๋ฃ ์์ค์์ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์์๋๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ์กฐ์ฌํด์ผ ํ ์ด๋๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์์ง๋ง ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฝค ์ข์ ๋ณด์ ๋๋ค.
์ฝ๋๋ฅผ ์์ ํ ์ดํดํ๊ณ ์๋ก์ด ๋ฒ๊ทธ๋ฅผ ๋์ ํ์ง ์์๋์ง ํ์ธํ๊ธฐ ์ํด ์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ฐ์ด๋ ์ฝ๋๊ฐ ํ๋ ์๋ง๋ค ๋ณ๊ฒฝ๋๋ ์ด์ ๋ฅผ ๋จ๊ณ๋ณ๋ก ํ์ธํ ์ ์์ต๋๊น?
๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋งํ ๋งํผ WebGLPrograms
์ ๋ชจ๋ฅด์ง๋ง, ์ฌ๋ฌ๋ถ์ ์ํด ํด๋น ์
ฐ์ด๋๋ฅผ ์บ์ฑํด์ผ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ ๋ก ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
acquireProgram
๋ฅผ ํธ์ถํ ์ง ์ฌ๋ถ๋ฅผ ์๊ธฐ ์ํด initMaterial
๋ ์บ์์์ ์
ฐ์ด๋ "์ฝ๋"๋ฅผ ๊ฐ์ ธ์ค๊ณ (์ค์ ๋ก๋ getProgramCode
์์ ์์ฑ๋ ํด์์ ๊ฐ๊น์ต๋๋ค) ๋น๊ตํฉ๋๋ค. ํ์ฌ ์๋ฃ ํ๋ก๊ทธ๋จ์ "์ฝ๋"๋ก ์ด๋ํฉ๋๋ค.์ด์ ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํฉ๋๋ค(๋ค๋ฅธ ์กฐ๋ช ์ค์ ์ ๊ฐ์ง ๊ฐ ๊ฐ์ฒด๋ ๋ค๋ฅธ ์ฌ์ง๊ณผ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์). ๋ด ์์ ์ ๊ฐ๋ฒผ์ด ํด์๋ก ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ฅผ ์ ์ธํ๊ณ ๋ ๊ณง ๋ค๋ฃจ๊ฒ ๋ ๊ฒ์ ๋๋ค.
๋ผ์ดํธ ์ซ์๊ฐ ๊ฐ๋ณ์ ์ด๋ผ๋ฉด ์ฝ๊ฐ์ ๊ฐ์ ์ด ์์ ์ ์์ผ๋ฏ๋ก ๊ฐ ๋จธํฐ๋ฆฌ์ผ์ ๋์ผํ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค์ผ ๋ฟ์ด์ง๋ง ํด๋น ์ซ์๋ ์
ฐ์ด๋ ์ฝ๋( replaceLightNums
)์ ์ฝ์
๋๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋ฐฉ์๊ณผ ํธํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. (๋ฐ ์ต์ ํ)์
๋๋ค.
์ค๋ช ์ด ์ถฉ๋ถํ ์ดํด๊ฐ ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค
๋ญ๊ฐ...
for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
pointLight = pointLights[ i ];
pointLight.distance *= float( object.mask & pointlight.mask > 0.0 );
...
}
์, glsl์์ ๋นํธ ์ฐ์ฐ์ ์ํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค...
์, ๋นํธ ์ฐ์ฐ์ด GLSL 1.30์์ ์์๋๊ณ ํ์ค WebGL์ด 1.00์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ๐
์๋ ํ์ธ์ @mrdoob ๊ณผ @tiesselune ,
Chrome 56 ๋ฐ Firefox 51์ด ๋ฐฉ๊ธ ์ถ์๋์์ต๋๋ค. ์ฆ, WebGL 2.0์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ต๋๋ค(WebGL2๋ OpenGL ES 3.0 ์ฌ์์ ๋ฐ๋ฆ
๋๋ค). ์ฆ, ์ด์ ๋นํธ ์์
(๋ฐ 3D ํ
์ค์ฒ์ ๊ฐ์ ๊ธฐํ ๋ฉ์ง ๊ธฐ๋ฅ)์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Three๊ฐ WebGL 2.0์ผ๋ก์ ์ ํ์ ์ฒ์ฒํ ์ค๋นํ๊ณ ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ ๋ three84.js ์ฌ๋ณธ์ ๋ช ๊ฐ์ง ํ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ณ WebGL 2.0์ ํ์ฑํํ์ผ๋ฉฐ ์
ฐ์ด๋์์ ์ฝ๊ฐ์ ์์
์ ์ํํ์ต๋๋ค. ํจ๊ณผ๊ฐ ์์๊ณ ์ฑ๊ณตํ์ต๋๋ค!
https://developers.google.com/web/updates/2017/01/nic56
https://developer.mozilla.org/en-US/Firefox/Releases/51
๋จ์ง ๋น์ ์๊ฒ ์๋ฆฌ๊ณ ์ถ์์ต๋๋ค. ๋ง์คํน ์์ด๋์ด์ +1 :-)
์๋ ํ์ธ์ @erichlof์ ๋๋ค ! WebGL2์ ๋ํ ์ข์ ์์์ ๋๋ค. ์ด๋ WebGL2 ๋ ๋๋ฌ๊ฐ ๋ง์คํน ๋ฌธ์ ์ ๋ณด๋ค ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ด์จ๋ , ์ง๊ธ๊น์ง WebGL2๋ฅผ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ์ ์ฌ์ฉ์ด ๋งค์ฐ ์ ํ์ ์ด๋ผ๋ ์ ์ ๊ฐ์ํ ๋ WebGL 1์์ ์๋ํ๋๋ก ํ๋ ค๋ ๋ ธ๋ ฅ์ ๋ฒ๋ฆด ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ WebGL ์ฑ์ ์คํํ ์ ์์ ๋๊น์ง ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ์๋ง๋ WebGL 2๊ฐ ์ค์ ๋ก ๋๊ท๋ชจ๋ก ์ฌ์ฉ๋ ๋๊น์ง ์กฐ๊ธ ๋... ๐ ํ์ง๋ง ํํธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๋ค์ ์๋ !
์ ์ ๋ฐ์ดํธ: ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ์ํ๋ค๊ณ ์๊ฐ๋๋ ์์ ์ ์ํํ์ง๋ง ํ๋กํ์ ์คํํ ๋ JS ํ ๊ฐ๋น์ง ์์ง์ด ์ํํธ์จ์ด ๊ตฌ์ฑ(์คํ ์ค์ธ ํ๋ก๊ทธ๋จ, ์ด๋ฆฐ ํญ, ํ์ฅ ํ๋ก๊ทธ๋จ)๊ณผ ๋ง์ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ข ๋ ๊ฒฝํ์ด ์๋ ์ฌ๋์ด ํ์ฌ ๋ฒ์ ์ threejs์ ๋นํด ๋ด ์ฝ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๊น?
์ด์จ๋ ๋๋ examples/webgl_lights_selective_lighting.html ์์
๋ค์์ ์คํฌ๋ฆฐ์ท์
๋๋ค.
์ฌ๊ธฐ์์ ์์ ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ณผ ์ ์์ด์ผ ํฉ๋๋ค.
๊ทธ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Uncaught TypeError: Cannot read property 'set' of undefined
at init (webgl_lights_selective_lights.html:117)
at webgl_lights_selective_lights.html:67
@looeee : ๋ก์ปฌ ํธ์คํธ์์ npm run build-uglify
๋ฅผ ์คํํด์ผ ํฉ๋๋ค. ๋ณํฉ ๊ฐ๋ฅ์ฑ์ ์ํด ์๋ฐ์ ์ผ๋ก ์ปค๋ฐ์ ๋น๋๋ฅผ ํฌํจํ์ง ์์์ต๋๋ค...
์๋๋ฉด ํด์ผ ํ ๊น์?
ํธ์ง : ๋ค์์ ํ ์คํธ ๋ชฉ์ ์ผ๋ก ๋ค๋ฅธ ์ง์ ์์ ์๋ํ๋ ๋งํฌ์ ๋๋ค. https://rawgit.com/tiesselune/three.js/selective-lights-test/examples/webgl_lights_selective_lights.html
์ด๋ด, ๋์๊ฒ์ +999999. ์ด๊ฒ์ ๊ตฌํ๋์ด์ผ ํฉ๋๋ค(์ ์ด๋ THREE.Layers
)
$$('.comment-body').reduce((acc, el) => {
let mat = el.textContent.match(/\+(\d+)/)
let num = +(mat && mat[1] || 0)
return acc + num
}, 0)
>> 1219997
๐ค
@mrdoob ๊ทธ๋ ์ด ์ค๋ ๋์์ +N์ ๊ณ์ฐํ์ต๋๋ค.
btw, ์ ํ์ ์กฐ๋ช ์ ๊ฒฝ์ฐ +14570
์ด๊ฒ์ ๋ ๋์ ์ถ์ํ์์ ์กฐ๋ช ์ด ์๋ํ๋ ๋ฐฉ์์ ๋ฏธ์ธ ์กฐ์ ํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ํ์์ ์กฐ๋ช ์ด ์ข ๋ ์ฌ์ค์ ์ผ๋ก ๋ณด์ด๋๋ก DOM ์์์ ๋ํด ์กฐ๋ช ์ด ํ ๋ฐฉํฅ์ผ๋ก ์๋ํ๋๋ก ํ๊ณ Sphere์ ๋ํด ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์๋ํ๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
๋จ์ผ ํฌ์ธํธ ์กฐ๋ช ์ฒ๋ผ ๋ณด์ด๋ ํน์ ํจ๊ณผ๋ ํน์ ์์์๋ง ์ ํ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น๋ ๋ ๊ฐ ์ด์์ ์กฐ๋ช ์ ๊ฒฐํฉํ์ฌ ์ป์ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ด์ ์์์ "DOM ์์"์ ์ข์ ๊ทธ๋ฆผ์๋ฅผ ์ป๊ธฐ ์ํด ๋น์ ๊ฐ๋๋ฅผ ๋์ผ ์ ์์ง๋ง ๊ทธ๋ฌ๋ฉด Sphere๊ฐ ๋๋ฌด ๋น๋๊ณ ๋ฐ๊ฒ ๋ณด์ผ ๊ฒ์ ๋๋ค. ๋ด๊ฐ Sphere์ ๋ํด ๋ ์ด๋์ด ์กฐ๋ช ์ ๊ฐ์ง ์ ์๊ณ "DOM ์์"์ ๋ํด ๋ ๋ฐ์ ์กฐ๋ช ์ ๊ฐ์ง ์ ์๋ค๋ฉด ์์ฒญ์์๊ฒ ์ฌ์ ํ ํ๋์ ์กฐ๋ช ๋ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ ํ์ค์ ์ธ ๊ฒ์ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ฌํ ์ข ๋ฅ๋ ์์ ๋ ๋ฒจ API์์ ์ถ์ํ๋์ด ์ฌ ๋ค์์ ๋ ๊ฐ์ Three.js ์กฐ๋ช ์ด ์ค์ ๋ก ์๋ํ ๋ ํ๋์ ์กฐ๋ช ๋ง ์กฐ์๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ ์ ์์ต๋๋ค.
@WestLangley
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ ๋ฐฉ(๋ฐ ํด๋น ์กฐ๋ช )์ ๋ํด ๋ณ๋์ ์ฅ๋ฉด์ ์ค์ ํ์ฌ ๋๋ถ๋ถ์ ์๊ตฌ ์ฌํญ์ ๋ฌ์ฑํ ์ ์์ต๋๊น?
์ด์ ๊ฐ์ ์์ ๋ํ ๋งํฌ๊ฐ ์์ต๋๊น? ๊ฒฐ๊ณผ์ ๋ค๋ฅธ ์๊ธฐ์น ์์ ๋ ๋๋ง ํจ๊ณผ๊ฐ ์์ ์ ์์ต๋๊น?
๊ฒฐ๊ณผ์ ๋ค๋ฅธ ์๊ธฐ์น ์์ ๋ ๋๋ง ํจ๊ณผ๊ฐ ์์ต๋๊น?
์๋ฅผ ๋ค์ด ํฌ๋ช ๊ฐ์ฒด์ ๋ ๋๋ง ์์ - ์ฅ๋ฉด 1์ ํฌ๋ช ๊ฐ์ฒด๋ ์ฅ๋ฉด 2์ ๋ถํฌ๋ช ๊ฐ์ฒด๋ณด๋ค ๋จผ์ ๋ ๋๋ง๋ฉ๋๋ค.
์ด์ ๊ฐ์ ์์ ๋ํ ๋งํฌ๊ฐ ์์ต๋๊น?
์ฌ๊ธฐ, ๋๋ ๋น์ ์ ์ํด ํ๋๋ฅผ ๋ง๋ค์์ต๋๋ค : https://jsfiddle.net/f2Lommf5/524/
์๋ฅผ ๋ค์ด ํฌ๋ช ๊ฐ์ฒด์ ๋ ๋๋ง ์์ - ์ฅ๋ฉด 1์ ํฌ๋ช ๊ฐ์ฒด๋ ์ฅ๋ฉด 2์ ๋ถํฌ๋ช ๊ฐ์ฒด๋ณด๋ค ๋จผ์ ๋ ๋๋ง๋ฉ๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ์๊ฐํ๋ ๊ฒ์ ๋๋ค. ๋งค์ฐ ์ ํ๋ ๊ฒฝ์ฐ์๋ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ง๋ญ๋๋ค. ์ง์ ํ ํด๊ฒฐ์ฑ ์ ๊ธฐ๋ํฉ๋๋ค!
๊ธ์, ๋น์ ์ scene1 trough์์ scene2์ ๋ถํฌ๋ช ํ ๋ฌผ์ฒด๋ฅผ ๋ณผ ์ ์๋ ๊ฒฝ์ฐ์๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์ฃผ์ฅํ ์ ์์ต๋๋ค. ํ์ง๋ง ๊ทธ๋ ๋ค๋ฉด ์กฐ๋ช ๋ ํต๊ณผํด์ผ ํ๊ณ ์ฒ์๋ถํฐ ์ฅ๋ฉด์ ๋ถ๋ฆฌํ ์ด์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ด๋ฐ ์ข ๋ฅ์ ์ฃผ์ฅ์ด ์ค์ ๋ก ์ค๋๋ ฅ์ด ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
@makc ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://discourse.threejs.org/t/how-to-make-shadows-darker-on-transparent-objects/1389
์ ํ์ ์กฐ๋ช ์ด ์ด์ ์ ๋ง ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@trusktr mrdoob์ ๊ทธ๋ฆผ์ ์ฌ์ง์ ๋ณ๊ฒฝํ์ฌ ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ๋ฐฑ ๊ทธ๋ฆผ์ ํ ์ค์ฒ๋ง ํ์๋๋ฉฐ ํ์์ ๋ฐ๋ผ ํฌ๋ช ํ๊ฒ ์์ ํ ์ ์์ต๋๋ค.
PlayCanvas์ ๋ง์คํฌ๋ ์ ํ์ ์กฐ๋ช ์ ์ฌ์ฉํ๊ธฐ ์ ๋ง ์ฌ์ด ๊ฒ ๊ฐ์ต๋๋ค( https://forum.playcanvas.com/t/set-certain-object-to-not-receive-light/785).
์ด๊ฒ์ ๋ณํฉํ ์ ์์ต๋๊น? ๊ทธ๋ฆผ์ ๋ฌธ์ ๋ ์ฝ๋ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ์ด ์๋ Lambert ์ ฐ์ด๋ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. @tiesselune
@ErikBehar ์ค์ ๋ก ์ค๋ ์คํ์ ํ ์ผ์ ์ฐพ๊ณ ์์์ต๋๋ค. ์ฝ๋๋ฅผ ์ต์ threejs๋ก ์ ๋ฐ์ดํธํ๊ณ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ๋ ค๊ณ ํฉ๋๊น? ์ ๋ ์ ๊ฐ ์ด๋ ๊ฒ ํฐ ํ๋ก์ ํธ์ ์ค์ง์ ์ธ ๊ธฐ์ฌ๋ฅผ ํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์ด ์ ๋ง ๊ธฐ์ฉ๋๋ค. (๊ทธ๋ฆฌ๊ณ ์ด ๋ฒ๊ทธ๊ฐ ๋ด ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค)
ํธ์ง: ์ฝ๋์ ์ด ๋ถ๋ถ์ด ๋ง์ด ๋ณ๊ฒฝ๋์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด์ ์ ์ฌ์ฉํ๋ ์ํ๊ฐ WebGLRenderer์์ WebGLLights๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์กฐ๊ธ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
@tiesselune ๋๋ ์ด๊ฒ์ ํ๋ก์ ํธ์ ๊ฐ์ ธ์์ผ ํ์ผ๋ฏ๋ก ๊ณ์ ์งํํ๊ณ ์ฝ๋๋ฅผ v93์ผ๋ก ์ด์ํ์ต๋๋ค. https://github.com/ErikBehar/three.js/tree/selectiveLights ์ฐธ์กฐ
๋น์ ์ด ์ํ๋ค๋ฉด ๋ด๊ฐ PR์ ํ ์ ์์ต๋๊น? @mrdoob
@ErikBehar ๊ธ์, ๋ด๊ฐ ๋ชฉํ๋ก ํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์์ ํ ํ ์๊ฐ์ด ์์์ต๋๋ค. ํํฐ๋ง/ํด์ ๊ธฐ๋ฅ์ WebGLRenderer์์ ์ฎ๊ธฐ๊ณ WebGLLights ์ํ ๊ฐ์ฒด์ ์ถ๊ฐํ์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ ์ด์ด ์์คํ ์ ๋ ๋๋ฌ์ ์ผ๋ถ๊ฐ ์๋๋ผ ์ํ์ ์ผ๋ถ์ธ ๊ฒ์ฒ๋ผ ์ด์ ๊ฑฐ๊ธฐ์ ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@ErikBehar ํ๋ณด ํจ๊ณผ๊ฐ ์ข์ต๋๋ค!
@tiesselune ๋น์ ์ด ์ ์ํ๋๋ก ์ด๋์ ์กฐ์ฌํ๊ฑฐ๋ ๋ด ํฌํฌ์ PR์ ์์ ๋กญ๊ฒ ํธ์ lol = ] ๊ณง PR์ ๊ฒ์ ํ๊ฒ ์ต๋๋ค @mrdoob
์ด์ ๋ํ ์ํ๋ ์ด๋ป์ต๋๊น? @ErikBehar์ r94dev ์ฝ๋๋ฅผ r94 ๋ก ๋ณํฉํ ๋ค์ r97์ ์ฌ๊ธฐ์ ๋ณํฉํ์ต๋๋ค. ๋ช ๊ฐ์ง ๋งค์ฐ ๊ฐ๋จํ ์ถฉ๋(๋ฒ์ ๋ณ๊ฒฝ, ์ ํ์ ์กฐ๋ช ์ ์ํ ๋ช ๊ฐ์ง ๋ณ์, renderers/WebGLRenderer.js์์ ํด์ ์์ฑ)๋ง ์์์ต๋๋ค. @tiesselune PR์ ๋ฃ์ด ๊ฐ๋ ค๊ณ ํ๋์ง ์๋ ค์ฃผ์ค ์ ์๋ค๋ฉด ๊ธฐ๊บผ์ด ์ฎ๊ธฐ๊ณ ํ ์คํธํ๊ณ PR์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
ํธ์งํ๋ค:
์กฐ๊ธ ํ์: ์ด์ ์ ๋ผ์ดํธํด์๋ก ์๋ํ๋ ค๋ฉด ์ฝ๊ฐ์ ์์
์ด ํ์ํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
@VaelynPhi ๋๋ ๊ทธ๋ค์ด @ErikBehar ์ ์ฝ๋๋ฅผ ๊ธฐ๊บผ์ด ์๋ฝํ ์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด PR์ ์ ์ถํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ๋ค
์ด ๋ ์๋ค์๊ฒ ๊ณต์ ๋จ์ด๋จ๋ ค์ ์ฃ์กํฉ๋๋ค = / ... @VaelynPhi ํฌํฌ/๋ธ๋์น๋ฅผ ๊ฒ์ํ ์ ์์ต๋๊น?
๊ฑฑ์ ๋ง; ๋ฐ์๊ฑด ์ดํดํฉ๋๋ค. ์์, ๋๋ ๋น์ ์ด ์ผํ๊ณ ์๋ ์ง์ ์กฐ์ฐจ ์ป์ ์ ์์์ต๋๋ค. @ErikBehar; ๋๋ ์ํ๋ฅผ ์ ์ ํ ์์น๋ก ์ด๋ํ๊ณ ๋ฒ๊ทธ๋ฅผ ์์ ํ ์ ์๋๋ก ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ถ์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. v94์์๋ ์๋ํ๋ ํฌํธ ์ํ์ ๋๋ฌํ์ง ๋ชปํ์ต๋๋ค. ์๋ง๋ @makc๊ฐ ์ ์ํ ๋๋ก ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ๊ทธ๊ฒ์ ์ ๋ฆฌํ๊ณ PR์
๋ค์์ ๊ธฐ๋ฐ์ผ๋ก PR์ ์ถ๊ฐํ์ต๋๋ค.
https://github.com/ErikBehar/three.js/commit/ac0499b70b82bc7bb780100a8372fcdf318d1424#diff -5e43a0b5002eb2c419def3baf67d4e67
์์ฑ์ @ErikBehar
๋๊ตฌ๋ ์ง ๊ฒํ ์ ์๋ฅผ ๋ค์ด ์ค ์ ์์ต๋๊น?
์๋ค์, ์ด๊ฑฐ ์ํ๊ฐ ์ด๋? @tiesselune @ErikBehar ๋ญ๊ฐ ๋์๋๋ฆด๊น์? 4๋ ๋ง์ ๋๋์ด ๊ตฌํํ๋ฉด ์ข์ํ ๋ฐ ๐๐ฏ
@flyrell ์๋ง๋ #15223์์ ๋๋ ๊ฒ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ๊ธฐ, ๋๋ ๋น์ ์ ์ํด ํ๋๋ฅผ ๋ง๋ค์์ต๋๋ค : https://jsfiddle.net/f2Lommf5/524/