9๊ฐ ๊ทธ๋ฆผ์
three.js๋ ๋์ ์ผ๋ก ๊ทธ๋ฆผ์๋ฅผ ๋ ๋๋ง ํ ์ ์๋ค.
๋ด๋ถ์ ์ผ๋ก ํ ์ค์ณ ๋งตํ์ ํตํด ๊ทธ๋ฆผ์๋ฅผ ์ํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ์ด ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด ๊ทธ๋ฆผ์๋ฅผ ์๊ฐํ ํด๋ณด์.
๊ทธ๋ฆผ์๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํ ์ธ ๊ฐ์ง ๊ฐ์ฒด ์ค์
1. Renderer ๊ฐ์ฒด
renderer.shadowMap.enabled = true
2. ๊ด์
๊ทธ๋ฆผ์๋ฅผ ์ ๊ณตํ๋ ๊ด์
- DirectionalLight
- PointLight
- SpotLight
์ด ๊ด์๋ค์ ๋ชจ๋ shadow.camera
์์ฑ์ ๊ฐ๋๋ค.
์ด ์์ฑ์ด ๊ทธ๋ฆผ์์ ๋ํ ํ ์ค์ณ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๊ทธ๋ฆผ์๋ฅผ ์ค ๊ฒ์ธ์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ๋ค์์ฒ๋ผ ์ค์ ํ ์ ์๋ค.
light.castShadow = true; // ํ์ฑํ
3. ๋ชจ๋ธ
๊ทธ๋ฆผ์๋ฅผ ํํํ๋ ๋ชจ๋ธ์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
mesh.receiveShadow = true; // ๊ทธ๋ฆผ์๋ฅผ ๋ฐ์์ ํํํ๋ ๋ชจ๋ธ
mesh.castShadow = true; // ๊ทธ๋ฆผ์๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ฃผ๋ ๋ชจ๋ธ
DirectionalLight์ ๊ทธ๋ฆผ์
shadow.camera ์ค์
DirectionalLight์ ๊ทธ๋ฆผ์๋ฅผ ์ํ ์นด๋ฉ๋ผ๋ OrthographicCamera
⇒ ์นด๋ฉ๋ผ์ ์ ๋์ฒด๋ฅผ ๋ฒ์ด๋๋ ๊ทธ๋ฆผ์๊ฐ ์งค๋ฆฌ๊ฒ ๋๋ค.
๊ทธ๋ฆผ์๊ฐ ์ ๋์ฒด๋ฅผ ๋ฒ์ด๋ ์งค๋ฆฌ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์นด๋ฉ๋ผ์ ์ ๋์ฒด๋ฅผ ๊ทธ๋ฆผ์๊ฐ ์ง๋๋ ์์น๋ณด๋ค ํฌ๊ฒ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค.
light.shadow.camera.top = light.shadow.camera.right = 6;
light.shadow.camera.bottom = light.shadow.camera.left = -6;
๊ธฐ๋ณธ์ผ๋ก ์ค์ ํ์ ๋ ์ ๋์ฒด๋ฅผ ๋ฒ์ด๋จ
๊ทธ๋ฆผ์์ ํ์ง ํฅ์์ํค๊ธฐ
๊ทธ๋ฆผ์๋ ํ ์ค์ณ ๋งตํ ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด ํํ๋๋ค.
ํ ์ค์ณ ๋งตํ ์ด๋ฏธ์ง์ ๋ํดํธ ํฌ๊ธฐ๋ 512 * 512์ธ๋ฐ, ์ด ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ํ ์๋ก ํ์ง์ด ํฅ์๋๋ค.
๊ทธ๋ฆผ์์ ๊ฒฝ๊ณ ๋ธ๋ฌ๋ง ์ฒ๋ฆฌํ๊ธฐ
shadow.radius: ๊ฐ์ด ํด์๋ก ๋ธ๋ฌ๋ง ํจ๊ณผ๊ฐ ๊ฐํด์ง๋ค. (๊ธฐ๋ณธ๊ฐ: 1)
light.shadow.radius = 30;
PointLight์ ๊ทธ๋ฆผ์
์ฌ๋ฐฉ์ผ๋ก ๋น์ ๋์ง๋ ๊ด์์ด๋ฏ๋ก ๊ทธ์ ๋ง๊ฒ ๊ทธ๋ฆผ์๊ฐ ํผ์ง๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
SpotLight์ ๊ทธ๋ฆผ์
'๐ฟ ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํด๋ฆฐ์ฝ๋] 8์ฅ ๊ฒฝ๊ณ with Typescript (0) | 2023.07.15 |
---|---|
[ํด๋ฆฐ์ฝ๋] 7์ฅ ์ค๋ฅ ์ฒ๋ฆฌ (0) | 2023.07.12 |
[ํด๋ฆฐ์ฝ๋] 6์ฅ ๊ฐ์ฒด์ ์๋ฃ๊ตฌ์กฐ (0) | 2023.07.02 |
[three.js] ์นด๋ฉ๋ผ - PerspectiveCamera vs OrthographicCamera (0) | 2023.07.01 |
[three.js] ์ฌ๋ฌ๊ฐ์ง ๊ด์์ ๋ค๋ค๋ณด์ (0) | 2023.06.23 |