SlideShare a Scribd company logo
1 of 39
Dynamic lighting in God of War3 
ShaderStudy 
해강
Siggraph2011 발표 
God of War3에서 다수의 동적 라이팅을 처리한 내용
PS3에서는 RSX(geforce7800 GPU)가 병목 
PS3는 pixel 연산이 느림 
SPU를 활용해, RSX를 싸게 유지하는게 목표 
아티스티들이 더 많은 per pixel lighting 요구
GOW3에서 라이트 종류 
1. Ambient - 환경광은 하나의 RGB로 통합하므로 해당 안됨 
2. Omni(point) 
3. Directional 
Hybrid vertex lights로 통합 
Vertex에서 다수의 라이트들을 합성해 pixel에서는 하나의 라이트로 계산
Vertex애 대해서 거리에 따른 감쇠 계산 
- 정점의 거리에 따라 falloff(광량 변화) 계산 
하나의 라이트로 합친다 
합쳐진 Light Position 보간 
하나의 라이트로 스펙큘러 등을 계산
왜 빛의 위치로 계산하는가?
픽셀별로 빛의 방향을 저장할 경우
A와 B에서 저장된 방향을 보간
엉뚱한 곳을 가리키게 된다
빛의 위치를 저장할 경우
A와 B에 저장된 라이트 위치가 같다면 
AB 중앙 픽셀에 영향을 주는 빛도 움직이지 않는다
영향을 받는 빛을 올바르게 계산
부드럽고, 저렴하게 만들기 위해서 
왼쪽 : 선형 falloff 
오른쪽 : GOW3 falloff
같은 거리에서는 0에 도달하도록 구성
라이트 위치와 falloff 가중치만으로는 부족 
거리에 관계없이 강도에 따라 빛이 오버할 가능성
픽셀당 라이트의 방향을 보간하는 것은 안 된다 
- 잘못된 라이트를 가리킨다 
정점 당 조명 위치를 평균화하는 것도 안 된다 
- 라이트가 오버할 가능성
Vertex애 대해서 거리에 따른 감쇠 계산 
- 정점의 거리에 따라 falloff(광량 변화) 계산 
하나의 라이트로 합친다 
- 정점에 따라 조명 방향을 저장한다 
합쳐진 Light Position 보간 
하나의 라이트로 스펙큘러 등을 계산
상대 경로 생성을 위해서 라이트에서 정점 위치를 뺀다 
길이와 가중치를 계산(강도는 1로) 
상대 경로(방향)에 가중치를 곱한다
라이트의 방향을 추가 
가중치 축적 
위치에서 가중치를 곱셈
통합된 라이트 벡터 얻음 
라이트의 월드좌표를 위해 정점 위치를 추가
수식
지금까지 라이트는 그림자에 관계 없이 결합되어 있기 때문에 
다시 버택스에 라이트가 직면하도록 계산
Vertex애 대해서 거리에 따른 감쇠 계산 
- 정점의 거리에 따라 falloff(광량 변화) 계산 
하나의 라이트로 합친다 
- 정점에 따라 조명 방향을 저장한다 
합쳐진 Light Position 보간 
-Back facing, normalize check 
하나의 라이트로 스펙큘러 등을 계산
Back facing 
라이트 가중치에 N dot L 을 포함
문제점 
서로 반대의 방향에서 빛의 영향을 받을 경우 
A와 B중 한곳에서 N dot L 보다 높은 값이 발생
P지점 오버헤드
라이트 벡터가 임계값 보다 짧은 경우에는 
normalize를 하지 않는다
집계된 라이트의 색상을 계산하는 방법이 필요하다 
물리적으로 올바른 값은 손실
Vertex애 대해서 거리에 따른 감쇠 계산 
- 정점의 거리에 따라 falloff(광량 변화) 계산 
하나의 라이트로 합친다 
- 정점에 따라 조명 방향을 저장한다 
합쳐진 Light Position 보간 
-Back facing, normalize check 
하나의 라이트로 스펙큘러 등을 계산
통합된 빛의 위치 계산 
빛의 방향을 정규화 
내적
수식
RGB 집계 최종
여러가지 조명을 넣어도 결과값은 예측값의 합과 동일하다 
때문에 휘도값이 적절하게 들어간다 
(부하에 관한 이야기는 없었으나 적절한 제한은 필요할 듯)
휘도에 대한 근사치 최종 공식
버텍스에서 라이트를 하나로 통합해 
픽셀에서 스펙큘러등의 최종처리 
포워드에서도 활용 가능할 것임 
버텍스에서 계산하고 픽셀에서는 반사 스펙큘러를 계산한다 
결과 확인을 위한 확인 작업이 복잡하기 때문에- 
GOW3의 발표는 감쇠에 의해 색을 축적 
색을 축적하는 것이 아니라 라이트 방향을 축적해 해결하자는 의견 
스펙큘러나 컬러는 걍 가져다 쓰자
half3 HemiDiffuse : COLOR0; // Diffuse hemisphere lighting 
half3 HemiSpecular : COLOR1; // Specular hemisphere lighting 
half3 SunDiffuse : TEXCOORD0; // Diffuse lighting for the sun 
half3 SunH : TEXCOORD1; // Half-angle vector for the sun 
half3 PointsDiffuse : TEXCOORD2; // Agg. diffuse lighting from points 
half3 PointsH : TEXCOORD3; // Agg. half-angle vector from points 
half3 N : TEXCOORD4; // Surface normal
// pixel shader: 
half2 highlights; 
highlights.x = pow( saturate( dot( N, SunH ) ), SPEC_POWER ); 
highlights.y = pow( saturate( dot( N, PointsH ) ), SPEC_POWER ); 
highlights *= SPEC_NORMFACTOR; 
half3 result = 0; 
result += DiffTexture * ( 
In.HemiDiffuse + In.SunDiffuse + In.PointDiffuse ); 
result += SpecTexture * ( 
In.HemiSpecular + 
In.SunDiffuse * highlights.x + 
In.PointsDiffuse * highlights.y );
// vertex shader: 
float3 PointsL = 0; 
for( int i = 0; i < NUM_POINTS; ++i ) 
{ 
half3 dx = LightPosition[i] - WorldPosition; 
half attenuation = // some function of distance 
half3 attenL = normalize( dx ) * attenuation; 
Out.PointDiffuse += saturate( dot( N, attenL ) ) * LightColor[i]; 
PointsL += attenL; 
} 
Out.PointsH = normalize( PointsL ) + V;
원문 
http://advances.realtimerendering.com/s2011/index.html 
참고 
http://www.slideshare.net/cagetu/dynamic-lighting-in-gow3?related=2

