---
title: GDC2026 Implementing Real-Time Path Tracing in RE ENGINE for &#039;Resident Evil Requiem&#039; and &#039;PRAGMATA&#039;
tags:  #capcom #カプコン #カプコン技研 #re engine #r&amp;d #gdc2026 #nvidia #path tracing #resident evil requiem #pragmata  
author: [カプコン技研](https://image.docswell.com/user/CAPCOM_RandD)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4EZLPWV973.jpg?width=480
description: GDC2026(Game Developers Conference 2026)の講演スライドです。「バイオハザード レクイエム」と「プラグマタ」におけるRE ENGINEのリアルタイムパストレーシング技術についての解説をしています。 ※本講演はNVIDIA様のスポンサーセッションで共同講演を行いました  [Youtubeの講演動画] https://www.youtube.com/watch?v=Gq1QdlQSzn0
published: May 26, 26
canonical: https://image.docswell.com/s/CAPCOM_RandD/5DM2NL-gdc2026-implementing-real-time-path-tracing-in-re-engine
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4EZLPWV973.jpg)

Implementing Real-Time Path
Tracing in RE ENGINE for ‘Resident
Evil Requiem’ and ‘PRAGMATA’
Hitoshi Mishima, Lead Rendering Engineer, CAPCOM | GDC2026 / 12 March
2026
皆さんこんにちは。カプコンの三嶋がResident Evil RequiemとPRAGMATAで利用されている。
パストレーシングのRE ENGINEへの組み込みに関して、発表させていただきます。
Hello, everyone. I’m Hitoshi Mishima from CAPCOM, I will be presenting on the
integration of path tracing into RE ENGINE, which is used in Resident Evil Requiem and
PRAGMATA.
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/Y76WMG5D7V.jpg)

RE ENGINE
• RE ENGINE is CAPCOM in house game engine.
はじめに、RE ENGINEはカプコンのインハウスエンジンです。今まで様々なタイトルで採用
されてきました。本日は、Resident Evil Requiemとプラグマタのパストレーシングをレンダ
リングチームの代表として話をさせていただきます。今回会場に来ておりませんが、弊社の
中本 健太さんと 名畑 豪祐さんがパストレーシングの実現に大きく貢献したことをはじめに
お伝えします。
First of all, RE ENGINE is Capcom’s in-house engine. It has been used in various titles to
date. Today, as a representative of the rendering team, I will be speaking about the path
tracing in ‘Resident Evil Requiem’ and ‘PRAGMATA’. Although they are not here at the
venue today, I would like to start by acknowledging the significant contributions made by
our colleagues Kenta Nakamoto and Kosuke Nabata to the implementation of path
tracing.
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/G75MZVY874.jpg)

Resident Evil Requiem
まず、Resident Evil Requiemはどんなものか見てみましょう。
First, let’s take a look at what Resident Evil Requiem is like.
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/9J29R3GVER.jpg)

PRAGMATA
こちらはプラグマタです。
This is PRAGMATA.
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/DEY4D1VQJM.jpg)

Agenda
•
Light Sampling (Punctual Lights)
•
Light Sampling (Emissive Polygons)
•
Using DLSS RR Guide Buffers
•
Hacking Techniques
•
BVH Management
今回お話する内容はこのようなものを用意しました。
Here is the agenda for today’s session.
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/VJNY62M278.jpg)

Comparison between conventional RT and brand-new PT
Path Tracing
今回、我々は，新しくパストレーサをフルスクラッチで実装し，NVIDIA DLSS Ray
Reconstructionとのインテグレーションを果たしました。まず，パストレーシングとレイト
レーシングの比較をしていきましょう。こちらがパストレーシングです。
In this project, we implemented a brand-new path tracer from scratch and successfully
integrated it with NVIDIA DLSS Ray Reconstruction. First, let’s compare path tracing and
ray tracing. This is path tracing.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/YE9PL1NDJ3.jpg)

Comparison between conventional RT and brand-new PT
Ray Tracing
つぎに レイトレーシングです。
Next is ray tracing.
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GE8DX4K5ED.jpg)

Comparison between conventional RT and brand-new PT
RT Mode
PT Mode
RT Mode
PT Mode
RT Mode
PT Mode
RT Mode
PT Mode
先ほどの２つの画像をより詳細なレベルで比較してみましょう。
より詳細な影
より安定したデノイズ
より鮮明な反射
より厳密なオクルージョン
パストレーシングは、きわめて忠実なレンダリング結果をリアルタイムで生成できています。
Let&#039;s compare the two images from earlier in greater detail.
More detailed shadows
More stable denoising
More sharper reflections
More accurate occlusion
Path tracing is capable of generating extremely faithful rendering results in real time.
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/LELM86Z37R.jpg)

RE ENGINE
Ray Tracing / Path Tracing Pipeline
Direct Queue
Compute Queue
Common
GBuffer
Lighting
Transparent
Post Effects
Build BVHs
• Ray Tracing and Path Tracing share the same pipeline
• Both Ray Tracing and Path Tracing use RayQuery
• Same Material evaluation using Bindless Resources
• Most of the implementation time was spent on validation and refinement
• From start to ship, two developers worked for roughly 1.5 years
レイトレーシングとパストレーシングのレンダリングパイプラインの簡単な説明をします。
Commonは、最初に実行するパスです。ここでCompute Shaderを使って、SkinningやCloth
Simulationなど,再利用する計算を実行しています。Gbufferは,ご存じのとおりなので省きま
す。Lightingは、パストレーシングは、直接照明を含めてすべて既存の描画パス (Rendering
Pass)を置き替えます。レイトレーシングは、直接照明はラスタライゼーションと同じです。
間接照明にレイトレーシングを実行しています。その後、半透明を作成して、ポストエフェ
クトです。ポストエフェクトは、DLSSなどがここで動作します。レイトレーシングは、主に
BVHを非同期コンピュートとして処理しています。これらのパイプラインは、レイトレーシ
ングとパストレーシングはほぼ同じ機能で作られています。どちらもRayQueryで実装し、同
じマテリアルのシェーダをつかって表現をしています。パストレーシングの実装時間のほと
んどは、機能の検証に利用されました。２名の開発者で、およそ1.5年ほどかかりました。
Here is a brief explanation of the rendering pipelines for ray tracing and path tracing. The
Common pass is the first pass to be executed. Here, a compute shader is used to
perform reusable computations such as skinning and cloth simulation. I’ll skip the Gbuffer since you’re already familiar with it. In path tracing, the Lighting pass replaces all
existing rendering passes, including direct lighting. In ray tracing, direct lighting is
handled the same way as in rasterization. Ray tracing is applied only to indirect lighting.
After that, we create transparency and apply post-effects. Post-effects, such as DLSS,
operate here. Ray tracing primarily processes BVHs using asynchronous computation.
These pipelines are built with nearly identical functionality for both ray tracing and path
tracing. Both are implemented using RayQuery and utilize the same material shaders for
rendering. Most of the time spent on implementing path tracing was devoted to
verifying its functionality. It took two developers approximately 1.5 years to complete.
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4JMY65VMJW.jpg)

Overview of Path Tracing Pipeline
d : Recursion Depth
RR : Russian Roulette
Construct GBuffer
NO
d++ ≤ Max
1Dispatch
YES
NEE (Streaming RIS)
Sample BSDF
NO
RR
YES
Update Weight
MIS
Compute IBL
Trace Ray
MIS
Evaluate
Emissive Polygons
Evaluate
Intersected Lights
Option
ReSTIR GI
Finish
MIS
Update Surface
NO
Hit
YES
この図は、RE ENGINE におけるパストレーシングのパイプラインを示しています。最初に，
G-Buffer から最初のヒット情報を取得します。次に，ライトの表面からサンプリングされた
点（Next Event Estimation）へシェーディングポイントを接続します。その後，新しい方向
をサンプリングし，ロシアンルーレットを行って寄与の少ない照明を省きます。スループッ
トを更新した後，次のヒット位置を見つけるために次のレイをトレースします。レイがサー
フェスにヒットした場合，交差したライトおよびエミッシブポリゴンからの寄与を評価しま
す。その後、再帰の深さを加算します。仮に３バウンスする場合は３回Dispatchを実行しま
す。既定の回数、光線を追跡し終えたらパストレーシングを終了し，オプションでReSTIR GI
を実行します。
This flowchart illustrates the path tracing pipeline in the RE ENGINE. First, initial hit
information is acquired from the G-Buffer. Next, shading points are connected to points
sampled from the light surface (Next Event Estimation). After that, a new direction is
sampled, and a Russian roulette process is performed to eliminate lights with low
contribution. After updating the throughput, the next ray is traced to find the next hit
location. If the ray hits a surface, evaluate the contributions from the intersecting lights
and emissive polygons. Then, increment the recursion depth. If three bounces are
required, execute Dispatch three times. Once the rays have been traced for the specified
number of times, terminate the path tracing and optionally execute ReSTIR GI.
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/PJR9P32L79.jpg)

