꼭짓점 색은 무엇입니까?


31

내 질문은 제목으로 쓰여진 것입니다. 이 용어 "정점 색"은 많이 나타납니다. 이것을 이해하는데 어려움을 겪고 있습니다.

예를 들면 다음과 같습니다.

3D 공간에서 꼭짓점이 단순하지 않습니까? 그렇다면 어떻게 점에 색을 입힐 수 있습니까? 아니면이 "색상"이 다른 의미입니까?

언리얼 엔진의 머티리얼 에디터에 "Vertex Color"노드가 있습니다.

누군가 내 질문에 빛을 비출 수 있습니까? "정점 색상이란 무엇입니까?"라고 Google에 올렸을 때 유용한 정보를 찾을 수 없었지만 너무 기술적 인 문서는 없었습니다.


2
지오메트리에서 꼭짓점은 공간의 한 지점 일뿐입니다. 그러나 3D 렌더링의 경우 멋진 모양을 원합니다. 색상, 질감 좌표 또는 골격 가중치와 같이 각 정점에 더 많은 정보를 첨부하여 메시를 더 쉽게 애니메이션으로 만들거나 조명에 사용할 일반적인 방향을 지정할 수 있습니다. 계산.
user253751

3
혼동의 큰 부분은 3D / 그래픽에서 "정점"과 "위치"라는 용어가 빈번하게 혼동되기 때문이라고 생각합니다. 수학적으로 “3D 공간에서 꼭짓점이 아닌가?”라는 말 은 정확하지만 게임 엔진 및 그래픽 영역에서는 안됩니다 . 위치는 3D 공간에서 간단한 점입니다. (메쉬) 정점은 거의 항상 위치를 갖는 데이터 조각이지만, 법선, 탄젠트, 텍스처 좌표, 색상 및 / 또는 기타 여러 데이터 조각을 가질 수도 있습니다 . 메쉬 정점은 실제로 정점 렌더링 단계에서 처리되는 데이터 덩어리입니다.
Slipp D. Thompson

답변:


29

정점 색상은 완전히 텍스처링 된 3D 메시가있을 때 관련이 없습니다. 그러나 질감이 없지만 컬러 메쉬가 있으면 흥미로워집니다. 이 경우 모든 정점에 색상을 지정합니다. 그런 다음 셰이더는 세 정점의 색상을 보간하여 다각형의 각 픽셀에 색상을 지정합니다.

정점 색상은 때때로 텍스처와 결합하여 흥미로울 수도 있습니다. Gouraud Shading 과 같은 음영 처리 알고리즘을 사용하려면 각 정점의 조명 강도를 계산하고 정점에 밝은 색상을 정점 색상으로 할당하고 질감을 렌더링 할 때 각 질감 픽셀의 색상 값에 곱하십시오 보간 된 색 이를 통해 픽셀 셰이더 대신 정점 셰이더에서 광원을 계산할 수 있습니다. 정점 셰이더는 일반적으로 훨씬 덜 자주 실행되기 때문에 일반적으로 훨씬 빠릅니다.


2
btw, 정점 색상은 동적 번개 / 그림자가없는 일부 오래된 게임에서 사용되었습니다. 예를 들어 2004 년의 Richard Burns Rally는 정점 색상을 사용하여 다양한 모양의 텍스처를 만들고 그림자를 적용합니다.
martin

증인은 정점 색상과 라이트 맵을 많이 사용하지만 텍스처는 많지 않은 최근 게임입니다.
user253751

@Philipp "정점 셰이더는 일반적으로 훨씬 덜 자주 실행되기 때문에"왜? 버텍스 쉐이더가 렌더링 파이프 라인의 일부가 아니므로 각 프레임이 실행됩니까? 왜 그렇게 덜 자주? 픽셀 쉐이더에있는 것처럼 정점 "컬러"를 매 프레임마다 계산하지 않아도됩니까?
Nikos

