개발/Graphics

Premultiplied alpha

huiyu 2018. 10. 30. 19:20

Premultiplied Alpha

 - Computer Graphics에서 Alpha값을 표현하는 방법은 두가지 존재.


1) Straight alpha

  - RGB로 그리는 물체의 색상을 표현
  - 독립된 채널의 Alpha값이 존재

  * Alpha와 RGB는 독립적, 객체를 fade-in/out할 때 RGB변경없이 Alpha만 변경하여 적용가능

  실제 화면에 그릴땐 아래와 같이 계산한다.

  result = (source.RGB * source.A) + (dest.RGB * (1 - source.A))

  

2) Premultiplied alpha

 - RGB값에 Alpha값이 적용된 값, 

 그리려는 source의 RGB값에 이미 alpha값이 적용되어 있으므로 alpha값 계산 없이 바로 더하게 된다.

  result = (source.RGB) + (dest.RGB * (1 - source.A))

 * Premultiplied alpha를 사용 시 Image Filtering을 사용하거나 다른 레이어를 구성할 때 더 나은 결과를 제공한다.
  (->링크참조 :https://blogs.msdn.microsoft.com/shawnhar/2009/11/06/premultiplied-alpha/)

 premultiplied alpha를 적용하기 위해선 alpha값을 RGB에 곱해주면 된다.
  color.rgb *= color.a


3) Converting between alpha formats

premultiplied.R = (byte)(straight.R * straight.A / 255);
premultiplied.G = (byte)(straight.G * straight.A / 255);
premultiplied.B = (byte)(straight.B * straight.A / 255);
premultiplied.A = straight.A;



[출처]

https://microsoft.github.io/Win2D/html/PremultipliedAlpha.htm
https://blogs.msdn.microsoft.com/shawnhar/2009/11/06/premultiplied-alpha/
https://blogs.msdn.microsoft.com/shawnhar/2009/11/07/premultiplied-alpha-and-image-composition/

728x90
반응형

'개발 > Graphics' 카테고리의 다른 글

유니티 알파블렌드 쉐이딩 이슈 해결  (0) 2022.05.30
Shadertoy  (0) 2019.12.31
텍스쳐 맵  (2) 2018.09.15
SDL Sprite Animation  (0) 2018.08.19
프레임 드롭현상과 대책  (3) 2018.08.18