UE4.15.1で検証

参考

メモ

  • MSM_MAX(SHADINGMODELID_MASK)は最大16。
    シェーダー内で0xf(SHADINGMODELID_MASK)でマスクしている。
    他の変数と合わせて、8bit使用。
    その8bitをGバッファの1変数に書き込んでいるのでMSM_MAXは16が限界。

やってみた

  1. Engine\Source\Runtime\Engine\Classes\Engine\EngineTypes.h
     
     
     
    
    #spanend
     MSM_Eye                    UMETA(DisplayName="Eye"),
    #spanadd

    の下に追加する。
     
     
     
     
     
     
    
    #spanend
     MSM_Cell                UMETA(DisplayName = "Cell"),
    #spandel
     
    #spanend
    #spanadd
  2. Engine\Source\Runtime\Engine\Private\Materials\MaterialShader.cpp
    1. FString GetShadingModelString(...)
       
       
       
      
      #spanend
       case MSM_Eye:                ShadingModelName = TEXT("MSM_Eye"); break;
      #spanadd

      の下に追加する。
       
       
       
      
      #spanend
       case MSM_Cell:                ShadingModelName = TEXT("MSM_Cell"); break;
      #spanadd
    2. void UpdateMaterialShaderCompilingStats(...)
       
       
       
      
      #spanend
       case MSM_TwoSidedFoliage:
      #spanadd

      の下に追加する
       
       
       
       
       
       
      
      #spanend
       case MSM_Cell:
      #spandel
       
      #spanend
      #spanadd
  3. Engine\Source\Runtime\Engine\Private\Materials\MaterialShared.cpp
    1. void FMaterial::SetupMaterialEnvironment(...)
       
       
       
      
      #spanend
       case MSM_Eye:                OutEnvironment.SetDefine(TEXT("MATERIAL_SHADINGMODEL_EYE"),                    TEXT("1")); break;
      #spanadd

      の下に追加分。シェーダー内でdefine定義される。
       
       
       
       
       
       
       
       
       
       
       
       
      
      #spanend
       case MSM_Cell:                OutEnvironment.SetDefine(TEXT("MATERIAL_SHADINGMODEL_CELL"),                TEXT("1")); break;
      #spandel
       
      #spanend
      #spandel
       
      #spanend
      #spandel
       
      #spanend
      #spanadd
  4. Engine\Shaders\DeferredShadingCommon.usf
    1. #define SHADINGMODELID_*
       
       
       
      
      #spanend
       #define SHADINGMODELID_EYE                    9
      #spanadd

      の下に追加。MSM_*と一致させる。
       
       
       
      
      #spanend
       #define SHADINGMODELID_CELL                    10
      #spanadd

      SHADINGMODELID_NUMも合わせて数値を更新する
  1. Engine\Shaders\BasePassPixelShader.usf
    1. FPixelShaderInOut_MainPS
       
       
       
      
      #spanend
       #elif MATERIAL_SHADINGMODEL_EYE
      #spanadd

      の下に新規作成したShading Model IDを繋げてGバッファへの出力を書いていく
  1. Engine\Shaders\ShadingModels.usf
    1. SurfaceShading
       
       
       
      
      #spanend
       switch( GBuffer.ShadingModelID )
      #spanadd

      に新しいShading Modelを追加
       
       
       
       
       
       
       
       
       
       
      
      #spanend
       case SHADINGMODELID_CELL:
           return CellShading( GBuffer.DiffuseColor, GBuffer.SpecularColor, GBuffer.CellD, LobeRoughness, LobeEnergy, L, V, N );
      #spandel
       
      #spanend
      #spandel
       
      #spanend
      #spanadd
  2. シェーディングを独自にする。
    1. Engine\Shaders\DeferredShadingCommon.usf
       
       
       
      
      #spanend
       GetDynamicLighting
      #spanadd

      でSurfaceShadingでシェーディング計算、LightAccumulator_Addで結果を加算したりする

    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS