[참고자료] 모니터 해상도 도표

Posted 2008/08/26 21:35, Filed under: 3D Programming
사용자 삽입 이미지

Leave a comment

 설명 - 플러그인을 개발할때 컴파일 후 매번 max를 키고 끄는 작업이 필요합니다. 이것을 이용하면 그런 불편을 제거 할 수 있습니다.

1. 랩퍼 파일을 다운 받습니다.

2. 압축을 해제 합니다.

3. .Net 2005 로 프로젝트를 변환합니다.

4. 스크린샷1 - 상자안에 라이브러리를 max sdk 가 설치된 폴더의 라이브러리로 교체합니다.

( 그냥 파일 추가로 하시면 됩니다. )

사용자 삽입 이미지

5. 스크린샷2 - 프로젝트 속성에서 C/C++ 일반 -> 추가포함 디렉터리역시 sdk가 깔린 위치로 변경합니다.

사용자 삽입 이미지

6. wrapperexp.cpp 파일에서 char *wrappedDll = "~"; 라고 되있는 곳을 자신의 랩퍼될 파일의 플러그인이 있는 곳과 이름으로 변경합니다.
주의점은 당연히 max의 plugin폴더가 아닌 곳으로 노출시켜야 하겠지요.

7. 스크린샷2 - C/C++ 아래쪽에 링커 부분이 있는데 여기에 랩퍼플러그인의 출력파일 폴더를 지정 할 수 있습니다. sdk폴더가 아닌 설치된 max/plugins 폴더로 변경해 주시면 됩니다.

8. 설정이 끝난후 자신의 플러그인의 출력폴더를 변경하고, max를 실행하면 콘솔화면이 잠시 출력된 뒤에 익스포트를 해보면 다음 화면과 같이 Wrapper(자신의 플러그인)이 나옵니다.

사용자 삽입 이미지



PluginWrappers.Zip



Leave a comment


파서를 직접 제작하신 분이라면, 문득 스키닝매쉬가 가지고 있는 뼈대 행렬을 구지 포함시켜야 하는가?

라는 생각을 한것은 아마도 저뿐만이 아닐겁니다. 에니메이션 행렬과 뼈대 행렬의 곱셈을 제거할 수 없

는가?... 결론을 내리자면, 제외 불가능입니다. 단순히 생각해서 뼈대행렬의 역행렬을 정점에 가중치로

곱해주는 방법을 떠올릴 수 있습니다. 버텍스의 영향을 주는 뼈가 한가지라면 이것은 물론 가능합니다.

( "스티칭" 에 경우입니다 ) 머리, 다리, 팔 등을 모두 토막내서 가지고 있다가 인형을 맞추면 모습을 복

원할 수 있습니다.. 그러나 한정점에 4개의 뼈가 영향을 줄때는( "스키닝" ) 이것을 억지로 한가지로 모

으는 일에 비유를 할 수 있습니다. 캔 로봇을 납작하게 찌그려트려서 부분부분 부위를 연결해도 그전의

모양은 나오지 않겠죠. 당연한 이치지만, 의심많은 제가 오랜시간 직접실험 해본결과 알아낸 결과입니다

ㅠ_ㅠ;

스키닝 매쉬를 읽어들일때 본래의 뼈대행렬정보(매트릭스, 혹은 벡터와 쿼터니온)를 포함시켜야 하고 에

니메이션 행렬곱셈 정점당(복수행렬곱)이 불가피 합니다. 이에 오프셋정점? 을 사용하는 방법을 생각해볼

수 있습니다. v1 * 'world, v2 * 'world, v3 * 'world, v4 * 'world 를 모두 미리 계산 해놓고 랜더링시에는

정점당 행렬곱셈 4번을 줄일수 있다는 얘깁니다. 이것은 매우 큰 이득임이 틀림 없습니다. 행렬이 16개의

float을 가지고 있지만, 오프셋벡터는 12개의 float이고 언뜻 보면 용량에서도 이득인듯 보이지만, 행렬은

뼈대갯수 예를들어 50개정도 만 있으면 되지만 오프셋정점은 정점마다 4개의 벡터가 필요함으로 저장공간이

너무 많이 필요하게 됩니다.


최근의 애플리케이션의 관점에서 보면 몇번의 실행연산을 추가하여 용량상의 이득을 보는 것이 최적화 하려다

실행파일크기 증가로 속도저하를 유발하는 것보다는 낳을 것이지만, 퍼포먼스를 중요시하는 게임같은 분야에서

는 충분히 토론과 연구분야가 될것입니다.


Leave a comment

라이트와 관련된 글

Posted 2007/06/03 12:26, Filed under: 3D Programming/Rendering


GPG 에서 글을 검색하던 중 아차 싶은 글이 눈에 띄었다.

일반적으로 "라이트" 라는 단어를 생각하면, 많은 사람들은 다음과 같이 생각합니다.

빛이 받는 부분은 밝아지고, (백색에 가까워진다.)
빛이 받지 않는 부분은 어두워진다 (검정색에 가까워진다.)

CG 홍보물이나 3D Studio MAX 의 라이트에 익숙한 개념인데.

하지만 Direct3D 의 기본 라이트로 위와 같은 너무 당연한 라이트를 구현하는것이 애매하네요.


1. MODULATE
MODULATE 는 곱셈입니다. 한가지 재미있는 사실이 많은 사람들이 곱셈이기 때문에
곱하면 곱할수록 숫자가 커진다고 생각하지만, 곱하면 곱할수록 숫자가 작아집니다.
0~1 사이값의 계산이기 때문에 빛이 최대로 받아야만 기본텍스춰의 색이 유지가 됩니다.

기본텍스춰보다 밝아지는경우는 없으며 오직 음영만 생깁니다.


2. ADD
ADD 는 덧셈입니다. 이 모드를 사용하면 밝아지는것까지는 가능하지만,
어두워지는것이 안됩니다. 사정없이 밝아지기만 하기 때문에
음영이 없습니다.

게다가 어떤존재가 "밝다" 고 느끼는것은 "실제 그 물체가 밝은것이 아니라 어두운부분과의 경계차가 심하다" 인데, 덧셈식의 특성상 모든 부분에 골고루 밝아지기 때문에

빛이 받았다기 보다는 "밀가루가 뿌려졌다" 로 느껴집니다.

3. 스펙큘러

스펙큘러의 경우 ADD 와 다를것이 없습니다. 단지 카메라에 영향을 받는다는 특성(장점도 단점도 아님). 이 있을뿐입니다.


4. ADD_SIGNED, ADD_SIGNED2X
아직까지 제가 사용해본적은 없습니다면,
공식 자체로는 "밝아진것과 어두워진것" 을 모두 표현할수 있습니다.


5. MODULATE2X

"밝아진것과 어두워진것" 을 나타내는 가장 나은방법중 하나입니다. 라이트컬러 0.5 를 기점으로 "밝아지는것 과 어두워지는것" 이 결정되며 또한 콘트라스트가 증가되어 보이는 부수적인 효과가 있습니다.

제가 그나마 가장 추천하고 싶은 방법입니다.
단점은 AMBIENT 값을 잘 조정해야 한다는점 정도.



출처 : http://www.gpgstudy.com/forum/viewtopic.php?t=4065&highlight=%BE%EE%B5%CE%BF%F6%C1%F6%B4%C2
작성자 : 심 형근


Leave a comment

쉐이딩에 대한 튜토리얼 그림

Posted 2007/05/31 11:35, Filed under: 3D Programming/Shader

MAX 툴때문에 질문을 올리려고 까페를 돌아다니다가 발견한 그림,
튜토리얼 그림이 마음에 들어서 (이해도쉬움) 카피해 보았다.
프로그래밍 책에도 이런 그림들이 있으면 얼마나 좋을까 ㅠ_ㅠ

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지


출처 : http://blog.naver.com/pointman79/140013217303

Leave a comment


1. 알파블랜딩

m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
m_pDevice->SetRenderState( D3DRS_SRCBLENDD3DBLEND_SRCALPHA );
m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );


사용자 삽입 이미지

오른쪽처럼 뒤쪽에 있는 매쉬부터 그려오면 문제가 없지만, 왼쪽그림처럼 앞쪽이 먼저그려진다면,
치명적인 결과를 불러 일으킨다!! ㅜ_ㅜ.




