エンジン改造-ライティング解析
をテンプレートにして作成
[
ホーム
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
----
UE4.15.1で検証
- G-Bufferについてはコチラを参照
[[エンジン改造-Gバッファの拡張]]
* 参考 [#m33dd291]
- グラフィック プログラミングの概要 - Unreal Engine Docum...
https://docs.unrealengine.com/latest/JPN/Programming/Rend...
* レンダリングの流れ [#ba1608ac]
** Deferred Shaing [#l9749b95]
- COLOR(#30c030){動的影生成}
Main COLOR(#3030c0){(ShadowProjectionPixelShader.usf)}
- COLOR(#30c030){GBufferへの書き込み}
MainPS COLOR(#3030c0){(PixelShaderOutputCommon.usf)}
FPixelShaderInOut_MainPS COLOR(#3030c0){(BasePassPixel...
-- COLOR(#30c030){Indirect Light、Sky Lightの計算}
GetPrecomputedIndirectLightingAndSkyLight COLOR(#3030c0){...
---COLOR(#30c030){Sky Lightの計算}
GetSkyLighting COLOR(#3030c0){(BasePassPixelShader.usf)}
- COLOR(#30c030){Gバッファからシェーディング}
DirectionalPixelMain COLOR(#3030c0){(DeferredLightPixelSh...
-- COLOR(#30c030){動的ライトの計算。キャストシャドウもこ...
GetDynamicLighting COLOR(#3030c0){(DeferredLightingCommon...
--- COLOR(#30c030){シェーディングの計算}
SurfaceShading COLOR(#3030c0){(ShadingModels.usf)}
** Forward Shading [#q4fa7cd0]
- COLOR(#30c030){シェーディング}
FPixelShaderInOut_MainPS COLOR(#3030c0){(BasePassPixelSha...
-- COLOR(#30c030){ライトの数だけ回して計算する}
GetForwardDirectLighting COLOR(#3030c0){(ForwardLightingC...
--- COLOR(#30c030){GBuffer構造体への書き込みをしてDeferre...
--- COLOR(#30c030){動的ライトの計算。キャストシャドウもこ...
GetDynamicLighting COLOR(#3030c0){(DeferredLightingCommon...
https://twitter.com/com04/status/877511284354277381
* 動的影生成 [#zcab6479]
** メモ [#r54d1d4a]
Shadow変数が影の強さ。0.0 - 影
→FadedShadow変数フェード付き
→OutColor変数に最終出力。
OutColor.r値のみ参照されているっぽい。
MODULATED_SHADOWSがmobile時のみ使える?
Engine\Source\Runtime\Renderer\Private\ShadowRendering.cpp
https://docs.unrealengine.com/latest/JPN/Platforms/Mobile...
- 描画元
FDeferredShadingSceneRenderer::RenderLights (Engine\Sour...
FDeferredShadingSceneRenderer::RenderShadowProjections...
FSceneRenderer::RenderShadowProjections (Engine\Sour...
- モバイル用
FMobileSceneRenderer::Render (Engine\Source\Runtime\Rende...
FMobileSceneRenderer::RenderModulatedShadowProjections...
FSceneRenderer::RenderShadowProjections (Engine\Sour...
* Indirect Light、Sky Lightの計算 - GetPrecomputedIndirec...
- COLOR(#3030c0){(BasePassPixelShader.usf)}
GBufferのMRT[0]に書き出される
* 動的ライト、キャストシャドウの計算 - GetDynamicLighting...
- COLOR(#3030c0){(DeferredLightingCommon.usf)}
記述が無い場合は下記設定でスクリーンショット
- マテリアル
-- BaseColor : 1.0, 1.0, 1.0
-- Metalic : 0.0
-- Roughtness 1.0
-- Specular : 0.5
- ライト
-- ディフューズライト1灯のみ
-- Intencity : 6.0
-- Color : 0.0, 1.0, 0.0
** 基本パラメーター [#l94a890a]
- Default Lit
&ref(Rendering-DefaultLit.png,,50%);
- GBuffer.DiffuseColor
&ref(Rendering-GBuffer.DeffuseColor.png,,50%);
- GBuffer.SpecularColor
&ref(Rendering-GBuffer.SpecularColor.png,,50%);
- LightColor
&ref(Rendering-LightColor.png,,50%);
** ライティングフロー [#x1bcecfc]
SurfaceShading
↓
LightAccumulator_Add
** キャストシャドウ [#cb677cf5]
SurfaceShadow変数に格納。SurfaceAttenuation変数に受け継が...
1.0で影無し。
*** SurfaceLighting [#odb01557]
#code(C,nonumber,nomenu){{
float3 SurfaceLighting = SurfaceShading(GBuffer, LobeRoug...
}}
&ref(Rendering-SurfaceLighting.png,,50%);
- SurfaceShadingの中身
#code(C,nonumber,nomenu){{
float3 StandardShading( float3 DiffuseColor, float3 Specu...
{
float3 H = normalize(V + L);
float NoL = saturate( dot(N, L) );
float NoV = saturate( abs( dot(N, V) ) + 1e-5 );
float NoH = saturate( dot(N, H) );
float VoH = saturate( dot(V, H) );
// Generalized microfacet specular
float D = D_GGX( LobeRoughness[1], NoH ) * LobeEnergy[1];
float Vis = Vis_SmithJointApprox( LobeRoughness[1], NoV,...
float3 F = F_Schlick( SpecularColor, VoH );
float3 Diffuse = Diffuse_Lambert( DiffuseColor );
//float3 Diffuse = Diffuse_Burley( DiffuseColor, LobeRou...
//float3 Diffuse = Diffuse_OrenNayar( DiffuseColor, Lobe...
return Diffuse * LobeEnergy[2] + (D * Vis) * F;
}
}}
++ Diffuse * LobeEnergy[2] = x
&ref(Rendering-SurfaceLighting-Diffuse.png,,50%); * &ref(...
++ (D * Vis) * F = y
(&ref(Rendering-SurfaceLighting-D(Roughness_1.0).png,,50%...
++ x + y = return
&ref(Rendering-SurfaceLighting-Diffuse-x-LobeEnegy[2].png...
----
-- Roughness = 0.0の時
++ Diffuse * LobeEnergy[2] = x
&ref(Rendering-SurfaceLighting-Diffuse.png,,50%); * &ref(...
++ (D * Vis) * F = y
(&ref(Rendering-SurfaceLighting-D(Roughness_0.0).png,,50%...
++ x + y = return
&ref(Rendering-SurfaceLighting-Diffuse-x-LobeEnegy[2](Rou...
-- マテリアルのBaseColorを調整してみるとSurface Lighting...
&ref(Rendering-SurfaceLighting-Roughness_0.0_Adjust.png,,...
*** ライトカラーとの合成 [#j09d29bc]
#code(C,nonumber,nomenu){{
LightAccumulator_Add(LightAccumulator, SurfaceLighting, (...
}}
- (NoL * SurfaceAttenuation) =
&ref(Rendering-NoL.png,,50%); * &ref(Rendering-SurfaceAtt...
- LightColor * (NoL * SurfaceAttenuation) = x
&ref(Rendering-LightColor.png,,50%); * &ref(Rendering-NoL...
- SurfaceLighting * x =
&ref(Rendering-SurfaceLighting.png,,50%); * &ref(Renderin...
----
- Roughness = 0.0の時
+ SurfaceLighting * x =
&ref(Rendering-SurfaceLighting(Roughness_0.0).png,,50%); ...
終了行:
#contents
----
UE4.15.1で検証
- G-Bufferについてはコチラを参照
[[エンジン改造-Gバッファの拡張]]
* 参考 [#m33dd291]
- グラフィック プログラミングの概要 - Unreal Engine Docum...
https://docs.unrealengine.com/latest/JPN/Programming/Rend...
* レンダリングの流れ [#ba1608ac]
** Deferred Shaing [#l9749b95]
- COLOR(#30c030){動的影生成}
Main COLOR(#3030c0){(ShadowProjectionPixelShader.usf)}
- COLOR(#30c030){GBufferへの書き込み}
MainPS COLOR(#3030c0){(PixelShaderOutputCommon.usf)}
FPixelShaderInOut_MainPS COLOR(#3030c0){(BasePassPixel...
-- COLOR(#30c030){Indirect Light、Sky Lightの計算}
GetPrecomputedIndirectLightingAndSkyLight COLOR(#3030c0){...
---COLOR(#30c030){Sky Lightの計算}
GetSkyLighting COLOR(#3030c0){(BasePassPixelShader.usf)}
- COLOR(#30c030){Gバッファからシェーディング}
DirectionalPixelMain COLOR(#3030c0){(DeferredLightPixelSh...
-- COLOR(#30c030){動的ライトの計算。キャストシャドウもこ...
GetDynamicLighting COLOR(#3030c0){(DeferredLightingCommon...
--- COLOR(#30c030){シェーディングの計算}
SurfaceShading COLOR(#3030c0){(ShadingModels.usf)}
** Forward Shading [#q4fa7cd0]
- COLOR(#30c030){シェーディング}
FPixelShaderInOut_MainPS COLOR(#3030c0){(BasePassPixelSha...
-- COLOR(#30c030){ライトの数だけ回して計算する}
GetForwardDirectLighting COLOR(#3030c0){(ForwardLightingC...
--- COLOR(#30c030){GBuffer構造体への書き込みをしてDeferre...
--- COLOR(#30c030){動的ライトの計算。キャストシャドウもこ...
GetDynamicLighting COLOR(#3030c0){(DeferredLightingCommon...
https://twitter.com/com04/status/877511284354277381
* 動的影生成 [#zcab6479]
** メモ [#r54d1d4a]
Shadow変数が影の強さ。0.0 - 影
→FadedShadow変数フェード付き
→OutColor変数に最終出力。
OutColor.r値のみ参照されているっぽい。
MODULATED_SHADOWSがmobile時のみ使える?
Engine\Source\Runtime\Renderer\Private\ShadowRendering.cpp
https://docs.unrealengine.com/latest/JPN/Platforms/Mobile...
- 描画元
FDeferredShadingSceneRenderer::RenderLights (Engine\Sour...
FDeferredShadingSceneRenderer::RenderShadowProjections...
FSceneRenderer::RenderShadowProjections (Engine\Sour...
- モバイル用
FMobileSceneRenderer::Render (Engine\Source\Runtime\Rende...
FMobileSceneRenderer::RenderModulatedShadowProjections...
FSceneRenderer::RenderShadowProjections (Engine\Sour...
* Indirect Light、Sky Lightの計算 - GetPrecomputedIndirec...
- COLOR(#3030c0){(BasePassPixelShader.usf)}
GBufferのMRT[0]に書き出される
* 動的ライト、キャストシャドウの計算 - GetDynamicLighting...
- COLOR(#3030c0){(DeferredLightingCommon.usf)}
記述が無い場合は下記設定でスクリーンショット
- マテリアル
-- BaseColor : 1.0, 1.0, 1.0
-- Metalic : 0.0
-- Roughtness 1.0
-- Specular : 0.5
- ライト
-- ディフューズライト1灯のみ
-- Intencity : 6.0
-- Color : 0.0, 1.0, 0.0
** 基本パラメーター [#l94a890a]
- Default Lit
&ref(Rendering-DefaultLit.png,,50%);
- GBuffer.DiffuseColor
&ref(Rendering-GBuffer.DeffuseColor.png,,50%);
- GBuffer.SpecularColor
&ref(Rendering-GBuffer.SpecularColor.png,,50%);
- LightColor
&ref(Rendering-LightColor.png,,50%);
** ライティングフロー [#x1bcecfc]
SurfaceShading
↓
LightAccumulator_Add
** キャストシャドウ [#cb677cf5]
SurfaceShadow変数に格納。SurfaceAttenuation変数に受け継が...
1.0で影無し。
*** SurfaceLighting [#odb01557]
#code(C,nonumber,nomenu){{
float3 SurfaceLighting = SurfaceShading(GBuffer, LobeRoug...
}}
&ref(Rendering-SurfaceLighting.png,,50%);
- SurfaceShadingの中身
#code(C,nonumber,nomenu){{
float3 StandardShading( float3 DiffuseColor, float3 Specu...
{
float3 H = normalize(V + L);
float NoL = saturate( dot(N, L) );
float NoV = saturate( abs( dot(N, V) ) + 1e-5 );
float NoH = saturate( dot(N, H) );
float VoH = saturate( dot(V, H) );
// Generalized microfacet specular
float D = D_GGX( LobeRoughness[1], NoH ) * LobeEnergy[1];
float Vis = Vis_SmithJointApprox( LobeRoughness[1], NoV,...
float3 F = F_Schlick( SpecularColor, VoH );
float3 Diffuse = Diffuse_Lambert( DiffuseColor );
//float3 Diffuse = Diffuse_Burley( DiffuseColor, LobeRou...
//float3 Diffuse = Diffuse_OrenNayar( DiffuseColor, Lobe...
return Diffuse * LobeEnergy[2] + (D * Vis) * F;
}
}}
++ Diffuse * LobeEnergy[2] = x
&ref(Rendering-SurfaceLighting-Diffuse.png,,50%); * &ref(...
++ (D * Vis) * F = y
(&ref(Rendering-SurfaceLighting-D(Roughness_1.0).png,,50%...
++ x + y = return
&ref(Rendering-SurfaceLighting-Diffuse-x-LobeEnegy[2].png...
----
-- Roughness = 0.0の時
++ Diffuse * LobeEnergy[2] = x
&ref(Rendering-SurfaceLighting-Diffuse.png,,50%); * &ref(...
++ (D * Vis) * F = y
(&ref(Rendering-SurfaceLighting-D(Roughness_0.0).png,,50%...
++ x + y = return
&ref(Rendering-SurfaceLighting-Diffuse-x-LobeEnegy[2](Rou...
-- マテリアルのBaseColorを調整してみるとSurface Lighting...
&ref(Rendering-SurfaceLighting-Roughness_0.0_Adjust.png,,...
*** ライトカラーとの合成 [#j09d29bc]
#code(C,nonumber,nomenu){{
LightAccumulator_Add(LightAccumulator, SurfaceLighting, (...
}}
- (NoL * SurfaceAttenuation) =
&ref(Rendering-NoL.png,,50%); * &ref(Rendering-SurfaceAtt...
- LightColor * (NoL * SurfaceAttenuation) = x
&ref(Rendering-LightColor.png,,50%); * &ref(Rendering-NoL...
- SurfaceLighting * x =
&ref(Rendering-SurfaceLighting.png,,50%); * &ref(Renderin...
----
- Roughness = 0.0の時
+ SurfaceLighting * x =
&ref(Rendering-SurfaceLighting(Roughness_0.0).png,,50%); ...
ページ名: