πŸ“‚ Project/Paint the City

[Unity3D/VR] Tilt Brush, Open brush μ˜€ν”ˆ μ†ŒμŠ€λ₯Ό μ΄μš©ν•˜μ—¬ 3D νŽ˜μΈνŒ… κΈ°λŠ₯ κ΅¬ν˜„ν•˜κΈ°

0=2. 2022. 11. 25. 04:18

μ•ˆλ…•ν•˜μ„Έμš”. 'Paint the City(PTC)' ν”„λ‘œμ νŠΈλ₯Ό 개발 쀑인 VRain νŒ€μž…λ‹ˆλ‹€.
첫 ν¬μŠ€νŒ…μœΌλ‘œ Unityμ—μ„œ μ˜€ν”ˆ λΈŒλŸ¬μ‹œμ˜ μ˜€ν”ˆμ†ŒμŠ€λ₯Ό μ΄μš©ν•˜μ—¬ 3D νŽ˜μΈνŒ… κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 과정을 보여주렀고 ν•©λ‹ˆλ‹€.
 
ν”„λ‘œμ νŠΈμ— κ΄€ν•΄ κ°„λ‹¨νžˆ μ„€λͺ…λ“œλ¦¬μžλ©΄, PTCλŠ” '3D νŽ˜μΈνŒ… 기반 λ„μ‹œ μž¬μƒ 지원 ν”„λ‘œκ·Έλž¨'으둜, μ„ μ •λœ λ„μ‹œμ˜ λͺ¨λΈμ„ μ œκ³΅ν•˜μ—¬ μ‚¬μš©μžλ“€μ΄ VR κ³΅κ°„μ—μ„œ 그림을 그리게 ν•˜κ³ , μ‹€μ œ λ„μ‹œμ—μ„œ AR둜 μž‘ν’ˆμ„ κ΄€λžŒν•  수 있게 ν•˜λŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.
저희 νŒ€μ€ 'VR', 'AR', 'λ„μ‹œ λͺ¨λΈλ§'으둜 역할을 λ‚˜λˆ„μ—ˆκ³  μ €λŠ” VR을 λ‹΄λ‹Ήν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
VR κΈ°κΈ°λ‘œλŠ” Oculus Quest 2λ₯Ό μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.
 
ν”„λ‘œμ νŠΈμ—μ„œ 3D νŽ˜μΈνŒ… κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 'μ˜€ν”ˆ λΈŒλŸ¬μ‹œ(Open Brush)'의 μ˜€ν”ˆμ†ŒμŠ€λ₯Ό μ΄μš©ν•˜κ²Œ λ˜μ—ˆλŠ”λ°μš”. 
μ˜€ν”ˆ λΈŒλŸ¬μ‹œλŠ” κ΅¬κΈ€μ—μ„œ κ°œλ°œν•œ 3D νŽ˜μΈνŒ… 가상 ν˜„μ‹€ μ‘μš© ν”„λ‘œκ·Έλž¨μΈ 'ν‹ΈνŠΈ λΈŒλŸ¬μ‹œ(Tilt Brush)'의 μ˜€ν”ˆ μ†ŒμŠ€λ₯Ό μ΄μš©ν•˜μ—¬ λ§Œλ“€μ–΄μ§„ ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. 저희 ν”„λ‘œμ νŠΈμ˜ 주된 λ ˆνΌλŸ°μŠ€κ°€ ν‹ΈνŠΈ λΈŒλŸ¬μ‹œμ˜€κΈ° λ•Œλ¬Έμ— μ›λž˜λŠ” ν‹ΈνŠΈ λΈŒλŸ¬μ‹œμ˜ μ˜€ν”ˆμ†ŒμŠ€λ₯Ό μ‚¬μš©ν•  μ˜ˆμ •μ΄μ—ˆμŠ΅λ‹ˆλ‹€.
그런데 ν‹ΈνŠΈ λΈŒλŸ¬μ‹œμ˜ μœ λ‹ˆν‹° 에디터 버전이 2018 λ²„μ „μœΌλ‘œ μ΅œμ‹  μ—…λ°μ΄νŠΈ 사항듀이 λ°˜μ˜λ˜μ–΄ μžˆμ§€ μ•Šμ•„μ„œ 2021 버전이 반영된 μ˜€ν”ˆ λΈŒλŸ¬μ‹œλ₯Ό μ΄μš©ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
μ˜€ν”ˆ λΈŒλŸ¬μ‹œμ˜ μ˜€ν”ˆμ†ŒμŠ€λŠ” ν˜„μž¬λ„ 계속 μ—…λ°μ΄νŠΈ 되고 μžˆμŠ΅λ‹ˆλ‹€.
 
