https://red-nose-cousin.tistory.com/2?category=874877 

 

OPCUA 통신 쉽게 알기 - 1편 OPC 란 무엇인가

 OPCUA 서버와 클라이언트를 개발하고 나서 관련 강의를 들으러 다니다 보니 실제 현장의 요구 만큼의 교육을 받기가 힘들어서 블로그에 글을 남겨보려고 합니다. 이런 분들에게 도움이 되길 바

red-nose-cousin.tistory.com

'PC제어프로그램 > 기타지식' 카테고리의 다른 글

포트포워딩 잘 정리된 사이트  (0) 2022.08.03

 

※ 애니메이션 사이트

https://www.mixamo.com/#/

 

Mixamo

 

www.mixamo.com

무료로 쓸만한 애니메이션이 잘 갖춰져 있다.

※ 3D 모델링 사이트

https://sketchfab.com/feed

 

Log in to your Sketchfab account

 

sketchfab.com

생각보다 무료로 쓸만한 모델링이 많다. 유료도 있다.

※ 참고

https://sketchfab.com/feed

 

Log in to your Sketchfab account

 

sketchfab.com

https://www.blender.org/

 

blender.org - Home of the Blender project - Free and Open 3D Creation Software

The Freedom to Create

www.blender.org

 

▶ 문제점1

      -모델링 자료가 필요해서 모델링을 Sketchfab 에서 다운을 받았다. FBX 확장자로 다운을 받았다.

      - 블렌더를 실행하여 모델을 불러왔다. 다음과 같이 나왔다.

 

       - 머터리얼에 이미지가 없었다. 찾아보니 하는 방법이 있는거 같았는데 복잡했다.

 

      ▶ 해결방안

           - Sketchfab에서 .gltf 확장자로 받았다.

       - 모델은 다른거지만 텍스쳐는 입혀졌다.

 

▶ 문제점2

      - 문제점 1을 해결하고 이제 유니티에 모델을 옮기기 위해 Diffuse Shader만 남기고 Obj로 뽑았다.

필요없는거 다 지우고 Diffuse Shader만 연결함.

      - Obj 파일을 뽑으면 mtl파일도 나온다. 그거랑 같이 .gltf 확장자받은 파일에 보면 이미지를 유니티에 넣었다.

(Add shader 빼고도 Diffuse랑  Material output 이랑 바로 연결해도 된다.)

.mtl 와 .obj 파일

Diffuse Shader만 남기고 지웠기 때문에 Diffuse로 되어있는 이미지만 복사를 했다.     

      - 유니티에 넣음. 하지만 OBJ 모델의 머터리얼에 텍스쳐가 입혀져 있지 않았다. 찾다보니 .mtl 확장자에 텍스쳐 재질을 구분하는 텍스트가 없었다.

 

       - map_Kd "이미지" 로 텍스트를 추가했다. 여기서 Kd는 Diffuse(기본색상) 재질을 나타낸다. map_Kd "이미지"는 Diffuse 재질을 "이미지"로 쓰겠다는 것이다. 그 뒤 유니티에 다시 적용했다.

 

              - 하나만 적용 됬다. 뭐지 뭐지 하다가 혹시나 싶어서 문뜩 생각이 났다.

                 설마 텍스트 읽는 순서가 위에서 아래로 읽는건가 싶었다. 그래서  다음과 같이 해봤다.

 

      ▶ 해결방안1

     - 적용이 되었다. 역시 순서대로 읽는 것이였다.

 

      ▶ 해결방안2

     - 블렌더 높은 버전에 Principled BSDF를 추가하면 이미지가 있는 전체경로가 포함 되는 map_Kd가 만들어진다. 이미지를 .mtl파일과 같은 경로에 넣고 전체경로만 삭제해주면 된다. 아래와 같다.

# obj , mtl참고자료

https://timeboxstory.tistory.com/87

 

[Unity] .mtl file 이란?

