@@ -171,6 +171,215 @@ index baf210642..ddf63e336 100644
171171-import { Group } from 'three';
172172-import { MeshStandardNodeMaterial } from 'three/webgpu';
173173+export function createRoadMaterial(layout: CityGeneratorLayout): MeshStandardNodeMaterial;
174+ diff --git a/jsdoc-testing/jsdoc/examples/jsm/generators/ForestGenerator.d.ts b/jsdoc-testing/jsdoc/examples/jsm/generators/ForestGenerator.d.ts
175+ index 4b2772243..d481a3379 100644
176+ --- a/jsdoc-testing/jsdoc/examples/jsm/generators/ForestGenerator.d.ts
177+ +++ b/jsdoc-testing/jsdoc/examples/jsm/generators/ForestGenerator.d.ts
178+ @@ -1,3 +1,25 @@
179+ +import { Group, InstancedMesh, MeshStandardNodeMaterial, Node, UniformNode, Vector3 } from 'three/webgpu';
180+ +import { TerrainGenerator } from './TerrainGenerator.js';
181+ +
182+ +export interface ForestGeneratorParameters {
183+ + seed: number;
184+ + count: number;
185+ + detail: number;
186+ + radius: number;
187+ + height: number;
188+ + distortion: number;
189+ + sink: number;
190+ + altitudeMin: number;
191+ + altitudeMax: number;
192+ + minSlope: number;
193+ + densityFrequency: number;
194+ + minScale: number;
195+ + maxScale: number;
196+ + from: number;
197+ + to: number;
198+ + castShadow: boolean;
199+ +}
200+ +
201+ /**
202+ * Carpets a {@link TerrainGenerator} ( or anything exposing `sampleHeight`,
203+ * `sampleSlope`, `minY`, `maxY` and `parameters.size` ) with a forest of hundreds
204+ @@ -18,55 +40,24 @@
205+ * ```
206+ */
207+ export class ForestGenerator {
208+ - constructor(parameters?: {});
209+ - parameters: {
210+ - seed: number;
211+ - count: number;
212+ - detail: number;
213+ - radius: number;
214+ - height: number;
215+ - distortion: number;
216+ - sink: number;
217+ - altitudeMin: number;
218+ - altitudeMax: number;
219+ - minSlope: number;
220+ - densityFrequency: number;
221+ - minScale: number;
222+ - maxScale: number;
223+ - from: number;
224+ - to: number;
225+ - castShadow: boolean;
226+ - };
227+ - from: import("three/webgpu").UniformNode;
228+ - to: import("three/webgpu").UniformNode;
229+ - _cameraPosition: import("three/webgpu").UniformNode;
230+ + constructor(parameters?: Partial<ForestGeneratorParameters>);
231+ +
232+ + parameters: ForestGeneratorParameters;
233+ +
234+ + from: UniformNode<'float', number>;
235+ + to: UniformNode<'float', number>;
236+ +
237+ material: MeshStandardNodeMaterial;
238+ mesh: InstancedMesh | null;
239+ group: Group | null;
240+ - build(terrain: any): Group;
241+ - setCameraPosition(position: any): void;
242+ +
243+ + build(terrain: TerrainGenerator): Group;
244+ + setCameraPosition(position: Vector3): void;
245+ dispose(): void;
246+ +
247+ + static defaults: ForestGeneratorParameters
248+ }
249+ -export namespace ForestGenerator {
250+ - namespace defaults {
251+ - let seed: number;
252+ - let count: number;
253+ - let detail: number;
254+ - let radius: number;
255+ - let height: number;
256+ - let distortion: number;
257+ - let sink: number;
258+ - let altitudeMin: number;
259+ - let altitudeMax: number;
260+ - let minSlope: number;
261+ - let densityFrequency: number;
262+ - let minScale: number;
263+ - let maxScale: number;
264+ - let from: number;
265+ - let to: number;
266+ - let castShadow: boolean;
267+ - }
268+ -}
269+ +
270+ /**
271+ * The single material shared by every tree in a {@link ForestGenerator}. A plain
272+ * MeshStandardNodeMaterial lit by the scene — only the surface is authored: deep
273+ @@ -81,7 +72,4 @@ export namespace ForestGenerator {
274+ * @param {Node} to - distance past which no tree is drawn.
275+ * @return {MeshStandardNodeMaterial}
276+ */
277+ -export function createForestMaterial(from: Node, to: Node, camPos: any): MeshStandardNodeMaterial;
278+ -import { MeshStandardNodeMaterial } from 'three/webgpu';
279+ -import { InstancedMesh } from 'three';
280+ -import { Group } from 'three';
281+ +export function createForestMaterial(from: Node<'float'>, to: Node<'float'>, camPos: Node<'vec3'>): MeshStandardNodeMaterial;
282+ diff --git a/jsdoc-testing/jsdoc/examples/jsm/generators/TerrainGenerator.d.ts b/jsdoc-testing/jsdoc/examples/jsm/generators/TerrainGenerator.d.ts
283+ index a5b279bf6..7ca0512e6 100644
284+ --- a/jsdoc-testing/jsdoc/examples/jsm/generators/TerrainGenerator.d.ts
285+ +++ b/jsdoc-testing/jsdoc/examples/jsm/generators/TerrainGenerator.d.ts
286+ @@ -1,3 +1,22 @@
287+ +import { BufferGeometry, Group, MeshStandardNodeMaterial, UniformNode } from 'three/webgpu';
288+ +
289+ +export interface TerrainGeneratorParameters {
290+ + seed: number;
291+ + size: number;
292+ + segments: number;
293+ + heightScale: number;
294+ + frequency: number;
295+ + octaves: number;
296+ + lacunarity: number;
297+ + gain: number;
298+ + erosion: number;
299+ + warp: number;
300+ + valleyBias: number;
301+ + seaLevel: number;
302+ + talus: number;
303+ + talusPasses: number;
304+ +}
305+ +
306+ /**
307+ * Bakes a procedural mountain range into a single {@link THREE.BufferGeometry} and
308+ * returns a `THREE.Group` ready to add to a scene.
309+ @@ -22,55 +41,27 @@
310+ * ```
311+ */
312+ export class TerrainGenerator {
313+ - constructor(parameters?: {});
314+ - parameters: {
315+ - seed: number;
316+ - size: number;
317+ - segments: number;
318+ - heightScale: number;
319+ - frequency: number;
320+ - octaves: number;
321+ - lacunarity: number;
322+ - gain: number;
323+ - erosion: number;
324+ - warp: number;
325+ - valleyBias: number;
326+ - seaLevel: number;
327+ - talus: number;
328+ - talusPasses: number;
329+ - };
330+ - minHeight: import("three/webgpu").UniformNode;
331+ - maxHeight: import("three/webgpu").UniformNode;
332+ + constructor(parameters?: Partial<TerrainGeneratorParameters>);
333+ +
334+ + parameters: TerrainGeneratorParameters;
335+ +
336+ + minHeight: UniformNode<'float', number>;
337+ + maxHeight: UniformNode<'float', number>;
338+ +
339+ material: MeshStandardNodeMaterial;
340+ geometry: BufferGeometry | null;
341+ group: Group | null;
342+ +
343+ + heights?: Float32Array;
344+ + gridSize?: number;
345+ + minY?: number;
346+ + maxY?: number;
347+ +
348+ build(): Group;
349+ - heights: Float32Array<ArrayBuffer> | undefined;
350+ - gridSize: number | undefined;
351+ - minY: number | undefined;
352+ - maxY: number | undefined;
353+ - sampleHeight(x: any, z: any): number;
354+ - sampleSlope(x: any, z: any): number;
355+ +
356+ + sampleHeight(x: number, z: number): number;
357+ + sampleSlope(x: number, z: number): number;
358+ dispose(): void;
359+ +
360+ + static defaults: TerrainGeneratorParameters;
361+ }
362+ -export namespace TerrainGenerator {
363+ - namespace defaults {
364+ - let seed: number;
365+ - let size: number;
366+ - let segments: number;
367+ - let heightScale: number;
368+ - let frequency: number;
369+ - let octaves: number;
370+ - let lacunarity: number;
371+ - let gain: number;
372+ - let erosion: number;
373+ - let warp: number;
374+ - let valleyBias: number;
375+ - let seaLevel: number;
376+ - let talus: number;
377+ - let talusPasses: number;
378+ - }
379+ -}
380+ -import { MeshStandardNodeMaterial } from 'three/webgpu';
381+ -import { BufferGeometry } from 'three';
382+ -import { Group } from 'three';
174383diff --git a/jsdoc-testing/jsdoc/examples/jsm/generators/city/SidewalkGenerator.d.ts b/jsdoc-testing/jsdoc/examples/jsm/generators/city/SidewalkGenerator.d.ts
175384index 81c1a0ec9..d560e432c 100644
176385--- a/jsdoc-testing/jsdoc/examples/jsm/generators/city/SidewalkGenerator.d.ts
0 commit comments