1
@Nikos 정점 셰이더는 정점 당 한 번 호출됩니다. 그런 다음 픽셀 셰이더는 픽셀 당 한 번 호출됩니다. 3 개의 정점이있는 다각형은 일반적으로 화면에 3 개 이상의 픽셀을 생성합니다 (게임에서 3 픽셀 미만을 포괄하는 많은 다각형을 계산하는 경우 컬링 및 LOD와 관련하여 수행 할 수있는 작업을 조사 할 수 있습니다).
필립

25

이론적으로 정점 색상을 사용하면 텍스처를 신경 쓸 필요없이 모델에 색상을 지정할 수 있습니다. 이것은 CAD에서 일반적입니다.

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

실제로는 데이터를 꼭짓점으로 푸시하는 데 사용할 수있는 슬롯이 하나 더 있습니다. 그런 다음 꼭짓점 셰이더에서 미친 일을 합니다.

"3D 공간에서 꼭짓점이 단순하지 않습니까?"

3D로 처음 시작할 때 생각했던 것입니다. 나는 내가 틀렸다는 것을 빨리 배웠다 .

정점은 화면에 페인트하려는 삼각형의 모서리를 구성하는 데이터 얼룩으로 생각할 수 있습니다 ( "코너"부분이나 "삼각형", "페인트"또는 "화면"부분은 모두 참이 아닙니다) ). 위치는 버텍스 (Vertex)라고 부르는 데이터 블롭의 한 가지 선택 사항입니다.

정점에 추가 데이터를 첨부하면 할 수있는 일이 많이 있습니다. 가장 유명한 예는 UV 좌표를 추가하여 해당 삼각형에 텍스처를 그릴 수 있다는 것입니다. 점이 있으면 텍스처에 삼각형의 어느 부분을 그릴 지 결정할 수 없습니다. 텍스처 좌표도 필요합니다.

해당 얼룩에 포함 된 다른 표준 예제는 법선과 접선입니다. 중요한 것은 위치를 포함하여 모든 것이 선택 사항이라는 것입니다. 정점 색상은 화면에 예쁜 그림을 만들기 위해 사용하거나 남용 할 수있는 이러한 선택적 입력 중 하나입니다.


2
".. 삼각형의 가장자리를 구성하는 데이터 얼룩"이라고하더라도 반드시 그런 것은 아닙니다. 꼭짓점은 점으로 잘 표현 될 수 있습니다.
크롬 스터, 모니카

3
버텍스 컬러를 사용하여 얻을 수있는 셰이더 효과의 좋은 예를 들어 작년부터 "Animating With Math"에서 Natalie Burke의 GDC 토크를 확인하는 것이 좋습니다 (동영상은 회원 전용이지만 슬라이드는 무료입니다 ) . 그녀는 Destiny의 기어, 캐릭터 머리카락 및 천의 애니메이션 수와 버텍스 컬러 채널로 모양 및 제어 된 버텍스 쉐이더를 사용하여 적과 환경의 일부까지 달성 한 것을 보여줍니다.
DMGregory

5
나는 그것들이 정점 색상이 아니라, 더 쉬운 인식을 위해 색상으로 표시된 정점 속성 이라고 주장 합니다.
크롬 스터, 모니카

FortNite대한이 이야기 에서 정점 셰이더를 비슷하게 창의적으로 사용 하지만, 정확하게 기억한다면 대부분 정점의 UV 채널을 컬러 채널 대신 사용했다고 생각합니다.
DMGregory

3
지오메트리 / 수학 기반의 관점에서 볼 때 정점은 공간의 한 지점 일뿐입니다. '정점 색상'은 GPU에서 사용하는 정점의 '아이디어'에 의해 정점에 적용되는 속성입니다. 색이 있거나없는 원과 같습니다. 원의 기하학적 / 수학적 '아이디어'에는 색상이 없지만 원의 렌더링 소프트웨어 '아이디어'는 색상을 원에 연결합니다. 따라서 @Kromster의 주장은 기술적으로 더 정확합니다.
Pharap

