기본 콘텐츠로 건너뛰기

[펌] DX에서 포토샵 블랜딩 모드 구현하기자료/Article


오랜만에 개발 관련 글을 쓰는 것 같다... 그동안 디자인 관련 글들만 써왔는데.. 이번엔 본업인 플밍 관련 글을 쓸까 한다.. 사실 디자인적인 얘기는 비전문가라 해도 쉽게 이해할 수 있지만 프로그래밍은 그러지를 못해서 잘 쓰지 않기로 했지만, 이번에는 그다지 어려운 것도 아니고, 포토샵을 다루는 사람이라면 재미있게 볼 수 도 있을 것 같아 쓰게 되었다.

이 글은 DirectX로 포토샵 블랜딩 모드를 구현하는 것을 보여주며, 본인도 정리하는 입장으로 쓰고 있는지라.. 약간 모자를 수도 있다. 그럴때는 과감히 리플~! 달기 바란다.  % --> .

PhotoShop BlendMode with DX
DirectX로 포토샵 블랜딩 모드 구현하기
사실 DX로 포토샵의 모든 블랜딩 모드를 구현할 수는 없으며, 일부만이지만 실무에서 자주 쓰는 블랜딩 모드를 구현하게 될 것이다. 블랜딩 모드를 설명하기 위해 2가지 이미지를 준비했다.

hDziHcy.jpg (200×150)
ZHwybDf.jpg (200×150)
Background ImageLayer Image
Multiply
설명(Description):
대상색과 원본색을 곱한다.

수식(Formula):
Result = SC * DC

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR );
uMtUy4d.jpg (200×150)
Screen
설명(Description):
Mulitiply 모드랑 반대되는 모드가 바로 Screen 모드다. 원본, 대상 색의 반전시킨다음 곱한다.

수식(Formula):
Result = 1 - ( 1 - SC ) * ( 1 - DC )

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
RV9yM7z.jpg (200×150)
Darken
설명(Description):
원본, 대상 색을 비교해 어두운 색만 표현한다.

수식(Formula):
Result = MIN( SC, DC )

DX 블랜딩 모드(DX Blending Mode):

SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_MIN );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
CKcvRoG.jpg (200×150)
Lighten
설명(Description):
원본, 대상 색을 비교해 밝은 색만 표현한다.

수식(Formula):
Result = MAX( SC, DC )

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_MAX );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
JyaTqum.jpg (200×150)
Additive
설명(Description):
원본, 대상 색을 더한다. 기본적인 블랜딩 모드다.

수식(Formula):
Result = SC + DC

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
TaIbbJe.jpg (200×150)

댓글

이 블로그의 인기 게시물

입체각이란?

원본으로 이동 소요유   (2002-09-26 09:02:19) 흠~ 그 동네에서도 나오는 모양이군요. 입체각을 이해하기 위해서는 빛을 예로드는 것이 편리합니다. 랜턴을 안개낀 날 밤에 비추면 빛의 세기는 거리에 따라 제곱분에 일로 감소합니다. 그러나 그 렌턴으로부터 나온 빛이 일정거리에서 차지하는 면적은 거리의 제곱에 비례하여 넓어집니다. 이때 변하지 않는 양은 (빛의 흡수가 없다면) 빛의 총에너지량과 또하나가 랜턴에서 나오는 빛이 만드는 원뿔의 각도입니다. 즉 이 빛원뿔을 따라가다 보면 거리에 따라 퍼지는 정도, 즉 단위면적당 빛의 에너지는 거리의 제곱에 반비레하지만, 이 빛이 통과하는 표면의 넓이는 거리의 제곱에 비례하여 커집니다. 소요유   (2002-09-26 09:07:51) 따라서 빛과 같이 직진성을 갖는 양의 3차원적인 '방사'는 이 빛원뿔 내부의 각도로 나타내면 편리하게 됩니다. 이 '원뿔'의 각도를 입체각으로 정의하게됩니다. 입체각은 위에 설명하였듯이 거리에 따라 변하지 않는 양으로 정의하게 됩니다. 즉 차원이 없는 양이됩니다. 입체각= (어느거리에서의 면적)/(거리의 제곱). 소요유   (2002-09-26 09:09:43) 반지름이 R인 구의 표면의 면적은 4 pi R^2이되므로 구의 입체각 = 4 pi R^2 / R^2 = 4 pi (steradian) 이 됩니다. 천칠이   (2002-09-26 09:31:02) 간혹 기존의 개념과 비교해서 생각하면 도움이 되는 경우도 있죠. 평면각을 생각해보시기 바랍니다. 원에서 부채꼴을 하나 조각내서 떼어왔다고 보면 그 중심각이 우리가 부르는 평면각과 마찬가지이죠. 이 평면각은 호의 길이에 비례하므로 우리가 라디안이라고 부르는 단위가 쓰입니다. 입체각은 말그대로 이것을 입체로 확대시킨 개념입니다. 구에서 "원뿔" 모양을 잘라냈다고 봤을 때 그 중심의 "입체각"은 곧 구면 원뿔...

