UE4:ver.4.19.0


2018-04-10_15h06_00.png
2018-04-10_19h13_22.png

まだデフォルトのLUTでもON/OFFで若干色味が変わってしまってるっぽい?

テストしたマテリアル手順

  1. LUTテクスチャのFilterを “Tri-linear” に
  2. PostProcessMateiralを “Before Tonemapping” に
  3. LUTテクスチャの設定を下記に
    1. Filterを “Tri-linear” に
    2. Texture Groupを “ColorLookupTable” に
  4. Mateiralの設定を下記に
    1. Mateiral Domainを “Post Process” に
    2. Blendable Locatinを “Before Tonemapping” に
  5. ノードを下記に
    LUTMaterial.png
  6. Customノードはこんな感じ
    #spanend
    #spanadd
    static const float LUTSize = 16;
    #spanend
    
    #spanadd
    #if POST_PROCESS_MATERIAL
    #spanend
    
    #spanadd
    // ColorLookupTable
    #spanend
    #spanadd
    {
    #spanend
    #spanadd
    
    #spanend
    #spanadd
    
    #spanend
    #spanadd
    	// sRGBToLinear
    #spanend
    #spanadd
    	{
    #spanend
    #spanadd
    		LinearColor = max(6.10352e-5, LinearColor); // minimum positive non-denormal (fixes black problem on DX11 AMD and NV)
    #spanend
    #spanadd
    		LinearColor = LinearColor > 0.04045 ? pow( LinearColor * (1.0 / 1.055) + 0.0521327, 2.4 ) : LinearColor * (1.0 / 12.92);
    #spanend
    #spanadd
    	}
    #spanend
    #spanadd
    	
    #spanend
    #spanadd
    	float3 LUTEncodedColor;
    #spanend
    #spanadd
    #if 0 // if( r.HDR.Display.OutputDevice >= 3 )
    #spanend
    #spanadd
    	
    #spanend
    #spanadd
    	// LinearToST2084
    #spanend
    #spanadd
    	{
    #spanend
    #spanadd
    		const float m1 = 0.1593017578125; // = 2610. / 4096. * .25;
    #spanend
    #spanadd
    		const float m2 = 78.84375; // = 2523. / 4096. *  128;
    #spanend
    #spanadd
    		const float c1 = 0.8359375; // = 2392. / 4096. * 32 - 2413./4096.*32 + 1;
    #spanend
    #spanadd
    		const float c2 = 18.8515625; // = 2413. / 4096. * 32;
    #spanend
    #spanadd
    		const float c3 = 18.6875; // = 2392. / 4096. * 32;
    #spanend
    #spanadd
    		const float C = 10000.;
    #spanend
    #spanadd
    
    #spanend
    #spanadd
    		float3 L = LinearColor/C;
    #spanend
    #spanadd
    		float3 Lm = pow(L, m1);
    #spanend
    #spanadd
    		float3 N1 = ( c1 + c2 * Lm );
    #spanend
    #spanadd
    		float3 N2 = ( 1.0 + c3 * Lm );
    #spanend
    #spanadd
    		float3 N = N1 * rcp(N2);
    #spanend
    #spanadd
    		float3 P = pow( N, m2 );
    #spanend
    #spanadd
    		
    #spanend
    #spanadd
    		LUTEncodedColor = P;
    #spanend
    #spanadd
    	}
    #spanend
    #spanadd
    #else
    #spanend
    #spanadd
    	 float LinearRange = 14;
    #spanend
    #spanadd
    	 float LinearGrey = 0.18;
    #spanend
    #spanadd
    	 float ExposureGrey = 444;
    #spanend
    #spanadd
    	 float3 Lin;
    #spanend
    #spanadd
    	 // LogToLin(0)
    #spanend
    #spanadd
    	 {
    #spanend
    #spanadd
    		Lin = exp2( ( float3(0,0,0) - ExposureGrey / 1023.0 ) * LinearRange ) * LinearGrey;
    #spanend
    #spanadd
    	 }
    #spanend
    #spanadd
    
    #spanend
    #spanadd
    	// LinToLog
    #spanend
    #spanadd
    	{
    #spanend
    #spanadd
    		
    #spanend
    #spanadd
    		// Using stripped down, 'pure log', formula. Parameterized by grey points and dynamic range covered.
    #spanend
    #spanadd
    		float3 LogColor = log2(LinearColor + Lin) / LinearRange - log2(LinearGrey) / LinearRange + ExposureGrey / 1023.0;	// scalar: 3log2 3mad
    #spanend
    #spanadd
    		//float3 LogColor = (log2(LinearColor) - log2(LinearGrey)) / LinearRange + ExposureGrey / 1023.0;
    #spanend
    #spanadd
    		//float3 LogColor = log2( LinearColor / LinearGrey ) / LinearRange + ExposureGrey / 1023.0;
    #spanend
    #spanadd
    		//float3 LogColor = (0.432699 * log10(0.5 * LinearColor + 0.037584) + 0.616596) + 0.03;	// SLog
    #spanend
    #spanadd
    		//float3 LogColor = ( 300 * log10( LinearColor * (1 - .0108) + .0108 ) + 685 ) / 1023;	// Cineon
    #spanend
    #spanadd
    		LogColor = saturate( LogColor );
    #spanend
    #spanadd
    		
    #spanend
    #spanadd
    		LUTEncodedColor = LogColor;
    #spanend
    #spanadd
    	}
    #spanend
    #spanadd
    #endif
    #spanend
    #spanadd
    	
    #spanend
    #spanadd
    	
    #spanend
    #spanadd
    	float3 UVW = LUTEncodedColor * ((LUTSize - 1) / LUTSize) + (0.5f / LUTSize);
    #spanend
    #spanadd
    	
    #spanend
    #spanadd
    	float3 OutputColor = UnwrappedTexture3DSample( TextureLUT, TextureLUTSampler, UVW, LUTSize ).rgb;
    #spanend
    #spanadd
    	OutputColor = OutputColor * 1.05;
    #spanend
    #spanadd
    	
    #spanend
    #spanadd
    	
    #spanend
    #spanadd
    	// sRGBToLinear
    #spanend
    #spanadd
    	{
    #spanend
    #spanadd
    		// OutputColor = max(6.10352e-5, OutputColor); // minimum positive non-denormal (fixes black problem on DX11 AMD and NV)
    #spanend
    #spanadd
    		// OutputColor = OutputColor > 0.04045 ? pow( OutputColor * (1.0 / 1.055) + 0.0521327, 2.4 ) : OutputColor * (1.0 / 12.92);
    #spanend
    #spanadd
    	}
    #spanend
    #spanadd
    
    #spanend
    #spanadd
    
    #spanend
    #spanadd
    	return OutputColor;
    #spanend
    #spanadd
    }
    #spanend
    #spanadd
    #else
    #spanend
    #spanadd
    return float3(0,0,0);
    #spanend
    #spanadd
    #endif
    #spanend
    #spanadd
    

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