UDN
Search public documentation:
DecalsTechnicalGuideKR
English Translation
日本語訳
中国翻译
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
日本語訳
中国翻译
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
데칼 시스템 테크니컬 가이드
문서 변경내역: Dave Burke 작성. 홍성진 번역.
개요
DecalComponent 멤버 변수
머티리얼
DecalMaterial 프로퍼티는 이 데칼에 사용할 머티리얼을 나타냅니다. 결국 DecalMaterial 로 이어지는 MaterialInstance 체인입니다.크기
(탄젠트/바이노멀 방향) 표면상의 데칼 크기입니다:- Width/Height
평면 (Plane)
데칼의 크기입니다:- NearPlane/FarPlane
타일링
데칼 UV 에 대한 타일링 멀티플라이어와 오프셋입니다:- TileX/TileY
- OffsetX/OffsetY
적중 정보
데칼 프러스텀 위치와 방향에 대한 정보로, 렌더 데이터 계산 도중이나 데칼 디버그 렌더링 용으로도 사용됩니다:- HitLocation
- HitNormal
- HitTangent
- HitBinormal
클리핑
bNoClip 프로퍼티 디폴트는 FALSE 입니다. TRUE 가 되면 데칼 지오메트리를 계산할 때 "NoClip" 코드패쓰를 사용합니다. 이 코드패쓰는 데칼 프러스텀에 대해 (데칼을) 리시버가 될 수도 있는 트라이앵클을 소프트웨어적으로 클리핑하지 않습니다. 대신 데칼 렌더링 도중에 필(fill) 비용이 추가되지요. 게다가 "NoClip" 데칼 머티리얼에 사용된 텍스처는 그 어드레스 모드를 TA_Clamp 로 설정하고 에지 주변에 투명 테두리를 충분히 확보해야 밉매핑에도 부작용 없이 살아남을 수 있습니다. bNoClip 은 버텍스-라이팅된(lit) 스태틱 메시상의 라이팅된 데칼용이라는 점, 참고하십시오.스태틱
bStaticDecal 프로퍼티는 에디터를 통해 레벨에 놓은 데칼에 대해서만 TRUE 입니다. bStaticDecal 은 ADecalActor 의defaultproperties
블록에서 TRUE 설정됩니다..
리시버
HitComponent 디폴트는 NULL 입니다. NULL 이 아닌 경우, 데칼 지오메트리 계산시 이 컴포넌트만을 리시버로 간주합니다. 이 프로퍼티를 설정하면 모든 리시버에 대해 교차되지 않도록 할 수 있습니다만, 데칼은 지정된 컴포넌트에만 비춰질 것이기에 (로켓 폭발같은 경우엔 안좋겠죠) 바람직하지 못한 결과가 날 수 있습니다.컴포넌트
이 데칼에 대한 지오메트리와 거기에 연관된 렌더 데이터를 생성한 컴포넌트 목록입니다.Receiver
와 RenderData
배열은 항상 길이가 같으며, RenderData
의 i 번째 항목은 Receiver
i 에 대한 데이터입니다. 이러한 레이아웃을 통해 리시버를 다른 데칼에 독립적으로 붙였다 떼었다 할 수 있습니다.
바이어스
둘 이상의 데칼이 겹칠 때 어느 하나를 다른 것 위나 아래에 렌더되도록 조정하기 위해서는 데칼의 깊이를 바이어스하(치우치게 만드)는데, 그럴 때 DepthBias 와 SlopeScaleDepthBias 파라미터를 사용하면 됩니다.필터링
위에 설명한 대로 Filter 에는 필터링할 액터 목록이 담기며, FilterMode 는 이 데칼이 Filter 목록에 있는 액터를 무시할 것인지(FM_Ignore) / 그것에만 영향을 끼칠 것인지(FM_Affect) 를 결정합니다. 디폴트 값은 FM_None 인데, Filter 를 참고하지 않는다는 뜻입니다.프로젝션 플랙
이 플랙은 데칼을 비출지 말지 결정합니다:- bProjectonBackfaces - 트라이앵글 뒷면
- bProjectOnBSP - BSP
- bProjectOnStaticMeshes - 스태틱 메시
- bProjectOnSkeletalMeshes - 스켈레탈 메시
- bProjectOnTerrain - 터레인
스크립트에서 데칼 만들기
>SpawnDecal
멤버 함수를 호출하여 만듭니다. 기본적인 프로세스는 그저 SpawnDecal
에다 데칼의 크기, 방향, 머티리얼, 데칼을 어떻게 계산할지에 대한 힌트를 덧붙여 호출하는 것입니다.
게임에서 무기로 무언가를 맞혔을 때, 그에 반응해서 호출되는 SpawnHitDecal
멤버 함수가 담긴 웨폰 클래스가 있다 상상해 봅시다.
그 함수에 대한 코드는 이와 같을 것입니다:
// 게임 내 모든 무기에 공유되는 상태/행위를 담는 클래스 class BaseWeaponClassForYourGame extends Weapon // ... // 무기 적중에 따라 데칼 생성, SpawnExplosionEffects 같은 함수에 의해 호출. simulated function SpawnHitDecal(ImpactInfo Impact) { local DecalComponent DecalTemplate; // 임팩트 정보에 저장된, 이를테면 피지컬 머티리얼 시스템 같은 것을 참고하여 // 이 표면/무기 쌍에 적합한 데칼 파라미터를 구함. DecalTemplate = Impact.GetDecalTemplate( this ); // 데칼 템플릿을 기반으로 데칼을 생성. WorldInfo.MyDecalManager.SpawnDecal( DecalTemplate.DecalMaterial, // 이 데칼에 사용된 UMaterialInstance. Impact.HitLocation, // 적중 위치에 스폰된 데칼. rotator(-Impact.HitNormal), // 데칼을 표면 속으로 오리엔테이션. DecalTemplate.Width, DecalTemplate.Height, // 탄젠트/바이노멀 방향 데칼 크기. DecalTemplate.Thickness, // 노멀 방향 데칼 크기. DecalTemplate.bNoClip, // 참이면 "NoClip" 코드패쓰 사용. FRand() * 360, // 랜덤 로테이션 Impact.HitInfo.HitComponent ); // NULL 이 아니면 이 컴포넌트만 고려. }
데칼 수명 관리
퍼포먼스 모니터링
관련 통계
Engine (게임내 콘솔에stat engine
을 입력하면 볼 수 있는) 통계 그룹에는 데칼에 관련된 항목이 둘 있습니다: DecalDrawCalls 는 데칼 드로 콜 총 횟수이며, DecalTriangles 는 렌더러에 전달된 데칼 트라이앵글 총 갯수입니다. 또한 Game (stat game
) 통계 그룹에는 DecalTime, 데칼 매니저와 데칼 수명 정책을 틱하는 데 소요된 총 시간이 표시됩니다.
관련 표시 플랙
데칼 렌더링을 관장하는 표시(show) 플랙은 둘 있습니다.SHOW DECALINFO
는 데칼 디버그 정보를 렌더링해 주며, 여기에는 데칼 프러스텀과 그 탄젠트 베이스도 포함됩니다. SHOW DECALS
는 데칼을 뷰포트에 그릴지를 글로벌하게 토글하는 것으로, 여기에는 DECALINFO
를 통해 켜진 데칼 디버그 렌더링도 포함됩니다.
데칼 글로벌하게 끄고/켜기
Engine 의bStaticDecalsEnabled
(스태틱 데칼 켜짐)과 bDynamicDecalsEnabled
(다이내믹 데칼 켜짐) 컨픽 멤버 변수는 스태틱/다이내믹 데칼의 (지오메트리 계산이나 씬 부착과 렌더링 등) 모든 면을 끄고/켜는 데 사용됩니다. 두 변수 다 디폴트는 TRUE, 즉 데칼은 모두 켠다는 뜻입니다.