SlideShare ist ein Scribd-Unternehmen logo
1 von 18
텍스트
셰이더가 뭐에요?
외계어 ㄷㄷ 수학 ㄷㄷ 근데 해보고 싶어!
셰이더가 뭔데 그래요
컴퓨터 그래픽스 분야에서 셰이
더(shader)는 소프트웨어 명령
의 집합으로 주로 그래픽 하드웨
어의 렌더링 효과를 계산하는 데
쓰인다.
셰이더는 그래픽 처리 장치
(GPU)의 프로그래밍이 가능한
렌더링 파이프라인을 프로그래
밍하는 데 쓰인다.
요약하면 데이터 쪼가리를 모니
터 밖으로 꺼내주는 코드
데이터에서 모니터까지
공간상의 좌표 화면 좌표
좌표계 변
환
픽셀 배열
Rasterize
데이터에서 모니터까지
공간상의 좌표 화면 좌표
좌표계 변
환
픽셀 배열
Rasterize
각각의 정점에 대한 계산 :
이 정점은 화면 어디에 위치해야 할까?
빛을 어느 방향에서 얼만큼 받을까?
각각의 픽셀에
대한 계산 :
이 픽셀은
무슨 색일까?
데이터에서 모니터까지
공간상의 좌표 화면 좌표
좌표계 변
환
픽셀 배열
Rasterize
각각의 정점에 대한 계산 :
이 정점은 화면 어디에 위치해야 할까?
빛을 어느 방향에서 얼만큼 받을까?
각각의 픽셀에
대한 계산 :
이 픽셀은
무슨 색일까?
정점 셰이더 픽셀 셰이더
정점 셰이더에서 픽셀 셰이
더로
정점별 계산 결과물을
위치관계에 따라 선형보
간해서 픽셀 셰이더로
전달
색상 데이터를 전달한다
면 :
정점 1은 흰색,
정점 3은 검은색
-> 가운데 픽셀 셰이더
에게는 회색이 전달된다
!
3
여기는
회색!
실제 코드를 봅시다
유니티의 ShaderLab 코드 안
에 nVidia의 Cg 코드가 삽입된
형태
그래서 외계어처럼 보였었구나
....
이만큼 Cg 코드
요 바깥은 ShaderLab 코드
실제 코드를 봅시다
정점 셰이더 : 정점의 좌표를
화면좌표계로 옮겨라
픽셀 셰이더 :
빨갛게 칠해라
결과물
광원효과가 없으니 밋밋하
죠
정반사 / Specular reflection
입사한 빛이 한 방향으
로
반사된다고 가정
보는 방향에 따라 밝게
보이는 위치가 다르다!
시선의 방향과 반사광의
방향을 내적하여 구할
수 있다
난반사 / Diffuse reflection
입사한 빛이 모든 방향
으로
균일하게 반사된다고 가
정
밝은 부분은 어느 방향
에서 봐도 밝다!
표면의 방향과 빛의 방
향을
내적하여 구할 수 있다
정점마다 빛의 반사 계산하
기
카메라의 방향벡터
(World 좌표계)
광선의 방향벡터
(World 좌표계)
정점의 수직벡터
(World 좌표계)
정반사 (0~1)
난반사 (0~1)
(Per-Vertex Diffuse+Specular shading)
밝기 텍스쳐
픽셀 색상
정점 셰이더 픽셀 셰이더
픽셀의 수직벡
터
픽셀마다 빛의 반사 계산하
기
카메라의 방향벡터
(World 좌표계)
광선의 방향벡터
(World 좌표계)
정점의 수직벡터
(World 좌표계)
정반사 (0~1)
난반사 (0~1)
(Per-Pixel Diffuse+Specular shading)
밝기 텍스쳐
픽셀 색상
정점 셰이더 픽셀 셰이더
노멀 맵
범프 맵
스페큘러
맵
X
정점 계산법과 픽셀 계산법
어느 단계에서 계산할 것
인가?
정점에 대해서만 계산하면
계산량이 대폭 줄어들지만
정확도 역시 부족하다
픽셀별 계산을 하면 픽셀
별로 보간된 수직방향을
사용하며, 노멀맵이나 스
페큘러 맵 등을 사용할 수
있다
예시 :
간단한 정점
난반사 셰이딩
Per-Vertex
Diffuse
Shading
#include "UnityCG.cginc"
uniform float4 _LightColor0;
// color of light source (from "Lighting.cginc")
uniform float4 _Color; // define shader property for shaders
struct vertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct vertexOutput {
float4 pos : SV_POSITION;
float4 col : COLOR;
};
vertexOutput vert(vertexInput input)
{
vertexOutput output;
float4x4 modelMatrix = _Object2World;
float4x4 modelMatrixInverse = _World2Object;
// multiplication with unity_Scale.w is unnecessary
// because we normalize transformed vectors
float3 normalDirection = normalize(
mul(float4(input.normal, 0.0), modelMatrixInverse).xyz);
float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
float3 diffuseReflection = _LightColor0.rgb * _Color.rgb
* max(0.0, dot(normalDirection, lightDirection));
output.col = float4(diffuseReflection, 1.0);
output.pos = mul(UNITY_MATRIX_MVP, input.vertex);
return output;
}
float4 frag(vertexOutput input) : COLOR
{
return input.col;
}
정점 셰이더에서
입력받을 데이터 선언
정점 셰이더에서 픽셀 셰이
더로 보낼 데이터 선언
정점 라이팅 셰이더이므로
픽셀 셰이더는 그냥 입력받은 색상
값을 그대로 리턴
예시 :
간단한 정점
난반사 셰이딩
Per-Vertex
Diffuse
Shading
vertexOutput vert(vertexInput input)
{
vertexOutput output;
float4x4 modelMatrix = _Object2World;
float4x4 modelMatrixInverse = _World2Object;
// multiplication with unity_Scale.w is unnecessary
// because we normalize transformed vectors
float3 normalDirection = normalize(
mul(float4(input.normal, 0.0), modelMatrixInverse).xyz);
float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
float3 diffuseReflection = _LightColor0.rgb * _Color.rgb
* max(0.0, dot(normalDirection, lightDirection));
output.col = float4(diffuseReflection, 1.0);
output.pos = mul(UNITY_MATRIX_MVP, input.vertex);
return output;
}
정점의 수직 방향과 빛의 방향을
월드 좌표계에서 정규화하여 나타냄
정점의 수직 방향과 빛의 방향
을
내적하여 난반사량을 구함
반사량과 정점 위치를 리턴
정리
정점 셰이더는 정점별 계산을 하고,
픽셀 셰이더는 픽셀별 계산을 한다
정반사는 보는 각도에 따라 밝은 부위가 변하고,
난반사는 보는 각도에 상관없이 밝은 부위가 일정하다
정점 셰이더 라이팅은 가볍고,
픽셀 셰이더 라이팅은 정확하다

