TSL: Add support for BatchIndirectIndex
### Description
If I want to extend BatchedMesh with per instance emissive I need access to indirectIndex.
### Solution
Similar solution as TSL.batchColor
### Alternatives
Custom fetch:
const getIndirectIndex = Fn( ( [ indirectTexture, id ] : [any, any] ) => {
const size = int(textureSize(textureLoad(indirectTexture),0).x).toConst();
const x = int(id).mod(size).toConst();
const y = int(id).div(size).toConst();
return textureLoad(indirectTexture,ivec2(x,y)).x;
} );
const batchingIdNode = TSL.instanceIndex;
const indirectIndex = getIndirectIndex(indirectTexture, TSL.int( batchingIdNode ));`
### Additional context
Solution with emissive fetch:
```
const getBatchingEmissive = Fn( ( [ emissiveTexture, id ]: [any, any] ) => {
const size = int(textureSize(textureLoad(emissiveTexture),0).x).toConst();
const x = int(id).mod(size).toConst();
const y = int(id).div(size).toConst();
return textureLoad(emissiveTexture,ivec2(x,y)).x;
} ); `
const getIndirectIndex = Fn( ( [ indirectTexture, id ] : [any, any] ) => {
const size = int(textureSize(textureLoad(indirectTexture),0).x).toConst();
const x = int(id).mod(size).toConst();
const y = int(id).div(size).toConst();
return textureLoad(indirectTexture,ivec2(x,y)).x;
} );
const batchingIdNode = TSL.instanceIndex;
const indirectIndex = getIndirectIndex(indirectTexture, TSL.int( batchingIdNode ));
const emissive = TSL.vertexStage(TSL.float(getBatchingEmissive(emissiveTexture,indirectIndex)));
```
0 条评论