Overview of Path Tracing Pipeline
1Dispatch
Emissive Polygon
Miss
IBL
NEE (Streaming RIS)
IBL
Sample BSDF /
Update Weight
Trace Ray
Evaluate IBL
Hit
Update Surface
NEE (Streaming RIS)
→ Continue…
今説明した部分を図にしたスライドをご用意しました。よくあるパストレーサと仕組みを大
きく変えることはしていません。可視点でNEE(NextEventEstimation)を用いて直接照明を評
価し，その点においてBSDFをサンプリングして方向を作り，その方向へと新たなレイを飛ば
します。レイがジオメトリと交差しなければ，シーンに設定されているIBLの寄与をとって処
理は終了します。ジオメトリと交差したのであれば、表面の情報を更新して新たにNEEを
行って，ヒット位置での明るさを計算します。以降は所定のバウンス数光線を追跡するまで
同じことの繰り返しです。
I have prepared a slide illustrating the section I just explained. We haven’t made any
major changes to the mechanism compared to typical path tracers. We evaluate direct
lighting at the current view point using NEE (Next Event Estimation), sample the BSDF at
that point to determine the direction, and send a new ray in that direction. If the ray does
not intersect with any geometry, the process ends by applying the IBL contribution set
for the scene. If the ray intersects with the geometry, we update the surface information,
perform NEE again, and calculate the brightness at the hit location. This process is
repeated until the specified number of bounces has been tracked.
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/PEXQ34P6JX.jpg)

The Details of Our Streaming RIS Strategies
• Fast candidate generation
• Uses a simplified BSDF to seed initial candidates when running Streaming RIS.
• Lambertian Diffuse BSDF / Single Channel (not RGB) / Single-Lobe Specular BSDF
Emissive Polygon
• Light-Grid culling
• IBL handling
• RIS often produces noisy results in indoor scenes, especially under high-intensity IBL.
• We exclude IBL from the candidate set in those cases to stabilize results.
IBL
NEE (Streaming RIS)
• Sample Emissive polygons, explicitly
• Path tracers that rely solely on hit-based evaluation of emissive polygons often suffer from significant noise.
• We add them as explicit samples via a dedicated sampling structure
• First bounce used 2 or 3 Shadow Rays
• Directional light , Punctual lights or Emissive polygons or IBL (independent at times)
• Second and Third bounces used 1 Shadow Ray
さて、具体的な計算はどうなっているのでしょうか？私たちが採用している Streaming RIS
について説明します。最初に，Streaming RIS を実行して初期候補を生成す時は，簡略化し
た BSDF を使用しました。Diffuseはランバートを利用しました。Specularは，マルチローブ
をシングルローブなものとして評価しました。ほかにも，サンプルを生成する際にBSDFを計
算後は1チャンネルの値に変換して，FGL項(term)を評価することで計算の軽量化を行ってい
ます。次に，寄与を計算するライトの数を減らすために， “Light-Grid” と呼ぶライトカリン
グアルゴリズムを使用しました。この詳細については，後続のページで説明します。高い輝
度の IBL を使用している場合，室内のRIS をつかった結果はノイジが多く残りました。その
ため，これらの要素を RIS の候補から除外しています。EmissivePolygonに、レイがヒット
した場合のみしか評価しない作りのパストレーサではノイズが多くなりがちです。この問題
に対処するため，私たちは,エミッシブポリゴンをRIS のサンプルとしても取り込みました。
これらの処理は、初めのバウンスは、シャドウレイは２本か3本使います。DirectionalLight
は独立して動作します。Punctual LightやEmissive PolygonsはRISでまとめて一本にしてい
ます。その中にIBLが含まれるケースと含まれないケースがあります。２回目以降のバウンス
は、一つのシャドウレイを使っています。すべて Streaming RISでまとめたものを使用して
います。
So, how exactly do these calculations work? Let me explain the Streaming RIS method we
use. First, when running Streaming RIS to generate initial candidates, we used a
simplified BSDF. For diffuse reflection, we used a Lambertian model. For specular
reflection, we treated multi-lobe reflections as single-lobe reflections. Additionally, to
reduce computational load, we convert the BSDF values into a single channel after
calculation and evaluate the FGL term. Next, to reduce the number of lights whose
contributions are calculated, we used a light culling algorithm called “Light-Grid.” Details
on this will be explained on the following pages. When using high-luminance IBL, the
results from indoor RIS remained quite noisy. Therefore, we excluded these elements
from the RIS candidates. In a path tracer designed to evaluate only when a ray hits an
EmissivePolygon, noise tends to be high. To address this issue, we also included
EmissivePolygons as RIS samples. For these processes, we use two or three shadow rays
for the first bounce. Directional Light operates independently. Punctual Light and
Emissive Polygons are combined into a single ray in RIS. There are cases where IBL is
included and cases where it is not. For the second and subsequent bounces, a single
shadow ray is used. We use a single ray that combines all of these using Streaming RIS.
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/3EK9YZDGED.jpg)

Light Sampling - Punctual Lights -
パンクチュアルライトから説明します。
Let me start by explaining punctual light.
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/L73W9DR575.jpg)

Punctual Lights
Grid-based Light Culling in World Space
• Lights are stored in each cell as a bit mask.
No.9 No.26
No.0
No.30 10000000010000000000000000100010
• The light grid is constructed as a 3D texture.
• Each cell stores the set of light IDs affecting
that region.
• At shading time, we evaluate only the lights
that contribute to the hit position.
float3 color = 0;
uint id;
uint mask = LightGridSRV[computeIndex(pos)];
mask = WaveActiveBitOr(mask);
while(mask)
{
id = firstbitlow(mask);
mask = BitFieldInsert(1&lt;&lt;id, 0, mask);
LightInfo l = LightParameterSRV[id];
Overview of Light Culling
}
color += evalLighting(l,…);
Punctual Lightに対するStreaming RISの計算高速化のためのカリング構造について説明しま
す。一般的なゲームの最適化と同様に、各ライトは計算の影響を与える範囲が設定されてお
り，範囲外には輝度が到達しない作りになっています。まず、すべてのPunctual Lightの範
囲から、全体を覆うAABBを計算し、縦横奥行方向それぞれ16x128x128の3D Textureに分割
します。各テクセルは、影響を及ぼすライトのIDをbitにして記録します。これを、
Streaming RISを行う際に参照し、各シェーディング点において必要最低限のライトの情報の
みを用いることで、無意味な光源の評価が発生しないようにしています。
This section describes a culling structure designed to accelerate Streaming RIS
calculations for Punctual Lights. As is common in game optimization, each light has a
defined influence range, and its brightness does not extend beyond that range. First, we
compute an AABB that encompasses the combined ranges of all Punctual Lights and
divide it into a 3D texture with dimensions of 16x128x128 in the x, y, and z directions.
Each texel records the IDs of the lights that affect it as bits. This information is
referenced during Streaming RIS; by using only the minimum necessary light information
at each shading point, we ensure that unnecessary light evaluations do not occur.
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/87DKGPYYJG.jpg)

