한때 Dual Quaternion으로 통일하던 시절이 있었다. 하지만 LBS를 DQBS으로 convert 한부분 중에 팔꿈치가 꽈배기로 나오는 부분이 있어서 결국 제거하였다. 최근, Skinning 을 분리하여서 MikuViewer/Shaders/MikuModelVS.hlsli MikuViewer/Shaders/MikuModel_Skin_VS.hlsl 이거나 PmxModelVS.hlsl PmdModelVS.hlsl 와 같은, 분기문에서 벗어났기에 MMD의 4종류 skinning을 vertex shader에서 분기문으로 처리해보기로 하였다. 애초에 QDEF 가 Dual Quaternion 으로 보이는데 이것만 되었으면 이런 작업이 필요없지만 MMD에 넣으면 뻗기 때문에 LBS로 때우다가 안되는 부분에 SQ..
발단은 여러 이유가 있지만, MMD의 model type은 PMD/PMX가 존재한다. 또한 x 파일도 컨버팅해서 들어간다 문제는 이 2개의 skinning 방식이 서로 다른데도 동일한 shader를 탄다는 것이다 Effect라 불리는 쉐이더를 까보면 skinning 을 하지 않고 vertex/normal 이 그냥 들어온다 Direct 9 기반이므로 software skinning을 썻을 거라 추측한다 아니면 이래저래 우회를 했거나; MMDAI의 경우 PPL 을 타거나, OpenCL 을 태우는 거 같다 MMD는 4가지 skinning type이 있으므로 속도만 괜찮으면 해당 분기도 태울 수 있을 것 같았다. CPU 프로그래밍은 간단하다 TaskManager::parallel_for(0, position.s..
Software skinning을 5분만에 짜고 그 느림을 감당하지 못하여 Stream Out 한 걸 돌려 쓰도록 바꾸었다 아예 너무 틀리면 debugger 가 작동을 중지하기 대략 눈으로 버그 잡고 드디어 결과가 놔왔는데 저 vertex와 edge는 왜 저런건지 debugger를 이용하니 float3 pos = BoneSkinning( input.position, input.boneWeight, input.boneID ); float3 normal = BoneSkinning( input.position, input.boneWeight, input.boneID ); 위와 같은 오타는 쉽게 잡을 수 있었다 문제는 튀어나온 vertex 15분 동안 씨름한 끝에 문제의 vertex의 id는 알 수 있었다. f..
모든 Matrix에 통달한 사람은 해당하지 않지만, 왜 이런 고통을 자처하느냐가 의문이고 장점이라곤 소스 코드 복붙 방지에 크나큰 도움이 된다 정도? 이상한 matrix 하드코딩해서 reverse z 해서 두면 주석 없이는 되돌리기가 너무 힘들다. 이 miniEngine 저자는 openGL 와 방향성을 같게 하기 위해 이랬는지 몰라도 크나큰 해악을 소스코드에 풀어놨다 결국 이런 어중간한 코드는 OpenGL과 DirectX의 모든 튜토리얼의 코드를 엿먹인다. 모든 튜토리얼의 matrix를 right hand - reverse z로 돌려야하는데 꽤 귀찮은 작업니다.
7월에 시도한 CSM 이 성공했다면, LiSPSM 을 시도할 일이없었을 것이고 모두 행복했을 것 같다. LiSPSM은 과거 기술로 그냥 지나가는 길에 해볼려고 했는 건데 안되서 오기로 진행하였다 현재 와서는 LiSPSM + CSM 이런식으로 붙여쓴다. MMD 의 LiSPM+CSM shader는 shadow mapping 만으로 아래와 같은 결과를 내준다 캐릭도 다르고 빛의 방향도 다른 Excellent shadow의 결과는 아래와 같다 이걸 왜 해야하냐면, MMD 의 shader 중 일부가 normal 값은 specular 판단하는데만 쓰고 음영을 shadow 에서 가져오는 넘이있기 때문이다 저게 죄다 shadow 그냥 shadow mapping을 돌리면
하도 안되서 NVIDIA 소스를 실행가능하게 만들어서 비교했다. miniEngine 의 수학 소스중 plane extraction 및 몇 부분이 틀려서 고쳤다. 이 넘의 소스는 실행안하는 수학코드에 함정이 왜케 많은지 그런데 특정 각도에서 그림자가 사라진다. cos 값이 1이 나온것도 아니고 이유를 알수가 없다. 결국 포기하고 저자의 reference 코드로 바꿔보았다. nvidia는 Light space clipping 을 안하고 대신 aabb box 의 z near/ z far 만 가져와서 unit cube (scaleTranslateToFit) 으로 화면을 한정시키는데 반해 저자의 코드는 장면 AABB와 camera frustum 을 cliiping 후 light volume 영역을 추가로 더한다 ..
우선, left hand 로 바꾸고 light matrix 만 구해서 orthographic 을 사용하는 버전을 테스트 해보자 그냥 임의의 min/max box DirectX::XMMatrixOrthographicOffCenterLH float2 TransTexCoord = ShadowPos.xy; if (!any( saturate( TransTexCoord ) != TransTexCoord )) { ShadowPos = saturate( ShadowPos ); float3 shadowPosDX = ddx_fine( ShadowPos ); float3 shadowPosDY = ddy_fine( ShadowPos ); saturate 없으면 ground 에서 깊이가 1.0 초과하는 값이 나와서 항상 실패하..
(1)을 Editor 가 날려먹었다. 슬프다 http://egloos.zum.com/x66vx/v/3808794 https://www.youtube.com/watch?v=sUfBCjMYy50 http://gpgstudy.com/forum/viewtopic.php?t=4984 http://www.realtimeshadows.com/sites/default/files/sig2013-course-hardshadows_0.pdf https://users.cg.tuwien.ac.at/scherzer/files/papers/LispSM_survey.pdf https://github.com/Hongtae/DKDemo/blob/5a19a431d35f53cb8c263b61c846e17a6c246cd2/DemoApp/Sc..
적용한 쉐이더 자체에 aliasing 효과가 너무 커서 anti 적용을 해야하는 지경에 이르렀다. 맥북이라 해상도로 커버 칠수 있을 것 같았는데 https://arstechnica.com/civis/viewtopic.php?f=6&t=1169317 필요는 하지만, 그럭저럭인 phong 쪽 shader 반드시 필요한 현재 shader (rim + outline + 기타 해석불가능한 효과) 문제는 이 SMAA 가 순순히 붙지 않았다. 우선, 공식 문서가 먼가 친절하게 설명은하는데 멀해야되는지 알아먹기 쉽지 않다. FXAA도 그렇더만, openGL 같은거 지원하려고 하다가 더위먹었는지 그나마 reference 데모 프로그램을 지원해서 안되면 비교해보세요 라고 한건 정말 고마운편. Linear Color edg..
- Total
- Today
- Yesterday