2. 알파테스트

m_pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_ALPHAREF,        0x08 );
m_pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );


사용자 삽입 이미지

알파블랜딩처럼 치명적인 위험은 전혀 없지만, 나무 가장자리가 도트수준으로 잘려 두드러져 보인다.
알파채널값은 0x08 로 설정되었고, 이값보다 크거나 같으면 텍셀을 출력하게 된다.


3. 알파블랜딩 + 알파테스트

m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
m_pDevice->SetRenderState( D3DRS_SRCBLENDD3DBLEND_SRCALPHA );
m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
m_pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_ALPHAREF,        0x08 );
m_pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );

사용자 삽입 이미지


사용자 삽입 이미지

정렬을 신경쓰지 않고 적절히 출력할수 있는 방법이나, 알파테스트로 잘려나가지 않은 부분에선(알파블랜딩)
위그림처럼 보는시점에 따라서 가장자리가 지저분해질 수 있다.



간단한 알파 데모

Leave a comment

[SHADER] Hemisphere lighting

Posted 2007/05/21 11:32, Filed under: 3D Programming/Shader

모델의 입출력에 맞게 커스텀된 FX파일

Leave a comment


Self Alpha Blending
*. 모델중 알파텍스처 포함 모델의 경우
: 캐랙터 모델에서조차 섬세한 모양의 부분은 매쉬형태가 아닌 단순한 평면에 알파 텍스쳐를 입히는
경우가 있다. (머리카락등의 경우)

a. 정상적인 렌더링의 경우
평면이 그대로 랜더링 되기때문에, 평면그대로가 묘사된다.

b. 알파블랜딩을 설정한 경우
모델내에서도 z값에 의해 뒷면이 잘려나가 안면등이 제대로 렌더링 되지 않을 수 있다.

c. 서브셋 정렬 + 알파블랜딩
알파텍스쳐 포함 서브셋과 그외 서브셋을 분리하여, 알파텍스쳐가 없는 서브셋을 먼저그린 후,
알파텍스쳐 포함 서브셋을 나중에 렌더링한다.
앞머리와 뒷머리가 모두 알파텍스쳐인 경우, 이 알파면이 겹치는 부분이 제대로 렌더링 되지 않는다.

d. 서브셋 정렬 + 알파 서브셋 카메라 정렬(거리) + 알파블랜딩
가장 완벽한 방법이나, 한 모델을 렌더링하는데 그 비용이 너무 많이 소요된다.


e. 서브셋 정렬 + 알파블랜딩 + ZWrite OFF + CULLMODE NONE
알파없는 서브셋을 먼저 그린후, Zwrite를 Off한다음 알파 서브셋을 렌더링한다.
알파면이 겹칠수 있으나, 적절한 결과물을 출력할 수 있다.

f. 알파블랜딩 + 알파테스트
알파테스트의 경우 가장자리가 두드러지게 잘려나가지만, 이 가장자리를 알파브랜딩
이 보완하는 방법이다. 알파면이 적을경우 이 방법도 좋을것 같다.

Leave a comment

빛의 색

Posted 2007/05/20 20:31, Filed under: 3D Programming/Shader
사용자 삽입 이미지
빛은 각기 다른 색 온도를 가지고 있습니다. 색 온도란 빛의 색감을 수치로 표현한 것으로 캘빈 온도(K) 라는 단위를 사용합니다.

보통 한낮의 태양광은 5500K의 색 온도 를 가지고 있으며 같은 태양광이라 하더라도 아침이나 저녁때의 색 온도는 한낮에 비해 낮습니다. 색 온도가 높을수록 파란색을 띠게 되며 낮을수록 붉은 색을 띠게 됩니다. 아울러 또 다른 광원인 형광등, 백열등, 촛불 등도 각기 다른 색 온도를 가지고 있습니다.

출처 : http://www.webmani.com/

Leave a comment

고러드 & 퐁 쉐이딩 용어 설명