Adjust the update weights of Reservoir
Avoid darkening caused by high-intensity lights
Path Traced
Denoised
Not Adjusted
• We applied Streaming RIS when performing
NEE.
• Regions illuminated by high-intensity lights
appeared darker because visibility was not
evaluated in this pass.
• To address this issue, we introduced a
brightness compensation when resolving
reservoirs.
𝛼 = 16
• This adjustment helps avoid darkening
artifacts caused by high-intensity lights.
𝑤 = luminance(𝐹 ∙ 𝐺 ∙ 𝐿)Τ𝑝
𝑤Τ𝐸
𝑤′ =
1 + 𝛼 ∙ 𝑤ΤE
Results with Different Reservoir Update Weights
𝑝: pdf for sampling direction / position
𝛼: adjustment coefficient，𝐹: BSDF
𝐺: Geometric Term，𝐿: Light Color
𝐸: Camera Exposure
我々のゲームは、窓の外から差し込む強力な光をスポットライトを使って表現する場合があ
ります。Streaming RISは、可視性を無視してサンプルを生成するので、強力な光源により大
きな分散が生じます。このシーンは、スポットライトが照射する範囲で、分散に高くなり暗
く表示されてしまいます。さらにRRによるデノイズ結果にも悪い影響がありました。そこで、
通常ルミナンスをReservoirの更新重みとして採用するところに変更を加え、カメラの露出と
補正用の係数を含めた重みを採用しReservoirの更新重みとする対応を行いました。このパラ
メタをアーティストが操作することにより、多くのシーンで問題のないパストレーシングに
よる結果を得ることが可能になりました。
In our game, we sometimes use spotlights to represent strong light streaming in
through a window. Since Streaming RIS generates samples without considering visibility,
strong light sources cause significant scattering. In this scene, the area illuminated by
the spotlight appears dark due to the high scattering. Furthermore, this had a negative
impact on the denoising results produced by RR. To address this, we modified the
standard approach—which typically uses luminance as the update weight for the
Reservoir—by incorporating camera exposure and correction coefficients into the weight
used to update the Reservoir. By allowing artists to adjust this parameter, we made it
possible to achieve satisfactory ray-traced results in many scenes.
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/VJPK3N62E8.jpg)

Remove IBL Samples from Streaming RIS
Reduce Variance under High-Intensity IBL
Path Traced
Denoised
Included
• We originally used Streaming RIS to evaluate
IBL (importance-sampled)
• However, high-intensity IBL often produced
extremely high variance.
• In such cases, we removed IBL from the
candidate set of Streaming RIS.
Removed
• This technique enables more stable and
detailed results when running DLSS RR.
Results when IBL is computed/not computed by RIS
先ほどと似たような問題は、シーンを照らす輝度の高いIBLによっても起こりました．
Streaming RISは，可視性を無視してサンプルを生成するので、強力なIBLが存在するとサン
プルのほとんどがIBL由来になります。しかし、室内の多くはIBLが遮蔽されるので高い分散
が発生し、RRによる再構成結果の品質を損ねていました。そのような場合は、IBLのサンプ
ルをRISから除外し，シーンに含まれるライトリストとは独立して輝度を評価することで分散
を低減しました。今回のスライドのケースは、キャラクタのジャケットのSpecular成分がう
まく出ていなかった部分が改善される結果になりました。
A similar issue arose due to the high-intensity IBL illuminating the scene. Since
Streaming RIS generates samples without considering visibility, the presence of a strong
IBL causes most of the samples to originate from the IBL. However, in many indoor
scenes, the IBL is occluded, leading to high variance that degraded the quality of the
reconstruction results from RR. In such cases, we reduced the variance by excluding IBL
samples from the RIS and evaluating luminance independently of the light list contained
in the scene. In the case shown in this slide, this resulted in an improvement in areas
where the specular components of the character’s jacket had not been rendered
properly.
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/2EVV4K3XEQ.jpg)

Light Sampling - Emissive Polygons -
次はEmissiveポリゴンのサンプリングについて説明します。
Next, I will explain how to sample Emissive polygons.
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/57GL1Q3REL.jpg)

Emissive Polygon Sampling
Ray Hit Only
Ray Hit + NEE (MIS)
* For clarity, this scene uses emissive-only lighting and
therefore differ from actual game scenes
この画像は、左側はレイヒットだけのEmissiveの影響を計算した場合です。右側はEmissive
のNEEも行った場合です。このシーンは分かりやすさのためにEmissiveのみでライティング
を行うように調整しており、実際のゲームシーンとは異なります。
The image on the left shows the result when only ray-hit Emissive samples are calculated.
The image on the right shows the result when NEE is also applied to Emissive samples.
For clarity, this scene has been adjusted to use only Emissive lighting and differs from an
actual in-game scene.
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4EQYDK5YJP.jpg)

Emissive Polygon Sampling
• Ray-hit-only produces excessive noise for
emissive lighting.
• NEE must include emissive polygons.
• Use Walker’s alias method.
• Enables O(1) sampling.
• Generated 4,096 samples per frame
• Each RIS is performed using 32 candidates.
Ray Hit Only
Ray Hit + NEE (MIS)
* For clarity, this scene uses emissive-only lighting and
therefore differ from actual game scenes
ご存じの通り，Emissiveをレイヒットだけで評価すると非常にノイズが大きくなります。
我々はEmissiveのNEEを行いました。NEEをする上での必要なことは影響の大きい三角形を
重点的にサンプリングすることです。そのために私たちはウォーカーズエイリアスメセッド
(walker’s alias method)を使用しました。この方法はオーダー１でサンプリングを行うことが
可能です。フレーム単位で4096個のサンプルを作り、 NEE単位で32個のサンプルを利用し
ています。
As you know, evaluating Emissive based solely on ray hits results in a significant amount
of noise. We applied NEE to Emissive samples. The key to performing NEE is to focus on
sampling the triangles that have the greatest impact. To achieve this, we used the
Walker’s alias method. This method allows for sampling in O(1) time. We generate 4,096
samples per frame and use 32 samples per NEE.
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/KJ4WZP9Z71.jpg)

Emissive Polygon Sampling
Walker’s Alias Method[2]
weight
• Sample elements with probability proportional
to their weights.
• Data structure
avg
• N buckets containing the elements.Each bucket
holds up to two elements.
• The i-th bucket always contains the i-th element.
• Built on GPUがbinのどちらに含まれるか判定
buckets
ウォーカーズエイリアスメセッド(walker’s alias method)について簡単に説明します。この方
法は，左の図のように，N個の重みが与えられたときに，その重みの大きさに比例した確率で
要素をサンプリングするためのものです。サンプリングを行うためのデータ構造として，N個
のbucketを持ちます。各bucketには最大２つの要素が入り，i番目の要素は必ずi番目の
bucketに入ります。右の図の状態が完成形のデータ構造です。このデータ構造をGPU上で構
築しています。具体的なデータ構造の構築方法については参考論文を参照してください。
Here is a brief explanation of the Walker’s alias method. As shown in the figure on the
left, this method is designed to sample elements with a probability proportional to the
magnitude of each of N given weights. It uses a data structure consisting of N buckets
for sampling. Each bucket can hold up to two elements, and the i-th element is always
placed in the i-th bucket. The state shown in the figure on the right represents the final
form of the data structure. We are constructing this data structure on a GPU. Please
refer to the reference paper for details on how to construct the specific data structure.
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/LE1YR9KD7G.jpg)

Emissive Polygon Sampling
Walker’s Alias Method
• Sampling
• Generate u₀, u₁
• u₀: select bucket
• u₁: select primary / alias entry
𝑢1
𝑢0
サンプリングを行うときは，２つの一様乱数を使用します。まず１つ目の乱数で一様な確率
でバケットを選択します。図では一番左のバケットが選択されています。次に２つ目の乱数
が，選択したバケットの２つの要素の内，どちらに含まれるかを判定します。図では緑の要
素が選択されています。このように，オーダー１で重みに比例した確率でサンプリングを行
うことができます。
When performing sampling, we use two uniform random numbers. First, we use the first
random number to select a bucket with uniform probability. In the figure, the leftmost
bucket is selected. Next, the second random number determines which of the two
elements in the selected bucket the value falls into. In the figure, the green element is
selected. In this way, we can perform sampling with a probability proportional to the
weight in O(1) time.
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/GEWG1QD8J2.jpg)

Emissive Polygon Sampling
…
…
• For each SubMesh (Geometry/Material pair), a
data structure for triangle sampling is
constructed.
• Weight = triangle area.
…
• Built once at startup.
• only a few are built per frame.
• Latency is acceptable because emissive can still be computed via
ray-hit.
我々はこのデータ構造を各GeometryとMaterialの組のSub Mesh単位に構築しました。各要
素はEmissive Triangleで，重みは三角形の面積になります。面積の大きな変化は無いとみな
して、最初に１度だけ構築をしています。なお，Emissiveの影響はレイヒットでも計算する
ことが可能です。１フレームに構築するデータ構造の数は数個にして、データ構造の構築の
遅延を許容しています。
We constructed this data structure on a sub-mesh basis for each pair of Geometry and
Material. Each element is an Emissive Triangle, and its weight is the area of the triangle.
Assuming that there are no significant changes in area, we construct the data structure
only once at the beginning. Note that the effect of Emissive can also be calculated
during ray hits. We limit the number of data structures constructed per frame to just a
few, thereby accepting some delay in the construction process.
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/47ZLPWG9J3.jpg)

