SlideShare a Scribd company logo
이펙트 쉐이더 2강
Alpha / Blending
오지후 / CatDarkGame
캐쥬얼이펙트 스터디
2019_12_14
https://darkcatgame.tistory.com/
Cat DarkGame
오늘 강의 목표
Alpha와 Blending의 원리 이해와 각종 이슈 해결
렌더링 파이프라인
Screen
Alpha Test
Blending
Render Backend
Z Test
Stencil Test
Fog
AA(Anti-Aliasing)
Filtering
출력 유무 결정 출력 방법 결정
렌더링 파이프라인
Screen
Alpha Test
Blending
Z Test
Stencil Test
Fog
AA(Anti-Aliasing)
Filtering
출력 유무 결정 출력 방법 결정
Render Backend
1. Alpha Test
2. Blending
3. 알파 블랜딩 이슈
Alpha Test
알파 값(데이터)를 확인(테스트)하여 출력 유무 결정
Alpha Test
Tag 구문
Clip 함수
Alpha Test
코드 분석
Alpha Test
Tags
“Queue” = “Transparent”
Alpha Test
렌더링 순서 정하는 명령어
Alpha Test
Background 1000
Geometry 2000
AlphaTest 2450
GeometryLast Geometry중 마지막
Transparent 3000
Overlay 4000
내부적으로 정해진 값을 사용함
Alpha Test
가변적으로 사용가능
Alpha Test
Tags
“IgnoreProjector” = “True”
Alpha Test
Projector를 무시(Ignore)하다.
Alpha Test
Projector란?
카메라와 같은 절두체(Frustum)에 투영 되는 오브젝트에 마테리얼을 출력시키는 컴포넌트
Alpha Test
http://www.aitimes.com/news/articleView.html?idxno=110732
Projector란?
빔프로젝터와 비슷한 개념
프로젝터가 조준한 곳에 내용물(Material)을 입힌다.
Alpha Test
https://koreagame.info/430https://docs.unity3d.com/kr/530/Manual/class-Projector.html
사용 사례
가짜그림자 & 페인트 기능의 사용 사례
Alpha Test
간단한 조명 효과처럼 보이는 Projector
Alpha Test
“IgnoreProjector” = “False”
Alpha Test
“IgnoreProjector” = “True”
Alpha Test
RenderType
Alpha Test
“RenderType” = “Opaque”
“RenderType” = “Transparent”
“RenderType” = “TransparentCutOut”
“RenderType” = “아무 이름이나 된다”
해당 쉐이더의 태그(구분)를 작성하는 것
이 Tag 명령어는?
Alpha Test
용도?
외부 프로그래밍 명령어로 RenderType 이름 기반으로 쉐이더 일괄 교체할 때 사용
다양한 용도 중에서,
Alpha Test
용도?
외부 프로그래밍 명령어로 RenderType 이름 기반으로 쉐이더 일괄 교체할 때 사용
3인칭 게임의 캐릭터 가리는 오브젝트 쉐이더 변경 사례
Alpha Test
코드 분석
Alpha Test
0보다 x가 작으면 출력 하지 않음
Alpha Test
Alpha Test
털, 나무, 풀, 머리카락 등에 사용됨
Alpha Test
이펙트에 사용 사례
Alpha Test
Blending
혼합, 융합, 조합
픽셀을 혼합(Blending)
Blending
투명도 : 뒤에 있는 픽셀과 혼합되는 양
Blending
ZWrite Off
Blend 옵션
Blending
ZWrite Off
Blend 옵션
Blending
다음 파트에서 설명
=
Blending
Additive Alpha Blending Multiply
Blending
분석해봅시다.
Blending
Dst
(Destination)
Src
(Source)
Blending
Blend : 혼합하다 SrcAlpha OneMinusSrcAlpha
1 - SrcAlpha
Blend SrcAlpha OneMinusSrcAlpha
Blending
Blend SrcAlpha OneMinusSrcAlpha
Blend SrcAlpha * Src + OneMinusSrcAlpha * Dst
* *+
SrcAlpha Src OneMinusSrcArpha Dst
Blending
Blend SrcAlpha OneMinusSrcAlpha
Blend SrcAlpha * Src + OneMinusSrcAlpha * Dst
* *+
+ =
SrcAlpha * Src 1-SrcAlpha * Dst 최종 결과
Blending
Blend SrcAlpha OneMinusSrcAlpha
Blend SrcAlpha * Src + OneMinusSrcAlpha * Dst
* *+
+ =
SrcAlpha * Src 1-SrcAlpha * Dst 최종 결과
Blend SrcAlpha OneMinusSrcAlpha
Alpha Blend
Blend One One
Blending
Blend One * Src + One * Dst
Blend One One
+ =
Blending
Blend One * Src + One * Dst
Blend One One
+ =
Blend One One
Additive
Blending
이펙트에 사용 사례
알파 블랜딩 이슈
현재 블랜딩 쉐이더에 문제가 있습니다.
무슨 문제일까요?
이 문제를 조사하기 전에
Z Buffer라는 것을 알아야합니다.
화면에 보이는 깊이 값
Z Buffer = 카메라로부터의 픽셀의 깊이 값
Z Buffer의 용도?
뒤에 가려진 픽셀을 그리지 않기 위해
만약 앞 물체가 반투명이면?
뒤 픽셀과 블랜딩되지 않음
반투명이 형성이 안됨
해결방법?
1. Alpha Sorting
2. ZWrite Off
3. Alpha Test
Alpha Sorting
기본적으로 반투명 오브젝트는 카메라로부터 멀리 떨어져 있는 순서 대로 출력
이 기법을 Alpha Sorting이라고 함
그런데 Mesh의 Pivot기준이라 위와 같은 문제가 발생
ZWrite Off
Z Buffer를 사용하지 않는다는 명령어
Z Buffer를 사용하지 않아 픽셀을 중복해서 출력
일단은 문제는 해결했지만
OverDraw라는 새로운 이슈 발생
(한 픽셀에 중복해서 출력하면 퍼포먼스 문제 발생)
Alpha Test
Alpha Test는 블랜딩이 아니라서 Z Buffer사용해도 문제 없음
알파가 0과 1로 되어 있어 퀄리티의 한계가 있음
텍스처 해상도가 높으면 어느 정도 커버 가능
털, 나무, 풀, 머리카락 등에 사용됨
알파 블랜딩 이슈 2
일반적인 반투명 쉐이더 깔끔한 반투명 쉐이더
문제 원인
ZWrite Off로 ZBuffer를 사용하지 않음으로 서 뒷면까지 렌더링한 것이 문제
Zwrite On 하면 해당 문제는 해결되지만,,,,,
Zwrite On 하면 해당 문제는 해결되지만,,,,,
1 Pass
ZWrite On
2 Pass
ZWrite Off
1 Pass에서 Zwrite On으로 카메라에 보이는 면을 렌더링,
이후 반투명 2Pass을 렌더링
해결 방법
끝

