idea of usePipeline() #144
takuma-hmng8
started this conversation in
Ideas
Replies: 2 comments
-
/*===============================================
reactive way
- fxの変更をtriggerにkeyを変更することで、reactiveにfxを変更することが可能
===============================================*/
const Composer = ({ compose }: { compose: FxConfig[] }) => {
const { texture, render } = useComposer(...compose);
useFrame((state) => render(state));
return <fxMaterialImpl key={FxMaterialImpl.key} src={texture} />;
};
export const Playground = () => {
const { size } = useThree();
const compose: FxConfig[] = [
{ fx: useFluid, size, dpr: 0.3 },
{
fx: useNoise,
size,
dpr: 0.1,
mixSrcColorFactor: 0.2,
},
];
// keyを変更することで、fxの変更をreactiveにすることが可能
// UIではGUIの変更を検知して、keyを変更することで、reactiveに変更を反映するなどを想定
const [composeCache, setComposeCache] = useState(compose.length);
const [version, setVersion] = useState(0);
if (compose.length !== composeCache) {
setComposeCache(compose.length);
setVersion(version + 1);
}
return (
<mesh>
<planeGeometry args={[2, 2]} />
<Composer compose={compose} key={version} />
</mesh>
);
};
/*===============================================
non-reactive way
- resolutionはreactive
- ただし他のhooksと同様、resolution以外はnon-reactive
===============================================*/
export const Playground = () => {
const { size } = useThree();
const { texture, render } = useComposer(
{
fx: useFluid,
size,
dpr: 0.2,
},
{
fx: useNoise,
size,
dpr: 0.1,
mixSrcColorFactor: 0.2,
}
);
useFrame((state) => render(state));
return (
<mesh>
<planeGeometry args={[2, 2]} />
<fxMaterialImpl key={FxMaterialImpl.key} src={texture} />
</mesh>
);
}; |
Beta Was this translation helpful? Give feedback.
0 replies
-
/*===============================================
reactive way
- fxの変更をtriggerにkeyを変更することで、reactiveにfxを変更することが可能
===============================================*/
const Pipeline = ({
fxConfig,
pipelineConfig,
}: {
fxConfig: FxConfig[];
pipelineConfig: PipelineConfig[];
}) => {
const { texture, render, setPipeline } = usePipeline(...fxConfig);
setPipeline(...pipelineConfig);
useFrame((state) => render(state));
return <fxMaterialImpl key={FxMaterialImpl.key} src={texture} />;
};
export const Playground = () => {
const { size } = useThree();
const fxConfig: FxConfig[] = [
{ fx: useFluid, size, dpr: 0.3 },
{
fx: useNoise,
size,
dpr: 0.2,
mixSrcColorFactor: 0.2,
},
];
const pipelineConfig: PipelineConfig[] = [{}, { mixSrc: 0 }];
// keyを変更することで、fxの変更をreactiveにすることが可能
// UIではGUIの変更を検知して、keyを変更することで、reactiveに変更を反映するなどを想定
const [pipelineCache, setPipelineCache] = useState(fxConfig.length);
const [version, setVersion] = useState(0);
if (fxConfig.length !== pipelineCache) {
setPipelineCache(fxConfig.length);
setVersion(version + 1);
}
return (
<mesh>
<planeGeometry args={[2, 2]} />
<Pipeline
fxConfig={fxConfig}
pipelineConfig={pipelineConfig}
key={version}
/>
</mesh>
);
};
/*===============================================
non-reactive way
- resolutionはreactive
- ただし他のhooksと同様、resolution以外はnon-reactive
===============================================*/
export const Playground = () => {
const { size } = useThree();
const { texture, render, setPipeline } = usePipeline(
{
fx: useFluid,
size,
dpr: 0.2,
},
{
fx: useNoise,
size,
dpr: 0.1,
mixSrcColorFactor: 0.2,
}
);
setPipeline({}, { mixSrc: 0 });
useFrame((state) => render(state));
return (
<mesh>
<planeGeometry args={[2, 2]} />
<fxMaterialImpl key={FxMaterialImpl.key} src={texture} />
</mesh>
);
}; |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Beta Was this translation helpful? Give feedback.
All reactions