μ•„λž˜λŠ” ν‹ΈνŠΈ λΈŒλŸ¬μ‹œμ™€ μ˜€ν”ˆ λΈŒλŸ¬μ‹œμ˜ μ‚¬μš© μ˜μƒμž…λ‹ˆλ‹€.
 

https://www.youtube.com/watch?v=TckqNdrdbgk

https://www.youtube.com/watch?v=d5_D3sY8bDc 

 

μ΄λ ‡κ²Œ μ˜€ν”ˆ μ†ŒμŠ€κ°€ μžˆμ–΄μ„œ κΈ°λŠ₯ κ΅¬ν˜„μ΄ νŽΈλ¦¬ν•  거라 μƒκ°ν–ˆμ§€λ§Œ, μ‚¬μš© 방법에 κ΄€ν•œ 글은 μ„œμΉ­ν•΄λ³΄μ•„λ„ 거의 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.
그리고 μ˜€ν”ˆμ†ŒμŠ€λ‹ˆκΉŒ κ·Έλƒ₯ λ°”λ‘œ μ‚¬μš©ν•˜λ©΄ 될 쀄 μ•Œμ•˜μœΌλ‚˜ λ§Žμ€ λ¬Έμ œλ“€μ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€...
μžμž˜ν•œ 였λ₯˜κ°€ 정말 많이 λ°œμƒν•˜λŠ”λ° 원인을 μ°ΎκΈ° μ–΄λ €μš°λ‹ˆ, λΉ„μŠ·ν•œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄ 글을 μ°Έκ³ ν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€.
그리고 μ„€μΉ˜, λΉŒλ“œ μ‹œκ°„μ΄ 맀우 였래 κ±Έλ¦½λ‹ˆλ‹€. μΆ©λΆ„ν•œ μ‹œκ°„μ„ 두고 진행해야 ν•©λ‹ˆλ‹€.
 
그럼 본격적으둜 진행 과정을 μ μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.


진행 κ³Όμ •

GitHibμ—μ„œ μ˜€ν”ˆ μ†ŒμŠ€ 클둠

μ˜€ν”ˆ λΈŒλŸ¬μ‹œ μ˜€ν”ˆ μ†ŒμŠ€ GitHub 링크에 μ ‘μ†ν•©λ‹ˆλ‹€.
https://github.com/icosa-gallery/open-brush

 

GitHub - icosa-gallery/open-brush: Open Brush is the open source, community led evolution of Tilt Brush!

Open Brush is the open source, community led evolution of Tilt Brush! - GitHub - icosa-gallery/open-brush: Open Brush is the open source, community led evolution of Tilt Brush!

github.com

'fork'λ₯Ό ν΄λ¦­ν•˜μ—¬ 본인의 λ ˆν¬μ§€ν† λ¦¬λ‘œ μ €μž₯ν•©λ‹ˆλ‹€.

λ ˆν¬μ§€ν† λ¦¬λ₯Ό cloneν•©λ‹ˆλ‹€. μ €λŠ” GitKraken을 μ΄μš©ν•˜μ˜€κ³ , λ‹€λ₯Έ 방법을 μ΄μš©ν•΄λ„ λ©λ‹ˆλ‹€.

 