Weitere ähnliche Inhalte

Was ist angesagt?

[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
MinGeun Park
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
MinGeun Park
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
henjeon
 

Was ist angesagt? (20)

Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
 
3D 게임 그래픽스의 이해
3D 게임 그래픽스의 이해3D 게임 그래픽스의 이해
3D 게임 그래픽스의 이해
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
 
Ssao
SsaoSsao
Ssao
 
D2 Hdr
D2 HdrD2 Hdr
D2 Hdr
 
Motion blur
Motion blurMotion blur
Motion blur
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
물리 기반 셰이더의 이해
물리 기반 셰이더의 이해물리 기반 셰이더의 이해
물리 기반 셰이더의 이해
 
Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)
 
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
 
つぶやきGLSLのススメ
つぶやきGLSLのススメつぶやきGLSLのススメ
つぶやきGLSLのススメ
 
Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
BRDFモデルの変遷
BRDFモデルの変遷BRDFモデルの変遷
BRDFモデルの変遷
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 

Ähnlich wie 셰이더가 뭐에요?

[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shading
MinGeun Park
 
[박민근] 3 d렌더링 옵티마이징_2
[박민근] 3 d렌더링 옵티마이징_2[박민근] 3 d렌더링 옵티마이징_2
[박민근] 3 d렌더링 옵티마이징_2
MinGeun Park
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
진현 조
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
MinGeun Park
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
QooJuice
 

Ähnlich wie 셰이더가 뭐에요? (20)

[IGC2018] 퍼니파우 최재영 - 감성을 위한 개발요소
[IGC2018] 퍼니파우 최재영 - 감성을 위한 개발요소[IGC2018] 퍼니파우 최재영 - 감성을 위한 개발요소
[IGC2018] 퍼니파우 최재영 - 감성을 위한 개발요소
 
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01
 
컴퓨터 그래픽스 2015-2019년 출석수업대체시험
컴퓨터 그래픽스 2015-2019년 출석수업대체시험컴퓨터 그래픽스 2015-2019년 출석수업대체시험
컴퓨터 그래픽스 2015-2019년 출석수업대체시험
 
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow Maps
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shading
 
[박민근] 3 d렌더링 옵티마이징_2
[박민근] 3 d렌더링 옵티마이징_2[박민근] 3 d렌더링 옵티마이징_2
[박민근] 3 d렌더링 옵티마이징_2
 
Day by day iPhone Programming
Day by day iPhone ProgrammingDay by day iPhone Programming
Day by day iPhone Programming
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
Modern gpu optimize
Modern gpu optimizeModern gpu optimize
Modern gpu optimize
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blog
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
 
파이어몽키 3D 애플리케이션 만들기
파이어몽키 3D 애플리케이션 만들기파이어몽키 3D 애플리케이션 만들기
파이어몽키 3D 애플리케이션 만들기
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
 
Learning Less is More - 6D Camera Localization via 3D Surface Regression
Learning Less is More - 6D Camera Localization via 3D Surface RegressionLearning Less is More - 6D Camera Localization via 3D Surface Regression
Learning Less is More - 6D Camera Localization via 3D Surface Regression
 

Mehr von Jungsoo Park

Mehr von Jungsoo Park (10)

유니티 애니메이터 FSM으로 활용하기
유니티 애니메이터 FSM으로 활용하기유니티 애니메이터 FSM으로 활용하기
유니티 애니메이터 FSM으로 활용하기
 
NABLA 개발기
NABLA 개발기NABLA 개발기
NABLA 개발기
 
48시간, 복셀로 표현하기
48시간, 복셀로 표현하기48시간, 복셀로 표현하기
48시간, 복셀로 표현하기
 
풀타임 개발 도전기
풀타임 개발 도전기풀타임 개발 도전기
풀타임 개발 도전기
 
LINQ란 무엇인가
LINQ란 무엇인가LINQ란 무엇인가
LINQ란 무엇인가
 
셰이더 만들기 실습
셰이더 만들기 실습셰이더 만들기 실습
셰이더 만들기 실습
 
IEnumerator란 무엇인가?
IEnumerator란 무엇인가?IEnumerator란 무엇인가?
IEnumerator란 무엇인가?
 
유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기
 
딥 다크 던전 그래픽 작업기
딥 다크 던전 그래픽 작업기딥 다크 던전 그래픽 작업기
딥 다크 던전 그래픽 작업기
 
딥 다크 던전 그린라이트 도전기
딥 다크 던전 그린라이트 도전기딥 다크 던전 그린라이트 도전기
딥 다크 던전 그린라이트 도전기
 

셰이더가 뭐에요?

  • 1. 텍스트 셰이더가 뭐에요? 외계어 ㄷㄷ 수학 ㄷㄷ 근데 해보고 싶어!
  • 2. 셰이더가 뭔데 그래요 컴퓨터 그래픽스 분야에서 셰이 더(shader)는 소프트웨어 명령 의 집합으로 주로 그래픽 하드웨 어의 렌더링 효과를 계산하는 데 쓰인다. 셰이더는 그래픽 처리 장치 (GPU)의 프로그래밍이 가능한 렌더링 파이프라인을 프로그래 밍하는 데 쓰인다. 요약하면 데이터 쪼가리를 모니 터 밖으로 꺼내주는 코드
  • 3. 데이터에서 모니터까지 공간상의 좌표 화면 좌표 좌표계 변 환 픽셀 배열 Rasterize
  • 4. 데이터에서 모니터까지 공간상의 좌표 화면 좌표 좌표계 변 환 픽셀 배열 Rasterize 각각의 정점에 대한 계산 : 이 정점은 화면 어디에 위치해야 할까? 빛을 어느 방향에서 얼만큼 받을까? 각각의 픽셀에 대한 계산 : 이 픽셀은 무슨 색일까?
  • 5. 데이터에서 모니터까지 공간상의 좌표 화면 좌표 좌표계 변 환 픽셀 배열 Rasterize 각각의 정점에 대한 계산 : 이 정점은 화면 어디에 위치해야 할까? 빛을 어느 방향에서 얼만큼 받을까? 각각의 픽셀에 대한 계산 : 이 픽셀은 무슨 색일까? 정점 셰이더 픽셀 셰이더
  • 6. 정점 셰이더에서 픽셀 셰이 더로 정점별 계산 결과물을 위치관계에 따라 선형보 간해서 픽셀 셰이더로 전달 색상 데이터를 전달한다 면 : 정점 1은 흰색, 정점 3은 검은색 -> 가운데 픽셀 셰이더 에게는 회색이 전달된다 ! 3 여기는 회색!
  • 7. 실제 코드를 봅시다 유니티의 ShaderLab 코드 안 에 nVidia의 Cg 코드가 삽입된 형태 그래서 외계어처럼 보였었구나 .... 이만큼 Cg 코드 요 바깥은 ShaderLab 코드
  • 8. 실제 코드를 봅시다 정점 셰이더 : 정점의 좌표를 화면좌표계로 옮겨라 픽셀 셰이더 : 빨갛게 칠해라
  • 11. 정반사 / Specular reflection 입사한 빛이 한 방향으 로 반사된다고 가정 보는 방향에 따라 밝게 보이는 위치가 다르다! 시선의 방향과 반사광의 방향을 내적하여 구할 수 있다
  • 12. 난반사 / Diffuse reflection 입사한 빛이 모든 방향 으로 균일하게 반사된다고 가 정 밝은 부분은 어느 방향 에서 봐도 밝다! 표면의 방향과 빛의 방 향을 내적하여 구할 수 있다
  • 13. 정점마다 빛의 반사 계산하 기 카메라의 방향벡터 (World 좌표계) 광선의 방향벡터 (World 좌표계) 정점의 수직벡터 (World 좌표계) 정반사 (0~1) 난반사 (0~1) (Per-Vertex Diffuse+Specular shading) 밝기 텍스쳐 픽셀 색상 정점 셰이더 픽셀 셰이더
  • 14. 픽셀의 수직벡 터 픽셀마다 빛의 반사 계산하 기 카메라의 방향벡터 (World 좌표계) 광선의 방향벡터 (World 좌표계) 정점의 수직벡터 (World 좌표계) 정반사 (0~1) 난반사 (0~1) (Per-Pixel Diffuse+Specular shading) 밝기 텍스쳐 픽셀 색상 정점 셰이더 픽셀 셰이더 노멀 맵 범프 맵 스페큘러 맵 X
  • 15. 정점 계산법과 픽셀 계산법 어느 단계에서 계산할 것 인가? 정점에 대해서만 계산하면 계산량이 대폭 줄어들지만 정확도 역시 부족하다 픽셀별 계산을 하면 픽셀 별로 보간된 수직방향을 사용하며, 노멀맵이나 스 페큘러 맵 등을 사용할 수 있다
  • 16. 예시 : 간단한 정점 난반사 셰이딩 Per-Vertex Diffuse Shading #include "UnityCG.cginc" uniform float4 _LightColor0; // color of light source (from "Lighting.cginc") uniform float4 _Color; // define shader property for shaders struct vertexInput { float4 vertex : POSITION; float3 normal : NORMAL; }; struct vertexOutput { float4 pos : SV_POSITION; float4 col : COLOR; }; vertexOutput vert(vertexInput input) { vertexOutput output; float4x4 modelMatrix = _Object2World; float4x4 modelMatrixInverse = _World2Object; // multiplication with unity_Scale.w is unnecessary // because we normalize transformed vectors float3 normalDirection = normalize( mul(float4(input.normal, 0.0), modelMatrixInverse).xyz); float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz); float3 diffuseReflection = _LightColor0.rgb * _Color.rgb * max(0.0, dot(normalDirection, lightDirection)); output.col = float4(diffuseReflection, 1.0); output.pos = mul(UNITY_MATRIX_MVP, input.vertex); return output; } float4 frag(vertexOutput input) : COLOR { return input.col; } 정점 셰이더에서 입력받을 데이터 선언 정점 셰이더에서 픽셀 셰이 더로 보낼 데이터 선언 정점 라이팅 셰이더이므로 픽셀 셰이더는 그냥 입력받은 색상 값을 그대로 리턴
  • 17. 예시 : 간단한 정점 난반사 셰이딩 Per-Vertex Diffuse Shading vertexOutput vert(vertexInput input) { vertexOutput output; float4x4 modelMatrix = _Object2World; float4x4 modelMatrixInverse = _World2Object; // multiplication with unity_Scale.w is unnecessary // because we normalize transformed vectors float3 normalDirection = normalize( mul(float4(input.normal, 0.0), modelMatrixInverse).xyz); float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz); float3 diffuseReflection = _LightColor0.rgb * _Color.rgb * max(0.0, dot(normalDirection, lightDirection)); output.col = float4(diffuseReflection, 1.0); output.pos = mul(UNITY_MATRIX_MVP, input.vertex); return output; } 정점의 수직 방향과 빛의 방향을 월드 좌표계에서 정규화하여 나타냄 정점의 수직 방향과 빛의 방향 을 내적하여 난반사량을 구함 반사량과 정점 위치를 리턴
  • 18. 정리 정점 셰이더는 정점별 계산을 하고, 픽셀 셰이더는 픽셀별 계산을 한다 정반사는 보는 각도에 따라 밝은 부위가 변하고, 난반사는 보는 각도에 상관없이 밝은 부위가 일정하다 정점 셰이더 라이팅은 가볍고, 픽셀 셰이더 라이팅은 정확하다