å¹´å§ãããæ軽ãã¯ãã«æ¤ç´¢ãä½ã
ããã¾ãã¦ããã§ã¨ããããã¾ãã
ä»å¹´ã¯ãããã¡ãã£ã¨blogãæ¸ããããªã¨ãããã¨ã§ãä¸ãæ¥ã®ãã¡ã«1ã¤åºãã¦ã¿ããã¨æãã¾ãã
ãã¦ã2023å¹´ã¯LLMã®å©ç¨ã¨åæã«ãã¯ãã«æ¤ç´¢ãæ¥ã«å©ç¨ãããããã«ãªã£ãå¹´ã§ããã Retrieval-Augmented Generation(RAG)ãã¿ããªä½¿ãåºããã®ã¨ãOpenAI ã® embedding APIã®æ§è½ãæã£ã以ä¸ã«è¯ãã£ããã¨ã主ãªçç±ã ã¨æãã¾ãã
ãã¯ãã«æ¤ç´¢ã¯ faiss ã§ãchromaã§ããqdrant ã§ãä½ã使ã£ã¦ãããã¨æãã¾ãããnumpy ã使ãã°æ°è¡ã§å®è£ ã§ãããæ§è½ãæªããªããã¨ãããã£ãã®ã§æ¸ãæ®ãã¦ããã¾ãã
import numpy as np class SimpleVecSearch(): def add(self, ndarray): self._ndarray = ndarray def search(self, vec, topk=10): scores = np.matmul(self._ndarray, vec) idx = np.argsort(scores)[-1:-(topk+1):-1] return [scores[i].item() for i in idx], list(idx) if __name__ == '__main__': def gen_vecs(n, dtype='float32'): tmp = np.random.rand(n, 1536).astype(dtype) return tmp / np.array([[i] for i in np.linalg.norm(tmp, axis=1)]) raw_index = gen_vecs(10**5) simple_index = SimpleVecSearch() simple_index.add(raw_index) vec = np.random.rand(1536) d, i = mlx_index.search(vec, 1)
if æ以ä¸ã¯ãã¹ãç¨ã³ã¼ããªã®ã§ãå®è£ èªä½ã¯8è¡ã§ããfaiss ã«åãå ¥åããã¦çµæãä¸è´ãããã¨ã確èªãã¦ãã¾ããã¤ã³ã¿ã¼ãã§ã¼ã¹ã faiss ã«ãããã¦ãã¾ãã
æ§è½æ¯è¼
ã¯ã¨ãªã«ä¸çªè¿ããã¯ãã«ãè¦ã¤ããã®ã«å¿ è¦ã ã£ãæéãããã¼ã¿éæ¯ã«è¨æ¸¬ãã¾ããã100åã®æ¤ç´¢ãè¡ã£ãå¹³åå¤ã§åä½ã¯ç§ã§ãã ç·å½ãæ¢ç´¢ãªã®ã§æ¤ç´¢å¯¾è±¡ã®ãã¼ã¿é(横軸ã®ãã¼ã¿æ°)ãå¢ããã¨ç·å½¢ã«è¨ç®æéãå¢ãã¾ããn=1000ã¾ã§ã¯ numpy ã®æ¹ãéãããã®å¾ faiss ã«æããã¾ããå®ç¨ã®ç¯å²ã ã¨æãã¾ããã©ã®ã¿ã¡ãquery ç¨ã®ãã¯ãã«ãåå¾ããã®ã« OpenAI ã® API ãå¼ã³åºãã®ã«æ°10msecããæ°100msecãããã¯ããªã®ã§ã ã¾ãããã«èª¤å·®ããã«ãã®ã§ãã¾ãå·®ãç¡ãã¨ãã以ä¸ã®ãã¨ãè¨ããå·®ã§ã¯ç¡ãããã§ãã
ãã¹ãã³ã¼ãã®å ¨ä½ã¯ãã¡ãã«ããã¾ãã
èæ¯
OpenAI ã® embedding API ã¯ãæç« ã 1536次å ã®ãã¯ãã«ã«å¤æãã¦è¿ãã¦ããã¾ãã 大éæã«è¨ãã¨ããã®ãã¯ãã«ãæ¯è¼ãã¦æç« ãä¼¼ã¦ãããã©ãããå¤å®ãä¸çªä¼¼ã¦ããæç« ãè¿ãã¨ããã®ããã¯ãã«æ¤ç´¢ã®ãã¢ã§ãã
ä¼¼ã¦ãã度åãã®è¨ç®æ¹æ³ã¯è²ã ããã¾ãããOpenAI 㯠ã³ãµã¤ã³é¡ä¼¼åº¦ã®å©ç¨ãæ¨å¥¨ãã¦ãã¾ãã ã³ãµã¤ã³é¡ä¼¼åº¦ã®å®ç¾©ã¯ä»¥ä¸ã®ã¨ããã§ãã
x, y ã¯ãã¯ãã«ã§ã 㯠xã¨y ã®å ç©ã ã¯ãã¯ãã« x ã®å¤§ããã§ãã ããã¦ãOpen AI ã® embedding API ã¯ãã¯ãã«ã大ãã1ã«æ£è¦åãã¦è¿ãã®ã§ãã³ãµã¤ã³é¡ä¼¼åº¦ã®åæ¯ã¯å¸¸ã«1ã«ãªãã¾ãã ã¨ãããã¨ã¯ããã¯ãã«ã®å ç©ãè¨ç®ããã ãã§é¡ä¼¼åº¦ãè¨ç®ã§ãã¾ãã
ã³ãµã¤ã³é¡ä¼¼åº¦ã¯ãã¯ãã«ã¨ãã¯ãã«ã®å ç©ã«ãã£ã¦è¨ç®ããã¾ããããã¯ãã«æ¤ç´¢ã§è¡ãããã®ã¯å¤æ°ã®ãã¯ãã«(æ¬ç¨¿ã§ã¯indexã¨å¼ã¶)ããããããã¯ãã«(æ¬ç¨¿ã§ã¯queryã¨å¼ã¶)ã«ä¸çªè¿ããã¯ãã«ãè¦ã¤ãããã¨ã§ãããªã®ã§ãindex ã®æ¹ãè¡åã¨ãã¦ä¿æãã¦ããã¦ãè¡åã¨ãã¯ãã«ã®æãç®ã§ä¸æ°ã«é¡ä¼¼åº¦ãè¨ç®ãã¦ãã¾ããã¨ããã®ãæåã®ã³ã¼ãã®å 容ã§ãã
é«éå
ä¸è¨ã®éãindex ã«ããå ¨ã¦ã®ãã¯ãã«ã¨queyrã®ãã¯ãã«æ¯è¼ããç·å½ãã¢ã«ã´ãªãºã ãªã®ã§ãæ£ç¢ºã§ããéãã¯ãªãã¯ãã§ãã ããfaiss ã® IndexFlatIP ã¤ã³ããã¯ã¹ãåãææ³ãªã®ã§é度çã«ã¯ãã¾ãå¤ããã¾ããã
nã大ããã¨faiss ã®ã»ããã¡ãã£ã¨éããã ããfaiss ã§ããããã¨ãã話ã§ã¯ããã®ã§é«éåã試ã¿ã¾ãã ã¡ããã©æ¨å¹´æ«ã« apple ã MLX ã¨ãã apple silicon åãã® numpy äºæã©ã¤ãã©ãªãåºãã¾ãããapple silicon ã® GPU ã使ã£ã¦ç·å½¢ä»£æ°è¨ç®ãé«éã«è¨ç®ãããã®ã§ãã®ã§ãããã使ã£ã¦ã¿ã¾ãã numpy ã mlx.core ã«æ¸ãæããã ããªã®ã§ãã³ã¼ãã¯ã»ã¼å¤ããã¾ããã
import mlx.core as mx class MLXVecSearch(): def __init__(self, stream=mx.gpu): self._stream = stream def add(self, ndarray): self._ndarray = mx.array(ndarray) def search(self, _vec, topk=10): vec = mx.array(_vec) scores = mx.matmul(self._ndarray, vec, stream=self._stream) idx = mx.argsort(scores, stream=self._stream)[-1:-(topk+1):-1] return [scores[i].item() for i in idx], [i.item() for i in idx]
ã³ã³ã¹ãã©ã¯ã¿ã§ stream ãæå®ã§ããããã«ãã¦ãã¦ãmx.gpu 㨠mx.cpu ãåãæ¿ãã㨠GPUè¨ç® CPU è¨ç®ãåãæ¿ãããã¾ãã ã§ãèå¿ã®æ§è½ã¯ãããªæã
n=105 以ä¸ã§ã¯faissãæãã¦æéã§ãã(ãã ã精度çãªåé¡ãããã®ã§å¾è¿°ãã¾ãã) ã§ã¯ãn=107 以ä¸ã§ã¯?ã¨æãã¨ããã§ãããã¡ã¢ãªä¸è¶³ã®ããç§ã®ç°å¢ã§ã¯å®é¨åºæ¥ã¾ããã§ããã ãã㯠faiss ã§ãåãã§ããããã巨大ãªè¡åãã¡ã¢ãªä¸ã«å±éããã®ã§ãã¡ã¢ãªã確ä¿ã§ããªãã¦è½ã¡ã¾ãã OpenAI ã®è¿ããã¯ãã«ã®æ¬¡å ã大éæã« 2*103 次å ã¨èããã¨ã1ã¤ã®æ¬¡å ã表ãã®ã«ãfloat32 = 32bit = 4 Byte ãå¿ è¦ã§ãããããã¯ãã«å ¨ä½ã§ã¯ 4 Byte * 2 * 103 㧠8 kB ã§ãã ãã®ãã¯ãã«ã 107 åæã㨠8kB * 10 ^7 = 80 GB ã¨ãªãã®ã§ã24GB ããç©ãã§ãªãç§ã® MacBook Air M2 ã§ã¯ç¢ºä¿ã§ããªãã®ã¯éçã§ããã
107 ãè¶ ãããããªææ¸æ°ããããªãã°ããã£ã¨é«å°ãªã¢ã«ã´ãªãºã ã使ãã¹ãã§ããã®è³æã®æ¡å ãé ¼ãã«ãªãã¾ãã
å®ç¨çã«ã¯RAG ã«å ¥ãããææ¸æ°ã1000ä¸ææ¸ãããã¨ããã®ã¯ç¸å½ç¨ãªãã¨ã§ããã£ã¦æ°åã¨ããã¨ãããªã®ã§ã¯ã¨æ³åããã¨ããã§ãã ãã®ç¨åº¦ã§ããã°æåã«æ²è¼ãã numpy å®è£ ã§ãååãªã¯ãã§ã使ãæ©ä¼ãæãããªã¨æãã¾ãã
MLX ã®è¬æå
æ軽㫠numpy ãé«éåãã¦ãããã®ã§ãMLX ãããï¼ã¨è¨ãããã¨ãããªã®ã§ãããå¾®å¦ã«è¨ç®çµæã numpy ã¨ç°ãªããã¨ãããã¾ãã ãã㯠stream ã GPU ã«ããæã ãã«èµ·ãããã®ã§ãCPU ãæå®ããã¨ãã«ã¯èµ·ãã¾ããã追ããããã¨æ¥½ããããã§ãããç¾æç¹ã§ã¯ããåãããã 精度ã®éããçã£ãã®ã§ãããnumpy ã MLX ã float32 ãå©ç¨ãã¦ãã精度ã®åé¡ã§ã¯ç¡ããããã¢ã¼ããã¯ãã£ãéãè¨ç®æ©ãªãã ãããã®ããã誤差ãæãã§ããã¨ãã話ããããã¾ããã RAG ã§ä½¿ãåã«ã¯åé¡ã«ã¯ãªããªãæ°ããã¾ãããnumpy ã faiss ã¨ä¸è´ããªããã¨ã¯è¦ãã¦ç½®ããã»ããè¯ãã§ãããã
è¨ç®ãä¸è´ããªãä¾ã®åç¾ã³ã¼ã
matrix = [[0.58551717, 0.13656957], [0.12464499, 0.09199308]] np_matrix = np.array(matrix, dtype='float32') mx_matrix = mx.array(matrix, dtype=mx.float32) a = np.matmul(np_matrix[0],np_matrix[1]).item() b = mx.matmul(mx_matrix[0], mx_matrix[1],stream=mx.gpu).item() print(a) # => 0.08554524183273315 print(b) # => 0.08554523438215256
æ¬ç¨¿ã®è©°ããçãé¨å
numpy ãå©ç¨ãã¦ãã BLAS ã©ã¤ãã©ãªããã£ã¨é«éãªããnumpy ã§ã fiass ã«åã¦ãã®ã§ã¯? ã¨ããARM64 ã® SIMD å½ä»¤ãç´æ¥å¼ã¹ã°ãã£ã¨é«éãªã®ã§ã¯? ãªã©è¿½ããããã¨é¢ç½ãããªã¨ããã¯è²ã ããã®ã§ãããä»åã¯ãæ軽ã«å®è£ ãã¦ã¿ãã®ããã¼ããªã®ã§æ·±æãã¯ããã¦ããã¾ãã
ã¾ã¨ã
- æ°è¡ã®ã³ã¼ãã§å®ç¨çãªãã¯ãã«æ¤ç´¢ãå®è£ åºæ¥ããã¨ã示ãã¾ãã
- MLX ã¯éããã©è¬æåãããã¾ããã¾ã 0.0.6ã ããã
- ãã¨ãã¯ããã¡ãã blog æ¸ãã
GPT-4 ã¯é«åº¦æ å ±å¦çæè¡è 試é¨(ååI)ã«åæ ¼ãã
GPT-4ã¯å»å¸«å½å®¶è©¦é¨ã«åæ ¼ããã¨ããç 究çµæãçºè¡¨ããã¦è©±é¡ã ã£ãã®ã§ãæã ã馴æã¿æ·±ã IPA ã®è©¦é¨ã«GPT-4ã¯åæ ¼ã§ããã®ã試ãã¦ã¿ãã é«åº¦æ å ±å¦çæè¡è 試é¨ã® ååI ã«éã£ã¦è¨ãã°åæ ¼ãã¦ããã®ã§ãã¬ãã¼ãããã¡ãã«ç½®ãã¦ããã
ã¾ã¨ã
- é«åº¦æ å ±å¦çæè¡è 試é¨ã®å ±éç§ç®ã§ããååI ã« åæ ¼ã§ãã解ç(æ£çç6å²ãè¶ ãã)ãGPT-4ã¯çæãã
- GPT-3.5 ã§ã¯åæ ¼ã§ããªããGPT-4 ã®è³¢ããéç«ã¤
- ã¡ãªã¿ã«å³è¡¨èªã¿åãåé¡ã¯å ¥åã§ããªãã®ã§ããã¹ã¦ä¸æ£è§£æ±ããã
ãããã
- IPA ã® Webãµã¤ãããã2022年度ç§è©¦é¨ã®ååIåé¡ã®PDFãåå¾ (PDF)
- Google Docs ã® OCR æ©è½ã§ããã¹ãåå¾
- æã§ã³ãããã¦æ´å½¢
- æ´å½¢ãããã¡ã¤ã«ã¯ ãã¡ã ã«ãã
- OpenAI ã® API ã«åãåããã¦è§£çãåå¾ãã¹ã¯ãªããã¯ãã¡ãã
- 追試é¨ã«å¿ è¦ãªãã®ã¯ãããã¶ãªãã¸ããªã«æãã¤ãããªã®ã§ãèå³ã®ãã人ã¯è©¦ãã¦ã»ããã
ææ³
ãããã«ãChatGPT(GPT-3.5) ã® Web UI ã§åé¡ã2ã¤3ã¤åºãã¦ã¿ãã¨ãããã©ããæ£è§£ããã®ã§ãããã¯ãããã¨æã£ã¦ã¡ããã¨å®é¨ç°å¢ãæ´ãã¦ã¿ããGPT-3.5 ã¯ä¸å¾æãªåé¡ãçµæ§ãã£ã¦çµæã¨ãã¦ã¯æ£è§£ç50%ã§æ¨æ(ã¬ãã¼ãã¯ãã¡ã)ã GPT-4 ã¯ãå¤æ®µé«ãããé ãããåä½ãä¸å®å®ã ãé©ç°ã®æ£çç96%ãèªã£ãããã¡ãããã®æ°åã¯ãå ¥åãå¯è½ãªåé¡ã«éã£ã話ã§å³è¡¨åé¡ã¯å«ãã§ããªããã¨ã¯è¨ãå³è¡¨ãå ¥åæ¹æ³ãç¡ãããã§ã¯ãªãã®ã§ãæéãããã¦å ¥åãã©ã¼ããããæ´ããã°æ£è§£ãã¦ãã¾ããããããªãã
GPT-3.5 ã¯ä¸è¦æ£ããããªè§£èª¬ããééã£ãçããå°ãã¦ãã¦èªãã§ãã¦å¾®ç¬ã¾ããã解説ãããã¨ããæ示ãçãã¦ã解çã ããæ±ããã¨æ£ççããããã¨ããæåãããã解説ãä½ããªããééã£ãæ¹åã¸æç« ã並ã¹ã¦ãããããªå°è±¡ãããããã®æåã®ç¢ºèªã®ã³ã¼ãã¯ãªãã¸ããªã«ã¯å«ãã¦ããªãã®ã§èå³ã®ãã人ã¯ã³ã¼ããæ¹é ãã¦è©¦ãã¦æ¬²ãããGPT-4 ã§ã¯ã解çå¯è½ãªåé¡ã®ä¸ã§å¯ä¸ééã£ãåé¡(å8)ã§ãã解説ã¯æ£ããæç« ã«ãªã£ã¦ããããªãæå¾ã«ãã®è§£çãé¸ãã ...ã¨ããé¢ç½ããããã
åºæ¬çã« GPT ã·ãªã¼ãºã¯ç®æ°ãè¦æãªã®ã ããGPT-4 ã§ã¯ãããããªãæ¹åããã¦ããããã ã
ååI ã®åé¡ 30åã¯ãå¿ç¨æ å ±ã®åååé¡ 80å ããã®æç²ãªã®ã§ãå¿ç¨æ å ±ã®åé¡ãå ¨é¨æ´å½¢ãã¦ãGPT-4 ã¯å¿ç¨æ å ±ã«åæ ¼ã§ããã! ãªã©ã¨è¨ã£ã¦ã¿ããã£ãã®ã ããåå¾åé¡ã®å ¥åã®é¢åãããã®åã«æ«æãã¦ãã¾ã£ãããã£ã¬ã³ã¸ãã人ãå¾ ã¡ããã
åæã§åºç¤¾ããããã«ãªã£ã¦åå¹´
ãã®è¨äºã¯ ã¯ã©ã¹ã¿ã¼ Advent Calendar 2022 (2æç®) 4æ¥ç®ã®è¨äºã§ããæ¨æ¥ã¯ kyokomi ããã®ã¨ããä¸è·é¢éå¤ã®åºæ¬ãªã¢ã¼ãæ1ç©çåºç¤¾ã§ãããæ1åºç¤¾ããããã楽ããè¨äºã§ããã!
ãã¦ãã¯ã©ã¹ã¿ã¼æ ªå¼ä¼ç¤¾ã§ Engineering Manager ããã¦ãã kurain ã§ããå¼ç¤¾ã§ã¯å¹´ã«2åã®éãã§ç¤¾å¡ãå¢ãã¦ããã®ã§ãããã¯å¤è¦çãªç¹å¾´ããªãã¨ãªããªãèªåãè¦ãã¦ããããªãã®ã§åæãçã¦åºç¤¾ãããã¨ã«ããã¨ãã話ã§ãã
åæã®å§ãæ¹
ããã¯æ¬å½ã«ãããããããããã¨ãããã¨ã§åæã«è©³ããå人㮠nanto_vi ããã«é£çµ¡ãã¦1æéã»ã©ãããªãã£ããã§è²ã æãã¦ãããã¾ãããè¦ç¹ã¨ãã¦ã¯ä»¥ä¸
- (6æé ã ã£ãã®ã§) æµ´è¡£ããå§ããã¨æ¥½
- æ´ããå¸å°ã«ãã¦ãããã»ãããã
- ããããã®æ¬ããã(åãèè ãªã®ã§ã©ã¡ããã§å¤§ä¸å¤«)
æãã¦ããã£ãæ¬ã¯ããããããã¾ããã«æ°è»½ã«åæãå§ãããã¨ããæ¬ã§ãã ãã¶èä¸ãæ¼ãã¦ããã£ãæ°ããã¾ããã³ã¼ãã£ãã¼ããçºããã«ã¯ãã®æ¬ã楽ããã£ãã
nanto_vi ããã®ãã®è¨äº
ãåèã«ãã¦ãã¾ãã
åæåºç¤¾åå
7æã®åºå¤æ¥ããæµ´è¡£ã§åºå¤ãã¦ã¿ã¾ãããæµ´è¡£ã¯å¤§éªã®ãã¡ãã®ãåºã«è¡ã£ã¦è²·ã£ã¦ãã¾ãããç¸è«ã«ãä¹ã£ã¦ãããã¦å©ããã¾ãããããæ°ãé«ã¾ãããã¦ãã¯ã©ã¹ã¿ã¼æã®å¸¯ãä½ã£ãããã¦ãã¾ããã
ä½ãæ¹ã¯ãã¡ãã®blogãåèã«ãªãã¾ããå¸ã¯å¤§éªã«ããå¸å°å·ã®ä¼ç¤¾ã§ããREALFABRICããã§å°å·ãã¦ãããã¾ãããç´æã¯ç´1.5é±éã§ãå°å·ä»£ã¨å¸ä»£,éæåããã¦2500åãããã§ãã
ãªãã¼ã·ãã«ã«ä½ãã¾ããã大ãããã´ã®æ¹ã¯ä¸è©ã ã£ãã®ã§ãå°ãããã´ã®æ¹ã使ã£ã¦ãã¾ããããã®å¾ä¼ç¤¾ã®ãã´ãå¤æ´ã«ãªã£ãã®ã§ããã¡ãã®è§å¸¯ã¯ãèµå ¥ãã§ãã
å¤ã®é
æµ´è¡£ã§2åãããåºç¤¾ããã®ã§ãããæ¯ååãæãªã®ããªã¼ãã¨ãããã¨ã§ã次ã¯ã¤ããªã¯ã«ãã£ã¬ã³ã¸ãç¹ã«ç·æ§ã®å ´åãèªåã«åããµã¤ãºã®åæãæ°åã§å£²ã£ã¦ããã¨ãããã¨ã¯ç¨ã§ãããªã®ã§æ©ã欲ããå ´åã¯ãå¤çãè²·ã£ã¦ããå¿ è¦ãããã¾ããçä¸ã¨è£ä¸ãåãã°ãããªãã«çãã¾ãããã ãèªåã®å ´åãè£ä¸ãã¡ãã£ã¨é·ããªã®ã§ã¡ããã©ãããµã¤ãºãè¦ã¤ãããªããã¨ãå¤ãã§ããã¤ããªã¯ã¢ããªã«ãâè£XXâ ã¨ããæ¤ç´¢ã¯ã¼ããç»é²ãã¦ã²ãããæ°çãçºããããã¦ãã¾ããã
ç§ã®é
ã ãã ãåæã§åºç¤¾ããã®ãããã»ã©å°é£ã§ç¡ããã¨ãåãã£ã¦ããã®ã§ãã¡ããã¨ãµã¤ãºããã£ã¦ããæ°åã®åæã欲ãããªãã¨æãå§ãã¾ãããã¨ãããã¨ã§ããã¡ãã®ãåºã§ä»ç«ã¦ã¾ããã
女æ§åãã®ãã©ã³ãã§ãããé»è©±ããããç·æ§åãã®ä»ç«ã¦ããã£ã¦ãããã¨ãããã¨ã§ãããçå°ããããã§é¸ã¶ã¨å®åºèã§è¦ãã¦ããããã®ã§å¤§å¤ä¾¿å©ã§ããæ¨ç¶¿ã ã¨åç©ä»£+1.5ä¸åãããã§ä»ç«ã¦ã¦ãããã¾ããã¹ã¼ãã¨æ¯ã¹ãã¨å®ãæ°ããã¾ããæ°åã³ããã¦ã£ã«ã¹ã®å½±é¿ãããä»ä¸ããã¾ã§2ã¶æããããããã¾ãã
ä»ç«ã¦ãåæã¯ãé·è¥¦è¢¢ã¨åããã¦ã¡ããã¨çãããã¹ã¿ã³ãã«ã©ã¼ã·ã£ãã«åããã¦æ¸ç風ã«çã¦ã¿ãããªã©ãã¾ããã
å¬ã«åãã¦
ååã®11æé ã®åºç¤¾æ¥ã¯æãã£ãã®ã§ç¾½ç¹ã¯ä¸è¦ã§ãããé·çãåè¿°ã®æ¨ç¶¿ã®åè¡£ã§ååã ã£ãã®ã§ããã次ã®åºç¤¾ã¯12æä¸æ¬ãªã®ã§ãããªãã«å¯ããã§ããã¨ãããã¨ã§ãå®å®¶ã®ã¿ã³ã¹ã«ç ã£ã¦ããã¦ã¼ã«ã®é·çã¨ç¾½ç¹ãããã£ã¦ãã¾ãããç¶ã®ãã®ã§ãããç§ã¯ç¶ãåæãçã¦ãã®ãè¦ããã¨ãç¡ããã§ããã...ã¨ã¯ããç¶æ¿ã§ããã®ã¯ããããã話ã§ããç¾½ç¹ç´ã¯ç¡ãã£ãã®ã§ããã¾ãæ¿ããããããªãç¾½ç¹ç´ãã»ãããªãã¨ECãµã¤ããçºããä»æ¥ãã®ããã§ãã
åæã®ããã¨ãã
ç®è«è¦éããååãã声ãããã¦ããããæ©ä¼ãå¢ãã¾ãã! åãã¦ä¼ã人ã¨ã®è©±é¡ã«ã¨ããããå°ããªãã®ãè¯ãã¨ããã§ãã
åæã®ãã¾ã£ãã¨ãã
ã¨ã«ããå§ããã«æ·å± ãé«ã...åæå±ããã«ãè¡ã£ã¦ã¿ãããã©ã"ã¨ããããä»ç«ã¦ã¾ãããã"ã¨è¨ãããåºããã£ã¦æåããããã¯é£ãããã¨ã¯ãããè¯ããããªãåºãæ¢ãããããªã³ã©ã¤ã³ã§è²·ããã¨ãããæ¤è¨ããã®ã¯ãªããªã楽ããã®ã§ã趣å³ã¨ãã¦ã»ãã¼ãã¨ç¶ãã¦è¡ãããã¨æã£ã¦ãã¾ãã
ãããã®ã¯ã©ã¹ã¿ã¼ Advent Calendar 2022 (2æç®)㯠Swanman ãããæ å½ãã¾ã!
Slackã§æ¬ãç´¹ä»ãããããããµã¼ãã¹ãä½ã£ã
ã¾ã¨ã
- https://yomu.jp/4274065979 ã®ãã㪠https://yomu.jp/ + ISBN ã¨ãã URL ã§æ¬ã®æ¦è¦ãè¦ããããµã¼ãã¹ãä½ã£ã
- slack ã«è²¼ãä»ããã¨ããã®å ´ã® preview ã§æ¸å½±ã¨ã¿ã¤ãã«ãè¦ããã
- https://yomu.jp/https://www.amazon.co.jp/%E3%83%8F%E3%83%83%E3%82%AB%E3%83%BC%E3%81%A8%E7%94%BB%E5%AE%B6-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E6%99%82%E4%BB%A3%E3%81%AE%E5%89%B5%E9%80%A0%E8%80%85%E3%81%9F%E3%81%A1-%E3%83%9D%E3%83%BC%E3%83%AB-%E3%82%B0%E3%83%AC%E3%82%A2%E3%83%A0/dp/4274065979/ ã®ãããªURL ãä½ã㨠ISBN ã ãæãåºãã URL 㸠redirect ã§ãã
解決ãããã£ã課é¡
slack ã§æ¬ãç´¹ä»ããã®ã«ãAmazon ã® URL ãè²¼ã£ãã¯ã人ã¯å¤ãããºãããããååã«ãã£ã¦ãæ¸å½±ãå±éãããããããªãã£ãããã¾ããLink preview ã表示ãããããããªãã£ããããããã§ããããã¯ã¤ã©ã¤ã©ãããã¨ãããã¨ã§ãå¿ ãæ¬ã®æ¸å½±ã¨ã¿ã¤ãã«ãå±éåºæ¥ã Webãµã¼ãã¹ãä½ãã¾ããã
使ãæ¹1
- https://yomu.jp/ ã®å¾ã« ISBN ãã¤ãªã㦠URLãä½æãã¦ãã ãã
- ãã¨ãã° https://yomu.jp/4274065979 ã¨ãããã㪠URL ã§ã
- ãã® URL ã slack ã§å ±æãã㨠Link preview ã§æ¸å½±ã¨ã¿ã¤ãã«ãç¾ãã¾ãã
- ISBN ã¯æ¬ã«åºæã®çªå·ã§ãæ¬ã®è£è¡¨ç´ã«æ¸ãã¦ãããã¨ãå¤ãã§ããé常ã¯13æ¡ã§ããå¤ãæ¬ã¯10æ¡ã§ããyomu.jp ã§ã¯ 10æ¡ã«éç´ãã¦ãã¾ã
使ãæ¹2
- https://yomu.jp/ ã®å¾ã« ISBNãå«ã URL ãã¤ãªãã¦URL ãä½æãã¦ãã ããã
- ãã¨ãã° https://yomu.jp/ + amazon ã®æ¸ç±ã®URL ã¨ããå½¢ã§ã
- yomu.jp ã§ã¯å¾ãã«ã¤ãªãã URL ãã ISBN ãæãåºãã¦ã使ãæ¹1ã® URL ã¸èªåã§è»¢é(redirect)ãã¾ã
ãã®ãã¡æ¹åããããã¨
- æã æ¸å½±ã slack ä¸ã§å±éãããªããã¨ããããåå ãæ¢ã£ã¦ãããããããããªããç»åã¯åå¨ããã®ã§ slack å´ã«çç±ããããããªæ°ãããã
- Amazon 以å¤ã®è³¼å ¥ãªã³ã¯ãä½ã
- barcode 㧠æ¬ã®ISBN ãèªã¿åã£ã¦ Link ãä½ããããã«ãã
- kindle ã®ãªã³ã¯ãå¤æåºæ¥ãããã«ããã沢山使ã£ã¦ããããã°å¯è½ã«ãªããããããªãã
ææ³
- ä¹ ã ã«å人ãµã¼ãã¹ããªãªã¼ã¹ãããã©æ¥½ãããã®ã§ããã
æ°ããä»äºã¨å¤§éªæ±äº¬éå¤ã¨åè²ã¦ã®è©±
ãã®è¨äºã¯ ã¯ã©ã¹ã¿ã¼ Advent Calendar 2021 7æ¥ç®ã®è¨äºã§ãã
ãã®è¨äºã§ã¯ä»å¹´2021å¹´1æã«ã¯ã©ã¹ã¿ã¼æ ªå¼ä¼ç¤¾ã«å ¥ç¤¾ãã kurain ãã大éªããæ±äº¬ã®ä¼ç¤¾ã«åºå¤ããæ¥ã ã®æ§åããéããã¾ãã
ãã¦2021å¹´ã¯1æ6æ¥æ°´ææ¥ãã¯ã©ã¹ã¿ã¼ç¤¾ã®ä»äºåãã§ãããä¹ãç©å ¨è¬å¤§å¥½ããªç§ã¯ãèªç©ºæ©åºç¤¾ãããã¦å人ã«èªæ ¢ãã¦ãã¾ããæ®å¿µãªãããèªç©ºæ©ã¯äºç´å¤æ´ã大å¤ãªã®ã¨æçµä¾¿ãããããæ©ãã®ã§ã以å¾å ¨ã¦æ°å¹¹ç·ã§ã®éå¤ã«ãªã£ã¦ãã¾ãã¾ããã
å ¥ç¤¾æç¹ã§ã¯ã©ã¹ã¿ã¼ç¤¾ã¯æ°´ææ¥ã®ã¿ã®åºç¤¾ã«ãªã£ã¦ãããããããé±1åã®å¤§éª-æ±äº¬éå¤ãå§ã¾ãã¯ãã§ããããããååºç¤¾ç¿ã æ¥ã®1æ8æ¥ããæ°åã³ããã¦ã£ã«ã¹è延é²æ¢ã®ããã®ç·æ¥äºæ 宣è¨ãçºä»¤ãã¯ã©ã¹ã¿ã¼ç¤¾ãåºç¤¾ããªããªããå ¥ç¤¾æ©ã ãã«ãªã¢ã¼ãç¶æ ã«ãªãã¾ãã
ãã¾ããã¼ã ã«é¦´æãããå¿é ãããã¾ããããã¡ã³ã¿ã¼ã«æ¯æ¥1on1ãã¦ããã£ãããããæãã®ã¿ã¹ã¯ãç¨æãã¦ããã£ããã¨æåãæ¯æ´ãããã¾ãã¦ãä¹ ãã¶ãã®Web Frontend éçºãé 調ã«ã¹ã¿ã¼ããã¾ãããã®ç¬¬2åã®ç·æ¥äºæ 宣è¨ã¯3/24ã§çµããã¾ããããã®å¾ãç·æ¥äºæ ã¯æç¶çã«ç¶ããã®ã§ãçµå±ä»å¹´ã®åºç¤¾ã§ããæ¥ã¯ãããªæãã§ããã(赤ãç·æ¥äºæ 宣è¨ä¸orç¥æ¥)
ãã®ã¾ã¾å¹´æ«ã¾ã§ç¡äºã«åºç¤¾ã§ããã¨ãã¦æ大21åããåºç¤¾ãããã¨ã¯ãªããå½åäºå®ã®åå以ä¸ããæ±äº¬ã«éã³ã«è¡ãåºç¤¾ãããã¨ã¯ã§ããªãããã§ãã
ããã¦æ¥å¹´ããã¯ã¯ã©ã¹ã¿ã¼ç¤¾ã®æ¹éã¨ãã¦ã½ããã¦ã§ã¢ã¨ã³ã¸ãã¢ã¯æ1åºç¤¾ã«ãªãã¾ã! ã¾ãã¾ãé£è¡æ©ãæ°å¹¹ç·ã«ä¹ããªããªã£ã¦ãã¾ãã¾ãããç§ã¨åãããã«é æ¹ããã§ãã¯ã©ã¹ã¿ã¼ç¤¾ã« joinãã人ãå¢ããã®ã§ã¯ãªããã¨æå¾ ãã¦ãã¾ã!(交éè²»çç´°ããæ¡ä»¶ã«ã¤ãã¦ã¯ãåãåãããã ããã)
ã¡ãªã¿ã«åºç¤¾ãããæ¥ã¯12:30ãéåæéãªã®ã§ãæ®æ®µã¨èµ·ããæéã¯å¤ããã¾ããã
ç§ã®å®¶ã¯å ±åããªã®ã§åã©ããã¡ã¨éããæéãã¨ããªãã¨å®¶åºãå´©å£ãã¦ãã¾ãã¾ãã幸ããã®ãããªçæ´»æéã§éç¨ãã¦ããã®ã§ãæå¤ã®é£äºãå°±å¯æºåã®æéã¯åå確ä¿ãããã¨ãã§ãã¦ãã¾ãã(ãããflexã§ã¯ãã£ããã©ããã£ã¦åããã®ã ããã...ã¨æããã«ã¯ãããã¾ããã...) ä¸æ¹ã§é±1åã¨ã¯ããã妻ã«å¤ã®è²å ãå ¨ã¦ãé¡ããå¤ã¾ã§å¸°ããªãæ¥ãããã®ã§å¦»ã¨åã©ããã¡ã«ã¯ãã¨ã¦ãæè¬ãã¦ãã¾ãã
å¨å® å¤åã»flexå¤åã¨åè²ã¦ã®ç¸æ§ã®è¯ãã¯ããããã¨ããã¾ããä¾ãã°é·å¥³ã帰ã£ã¦ããæéã«ç§ã家ã«å± ãããã«ãªã£ãã®ã§ãå¨ã¯å®¶ã§å人ã¨éã¶ããã«ãªãã¾ããããªã³ã©ã¤ã³ãã¼ãã£ã³ã°ä¸ã«é¨ããã声ãå ¥ã£ã¦ãã¾ãäºãããã®ã¯æ©ã¿ã®ã¿ãã§ã¯ããã¾ãããä¼ç¤¾ã®ç解ã«å©ãããã¦ãã¾ããä»ã«ãåä¾ã®ç é¢ã ã¨ããå¹¼ç¨åã®ç¶æ¯ä¼ã ã¨ããå°å¦æ ¡ã®å人é¢è«ã ã¨ãã諸ã ã®ç¨äºãã¹ããæéã§æ¸ã¾ãäºãã§ãã¦ãã¾ãã
èå¿ã®æ¥åã®ã»ãã¯å ¥ç¤¾ããå年㯠Web Frontend ã®éçºã¨ã社å ã®ãã¼ã¿åæã®ä»äºãæ å½ãã¾ããã7æããå§ã¾ã£ãcluster社ã®ä¸æã§ã¯ãæå±ãããã©ãããã©ã¼ã äºæ¥é¨ã®ä¸ã§ããã¨ã³ã¿ã¼ãã©ã¤ãºäºæ¥é¨ã®æ¯æ´ãè¡ã event çã®ãªã¼ããæ å½ãã¨ã³ã¿ã¼ãã©ã¤ãºäºæ¥é¨ã¯clusterã®ä¸ã§è¡ããããä¼æ¥ä¸»å¬ã®eventã®å¶ä½é²è¡ãè¡ãé¨ç½²ã§ãCGå¶ä½ãã¤ãã³ãå¶ä½é²è¡ã®ãããã§ãã·ã§ãã«ãæã£ã¦ãã¾ããä¸æ¹ç§ã®æå±ãããã©ãããã©ã¼ã äºæ¥é¨ã¯3D空éã®å¶å¾¡ããWebãã¢ãã¤ã«ã¢ããªã®ãããªã¦ã¼ã¶ã¼ã®æ¥ç¹ã¨ãªãé¨åã¾ã§ä¸è¬ã®ã¦ã¼ã¶ã¼ããã使ãæ©è½å ¨è¬ãéçºãã¾ããUGCãã©ãããã©ã¼ã ã¨ãã¦ã®æ©è½ã¨ãtoBåãã¤ãã³ããã©ãããã©ã¼ã ã¨ãã¦ã®æ©è½ããäºãã«å½±é¿ããããæ°ãããã©ãããã©ã¼ã ãä½ãåºãã¦ããã¨ãã㯠clsuter ã®é常ã«é¢ç½ãç¹å¾´ã§ããããããé¨ç½²ãã¾ããã ä»äºããããã¨ããã®ã¯ãå ¥ç¤¾åããä¼ãã¦ãããã¨ã§å¸æãããªãã¨ã¦ãæºè¶³ãã¦ãã¾ãã
ããã¦å æ11æããã¨ã³ã¸ãã¢ã®ãã¼ã ã2ã¤ã«åç·¨æããã¾ãããEngine Team 㨠Growth Team ã¨ããååã§ããã®ãã¡ Growth Team ã®ãªã¼ããåãã¦ãã¾ããGrowth Team 㯠Web ãã¢ãã¤ã«ã¢ããªãªã©ã¦ã¼ã¶ã¼ããã¨ã®æåã®æ¥ç¹ã«ãªãéçºã主ã«æ å½ããã¦ã¼ã¶ã¼ä½é¨ãã¦ã¼ã¶ã¼æ°ã Growth ããã¦ããããã®ãã¼ã ã§ããåè¿°ã®eventçã¯Growth Teamã®æ ãæ©è½ã®ä¸ã¤ã«ãªã£ã¦ãã¾ãããã¡ãã®ãã¼ã ã®ææãããé ããªããã¡ã«å ¬éããã¾ãã®ã§ãã¦ã¼ã¶ã¼ã®çããã«æ¥½ããã§ãããããã¨æã£ã¦ãã¾ãã
ãã®ããã«å°æ¹å¨ä½ã§ãã£ã¦ããæ±äº¬ã®ã¡ã³ãã¼ã¨ç¹ã«å·®ã®ãªãä»äºãã§ããã¨æãããã¨ã¯ã¨ã¦ã幸ããªãã¨ã§ããå°ãªãã¨ãåºå¤æ¥ã«å·®ã¯ããã¾ãããæã¤ãåºå¤ãéå§ãããã¨ãªã¢ã¼ãã¨ãªãã©ã¤ã³ã®ã¡ã³ãã¼ãæ··ããä¼è°ãå¢ãããã¨ãèããããããã®å¯¾çãé²ãããã¦ãã¾ããå°æ¹å¨ä½ã¡ã³ãã¼ã¯ç§ã ãã§ãªãæç¥å¨ä½ã®å 輩社å¡ãããã¦åç· å½¹ã京é½ã«ããããã®å¤åå½¢æ ãç¶ããã¨ã«ã¯ç念ã®ä½å°ãããã¾ããã
京é½ã«ç§»ä½ãã¦ãããã1å¹´ãæ±äº¬ã«ãã大å¦çã¯ãã¤ãæè¦ã§ã¹ã¿ã¼ãã¢ããã«é¢ãããã¨ãã§ããã®ã«å¯¾ãã¦ãé¢è¥¿ã§ã®ã¹ã¿ã¼ãã¢ããã¯ã¾ã ã¾ã å°ãªãããã£ããæ®æ®µäº¬é½ã«ããã®ã§ãèµ·æ¥ãã¹ã¿ã¼ãã¢ããã¸ã®å°±è·ã¨ããé¸æè¢ãåºã¾ãæ´»åããã¦ããããã¨ããã
— 岩å´å¸ â cluster (@tsukapon127) 2021å¹´11æ5æ¥
ã¨ãããã¨ã§ãæ±äº¬ä»¥å¤ã®å°åãããã¯ã©ã¹ã¿ã¼ç¤¾ã¸ã®åå ããã¾ã¡ãã¦ã¾ã!
æåèµ·ããåçã« Mac ã® QuickTime Player ã使ãã¨ãã®Tips
3è¡ã¾ã¨ã
- Automator ã使ã㨠QuickTime ã§æåèµ·ããåçããã®ãç°¡åãä»»æã®ã¨ãã£ã¿ã使ãã¦ä¾¿å©ã
- ä»»æã®ã·ã§ã¼ãã«ãããã¼ã§åçã¨åæ¢ãè¡ããã¨ãã§ãã
- åçåéæã«ããããå·»ãæ»ããããåçé度ãæ©ããããé ãããããã§ãã
ãã¾ã«ã¯æè¡ã®å°ãã¿ãä¸ã¤ãæè¦ã§æåèµ·ããããããã¨ã«ãªããé³å£°ãã¡ã¤ã«ãåçãã¦ã¯æ¢ããæåãæã¡ããã¨ããã¢ã¬ããããã¨ã«ãªãã¾ããããªãã¹ããã¼ãã¼ãããæãåãããããªãã®ã§ãã·ã§ã¼ãã«ãããã¼ã§åçã¨åæ¢ãåºæ¥ãããã«ãã¾ãã
Automator ã§ã¯ã¤ãã¯ã¢ã¯ã·ã§ã³ãä½ã
Automator ã® æ°è¦ä½æãããã¯ã¤ãã¯ã¢ã¯ã·ã§ã³ã®ä½æãé¸ã¶ã
ä¸ã®ç»é¢ã«ãªãããã«ãå·¦ãã¤ã³ã®ã©ã¤ãã©ãª > ã¦ã¼ãã£ãªãã£ã¼ãã "Apple Script ãå®è¡" ãé¸ã¶ã
ã¹ã¯ãªãããå ¥åãã
on run {input, parameters} tell application "QuickTime Player" tell front document set s to playing if s then pause else step backward by 20 # 20 step å·»ãæ»ãã1 step ä½ç§ãã¯ä¸æ play set rate to 1.2 # 1.2 åéåç end if end tell end tell return input end run
- QuickTime ã§å¯¾è±¡ã®ãã¡ã¤ã«ãéããç¶æ 㧠Automator ã®å³ä¸ã®åçãã¿ã³ãæ¼ãã¦ãæ£ããåããã¨ã確èªããã
- ååãä»ãã¦ä¿å
ä½ã£ãã¯ã¤ãã¯ã¢ã¯ã·ã§ã³ãã·ã§ã¼ãã«ãããã¼ã«ç»é²ãã
ä¸çªããã®ãã¤ãAutomatorã§ä¿åããååããä¸è¬ã®ä¸ã«ããã¯ãã
ã¯ããããã§ãã©ã®ç»é¢ã«ãã¦ããç»é²ããã·ã§ã¼ãã«ãããã¼ã§ãQuickTime ã®åçåæ¢ãåºæ¥ã¾ããåéæã«ã¡ãã£ã¨å·»ãæ»ãã¦ãããã®ã§ãå ¥åã®ç¢ºèªãã§ãã¾ãã便å©ã§ããããã²ãå©ç¨ãã ããã
Apple Script ããªã便å©ãªã®ã«ãææ³ãæ £ããªãã®ãã¤ããã
VR空éã«ã¤ã³ã¹ã¿ã¬ã¼ã·ã§ã³ãåç¾ãã試ã¿
7æãã足æã4ãæã»ã©ããã¦ãã¨ããã¤ã³ã¹ã¿ã¬ã¼ã·ã§ã³ä½åãVR空éã«åç¾ããã¨ããå¶ä½ãè¡ã£ã¦ããã®ã ããå ãããã£ã¨å ¬éãããã¨ãã§ãããã©ãã«ããªãã ããã¨ã¯æã£ã¦ããããã©ããªããªã大å¤ã§ãããã¦æ¥½ããã£ãã®ã§ãã®è¨é²ãæ®ãã
ãªã«ãä½ã£ãã®ã
æå¹ã®ããã·ã¢ã¿ã¼ã®ä»£è¡¨ã§ãããæ åä½å®¶ãç¾è¡å®¶ã§ãããä¸å³¶æ´ããã®ä½å "è¨æ¶ã®ãã©ã¤" ã®VRçã cluster ã¨ãããµã¼ãã¹ä¸ã«æ§ç¯ããã
ãã¡ãããéè³ã§ããã®ã§ãããã£ããè¦ã¦ããããã¨å¬ãããPC, Mac, ã¹ãã¼ããã©ã³ã§è¦ããã¨ãã§ããããSteam VR ã使ããç°å¢ãªã VRã´ã¼ã°ã«ã§ãè¦ãããã
"è¨æ¶ã®ãã©ã¤"ã®è©³ãã説æã¯ããã¡ãã«ããã®ã ããã©å¤ã8ããªãã£ã«ã ããä½æãããæ åä½åãã4é¢ã®ã¹ã¯ãªã¼ã³ã«å²ã¾ããªããéè³ãããã¨ããã¤ã³ã¹ã¿ã¬ã¼ã·ã§ã³ã§ãããæå¹ã®ã¤ãã³ãã¹ãã¼ã¹ã§éå¬ããã¦ããå±ç¤ºã§ãCOVID-19æµè¡ã®ä¸ã§ã¯å®¶æã§è¦ã«è¡ããã¨ã¯ããªãããåä¸äººã§è¦ã«ãã£ãã®ã7æã®ãã¨ã ããã®å ´ã§VRä½åã«ããã¦ããããªããã¨ãã交æ¸ãããã®ãå¶ä½ã®ãã£ããã ã£ãã cluster ã®æ¹ã¯ãPC, ã¹ãã¼ããã©ã³, VR ã´ã¼ã°ã«ã§ 3D空éã®ä¸ãã¢ãã¿ã¼ã§åãåã£ã¦ãã»ãã®ã¦ã¼ã¶ã¼ã¨ã¤ã³ã¿ã©ã¯ã·ã§ã³ãã¨ããã¨ãããµã¼ãã¹ã§ããã
ãªã cluster ã§ä½ã£ãã®ã
ãããããVR 空éã§ã¤ã³ã¹ã¿ã¬ã¼ã·ã§ã³ã®åç¾ãç³ãåºãã®ã¯ãèªåã®å®¶æã®ããã«COVID-19ã®çºã«ã¤ã³ã¹ã¿ã¬ã¼ã·ã§ã³ãè¦ã«è¡ããªã人ã«ããä¼å ´ã®ããã«4é¢ã«å²ã¾ããã¹ã¯ãªã¼ã³ã§æ åãéè³ããã¨ããä½é¨ãããã¦è¦ããã£ãã¨ããã®ã大ãããVR空éãä½æãã¦å ±æããã¨ãããã¼ã«ã¯ã
- Amazon Sumerian
- VRChat
- cluster
ãªã©ãããã®ã ããã©ã
- 3D空éãä½ãæ¹æ³ããããããã
- åçç°å¢ã PC, ã¹ãã¼ããã©ã³, VRã´ã¼ã°ã«ã¨æã£ã¦ãã
- ã¢ãã¿ã¼ã§æ©ãåããªã©åºæ¬çãªUIã¯æåãçµã¿è¾¼ã¾ãã¦ãã
ã¨ãããããªãã¼ã«ã¯ãªããªãç¡ãã¦ãcluster ãé¸æãããã¨ã¯ããªãæåã«æ±ºãã¦ãããå人ãåãã¦ããä¼ç¤¾ã¨ããã®ã大ãããçµæçã«ããã¯å¤§æ£è§£ã§ãUnity ã§ä½ã£ã3D空éãç¹å¥ãªè¨å®ãªãã«ã3ã¤ã®ç°å¢ã§ç°¡åã«åãã®ã¯ããªãè¯ãä½é¨ã ã£ããã¨ãã«VRã´ã¼ã°ã«ã§ä½é¨ããã®ã¯æé«ã§ãVR空éãèªä½ããã¤ããã§ã´ã¼ã°ã«ãè²·ã£ãã®ã«çµå±ããã¤ãã²ã¼ã ããã¦æ©æãç ã£ã¦ããã¨ãã人ã«ãã試ãã¦ããããããã¼ã«ã ã¨æãã
å¶ä½è¨é²
ãã®å ã¯ãcluster ã®VR空éãcluster ã§ã¯ã¯ã¼ã«ãã¨å¼ã°ããç©ãã¤ããã®ã«ãã©ããªåãéããã¤ã¤é²ãã¦è¡ã£ãããæ¸ãããã
ã¾ãä½ãå§ããæ¹æ³ã¯ãããªããã解説ããã¦ããã®ã§ãcluster 社ã®ããã°
creator.cluster.mu creator.cluster.mu
ãèªãã§ãæ¸ãã¦ããæé éãã«é²ããã°ãã¨ããããåãã¯ã¼ã«ããä½ããããã®æç¹ã§ãã¹ãã¼ããã©ã³ããã´ã¼ã°ã«ãªã©ã§èµ·åãã¦ã¿ãã¨ãèªåãä½ã£ã3D空éãå®æ©ã§åãã¯ã¯ã¯ã¯ãå³ãããã¨æãã
空éã®å¶ä½
ãã¦ããã¥ã¼ããªã¢ã«ãã§ããããèªåã®æãæã空éãä½ããã°ãªããªããä»åã®ç®æ¨ã¯ã¤ãã³ãã¹ãã¼ã¹ã§éå¬ãããã¤ã³ã¹ã¿ã¬ã¼ã·ã§ã³ã®åç¾ã§ãããå½åã¯ã¤ãã³ãã¹ãã¼ã¹ã®å³é¢ãã¨ã£ã¦ãã¦ãå®å ¨ãªåç¾ã試ã¿ãã®ã ããããã¨ããã«ç ´ç¶»ãããã¨ãåãã£ããä¸ã¤ã«ã¯ç¾å®ã«ãããã®ã®åç¾ã¯ãã¨ã¦ãå´åããããã¨ããäºå®ã«ãããæ ªå¼ä¼ç¤¾ç©æ¨è£½ä½ããã«ãã Unity Japan 社å±ã®VR空éåç¾ããã®ãããæ°åãå ¥ã£ã¦ãã¦ä½åã¨ãã¦ãã¾ãå¶ä½é²ã¨ãã¦ã¨ã¦ãé¢ç½ãã
ãããå人ã§ãããããã®ã¯æéçãæè¡çã«ç¡çã¨æã£ã¦å¥ã®æ¹æ³ãèãããã¨ã«ãããããä¸ã¤ã®çç±ã¨ãã¦ãVR空éã«ã¯VR空éã«åããæåã®å¤§ãããä¼å ´ã®ãµã¤ãºã¨ããã®ãããã¨ããäºãå¶ä½ãé²ããã«ã¤ãã¦ããã£ã¦æ¥ã¦ãå½åããå¤§å¹ ã«å¤§ããªç©ºéãä½æãããã¨ã«ãªã£ããã¨ããäºããããç¾å®ä¸çã«ã¯ãã¤ãã³ãã¹ãã¼ã¹ã®åºãã¨ããå¶éãããããä»®æ³ä¸çã«ç©ççå¶éã¯ãªãã®ã ã
空éå¶ä½ã«ã¯ãblender ã使ã£ã¦ãblender ãã Unity ã¸ã®ã¤ã³ãã¼ããè¡ãå½¢ã§è¡ã£ããããã§æ°ãä»ããã¹ããã¨ã¯2ã¤
ã¹ã±ã¼ã«ãã¡ããã¨ãã¦ãã
- blender ã¯ã¡ããã¨è¨å®ãã¦ããã¨ãã¢ãã«ã®å¤§ãããm表è¨ã§è¡¨ç¤ºãã¦ããããå®å¨ããã¹ãã¼ã¹ã®å³é¢ãã空éãèµ·ããã¨ãã«ä¾¿å©ã
- Blender で長さの単位を設定するããã¡ãã®ãµã¤ãã®è§£èª¬ãã¨ã¦ãä¸å¯§ã§ãã
- 建築・家具モデリング Tips(2.82 以降) åããµã¤ãã®ãã¡ãã®Tipsãããªãå©ãã«ãªã£ã
ããªã´ã³ã®è£è¡¨ãæå³ããæ¹åã«ãªã£ã¦ããã確ããã¦ããã¨ã¯ã¹ãã¼ããã
- blender ã¯ããªã´ã³ãã©ã¡ãã®é¢ããè¦ã¦ãæç»ãã¦ãããã·ã§ã¼ãã¼ãæ¨æºãªã®ã ããUnityã¯è¡¨é¢ããè¦ãªãã¨ããªã´ã³ãæç»ãããªãã(3Dã¯å°éå¤ãªã®ã§å¤ãªè¨èã使ã£ã¦ãããããããªããææãã¦ãããã¨å¬ããã) ãªã®ã§ãããªã´ã³ã®è¡¨è£ãæå³ãã¦ããæ¹åã«æãã¦ãããªãã¨ãUnityã«ç§»åããã¨ãã«ã天äºãåºãæ¶ããæ¨äºãèµ·ããã
blender ã§ã®ããªã´ã³ã®è¡¨è£ã«ã¤ãã¦ã¯ãã¡ãã®ãµã¤ãã®è§£èª¬ãè¯ãã£ã
blenderã«æ¨æºã§ã¤ãã¦ãã archmesh ã¯å£ãä½ã£ã¦ããã¨ãåºã天äºãä½ã£ã¦ãããããçªããã¢ãå£ã¨æ¥è§¦ãããã¨ã¡ããã¨ç©´ãããã¦ãããããã¦ã建ç¯ç©ãã¤ããã«ã¯ã¨ã¦ãè¯ããã¼ã«ã ã£ããããããä»åã®æ¡ä»¶ã§ã¯ããããç¾å®ã®ç©ºéã模å£ããå¿ è¦ããªãã¨éä¸ã§æ°ã¥ããã®ã§ãã¯ãªãã Unity ä»å±ã® ProBuilder ã¨ãã®ã»ããè¯ãã£ããããããªãã
åç»ãæµã
大ã¾ãã«ç©ºéãã§ããã¨ããã§ãä»åã®å¶ä½ã®ã¡ã¤ã³ã§ãããåç»ã®è¡¨ç¤ºã確èªãããæåã«ãæ¸ããããã©ããã®ä½åã¯8mmãã£ã«ã ããç·¨éãããåç»ã4é¢ã®å¸ã¹ã¯ãªã¼ã³ã«æå½±ããã¦ãããããã Unityå ã®ç©ºéã§åç¾ããå¿ è¦ãããã幸ã Unity ã«ã¯ Video Player ã¨ãããã£ã¡ã便å©ãªã³ã³ãã¼ãã³ãããããããã Quad ãªãã¸ã§ã¯ãã«ãã£ã¤ããã ãã§ãå¹³é¢ä¸ã§åç»ãåçãããã¨ãã§ããã
注æç¹
Video Playerã«ããåç»ã¯èªåã§çºå ãã¦ããããã§ã¯ãªããã¤ã¾ãå¤ããã®å ãå½ãããªãã¨åç»ã¯è¦ããªããç¾å®ã®ä½åã§ã¯ãããã¸ã§ã¯ã¿ã¼ã«ããæå½±ã ã£ãã®ã§ãUnityä¸ã§ãã¹ãããã©ã¤ããã¹ã¯ãªã¼ã³ã«æå½±ãããã¨ã§ã¹ã¯ãªã¼ã³ã«å ãå½ã¦ã¦ãããå ¨ãã®3Då¶ä½åå¿è ã ã£ãã®ã§ãå°é¢ã«åç´ãªããªã´ã³ã«ãå ãå ¨ãããããçã£é»ã«ãªã£ã¦ç¦ãã¿ãããªãã¨ããã£ãã®ã ...
blender ã®ã¨ããã«ãæ¸ããããUnityä¸ã§ã¯ãããªã´ã³ã®è¡¨å´ããæç»ããããªããæ¿ããªã´ã³ã§ãã quad ãªãã¸ã§ã¯ãã«åç»ãæµãã¨ã表å´ã§ããåç»ãè¦ãããå対å´ããè¦ãã¨ä½ããªã空éã«ãªã£ã¦ãã¾ãããªã®ã§ãä»åã¯ä¸¡é¢ãæç»ããã·ã§ã¼ãã¼ã使ã£ã¦æç»ãã¦ããã
ãã¾ãå ·åã«åç»ã両é¢ã§åçããã¦ããããã¤è£ã¨è¡¨ã§ã¯é¡åã«ãªãã¨ãããå¸ã¹ã¯ãªã¼ã³ãåç¾ãããããªç¶æ ãä½ãã¦ããã
ã©ã¤ãã£ã³ã°
3D空éã®èã¯ã©ã¤ãã£ã³ã°ã«ãããã¨ãããã¨ãä»åã®å¶ä½ã§ããããã£ãæ°ããããã·ã§ãã·ã§ãã ã£ã空éãã©ã¤ãã£ã³ã°ã«åã£ã¦ãããã¨ã§ããããªãã«è¦ããããã®ã«ãªã£ã¦ããã3D空éä¸ã®ã¹ã¯ãªã¼ã³ã«ã¹ãããã©ã¤ããå½ã¦ãã¨ããã®ãããã®ãããªå·¥å¤«ããããã¹ã¯ãªã¼ã³ä»¥å¤ã®ç¯å²ã«å ãå½ãããªãããã«ãä¸å¯è¦ãªãã¸ã§ã¯ãã使ã£ã¦å ã®å½ããç¯å²ãå¶éãããã¨ãå®éã®ããã¸ã§ã¯ã¿ã¼ã®æ§é ãåç¾ãã¦ããã
注æç¹
cluster ã® Creator Kit ã§ã¯ãã©ã¤ãã£ã³ã°ã®èªåãã¤ã¯ãæåããåããã¦ãããããã¯ãããå§ããããè¨å®ãªã®ã ããåå¿è ã¯ãã©ããã£ã¦ã©ã¤ãã£ã³ã°ããã¤ã¯ããã®ãããããããããããããªãããªãã©ãæåã§ãã¤ã¯ããã°ãããã¨ããã®ãæ£è§£ã§ãGPUå©ç¨ã®è¨ç®ææ³ã§ãã¤ã¯ãããã解説ã¯ãã¡ãã ããã«ã©ã¤ãã¯ãã¤ã¯ããªãã¨çµæãããããªãããã»ãã®ã©ã¤ãããã¤ã¯ããªããã¤ãããã¯ã©ã¤ãã¯ç©ºéå ã«2ã¤ã¾ã§ããç½®ããªãã®ã§ãã¤ã¯ã«ã¤ãã¦ç解ããªãã¨ã空éã®å¶ä½ã¯ãã¼ã¤ããªãã
Unity ã®ã©ã¤ãã£ã³ã°ã«ã¤ãã¦ã¯ãã¡ããªã©ãåèã«ãªã
è£ é£¾ã¨å°ç·
åç»ããæµããªã空éã¨ããã®ãããããããããªããä½åã®è§£èª¬ãå¿ è¦ã ããç¾å®ã®ã¤ãã³ãã®åçãªã©ã«ãèå³ãæã£ã¦ã»ããã£ãã®ã§ããããã£ãæç« ãåçã®å±ç¤ºãè¡ã£ããcluster ã®è§£å度ãèããã¨ãç¾å®ã«æ¯ã¹ã¦ããã¨ã大ããªæåãµã¤ãºãåçãµã¤ãºã«ããå¿ è¦ããããå®éã®å¤§ããã¯ä½åã§è¦ã¦ãããã¨ãããããåçã«ã¤ãã¦ã¯ã横3ã¡ã¼ãã«ç¸¦2ã¡ã¼ãã«ã®æ³å®ã§ãªãã¸ã§ã¯ããä½æãã¦ãã¦ãããç¾å®ã«ããªã³ããããããããªãã ããã¨ããæ°åãå³ããããåçãæç« ã®æ²ç¤ºã¯ãã¡ããã¨åã¿ã®ããããã«ãä½ã£ãã»ãããããã¨ããã®ãçºè¦ã ã£ããã¹ã¤ã«æ¿ããªã´ã³ç½®ãã¦ããã ãã§ãè¦ãããã3cm ãããã®åã¿ã®ããæ¿ã«ä¹ããã¨å¨å²ã«å½±ãè½ã¡ã¦ããããããªãã(ãã®å½±ã®è½ã¡æ¹ããã¾ããããã§ã¯ãªãã¦ãã©ãã«ããããã®ã ãåã® Unity åã足ãã¦ããªãããã ã)
æç« ãåçãç½®ãã¦ããã ãã§ã¯ãããããèªãã§ããããªãã®ã§ãç¾è¡å±ã®ã¬ã¤ã¢ã¦ããè¨æ¶ããæãèµ·ããé ç½®ãèãããçµå±ç´ç·çãªå»ä¸ã«ç½®ãã¦ããã ãã§ã¯ããã®ã§ããã£ã¨å·¥å¤«ããä½å°ã¯ããã¨æãããã種ã®ããã¯ã¨ãã¦å»ä¸ã®å¹ ãçããããã¨ã§ã3人称è¦ç¹ã®æã®ã«ã¡ã©ãæç« ã®ããã«ã«è¿ã¥ãããã«ãã¦ãããã«ã¡ã©ãè¿ã¥ãã¨ãæåã大ãããªã£ã¦ãããèªã¿ããããªãããªãå»ä¸ã®å¹ ãããã«é¢ä¿ãããã¨ããã¨ãã«ã¡ã©ãå£ã«ããè¾¼ã¾ãªãããã«åããããã¢ãã¿ã¼ã¨å£ãè¿ã¥ãã»ã©ã«ã¡ã©ãã¢ãã¿ã¼ã«å¯ã£ã¦ããã®ã ã
ã¬ãã¥ã¼ã¨ãã£ã¼ãããã¯
å¶ä½ãå§ãã段éããããã¨ã®æ åä½åã®ç·¨éãæ å½ããä¸éåããã«ãã¬ãã¥ã¼ããé¡ããã¦ãããçµæã¨ãã¦ãã£ã¬ã¯ã·ã§ã³ã®ãããªç«å ´ã§å¶ä½ã«ä»ãåã£ã¦ããããã¨ãã§ãã¨ã¦ãå©ãã£ããæ åä½åã®æå³ãªã©ã¯è£½ä½è ã«ããããããªãããã©ããã空éã«ãããã®ãã¨ããã®ãå«ããã¤ã³ã¹ã¿ã¬ã¼ã·ã§ã³ã§ããã¨æã£ã¦ããã®ã§ãèªåã²ã¨ãã§ã¯ã©ãã«ããªããªãã£ãã¨æããã¾ããä½ã£ã¦ã¯ã¢ããã¤ã¹ãããã£ã¦ãã¨ããã¤ãã¬ã¼ã·ã§ã³ãåããã®ãã¨ã¦ãè¯ãã£ããä»äºã§ã¯ãªãå人製ä½ã ã¨ãããã§ããªãã¦ãé²æãåæ»ããã¡ãªã®ã ã誰ãã¨ä¸ç·ã«ããã¨ããã®ã¯ç§ã«ã¨ã£ã¦ã¯ã¨ã¦ãå¿ è¦ãªãã¨ã ã¨çæãã次第ã
ãããã«
å¢ãã«ä»»ãã¦éåæ¸ãã¦ãã¾ã£ãããã©ãä½åãè¦ã¦ããããããã¨ã«ããããããã3Dã®ç©ºé表ç¾ãªã©ã¯æèã®è©±ã§ããã¯ãæ¬ç·¨ã§ããæ åãè¦ã¦ãããããã30年以ä¸åã®æå¹ã«ä½ãã§ãã人ãã¡ãããã£ãããã£ã«ã ã§ä½ãæ®å½±ãã¦ããã®ããè¦ãã¨ãã£ã¨çºè¦ãããã¨æãã
3D空éã®æ§ç¯ä½æ¥ã¯ã¨ã¦ã楽ãããç¡éã«æéã®å¥ªãããå°ã£ã趣å³ã ã¨ãããã¨ãåãã£ããè¯ãã¢ã»ãããUnity ã¹ãã¢ã ãã§ãªããBooth ãªã©ã«ããã£ã¦ãè¦ã¦ããã ãã§ã大éã®æéãæ¶ãã¦ãããããã§ããªã楽ããã®ã¨ããã£ã¦ã¿ãããã¨ãããã®ã§ãç´°ã ã¨ç¶ãã¦ããããã¨æããããããããã£ãã¤ã³ã¹ã¿ã¬ã¼ã·ã§ã³ã¨ãåçå±ã¨ãã3D空éã§è¡¨ç¾ãããã¨ãããããªäººãããã°ç¸è«ã«ä¹ãã®ã§é£çµ¡ãã¦ã»ããã