More Related Content

More from 해강

[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self해강
 
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie해강
 
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...해강
 
[14.12.27] 종횡사해2014(DevRookie)
[14.12.27] 종횡사해2014(DevRookie)[14.12.27] 종횡사해2014(DevRookie)
[14.12.27] 종횡사해2014(DevRookie)해강
 
[14.12.08] 행렬대수(ShaderStudy)
[14.12.08] 행렬대수(ShaderStudy)[14.12.08] 행렬대수(ShaderStudy)
[14.12.08] 행렬대수(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)
[14.10.21] Far Cry and DX9 번역(shaderstudy)해강
 
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)해강
 
[14.10.10] TressFX 번역(self)
[14.10.10] TressFX 번역(self)[14.10.10] TressFX 번역(self)
[14.10.10] TressFX 번역(self)해강
 
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)해강
 
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)해강
 
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)해강
 
[Shader study] Color control (2014.05.12)
[Shader study] Color control (2014.05.12)[Shader study] Color control (2014.05.12)
[Shader study] Color control (2014.05.12)해강
 
[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)해강
 
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)해강
 
[Dev rookie]사망유희2013(13.12.21)
[Dev rookie]사망유희2013(13.12.21)[Dev rookie]사망유희2013(13.12.21)
[Dev rookie]사망유희2013(13.12.21)해강
 
[Dev rookie] 이상적인 게임에 관하여(13.11.30)
[Dev rookie] 이상적인 게임에 관하여(13.11.30)[Dev rookie] 이상적인 게임에 관하여(13.11.30)
[Dev rookie] 이상적인 게임에 관하여(13.11.30)해강
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)해강
 
[Softmax] 유익한 무엇에 관하여(13.09.27)
[Softmax] 유익한 무엇에 관하여(13.09.27)[Softmax] 유익한 무엇에 관하여(13.09.27)
[Softmax] 유익한 무엇에 관하여(13.09.27)해강
 
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)해강
 
[Dev rookie] 예술하고 싶어요(13.06.29)
[Dev rookie] 예술하고 싶어요(13.06.29)[Dev rookie] 예술하고 싶어요(13.06.29)
[Dev rookie] 예술하고 싶어요(13.06.29)해강
 

More from 해강 (20)

