Three.js에서 GLSL을 사용하는 방법은 주로 THREE.ShaderMaterial을 통해 이루어지지만, 그 외에도 여러 다른 방식으로 GLSL 셰이더를 활용할 수 있습니다. Three.js는 WebGL을 기반으로 하므로, 다양한 형태로 GLSL을 사용해 그래픽 효과를 제어할 수 있습니다. ShaderMaterial 외에 GLSL을 사용할 수 있는 방법을 살펴보면 다음과 같습니다:
const material = new THREE.RawShaderMaterial({
vertexShader: `
attribute vec3 position;
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
void main() {
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
`,
fragmentShader: `
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // Red color
}
`
});
사용 목적: 커스텀 셰이더의 모든 부분을 제어하고 싶을 때 사용합니다. 이를 통해 Three.js의 기본 셰이더 코드를 우회하고, 원시 GLSL 코드를 사용하여 성능 최적화나 특정 효과를 구현할 수 있습니다.
const material = new THREE.MeshStandardMaterial({
color: 0x00ff00
});
material.onBeforeCompile = (shader) => {
shader.fragmentShader = shader.fragmentShader.replace(
'#include <dithering_fragment>',
'gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);'
);
};
사용 목적: 기본 제공되는 Material을 사용하면서, 셰이더의 특정 부분만 수정하고 싶을 때 유용합니다.
const gl = renderer.getContext();
const program = gl.createProgram();
// WebGL API를 통해 직접 셰이더 프로그램을 작성하고 사용할 수 있음
사용 목적: Three.js에서 제공하는 셰이더 시스템을 완전히 우회하고, WebGL을 통해 완전한 제어권을 가지려는 경우에 적합합니다. 그러나 대부분의 경우에는 ShaderMaterial이나 RawShaderMaterial로 충분합니다.
const colorNode = new THREE.ColorNode(0x00ff00);
const material = new THREE.NodeMaterial(colorNode);
사용 목적: GLSL 코드를 직접 작성하지 않고도, 셰이더 효과를 그래프 형태로 구성하고 싶을 때 사용됩니다.
const composer = new THREE.EffectComposer(renderer);
const customShader = {
uniforms: {
tDiffuse: { value: null }
},
vertexShader: /* GLSL 코드 */,
fragmentShader: /* GLSL 코드 */
};
const shaderPass = new THREE.ShaderPass(customShader);
composer.addPass(shaderPass);
사용 목적: 장면의 후처리 효과(예: 블러, 색상 왜곡 등)를 GLSL을 통해 추가하고 싶을 때 사용됩니다.
색상 공간과 색 모델, Color Space, Color Model (3) | 2024.12.25 |
---|---|
법선, 법선 벡터, Normal, Normal Vector 이란 (1) | 2024.09.21 |
shader 프로그래밍 (6) | 2024.09.18 |
.gitignore, .gitattributes (1) | 2024.09.16 |
경도, 위도, Longitude, Latitude (0) | 2024.09.12 |