More Related Content

What's hot

[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
changehee lee
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
tartist
 
IndirectDraw with unity
IndirectDraw with unityIndirectDraw with unity
IndirectDraw with unity
Jung Suk Ko
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
Madumpa Park
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correction
MinGeun Park
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
Bongseok Cho
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
Ki Hyunwoo
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
SangYun Yi
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
TonyCms
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013영욱 오
 
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
GukHwan Ji
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑MinGeun Park
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
JP Jung
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
예림 임
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Dae Hyek KIM
 
물리 기반 셰이더의 이해
물리 기반 셰이더의 이해물리 기반 셰이더의 이해
물리 기반 셰이더의 이해
tartist
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
YEONG-CHEON YOU
 
[0806 박민근] 림 라이팅(rim lighting)
[0806 박민근] 림 라이팅(rim lighting)[0806 박민근] 림 라이팅(rim lighting)
[0806 박민근] 림 라이팅(rim lighting)MinGeun Park
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드noerror
 

What's hot (20)

[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
IndirectDraw with unity
IndirectDraw with unityIndirectDraw with unity
IndirectDraw with unity
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correction
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
 
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
 
물리 기반 셰이더의 이해
물리 기반 셰이더의 이해물리 기반 셰이더의 이해
물리 기반 셰이더의 이해
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
[0806 박민근] 림 라이팅(rim lighting)
[0806 박민근] 림 라이팅(rim lighting)[0806 박민근] 림 라이팅(rim lighting)
[0806 박민근] 림 라이팅(rim lighting)
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드
 

이펙트 쉐이더 2강 - 알파 / 블랜딩