[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
[16.04.12] 플레이어의 기억에 남을 인상적인 캐릭터를 제작하는 5가지 주제 - Self
 
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
[15.06.20] 네가 누구든, 내가 뭘하든 - DevRookie
 
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
[15.02.14] 진짜로땜빵하라하시면해야겠지만할시간도없고아무생각도없을때면어쩌면좋지라고소리쳐봤자아무도대답안해줄꺼고어쩔수없이이렇게저렇게어4신...
 
[14.12.27] 종횡사해2014(DevRookie)
[14.12.27] 종횡사해2014(DevRookie)[14.12.27] 종횡사해2014(DevRookie)
[14.12.27] 종횡사해2014(DevRookie)
 
[14.12.08] 행렬대수(ShaderStudy)
[14.12.08] 행렬대수(ShaderStudy)[14.12.08] 행렬대수(ShaderStudy)
[14.12.08] 행렬대수(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)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
 
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
[14.10.20] 아! 그거...모르겠습니다 - TLS(devrookie)
 
[14.10.10] TressFX 번역(self)
[14.10.10] TressFX 번역(self)[14.10.10] TressFX 번역(self)
[14.10.10] TressFX 번역(self)
 
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
 
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
 
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
 
[Shader study] Color control (2014.05.12)
[Shader study] Color control (2014.05.12)[Shader study] Color control (2014.05.12)
[Shader study] Color control (2014.05.12)
 
[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)
 
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
[Shader study]Shadow Map Silhouette Revectorization(2014.01.06)
 
[Dev rookie]사망유희2013(13.12.21)
[Dev rookie]사망유희2013(13.12.21)[Dev rookie]사망유희2013(13.12.21)
[Dev rookie]사망유희2013(13.12.21)
 
[Dev rookie] 이상적인 게임에 관하여(13.11.30)
[Dev rookie] 이상적인 게임에 관하여(13.11.30)[Dev rookie] 이상적인 게임에 관하여(13.11.30)
[Dev rookie] 이상적인 게임에 관하여(13.11.30)
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)
 
[Softmax] 유익한 무엇에 관하여(13.09.27)
[Softmax] 유익한 무엇에 관하여(13.09.27)[Softmax] 유익한 무엇에 관하여(13.09.27)
[Softmax] 유익한 무엇에 관하여(13.09.27)
 
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
[Dev rookie] 나는 네가 무엇을 하고 있는지 알고 있다(13.08.24)
 
[Dev rookie] 예술하고 싶어요(13.06.29)
[Dev rookie] 예술하고 싶어요(13.06.29)[Dev rookie] 예술하고 싶어요(13.06.29)
[Dev rookie] 예술하고 싶어요(13.06.29)
 

