셀 셰이딩에 대한 몇 가지 광범위한 접근 방식이 있습니다.
- 뒤집힌 법선이있는 모형의 복제 및 확대 (나를위한 옵션이 아님)
- Sobel 필터 / 프래그먼트 셰이더가 에지 감지에 접근
- 에지 감지에 스텐실 버퍼 접근
- 면 및 모서리 법선을 계산하는 형상 (또는 정점) 셰이더 접근 방식
지오메트리 중심 접근 방식이 조명 및 선 두께를 최대한 제어 할 수 있다고 가정하면 정확합니다. 언덕의 실루엣 선이 점차 평야로 합쳐지는 지형을 위해?
지형 표면에 픽셀 조명이 필요하지 않은 경우 어떻게합니까? (그리고 아마도 셀 기반 정점 또는 텍스처 맵 기반 조명 / 그림자를 사용할 계획이 아닐 것입니다.) 그런 다음 지오메트리 유형 접근 방식을 고수하거나 화면 공간 / 조각 접근 방식을 사용하는 것이 좋습니다. 일을 더 단순하게 유지하려면? 그렇다면, 어떻게 언덕의 "잉크"를 얻을 것 내 것이 아니라, 메쉬 실루엣 만 그 윤곽 내부 아니오 "잉크"세부 사항 전체 메쉬 (의 윤곽? (AKA 암시 윤곽 , 주름 ).
마지막으로 지오메트리 쉐이더를 사용하여 뒤집힌 법선 접근 방식을 저렴하게 에뮬레이트 할 수 있습니까? 이것에 대한 나의 관심은 모든 정점을 확실히 복제하고 이에 따라 크기를 조정할 수 있다는 것입니다.
내가 원하는 것-실루엣 내부에 침입 선이있는 다양한 선 두께 ...
내가 원하지 않는 것 ...
편집 : 추가 연구 결과는 다음과 같습니다.
거리 기반 LoD를 고려하더라도 지형에 엄청난 정점 수가 있기 때문에 플립 노멀이나 기하학 쉐이더 기반 접근 방식 (절두체 컬링 포함)은 모두 중복 및 스케일링과 관련된 계산상의 복잡성으로 인해 합리적인 옵션이 아닙니다. 정점을 업로드했습니다.
지형 표면에 단색 톤 쉐이딩 형태의 픽셀 당 조명이 필요하지 않다는 점을 고려할 때, 얼굴 노멀 기반 접근법을 고려하는 것이 현명하지 않습니다. 당연히 계산하기에 상당히 비쌉니다. 그러나 이들이 최상의 제어 수준을 제공하는 것은 사실입니다. 예를 들어 "예술적"획을 사용하여 가장자리를 음영 처리하는 기능 : 아름답지만 다시 말해서 방대한 복잡한 게임 환경에서는 실제로 실행되지 않습니다.
스텐실 버퍼는 쉐이더에서 모든 작업을 선호하기 때문에 오히려 피하고 싶습니다. (빨간색 윤곽선이 표시된 위의 예는 스텐실 버퍼-구식 학교로 수행되었습니다.)
조각 쉐이더 이미지 공간 접근 방식이 남습니다. 계산 복잡도가 정점 수가 아닌 조각 수로 줄어 듭니다 (제 경우에는 지오메트리 쉐이더에서 해야하는 것보다 10-100 배 적은 작업입니다). 불연속 필터 (예 : Sobel 연산자)를 적용 할 수있는 g 버퍼 (일반 버퍼 및 선택적으로 깊이 버퍼로 구성)를 생성하려면 둘 이상의 렌더 패스가 필요합니다. 깊이 불연속은 암시적인 윤곽과 주름을 가능하게합니다. 이 접근 방식의 유일한 퀴즈는 잉크로 처리 된 가장자리 너비를 미세하게 제어 할 수 없다는 것입니다. 단편 쉐이더의 올바른 알고리즘을 사용하면 이것이 가능할 것이라고 확신합니다.
이제 질문이 더 구체적이 되었습니다. 조각 셰이더에서 특히 바깥 쪽 실루엣에서 가변 가장자리 너비를 얻는 방법은 무엇입니까?