Skip to content

Commit f8c63d0

Browse files
committed
accessor naming convention
1 parent 468d812 commit f8c63d0

File tree

1 file changed

+34
-30
lines changed
  • apps/typegpu-docs/src/examples/threejs/compute-particles

1 file changed

+34
-30
lines changed

apps/typegpu-docs/src/examples/threejs/compute-particles/index.ts

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ const bounce = TSL.uniform(0.8);
2424
const friction = TSL.uniform(0.99);
2525
const size = TSL.uniform(0.12);
2626
const clickPosition = TSL.uniform(new THREE.Vector3());
27-
const gravityUniform = fromTSL(gravity, { type: d.f32 });
28-
const bounceUniform = fromTSL(bounce, { type: d.f32 });
29-
const frictionUniform = fromTSL(friction, { type: d.f32 });
30-
const clickPositionUniform = fromTSL(clickPosition, { type: d.vec3f });
27+
const gravityAccessor = fromTSL(gravity, { type: d.f32 });
28+
const bounceAccessor = fromTSL(bounce, { type: d.f32 });
29+
const frictionAccessor = fromTSL(friction, { type: d.f32 });
30+
const clickPositionAccessor = fromTSL(clickPosition, { type: d.vec3f });
3131

3232
const camera = new THREE.PerspectiveCamera(
3333
50,
@@ -46,56 +46,60 @@ const separation = 0.2;
4646
const amount = Math.sqrt(particleCount);
4747
const offset = amount / 2;
4848

49-
const instanceIndex = fromTSL(TSL.instanceIndex, { type: d.u32 });
50-
const positionsBuffer = fromTSL(positions, { type: d.arrayOf(d.vec3f) });
51-
const colorsBuffer = fromTSL(colors, { type: d.arrayOf(d.vec3f) });
49+
const instanceIndexAccessor = fromTSL(TSL.instanceIndex, { type: d.u32 });
50+
const positionsAccessor = fromTSL(positions, { type: d.arrayOf(d.vec3f) });
51+
const colorsAccessor = fromTSL(colors, { type: d.arrayOf(d.vec3f) });
5252

5353
const computeInit = toTSL(() => {
5454
'use gpu';
55-
const instanceIdx = instanceIndex.$;
56-
const position = positionsBuffer.$[instanceIdx];
57-
const color = colorsBuffer.$[instanceIdx];
55+
const instanceIdx = instanceIndexAccessor.$;
56+
const position = positionsAccessor.$[instanceIdx];
57+
const color = colorsAccessor.$[instanceIdx];
5858

5959
const x = instanceIdx % d.u32(amount);
6060
const z = instanceIdx / amount;
6161

6262
position.x = (offset - d.f32(x)) * separation;
6363
position.z = (offset - d.f32(z)) * separation;
64-
positionsBuffer.$[instanceIdx] = d.vec3f(position);
64+
positionsAccessor.$[instanceIdx] = d.vec3f(position);
6565

6666
randf.seed(d.f32(instanceIdx / amount));
6767
color.x = randf.sample();
6868
randf.seed(d.f32(instanceIdx / amount) + 2);
6969
color.y = randf.sample();
70-
colorsBuffer.$[instanceIdx] = d.vec3f(color);
70+
colorsAccessor.$[instanceIdx] = d.vec3f(color);
7171
}).compute(particleCount).setName('Init Particles TypeGPU');
7272
renderer.compute(computeInit);
7373

74-
const velocitiesBuffer = fromTSL(velocities, { type: d.arrayOf(d.vec3f) });
75-
const computeParticles = toTSL(() => {
74+
const velocitiesAccessor = fromTSL(velocities, { type: d.arrayOf(d.vec3f) });
75+
const computeAccessor = toTSL(() => {
7676
'use gpu';
77-
const instanceIdx = instanceIndex.$;
78-
let position = positionsBuffer.$[instanceIdx];
79-
let velocity = velocitiesBuffer.$[instanceIdx];
77+
const instanceIdx = instanceIndexAccessor.$;
78+
let position = positionsAccessor.$[instanceIdx];
79+
let velocity = velocitiesAccessor.$[instanceIdx];
8080

81-
velocity = velocity.add(d.vec3f(0, gravityUniform.$, 0));
81+
velocity = velocity.add(d.vec3f(0, gravityAccessor.$, 0));
8282
position = position.add(velocity);
83-
velocity = velocity.mul(frictionUniform.$);
83+
velocity = velocity.mul(frictionAccessor.$);
8484

8585
if (position.y < 0) {
8686
position.y = 0;
87-
velocity.y = -velocity.y * bounceUniform.$;
87+
velocity.y = -velocity.y * bounceAccessor.$;
8888
velocity = velocity.mul(d.vec3f(0.9, 1, 0.9));
8989
}
9090

91-
positionsBuffer.$[instanceIdx] = d.vec3f(position);
92-
velocitiesBuffer.$[instanceIdx] = d.vec3f(velocity);
91+
positionsAccessor.$[instanceIdx] = d.vec3f(position);
92+
velocitiesAccessor.$[instanceIdx] = d.vec3f(velocity);
9393
}).compute(particleCount).setName('Update Particles TypeGPU');
9494

9595
const material = new THREE.SpriteNodeMaterial();
9696
material.colorNode = toTSL(() => {
9797
'use gpu';
98-
return d.vec4f(uv().$.mul(colorsBuffer.$[instanceIndex.$].xy), 0, 1);
98+
return d.vec4f(
99+
uv().$.mul(colorsAccessor.$[instanceIndexAccessor.$].xy),
100+
0,
101+
1,
102+
);
99103
});
100104
material.positionNode = positions.toAttribute();
101105
material.scaleNode = size;
@@ -125,20 +129,20 @@ const pointer = new THREE.Vector2();
125129

126130
const computeHit = toTSL(() => {
127131
'use gpu';
128-
const instanceIdx = instanceIndex.$;
129-
const position = positionsBuffer.$[instanceIdx];
130-
let velocity = velocitiesBuffer.$[instanceIdx];
132+
const instanceIdx = instanceIndexAccessor.$;
133+
const position = positionsAccessor.$[instanceIdx];
134+
let velocity = velocitiesAccessor.$[instanceIdx];
131135

132-
const dist = std.distance(position, clickPositionUniform.$);
133-
const dir = std.normalize(position.sub(clickPositionUniform.$));
136+
const dist = std.distance(position, clickPositionAccessor.$);
137+
const dir = std.normalize(position.sub(clickPositionAccessor.$));
134138
const distArea = std.max(0, 3 - dist);
135139

136140
const power = distArea * 0.01;
137141
randf.seed(d.f32(instanceIdx / amount));
138142
const relativePower = power * (1.5 * randf.sample() + 0.5);
139143

140144
velocity = velocity.add(dir.mul(relativePower));
141-
velocitiesBuffer.$[instanceIdx] = d.vec3f(velocity);
145+
velocitiesAccessor.$[instanceIdx] = d.vec3f(velocity);
142146
}).compute(particleCount).setName('Hit Particles TypeGPU');
143147

144148
function onMove(event: PointerEvent) {
@@ -195,7 +199,7 @@ resizeObserver.observe(canvas);
195199
const animate = () => {
196200
cameraControls.update();
197201

198-
renderer.compute(computeParticles);
202+
renderer.compute(computeAccessor);
199203
renderer.render(scene, camera);
200204
};
201205

0 commit comments

Comments
 (0)