Posted 2007/05/17 18:40, Filed under: 3D Programming/Shader
사용자 삽입 이미지사용자 삽입 이미지
고러드 쉐이딩
플렛 쉐이딩의 단점을 보완한 것으로 빛이 비춰지는 면들의 평균적인 명암을 계산해서 그것을 부드럽게 적용시켜주는 것으로 플렛 쉐이딩과는 달리 면과 면사이의 각을 감추어 준다.

이것은 좀더 부드러운 면을 만들어 주기는 하지만 명암이 평이해져 버리기 때문에 잘 사용하지 않으면 단조로운 이미지가 생성된다


고러드 쉐이딩(Gouraud Shading)
고러드 쉐이딩은 플랫 쉐이딩보다 약간 진보된 기술이다. 플랫 쉐이딩이 단지 하나의 라이트 값으로 전체 폴리곤을 적용하는 반면에 고러드 쉐이딩은 폴리곤의 각 위치에 고유 라이트 값을 주면서 폴리곤의 표면 전반에 부드럽게 평균적인 값을 줌으로서 3D 오브젝트에 더 많은 라이트 효과를 준다. 라이트 소스와 플랫 쉐이딩을 참고하라.

  이름에서 볼 수 있듯이 이는 한번에 세 꼭지점중 두 개의 색상 보정을 제안한 Gouraud에 의해 고안된 방법이다. 이 방법은 가중 평균을 사용하여 생성된 두 꼭지점 사이의 가장자리를 따라 색상을 결정하게 된다. 가중치는 선의 양끝을 계산하여 얻어진 점으로 부터의 거리에 대한 비율로 정해지게 된다. 또한, 색상 보정은 모서리상의 점 색상이 계산된후 전체 삼각형을 채우는데 적용된다.

ㄱ.인접 다각형들간의 표면 노말을 평균 계산하여 색상을 채우는 것
ㄴ.인접면 사이의 색상이 단계적 표현, 경계가 부드럽다



퐁 쉐이딩( Phong Shading )
고러드 쉐이딩에서는 하이라이트나 반사광을 표현할 수 없는데 이것을 가능하게 해주는 쉐이딩 기법. 이 기법은 사실 상당히 복잡한 계산이 필요하지만 게임에서 사용되는 것은 약간의 편법. 게임에서는 퐁 쉐이딩이 적용될 명암 단계를 미리 이미지화 해놓고 면의 각에 따라 만들어 둔 이미지 중 필요한 부분만을 사용. 원리 상으로는 고러드 쉐이딩 보다 2배정도 느리지만 효과는 대단하다.


Phong Shading 역시 Phong에 의해 제안된 방법으로 꼭지점 벡터 역시 전체 삼각형 내에서 보정되어지는 방법이다. 퐁 쉐이딩된 삼각형 내의 모든 점은 그 표면 표준 벡터의 방향으로 벡터의 방향을 이루게 된다. 그러므로, 조명 과정을 통해 삼각형 내의 모든 점들이 보다 정확한 색상을 가질 수 있도록 해준다.

ㄱ.고로드 셰이딩과 유사
ㄴ.정점들 사이의 표면 노말들을 하나의 표면 노말로 분해하여 면의 모든 픽셀에 대한 노말을 계산
ㄷ.고로드 셰이딩보다 정확한 곡면 셰이딩 가능
ㄹ.보다 사실적으로 표현 가능
ㅁ.3차원 물체의 셰이딩 기법으로 많이 사용
ㅂ.랜더링속도

출처 : http://cglink.co.kr/

Leave a comment


Recent Posts

  1. [참고자료] 모니터 해상도 도표
  2. [런타임에러] Expression: map/set it..
  3. *. 플러그인 랩퍼 사용하기 ( 3DS MAX..
  4. *. 스키닝 오프셋 벡터 [Offset Vecto..
  5. November 2007 DirectX SDK News

Recent Comments

  1. 관리자만 볼 수 있는 댓글입니다. 06/24

Recent Trackbacks

Calendar

«   2009/11   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

  1. Cafe24
  2. ForTheProgramming
  3. Tatter Tools
  4. 근석이
  5. 진호네

Site Stats

TOTAL 14477 HIT
TODAY 4 HIT
YESTERDAY 16 HIT
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.