2026年3月19日にリリースされたゲーム「紅の砂漠(Crimson Desert)」のグラフィックのとある要素に注目が集まっています!
※2025/05/03 – UEに関する情報を追記
※2025/05/15 – 動画とシェーダーコードを追加
※2026/05/17 – SSDMの動画を追加
「紅の砂漠(Crimson Desert)」の壁などのグラフィック表現
Displacementにも見えるし、POM(視差オクルージョンマッピング)にも見える。
FR3NKD氏のX投稿
Crimson Desert has this surface shader..
— FR3NKD (@FR3NKD) April 2, 2026
It has a transformative effect on the game visuals and it’s seemingly applied to every object in the game.
It doesn’t look like tessellation, it appears to have artifacts from a screen-space effect.
I believe they are using the height… pic.twitter.com/CRBfw7SFte
この技術の正体がかなり話題になっています。
SPOM (Silhouette parallax occlusion mapping)なの?
PPOM(Prism Parallax Occlusion Mapping)なの?
SSDM(Screen Space Displacement Mapping)?
ということで幾つも考察動画が幾つか公開されています。
考察動画:How Crimson Desert Fakes Realism (It’s Genius)
by Next Level Game Art
当初はディスプレイスメントやPOM(パララックス)と考えられていましたが
通常のPOMでは再現できない“シルエットの立体感”が確認されており
従来の手法だけでは説明できない点を指摘
ReShadeを使用し
最終的にSPOMまたはSilPOM(シルエット対応POM)の可能性が有力とされています。
考察動画:The Walls of Crimson Desert – Parallax VS Displacement (New Findings)
by EMC3D – Game Art
ワイヤーフレーム解析から
通常のディスプレイスメントでは成立しない点を指摘
その上で、2000年代の論文やCryEngineの実装例をもとに
こちらもシルエットを生成可能な拡張パララックス手法(SPOM系)の存在を提示
ということで多数登場したSPOMという技術について紹介
SPOM(Silhouette Parallax Occlusion Mapping)
SPOM(Silhouette Parallax Occlusion Mapping)は、
従来のParallax Occlusion Mappingにシルエット表現を追加した技術で、
軽量なまま高密度な立体表現を実現できるのが特徴です。

通常のPOMでは、見た目に奥行きは出せても「輪郭は平面のまま」という制約がありますが、SPOMではこの問題を改善し、エッジ部分にも立体感を持たせることが可能になっています。
考察動画でも取り上げられた通り
実はこの技術自体は2000年代から存在しており
CryEngineでも使われていたりしています。
またその他に動画内でも紹介された「PPOM(Prism Parallax Occlusion Mapping)」という技術も存在するのですがこちらは重めなので実用性は低そうな印象
PPOM(Prism Parallax Occlusion Mapping)

結論としてはSPOMでしょうか?
FR3NKD氏のX投稿
So, it’s been a week since this discussion, multiple YouTube videos have been made discussing the mystery of this technique like the one from Next Level Game Art, EMC3D and Game World Art.
— FR3NKD (@FR3NKD) April 10, 2026
The general consensus is that this is SPOM so parallax occlusion mapping which also… https://t.co/tU78Skm3BD pic.twitter.com/Vv29TLskYL
FR3NKD氏もGodotで実装したいと仰られてますね
さらに探してみると
Amose05氏が既にGodot向けSPOMのシェーダーを公開しています

FR3NKD氏もこれをベースに色々構築するみたい
Amose05 made a SPOM shader for Godot and posted it on godotshaders.
— FR3NKD (@FR3NKD) April 16, 2026
I tried it out and the results are interesting, it’s a start! pic.twitter.com/q8Rbveuo4d
そしてMestaria(@MestariaGame)氏はUE5で似た方向性のシェーダーを実装
Got inspired and implemented this after a very long night wrapping my brain around it (Relaxed Cone Step Mapping instead of POM) in Unreal Engine 5 pic.twitter.com/PvcTvgmycp
— Mestaria (@MestariaGame) April 10, 2026
またつい最近ですが
UE5でSPOMを構築するチュートリアルが登場!
kicol5氏はUE5の標準のPOMに追加対応を行いSPOMを再現する方法を解説しています
私がこれから試行錯誤しようと思ったら
この動画公開はとても有り難い!
一応この手法、ただ完璧というわけではなく
「紅の砂漠(Crimson Desert)」では下記課題も見受けられます。
- フリッカリング(チラつき)
- 視点依存の破綻
- 深度との不整合
FR3NKD氏のX投稿
Trippy pic.twitter.com/IeVKIMnwxy
— FR3NKD (@FR3NKD) April 2, 2026
画面端で破綻しているのがわかりやすい
FR3NKD氏のX投稿
Look at the edges of the screen: pic.twitter.com/TTPNJh54BR
— FR3NKD (@FR3NKD) April 2, 2026
こちらも下部で伸びてます
最後にコチラの考察動画もみてみましょう
考察動画:Crimson Desert Graphics Analysis | Is This Displacement Mapping or Parallax? by Game World Art
この動画では、Crimson Desertの立体表現をReShadeを使い分析し
パララックスやディスプレイスメントの両面から検証しています
深度バッファに影響が見られる点や、シルエットの挙動から
POM単体ではなくPixel Depth Offsetや
実際のディスプレイスメントの可能性が指摘
ただし決定的な証拠はなく
複数の技術が組み合わさっている可能性を示しています
これらの描画破綻や考察を見ている感じですと
これはSPOM以外の技術の可能性もあるのかなぁ?
と思いネットの海を漁っていたところ
Redditで興味深い投稿がありました

