Three.js + React Three Fiber で GLTF モデルのテクスチャが荒く表示される問題と解決策
概要 React Three Fiber を使用して GLTF モデルを表示した際、テクスチャがぼやけて見える、または荒く表示される問題に遭遇しました。本記事では、その原因と解決策を解説します。 症状 GLTF モデルのテクスチャがぼやけて表示される 他の 3D ビューアでは正常に表示される同じモデルが、自作のビューアでは荒く見える dpr(デバイスピクセル比)や antialias を設定しても改善しない 原因 Three.js r152 以降、デフォルトの出力カラースペースが変更されました。 GLTF モデルのテクスチャは通常 sRGB 色空間 で保存されています。しかし、Three.js のデフォルト設定では出力が Linear 色空間 になっているため、以下の問題が発生します: テクスチャの補間処理が Linear 空間で行われる ミップマップの生成が正しい色空間で行われない 結果として、テクスチャがぼやけたり、色がおかしくなる 解決策 Canvas の onCreated コールバックで outputColorSpace を設定します。 Before(問題のあるコード) i < m C / p a c d g < C o n a p l S a r v m r = c n t a e = { e v s r { { n a { a [ e s = 1 a > C { , n a { t n 2 i v p ] a a o } l s s i i a } t s i : f o r n t o : r m u [ e ' 5 @ , } r } e 5 a , c t 5 - ] t , h r f e o e v / : f i 5 b 0 e r } ' } ; After(修正後のコード) i i < m m C / p p a c d g } o } < C o o n a p l } n } S a r r v m r = a p p t t C g c n t t a e = { n r o o o r l e v s r { { t e w n n e . n a { a M i s e e e a o e s = a a e r M M t u > C a { t l r P a a e t a s { h i v r p p d p n . a e e p p = u v T p m s D f i i { t a H o i : r e n n ( C s R s n a r g g { o E i ( t w e : E l } E t w r i n x g o i i u n c T p l r f f o n e g e H o S r r n d , B : R s } p o o : o u E u ) a m m w f ' E r c [ . f h . e = e ' ' 5 d e i A : > @ t , e r g C = r h v : h E 1 { e r 5 i - S , T a e , c t p F H c e e r e i R t ' 5 P u r l E - ; ] i e f m E t , x , o i . h e r c S r f l m T R e o R a o G e v a n n B / : t c e C f i e M o i 5 o ' a l b 0 , , p o e p r r } 2 i S ' } ) n p ; } g a , c e ; 各設定の説明 outputColorSpace: THREE.SRGBColorSpace 最も重要な設定 。出力カラースペースを sRGB に設定することで、テクスチャが正しく表示されます。 ...