8

꼭짓점은 색상을 가질 수 있으며 일반적인 것과 같은 속성입니다.

3D 환경에서 정점의 색상 정보에 따라 삼각형이 색칠됩니다. 꼭짓점 A에 가장 가까운 조각은 그 색을 얻고, 꼭짓점 B에 가장 가까운 조각은 B의 색을 얻으며, 색은 2 사이에서 보간됩니다.

버텍스 당 조명과 같은 방식으로 작동합니다

텍스처를 사용하지 않고 모델에 색상을 추가하는 쉬운 방법입니다.


다른 유사 정점 속성의 예를 들면 +1
AC

정점 색상과 법선의 문제점은 정점이 메쉬의 일부 (곡선 표면의 근사)라고 가정한다는 것입니다. 예리한 가장자리 또는 다른 색상의면 (예 : 큐브)을 원할 경우 각면마다 별도의 꼭지점이 필요하므로 메모리 사용량이 크게 증가하고 렌더링 속도가 느려집니다.
amI

@aml glsl에서 플랫 "연산자"를 사용하여 음영을 평평하게 출력 할 수 있습니다. 그것은 완전하게 동일하지는 않지만 작동합니다.
Bálint

다른 보간 된 속성 : 텍스처 좌표와 z- 버퍼! 우리는 스크린 (또는 버퍼)의 삼각형을 그릴 때 그 보간되고, 삼각형의 3 개 개의 정점의 각각에 대한 일부 데이터를 계산하는 정점 셰이더 있고, 픽셀 셰이더 각 그린 픽셀의 보간 된 값으로 호출
사용자 1952009 년

@aml 물론 x2는 병목 현상이 없습니다. 그리고 지오메트리 쉐이더를 위해 만들어졌습니다. (예 : 깊이 텍스처를 삼각형으로 변환 )
user1952009

2

여기에 확실한 대답이 있습니다. 정점 색상이 사용되는 일반적인 방법을 하나 더 알고 싶습니다.

단일 배치 / 드로우 호출 내에서 다양한 객체 색상 (또는 다른 속성).

파티클 시스템, 텍스트 및 배치 (일반적으로 아틀라스 처리 된) 스프라이트 렌더링에 사용됩니다.

임의의 시작 색상으로 파티클을 생성하거나 파티클 수명 동안 0 알파로 페이드되는 파티클 이미 터가 있다고 상상해보십시오. 이 색상 데이터를 전송하기 위해 셰이더 유니폼을 사용하려면 각각 다른 색상의 파티클을 자체 드로우 콜로 그려서 파티클 시스템을 훨씬 더 비싸게 만들어야합니다. 대신, 이러한 색상을 입자의 정점 데이터로 구워 한 번의 호출로 전체 배치를 함께 렌더링 할 수 있습니다.

Unity는이 기법을 사용하여 파티클 색상 변형과 배치로 함께 렌더링 된 TextMesh 또는 Sprite의 개별 문자를 채색합니다.

지오메트리 인스 턴싱과 비슷한 것을 할 수 있다고 생각하지만 두 가지 성능을 어떻게 비교하는지 모르겠습니다. 오늘날 버텍스 컬러를 통한 이러한 유형의 인스턴스 조정은 오늘날의 PC에 대한 모범 사례가 아닌 일부 모바일 장치와 같은 OpenGL 3.1 / DX9 이전 하드웨어를 지원하기 위해 더 오래 지속될 가능성이 있습니다. 일괄 처리 및 인스 턴싱으로 더 많은 성능 조정을 수행 한 사람들의 의견을 환영합니다.이 기술 이이 목적을 위해 정점 색상을 대체했는지 여부를 정리하는 데 도움이됩니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.