ほぅ…SSDM(Screen Space Displacement Mapping)
というものがあるんだな…
SSDM: Screen Space Displacement Mapping

SSDM(Screen Space Displacement Mapping)は
画面上(スクリーンスペース)で擬似的に凹凸を作る技術です
通常のPOMのようにUVをずらすのではなく、一度シーンを描画したあとに
画面上の情報を使って“押し出し”を再計算するのが特徴です
そのためシーン全体に対して高速に適用でき
側面のような部分にも影響を与えられる点が強みとされています
Unityのフォーラムではwinning11123(David Gallagher)氏がSSDMをUnityに実装している方の進捗動画などを公開しています
このSSDMに関しては
アセット販売も行われていた形跡があるのですが
現在はページが非公開になっているみたいです
ただ動画を有志の方が再アップロードしつつ、ウェブ魚拓にて当時のページが閲覧可能です。
Screen Space Displacement Mapping (SSDM)
SSDM 2008年10月6日
- パララックスオクルージョンマッピング3.0よりも高速
- シーンの複雑さに依存しない
- オブジェクトの側面をずらす
- 深度バッファをずらす
- 追加のジオメトリを必要としない
- 事前計算を必要としない
- ピクセル単位の不均一で動的な変位ベクトルに対応
(GeForce 8800GTS、フルHD、フルスクリーン・クワッド)
POM 3.0:80 fps
SSDM: 110 fps
(GeForce 8800GTS、フルHD、フルスクリーン・トーラス)
POM 3.0: 35 fps
SSDM: 110 fps
個人的に「紅の砂漠(Crimson Desert)」は
このSSDMをベースにしているんじゃないかなー?
と想像しています
ゲーム買って
自分でちゃんと見たらいいんじゃね?
そうなんですよね…
肝心の「紅の砂漠(Crimson Desert)」ですが
私は購入してないんですよね…
このグラフィック表現を見るために買うか悩んでいるところです…
買う予定のないゲームに
1万円ってちょっと痛いじゃないですか…
はぁ…
ということでどなたか技術情報お待ちしてます!
2025年5月3日追記
UEで実装をされている方が登場!続報に期待
Crimson Desert uses a screen-space displacement technique, which gave me some ideas for my projects. I though it was Silhouette POM and wanted to take a look into it, and honestly, why not push it further?#UnrealEngine5 #UE5 pic.twitter.com/LhMsrQDYoR
— Jhosep Chevarria (@Jhosep_gamer) April 5, 2026
Experimenting with Screen Space Displacement in UE5. Curious where this leads. (no SPOM) pic.twitter.com/ycNEbN1K9n
— Jhosep Chevarria (@Jhosep_gamer) May 1, 2026
2025年5月15日追記
更に色々考察動画やUE実装が増えてきたみたいで、簡単にUEで実装する解説が更に増えていました。
プロジェクトファイルとシェーダーコードも共有されています
Unreal Engine 5 Just Got INSANE… (Crimson Desert Effect Recreated)
この方独自の改善版POMプロジェクトと、それに対してSPOM対応する為のUE用カスタムシェーダーコードが共有されています!
float OpacityMask = 1.0f; // Default: pixel is visible
if (EnableSilhouette > 0.5f)
{
float2 offset = POMOffset; // Start with the raw POM displacement offset
// POM offset is in rotated UV space — undo the rotation so it aligns with the raw mesh UVs
if (RotationAngle != 0.0f)
{
float angle_rad = -RotationAngle * 6.28318f; // Negative angle = inverse rotation. Multiply by 2π to convert from UE's 0-1 range to radians
float cosA = cos(angle_rad);
float sinA = sin(angle_rad);
offset = float2(
POMOffset.x * cosA - POMOffset.y * sinA, // Standard 2D rotation matrix applied to the offset vector
POMOffset.x * sinA + POMOffset.y * cosA
);
}
// POM offset is in tiled UV space (e.g. 0-2 for tiling=2). Divide by tiling to normalize it back to 0-1 mesh UV space
offset /= max(TileAmount, float2(0.001f, 0.001f)); // max prevents division by zero
// Project where POM would push this pixel in raw mesh UV space
float2 effectiveUV = RawMeshUV + offset;
// Check distance from each edge — negative value means we've overshot past the mesh boundary
float2 minCheck = effectiveUV - SilhouettePadding; // How far past the 0 edge (left/bottom)
float2 maxCheck = (1.0f + SilhouettePadding) - effectiveUV; // How far past the 1 edge (right/top)
// Collapse to single values — the most violated edge wins
float minVal = min(minCheck.x, minCheck.y);
float maxVal = min(maxCheck.x, maxCheck.y);
// If either check went negative, POM pushed past a mesh edge — clip this pixel to create the silhouette
OpacityMask = (minVal >= 0.0f && maxVal >= 0.0f) ? 1.0f : 0.0f;
}
return float3(FinalUV.x, FinalUV.y, OpacityMask); // .xy = UVs passthrough, .z = silhouette mask for opacity私もこの実装をベースに触ってみました
SPOM(Silhouette Parallax Occlusion Mapping
— 3D人-3dnchu- CG情報ブログ (@ymt3d) May 15, 2026
)との初触れ合い
気持ち良いぃぃぃぃい #UE5Study #UE5
ただやはり紅の砂漠はSSDM(Screen Space Displacement Mapping)の方だよなぁきっと pic.twitter.com/1EG2b7o7j9












コメント