CODEONWORT

동적 그림자 생성 수정판 본문

Season 1/플래시

동적 그림자 생성 수정판

codeonwort 2011. 9. 24. 08:33

원래 코드에서

if((other.r+other.g+other.b)/3.0 - (curr.r+curr.g+curr.b)/3.0 >= threshold){
    dst = shadow;
}else{
    dst = pixel4(0, 0, 0, 0);
}

지용호님 말대로 if문을 없애봤다

dst = shadow;
dst.a = (other.r+other.g+other.b-curr.r-curr.g-curr.b)*0.33 - threshold;
dst.a *= 512.0;

하지만 CPU 부하는 똑같다. rgb채널 가지고 짝짜꿍하는 줄이 문제인 것 같다.

3 Comments
  • 프로필사진 지돌스타 2011.09.24 20:44 이미 봤는지 모르겠지만
    http://williamjacobson.com/weblog/actionscript-3-vs-pixel-bender-on-cellual-automata/
    의 실험에서 보면 if문을 썼을때와 아닐때가 극명한 속도 차이를 보이더군요. 속도가 요하는 부분에서는 if를 되도록 없애는게 맞는 것 같습니다. 대신 수학적으로 if문을 대체하면 좋을 것 같고요.
  • 프로필사진 codeonwort 2011.09.25 06:07 신고 본문의 내용대로 if문을 없애고 계산으로 대체했지만 cpu 점유율에 별로 차이가 없었습니다. 코드를 어떻게 바꿔야 빨라질까요?
  • 프로필사진 지돌스타 2011.09.25 11:26 큰 이미지에 light변화를 주기적으로 프레임단위로 자동으로 바꿔주면서 FPS로 확인했을때 as3로 한것과 차이가 없나요?
    그리고 CPU점유율은 플래시에서 돌아가는 픽셀벤더가 어짜피 CPU를 쓴다는 것을 감안한다면 당연한 결과인 것 같습니다. 단지 as3에 비해 속도가 빠르고 스레드를 활용할 수 있다는 점에서 큰 장점이 있는것이 아닌가 생각합니다.
댓글쓰기 폼