Show HN: VoxCSS – A DOM based voxel engine

2025/12/03 23:00

Show HN: VoxCSS – A DOM based voxel engine

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

## Summary
VoxCSSは軽量で CSS ベースのボクセルエンジンです。WebGL を必要とせず、ブラウザの DOM 内に直接 3‑D グリッドベースの HTML キューブをレンダリングし、対話できるようにします。**色**、**テクスチャ**、複数の **形状**(`cube`、`ramp`、`wedge`、`spike`)および **領域**(任意で `x2, y2` を指定)をサポートしています。

このライブラリは Vue、React、Svelte、またはプレーン JavaScript 用に再利用可能な `<VoxCamera>` と `<VoxScene>` コンポーネントを同梱しています。これらのコンポーネントは一貫したプロパティセットを公開します:カメラコントロール(`zoom`、`pan`、`tilt`、`rotX`、`rotY`、`perspective`、`interactive`、`invert`、`animate`)、シーン設定(`voxels`、グリッド境界 `rows/cols/depth`、`show-walls`、`show-floor`、投影プリセット `cubic` または `dimetric`、および `mergeVoxels`)。

VoxCSS は自動的に見えない隣接ボクセルをカリングし、連続するボクセルをマージして DOM サイズを小さく保ちます。これにより、**2,000 ボクセル以上**のシーンでも効率的なレンダリングが可能です。また、組み込みの MagicaVoxel パーサー(`parseMagicaVoxel`)を備えており、`.vox` ファイルを `renderScene` 用に準備されたボクセルオブジェクトへ変換します。

ライブラリは npm (`@layoutit/voxcss`) または unpkg 経由で入手でき、**MIT ライセンス**の下で公開されています。今後のリリースでは投影プリセットを拡張し、より多くの形状タイプを追加し、マージアルゴリズムをさらに最適化する予定です。これにより、パフォーマンスへの影響を最小限に抑えつつ、さらに大規模なシーンが実現可能になります。

複雑なグラフィックス API を使わずにボクセル作成を簡素化することで、VoxCSS はウェブ開発者やインディー スタジオの参入障壁を下げ、ブラウザ内でリッチな 3‑D 環境を迅速にプロトタイピングできるようにします。

本文

VoxCSS – CSSベースのボクセルエンジン

DOM上に3Dグリッドを構築し、レイヤーを積み重ねて変形させることでHTMLキューブを描画します。
色・テクスチャ・インタラクション・カリング・形状・領域・投影などをサポートし、Vue、React、Svelte、またはプレーンJavaScriptとも互換性があります。

詳細とモデル例は voxcss.com をご覧ください。


インストール

npm install @layoutit/voxcss

Unpkg から直接読み込むことも可能です。以下に最小構成のサンプルを示します。

<div id="voxcss"></div>

<script type="module">
  import { renderScene } from "https://unpkg.com/@layoutit/voxcss@latest/dist/index.js";

  renderScene({
    element: document.getElementById("voxcss"),
    camera: { interactive: true },
    scene: {
      voxels: [
        { x: 3, y: 3, z: 0 },
        { x: 3, y: 3, z: 1 }
      ],
      showFloor: true
    }
  });
</script>

フレームワーク用コンポーネント

Vue、React、Svelte 向けラッパーは同一のプロパティを持つ同等のコンポーネントを公開します。

  • <VoxCamera>
    – ビューポイント(ズーム・パン・チルト・回転・透視)の制御。
  • <VoxScene>
    – ボクセル配列を受け取り、3Dグリッドを管理。
import { VoxCamera, VoxScene } from "@layoutit/voxcss/react";

export default function App() {
  const voxels = [{ x: 1, y: 1, z: 0, color: "#f00" }];

  return (
    <VoxCamera interactive>
      <VoxScene voxels={voxels} />
    </VoxCamera>
  );
}

APIリファレンス

VoxCamera
のプロパティ

Prop説明
zoom
,
pan
,
tilt
カメラの前後移動、上下・左右の平行移動。
rotX
,
rotY
X/Y軸回転。
perspective
CSS透視深度を制御(無効化も可)。
interactive
ポインタドラッグで操作可能にする。
invert
ドラッグ方向を反転。
animate
カメラの自動回転。
true
、数値(速度)、または
{ axis, speed, pauseOnInteraction }
を指定可。

VoxScene
のプロパティ

Prop説明
voxels
ボクセルオブジェクトの配列(デフォルト:空)。
rows
,
cols
,
depth
推定範囲を上書きし、グリッドサイズを明示的に設定。
show-walls
,
show-floor
構造面(壁・床)の表示切替。
projection
"cubic"
または
"dimetric"
のプリセットでレイヤー間隔を変更(50/25 px)。
mergeVoxels
隣接するキューブを大きな領域にまとめてパフォーマンス向上。
true
false
、または数値閾値を指定可。デフォルトでは 2000 ボクセル以上のシーンで自動マージが有効。

ボクセルデータモデル

各ボクセルは1セルを記述します。

  • x, y, z
    – 必須整数座標(領域足跡用に
    x2/y2
    は任意)。
  • shape
    "cube"
    (既定)、
    "ramp"
    "wedge"
    、または
    "spike"
  • color
    /
    texture
    – 単色塗りつぶしまたは画像URL。
  • rot
    – 角度(°)。ランプ/ウェッジ/スパイクは90°単位でスナップ。

