램프 음영 또는 조명이란 무엇입니까?


14

램프 쉐이딩 또는 조명이란 무엇이며 어떻게 작동합니까? 툰 쉐이딩과 다른가요, 아니면 같은 개념입니까? 램프 쉐이딩과 블린 퐁 또는 램버트의 스페 큘러는 어떻게 다르게 계산됩니까?

답변:


21

전통적인 Blinn / Phong 쉐이딩에서는 표면의 법선과 빛의 방향 사이의 각도의 코사인을 측정하여 픽셀의 확산 항을 계산합니다. 따라서이 경우 간단한 셰이더는 다음과 같습니다.

float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
    float3 lightDir = lightPos - pos;
    lightDir.normalize();

    return max(0.0, Dot(lightDir, normal));
}

램프 쉐이딩에서 아이디어는 1D 조회 텍스처로 확산 계수를 변조하는 것입니다. 이 텍스처에 넣은 내용에 따라 다른 효과를 생성 할 수 있습니다. 따라서 확산 계수를 계산하는 셰이더 함수는 다음과 같습니다.

texture1D rampTex;
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
    float3 lightDir = lightPos - pos;
    lightDir.normalize();

    // Map value from [-1, 1] to [0, 1]
    float rampCoord = Dot(lightDir, normal) * 0.5 + 0.5;
    return tex1D(rampTex, rampCoord);
}

예를 들어, 셀 셰이더를 구현하려면 단계 함수를 에뮬레이트하는 램프 텍스처를 생성해야합니다.

여기에 이미지 설명을 입력하십시오

동일한 아이디어를 사용하여 정반사 조명에 다른 효과를 생성 할 수도 있습니다. "램프"쉐이딩은 실제로는 텍스처에 의해 쉐이딩 값을 조절하는 아이디어만을 의미합니다.

편집하다 : Team Fortress 2는 렌더링에 램프 쉐이더를 사용합니다. 이 백서에서 세부 사항을 확인할 수 있습니다.

http://www.valvesoftware.com/publications/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf

"확산 왜곡 기능"이라는 제목의 하위 섹션에서 섹션 5를보십시오.


1
좋은 대답입니다! 확산 조명과 램프 조명의 차이에 대한 설명은 내가 찾던 것입니다. 또한 램프 쉐이딩의 개념이 무엇인지에 대한 의견에 감사드립니다. 추가로이 개념을 사용하는 게임에서 예제 이미지를 게시 할 수 있습니까?
StampyTurtle

@Stampyturtle 예를 들어 답변을 업데이트했습니다.
Mokosha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.