PI-CHO ENBを調整する

環境構築

バージョンアップのたびに調整している内容のまとめです。

明るすぎるのを何とかする

光源まわりが強すぎるので眩しくて目が疲れやすくなってしまいます。

ブライトネスやLUTでの調整は全体的に変化するため不必要に暗くなってしまいます。

ENVIRONMENTのIntensityを下げるといいようです。

Weatherごとに用意されているため、各WeatherのIntensityを調整します。

項目名詳細
DirectLightingIntensity太陽光などで地面の辺りが眩しいのが改善します。
AmbientLightingIntensity空中や草などが眩しいのが改善します。
PointLightingIntensityたいまつなどが眩しいのが改善します。

例えばDirectLightingIntensityの場合、以下のように全部で8項目あるようです。

[ENVIRONMENT]
DirectLightingIntensityDawn=0.1155
DirectLightingIntensitySunrise=0.1815
DirectLightingIntensityDay=0.3135
DirectLightingIntensitySunset=0.33
DirectLightingIntensityDusk=0.1815
DirectLightingIntensityNight=0.099
DirectLightingIntensityInteriorDay=0.33
DirectLightingIntensityInteriorNight=0.33

肌がテカテカするのを何とかする

WeatherのSpecularAmountMultiplier*を下げるといいようです。

[OBJECT]
SpecularAmountMultiplierDawn=0.3
SpecularAmountMultiplierSunrise=0.3
SpecularAmountMultiplierDay=0.3
SpecularAmountMultiplierSunset=0.3
SpecularAmountMultiplierDusk=0.3
SpecularAmountMultiplierNight=0.3
SpecularAmountMultiplierInteriorDay=0.3
SpecularAmountMultiplierInteriorNight=0.3

SpecularAmountMultiplierは色々なセクションにあり、どれがどう作用するのかわかりませんが、肌はOBJECTでないとダメだったような気がします。このあたりを詳しく解説してくださっている【Skyrim SE】ENB設定でヌルテカ 調整すべき項目とは(てんぱーれす)というサイトがあります。

大量の設定ファイルをどう編集するか

PHPで一括編集するようにしてみました。

reduce_env_lighting.php (php)

<?php
$basedir = 'E:\Steam\steamapps\common\Skyrim Special Edition\enbseries';
$weatherdir = 'Weather';

try {
    $dir = $basedir . '\\' . $weatherdir;

    if ( is_dir($dir) ) {
        parse_dir($dir);
    } else if ( is_dir($basedir) ) {
        parse_dir($basedir);
    } else {
        throw new Exception('enb preset dir not found');
    }
} catch (Exception $e) {
    echo $e->GetMessage() . PHP_EOL;
}

function parse_dir($dir)
{
    $dh = opendir($dir);

    if ( !$dh ) {
        throw new Exception('could not open dir - ' . $dir);
    }

    while ( $file = readdir($dh) ) {
        if ( !preg_match('/\.ini$/', $file) ) {
            continue;
        }

        $path = $dir . '\\' . $file;
        modify_ini($path);
    }

    closedir($dh);
}

function modify_ini($path)
{
    echo $path . PHP_EOL;

    $buf = file($path);

    if ( !count($buf) ) {
        return;
    }

    $cnt = 0;

    $is_in_section = false;

    foreach ($buf as &$str) {
        if ( $is_in_section ) {
            if ( strpos($str, '[') !== false ) {
                break;
            }

            if ( preg_match('/^(DirectLightingIntensity[^=]+)=([0-9\.]+)/', $str, $matches) ) {
                //echo $matches[1] . ' = ' . $matches[2] . PHP_EOL;
                $name = $matches[1];
                $value = $matches[2];

                if ($value >= 0.3) {
                    $value_new = $value * 0.33;
                    printf("%s: %s => %s" . PHP_EOL, $name, $value, $value_new);
                    $str = $name . '=' . $value_new . PHP_EOL;
                    $cnt++;
                } else if ($value >= 0.2) {
                    $value_new = $value * 0.5;
                    printf("%s: %s => %s" . PHP_EOL, $name, $value, $value_new);
                    $str = $name . '=' . $value_new . PHP_EOL;
                    $cnt++;
                }
            }
        } else {
            if ( strpos($str, '[ENVIRONMENT]') !== false ) {
                $is_in_section = true;
            }
        }
    }

    $is_in_section = false;

    foreach ($buf as &$str) {
        if ( $is_in_section ) {
            if ( strpos($str, '[') !== false ) {
                break;
            }

            if ( preg_match('/^(SpecularAmountMultiplier[^=]+)=([0-9\.]+)/', $str, $matches) ) {
                //echo $matches[1] . ' = ' . $matches[2] . PHP_EOL;
                $name = $matches[1];
                $value = $matches[2];

                if ($value != 0.3) {
                    $value_new = 0.3;
                    printf("%s: %s => %s" . PHP_EOL, $name, $value, $value_new);
                    $str = $name . '=' . $value_new . PHP_EOL;
                    $cnt++;
                }
            }
        } else {
            if ( strpos($str, '[OBJECT]') !== false ) {
                $is_in_section = true;
            }
        }
    }

    if ( $cnt >= 1 ) {
        write_ini($path, $buf);
    }
}

function write_ini($path, $buf)
{
    $fp = fopen($path, 'w');

    if ( !$fp ) {
        return;
    }

    foreach ($buf as $str) {
        fputs($fp, $str);
    }

    fclose($fp);
}

DirectLightingIntensityは現在の値から33%に、SpecularAmountMultiplierは0.3に固定します。

タイトルとURLをコピーしました