Unity Hub, Editor μ„€μΉ˜

Unityκ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄ μ°Έκ³ ν•΄μ£Όμ„Έμš”.

더보기

 

Oculus 개발자 λͺ¨λ“œ μ„€μ •

λ¨Όμ € 슀마트폰 Oculus μ•±κ³Ό λ°μŠ€ν¬ν†± μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.
 
Oculus μ•±

Oculus μ†Œν”„νŠΈμ›¨μ–΄
https://www.meta.com/kr/ko/quest/setup/?utm_source=seongju0007.tistory.com&utm_medium=oculusredirect 

 

Quest μ„€μ •ν•˜κΈ°: Quest, Quest 2, Link, Rift S 및 Rift | Meta Quest

www.meta.com

개발자 등둝을 μœ„ν•΄ μ•„λž˜ λ§ν¬μ—μ„œ organization을 λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.
https://developer.oculus.com/manage/organizations/create/

 

Oculus Developer Center | Authenticate

developer.oculus.com

둜그인 ν›„, '단체 이름' ν•­λͺ©μ— μ›ν•˜λŠ” 이름을 μž‘μ„±ν•˜κ³  μ œμΆœν•©λ‹ˆλ‹€.

'Create new app'을 ν΄λ¦­ν•˜μ—¬ ν…ŒμŠ€νŠΈ 용 앱을 λ§Œλ“­λ‹ˆλ‹€. μ €λŠ” 'test'둜 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

(μ˜΅μ…˜) Oculus developer hubλ₯Ό μ„€μΉ˜ν•˜μ—¬ 앱을 λ§Œλ“€ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
μ €λŠ” λ‚˜μ€‘μ— Oculus ν™”λ©΄ 미러링 κΈ°λŠ₯을 μ΄μš©ν•˜κΈ° μœ„ν•΄ μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€.

이제 μ•±μ—μ„œ 개발자 λͺ¨λ“œλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 'κΈ°κΈ°' λ©”λ‰΄μ—μ„œ κΈ°κΈ°λ₯Ό μ—°κ²°ν•˜λ©΄ 'ν—€λ“œμ…‹ μ„€μ •' 메뉴듀을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
μ—¬κΈ°μ„œ '개발자 λͺ¨λ“œ'에 λ“€μ–΄κ°‘λ‹ˆλ‹€.

개발자 λͺ¨λ“œλ₯Ό On μƒνƒœλ‘œ λ³€κ²½ν•©λ‹ˆλ‹€.

 

μ˜€ν”ˆ λΈŒλŸ¬μ‹œ ν”„λ‘œμ νŠΈ μ„€μ • 및 λΉŒλ“œ

 
λ“œλ””μ–΄ ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•  λ‹¨κ³„μž…λ‹ˆλ‹€. 'μ—΄κΈ°'λ₯Ό μ„ νƒν•˜μ—¬ Clone을 μ™„λ£Œν•œ ν”„λ‘œμ νŠΈμ˜ 경둜λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
그리고 ν•΄λ‹Ή ν”„λ‘œμ νŠΈλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

이제 ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•  수 있게 μ—¬λŸ¬ 가지 섀정을 ν•΄μ•Όν•˜λŠ”λ°μš”.
μ˜€ν”ˆ λΈŒλŸ¬μ‹œ GitHub의 Readme에 μžμ„Έν•˜κ²Œ μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜μ™€μžˆλŠ” λŒ€λ‘œ μ§„ν–‰ν•©λ‹ˆλ‹€.
 
λ¨Όμ €, Project μ°½μ—μ„œ Assets > Scenes > Main 을 ν΄λ¦­ν•˜μ—¬ Main 씬을 μ—½λ‹ˆλ‹€.

그럼 이런 창이 뜰 ν…λ°μš”. 'Import TMP Essentials'λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.
'Import TMP Examples & Extras'λŠ” 선택 μ‚¬ν•­μž…λ‹ˆλ‹€.

