R3f Textures

enzed/r3f-skills/skills/r3f-textures

作者 enzed4a11805f0973无许可证128 个星标收录于 2026年10月8日更新于 2026年10月8日仓库5周前更新

Configure textures in React Three Fiber, including color spaces, UV channels, sampling, video, and render targets. Use for texture appearance or memory issues; use loader guidance for model-loading workflows.

AI 生成的概览

指导 React Three Fiber 中的纹理配置:色彩空间、UV 通道、采样、视频和渲染目标。

功能
该技能为 React Three Fiber 应用中的纹理配置提供参考指导,涵盖色彩空间标注、纹理缓存与所有权、UV 通道、采样与过滤、视频纹理以及渲染目标。它包含加载颜色贴图的代码示例和验证纹理行为的检查清单。它产出的是建议和示例,而非可执行脚本。
适用场景
当你在 React Three Fiber 项目中处理纹理外观、色彩空间正确性或纹理内存问题时使用。它也适用于处理 UV 通道、包裹模式、过滤、视频纹理或渲染目标。
运行要求
需要一个包含 Three.js、Fiber、Drei 和渲染器的 React Three Fiber 项目;该技能会检查已安装的版本。它不附带脚本,只有说明和一个参考文档。

React Three Fiber textures

Inspect installed Three.js, Fiber, Drei, and renderer versions first. Examples target Fiber 9 / React 19 and Three.js r185 with WebGL. Preserve correctly configured assets rather than resetting every texture.

Color versus data

Texture contentColor-space annotation
PNG/JPEG base color or emissive colorSRGBColorSpace
Roughness, metalness, normal, AO, alpha/masksNoColorSpace
Linear HDR/EXR lighting dataPreserve loader-provided linear metadata

NoColorSpace is not another name for LinearSRGBColorSpace: scalar/vector data has no color space. Do not blanket-convert every map to sRGB.

Load a color map

Mount under Suspense inside Canvas. The file path is an application asset, not a file provided by this skill.

tsx
import { useTexture } from '@react-three/drei'import { SRGBColorSpace } from 'three'
export default function Example() {  const map = useTexture('/textures/checker.png', (texture) => {    // This URL is consistently used as a color texture by all consumers.    texture.colorSpace = SRGBColorSpace    texture.needsUpdate = true  })  return (    <mesh>      <planeGeometry args={[3, 3]} />      <meshStandardMaterial map={map} roughness={1} />    </mesh>  )}

Fiber handles common built-in color map props, and glTF loaders set texture metadata. Explicit annotation is especially important for custom shader uniforms or manually created textures.

Cache and ownership

  • useTexture/useLoader cache by loader and URL inputs. The same source can return the same Texture object. Repeat, offset, wrapping, filters, and colorSpace changes can affect every consumer.
  • Clone the Texture object before per-instance configuration. Reuse the underlying image where possible; separately dispose only the clone you own. Do not dispose the cached source from an individual consumer.
  • Do not clear a loader cache during render. Cache eviction and GPU disposal are separate operations and require knowing that no active consumer still needs the resource.
  • Avoid replacing the uniform/texture object every frame; update offsets or owned values directly. On a demand loop, invalidate after imperative changes.

UVs and sampling

  • texture.channel = 0 selects uv, 1 selects uv1, then uv2 and uv3. Choose the actual geometry attribute; AO/light maps no longer universally require copying uv into uv2.
  • Repeat outside [0, 1] requires RepeatWrapping or MirroredRepeatWrapping. Offset/repeat/rotation are texture transforms; atlas animations generally do not need React state per frame.
  • Wrapping, color-space, and upload configuration changes may need texture.needsUpdate. Offset/repeat changes use the texture matrix and do not normally require re-uploading image data.
  • For pixel art, use nearest filtering deliberately. For minified surfaces, mipmaps reduce shimmer; cap anisotropy to the renderer's supported maximum and the scene's needs.
  • Power-of-two dimensions are not a universal WebGL2 requirement. Size textures for screen coverage, memory, compression-format constraints, and quality rather than an obsolete blanket rule.
  • Download size is not GPU memory size. Consider KTX2/Basis where supported; configure renderer capability detection and host decoder/transcoder assets deliberately.
  • For a replacement glTF color map, match the model's UV/orientation conventions; a manually loaded texture commonly needs flipY=false. Do not flip already configured glTF maps again.

Specialized textures

  • Prefer useVideoTexture when its lifecycle fits. Check autoplay/muting, CORS, user gestures, and source cleanup; changing video resolution may require a new texture. Do not promise autoplay succeeds on every browser.
  • Canvas/DataTexture content changes need needsUpdate; data textures should keep data color-space semantics. Creating a texture in a frame loop leaks work/resources unless deliberately managed.
  • For render targets, read offscreen rendering [blocked]. Never sample from a texture while rendering into that same target.
  • Keep environment maps on a lighting path (Environment/useEnvironment) rather than assigning a regular 2D image without a suitable mapping/PMREM workflow.

Verify

Test a known color swatch, data maps under changing lights, texture orientation, repeated mounts, and two consumers with different UV transforms. Inspect GPU texture counts; they are counts, not byte-accurate memory measurements.

Sources

来源与署名

来源:enzed/r3f-skills位于skills/r3f-textures提交4a11805

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架