const voxels = [
  { x: 2, y: 2, z: 0, color: "#f97316" },
  { x: 3, y: 2, z: 0, shape: "ramp", rot: 90, color: "#94a3b8" },
  { x: 3, y: 3, z: 0, texture: "/example.png" }
];

パフォーマンス

VoxCSS は全てを DOM 上に描画します。パフォーマンスはブラウザが管理すべき要素数に依存します。エンジンは隣接情報とカメラ回転に基づいてカリングし、可視面のみを描画することで負荷を軽減します。

mergeVoxels
は重要です。各キューブを個別に描画する代わりに、レイヤーごとに隣接ボクセルをスキャンし、X/Y方向で大きな長方形へまとめます。自動マージは 2000 ボクセル超のシーンで有効になり、DOM サイズを劇的に削減できます。


MagicaVoxel (.vox) ファイルの読み込み

import { parseMagicaVoxel, renderScene } from "@layoutit/voxcss";

const rootEl = document.getElementById("voxcss");

fetch("/models/example.vox")
  .then(r => r.arrayBuffer())
  .then(buffer => parseMagicaVoxel(buffer))
  .then(({ voxels }) => {
    renderScene({
      element: rootEl,
      camera: { interactive: true },
      scene: { voxels, showFloor: true }
    });
  });

関連プロジェクト

  • Layoutit Voxels – CSS ボクセルエディタ
  • Layoutit Terra – CSS テレーンジェネレーター

ライセンス

MIT。

同じ日のほかのニュース

一覧に戻る →

2025/12/11 5:47

Apple Services Experiencing Outage

## Japanese Translation: > Apple の米国ウェブサイトのフッターには、顧客向けに必要なリンクが提供されています。 > - 「System Status」ページ > - 近くの Apple Store や他の小売店を探すための案内 > - 電話サポート(1‑800‑MY‑APPLE) > さらに、© Apple Inc. All rights reserved、Privacy Policy、Terms of Use、Sales and Refunds、Legal、および Site Map といった法的・情報リンクも含まれています。フッターの内容は米国ユーザー向けに特化されています。

2025/12/11 3:58

Super Mario 64 for the PS1

## Japanese Translation: > このリポジトリにはゲームの完全なソースコードベースが含まれていますが、意図的に必要なアセットファイル(特に **assets.sm64**)はすべて除外されています。したがって、ユーザーはプロジェクトを構築するためにタイトルのオリジナルコピーからこれらのアセットを抽出する必要があります。 > > ディレクトリ構成は典型的なゲーム開発の慣習に従っており、多くのトップレベルフォルダーが含まれています:**actors**, **assets**(サブフォルダー *anims* と *demos* 付き), **bin**, **build**, **data**, **doxygen**, **enhancements**, **include**, **levels**, **lib**, **sound**, **src**(サブフォルダー *audio*, *buffers*, *engine*, *game*, *goddard*, *goddard_og*, *menu*, *port*), **text**, **textures**, および **tools**。 > > **src/goddard** 内のコードには、リライトされたマリオイントロ画面が含まれています。一方で **src/goddard_og** は元のバックアップを保持しています。**src/menu** ディレクトリはタイトルスクリーン、ファイル選択、アクション選択、およびデバッグレベル選択メニューを実装しています。**Src/port** にはポート固有のコードとともにオーディオおよびビデオレンダラーコンポーネントが格納されています。 > > コントリビューションはプルリクエストで歓迎されます。ただし、主要な変更はまずイシューを開いて議論する必要があります。これにより構造化されたレビュー プロセスが確保されます。この設定により、開発者はコードベースを改善できる一方で、最終ユーザーはコンパイルのために依然として専有アセットへのアクセスが必要です。

2025/12/11 5:29

Getting a Gemini API key is an exercise in frustration

## Japanese Translation: **概要** 著者はReactのサイドプロジェクトを開始し、Claude Code をコーディング支援として利用していましたが、Google の Gemini 3 Pro を試すことにしました。Gemini の設定は難航しました:AI Studio で API キーを作成した後、Cloud Console にて課金情報を設定し、政府発行の ID(カード番号を伏せた PNG)をアップロードする必要がありました(JPG/PDF は拒否されました)。プロジェクトを再度関連付けるたびにクォータ階層が Tier 1 に変わるまで繰り返し作業しました。この間、CLI/API 呼び出しは 403 PERMISSION_DENIED エラーを返し、Playground は内部エラーを投げました。後日受信したメールで「Your Google Cloud and APIs billing account … is in good standing」と確認され、すべてのインターフェースで問題が解消しました。 Gemini は単一製品ではなく、チャットボット・モバイルアプリ・音声アシスタント・Workspace 機能・CLI・IDE 拡張機能を含みますが、簡易的な「Buy Now」ボタンは存在せず、プロプランの購入には AI Studio → Cloud Console を経由する必要があります。対照的に Anthropic と OpenAI は明確な消費者向け購入オプションを提供しています。 著者は Gemini 3 Pro を最大 1か月間試験しつつ、オンボーディングが煩雑であれば他のプロバイダーへ戻る可能性があります。エンタープライズ中心の設定は個人開発者や小規模チームを遠ざける恐れがあり、その結果需要はよりアクセスしやすい競合製品にシフトし、Google が将来の AI 製品を設計する際に影響を与える可能性があります。

Show HN: VoxCSS – A DOM based voxel engine | そっか~ニュース