2012-09-07 1 views
1

저는 3D 개발에 비교적 익숙하며 현재 Actionscript, Stage3D 및 AGAL을 사용하여 배우고 있습니다. 평면 음영 처리되는 간단한 절차 메쉬로 장면을 만들려고합니다. 그러나 조명을 위해 셰이더에 표면 법선을 전달하는 방법을 정확히 설명해야합니다. 각 삼각형에 하나의 서페이스 법선을 사용하고 각각을 음영 처리하여 평면화하는 것이 좋습니다. 각 정점에 대한 법선을 사용하여 더 나은 조명을 얻는 것이 쉽다는 것을 알고 있습니다. 그러나 이것이 제가 본 후의 모습입니다. 쉐이더는 일반적으로 모든 정점이 아닌 모든 삼각형을 처리하기 때문에Stage3D/AGAL을 사용한 간단한 평면 음영

, 그것은 나를 그냥 삼각형 당 하나의 정상을 통과보다는 정점 당 하나 할 수 있습니까? 내 생각은 여기서 완전히 벗어난거야? 누구나 간단하고 평평한 쉐이딩을하는 예제를 가지고 있다면 크게 고맙겠습니다. 내가 구글을 통해 그것을 발견하고 더 허용 대답이없는 볼 수 있기 때문에

+0

음영 처리는 픽셀 별 법선에 따라 다르며, 그 자체는 사용중인 보간법에 따라 다릅니다. 나는 당신이 사용하고있는 기술을 모른다. 나는 단지 당신에게 힌트를 줄 수있다. 원하는 것은 단순히 각 픽셀에 대한 삼각형의 꼭지점의 평균을 취하는 보간입니다. – Yno

+0

좋습니다. 나는이 질문이 지금 나를 위해 더 명확하다고 생각한다 : 이것이 프래그먼트 쉐이더가 법선을 다루는 방식이라는 점을 감안할 때 평면 쉐이딩 (한 면당 컬러의 그늘, 그라데이션 없음)을 원한다면 내 꼭지점 중 어느 것도 삼각형 사이에 공유되지 않습니까? 그것이 정점을 공유하고 있음을 나타냅니다. 아무도 공유하지 않도록 꼭지점을 복제하면 모든 삼각형이 각 꼭지점에서 동일한 법선을 가지며 픽셀에서 발생하는 모든 보간을 제거 할 수 있습니다. –

+0

꼭지점을 복사하는 것이 효과적 일 수 있지만 적절한 보간법을 사용하는 것이 좋습니다. – Yno

답변

2

나는 여기에 오래된 질문을 파고 있어요. 이 쉐이더 엔진에 대한

Stage3D는 해당 "GL_FLAT"옵션이 없습니다. 이것이 의미하는 바는 프래그먼트 쉐이더 프로그램이 세 개의 각 꼭지점의 출력에서 ​​항상 "변화하는"값 또는 보간 된 값을받습니다 (꼭지점 프로그램을 통해).

삼각형의 정상적인 얼굴에 각 꼭지점을 각각 삼각형 세 가지 독특한 정점을 만들고 에 대한 일반 설정 : 당신이 플랫 쉐이딩을 원하는 경우에, 당신은 기본적으로 하나 개의 옵션이 있습니다. 이렇게하면 각 꼭지점 은 동일한 조명 및 결과를 동일한 꼭지점 색으로 계산합니다. 프래그먼트 셰이더가 보간 될 때, 세 개의 이 동일한 값을 보간 할 것이므로 평평한 음영이됩니다.

이 꽤 절름발이입니다. 삼각형 당 고유 꼭지점이 필요하다는 것은 삼각형 사이에서 꼭지점을 공유 할 수 없다는 것을 의미합니다. VertexBuffer3D 업로드 중에 지연이 증가 할뿐만 아니라 전체 프레임 속도가 낮아 지므로 꼭지점 수가 증가합니다. 그러나 어디서나 더 나은 솔루션을 보지 못했습니다.