iOSDC 2018
ARKitͷͨΊͷ3DࢉKBOY@ےΤϯδχΞ2018.8.30@iOSDC 2018
View Slide
ࣗݾհૣҴా͕ߍͰ͢
ےΤϯδχΞͷܦྺ
݄ ݄ ݄ ݄ ݄Spajam༏लϕετϘσΟδϟύϯग़ے.swift։࠵స৬υϥϑτग़ԋॱ෩ຬൕʂʁ
͔ͦ͠͠͏͘ͳ͍
ےΤϯδχΞͷ಄
ےΤϯδχΞઓࠃ࣌
ͦ͏ͩʂARͩʂ
݄ ݄ ݄ ݄ ݄Spajam༏लϕετϘσΟδϟύϯग़స৬υϥϑτग़ԋے.swift։࠵
Δ͔͠ͳ͍͜ͷϏοάΣʔϒʹ
ͱ͍͏͜ͱͰ
ࠓ1݄ʹARελʔτΞοϓJOIN
Graffity Inc.Ϧʔμʔ
͜ΜͳΞϓϦ࡞ͬͯ·͢
ͱ͍͏͜ͱͰARKitΛؤுͬͯษڧ͠·ͨ͠
͜͏͍͏ྫΛߟ͑ͯΈ·͠ΐ͏
εΫϦʔϯ্ͷλοϓͨ͠෦ͷ30cmલʹඈߦػΛஔ͘
༨༟ͬ͠ΐʂ
λοϓδΣενϟʔ͔Βx, yΛऔಘ,z0.3mΛೖΕΕʂ
݁Ռ
શવग़ͯ͜ͳ͍…
ཧ
ݱ࣮
ͬͺΓͦ͏͘ͳ͍
ͦΜͳ࣌ɺϦʔμʔ͕खΛࠩ͠৳ͯ͘Εͨ
3DϓϩάϥϛϯάΛษڧ͢Ε༨༟ͩΑ
Ϧʔμʔʂʂ
ͦͯ͠
3DϓϩάϥϛϯάΛษڧͨ͠ɻ
ษڧʹͬͨຊIUUQTBN[OUP.4V.F( IUUQTBN[OUP1,'Z5
ࠓօ͞ΜʹΘ͔Γ͘͢3DϓϩάϥϛϯάΛઆ໌͠·͢
ࠓͷΰʔϧ
ษڧ͢Δ͜ͱ•࠲ඪܥΛΔ•࠲ඪมͷϝιουΛΔ
ARKitͰ͏࠲ඪܥ
࠲ඪ·ͱΊϫʔϧυ࠲ඪܥΦϒδΣΫτ࠲ඪܥΧϝϥ࠲ඪܥεΫϦʔϯ࠲ඪܥiPad ProͰॻ͖·ͨ͠ɻ
ϫʔϧυ࠲ඪܥ͜ΕΑΓେ͖ͳ֎ଆͷ࠲ඪۭؒͰදݱͰ͖ͳ͍
ΦϒδΣΫτ࠲ඪܥඈߦػࣗͷϩʔΧϧ࠲ඪʂ
Χϝϥ࠲ඪܥΧϝϥͷϩʔΧϧ࠲ඪ
Χϝϥ࠲ඪܥ
εΫϦʔϯ࠲ඪܥ
ΰʔϧͷ֬ೝ
30cmεΫϦʔϯλοϓͷxy࠲ඪऔಘϫʔϧυ࠲ඪʹมͯͦ͜͠ʹஔ͘ʂΧϝϥͷ30cmલʹஔ͘ϫʔϧυ࠲ඪʹมᶃ ᶄᶅεΫϦʔϯ࠲ඪʹมᶆᶄ’εΫϦʔϯ࠲ඪʹม
ᶃΧϝϥ࠲ඪͰ30cmલʹஔ͘ϚΠφε30cm
ᶄϫʔϧυ࠲ඪʹม
͋Δ࠲ඪܥ͔Β͋Δ࠲ඪܥมͰ͖Δ
ᶄ’εΫϦʔϯ࠲ඪʹม
ϫʔϧυ࠲ඪܥ→εΫϦʔϯ࠲ඪܥ
ᶅεΫϦʔϯλοϓͷxy࠲ඪऔಘ
ᶆϫʔϧυ࠲ඪʹมͯ͠ஔ͘
εΫϦʔϯ࠲ඪܥ→ϫʔϧυ࠲ඪܥ
30cmલλοϓͨ͠Ґஔมม
ͦΕͧΕɺ߹ͷ͍͍࠲ඪܥͰܭࢉ͢Δ
ͪͳΈʹ
εΫϦʔϯ࠲ඪܥ͚ͩͰશͯΛදݱͰ͖Δ
εΫϦʔϯλοϓͷxy࠲ඪऔಘϫʔϧυ࠲ඪʹมͯͦ͜͠ʹஔ͘ʂΧϝϥͷ30cmલʹஔ͘ϫʔϧυ࠲ඪʹมᶃ ᶄᶅεΫϦʔϯ࠲ඪʹมᶆᶄ’εΫϦʔϯ࠲ඪʹม͜͜ল͚Δ30cm
͜͜ল͚Δ
ͬͪ͜ͷํָ͕͡ΌΜʂ
͔ͨ͠ʹ
͜ͷ͍ίʔυͰߦ͚Δ
Ͱ
࣮
͜ͷ0.996Χϝϥ࠲ඪܥͷ0.3mͱಉ͡ҙຯ
0.996ͱ
͜͜Ͱ࠲ඪܥͷ෮श
0.01.0εΫϦʔϯ࠲ඪܥͷz0.001m1000mΧϝϥ࠲ඪܥͷz
εΫϦʔϯ࠲ඪܥͷz
https://developer.apple.com/documentation/scenekit/scnscenerenderer/1522631-unprojectpointεΫϦʔϯ࠲ඪܥͷz0.0~1.0
Χϝϥ࠲ඪܥͷzʁ
debugͯ͠ΈΔͱ
zNearΛมԽͤͯ͞ΈΑ͏
εΫϦʔϯ࠲ඪͷzvsΧϝϥ࠲ඪͷz
http://www.alecjacobson.com/weblog/?p=3835-0.001-10000.996screenZ = f(n + cameraZ)/((f − n)cameraZ)-0.3screenZcameraZ
screenZ = f(n + cameraZ)/((f − n)cameraZ)screenZ = 1000(0.001 + (−0.3))/((1000 − 0.002)(−0.3))f = 1000n = 0.001cameraZ = − 0.3screenZ = 0.9966...
࣮ʹ໘͍͘͞
͜͜ল͚Δʂʁ
ඞཁʂ
࠲ඪมΛۦͯ͠
ʂ
͏ͪΐ͍ͬͯΈ·͠ΐ͏ʂ
ඈߦػΛ֦େͨ͠Γɺճసͤ͞Α͏ʂ
֦େɾॖখ
ճస (SCNVector4)࣠֯
ճస(Euler angle)
ճస (Euler angle)x
ճస (Euler angle)Y
ճస (Euler angle)Z
x Y Z
Ҏ্
͜͜·Ͱ͕ࢉ
·ֶ͕ͩ͋Γ·͢ɻ
࠲ඪͷ֓೦Λཧղͯ͠SceneKitARKitΛ͍͜ͳͤΕྑ͍ɻ
ֶʹ͍ͭͯQiitaͰɻ
ARKitͷͨΊͷ3Dֶ
ࠂ
Graffity Inc.ΤϯδχΞืूதʂ
࠷ޙʹ
ݸਓͰARKitͷಈըڭࡐ࡞த
One More Thing
ࠓΓ·͢.kt
ے.ktw :BIPP-PEHFw ݄
͓ΘΓ