Emissive Polygon Sampling
…
…
• Construct a data structure for SubMesh
sampling.
…
• Weight = total area × BaseIntensity (× distance
attenuation).
• Instancing via transforms.
• Rebuild on frames where the weights change.
cabinet monitor ceiling
light
light
各Sub Meshでサンプリングのためのデータ構造が作られれば，次は各サブメッシュをサンプ
リングするためのデータ構造の構築を行います。重みはSub Meshの面積の合計と，Material
のEmissive Intensityの積(Multiply)となります。追加で距離減衰なども含めることができま
す。Transformは,この段階で考慮するのでSub Meshのインスタンシングが可能です。こち
らは重みが変化したフレームで構築を行います。
Once the data structures for sampling have been created for each sub-mesh, the next
step is to construct the data structures for sampling each sub-mesh. The weight is
calculated as the product of the total area of the sub-mesh and the material’s emissive
intensity. Additional factors, such as distance attenuation, can also be included. Since the
transform is taken into account at this stage, sub-mesh instancing is possible. This is
constructed in the frame where the weight changes.
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/YJ6WMGYDJV.jpg)

Emissive Polygon Sampling
𝑢0′
𝑢1′
…
• Select a SubMesh.
…
• Select a triangle.
• Uniformly sample over the selected triangle.
• Pre-generate sample points and store them in a
buffer.
• Use RIS to reduce the influence of emissive textures.
…
for (i : N=4096){
Reservoir r;
for (j : M=4){
Sample s = SelectPoint(SelectPolygon(SelectBLAS());
UpdateReservoir(r,s);
}
PreGeneratedSamples[i] = Sample(r);
}
𝑢1
cabinet monitor ceiling
light
light
𝑢0
実際にサンプリングを行う際は、まずSub Meshをサンプリングします。次にサンプリングし
たSub Meshから三角形をサンプリングします。三角形上の点は一様にサンプリングを行いま
す。パストレーシング実行時に，これらの処理を行うのは負荷が高いです。 フレーム単位で
事前にサンプリングを行っておきバッファへ書き出しておきます。説明したサンプリング方
法は、テクスチャの考慮ができていないため，事前サンプリングのときにもRISを行いテクス
チャの影響を軽減しています。
When actually performing sampling, we first sample the sub-mesh. Next, we sample
triangles from the sampled sub-mesh. Points on the triangles are sampled uniformly.
Performing these operations during path tracing is computationally intensive. Instead,
we perform the sampling in advance on a per-frame basis and write the results to a
buffer. Since the sampling method described above does not account for textures, we
also perform RIS during the pre-sampling process to mitigate the impact of textures.
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/GJ5MZVG8J4.jpg)

ReSTIR GI
次は ReSTIR GIです
Next up is ReSTIR GI.
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/LE3W9DRGE5.jpg)

ReSTIR GI [3]
Effective Path Sampling for Indirect Lighting
ReSTIR GI
Example of improvement when using ReSTIR GI
DLSS RRの品質をより安定化するために、我々は ReSTIR GI をRE ENIGINEに実装しました．
現在、タイトルの判断によりこの機能のON/OFFをしています。 ご存じのように，この手法
は間接照明の分散を大幅に低減する手法です。Resident Evil RequiemとPRAGMATAともに，
IBLのみで照明されたゲームシーンや，間接照明が支配的なライトの配置が行われているゲー
ムシーンのノイズを大幅に低減することができました。
To further stabilize the quality of DLSS RR, we have implemented ReSTIR GI in RE ENGINE.
Currently, we enable or disable this feature on a title-by-title basis. As you know, this
technique significantly reduces the variance of indirect lighting. In both Resident Evil
Requiem and PRAGMATA, we were able to significantly reduce noise in game scenes lit
solely by IBL, as well as in scenes with lighting configurations dominated by indirect
lighting.
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/8EDKGPYN7G.jpg)

ReSTIR GI
Effective Path Sampling for Indirect Lighting
Generate Sample
Reuse Temporally
Reuse Spatially
• ReSTIR GI dramatically reduces variance in indirect
illumination.
• It resamples important paths across both time
and neighboring pixels.
• When noisy inputs were fed into DLSS RR,
ghosting artifacts appeared easily.
• Using ReSTIR GI allowed us to effectively mitigate
these artifacts.
• To further reduce correlation artifacts, we reorder
samples when selecting the previous reservoir.
Overview of ReSTIR GI
ノイズの少ない間接照明の計算はレンダリングにおいて常に課題です。ノイズの少ない結果
を作るには，より重要な経路をサンプリングすることが必要です。このReSTIR GIは，現在の
フレームのパストレーシングに使われた情報を，サンプルとして生成しピクセルに保存しま
す。前のフレームもサンプルが生成されているので，時間的に再サンプリングします。その
後，同様に空間的に再サンプリングすることで，ノイズの少ない結果を出力することが可能
になります。本手法をシンプルに運用すると高い相関を持つ結果を出力する可能性がありま
す。相関性はDLSS RRとしては好ましくないものです。この問題に対応するために，我々は
時間的に再サンプリングする際に、前のフレームの対応ピクセルから，少しずれた位置を見
て再サンプリングを行っています。
Calculating low-noise indirect lighting is always a challenge in rendering. To produce lownoise results, it is necessary to sample more significant paths. This ReSTIR GI method
generates samples based on the information used in the path tracing of the current
frame and stores them in pixels. Since samples are also generated for the previous frame,
we perform temporal resampling. Subsequently, by performing spatial resampling in a
similar manner, it becomes possible to output results with low noise. If this method is
applied simply, it may produce results with high correlation. Such correlation is
undesirable for DLSS RR. To address this issue, when performing temporal resampling,
we look at positions slightly offset from the corresponding pixels in the previous frame
to perform the resampling.
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/V7PK3N6NJ8.jpg)

ReSTIR GI
Effective Path Sampling for Indirect Lighting
Without ReSTIR GI
With ReSTIR GI
Ghosting Example
ReSTIR GIを利用することで改善したアーティファクトの例を紹介します。左のビデオのキャ
ラクターの髪の毛の周辺に、ゴーストのようなもやもやした模様が生じています。ReSTIR GI
を利用した、右のビデオは、ノイズ改善することでモヤモヤしたアーティファクトが改善し
ました。ReSTIR GIは、よりノイズが減るため詳細な見た目を作るのに優れています。
Here is an example of artifacts that have been reduced using ReSTIR GI. In the video on
the left, ghost-like, hazy patterns appear around the character’s hair. In the video on the
right, which uses ReSTIR GI, these hazy artifacts have been reduced through noise
reduction. ReSTIR GI excels at creating detailed visuals because it reduces noise more
effectively.
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/2JVV4K3YJQ.jpg)

Using DLSS RR Guide Buffers
つぎは DLSS RRのガイドバッファについて我々が行った方法を説明します。
Next, we’ll explain the approach we took regarding the DLSS RR guide buffer.
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/5EGL1Q3WJL.jpg)

Sub Surface Scattering Guide
Skin
RE ENIGINEはサブサーフェイススキャッタリングを，スクリーンスペースのブラー処理に
よって実現しています。ブラー処理の結果を RRにそのまま入力すると，ちらちらとしたアー
ティファクトが発生することがありました。キャラクターの顔の頬の部分にアーティファク
トが生じていることが確認できます。この様な，アーティファクトはSub Surface
Scattering Guideを利用することで効率的に改善することが可能です。ではその詳細を確認
しましょう。
RE ENIGINE implements subsurface scattering using screen-space blurring. When the
results of this blurring process were fed directly into RR, flickering artifacts sometimes
occurred. You can see that artifacts have appeared on the character’s cheeks. Such
artifacts can be effectively corrected by using the Sub Surface Scattering Guide. Let’s
take a closer look at the details.
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/4JQYDK5Q7P.jpg)

Sub Surface Scattering Guide
Skin
• We use a blur effect to represent sub-surface
scattering, blurry glass, and various VFX.
• However, this blur effect often introduces
flickering artifacts when DLSS RR is applied.
• By applying the DLSS RR SSS Guide, we are
able to eliminate these artifacts effectively.
After SSS
+
Add
SSS Guide
Luminance
1st /2nd half : Disable/Enable SSSGuide
Before SSS
サブサーフェイススキャッタリングに対して本ガイドバッファを適用する場合，その構築は
シンプルなものになります。サブサーフェイススキャッタリングの適用前後の結果の差のル
ミナンスを生成し，これをガイドバッファとして RRに入力しています。これを活用すること
で，RR実行時に発生するちらちらとするアーティファクトを除去することができます。
When applying this guide buffer to subsurface scattering, the implementation is
straightforward. We generate the luminance difference between the results before and
after applying subsurface scattering and feed this into RR as a guide buffer. By utilizing
this, we can eliminate the flickering artifacts that occur during RR execution.
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/K74WZP9YE1.jpg)

