Lighting

Date:     Updated:

카테고리:

태그:

홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.


🐥 Object Rotation vs View Rotation

Object View
ezgif com-crop (2) ezgif com-crop (1)
   


🐥 Shader Code

Vertex Buffer에는 normal변환을 위한 inverse_transpose도 필요

// Vertex Buffer
cbuffer VertexConstantBuffer : register(b0)
{
    matrix model;
    matrix invTranspose;
    matrix view;
    matrix projection;
};


특이한 부분

// In Pixel Shader
[unroll] 
for (i = 0; i < NUM_DIR_LIGHTS; ++i)
{
    color += ComputeDirectionalLight(lights[i], material, input.normalWorld, toEye);
}

[unroll]
for (i = NUM_DIR_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; ++i)
{
    color += ComputePointLight(lights[i], material, input.posWorld, input.normalWorld, toEye);
}

[unroll]
for (i = NUM_DIR_LIGHTS + NUM_POINT_LIGHTS; i < NUM_DIR_LIGHTS + NUM_POINT_LIGHTS + NUM_SPOT_LIGHTS; ++i)
{
    color += ComputeSpotLight(lights[i], material, input.posWorld, input.normalWorld, toEye);
}
  • Shader 내에서 분기문은 안쓰는게 좋음 (serialize됨)
  • light의 경우 directional/point/spot 중 하나
  • shader에서 if/else 쓰는 방식이 아닌 전부 실행
    • 그 대신 cpu에서 light_strength = 0 지정


🐥 Results

ezgif com-crop (3)



맨 위로 이동하기

Graphics 카테고리 내 다른 글 보러가기

댓글 남기기