λ§Œμ•½ μœ„μ˜ 창이 λœ¨μ§€ μ•Šμ•˜λ‹€λ©΄ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œλ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.
Windows - TestMeshPro - Import TMP Essential Resources λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

이제 Oculus Quest에 맞게 ν”„λ‘œμ νŠΈλ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
Edit - Project Settings λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.

'Player'λ₯Ό μ„ νƒν•˜κ³ , Other Settings > Scripting Define Symbolsμ—μ„œ '+'λ₯Ό 클릭해 'OCULUS_SUPPORTED'λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
'Apply'λ₯Ό 클릭해 μ μš©ν•©λ‹ˆλ‹€.
'Standalone' νƒ­κ³Ό 'Android' νƒ­ λͺ¨λ‘μ— 같은 λ°©μ‹μœΌλ‘œ μ μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€!!

이제 λΉŒλ“œλ₯Ό ν•©λ‹ˆλ‹€.
Open Brush > Build μ—μ„œ Plugin: Oculus, Platform: Android, Runtime: IL2CPP 둜 μ„€μ •ν•˜κ³  'Do Build'λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

λΉŒλ“œν•˜λŠ” 데 였랜 μ‹œκ°„μ΄ κ±Έλ¦½λ‹ˆλ‹€. λΉŒλ“œκ°€ μ™„λ£Œλ˜λ©΄, Play λ²„νŠΌμ„ 눌러 μ‹€ν–‰ κ²°κ³Όλ₯Ό ν™•μΈν•©λ‹ˆλ‹€.


μ—λŸ¬ ν•΄κ²°

μ—¬κΈ°μ„œ λ°”λ‘œ 싀행이 λœλ‹€λ©΄ λ‹€ν–‰μ΄μ§€λ§Œ, μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 같은 μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€λ©΄ μ•„λž˜μ˜ 방법이 해결에 도움이 되길 λ°”λžλ‹ˆλ‹€.
 

ν”„λ‘œμ νŠΈ μ—΄κΈ°

ν”„λ‘œμ νŠΈλ₯Ό μ—΄ λ•Œ λ°œμƒν•œ 였λ₯˜μž…λ‹ˆλ‹€. ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
1. Git μ„€μΉ˜
2. ν™˜κ²½ λ³€μˆ˜ μ„€μ • (μ•„λž˜ 링크 μ°Έκ³ )
https://learnandcreate.tistory.com/729
3. 컴퓨터 μž¬λΆ€νŒ… ν›„ λ‹€μ‹œ ν”„λ‘œμ νŠΈ μ—΄κΈ°
1~3 진행 ν›„ μ‹€νŒ¨ μ‹œ Git μž¬μ„€μΉ˜ ν›„ μœ„μ˜ κ³Όμ • λ‹€μ‹œ 진행

 

Play λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ μœ λ‹ˆν‹°κ°€ μ’…λ£Œλ¨

였큘러슀 연결이 μ œλŒ€λ‘œ λ˜μ§€ μ•Šμ•˜μ„ λ•Œ λ°œμƒν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ—°κ²°μ΄ μ œλŒ€λ‘œ λ˜μ—ˆλŠ”μ§€ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.
1. 개발자 λͺ¨λ“œλ₯Ό μ œλŒ€λ‘œ μ„€μ •ν•˜μ˜€λŠ”μ§€
2. Oculusκ°€ μ ˆμ „ λͺ¨λ“œμΈμ§€ λ˜λŠ” PC와 연결이 λŠμ–΄μ‘ŒλŠ”μ§€. PC와 μ—°κ²°λ˜μ–΄ μžˆμ„ 경우, λ°μŠ€ν¬νƒ‘ λͺ¨λ“œλ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

μ‹€ν–‰ ν›„ μ»¨νŠΈλ‘€λŸ¬κ°€ λ°”λ‹₯에 있음