Sub Surface Scattering Guide
Blurry Glass
Disable SSS Guide
Enable SSS Guide
似たような問題が，すりガラスでも起きていました。すりガラス表現のために我々は，パス
トレーシングによって計算された結果にブラー処理を施しています。しかし，SSSの場合と
同様こういった結果をDLSS RRに入力すると，このビデオのように似たようなアーティファ
クトが発生しました。
A similar issue occurred with frosted glass as well. To achieve the frosted glass effect,
we apply a blur effect to the results calculated by path tracing. However, just as with SSS,
when we fed these results into DLSS RR, similar artifacts appeared, as shown in this
video.
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/LJ1YR9KNEG.jpg)

Sub Surface Scattering Guide
Blurry Glass
• We use a blur effect to represent sub-surface
scattering, blurry glass, and various VFX.
• However, this blur effect often introduces
flickering artifacts when DLSS RR is applied.
• By applying the DLSS RR SSS Guide, we are
able to eliminate these artifacts effectively.
After Glass Applied
+
Add
SSS Guide
Luminance
1st /2nd half : Disable/Enable SSSGuide
Before Glass Applied
こういった問題も，我々はSubsurface-scattering Guideを活用し，アーティファクトを除去
しました。先ほどのSSSの場合と同じく，単純に，ガラス効果の適用前後の結果の差のルミ
ナンスを生成し，これをガイドバッファとしてDLSSRRに入力するだけです。これを活用す
ることで，DLSS RR実行時に発生するちガラス面での，ちらちらとするアーティファクトを
除去することができます。
We also addressed these issues by utilizing the Subsurface-scattering Guide to remove
artifacts. Just as with the SSS case mentioned earlier, we simply generate the luminance
difference between the results before and after applying the glass effect and feed this
into DLSS RR as a guide buffer. By doing so, we can eliminate the flickering artifacts that
occur on glass surfaces when DLSS RR is running.
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GJWG1QPM72.jpg)

Disocclusion Mask
Rain Puddles / Water Droplet
Disable Disocclusion Mask
Enable Disocclusion Mask
次の問題に移りましょう。DLSS RRをRE ENIGINEに組み込んだ当初，我々のパストレーシン
グは，画面の雨が降っているシーンで，左側のように波紋や雨粒が確認できないという問題
がありました。しかし，ガイドバッファ Disocclusion Maskを適用したするおことで、雨の
波紋や雨粒が認識できました。
Let’s move on to the next issue. When we first integrated DLSS RR into RE ENGINE, our
path tracing had a problem where ripples and raindrops were not visible in scenes with
rain on the screen, as shown on the left. However, by applying a guide buffer called the
“Disocclusion Mask,” we were able to render the rain ripples and raindrops.
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/4EZLPWKM73.jpg)

Disocclusion Mask
Rain Puddles / Water Droplet
• Animation-based effects often cannot be
detected as disocclusion.
Droplet
• As a result, these effects tend to disappear
during DLSS RR execution.
• The DLSS RR Disocclusion Mask helps prevent
these issues.
Rain Puddle
1st /2nd half : Disable / Enable Disocclusion Mask
通常，Disocclusionが発生した部分においてはDLSS RRは適切に処理を行い残像感のないデ
ノイズ結果を生み出します。しかし，波紋は、法線だけがシェーダによりアニメーションし
て実現されています。また、雨粒に関しては特に何のバッファにも影響を与えずに半透明と
して描画されています。この状態で、RRを実行した場合にノイズ除去されたような見た目に
なりがちです。この問題に対応するため，RRのガイドバッファ Disocclusion Maskを活用し
ました。ガイドバッファの活用によって，ビデオ前半で表れていないレンダリング効果が視
認できるレベルまで改善されていることが見て取れます。
Normally, DLSS RR processes areas where disocclusion occurs appropriately, producing
denoised results without ghosting. However, ripples are created solely by animating the
normals via shaders. Additionally, raindrops are rendered as translucent without
affecting any specific buffer. When RR is applied in this state, the result often appears
as if noise has been removed. To address this issue, we utilized the RR guide buffer, the
Disocclusion Mask. By utilizing the guide buffer, we can see that rendering effects not
present in the first half of the video have been improved to a level where they are clearly
visible.
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/Y76WMGQ57V.jpg)

Disocclusion Mask
Rain Puddles
Normal (Current Frame)
Normal (Previous Frame)
+
• The disocclusion mask is computed by
evaluating the inner product between the
current and previous normal vectors.
Normal (Without Decal)
Add
• We represent rain puddles using an animated
normal distribution.
-
Inner Product
+
1
+
-
• The resulting value is then applied to the area
where the decal is used.
Add
+
Multiply
!=0
𝑉mask = 𝛼 1 − 𝑛current ∙ 𝑛previous
Area Decal Applied
Disocclusion Mask
𝑉mask : disocclusion mask value
𝛼: adjustment coefficient
𝑛: normal vector
雨の波紋を表示するためのDisocclusion Maskの作成方法について説明します。Disocclusion
Maskは不要な領域まで実行すると、安定したデノイズ結果を失うため、影響を与えるピクセ
ルを最小化する努力を行います。そのために，デカールが適用される前の法線を保存し，デ
カールが適用された後の法線との差分の不一致部分を作り出します。この操作により、現在
のフレームのデカールの適用範囲が生成されます。次に，前のフレームのデカールが適用さ
れた法線を読みだして，現在のフレームのデカール法線との内積をとって Disocclusion
Mask に書き込む値を作ります。この計算式によって，時間的に法線の変化が激しい部分に
重点的にDisocclusion Maskを生成することが期待できます。
This section explains how to create a Disocclusion Mask to render ripples in rain. Since
applying the Disocclusion Mask to unnecessary areas can compromise stable denoising
results, we strive to minimize the number of affected pixels. To achieve this, we save the
normals before the decal is applied and generate a difference map highlighting the areas
where the normals differ from those after the decal is applied. This process defines the
area where the decal is applied in the current frame. Next, we read the decals-applied
normals from the previous frame, calculate the dot product with the decals-applied
normals of the current frame, and use the result to generate the values to be written to
the Disocclusion Mask. This calculation is expected to generate a Disocclusion Mask that
focuses on areas where normal changes are most pronounced over time.
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/G75MZVRG74.jpg)

Disocclusion Mask
Water Droplet
Alpha Mask (Current Frame)
Alpha Mask (Previous Frame)
• We represent rain droplets using transparent
effects.
• These effects generate a distribution of alpha
values in screen space.
• We evaluate the disocclusion mask by
computing the ratio of alpha values.
Divide
𝑉mask = 𝛼 max
𝐴previous
𝐴current
,
𝐴previous + ε 𝐴current + ε
𝑉mask : disocclusion mask value
𝛼: adjustment coefficient
𝐴: alpha channel value
Disocclusion Mask
次に，雨の水滴が描画される領域に対するDisocclusion Maskの生成の説明をします。RE
ENGINEは，半透明物体のアルファの値をAlpha Maskというテクスチャに出力できます。半
透明物体である雨粒がアニメーションしているということは，このAlpha Maskもアニメー
ションしていることになります。そこで，スライドの式のようにしてDisocclusion Maskの値
を計算することで、半透明エフェクトの時間的変化に対応することが可能です。
Next, I will explain how the disocclusion mask is generated for the area where raindrops
are rendered. RE ENGINE can output the alpha values of translucent objects to a texture
called the Alpha Mask. Since raindrops are translucent objects that animate, this Alpha
Mask also animates. Therefore, by calculating the values of the disocclusion mask using
the formula shown on the slide, we can adapt to the temporal changes in the
translucency effect.
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/9J29R3DDER.jpg)

Disocclusion Mask
Animated Lights
Disable Disocclusion Mask
Enable Disocclusion Mask
波紋と似た問題に，アニメーションするProjection Texture Lightが、DLSS RRの実行時には
変化が見えにくいという問題がありました。このビデオは、地面に、波打つような模様のテ
クスチャが投影されています。DisocclusionMaskを利用することで、よりはっきりと波打つ
模様が確認できます。
A similar issue to the ripples was that changes in animated Projection Texture Lights
were difficult to see when DLSS RR was enabled. In this video, a texture with a rippling
pattern is projected onto the ground. By using a Disocclusion Mask, the rippling pattern
becomes much more clearly visible.
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/DEY4D12MJM.jpg)

