"눈이 나쁘면 안경을 쓴댔으니 모자란 너에겐 모자를 씌워주마" – 김케장 / 동전주머니엔 동전이 들었지

20160613
렌더 텍스처 알파 값 문제

안녕하세요. 유니티 버그인지 제가 뭘 정확히 모르는 건지 뭔가 이상한 문제가 생겼다가 일단은 해결해서 글 올립니다.

장면 구성

ui용 이미지로 사용하려고 위처럼 캐릭터를 따로 촬영해서 렌더 텍스처에 렌더를 하고 있는데요. 문제는 캐릭터 옆에 있는 반투명한 검은 상자입니다. 다른 곳에서 보면 아무 문제가 없습니다. 렌더 텍스처도 왼쪽 아래와 같이 잘 생성되어서 나오고요.

렌더 텍스처 RGB값
게임 화면

(위 스샷, 렌더 텍스처 RGB값) 전체 색이 살짝 어두운데 이거는 실행 상태일 때 유니티 에디터 색이 좀 어두워지는 것 때문에 그렇습니다. 그것 말고는 제대로 나오고 있지요. (아래 스샷, 게임 화면) 이걸 이제 게임에서 보면 어라? 박스쪽이 알파 적용된 것처럼 뒤가 보입니다. 아니 이게 무슨 소리야 뭔가 싶어서 렌더 텍스처 알파를 확인해보니,

렌더 텍스처 알파값
중첩시

박스의 알파 값이 들어가 있습니다. 이유는 모르겠는데 블렌딩을 하는 물체가 있으면 그 물체의 알파 값(블렌딩 결괏값)이 그대로 들어갑니다. 물체를 여러 개 놓으면 중첩돼서 나오네요.

원인은 정확히 모르겠으나 일단 해결(이 맞는지는 모르겠는데 일단 문제는 없어지니…) 방법을 보자면 해당 물체가 사용하고 있는 (편집할 수 있는) 셰이더의 블렌딩 인자 뒤에 알파용 인자를 추가합니다.

//Blend SrcFactor DstFactor, SrcFactorA DstFactorA
Blend srcAlpha oneMinusSrcAlpha, zero one

SrcFactorA와 DstFactorA에 인자 값을 넣어서 보시면 블렌딩 결괏값이 렌더 텍스처 알파 값으로 들어가는 게 보이실 겁니다. 현재 제가 사용하고 있는 셰이더의 블렌딩 연산 방법은 Add(기본값)로 되어 있어서 한쪽이 1이면 다른 쪽이 뭐든지 간에 최소 1이 나오기 때문에 one으로 해놓고 다른 쪽은 그냥 zero로 해둡니다.

유니티는 원래 이렇게 동작을 하는 건지 단순히 버그인지는 모르겠으나 이렇게 하면 렌더 텍스처의 알파가 전부 사라지고 원하는 결과가 나옵니다.


참고

https://docs.unity3d.com/Manual/SL-Blend.html

댓글 남기기 | 타닥타닥

댓글 남기기

* 표시된 곳은 반드시 입력해주세요