μ •ν™•νžˆ λ§ν•˜λ©΄, 컨트둀러 λ™μž‘μ€ 잘 λ˜λŠ”λ° μ†μ˜ μœ„μΉ˜κ°€ μ•„λž˜λ‘œ 맀우 멀리 μžˆλŠ” κ²ƒμ²˜λŸΌ μΈμ‹ν–ˆμŠ΅λ‹ˆλ‹€.
이건 Camera Offset의 λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.
1. Hierarchy μ°½μ—μ„œ 'VrSystem'을 μ„ νƒν•©λ‹ˆλ‹€.

2. XR Origin μ»΄ν¬λ„ŒνŠΈμ˜ 'Tracking Origin Mode'λ₯Ό 'Not Specified'둜 λ³€κ²½ν•˜κ³ , 'Camera Y Offset'을 0으둜 λ³€κ²½ν•©λ‹ˆλ‹€.


 

μ‹€ν–‰ κ²°κ³Ό

3D νŽ˜μΈνŒ… κΈ°λŠ₯

 

λ„μ‹œ 3D λͺ¨λΈ μΆ”κ°€

과정을 μΆ”κ°€ν•΄λ³΄μžλ©΄, λ„μ‹œ λͺ¨λΈμ„ Asset에 import ν•©λ‹ˆλ‹€.
μ €λŠ” 저희 νŒ€μ˜ 폴더λ₯Ό 'VRain' μ΄λ¦„μœΌλ‘œ λ”°λ‘œ λ§Œλ“€μ–΄μ„œ 여기에 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

그리고 Main 씬에 μΆ”κ°€ν•©λ‹ˆλ‹€. ν•˜μ΄μ–΄λΌν‚€ 창으둜 λͺ¨λΈμ„ λ“œλž˜κ·Έν•˜μ—¬ μΆ”κ°€ν•©λ‹ˆλ‹€. SceneParent > EnvironmentParent μ•„λž˜μ— μΆ”κ°€ν•©λ‹ˆλ‹€.

μ‹€ν–‰ ν›„ μœ„μΉ˜μ™€ 크기λ₯Ό μ‹œμ•Όμ— 맞게 μ‘°μ •ν•©λ‹ˆλ‹€. μš°μ„ μ€ Position 값을 (19, -275, 910), Scale 값을 (400, 400, 400)으둜 μ‘°μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

그리고 기쑴의 배경인 'Standard(Clone)'의 Active μƒνƒœλ₯Ό λ•λ‹ˆλ‹€.

Scene 창은 λŒ€λž΅ 이런 λͺ¨μŠ΅μž…λ‹ˆλ‹€.


보완할 점

1. 3D λͺ¨λΈμ˜ ν™”μ§ˆκ³Ό μœ„μΉ˜λ₯Ό μ‘°μ •ν•˜μ—¬ 더 ν˜„μ‹€κ° μžˆλŠ” ν˜•νƒœλ‘œ κ΅¬ν˜„ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.
2. μ˜€ν”ˆ μ†ŒμŠ€λ₯Ό λΆ„μ„ν•˜μ—¬ νŽ˜μΈνŒ… κΈ°λŠ₯만 λ”°λ‘œ 저희 ν”„λ‘œμ νŠΈμ— κ°€μ Έμ˜¬ κ³„νšμž…λ‹ˆλ‹€.
 
μ΄μƒμœΌλ‘œ ν¬μŠ€νŒ…μ„ λ§ˆμΉ˜κ² μŠ΅λ‹ˆλ‹€. μ˜€ν”ˆ μ†ŒμŠ€μ˜ κΈ°λŠ₯을 λΆ„μ„ν•˜λŠ” λ°μ—λŠ” κ½€ μ‹œκ°„μ΄ 걸릴 것 κ°™μ§€λ§Œ, 더 λ‚˜μ€ ν”„λ‘œμ νŠΈλ‘œ λŒμ•„μ˜€κ² μŠ΅λ‹ˆλ‹€.