Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 68253fae41 | |||
| 2dabb73d3d |
@@ -3,9 +3,9 @@ const SUN_LIGHT_COLOR = "#ffe2bf";
|
|||||||
|
|
||||||
export const LIGHTING_DEFAULTS = {
|
export const LIGHTING_DEFAULTS = {
|
||||||
ambientColor: AMBIENT_LIGHT_COLOR,
|
ambientColor: AMBIENT_LIGHT_COLOR,
|
||||||
ambientIntensity: 0.9,
|
ambientIntensity: 0.7,
|
||||||
sunColor: SUN_LIGHT_COLOR,
|
sunColor: SUN_LIGHT_COLOR,
|
||||||
sunIntensity: 2.2,
|
sunIntensity: 1.9,
|
||||||
sunX: 70,
|
sunX: 70,
|
||||||
sunY: 45,
|
sunY: 45,
|
||||||
sunZ: 35,
|
sunZ: 35,
|
||||||
|
|||||||
@@ -25,6 +25,20 @@ export function getMapLodModelPath(modelName: string): string | null {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const MAP_LOD_SCALE_MULTIPLIERS = {
|
||||||
|
sapin: 0.35,
|
||||||
|
buisson: 0.7,
|
||||||
|
} as const satisfies Partial<Record<keyof typeof MAP_LOD_MODEL_PATHS, number>>;
|
||||||
|
|
||||||
|
export function getMapLodScaleMultiplier(modelName: string): number {
|
||||||
|
return (
|
||||||
|
MAP_LOD_SCALE_MULTIPLIERS[
|
||||||
|
modelName as keyof typeof MAP_LOD_SCALE_MULTIPLIERS
|
||||||
|
] ?? 1
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export function selectMapModelPathByDistance({
|
export function selectMapModelPathByDistance({
|
||||||
distance,
|
distance,
|
||||||
modelName,
|
modelName,
|
||||||
|
|||||||
@@ -8,7 +8,11 @@ import {
|
|||||||
} from "react";
|
} from "react";
|
||||||
import { useFrame, useThree } from "@react-three/fiber";
|
import { useFrame, useThree } from "@react-three/fiber";
|
||||||
import { CHUNK_CONFIG } from "@/data/world/chunkStreamingConfig";
|
import { CHUNK_CONFIG } from "@/data/world/chunkStreamingConfig";
|
||||||
import { selectMapModelPathByDistance } from "@/data/world/mapLodConfig";
|
import {
|
||||||
|
getMapLodModelPath,
|
||||||
|
getMapLodScaleMultiplier,
|
||||||
|
selectMapModelPathByDistance,
|
||||||
|
} from "@/data/world/mapLodConfig";
|
||||||
import { useCameraMode } from "@/hooks/debug/useCameraMode";
|
import { useCameraMode } from "@/hooks/debug/useCameraMode";
|
||||||
import { useSceneMode } from "@/hooks/debug/useSceneMode";
|
import { useSceneMode } from "@/hooks/debug/useSceneMode";
|
||||||
import {
|
import {
|
||||||
@@ -205,12 +209,17 @@ export function VegetationSystem({
|
|||||||
<group name="vegetation-system">
|
<group name="vegetation-system">
|
||||||
{visibleChunks.map((chunk) => {
|
{visibleChunks.map((chunk) => {
|
||||||
const modelPath = chunkModelPaths.get(chunk.key) ?? chunk.modelPath;
|
const modelPath = chunkModelPaths.get(chunk.key) ?? chunk.modelPath;
|
||||||
|
const mapName = VEGETATION_TYPES[chunk.type].mapName;
|
||||||
|
const isLod = modelPath === getMapLodModelPath(mapName);
|
||||||
|
const scaleMultiplier =
|
||||||
|
chunk.scaleMultiplier *
|
||||||
|
(isLod ? getMapLodScaleMultiplier(mapName) : 1);
|
||||||
return (
|
return (
|
||||||
<Suspense key={`${chunk.key}:${modelPath}`} fallback={null}>
|
<Suspense key={`${chunk.key}:${modelPath}`} fallback={null}>
|
||||||
<InstancedVegetation
|
<InstancedVegetation
|
||||||
modelPath={modelPath}
|
modelPath={modelPath}
|
||||||
instances={chunk.instances}
|
instances={chunk.instances}
|
||||||
scaleMultiplier={chunk.scaleMultiplier}
|
scaleMultiplier={scaleMultiplier}
|
||||||
castShadow={chunk.castShadow}
|
castShadow={chunk.castShadow}
|
||||||
receiveShadow={chunk.receiveShadow}
|
receiveShadow={chunk.receiveShadow}
|
||||||
windStrength={chunk.windStrength}
|
windStrength={chunk.windStrength}
|
||||||
|
|||||||
Reference in New Issue
Block a user