✔ .MTL File 이란? obj , mtl 파일 속성 정리 .mtl 파일은 Material Library File 이다. 3D 모델링에서 .obj로 Export를 하게되면 .obj와 .mtl파일을 볼 수 있다. mtl파일은 obj에서 사용되는 재질 속성들에 대한..

timeboxstory.tistory.com

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=leonhong&logNo=20176225259 

 

3d object 파일 구조

주석 : #으로 시작하는 한 라인 ( 예시 : # this is a comment ) object 파일은 크게 *.obj, *.mtl, 텍스쳐...

blog.naver.com

 

'Blender' 카테고리의 다른 글

이미지만 따와서 3D 만들어 주는 웹사이트  (0) 2022.10.26

※ 본 작업은 유니티 스크립트로 함

 

- 다음과 같이 배열 코딩을 했었다.

 

- 다음과 같은 문제점이 나왔다.

 

- 디버깅을 해보았다.

- 배열들이 다 Null이였다. 동적 할당 했는데 왜 다 null이지? 라고 생각했다.  찾다보니 Class는 참조형식이라는 걸 알게된다. 그래서 동적할당을 해서 초기화를 하면 abc의 참조하는 주소가 null이여서  null인 주소의 멤버변수에 접근하려고 하니 NullReferenceException이 뜨는 거였다.

 

- 다음과 같이 바꿧다.

바뀐 내용

- List만 쓰다보니 배열 사용법을 잘 몰랐다. 나중에 비슷하게 쓸일 있으면 쓸 수 있도록 블로그에 기록을 한다.

https://lamanus.kr/59/comment-page-2?comment=8339#comment-8339 

 

포트 포워딩이란?

과거에는 집에 보통 컴퓨터 한 대만 사용하고 스마트폰이 없었기 때문에 인터넷을 설치한다고 하더라도 모뎀만 있으면 컴퓨터에 인터넷을 연결할 수 있었습니다. 최근 들어서는 가족 구성원 한

lamanus.kr

'PC제어프로그램 > 기타지식' 카테고리의 다른 글

OPC-UA 개념익히기 좋은 사이트  (0) 2022.08.12

※ DirectXMath 란?

   - WIndow 8 이상에서 DirectX3D 응용 프로그램을 위한 표준 3차원 수학 라이브러리이다. Windows SDK의 일부인 이 라이브러리는 SSE2(Streaming SIMD Extensions 2) 명령 집합을 활용한다.

 

   ▶  SIMD (single instruction multiple data)란?

        하나의 명령으로 여러데이터를 처리한다.

   ▶  SSE2(Streaming SIMD Extensions 2)란?

        128비트 너비의 SIMD레지스터를 이용해서 float, int와 같은 32비트 데이터 4개를 한꺼번에 처리한다. 

        그래서 벡터계산을 아주 유용하게 할 수 있다.

# 참고자료

https://m.blog.naver.com/fs0608/221650925743

 

SIMD (Single Instruction Multiple Data)에 대한 집중탐구!

안녕하세요~! 오늘은 파수테크 블로그 첫번째 시간으로 SIMD (Single Instruction Multiple Data)...

blog.naver.com

https://www.secmem.org/blog/2022/02/15/Intel-Intrinsics-Guide/   

 

Intel Intrinsics(SIMD) 가이드

1. Introduction 우리가 주로 사용하는 Intel(AMD) 아키텍쳐에서는 SIMD(Single Instruction Multiple Data)를 이용할 수 있습니다. SIMD는 말 뜻 그대로 하나의 명령을 통해 여러 값의 연산을 동시에 처리하는 명령

www.secmem.org

 

   ▶  X86(32bit)에서 SSE2 사용 할때 주의사항

         - SSE2를 활성화 해야된다. x64는 상관없이 다된다.

           ( 프로젝트속성 > 구성 속성 > C/C++ > 코드 생성 > 고급 명령 집합 사용)

 

