tag:blogger.com,1999:blog-5281384917275132568.post7033798706215090931..comments2022-12-12T20:50:45.605+09:00Comments on 블라인드 렌더러: [포프의 쉐이더 입문강좌] 03. 텍스처매핑 Part 1Pope Kimhttp://www.blogger.com/profile/03943401839650233842noreply@blogger.comBlogger24125tag:blogger.com,1999:blog-5281384917275132568.post-15929562361374138212015-09-18T00:57:54.217+09:002015-09-18T00:57:54.217+09:00정말 감사해요. 정말 감사해요. Anonymoushttps://www.blogger.com/profile/18054147925419285880noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-80334078135527984602013-06-27T16:59:28.951+09:002013-06-27T16:59:28.951+09:00빠른 답변 감사드립니다.^^빠른 답변 감사드립니다.^^Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-54675178395069252312013-06-27T03:35:06.348+09:002013-06-27T03:35:06.348+09:00설명은 이미 그 뒤에 바로 괄호안에 넣어놨어요. 이렇게 "(픽셀의 위치가 정점과 ...설명은 이미 그 뒤에 바로 괄호안에 넣어놨어요. 이렇게 "(픽셀의 위치가 정점과 일치하는 경우에는 UV 좌표가 같습니다.)" 그리고 그 아래 보간 설명도 그 설명이구요.<br /><br />한마디로 정점바로 위에 있는 픽셀이 아니라면 정점의 UV좌표와 같은 좌표는 없고.. 각 정점까지의 거리에 따라 그 중간값이 나온단 이야기였습니다.Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-78596378470909611892013-06-26T21:36:23.823+09:002013-06-26T21:36:23.823+09:00픽셀의 UV 좌표는 정점의 UV 좌표와도 다른 것이 대부분입니다.<<< 죄...픽셀의 UV 좌표는 정점의 UV 좌표와도 다른 것이 대부분입니다.<<< 죄송합니다 . 이거 무슨 뜻인지 모르겠어요. 어케 다르다는 건지 쉽게 설명 부탁 드립니다.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-3015132918108020842013-03-03T05:29:56.921+09:002013-03-03T05:29:56.921+09:00작성자가 댓글을 삭제했습니다.초보자https://www.blogger.com/profile/02495365026529617464noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-80422131997141996372013-02-16T21:12:57.401+09:002013-02-16T21:12:57.401+09:00답변 정말 감사합니다. 덜렁대는 성격이라 몇 번을 읽었는데도 내용에 대해서 오해했나 봅니다...답변 정말 감사합니다. 덜렁대는 성격이라 몇 번을 읽었는데도 내용에 대해서 오해했나 봅니다. 공간변환에 관한 이야기가 생각나서 "아 그거 directx에서도 하잖아! 그럼 그걸로 그냥 떼우자!" 하면서 상상의 나래를 펼쳤네요...<br /><br />여기에 질문하지 않았다면 혼자서 며 칠밤을 새우면서 삽질을 했을 거에요. 답변을 보고 대강 감을 잡았습니다. 감사해요.초보자https://www.blogger.com/profile/02495365026529617464noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-72067825246813999672013-02-15T22:56:02.610+09:002013-02-15T22:56:02.610+09:00일단 쓴소리 부터 시작한 뒤, 답글을 달겠습니다.
0) 쓴소리
질문을 2개 해주셨는데 질...일단 쓴소리 부터 시작한 뒤, 답글을 달겠습니다.<br /><br />0) 쓴소리<br />질문을 2개 해주셨는데 질문 1번에 대한 이야기입니다.<br /><br />보통 질문하시는 분들의 질문을 읽어보면 내용을 잘 이해하셨는지 기초가 잡히셨는지가 보입니다. '초보자'님은 아직 이 책의 내용을(특히 앞부분) 이해하지 못하신걸로 보입니다. 특히 제1장과 제2장을 다시 한번 읽어보시라고 권해드리고 싶네요. <br /><br />1) 정점쉐이더<br />여전히 필요합니다. 정점쉐이더가 하는일은 공간의 변환이니까요. 월드에 있는 위치나 회전에 따라 월드공간변환이 필요할수도 아닐수도 있지만(아닌 경우는 이미 지형의 모든 정점이 월드공간에 있다고 가정할떄...) 그래도 여전히 카메라의 위치나 투영방식에 따른 공간 변환이 필요합니다.<br /><br />(물론 DX의 fixed 파이프라인에 의존하는 법도 있지만 이건 어차피 더이상 사용하지 않을놈이고 속도도 더 느리므로 무시하겠습니다..)<br /><br />이해가 안되시면 제1장 및 제2장을 다시 읽어보세요~<br /><br />2) DrawSubset함수..<br />D3DX로 시작하는 함수들 혹은 D3DX로 시작하는 클래스의 멤버함수들은 내부적으로 D3D함수들을 호출합니다. DrawSubset함수도 내부적으로는 4가지 함수를 호출합니다.<br /><br />a) 인덱스 버퍼 셋<br />b) 버텍스 버퍼 셋<br />c) 버텍스 declaration 셋<br />d) DrawIndexedPrim 함수 호출<br /><br />이 함수들을 직접 호출해주시면 drawsubset이랑 동일한 일을 하실수 있습니다. 자세한 내용은 D3D SDK 문서를 참조하시구요.<br /><br />Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-76846900429454019682013-02-15T11:31:40.936+09:002013-02-15T11:31:40.936+09:00안녕하세요. 기초적인 부분부터 쉐이더에 대해 차근차근 공부하고 있어요. 카툰렌더링까지 보고...안녕하세요. 기초적인 부분부터 쉐이더에 대해 차근차근 공부하고 있어요. 카툰렌더링까지 보고서 이제 제가 만들 게임에 넣어보고 싶어서 조금 해봤는데요, 약간의 고민이 생겼습니다.<br /><br />제가 최종적으로 만들고 싶은 것은 쉐이더를 이용해서 높이맵에 텍스쳐를 입히는 건데요, 이 높이맵의 정점들은 프로그램 시작 시에 높이맵텍스쳐를 읽어서 프로그램상에서 만들려고 합니다. 3dmax를 잘 다루지 못해서, 모델은 만들 수가 없어서요. 그런데 이렇게 된다면 정점쉐이더를 사용하지 않아도 될 것 같아요. 픽셀쉐이더만 필요하게 되는데, 이런 경우엔 쉐이더 프로그래밍을 어떻게 해줘야 하나요? 정점쉐이더는 작성하지 않고 픽셀쉐이더만 작성해도 괜찮은지 궁금합니다. <br /><br />다른 한 가지는 directx상에서 불러올 때 렌더링을 어떻게 해야 할지 모르겠어요. 모델링된 것을 그리는 것이 아니라서 DrawPrimitive를 호출해야 할텐데, 그냥 이 함수를 예제처럼 DrawSubset대신에 호출해주면 되는지 알고 싶어요. 답변 기다릴게요~초보자https://www.blogger.com/profile/02495365026529617464noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-4107600177717147142012-01-30T14:13:09.730+09:002012-01-30T14:13:09.730+09:00여러가지 정보를 넣으려고 하기 때문이에요.. 메쉬에 UV좌표를 두개 이상 써줄 수도 있거든...여러가지 정보를 넣으려고 하기 때문이에요.. 메쉬에 UV좌표를 두개 이상 써줄 수도 있거든요. 예를 들어 diffuse하고 normal텍스처에 사용하는 UV좌표와 라이트맵에 쓰는 uv좌표가 다르면 정점마다 UV좌표를 두개씩 넣어줘야 하죠.<br /><br />그럼 diffuse하고 normal에 쓰는 uv좌표는 TEXCOORD0에 넣고 라이트맵에 쓰는 UV 좌표는 TEXCOORD1에 넣는거죠. 위치는 POSITION 0 1 2 3 가 있는지는 잘 모르겠네요. (있을지도 모르는데 안써봐서..^^) <br /><br />TEXCOORD도 숫자 안붙이면 TEXCOORD0과 같을거에요.<br /><br />(제가 질문하신 분의 배경이 정확히 어떤지 몰라서 그냥 아티스트 기준으로 설명드렸는데 이해가 안되셨다면 다시 질문주세요.)Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-5522352995180927372012-01-30T13:59:40.306+09:002012-01-30T13:59:40.306+09:00질문에 앞서 강좌정말 잘 보고 있습니다. 이해가 정말 잘 되는거 같습니다.
그런데 궁금한게...질문에 앞서 강좌정말 잘 보고 있습니다. 이해가 정말 잘 되는거 같습니다.<br />그런데 궁금한게 하나 있습니다.<br />POSITION, POSITION0, POSITION1, POSITION2... , TEXCCOORD, TEXCCOORD0, TEXCCOORD1, TEXCCOORD2 ...<br />이렇게 여러가지가 있던데 왜 0,1,2,3,4.. 이런식으로 구분을 해놓은 건가요?<br />그리고 그냥 POSITION 처럼 번호 안붙이고 쓰기도 하던데 이부분이 잘 이해가 안되네요Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-82438639030164969732012-01-12T21:59:05.959+09:002012-01-12T21:59:05.959+09:00음 어렵네요..ㅜ,ㅜ음 어렵네요..ㅜ,ㅜProghttps://www.blogger.com/profile/01296692529176285295noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-61749713320644066802012-01-08T17:23:38.874+09:002012-01-08T17:23:38.874+09:00@PROGOFJM: 모두다 픽셀쉐이더 하나에서 해주면 됩니다... 즉 이런식
float4...@PROGOFJM: 모두다 픽셀쉐이더 하나에서 해주면 됩니다... 즉 이런식<br /><br />float4 pixelshader(...)<br />{<br /> float4 outColor = //일반적인 조명계산 등등을 한다.<br /> return calcFog(outColor.rgb); // 포그를 적용한 뒤 반환한다.<br />}Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-10009249819669228282012-01-08T02:43:31.173+09:002012-01-08T02:43:31.173+09:00오~ 감사 합니다. 더 알고 싶은 것이 있는데요. 지금 쉐이더 스키닝을 적용하고, Fog효...오~ 감사 합니다. 더 알고 싶은 것이 있는데요. 지금 쉐이더 스키닝을 적용하고, Fog효과를 쉐이더로 구현해서 적용하려고 합니다. 궁금한게 A라는 스키닝 쉐이더 effect를 만들고 B라는 안개 쉐이더 Effect를 만들었습니다. <br />적용을 할려고 하는데 어떤것을 먼저 해야 하나요? 지금 이것때문에 골치가 아프네요. B_fog쉐이더로 A를 감쌌더니 이상하게 캐릭터에 새 하얀 색만 나오네요...<br /><br /><br />쉐이더 입문자라 너무 모르는게 많아 이렇게 질문드립니다.<br />어쨌든 시맨틱이라는것을 알게되어 감솨합니다.~Proghttps://www.blogger.com/profile/01296692529176285295noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-60453000924870660472012-01-06T03:37:53.449+09:002012-01-06T03:37:53.449+09:00@ASUMEGA: 아 참고로 POSITION정보는 정점정보에 반드시 들어있어야 하니까.. ...@ASUMEGA: 아 참고로 POSITION정보는 정점정보에 반드시 들어있어야 하니까.. float4 t라고 하고 시맨틱 안붙여준건 그냥 위치를 읽어올거 같다고 추측만..... -_-Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-79102507343517630622012-01-06T03:35:41.553+09:002012-01-06T03:35:41.553+09:00@ASUMEGA: 그래요? 그렇게도 되요? 전 그냥 struct 를 정의하고 시맨틱을 지정...@ASUMEGA: 그래요? 그렇게도 되요? 전 그냥 struct 를 정의하고 시맨틱을 지정해주거든요 위에서 본것 처럼... 뭐 제가 ASUMEGA님이 보여주신 함수처럼 인자를 안전해줘서 확실하진 않지만 아마 시맨틱 대로 될꺼에요...<br /><br />그럼 조금 자세한 설명...<br /><br />일단 버텍스 버퍼라고 하면 그냥 버텍스 정보 n개가 들어있는 배열이거든요. 그냥 메모리 덩어리죠. 그럼 그 안에서 어디에 위치정보가 들어있고 어디에 텍스처 좌표 정보가 들어있을까?.... 하드웨어는 그걸 몰라요. 그냥 메모리니까.. 그래서 그걸 정의해 줘야 하는데, 그 때 쓰는게 바로 시맨틱이에요. DX를 예를 들면 정점선언(vertex declaration)를 통해 정의하죠(DX9 전엔 FVF라는 게 있었는데 결국 이것도 Vertex Declartion을 통해 표현됨). vertex declaration정의할 때 대충 이런 식의 정보를 전달해줘요.<br /><br />첫번째 정보: POSITION, float3 타입, 오프셋 0 바이트<br />두번째 정보: TEXCCOORD0, float2 타입. 오프셋 12 바이트<br />세번째 정보: NORMAL, float3 타입. 오프셋 20 바이트.<br /><br />따라서 DX는 이 정보를 보고.. "아 이 메모리 덩어리에서 12번째 바이트가 텍스처좌표 구나." 라는 걸 아는 거죠... 위에서 보여드린 POSITION TEXCOORD0 NORMAL 등이 시맨틱이라고 하는 건데.. 쉐이더에서 시맨틱을 써서 변수를 불러오면 하드웨어가 알아서 저 메모리 위치에 있는 값을 전달해주는 겁니다. (따라서 DX에 잘못된 Vertex Declaration을 넣어주면 변수값이 다 틀리게 되죠 ㅎㅎㅎ)Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-39859092093900214152012-01-05T23:20:16.824+09:002012-01-05T23:20:16.824+09:00안녕하세요! 궁금한점이 있어서 이렇게 글 남깁니다.
쉐이더 함수에서 VS_OUT VS (f...안녕하세요! 궁금한점이 있어서 이렇게 글 남깁니다.<br />쉐이더 함수에서 VS_OUT VS (float4 t, TEXCOORD0 tx)<br />{<br />}<br />이런식으로 받아 왔을때 t라는것과 tx라는 것을 우리가 흔히 쓰는 일반 함수처럼 써서 보내지 않았는데 어떻게 저 값들을 알 수 있는건가요? 궁금합니다.Proghttps://www.blogger.com/profile/01296692529176285295noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-44248023935314032762012-01-03T09:37:03.890+09:002012-01-03T09:37:03.890+09:00글 잘읽고있습니다.하나하나따라가며 알아가는게 정말재밌고 정말 감사합니다. 많은 도움이 되는...글 잘읽고있습니다.하나하나따라가며 알아가는게 정말재밌고 정말 감사합니다. 많은 도움이 되는것같습니다.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-23301878343767994702011-12-31T02:23:10.603+09:002011-12-31T02:23:10.603+09:00@kingof: Directx에서 둘다 지원을 하는 이유는 역사적인 이유때문입니다. 그리고...@kingof: Directx에서 둘다 지원을 하는 이유는 역사적인 이유때문입니다. 그리고 사실 이제는 프로그램 가능한 쉐이더만 지원됩니다.<br /><br />처음 DirectX가 나왔을때는 프로그램 가능한 쉐이더(programmable shader)란 놈이 없었습니다. 화면에 무언가를 그리려면 위에서 말씀해주신 것처럼 D3D에서 다 정해줘야 했지요. 이걸 고정함수 파이프라인(fixed function pipeline)이라고 했습니다. D3D에서 지원해주는 테크닉만 쓸 수 있었거든요. 그게 바로 한 8년전쯤 게임 보면 다 그놈이 그놈같아 보이는 이유입니다. 물론 게이머들이나 게임프로그래머들이 좀더 색다른 비주얼을 원했겠지요?<br /><br />그래서 새로 등장한게 프로그램 가능한 쉐이더(programmable shader)인데 이걸 요즘 보통 쉐이더 쉐이더라고 부르는 놈입니다. 쉐이더의 장점은 프로그래머 맘대로 최종결과를 주물러 줄 수 있다. 고로, 비주얼이 다른 게임과 다르게 만들 수 있고 새로운 기법이 나오면 MS사에서 그 기법을 고정함수에 추가해주길 기다릴 필요없이 곧바로 구현할 수 있다. 정도입니다...<br /><br />현재 쉐이더를 지원하는 그래픽 카드에서 고정함수도 지원하는 것처럼 보이지만 사실 내부적으로는 쉐이더를 돌려서 고정함수 파이프라인도 처리한다고 알고 있습니다. (이게 바로 위에서 프로그램가능한 쉐이더만 지원된다고 말씀드린 이유).<br /><br />그리고 DirectX 11 에서는 아예 고정함수들이 사라진걸로 알고있습니다. (무조건 쉐이더임 이제)Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-59795454310910190242011-12-31T00:29:56.371+09:002011-12-31T00:29:56.371+09:00주옥같은 글 잘 읽고 있습니다. 감사합니다.
이해 안되는 내용은 여러번 읽어 이젠 내용을 ...주옥같은 글 잘 읽고 있습니다. 감사합니다.<br />이해 안되는 내용은 여러번 읽어 이젠 내용을 어느 정도 이해하고 있습니다.<br />그런데 읽으면서 드는 궁금한 내용은 shader 와 d3dx 의 역활에 대해 감이 잘 안옵니다. 개별적으론 shader 는 픽셀의 색갈은 정하여 주고 d3dx 는 메쉬를 그리거나 그래픽으로 부터 넘어온 메쉬 정보를 그려주는 거라 생각 되어지는데 그렇다면 d3dx 는 메쉬의 색을 정할 수 없는지 궁금합니다. 또한 메쉬에 텍스처를 입히는 과정 또한 shader 없이도 가능한거 같지만 shader 에서 텍스처의 uv 좌표로 메쉬의 텍스쳐를 정하는 거 같아 혼란스럽 습니다. 위 랜더 파이프 그림에서 d3dx 는 어떤 관계가 있는지 알려주시면 정말 많은 도음이 될거 같습니다. 감사합니다kingofhttps://www.blogger.com/profile/05222907193729714494noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-40862133693178645342011-12-17T04:09:24.788+09:002011-12-17T04:09:24.788+09:00@익명: 여기까지 잘 따라오셨다면 끝까지 하시는데 무리가 없으시겠는데요?@익명: 여기까지 잘 따라오셨다면 끝까지 하시는데 무리가 없으시겠는데요?Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-31749226326601596162011-12-16T10:01:57.409+09:002011-12-16T10:01:57.409+09:00잘 보고 있습니다.잘 보고 있습니다.Junioshttp://junios.netnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-12798801388657861852011-12-13T09:48:14.180+09:002011-12-13T09:48:14.180+09:00고맙습니다. ^^
여기까지 무사히 따라 왔습니다.~~~고맙습니다. ^^<br /><br />여기까지 무사히 따라 왔습니다.~~~Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-34471580726537419852011-12-12T13:02:24.525+09:002011-12-12T13:02:24.525+09:00열심히하고 있습니다.열심히하고 있습니다.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-36496539561366302462011-12-12T12:21:49.789+09:002011-12-12T12:21:49.789+09:00포프님 감사합니다.. 잘 보고있습니다..^^포프님 감사합니다.. 잘 보고있습니다..^^쭈쭈바https://www.blogger.com/profile/14960067992597649423noreply@blogger.com