@xrift/world-components 0.33.2 → 0.33.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Mirror/index.d.ts +1 -1
- package/dist/components/Mirror/index.d.ts.map +1 -1
- package/dist/components/Mirror/index.js +66 -5
- package/dist/components/Mirror/index.js.map +1 -1
- package/dist/components/Mirror/types.d.ts +2 -0
- package/dist/components/Mirror/types.d.ts.map +1 -1
- package/dist/fonts/constants.d.ts +7 -0
- package/dist/fonts/constants.d.ts.map +1 -0
- package/dist/fonts/constants.js +25 -0
- package/dist/fonts/constants.js.map +1 -0
- package/dist/hooks/useJapaneseFont.d.ts +4 -0
- package/dist/hooks/useJapaneseFont.d.ts.map +1 -0
- package/dist/hooks/useJapaneseFont.js +13 -0
- package/dist/hooks/useJapaneseFont.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { MirrorProps } from './types';
|
|
2
2
|
export type { MirrorProps } from './types';
|
|
3
|
-
export declare function Mirror({ position, rotation, size, color, textureResolution, }: MirrorProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare function Mirror({ position, rotation, size, color, textureResolution, lodDistance, }: MirrorProps): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Mirror/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Mirror/index.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGrC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AA6B1C,wBAAgB,MAAM,CAAC,EACrB,QAAuB,EACvB,QAAoB,EACpB,IAAa,EACb,KAAgB,EAChB,iBAAuB,EACvB,WAAkC,GACnC,EAAE,WAAW,2CAkGb"}
|
|
@@ -1,12 +1,40 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useFrame, useThree } from '@react-three/fiber';
|
|
3
3
|
import { useEffect, useRef } from 'react';
|
|
4
|
-
import { PlaneGeometry } from 'three';
|
|
4
|
+
import { Color, Mesh, PlaneGeometry, ShaderMaterial, Vector3 } from 'three';
|
|
5
5
|
import { Reflector } from 'three/addons/objects/Reflector.js';
|
|
6
|
-
|
|
6
|
+
import { DEFAULT_LOD_DISTANCE, LOD_HYSTERESIS_RATIO } from './constants';
|
|
7
|
+
import { shouldUseReflector } from './utils';
|
|
8
|
+
const _worldPos = new Vector3();
|
|
9
|
+
const fallbackVertexShader = `
|
|
10
|
+
varying vec3 vWorldNormal;
|
|
11
|
+
varying vec3 vWorldPosition;
|
|
12
|
+
void main() {
|
|
13
|
+
vec4 worldPos = modelMatrix * vec4(position, 1.0);
|
|
14
|
+
vWorldPosition = worldPos.xyz;
|
|
15
|
+
vWorldNormal = normalize((modelMatrix * vec4(normal, 0.0)).xyz);
|
|
16
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
const fallbackFragmentShader = `
|
|
20
|
+
uniform vec3 baseColor;
|
|
21
|
+
uniform vec3 edgeColor;
|
|
22
|
+
uniform float fresnelPower;
|
|
23
|
+
varying vec3 vWorldNormal;
|
|
24
|
+
varying vec3 vWorldPosition;
|
|
25
|
+
void main() {
|
|
26
|
+
vec3 viewDir = normalize(cameraPosition - vWorldPosition);
|
|
27
|
+
float fresnel = pow(1.0 - max(dot(viewDir, vWorldNormal), 0.0), fresnelPower);
|
|
28
|
+
vec3 color = mix(baseColor, edgeColor, fresnel);
|
|
29
|
+
gl_FragColor = vec4(color, 1.0);
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
export function Mirror({ position = [0, 2.5, -9], rotation = [0, 0, 0], size = [8, 5], color = 0xcccccc, textureResolution = 512, lodDistance = DEFAULT_LOD_DISTANCE, }) {
|
|
7
33
|
const groupRef = useRef(null);
|
|
8
34
|
const reflectorRef = useRef(null);
|
|
9
|
-
const
|
|
35
|
+
const fallbackRef = useRef(null);
|
|
36
|
+
const usingReflectorRef = useRef(true);
|
|
37
|
+
const gl = useThree((s) => s.gl);
|
|
10
38
|
useEffect(() => {
|
|
11
39
|
const currentGroup = groupRef.current;
|
|
12
40
|
if (!currentGroup)
|
|
@@ -26,23 +54,56 @@ export function Mirror({ position = [0, 2.5, -9], rotation = [0, 0, 0], size = [
|
|
|
26
54
|
reflector.position.set(0, 0, 0);
|
|
27
55
|
currentGroup.add(reflector);
|
|
28
56
|
reflectorRef.current = reflector;
|
|
57
|
+
// Fallback mesh: Fresnel シェーダーによる擬似ミラー
|
|
58
|
+
const fallbackGeometry = new PlaneGeometry(size[0], size[1]);
|
|
59
|
+
const fallbackMaterial = new ShaderMaterial({
|
|
60
|
+
vertexShader: fallbackVertexShader,
|
|
61
|
+
fragmentShader: fallbackFragmentShader,
|
|
62
|
+
uniforms: {
|
|
63
|
+
baseColor: { value: new Color(color) },
|
|
64
|
+
edgeColor: { value: new Color(0xffffff) },
|
|
65
|
+
fresnelPower: { value: 3.0 },
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
const fallbackMesh = new Mesh(fallbackGeometry, fallbackMaterial);
|
|
69
|
+
fallbackMesh.visible = false;
|
|
70
|
+
currentGroup.add(fallbackMesh);
|
|
71
|
+
fallbackRef.current = fallbackMesh;
|
|
72
|
+
usingReflectorRef.current = true;
|
|
29
73
|
return () => {
|
|
30
|
-
if (currentGroup
|
|
74
|
+
if (currentGroup) {
|
|
31
75
|
currentGroup.remove(reflector);
|
|
76
|
+
currentGroup.remove(fallbackMesh);
|
|
32
77
|
geometry.dispose();
|
|
33
78
|
reflector.dispose?.();
|
|
79
|
+
fallbackGeometry.dispose();
|
|
80
|
+
fallbackMaterial.dispose();
|
|
34
81
|
}
|
|
35
82
|
reflectorRef.current = null;
|
|
83
|
+
fallbackRef.current = null;
|
|
36
84
|
};
|
|
37
85
|
}, [size[0], size[1], color, textureResolution, gl]);
|
|
38
86
|
// Reflectorの内部カメラ(virtualCamera)の全レイヤーを有効化
|
|
39
87
|
// VRMFirstPersonのレイヤー設定により、メインカメラではThirdPersonOnlyレイヤー(頭部)が
|
|
40
88
|
// 非表示になっているが、鏡には全身を映す必要があるため
|
|
41
89
|
// onBeforeRenderでメインカメラの設定がコピーされるため、毎フレーム設定が必要
|
|
42
|
-
useFrame(() => {
|
|
90
|
+
useFrame(({ camera }) => {
|
|
43
91
|
const reflector = reflectorRef.current;
|
|
44
92
|
if (!reflector)
|
|
45
93
|
return;
|
|
94
|
+
// LOD: カメラと鏡の距離に応じて Reflector ↔ envMap を切り替え
|
|
95
|
+
const fallback = fallbackRef.current;
|
|
96
|
+
if (fallback && groupRef.current) {
|
|
97
|
+
const distance = camera.position.distanceTo(groupRef.current.getWorldPosition(_worldPos));
|
|
98
|
+
const useReflector = shouldUseReflector(distance, lodDistance, usingReflectorRef.current, LOD_HYSTERESIS_RATIO);
|
|
99
|
+
if (useReflector !== usingReflectorRef.current) {
|
|
100
|
+
usingReflectorRef.current = useReflector;
|
|
101
|
+
reflector.visible = useReflector;
|
|
102
|
+
fallback.visible = !useReflector;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (!reflector.visible)
|
|
106
|
+
return;
|
|
46
107
|
// Reflectorの内部カメラにアクセス(型定義にないためanyでキャスト)
|
|
47
108
|
const virtualCamera = reflector.camera;
|
|
48
109
|
if (virtualCamera) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Mirror/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAS,aAAa,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Mirror/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Mirror/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,WAAW;IACX,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,oBAAoB;IACpB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Mirror/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,WAAW;IACX,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,oBAAoB;IACpB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Noto Sans JP Regular (CDN) */
|
|
2
|
+
export declare const JAPANESE_FONT_URL = "https://cdn.jsdelivr.net/fontsource/fonts/noto-sans-jp@latest/japanese-400-normal.ttf";
|
|
3
|
+
/** MSDF 生成に含める文字セット(ひらがな・カタカナ・常用句読点・ASCII) */
|
|
4
|
+
export declare const JAPANESE_CHARSET: string;
|
|
5
|
+
/** MSDF テクスチャサイズ(日本語文字数に対応するため大きめ) */
|
|
6
|
+
export declare const JAPANESE_TEXTURE_SIZE: [number, number];
|
|
7
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/fonts/constants.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,eAAO,MAAM,iBAAiB,0FAC2D,CAAA;AAEzF,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,QAkBnB,CAAA;AAEV,sCAAsC;AACtC,eAAO,MAAM,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAgB,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Noto Sans JP Regular (CDN) */
|
|
2
|
+
export const JAPANESE_FONT_URL = 'https://cdn.jsdelivr.net/fontsource/fonts/noto-sans-jp@latest/japanese-400-normal.ttf';
|
|
3
|
+
/** MSDF 生成に含める文字セット(ひらがな・カタカナ・常用句読点・ASCII) */
|
|
4
|
+
export const JAPANESE_CHARSET = [
|
|
5
|
+
// ASCII
|
|
6
|
+
' !"#$%&\'()*+,-./0123456789:;<=>?@',
|
|
7
|
+
'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`',
|
|
8
|
+
'abcdefghijklmnopqrstuvwxyz{|}~',
|
|
9
|
+
// ひらがな
|
|
10
|
+
'ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞ',
|
|
11
|
+
'ただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽ',
|
|
12
|
+
'まみむめもゃやゅゆょよらりるれろゎわゐゑをん',
|
|
13
|
+
// カタカナ
|
|
14
|
+
'ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾ',
|
|
15
|
+
'タダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポ',
|
|
16
|
+
'マミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ',
|
|
17
|
+
// 日本語句読点・記号
|
|
18
|
+
'。、・「」『』()〔〕【】〜ー―…‥々〇〈〉《》!?',
|
|
19
|
+
' .,:;/¥$#&*+−=|<>_',
|
|
20
|
+
// 長音・半濁点
|
|
21
|
+
'ーー゛゜',
|
|
22
|
+
].join('');
|
|
23
|
+
/** MSDF テクスチャサイズ(日本語文字数に対応するため大きめ) */
|
|
24
|
+
export const JAPANESE_TEXTURE_SIZE = [2048, 2048];
|
|
25
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/fonts/constants.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,MAAM,CAAC,MAAM,iBAAiB,GAC5B,uFAAuF,CAAA;AAEzF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ;IACR,oCAAoC;IACpC,mCAAmC;IACnC,gCAAgC;IAChC,OAAO;IACP,gCAAgC;IAChC,iCAAiC;IACjC,wBAAwB;IACxB,OAAO;IACP,gCAAgC;IAChC,iCAAiC;IACjC,2BAA2B;IAC3B,YAAY;IACZ,4BAA4B;IAC5B,oBAAoB;IACpB,SAAS;IACT,MAAM;CACP,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAEV,sCAAsC;AACtC,MAAM,CAAC,MAAM,qBAAqB,GAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useJapaneseFont.d.ts","sourceRoot":"","sources":["../../src/hooks/useJapaneseFont.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe,GAAI,UAAU;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,gDAS7D,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useTTF } from '@react-three/uikit/dist/use-ttf';
|
|
2
|
+
import { JAPANESE_FONT_URL, JAPANESE_CHARSET, JAPANESE_TEXTURE_SIZE, } from '../fonts/constants';
|
|
3
|
+
export const useJapaneseFont = (options) => {
|
|
4
|
+
const input = [
|
|
5
|
+
{
|
|
6
|
+
url: JAPANESE_FONT_URL,
|
|
7
|
+
charset: options?.charset ?? JAPANESE_CHARSET,
|
|
8
|
+
textureSize: JAPANESE_TEXTURE_SIZE,
|
|
9
|
+
},
|
|
10
|
+
];
|
|
11
|
+
return useTTF(input);
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=useJapaneseFont.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useJapaneseFont.js","sourceRoot":"","sources":["../../src/hooks/useJapaneseFont.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAA8B,EAAE,EAAE;IAChE,MAAM,KAAK,GAAmB;QAC5B;YACE,GAAG,EAAE,iBAAiB;YACtB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,gBAAgB;YAC7C,WAAW,EAAE,qBAAqB;SACnC;KACF,CAAA;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC,CAAA"}
|