※ 사용해보기.(여기에선 visual studio community 2019로 작업한다.)

       ▶  빈 프로젝트를 만든다.

     

     ▶  C++ 소스파일을 만든다

 

     ▶  여기서 X84로 사용해서 SSE2사용 체크를 한다.       

 

     ▶  DirectXMath.h 추가 및 DirectX 네임스페이스 사용

        여기까지 됬으면 사용할 준비는 끝났다.

 

※  벡터 형식들 알아보기

         ▶  XMVECTOR 

               - DirectXMath에서 핵심 벡터 형식은 SIMD 하드웨어 레지스터에 대응되는 XMVECTOR이다.

                 이 XMVECTOR는 128비트의 크기의 32비트 부동소수점 값 4개로 구성되어있고 한번 명령

                  으로 4개를 처리할 수 있다. 정의는 다음과 같다.

 

               typedef __m128 XMVECTOR;

 

                  SIMD의 장점을 쓰려면 벡터가 XMVECTOR 형식으로 바껴야 된다.

                  이 형식으로 3차원 ,2차원 값을 처리할 수 있다. 쓰이지 않는 성분들은 0으로 설정하면 된다.

 

               - XMVECTOR는 16바이트에 경계에서 정합(alignment) 되어야 한다. 그래서 자동으로 정합이

               일어나는 지역변수나 전역변수에서 사용된다.

 

         ▶  XMFLOAT2 , XMFLOAT3 , XMFLOAT4

               - 벡터 성분들을 담는 구조체이다. 클래스 멤버 자료형으로 사용되는 걸 권장된다.

                 1) FLOAT2 : 2차원 벡터값을 담는 구조체 

                 2) FLOAT3 : 3차원 벡터 값을 담는 구조체

                 3) FLOAT4 : 4차원 벡터 값을 담는 구조체

                

                FLOAT2 , FLOAT3, FLOAT4 벡터 연산은 가능하다. 하지만 SIMD의 장점을 사용해서 계산하는

               것이 효과적이기 때문에 XMVECTOR 형식으로 변환해야 한다.

 

         ▶  XMLoadFloat2 , XMLoadFloat3 , XMLoadFloat4

               - XMLoadFloat는 XMFLOAT -> XMVECTOR에 변환해서 저장을 할 수 있게 도와주는 함수이다. 

                이것을 XMFLOAT -> XMVECTOR에 적재한다고 표현한다.

 

         ▶  XMStoreFloat2 , XMStoreFloat3 , XMStoreFloat4

               - XMStoreFloat는 XMVECTOR -> XMFLOAT에 변환해서 저장을 할 수 있게 도와주는 함수이다.

                이것을 XMVECTOR-> XMFLOAT에 저장한다고 표현한다.

 

         ▶  XMVectorGetX , XMVectorGetY , XMVectorGetZ , XMVectorGetW                

               -  이것은 XMVECTOR의 특정 성분만 읽고 싶을 때 사용하는 함수들이다.

         ▶  XMVectorSetX , XMVectorSetY , XMVectorSetZ , XMVectorSetW                

               -  이것은 XMVECTOR의 특정 성분만 변경하고 싶을 때 사용하는 함수들이다.

 

           # 실제 사용       

                   

 

                # 정리

               1. 지역변수나 전역변수에는 XMVECTOR를 사용한다.

               2. 클래스 자료 멤버에 XMFLOAT2 , XMFLOAT3 , XMFLOAT4를 사용한다.

               3. 계산을 수행하기 전에 적재(Load) 함수들을 이용해서 XMFLOAT 을 XMVECTOR로 변환한다.

               4. XMVECTOR 인스턴스들로 계산을 수행한다.

               5. 저장 함수들을 이용해서 XMVECTOR를 XMFLOAT으로 변환한다.

 

 

 

 

'Directx12 > DirectX 내용' 카테고리의 다른 글

DirectXMath 라이브러리의 벡터(3)  (0) 2022.08.15
DirectXMath 라이브러리의 벡터(2)  (0) 2022.08.14

+ Recent posts