Disocclusion Mask
Animated Lights
• Animation-based effects often cannot be
detected as disocclusion.
• As a result, these effects tend to disappear
during DLSS RR.
• The DLSS RR Disocclusion Mask helps prevent
these issues.
𝑉mask = exp2 𝛼
1st /2nd half : Disable / Enable Disocclusion Mask
𝑊anim
𝑊
2
−1
𝑉mask : disocclusion mask value
𝛼: adjustment coefficient
𝑊: sum of RIS weights of all processed lights
𝑊anim : sum of RIS weights of animated lights
RE ENGINE では、ライトのアニメーション情報を利用し、RIS 実行時に アニメーション中ラ
イトの重み を個別に計算できます。また、Streaming RIS の 全ライトの重み合計 と アニ
メーション中ライトの重み合計 の比を求めることで、各シェーディング点におけるライトの
寄与度 を推定できます。この寄与度を用いて Disocclusion Mask を生成すると、アニメー
ションライトが照射する領域に重点的な補正を加えることができます。その結果、アニメー
ションが 遅れて見える問題 を軽減できます。デモでは、前半はマスクなし、後半はマスクあ
りで、後半の方がアニメーションが明瞭に観察できます。
In RE ENGINE, we can utilize light animation data to individually calculate the weights of
lights currently in animation during RIS execution. Furthermore, by calculating the ratio
of the total weight of all lights in Streaming RIS to the total weight of lights currently in
animation, we can estimate the contribution of each light at every shading point. By
using this contribution to generate a disocclusion mask, we can apply targeted
corrections to the areas illuminated by animated lights. As a result, we can mitigate the
issue of animation appearing delayed. In the demo, the first half is shown without a mask,
and the second half with a mask; the animation is clearly observable in the second half.
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/VJNY628378.jpg)

Hack the Diffuse / Specular Albedo
High-frequency Hologram Patterns
Original Diffuse / Specular Albedo
Hacked Diffuse / Specular Albedo
最後に、RRのガイドバッファ Diffuse / Specular Albedoを調整することで得られる効果の紹
介します。このビデオでは，空中に浮かび上がるホログラムが描画されます。そのホログラ
ムは表面に短い間隔で点滅するノイズ状のパターンをEmissive Colorのアニメーションとし
て表現しています。左のビデオは、そのようなパターンが視認できないことができません。
右のビデオは，ガイドバッファ Diffuse / Specular Albedoを，このパターンを表すEmissive
Colorの値で置換する対応をしたものです。ホログラムのノイズ状のパターンが鮮明に描画さ
れるようになっています。
Finally, I’ll demonstrate the effects achieved by adjusting the Diffuse and Specular
Albedo guide buffers in RR. In this video, a hologram appears to float in mid-air. The
hologram displays a noise-like pattern that flickers at short intervals on its surface,
rendered as an animation of the Emissive Color. In the video on the left, this pattern is
not visible. The video on the right shows the result of replacing the Diffuse and Specular
Albedo guide buffers with the Emissive Color values representing this pattern. The noiselike pattern of the hologram is now rendered clearly.
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/YE9PL1KPJ3.jpg)

Hack the Diffuse / Specular Albedo
High-frequency Hologram Patterns
Disable Hacking
Diffuse Albedo
Enable Hacking
Diffuse Albedo
• We represent surface patterns on holograms
using emissive brightness.
• Such variations were not reflected in the
DiffuseAlbedo or SpecularAlbedo.
• Therefore, we experimented with replacing the
DiffuseAlbedo and SpecularAlbedo using the
animated Emissive Color values.
• This modification made the effects driven by
the animated Emissive Color appear
significantly clearer.
Specular Albedo
Specular Albedo
Disable / Enable Guide-Buffer Hacking
今説明した内容を復唱するような形になりますが，詳細に説明いたします。まず我々はこう
いったホログラムパターンをEmissive Colorのアニメーションとして実現していました。し
かし，こういった情報は，DLSS RRに投入するガイドバッファには一切反映しておらず，こ
ういった高速に変化するパターンがボケたり見えにくくなるといった問題が起きていました。
そこで，ガイドバッファである Diffuse Albedo / Specular Albedoの値を，Emissive Colorが
存在する部分に関しては，その色で置換処理を行うことで鮮明にこういった効果をDLSS RR
環境下で映し出すことができました。
I’ll be repeating some of what I just explained, but I’ll go into more detail. First, we had
implemented these hologram patterns as animations of the Emissive Color. However,
this information was not reflected at all in the guide buffer fed into DLSS RR, which
caused issues such as these rapidly changing patterns becoming blurred or difficult to
see. To address this, we replaced the values in the guide buffers (Diffuse Albedo and
Specular Albedo) with the Emissive Color values in the areas where it was present. This
allowed us to clearly reproduce these effects within the DLSS RR environment.
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/GE8DX4RXED.jpg)

Strands
次は髪の毛について少し触れます。
Next, I’ll touch briefly on hair.
42


# Page. 43

![Page Image](https://bcdn.docswell.com/page/LELM86KN7R.jpg)

Strands
Rasterizer Strand Hair
Hardware Rasterizer
Hardware Rasterizer + Software Rasterizer[4]
Resident Evil RequiemとPRAGMATAは、ストランドをベースとした髪の毛を利用して
います。これらはハードウェアラスタライザーだけではなくソフトウェアラスタライザーを
組み合わせることで毛の連続性を担保した可視化を実現しています。
Resident Evil Requiem and PRAGMATA utilize strand-based hair. By combining hardware
and software rasterizers, these projects achieve realistic visualization that ensures the
continuity of the hair strands.
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/4JMY652QJW.jpg)

Strands
BVH in Resident Evil Requiem
• Strand BVH uses the fallback mesh
• Path Tracing uses the same fallback as Ray Tracing
• Resident Evil Requiem was determined to have no issues.
Mirror-reflected hair uses a polygon mesh
ゲーム中は、一本一本体の髪の毛のレンダリングを使っています。BVHはどうするのでしょ
うか？StrandのBVHは、専用のフォールバックメッシュを利用しています。
Specular/DiffuseはStrandによるレンダリングを実行しないオプションのメッシュを利用し
ています。メモリバジェットや見た目は通常のRayTracingと同等の物を利用しています。
Resident Evil Requiemは特別問題はなかったそうです。
During gameplay, we use per-strand hair rendering. What about the BVH? Strand’s BVH
utilizes a dedicated fallback mesh. For Specular/Diffuse, it uses an optional mesh that
does not perform Strand-based rendering. In terms of memory usage and visual quality,
it is equivalent to standard ray tracing. Apparently, there were no particular issues with
Resident Evil Requiem.
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/PJR9P3MK79.jpg)

Strands
BVH in PRAGMATA
• Hair strands move freely under low-gravity conditions
• Strand physics and fallback-mesh physics use separate
implementations, and their simulation results are not fully
consistent
• Path tracing reveals noticeable shadow mismatches due
to ShadowRay inconsistencies
• Standard ray tracing and rasterization do not exhibit
noticeable mismatches, as strand hair is rendered directly
into the ShadowMap.
• BVH support for strand geometry becomes necessary
Shadow artifacts from Strand–Mesh simulation mismatch
PRAGMATAはどうでしょうか？PRAGMATAは、低重力環境で遊ぶことがあるゲームとなっ
ています。そのため髪の毛が自由に動くことがあります。Resident Evil Requiemと比べt、髪
の毛は長く、低重力環境下では、Strandのシミュレーションと、FallbackMeshで利用してい
るシミュレーションが異なることで見た目の整合性が大きく崩れる結果となりました。画像
のように左のほほに落ちる影は正しいように見えますが、不自然な感じがします。つまり、
PathTracing時は、ShadowRayの影の不一致がとても目立ちます。通常のRayTracingや
Rasterizerは、ShadowMapにStrandの深度を描いているためこの不一致は発生しません。そ
のため PRAGMATAはStrandのBVH対応が必要となりました。
What about PRAGMATA? PRAGMATA is a game set in a low-gravity environment. As a
result, hair can move freely. Compared to Resident Evil Requiem, the hair is longer, and in
the low-gravity environment, the discrepancy between the Strand simulation and the
simulation used by FallbackMesh caused a significant loss of visual consistency. As
shown in the image, the shadow falling on the left cheek appears correct but feels
unnatural. In other words, during Path Tracing, the shadow mismatch caused by
ShadowRay is very noticeable. This mismatch does not occur with standard Ray Tracing
or Rasterizer because they render Strand depth onto the Shadow Map. Consequently,
PRAGMATA required support for Strand BVH.
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/PEXQ34V5JX.jpg)

