In high-speed 3D game development, rendering realistic textures and baking assets requires significant GPU power. Traditionally, studios rely on centralized cloud giants (like AWS or Google Cloud), which come with high costs and cold-start latency.
For our studio, Eachone Information Channel, we integrated decentralized computing to streamline our workflow. This article presents a technical blueprint of how we run procedural AI texture generation pipelines on the Nosana GPU Network and permanently deploy assets on Arweave for decentralized retrieval.
Our decentralized pipeline is split into three core phases:
[Local Game Engine (Unity/Unreal)]
│
▼ (Request Texture generation)
[Nosana Network (Run Docker Container on GPU Nodes)]
│
▼ (Procedural PBR Textures Rendered)
[Arweave Storage (Permanent Asset Registry via Irys/Bundlr)]
│
▼ (Direct Asset Injection into Game Build)
To run a task on Nosana, we must containerize our script. Below is the Dockerfile we built for compiling our custom AI texture generator.
FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime
WORKDIR /app
RUN apt-get update && apt-get install -y \
libgl1-mesa-glx \\
libglib2.0-0 \\
git \\
&& rm -rf /var/lib/apt/lists/\*
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY generator.py .
COPY run.sh .
ENTRYPOIN
T ["bash", "run.sh"]
We define a Nosana pipeline configuration file (nosana-job.json) to describe the computing task. This job requests a GPU node to spin up our docker image, process the prompt parameters, and output the generated textures.
{
"version": "1.0.0",
"meta": {
"name": "eachone-texture-gen-job",
"type": "gpu-inference"
},
"ops": [
{
"op": "container/run",
"args": {
"image": "docker.io/eachoneinfo/texture-generator-ai:latest",
"gpu": true,
"env": {
"PROMPT": "highly detailed cyberpunk procedural metallic sci-fi sci-fi track texture, 4k resolution, PBR mapping",
"STEPS": "50"
},
"resources": {
"gpu": {
"count": 1,
"type": "NVIDIA RTX 4090"
}
}
}
}
By deploying this schema to the Nosana market, a node picks up our container, executes the inference, and delivers the raw texture outputs to our output directory in minutes—at a fraction of AWS costs.
Once our textures are rendered by Nosana's nodes, we need a permanent, decentralized asset registry. This is where Arweave is crucial. By storing assets on Arweave, our game client can directly pull texture maps on runtime using a transaction hash.
Here is the Node.js script we use to bundle and upload the generated .png maps to Arweave using the Irys/Bundlr network:
import Irys from "@irys/sdk";
import fs from "fs";
async function uploadTextureToArweave() {
const irys = new Irys({
url: "https://node1.irys.xyz",
token: "solana", // Pay with SOL
key: process.env.SOLANA_PRIVATE_KEY,
});
const fileToUpload = "./output/cyberpunk_track_normal.png";
const tags = [
{ name: "Content-Type", value: "image/png" },
{ name: "Project", value: "Neon-Rush-3D" },
{ name: "Asset-Type", value: "Normal-Map" }
];
try {
const size = fs.statSync(fileToUpload).size;
const price = await irys.getPrice(size);
console.log(\`Uploading ${size} bytes costs ${irys.utils.fromWei(price)} SOL\`);
const response = await irys.uploadFile(fileToUpload, { tags });
console.log(\`Asset successfully secured on Arweave! URL: https://arweave.net/${response.id}\`);
} catch (e) {
console.error("Error uploading to Arweave:", e);
}
}
uploadTextureToArweave();
Integrating Nosana and Arweave into Eachone Information Channel's pipeline completely redefines indie and professional studio scalability:
Cost Savings: We bypassed high-end cloud providers, cutting AI texture inference and background asset baking expenses by up to 70%.
Immutable Delivery: Storing our high-resolution assets on Arweave guarantees they will never suffer from link-rot, ensuring our multiplayer maps load instantly, permanently, and globally.
As decentralized AI scaling continues to surge, pipelines like this prove that decentralized infrastructure is no longer experimental—it is the production-ready backbone of modern 3D game studios.