Lighting
카테고리: Graphics
태그: DirectX
홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.
🐥 Object Rotation vs View Rotation
Object | View |
---|---|
🐥 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
댓글 남기기