2013-08-12 3 views
1

문제가 발생하기 전에 더 많은 컨텍스트가 필요합니다. 나는 텍스트를 렌더링하기 위해 FontRenderer 클래스를 작성했다. 작동 방법은 다음과 같습니다. 런타임 중에 문자열을 표시하려면 ABC, GameObject이 생성되고 각각 3 개의 쿼드가 있고 각각은 각 글리프의 UV 좌표가 아트라스 텍스처에서 조회됩니다.텍스처의 글리프의 전경색 변경

충분히 간단합니다. 동일한 재질이 사용되면 단일 그리기 호출이 허용됩니다.

그러나 특정 글리프의 전경을 변경하는 기능을 추가하는 경우 어떻게이 문제에 접근 할 수 있습니까? 난 \c 다음과 같은 탈출 시퀀스를 계획하고있다 : \c[A-F]{2}[A-F]{2}[A-F]{2}. 내가 ABC 빨간색과 흰색 문자열의 나머지 부분에 색상을한다면 예를 들어

는, 나는 FontRenderer에 다음 문자열을 전달합니다 : "\cFF0000A\cFFFFFFBC".

내 생각은 아틀라스 텍스처를 사용하는 것이 었습니다. 이 배경의 아이디어는 새로운 전경색을 사용하여 새로운 글리프를 플롯하고 아틀라스 텍스처 내에 스프라이트를 할당하는 것입니다. 그러나 이것은 상당히 복잡 할 수 있습니다.

내 생각으로는 버텍스/프래그먼트 쉐이더를 사용하는 것이지만 이것이 가능한지 확실하지 않습니다. 또 다른 문제는 드로잉 호출 수가 증가하는 모든 렌더링 된 문자열에 대해 가능한 경우 내 셰이더를 사용하는 재질의 인스턴스가 필요하다는 것입니다.

다른 방법으로 수행 할 수 있습니까?

답변

1

아마도 가장 간단한 절차 방식은 확산 쉐이더의 mainColor를 변경하여 아틀라스 재질을 색칠하는 것입니다. 여기에서주의해야 할 점은 인스턴스화 된 재질 당 1 색상 만 사용할 수 있다는 것입니다. 즉, ABC 문자열의 A, B 및 C가 각각 다른 색상이되게하려면 3 개의 그리기 호출이 필요합니다. 하나 대신에.

또 다른 옵션은 vertex colors과 쉐이더를 사용하여 절차에 따라 색상을 지정하는 것입니다. 따라서 사각형을 생성 할 때 각 꼭지점의 색상을 지정된 색상으로 설정해야합니다.

정점 색상에 따라 소재 색상을 쉐이더를 사용하여 주위 Unity3D 특정 빠른 자원의

커플 :

마지막으로, 위의 중 하나가한다면하지 그러고 나면 구입하거나 시도한 후 배우기 위해 글꼴 렌더링을위한 플러그인 마켓 플레이스를 살펴 보는 것이 좋습니다.

행운을 빈다.

+0

두 번째 옵션을 사용하면 특정 글립 색을 설정하기 위해 매개 변수를 수정해야하므로이 인스턴스의 재질 인스턴스를 해당 문자열과 연결해야합니다. 내 생각 엔 4 개의 정점 그룹을 전달해야한다는 것입니다. 같은 재질의 인스턴스가 여러 개 있으면 그리기 호출이 늘어나지 않겠습니까? 패키지를 찾는 데 너무 많은 것을 보지 못했지만 불행한 점은 내가 찾은 패키지가 폐쇄 된 소스라는 것입니다. 또한 'float4' 데이터 유형을 사용하여 알파와 함께 색상을 지정하지 않겠습니까? 나는 256 비트가 어떻게 사용되고 있는지 보지 못했다. – mrkotfw

+0

예 내 256 비트 색상 제한이 틀렸습니다 (이전 정보!), 제거했습니다. 버텍스의 색을 기반으로 메쉬를 색칠 할 셰이더를 구현할 링크를 몇 개 추가했습니다. 최종 결과는 여전히 1 드로우 콜이어야합니다. –

+0

정점 색상을 지정하면 티켓이되었습니다! 유의해야 할 중요한 점은'BindChannels'을 사용하여 정점 데이터를 매핑하는 방법을 지정할 수있게하는 것입니다. – mrkotfw