tag:blogger.com,1999:blog-5281384917275132568.post6601654211599377217..comments2022-12-12T20:50:45.605+09:00Comments on 블라인드 렌더러: [포프의 쉐이더 입문강좌] 04. 기초적인 조명쉐이더 Part 2Pope Kimhttp://www.blogger.com/profile/03943401839650233842noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-5281384917275132568.post-64732521894846736442021-02-28T22:22:27.578+09:002021-02-28T22:22:27.578+09:00안녕하세요. 책으로 공부하다가, 검은 화면만 출력되어 포프님 블로그까지 들어왔습니다. 혹시...안녕하세요. 책으로 공부하다가, 검은 화면만 출력되어 포프님 블로그까지 들어왔습니다. 혹시나 하여, 포프님 코드를 긁어서 붙여넣었는데도 검은 화면이 출력됩니다. 프로젝트 세팅은 완벽하게 맞춰놨는데(gWorldMatrix, gViewMatrix,gProjectionMatrix의 시맨틱 지정과 gWorldLightPosition의 위치와, Stream Mapping의 Normal과 Float3지정)왜 그런지 알 수가 없네요 ㅠ 무슨 문제가 있을까요?ㅠㅠAnonymoushttps://www.blogger.com/profile/13929539234842277114noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-84803695428809347862018-11-02T04:29:32.025+09:002018-11-02T04:29:32.025+09:00포프님 안녕하세요! 청강대에서 선생님이 올려주신 강좌 보면서 열심히 공부중인 학생입니다!
...포프님 안녕하세요! 청강대에서 선생님이 올려주신 강좌 보면서 열심히 공부중인 학생입니다!<br />HLSL에서도 주석기능을 지원하긴 하는거 같은데 한글 주석은 길이 제한이 있나요?<br />자꾸 오류가 떠서 뭐가 문제인가 한참 찾다가 한글로 적어둔 주석을 지워봤는데 코드가 정상적으로 작동하더라구요<br /><br />한글 주석과 영문 주석에 특별한 차이가 있을까요?Anonymoushttps://www.blogger.com/profile/16703363725696181711noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-31117394938241951462017-07-28T09:19:55.930+09:002017-07-28T09:19:55.930+09:00코드를 안보여주시면 답을 다를수가 없는데.... 괄호 {} 를 몇개 놓치신건 아닌지 궁금합...코드를 안보여주시면 답을 다를수가 없는데.... 괄호 {} 를 몇개 놓치신건 아닌지 궁금합니다Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-85359847418874465172017-05-24T18:38:04.082+09:002017-05-24T18:38:04.082+09:00안녕하세요? 저도 이부분을 따라해보다가 계속 에러가 발생해서 질문드립니다
아래와 같은 에러...안녕하세요? 저도 이부분을 따라해보다가 계속 에러가 발생해서 질문드립니다<br />아래와 같은 에러가 나는데요..어디서 잘못된건지 알수가 없네요<br />도움 주시면 감사하겠습니다<br /><br />Compiling vertex shader API(D3D) /../Lighting/Pass 0/Vertex Shader/ <br /> COMPILE ERROR: API(D3D) /../Lighting/Pass 0/Vertex Shader/ C:\Program Files (x86)\AMD\RenderMonkey 1.82\memory(10,10): error X3000: syntax error: unexpected end of file<br />RENDERING ERROR(s): <br /> Vertex shader 'Vertex Shader' failed to compile in pass 'Pass 0'. See Output window for details<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-63957405668060850442016-11-11T05:01:50.761+09:002016-11-11T05:01:50.761+09:00코드만 보고 설명 드립니다.
float3 lightDir = Output.Position...코드만 보고 설명 드립니다.<br /><br />float3 lightDir = Output.Position.xyz-gWorldLightPosition.xyz;<br /><br />이계산을 할 때 output.position이 projection 공간에 있습니다. world공간에 있어야 하는데요. 월드 매트릭스 곱한다음에 곧바로 위 계산을 해주셔야 합니다Anonymoushttps://www.blogger.com/profile/08519021710618445233noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-47260995032964183002016-09-23T10:32:33.359+09:002016-09-23T10:32:33.359+09:00문제해결에 도움을 주신다면 감사하겠습니다.문제해결에 도움을 주신다면 감사하겠습니다.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-76117585203579272832016-09-23T10:27:31.700+09:002016-09-23T10:27:31.700+09:00아직 완전히 이해는 못했지만 무작정 따라써가면서 이해하고있는 고3입니다.
텍스쳐를 입히는 ...아직 완전히 이해는 못했지만 무작정 따라써가면서 이해하고있는 고3입니다.<br />텍스쳐를 입히는 부분 까지는 완벽했으나 조명에서 문제가 생기네요<br /><br />float4x4 matViewProjection;<br />float4x4 gViewMatrix,gProjectionMatrix,gWorldMatrix;<br />float4 gWorldLightPosition;<br /><br />struct VS_INPUT <br />{<br /> float4 Position : POSITION0;<br /> float2 mTexCoord : TEXCOORD0;<br /> float3 mNormal : NORMAL;<br /><br /> <br />};<br /><br />struct VS_OUTPUT <br />{<br /> float4 Position : POSITION0;<br /> float2 mTexCoord : TEXCOORD0;<br /> float3 mDiffuse : TEXCOORD1;<br />};<br /><br />VS_OUTPUT vs_main( VS_INPUT Input )<br />{<br /> VS_OUTPUT Output;<br /><br /> Output.Position = mul(Input.Position, gViewMatrix);<br /> Output.Position = mul(Output.Position, gWorldMatrix);<br /> Output.Position = mul(Output.Position, gProjectionMatrix);<br /> <br /> Output.mTexCoord = Input.mTexCoord;<br /> <br /> float3 lightDir = Output.Position.xyz-gWorldLightPosition.xyz;<br /> <br /> lightDir = normalize(lightDir);<br /> <br /> float3 worldNormal = mul(Input.mNormal, (float3x3)gWorldMatrix);<br /><br /> worldNormal = normalize(worldNormal);<br /><br /> Output.mDiffuse = dot(-lightDir, worldNormal);<br /><br /> return( Output );<br /> <br />}<br /><br /><br /><br />-----------------------------------------------------<br /><br />sampler2D DiffuseSampler;<br />struct PS_INPUT<br />{<br /> float2 mTexCoord : TEXCOORD0;<br /> float3 mDiffuse : TEXCOORD1;<br />};<br />float4 ps_main(PS_INPUT Input) : COLOR0<br />{ <br />float3 diffuse = saturate(Input.mDiffuse);<br /> float4 albedo =tex2D(DiffuseSampler,Input.mTexCoord); <br /> return albedo,float4(diffuse,1);<br /> <br />}<br /><br /><br /><br />프로젝트 세팅은 완전히 맞춰둔 상태입니다. 문제는 과정을 완벽히 카피한듯 한데 화면상에 출력되는건 검은화면뿐이네요..Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-49306077521600488822015-07-19T18:16:43.133+09:002015-07-19T18:16:43.133+09:00질문한 내용이 모두 본문에 있네요.
정독한번 더 하시면 좋을 것 같습니다.질문한 내용이 모두 본문에 있네요.<br />정독한번 더 하시면 좋을 것 같습니다.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-91961650744661889442014-12-14T20:17:53.808+09:002014-12-14T20:17:53.808+09:00강좌(=책)으로 공부하다 갑자기 질문이 생겨 글 올립니다. Diffuse는 float3형이...강좌(=책)으로 공부하다 갑자기 질문이 생겨 글 올립니다. Diffuse는 float3형이고, TEXCOORD는 float2형인데 어떻게 서로 다른 데이터형을 시멘틱으로 쓰는 건지요? (정확히는 서로 다른 형(type)에 대해 시멘틱을 쓰면 어떻게 작동되는 건지 궁금합니다.) 또 같은 질문이 될 것 같은데, 정점의 위치정보는 float3로 충분한데 어째서 float4를 할당하는 것인지요?fscreenhttp://blog.naver.com/fscreennoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-45562436739704403722014-06-29T02:36:14.999+09:002014-06-29T02:36:14.999+09:00아래 링크에 올리시면 됩니다.
http://kblog.popekim.com/p/blog-...아래 링크에 올리시면 됩니다.<br /><br />http://kblog.popekim.com/p/blog-page_1.htmlAnonymoushttps://www.blogger.com/profile/08519021710618445233noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-79773694313025492072014-06-28T18:47:11.601+09:002014-06-28T18:47:11.601+09:00덕분에 열심히 공부 잘 하고 있습니다. 혹시, 7장 이후 강좌에 대한 질문은 어디에 올리면...덕분에 열심히 공부 잘 하고 있습니다. 혹시, 7장 이후 강좌에 대한 질문은 어디에 올리면 되나요? 책에만있는 내용얘기입니다. Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-11472433663944245892013-11-24T05:44:49.669+09:002013-11-24T05:44:49.669+09:00오래되서 잘 기억이 안나지만... 0을 넘어가 minus가 되는 부분에서 좀 차이가 보였던...오래되서 잘 기억이 안나지만... 0을 넘어가 minus가 되는 부분에서 좀 차이가 보였던거 같습니다. -0.1과 0.1을 보간해서 saturate하는것과 -0.1을 0으로 clamp한뒤 0.1과 보간하는 건 값 차이가 있거든요. 특히 사람눈이 어두운 색상의 미세한 변화를 더 잘 감지하니까... 그쪽에서 잘 보였던걸로 기억합니다..(오래되서 기억이 안나요 ㅎㅎ)<br /><br />그리고 눈에 보이는 차이가 미묘하더래도 COLOR0을 굳이 잘 사용안하므로 사용하지 말자는 의미에서도 TEXCOORD1을 일부로 쓴겁니다.Anonymoushttps://www.blogger.com/profile/08519021710618445233noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-39945344763943538472013-11-17T00:59:09.155+09:002013-11-17T00:59:09.155+09:00강좌 잘보고 있습니다. 책에 보면 정점 데이터의 아웃풋 데이터
float3 mDiffuse...강좌 잘보고 있습니다. 책에 보면 정점 데이터의 아웃풋 데이터<br />float3 mDiffuse : TEXCOORD1; 이 부분에서<br />COLOR0 시맨틱을 사용하지 않는 이유는 정점셰이더 2.0규격에서 COLOR시맨틱 사용시 변수의 값이<br />0에서 1사이로 클램프되기 때문에 보간기를 거쳐 픽셀 셰이더에서 넘겨받으면 조금 오차가 있다 라고 되어있습니다. <br />하지만 결국 saturate 함수에서 클램프를 하므로 똑같은것 아닌가요? 그러면 saturate할 필요도 없고요. 실제로 COLOR시맨틱으로 해봐도 결과는 눈으로 확인하면 거의 같던데. 실제로 어떤 차이가 있을까요?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-7357012123829623612013-08-16T12:57:56.303+09:002013-08-16T12:57:56.303+09:00예전에 xbox 360 개발자 포럼에서 읽은거라 직접 글을 복사해서 보여드리진 못하구요.....예전에 xbox 360 개발자 포럼에서 읽은거라 직접 글을 복사해서 보여드리진 못하구요... gpu자체 레지스터에서 값을 읽어올때 flag하나만 설정하는 것만으로 별도의 연산없이 0~1사이로 saturate() 된 값을 가져올 수 있다고 합니다.<br /><br />한마디로 레지스터에서 값을 읽어올때 이런 저런 flag을 설정하는 걸 지원하는데 그중 하나가 0~1사이의 값을 가져오는걸로 알고 있습니다.. (마찬가지로 +값을 -값으로 바꾸는 것도 성능에 영향을 안미친다고 알고 있습니다.)Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-63226071025550420282013-08-16T09:38:21.029+09:002013-08-16T09:38:21.029+09:00saturate 함수가 성능에 영향을 미치지 않는 함수라고 되어 있는데요. 어떻게 구현되어...saturate 함수가 성능에 영향을 미치지 않는 함수라고 되어 있는데요. 어떻게 구현되어 있길래 그게 가능한지 궁금합니다. 검색을 해봐도 안 나오네요. Unknownhttps://www.blogger.com/profile/05912400893097131763noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-25357945730986609782013-02-25T22:14:06.790+09:002013-02-25T22:14:06.790+09:00기준은... 없습니다. -_-;;;
렌더몽키에서 시맨틱 연결이란게.. 렌더몽키안에서 자체...기준은... 없습니다. -_-;;;<br /><br />렌더몽키에서 시맨틱 연결이란게.. 렌더몽키안에서 자체적으로 지원하는 정보가 있으면 시맨틱으로 제공을 하는거고 없으면 안하는 겁니다 ㅎㅎㅎ 한마디로 주로 사용하는 정보들을 이미 시맨틱을 제공한다고 보시면 되는 겁니다.<br /><br />Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-53131442389643144702013-02-25T20:43:58.105+09:002013-02-25T20:43:58.105+09:00변수 선언 방법에 대해 질문좀 드릴께요.
월드,뷰,투영 행렬 변수들은 workspace -...변수 선언 방법에 대해 질문좀 드릴께요.<br />월드,뷰,투영 행렬 변수들은 workspace -> add variable을 통해 추가시키고<br />variable sementic으로 시멘틱을 연결 해줬는데 gWorldLightPosition 변수는 <br />workspace에서 만든것 까진 똑같은데 시멘틱 연결 같은건 안해줬어요. 이게 이해가 안가네요.<br />시멘틱을 연결해야 하는 기준같은게 있으면 설명좀 부탁드릴께요.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-81859582858450563022012-07-31T02:35:17.415+09:002012-07-31T02:35:17.415+09:00저도 예전에 스칼라로 듣고.. 무슨 ... 여자이름 스칼라인줄 알았다죠.. .ㅎㅎ 영어용어...저도 예전에 스칼라로 듣고.. 무슨 ... 여자이름 스칼라인줄 알았다죠.. .ㅎㅎ 영어용어 쓰는건 상관이 없는데.. 좀 의미해석은 해줬으면 좋겠어요.Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-59281164587323201262012-07-30T01:48:54.846+09:002012-07-30T01:48:54.846+09:00스케일러...
드디어 뜻이 이해가 가는군요.
요즘은 모르겠지만 20년 전쯤에
교과서에는 ...스케일러...<br />드디어 뜻이 이해가 가는군요.<br />요즘은 모르겠지만 20년 전쯤에 <br />교과서에는 스칼라로 나왔었죠.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-91111074104025288562012-02-24T03:36:07.384+09:002012-02-24T03:36:07.384+09:00픽셀쉐이더는 화면속에 있는 픽셀에만 실행됩니다. 따라서 화면 밖(상하좌우로 밖... 뷰포트...픽셀쉐이더는 화면속에 있는 픽셀에만 실행됩니다. 따라서 화면 밖(상하좌우로 밖... 뷰포트 밖이겠군요)에 있는 픽셀에 대해서는 픽셀쉐이더가 실행되지 않습니다.<br /><br />질문하신대로 다른 물체에 가려진 경우에는 어떤 물체를 먼저 그리냐에 따라 다릅니다. 예를 들어 뒤에 있는 물체를 먼저 그린 뒤, 앞에 있는 물체를 그리면 픽셀을 두번 그리게 됩니다. 그러나 앞에 있는 물체를 먼저 그린 뒤, 뒤에 있는 물체를 그리면 깊이버퍼라는 놈이 뒤에있는 픽셀을 그냥 무시해줍니다.<br /><br />이걸 overdraw(덮쳐그리기?)라고 하는데... 최적화하고 관련이 있죠. overdraw가 적을수록 속도가 빠르겠죠? 그래서 불투명 물체를 그릴때는 화면에 가까이있는것부터 그려줘야합니다. (front-to-back 소팅이라고도 하죠) (물론 깊이버퍼를 꺼버리면 그냥 다 덥쳐그립니다.. 결과가 올바르지 않을뿐... 뒤에 있는게 앞에 있는 물체위를 덥쳐버린다던가... 아..덥친데.. 야해~ -_-)<br /><br />뒷면 같은 경우는... 그래픽 카드에서 뒷면추리기(backface culling)을 통해 삼각형 자체를 제거해주는게 일반적이므로 픽셀이 존재하지도 않습니다. (물론 뒷면추리기를 꺼줄수도 있습니다)<br /><br />뭐든간에 이런 저런 기법을 통해 덥쳐그리는 일이 적게 만드는게 GPU 최적화의 기본입니다.Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-89698326691184169612012-02-23T23:27:11.975+09:002012-02-23T23:27:11.975+09:00쉽게 이해가 잘 되는 강의 감사합니다.
근데 난반사광을 계산할 때 정점 쉐이더에서 난반사광...쉽게 이해가 잘 되는 강의 감사합니다.<br />근데 난반사광을 계산할 때 정점 쉐이더에서 난반사광을 구하는 것에 의문이 있습니다. 쉐이더는 그러면 화면에 표시되지 않을 정점도 난반사광을 계산합니까? 예를 들면 다른 물체에 가려져서 표현되지 않을 물체이거나 물체의 뒷면 그리고 뷰포트(? 용어가 익숙지 않습니다 ㅠㅠ) 밖에 있는 물체들 말이에요.<br />만약 이러한 정점들도 계산이 된다면 픽셀 쉐이더보다 더 많은 계산이 필요한 가능성은 전혀 없습니까?(픽셀이 앵간히 많긴하나 봅니다 ㄷㄷ)게으른아해https://www.blogger.com/profile/09905019176175852824noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-34052121821870322792012-01-30T17:35:55.532+09:002012-01-30T17:35:55.532+09:00Stream Mapping은 메모리에 있는 정점버퍼와 정접쉐이더의 입력변수 간의 관계를 매...Stream Mapping은 메모리에 있는 정점버퍼와 정접쉐이더의 입력변수 간의 관계를 매핑해주는 거에요.. 메모리에 있는 정점버퍼는 그냥 바이너리 정보에 지나지 않거든요. 그 메모리를 어떻게 해석해야할지를 정해주는게 스트림 매핑이죠. <br /><br />정점쉐이더가 리턴하는 정보는 이미 정점버퍼안에 있는 정보와 다르니 스트림 매핑이 필요없죠. 그 대신 정점쉐이더에서 리턴하는 구조체와 픽셀쉐이더가 입력으로 받는 구조체를 같게해서 픽셀쉐이더가 정점쉐이더에서 리턴된 을 어떻게 해석해야하는지 표현해주는 거에요.<br /><br />제1장에서 쉐이더 파이프라인 간략히 설명할 때 보여드린 그림을 다시 한번 보시면 도움이 될지도...<br /><br /><br />즉,<br /><br />정점버퍼 <---- 스트림 매핑 -----> 정점쉐이더 입력데이터<br />정점쉐이더 출력데이터 <------- VS_OUTPUT 구조체 -----> 픽셀쉐이더 입력데이터<br /><br />이렇게 이해해주시면 됩니다.Pope Kimhttps://www.blogger.com/profile/03943401839650233842noreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-18540363419036956022012-01-30T15:21:44.057+09:002012-01-30T15:21:44.057+09:00좋은 강좌 써 주셔서 감사합니다.
제가 잘 이해를 못하는 부분이 있어 질문 드립니다.
s...좋은 강좌 써 주셔서 감사합니다.<br />제가 잘 이해를 못하는 부분이 있어 질문 드립니다.<br /><br />struct VS_INPUT<br />{<br /> float3 mNormal : NORMAL; --> StreamMapping 에서 NORMAL 을 float3로 추가하는데요.<br />};<br /><br />struct VS_OUTPUT<br />{<br /> float3 mDiffuse : TEXCOORD1; --> 요건 StreamMapping 에 왜 추가 안하나요?<br />};FireFlynoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-72717663347759758372012-01-05T11:36:09.282+09:002012-01-05T11:36:09.282+09:00감사합니다 ^^ 으왕~감사합니다 ^^ 으왕~Silverchimenoreply@blogger.comtag:blogger.com,1999:blog-5281384917275132568.post-17779727309590906312012-01-04T15:10:28.118+09:002012-01-04T15:10:28.118+09:00제가 오히려 감사드립니다. 좋은 강좌 계속 부탁드립니다. ^-^제가 오히려 감사드립니다. 좋은 강좌 계속 부탁드립니다. ^-^파란달https://www.blogger.com/profile/16827043747833065155noreply@blogger.com