약간 더 수정.
fog 값이랑 더해질 때 add 모드로 블렌딩 되면 fog 색이 검은색과 더해지면서 연하게 색상이 나오게 되는 문제가 생기더군요
하긴 add 로 되면 … 연하게 포그가 먹으면 그 색이 add로 보여질 수 밖에요.
이 경우는 보통 알파 채널 연산을 통해서 그 부분을 제거해 버리면 해결됩니다만, 일단 이 쉐이더가 그걸 고려하지 않았고 ㅋㅋ
포그값이 이정도로 진한 곳도 거의 없어서 못본데다가,
맵에디터에서는 아무리 재현하려 해도 재현이 안되지 뭡니까. 뭐지..


사실 알파 채널이 포함된다 하더라도 연산은 블렌딩 연산이므로 더 느려질 것은 별로 없지만,
채널 하나를 굳이 만들어서 재작업 하도록 만들고 싶진 않았습니다. 그래서 고민한 결과 내린 결론으로…
최종 칼라 픽셀을 체크한 후 RGB를 더해서 0.1 (10%) 아래 색이면 검은색으로 간주하고 포그 연산을 건너뛰어 버리는 방식.
if ((finalColor.r+finalColor.g+finalColor.b)<=0.1f)
{
finalColor1 = finalColor;
}
else
{
finalColor1.rgb = lerp( finalColor.rgb, g_fogcolor.rgb, FogDot.x );
}
그냥 검은 색으로 갈수록 포그 색의 연산을 줄이는 방식으로 계산해도 심플할 것 같은데, (사실 그게 완벽합니다. 이대로라면 알리이싱처럼 약한 외각 포그색이 나타날 수도 있거든요)
그냥 컷아웃 시켜버렸습니다. 포그 연산 문제는 카메라에서 멀어질수록 많이 나타나는데, 멀어지면 알리아싱 효과가 어느 정도 있더라도 안보이게 되고 카메라 근접 시키면 포그가 없어져서 안보이게 되니까요.
그리고 결과물은 예상대로 . 잇힝.


여기서 궁금한 점.
검은색과 가까운지를 알고 싶어서 RGB를 더하는 꼼수를 부렸습니다만 이거 말고 명도값을 제대로 받아오는 방법은 없을까요? 어딘가에서 본 것 같은데…