[14.09.01] dynamic lighting in god of war3(shader study)

  • 1. Dynamic lighting in God of War3 ShaderStudy 해강
  • 2. Siggraph2011 발표 God of War3에서 다수의 동적 라이팅을 처리한 내용
  • 3. PS3에서는 RSX(geforce7800 GPU)가 병목 PS3는 pixel 연산이 느림 SPU를 활용해, RSX를 싸게 유지하는게 목표 아티스티들이 더 많은 per pixel lighting 요구
  • 4. GOW3에서 라이트 종류 1. Ambient - 환경광은 하나의 RGB로 통합하므로 해당 안됨 2. Omni(point) 3. Directional Hybrid vertex lights로 통합 Vertex에서 다수의 라이트들을 합성해 pixel에서는 하나의 라이트로 계산
  • 5. Vertex애 대해서 거리에 따른 감쇠 계산 - 정점의 거리에 따라 falloff(광량 변화) 계산 하나의 라이트로 합친다 합쳐진 Light Position 보간 하나의 라이트로 스펙큘러 등을 계산
  • 6. 왜 빛의 위치로 계산하는가?
  • 7. 픽셀별로 빛의 방향을 저장할 경우
  • 8. A와 B에서 저장된 방향을 보간
  • 11. A와 B에 저장된 라이트 위치가 같다면 AB 중앙 픽셀에 영향을 주는 빛도 움직이지 않는다
  • 12. 영향을 받는 빛을 올바르게 계산
  • 13. 부드럽고, 저렴하게 만들기 위해서 왼쪽 : 선형 falloff 오른쪽 : GOW3 falloff
  • 14. 같은 거리에서는 0에 도달하도록 구성
  • 15. 라이트 위치와 falloff 가중치만으로는 부족 거리에 관계없이 강도에 따라 빛이 오버할 가능성
  • 16. 픽셀당 라이트의 방향을 보간하는 것은 안 된다 - 잘못된 라이트를 가리킨다 정점 당 조명 위치를 평균화하는 것도 안 된다 - 라이트가 오버할 가능성
  • 17. Vertex애 대해서 거리에 따른 감쇠 계산 - 정점의 거리에 따라 falloff(광량 변화) 계산 하나의 라이트로 합친다 - 정점에 따라 조명 방향을 저장한다 합쳐진 Light Position 보간 하나의 라이트로 스펙큘러 등을 계산
  • 18. 상대 경로 생성을 위해서 라이트에서 정점 위치를 뺀다 길이와 가중치를 계산(강도는 1로) 상대 경로(방향)에 가중치를 곱한다
  • 19. 라이트의 방향을 추가 가중치 축적 위치에서 가중치를 곱셈
  • 20. 통합된 라이트 벡터 얻음 라이트의 월드좌표를 위해 정점 위치를 추가
  • 22. 지금까지 라이트는 그림자에 관계 없이 결합되어 있기 때문에 다시 버택스에 라이트가 직면하도록 계산
  • 23. Vertex애 대해서 거리에 따른 감쇠 계산 - 정점의 거리에 따라 falloff(광량 변화) 계산 하나의 라이트로 합친다 - 정점에 따라 조명 방향을 저장한다 합쳐진 Light Position 보간 -Back facing, normalize check 하나의 라이트로 스펙큘러 등을 계산
  • 24. Back facing 라이트 가중치에 N dot L 을 포함
  • 25. 문제점 서로 반대의 방향에서 빛의 영향을 받을 경우 A와 B중 한곳에서 N dot L 보다 높은 값이 발생
  • 27. 라이트 벡터가 임계값 보다 짧은 경우에는 normalize를 하지 않는다
  • 28. 집계된 라이트의 색상을 계산하는 방법이 필요하다 물리적으로 올바른 값은 손실
  • 29. Vertex애 대해서 거리에 따른 감쇠 계산 - 정점의 거리에 따라 falloff(광량 변화) 계산 하나의 라이트로 합친다 - 정점에 따라 조명 방향을 저장한다 합쳐진 Light Position 보간 -Back facing, normalize check 하나의 라이트로 스펙큘러 등을 계산
  • 30. 통합된 빛의 위치 계산 빛의 방향을 정규화 내적
  • 33. 여러가지 조명을 넣어도 결과값은 예측값의 합과 동일하다 때문에 휘도값이 적절하게 들어간다 (부하에 관한 이야기는 없었으나 적절한 제한은 필요할 듯)
  • 34. 휘도에 대한 근사치 최종 공식
  • 35. 버텍스에서 라이트를 하나로 통합해 픽셀에서 스펙큘러등의 최종처리 포워드에서도 활용 가능할 것임 버텍스에서 계산하고 픽셀에서는 반사 스펙큘러를 계산한다 결과 확인을 위한 확인 작업이 복잡하기 때문에- GOW3의 발표는 감쇠에 의해 색을 축적 색을 축적하는 것이 아니라 라이트 방향을 축적해 해결하자는 의견 스펙큘러나 컬러는 걍 가져다 쓰자
  • 36. half3 HemiDiffuse : COLOR0; // Diffuse hemisphere lighting half3 HemiSpecular : COLOR1; // Specular hemisphere lighting half3 SunDiffuse : TEXCOORD0; // Diffuse lighting for the sun half3 SunH : TEXCOORD1; // Half-angle vector for the sun half3 PointsDiffuse : TEXCOORD2; // Agg. diffuse lighting from points half3 PointsH : TEXCOORD3; // Agg. half-angle vector from points half3 N : TEXCOORD4; // Surface normal
  • 37. // pixel shader: half2 highlights; highlights.x = pow( saturate( dot( N, SunH ) ), SPEC_POWER ); highlights.y = pow( saturate( dot( N, PointsH ) ), SPEC_POWER ); highlights *= SPEC_NORMFACTOR; half3 result = 0; result += DiffTexture * ( In.HemiDiffuse + In.SunDiffuse + In.PointDiffuse ); result += SpecTexture * ( In.HemiSpecular + In.SunDiffuse * highlights.x + In.PointsDiffuse * highlights.y );
  • 38. // vertex shader: float3 PointsL = 0; for( int i = 0; i < NUM_POINTS; ++i ) { half3 dx = LightPosition[i] - WorldPosition; half attenuation = // some function of distance half3 attenL = normalize( dx ) * attenuation; Out.PointDiffuse += saturate( dot( N, attenL ) ) * LightColor[i]; PointsL += attenL; } Out.PointsH = normalize( PointsL ) + V;
  • 39. 원문 http://advances.realtimerendering.com/s2011/index.html 참고 http://www.slideshare.net/cagetu/dynamic-lighting-in-gow3?related=2

Editor's Notes

  1. Architecture.