Strands
BVH
• Implement BVH geometry based on NVIDIA’s DOTS
approach[5]
• Output cross-shaped vertices similar to a hardware
rasterizer
• Disable subdivision due to excessive vertex growth
BVHの形状はNVIDIAのDOTSを参考に実装しています。HardwareのRasterizerと同じような
頂点を十字に出力しています。この処理は、頂点数が増えすぎるためSubdivision計算は無効
化しています。
The BVH structure is implemented based on NVIDIA&#039;s DOTS. It outputs vertices in a cross
pattern, similar to a hardware rasterizer. Since this process results in an excessive
number of vertices, subdivision calculations have been disabled.
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/3EK9YZQRED.jpg)

Strand
Result
Shadow using Strands
Shadow using the Fallback Mesh
結果を見てみます。ストランドを使った影の方が、より良い見た目になっていることがわか
ります。
Let&#039;s take a look at the results. You can see that the shadows created using strands look
better.
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/L73W9DPG75.jpg)

Hacking
次はハッキングです。ワークラウンドかもしれません。
Next up is hacking. It might be a workaround.
48


# Page. 49

![Page Image](https://bcdn.docswell.com/page/87DKGPLNJG.jpg)

Hacking The Shadow Terminator
• Coarse geometry introduces visible shadow
artifacts.
• We mitigate this by offsetting the ray to a
virtually tessellated position [2].
• Cut-scenes only
パストレーシングではShadowRayを用いて影計算を行うことで，きれいな影を表現すること
ができます。しかしながらジオメトリが粗い場合は，シェーディング自体は頂点法線を補完
することで滑らかな見た目にできますが，影計算では不連続な見た目になってしまうことが
あります。
In path tracing, using ShadowRay to calculate shadows allows for the rendering of highquality shadows. However, when the geometry is coarse, while the shading itself can be
made to look smooth by interpolating vertex normals, the shadow calculation may result
in a discontinuous appearance.
49


# Page. 50

![Page Image](https://bcdn.docswell.com/page/VJPK3N2NE8.jpg)

Hacking The Shadow Terminator
• Coarse geometry introduces visible shadow
artifacts.
• We mitigate this by offsetting the ray to a
virtually tessellated position [2].
• Cut-scenes only
w/ offset
[2]: J. Hanika, “Hacking the Shadow Terminator”, 2021.
そのため，我々は仮想的にテッセレーションを行い，位置を補正することで影の不連続性を
解消しました。この計算を行うための情報はGBufferにはないため，追加のレイトレース処
理が必要であるため，カットシーンのみ，この機能を使うようにしました。手法の詳細は参
考論文を参照してください。
Therefore, we resolved the shadow discontinuities by performing virtual tessellation and
correcting the positions. Since the information required for this calculation is not
contained in the GBuffer, additional ray-tracing processing is necessary; consequently,
we limited the use of this feature to cutscenes only. Please refer to the reference paper
for details on this method.
50


# Page. 51

![Page Image](https://bcdn.docswell.com/page/2EVV4KDYEQ.jpg)

Hacking The Alpha Testing
Any-hit shader are not efficient with complex shaders
Ray Tracing
Path Tracing
BVH
ゲーム中のダメージ表現、例えば欠損などは AlphaTestをつかって表現されています。通常
のRayTracingはなんとなくいい感じに見えます。それに対し、PathTracingは照明計算の
Shadow RayのAny hitの交差判定でBVHが不適切な結果になっています。ただ複雑なany hit
shaderは 使いたくはないです。
Damage effects in the game, such as missing limbs, are rendered using AlphaTest.
Standard ray tracing generally looks pretty good. In contrast, with path tracing, the BVH
produces inappropriate results during the &quot;any hit&quot; intersection test for shadow rays in
the lighting calculations. However, I don&#039;t want to use a complex &quot;any hit&quot; shader.
51


# Page. 52

![Page Image](https://bcdn.docswell.com/page/57GL1QYWEL.jpg)

Hacking The Alpha Testing
ScreenSpaceAlphaTest
• Introduced Screen-Space Alpha Test
• Works as an inverse version of the shadow map
• Determines Any-Hit continuity based on the relationship
between the current depth and the ray hit within the BLAS
• Enables Screen-Space Alpha Test for complex shaders
float4 pos;
pos = mul(getBVHMatrix(InstanceIndex()), float4(hit_pos, 1));
pos = mul(pos, viewProjMat);
pos.xyz /= pos.w;
if (all(abs(pos.xy) &lt; 1.f)){
float depth = readDepth( pos.xy);
if (pos.z &gt; depth + ScreenSpaceAlphaTestDepthBias)
IgnoreHit();
}
我々は、スクリーンスペースアルファテストを作りました。これは、シャドウマップの逆
バージョンで、影を作るのではなく貫通許可を与えます。Any hit shaderのヒット位置を、
ラスタライザーの深度に投影して、深度テストを実行して貫通するかどうかを判断します。
複雑なalpha testingのシェーダに、スクリーンスペースアルファテストを適用しました。
We created a screen-space alpha test. This is the inverse of a shadow map; rather than
casting shadows, it determines whether objects can pass through. It projects the hit
position from the &quot;Any Hit&quot; shader onto the rasterizer&#039;s depth buffer, performs a depth
test, and determines whether the object can pass through. We applied the screen-space
alpha test to a complex alpha testing shader.
52


# Page. 53

![Page Image](https://bcdn.docswell.com/page/4EQYDKMQJP.jpg)

BVH Management
BVH Managementを少し説明します。一般的にはAcceleration Structureかもしれないです
が、ここではBVHとします。
Let me briefly explain BVH Management. While it is generally referred to as an
&quot;Acceleration Structure,&quot; I will use the term &quot;BVH&quot; here.
54


# Page. 54

![Page Image](https://bcdn.docswell.com/page/KJ4WZPVY71.jpg)

BVH Management
• BVH Construction
• Build BLAS / TLAS using Async Compute
• Run in the background alongside Visibility Buffer, G-Buffer,
and Shadow Casting passes
• BVH Structure
• Mesh LOD and BVH may differ in certain cases
• Recast Primary Ray[7] avoids self-intersections between the
BVH and rasterization
• BVH Memory Allocation
• CommitedResources sub allocation[8]
• No Resource Barriers required
• Can be allocated with 256-byte alignment
初めにも触れましたが、BVHは非同期コンピュートにより実現しています。これらは、
Gbufferなどのバックグラウンドで動作をしています。BVHの構造は、Shadow Terminator
でも少し触れましたがMeshのLODとBVHで異なるケースがあります。これに関しては
RecastRayと呼ばれる方法で、BVHとラスタライゼーションのセルフインターセクションを
回避しています。BVHのメモリは、基本的にはComitted Resoruceをサブアロケーションを
しています。基本的には NVIDIAのblog記事をベースにしています。
As mentioned earlier, the BVH is implemented using asynchronous compute. These
operations run in the background alongside processes such as the G-buffer. As briefly
discussed in the Shadow Terminator section, the structure of the BVH differs in some
cases from that of the mesh LOD. To address this, we use a method called RecastRay to
avoid self-intersections between the BVH and the rasterization process. BVH memory is
essentially suballocated from Committed Resources. This approach is primarily based on
an NVIDIA blog post.
55


# Page. 55

![Page Image](https://bcdn.docswell.com/page/LE1YR93N7G.jpg)

FrameGeneration + AsyncCompute
Queue Contention
• Concurrent use breaks parallel execution, causing DirectQueue idles
• Creating paired DirectQueue and ComputeQueue using CreatorID restores proper parallelism
Traditional CreateCommandQueue
//DirectQueue
device-&gt;CreateCommandQueue(&amp;directQueueDesc,
__uuidof(ID3D12CommandQueue),&amp;DirectQueue);
//ComputeQueue
device-&gt;CreateCommandQueue(&amp;computeQueueDesc,
__uuidof(ID3D12CommandQueue), &amp;computeQueue);
idle
idle
Pairing CreateCommandQueue1 with CreatorID
GUID creatorID;
CoCreateGuid(&amp;creatorID);
//DirectQueue
device9-&gt;CreateCommandQueue1(&amp;directQueueDesc, creatorID,
__uuidof(ID3D12CommandQueue),&amp;DirectQueue);
//ComputeQueue
device9-&gt;CreateCommandQueue1(&amp;computeQueueDesc, creatorID,
__uuidof(ID3D12CommandQueue), &amp;computeQueue);
BVHの非同期ComputeとFrame Generationを組み合わせると性能がうまく出ないことがあ
ります。フレーム生成とAsyncComputeを同時に利用すると、上手く並列動作せず
DirectQueueでIdleが発生します。この問題は、CreatorIDを利用したDirectQueueと
ComptueQueueのペアを作ることで並列化が復元しました。
Combining BVH&#039;s asynchronous compute and frame generation can sometimes result in
poor performance. When frame generation and AsyncCompute are used simultaneously,
they do not parallelize properly, causing idling in DirectQueue. This issue was resolved by
creating a pair of DirectQueue and ComputeQueue using CreatorID, which restored
parallelization.
56


# Page. 56

![Page Image](https://bcdn.docswell.com/page/GEWG1QXMJ2.jpg)

Path Tracing Performance
DLSS Performance
1920*1080
2560*1440
3840*2160
RTX 2070 Super
29.95ms
42.76ms
99.72ms
RTX 3060
24.20ms
38.38ms
67.93ms
RTX 4060 Ti
13.64ms
19.00ms
34.39ms
RTX 4070 Ti
8.78ms
11.70ms
20.09ms
RTX 5060 Ti
11.98ms
16.64ms
30.78ms
Measured as of December 12, 2025 – Resident Evil Requiem
最後にパフォーマンスに関して触れます。これは、Resident Evil Requiemの開発チー
ムの12月の資料を基にしています。当時の開発環境ではこのようなパフォーマンス推移と
となっていました。
Finally, I’d like to touch on performance. This is based on materials from the Resident Evil
Requiem development team in December. Under the development environment at that
time, performance trends looked like this.
57


# Page. 57

![Page Image](https://bcdn.docswell.com/page/47ZLPW6MJ3.jpg)

Future work
• ReSTIR DI
• Emissive Polygon Sampling
• Supporting extremely large scenes
• Position-dependent emissive-polygon sampling
• ShaderGraph for Closest Hit Shader and Any Hit Shader
• We tried Shader Execution Reordering. Currently, it is not enough of a performance gain
• Transparent/Translucent Path Tracing
• BTDF
• VFX / Volume Rendering
• Neural Shading
• Shader Model 6.10
• Clustered Geometry
• Shader Model 6.10
ここまでが私たちの資料です。今後の課題です。ReSTIR DIを使った直接照明の改善がありま
す。直接照明が大きく改善しますが、現在はコストのバランスで利用しておりません。現行
のタイトルではEmissivePolygonの影響は大きくなかったため，説明した方法でも特に問題
は起きませんでしたが，広大なシーンでEmissivePolygonをメインとしてライティングする
ようなケースでは位置に依存した方法を実装する必要があると思います。ShaderGraphを疎
のままClosestHitShaderやAnyHitShaderにすることです。これらのためにSERは十分に検証
がし切れていないため、より性能を出せるようになれば柔軟なマテリアル表現が可能になる
でしょう。また、半透明などのパストレーシングの対応は発展登場でした。さらにVFXや
Volume Renderingへの対応もやってみたいです。さらにNeural Shadingや Clustered
Geoemtryなど、よりメモリ効率や実行効率が優れた機能を試してみたいです。
That concludes our presentation. Moving forward, one key challenge is improving direct
lighting using ReSTIR DI. While this would significantly improve direct lighting, we are
currently not utilizing it due to cost considerations. In our current title, the impact of
EmissivePolygons was minimal, so the method we described did not cause any particular
issues. However, in cases where EmissivePolygons are used as the primary lighting
source in vast scenes, I believe we will need to implement a position-dependent method.
We plan to use ShaderGraph in a sparse configuration with ClosestHitShader or
AnyHitShader. Since SER has not yet been fully validated for these purposes, achieving
better performance will enable more flexible material representation. Additionally,
support for path tracing for effects like translucency was still in its early stages. We’d
also like to explore support for VFX and volume rendering. I’d also like to experiment with
features that offer superior memory and runtime efficiency, such as Neural Shading and
Clustered Geometry.
58


# Page. 58

![Page Image](https://bcdn.docswell.com/page/YJ6WMG25JV.jpg)

Acknowledgments / Co-Contributors
• Co-Contributors
• Rendering Engineers
• Kosuke Nabata
• Kenta Nakamoto
• Technical Artists
• Xu Han
• Bradley Saunders
• Francesca Pesce
• NVIDIA
• Calvin Hsu
• Masaya Takeshige
• Acknowledgments
• RE ENGINE Development Team
• Resident Evil Requiem and PRAGMATA Dev Teams
最後に謝辞です。このパストレーシングを実現するために注力した、名畑 豪祐さんと 中本
健太さん、あと、パストレーシングの評価と品質管理でXuさん、Bradleyさん、Francescaさ
ん、DLSS RRのいろいろな機能などを教えていただいたCalvinさんと、Masayaさんありがと
うございました。あとは、エンジンチームの皆さんと、ゲーム開発タイトルチームの皆さん
のおかげでパストレーシングが実現できました。
Finally, I would like to express my gratitude. Thank you to Kousuke Nabata and Kenta
Nakamoto, who dedicated their efforts to making this path tracing a reality; to Xu,
Bradley, and Francesca for their work on path tracing evaluation and quality control; and
to Calvin and Masaya for teaching me about the various features of DLSS RR. I would
also like to thank everyone on the engine team and the game development team, whose
contributions made this path tracing possible.
59


# Page. 59

![Page Image](https://bcdn.docswell.com/page/GJ5MZV2GJ4.jpg)

References
[1] Bitterli,et al., “Spatiotemporal Reservoir Resampling for Real-Time Ray Tracing with Dynamic Direct
Lighting,” ACM Transactions on Graphics (SIGGRAPH), 2020.
[2] H.-P. Lehmann, et al., “Weighted random sampling on GPUs,” 2021.
[3] Ouyang Y., Liu S., Kettunen M., Pharr M.,Pantaleoni J., “ReSTIR GI: Path Resampling for Real-Time Path
Tracing,” Computer Graphics Forum 40(8), 2021.
URL:https://onlinelibrary.wiley.com/doi/abs/10.1111/cgf.14378
[4] Toshiaki Ishihara, Hitoshi Mishima. “Resident Evil 4 Hair Discussion,” 2023
[5] “Render Path-Traced Hair in Real Time with NVIDIA GeForce RTX 50 Series GPUs,” NVIDIA Technical Blog
[6] J. Hanika ., “Hacking the Shadow Terminator,” 2021
[7] Daniel Wright et al., “Lumen: Real-time Global Illumination in Unreal Engine 5,” 2022.
[8] “Managing Memory for Acceleration Structures in DirectX Raytracing,” NVIDIA Technical Blog.
[1] Bitterli,et al., “Spatiotemporal Reservoir Resampling for Real-Time Ray Tracing with
Dynamic Direct Lighting,” ACM Transactions on Graphics (SIGGRAPH), 2020.
[2] H.-P. Lehmann, et al., “Weighted random sampling on GPUs,” 2021.
[3] Ouyang Y., Liu S., Kettunen M., Pharr M.,Pantaleoni J., “ReSTIR GI: Path Resampling for
Real-Time Path Tracing,” Computer Graphics Forum 40(8), 2021.
URL:https://onlinelibrary.wiley.com/doi/abs/10.1111/cgf.14378
[4] Toshiaki Ishihara, Hitoshi Mishima. “Resident Evil 4 Hair Discussion,” 2023
[5] “Render Path-Traced Hair in Real Time with NVIDIA GeForce RTX 50 Series GPUs,”
NVIDIA Technical Blog
[6] J. Hanika ., “Hacking the Shadow Terminator,” 2021
[7] Daniel Wright et al., “Lumen: Real-time Global Illumination in Unreal Engine 5,” 2022.
[8] “Managing Memory for Acceleration Structures in DirectX Raytracing,” NVIDIA
Technical Blog.
60


# Page. 60

![Page Image](https://bcdn.docswell.com/page/9E29R34D7R.jpg)

Q&amp;A
• Q. Does reusing a random seed and splitting the random output introduce any bias? And if it does, is the effect
acceptable in practice?
• A. Strictly speaking, this approach may introduce some bias, but in practice the noise characteristics were fine, and
even with DLSS RR there were no noticeable issues.
61