bitnami Redmine 백업 및 복원

1. Bitnami 매니저 툴에서 phpMyAdmin으로 접속해서 해당(bitnami_redmine) 데이터베이스를 내보내기합니다(MySQL dump로 자동화 해도 됩니다). 2. \apps\redmine\htdocs\files 폴더에 있는 파일을 압축하여 별도 보관합니다. ** 아래는 참조 내용입니다. 원본 웹사이트 주소 : http://redkim14.blogspot.kr/2016/05/redmine.html Redmine - 레드마인 데이터 백업 및 복원 * Bitnami Redmine 2.6.x 버전을 기준으로 합니다. * 백업  - 레드마인 설치 폴더로 이동  - apps/redmine/htdocs/config/database.yml 파일을 메모장으로 열어 database,    username, password 내용을 확인 합니다.  - 레드마인 설치 루트 폴더에서 use_redmine.bat 실행합니다.  - 커맨드 창에서 mysqldump -u [username] -p [database] > redmine_backup.sql을    입력하고 엔터를 치고 password를 입력합니다.  - redmine_backup.sql 파일로 데이터 베이스가 백업됩니다.  - \apps\redmine\htdocs\files 폴더에 있는 파일을 압축하여 별도 보관합니다. * 복원  - 레드마인 설치 후 설치 폴더로 이동 합니다.  - 데이터 베이스 백업 파일을 레드마인 루트 폴더에 복사합니다.  - \apps\redmine\htdocs\files 폴더에 별도 압축한 파일을 풀어 복사합니다.  - apps/redmine/htdocs/config/database.yml 파일을 메모장으로 열어 database,    username, password 내용을 확인 합니다. ...

Direct3D11 - Intrinsic Functions 내장 함수

Intrinsic Functions 내장 함수 다음은 HLSL이 기본 제공하는 함수들과 관련 설명들입니다. 우선 HLSL 5.0(D3D11)에서 추가된 함수들입니다. 이 함수들에 대한 자료는 아직 매우 빈약한 편이어서 차츰 업데이트하는 방식을 택하겠습니다. 또, 새로 도입이 되긴 했지만 Vetex/Pixel/Geometry shader 어디에서도 아직 사용할 수 없는 함수들도 있습니다. 이런 함수들 역시 사용가능하게 되고 참고할 수 있을 때 업데이트하는 방식을 취할까 합니다. 1. AllMemoryBarrier()     모든 메모리 Access가 끝날 때까지그룹 내의 모든 쓰레드들의 실행을 막는다. 2. AllMemoryBarrierWithGroupSync()     모든 메모리 Access가 끝나고 모든 쓰레드들이 이 함수 지점까지 도달할    때까지그룹 내의 모든 쓰레드들의 실행을 막는다. 3. DeviceMemoryBarrier()    모든 디바이스 메모리 Access가 끝날 때까지그룹 내의 모든 쓰레드들의 실행을 막는다. 4. DeviceMemoryBarrierWithGroupSync()    모든 디바이스 메모리 Access가 끝나고 모든 쓰레드들이 이 함수 지점까지 도달할    때까지그룹 내의 모든 쓰레드들의 실행을 막는다. 5. GroupMemoryBarrier    그룹 메모리 Access가 끝날 때까지그룹 내의 모든 쓰레드들의 실행을 막는다. 6. GroupMemoryBarrierWithGroupSync     모든 그룹 메모리 Access가 끝나고 모든 쓰레드들이 이 함수 지점까지 도달할    때까지그룹 내의 모든 쓰레드들의 실행을 막는다. 7. dst:   두 벡터 간의 거리(distance)를 구한...