Arduino Uno 3作目 255段階の調光LEDライト

v03_AnalogBrightnessLoopBtnState.ino


int LED = 9;
int BUTTON = 7;
int val=0;
int old_val=0;
int state=0;

int brightness=128;        //明るさ
unsigned long startTime=0; //いつ初めたか?
int i=0;

void setup(){
  pinMode(LED,OUTPUT);   //LEDが出力である
  pinMode(BUTTON,INPUT); //BUTTONが入力である 
}

void loop() {
  val = digitalRead(BUTTON);
  //変化があるか?
  if((val==HIGH)&&(old_val==LOW)){
      state=1-state;
      startTime=millis();
      delay(10);
      
  }
  //ボタンが押し続けられているか?
  if((val==HIGH)&&(old_val==HIGH)){
    //500ms以上押されているか?
    if(state==1 && (millis()-startTime)>500){
      brightness++;
      delay(10);
      if(brightness > 255){
        brightness=0;
      }
    }
  }
  
  old_val=val;
  
  if(state==1){
      analogWrite(LED, brightness);
  }else{
    analogWrite(LED, 0);
  }
}

Arduino Uno 2作目

ゆっくりついたり消えたりするFor Loop

これは簡単なのだが次に向けての序章


int LED = 9;
int i=0;

void setup(){
  pinMode(LED,OUTPUT);   //LEDが出力である 
}

void loop() {

    for(i=0;i<255;i++){
      analogWrite(LED, i);
      delay(10);
    }
     
           
    for(i=255;i>0;i--){
      analogWrite(LED, i);
      delay(10);
    } 

}

Arduino Uno とArduino 1.0.x IDE と Mac Book Airであそんだ。

Arduino UnoもMacBookAirも古いのでIDEはArduino 1.0.5を使った

https://www.arduino.cc/en/Main/OldSoftwareReleases#previous

Arduino 1.0.xThese packages are no longer supported by the development team.

1.0.5Windows
Windows Installer
MAC OS X
を使った

コードがこれ

//ボタンが押されている間 LEDを点灯
//#define LED 13 //LEDが接続されているピン
//#define BUTTON 7 //ボタンが接続されているピン
int LED = 13; //LEDが接続されているピン
int BUTTON = 7; //ボタンが接続されているピン
int val = 0; //入力ピンの状態がこの変数に保存される

void setup(){
  pinMode(LED,OUTPUT);   //LEDが出力である
  pinMode(BUTTON,INPUT); //BUTTONが入力である 
}

void loop() {
  val = digitalRead(BUTTON);
  if(val==HIGH){
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  }else{               // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  }
}

QtDesigner Pyside Qtab Resizable リサイズ可能な 可変 のタブ

短く書けばこれだ。

          <widget class="QTabWidget" name="tabWidget_1">
           <property name="currentIndex">
            <number>0</number>
           </property>
           <widget class="QWidget" name="tab_3">
            <attribute name="title">
             <string>Tab 1</string>
            </attribute>
            <layout class="QGridLayout" name="gridLayout_4">
             <item row="0" column="0">
              <widget class="QDateTimeEdit" name="dateTimeEdit_2"/>
             </item>
             <item row="1" column="0">
              <widget class="QDateTimeEdit" name="dateTimeEdit"/>
             </item>
            </layout>
           </widget>
           <widget class="QWidget" name="tab_4">
            <attribute name="title">
             <string>Tab 2</string>
            </attribute>
            <layout class="QGridLayout" name="gridLayout_5">
             <item row="0" column="0">
              <widget class="QCheckBox" name="checkBox_2">
               <property name="text">
                <string>CheckBox</string>
               </property>
              </widget>
             </item>
             <item row="1" column="0">
              <widget class="QCheckBox" name="checkBox">
               <property name="text">
                <string>CheckBox</string>
               </property>
              </widget>
             </item>
            </layout>
           </widget>
          </widget>

ファイルとして成立させるならこうだ。

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>1146</width>
    <height>794</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <layout class="QVBoxLayout" name="verticalLayout">
      <item>
       <layout class="QHBoxLayout" name="horizontalLayout">
        <item>
         <widget class="QGroupBox" name="groupBox">
          <property name="title">
           <string>GroupBox</string>
          </property>
          <layout class="QVBoxLayout" name="verticalLayout_9">
           <item>
            <layout class="QVBoxLayout" name="verticalLayout_6">
             <item>
              <widget class="QLabel" name="label_3">
               <property name="text">
                <string>TextLabel</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QLabel" name="label_4">
               <property name="text">
                <string>TextLabel</string>
               </property>
              </widget>
             </item>
            </layout>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </item>
      <item>
       <layout class="QHBoxLayout" name="horizontalLayout_2">
        <item>
         <widget class="QGroupBox" name="groupBox_2">
          <property name="title">
           <string>GroupBox</string>
          </property>
          <layout class="QVBoxLayout" name="verticalLayout_8">
           <item>
            <layout class="QVBoxLayout" name="verticalLayout_7">
             <item>
              <widget class="QLabel" name="label">
               <property name="text">
                <string>TextLabel</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QLabel" name="label_2">
               <property name="text">
                <string>TextLabel</string>
               </property>
              </widget>
             </item>
            </layout>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </item>
      <item>
       <layout class="QHBoxLayout" name="horizontalLayout_3">
        <item>
         <widget class="QGroupBox" name="groupBox_3">
          <property name="title">
           <string>GroupBox</string>
          </property>
          <layout class="QVBoxLayout" name="verticalLayout_3">
           <item>
            <layout class="QVBoxLayout" name="verticalLayout_4">
             <item>
              <widget class="QLabel" name="label_6">
               <property name="text">
                <string>TextLabel</string>
               </property>
              </widget>
             </item>
             <item>
              <layout class="QVBoxLayout" name="verticalLayout_5"/>
             </item>
             <item>
          <widget class="QTabWidget" name="tabWidget_1">
           <property name="currentIndex">
            <number>0</number>
           </property>
           <widget class="QWidget" name="tab_3">
            <attribute name="title">
             <string>Tab 1</string>
            </attribute>
            <layout class="QGridLayout" name="gridLayout_4">
             <item row="0" column="0">
              <widget class="QDateTimeEdit" name="dateTimeEdit_2"/>
             </item>
             <item row="1" column="0">
              <widget class="QDateTimeEdit" name="dateTimeEdit"/>
             </item>
            </layout>
           </widget>
           <widget class="QWidget" name="tab_4">
            <attribute name="title">
             <string>Tab 2</string>
            </attribute>
            <layout class="QGridLayout" name="gridLayout_5">
             <item row="0" column="0">
              <widget class="QCheckBox" name="checkBox_2">
               <property name="text">
                <string>CheckBox</string>
               </property>
              </widget>
             </item>
             <item row="1" column="0">
              <widget class="QCheckBox" name="checkBox">
               <property name="text">
                <string>CheckBox</string>
               </property>
              </widget>
             </item>
            </layout>
           </widget>
          </widget>
             </item>
             <item>
              <widget class="QLabel" name="label_5">
               <property name="text">
                <string>TextLabel</string>
               </property>
              </widget>
             </item>
            </layout>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </item>
     </layout>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>1146</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

元ネタはこちら

https://stackoverflow.com/questions/6221551/qtabwidget-refusing-to-auto-resize

テクスチャストリーミングのプールがバジェットが23Mibを超えています UE5

https://answers.unrealengine.com/questions/373397/texture-streaming-pool-over%E3%81%8B%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B.html

によると

コンソールコマンド『r.Streaming.PoolSize』を使用することにより、プールサイズ上限を引き上げることができるようです。これは一時的なものなので、永続的な設定が必要であればiniファイル内に記述しておく必要があります。

また

海外の掲示板で defaultscalability.ini 内のr.Streaming.PoolSizeを変更してみるやり方もあったので試していますが、 それ以降も続けて表示がでなくなるらしい。

Project\Saved\Temp\Win64\Engine\Config\BaseScalability.ini

307 line

r.Streaming.PoolSize=400

r.Streaming.PoolSize=800

にした




[ScalabilitySettings]
PerfIndexThresholds_ResolutionQuality="GPU 18 42 115"
PerfIndexThresholds_ViewDistanceQuality="Min 18 42 105"
PerfIndexThresholds_AntiAliasingQuality="GPU 18 42 115"
PerfIndexThresholds_ShadowQuality="Min 18 42 105"
PerfIndexThresholds_PostProcessQuality="GPU 18 42 115"
PerfIndexThresholds_TextureQuality="GPU 18 42 115"
PerfIndexThresholds_EffectsQuality="Min 18 42 105"
PerfIndexThresholds_FoliageQuality="GPU 18 42 115"
PerfIndexThresholds_ShadingQuality="GPU 18 42 115"

PerfIndexValues_ResolutionQuality="50 71 87 100 100"

[AntiAliasingQuality@0]
r.PostProcessAAQuality=0

[AntiAliasingQuality@1]
r.PostProcessAAQuality=2

[AntiAliasingQuality@2]
r.PostProcessAAQuality=3

[AntiAliasingQuality@3]
r.PostProcessAAQuality=4

[AntiAliasingQuality@Cine]
r.PostProcessAAQuality=6


[ViewDistanceQuality@0]
r.SkeletalMeshLODBias=2
r.ViewDistanceScale=0.4

[ViewDistanceQuality@1]
r.SkeletalMeshLODBias=1
r.ViewDistanceScale=0.6

[ViewDistanceQuality@2]
r.SkeletalMeshLODBias=0
r.ViewDistanceScale=0.8

[ViewDistanceQuality@3]
r.SkeletalMeshLODBias=0
r.ViewDistanceScale=1.0

[ViewDistanceQuality@Cine]
r.SkeletalMeshLODBias=0
r.ViewDistanceScale=10.0


[ShadowQuality@0]
r.LightFunctionQuality=0
r.ShadowQuality=0
r.Shadow.CSM.MaxCascades=1
r.Shadow.MaxResolution=512
r.Shadow.MaxCSMResolution=512
r.Shadow.RadiusThreshold=0.06
r.Shadow.DistanceScale=0.6
r.Shadow.CSM.TransitionScale=0
r.Shadow.PreShadowResolutionFactor=0.5
r.DistanceFieldShadowing=0
r.DistanceFieldAO=0
r.VolumetricFog=0
r.LightMaxDrawDistanceScale=0
r.CapsuleShadows=0

[ShadowQuality@1]
r.LightFunctionQuality=1
r.ShadowQuality=3
r.Shadow.CSM.MaxCascades=1
r.Shadow.MaxResolution=1024
r.Shadow.MaxCSMResolution=1024
r.Shadow.RadiusThreshold=0.05
r.Shadow.DistanceScale=0.7
r.Shadow.CSM.TransitionScale=0.25
r.Shadow.PreShadowResolutionFactor=0.5
r.DistanceFieldShadowing=0
r.DistanceFieldAO=0
r.VolumetricFog=0
r.LightMaxDrawDistanceScale=.5
r.CapsuleShadows=1

[ShadowQuality@2]
r.LightFunctionQuality=1
r.ShadowQuality=5
r.Shadow.CSM.MaxCascades=4
r.Shadow.MaxResolution=1024
r.Shadow.MaxCSMResolution=2048
r.Shadow.RadiusThreshold=0.04
r.Shadow.DistanceScale=0.85
r.Shadow.CSM.TransitionScale=0.8
r.Shadow.PreShadowResolutionFactor=0.5
r.DistanceFieldShadowing=1
r.DistanceFieldAO=1
r.AOQuality=1
r.VolumetricFog=1
r.VolumetricFog.GridPixelSize=16
r.VolumetricFog.GridSizeZ=64
r.VolumetricFog.HistoryMissSupersampleCount=4
r.LightMaxDrawDistanceScale=1
r.CapsuleShadows=1

[ShadowQuality@3]
r.LightFunctionQuality=1
r.ShadowQuality=5
r.Shadow.CSM.MaxCascades=10
r.Shadow.MaxResolution=2048
r.Shadow.MaxCSMResolution=2048
r.Shadow.RadiusThreshold=0.01
r.Shadow.DistanceScale=1.0
r.Shadow.CSM.TransitionScale=1.0
r.Shadow.PreShadowResolutionFactor=1.0
r.DistanceFieldShadowing=1
r.DistanceFieldAO=1
r.AOQuality=2
r.VolumetricFog=1
r.VolumetricFog.GridPixelSize=8
r.VolumetricFog.GridSizeZ=128
r.VolumetricFog.HistoryMissSupersampleCount=4
r.LightMaxDrawDistanceScale=1
r.CapsuleShadows=1

[ShadowQuality@Cine]
r.LightFunctionQuality=1
r.ShadowQuality=5
r.Shadow.CSM.MaxCascades=10
r.Shadow.MaxResolution=4096
r.Shadow.MaxCSMResolution=4096
r.Shadow.RadiusThreshold=0
r.Shadow.DistanceScale=1.0
r.Shadow.CSM.TransitionScale=1.0
r.Shadow.PreShadowResolutionFactor=1.0
r.DistanceFieldShadowing=1
r.DistanceFieldAO=1
r.AOQuality=2
r.VolumetricFog=1
r.VolumetricFog.GridPixelSize=4
r.VolumetricFog.GridSizeZ=128
r.VolumetricFog.HistoryMissSupersampleCount=16
r.LightMaxDrawDistanceScale=1
r.CapsuleShadows=1


[PostProcessQuality@0]
r.MotionBlurQuality=0
r.AmbientOcclusionMipLevelFactor=1.0
r.AmbientOcclusionMaxQuality=0
r.AmbientOcclusionLevels=0
r.AmbientOcclusionRadiusScale=1.2
r.DepthOfFieldQuality=0
r.RenderTargetPoolMin=300
r.LensFlareQuality=0
r.SceneColorFringeQuality=0
r.EyeAdaptationQuality=2
r.BloomQuality=4
r.FastBlurThreshold=0
r.Upscale.Quality=1
r.Tonemapper.GrainQuantization=0
r.LightShaftQuality=0
r.Filter.SizeScale=0.6
r.Tonemapper.Quality=0

[PostProcessQuality@1]
r.MotionBlurQuality=3
r.AmbientOcclusionMipLevelFactor=1.0
r.AmbientOcclusionMaxQuality=60
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.5
r.DepthOfFieldQuality=1
r.RenderTargetPoolMin=350
r.LensFlareQuality=0
r.SceneColorFringeQuality=0
r.EyeAdaptationQuality=2
r.BloomQuality=4
r.FastBlurThreshold=2
r.Upscale.Quality=2
r.Tonemapper.GrainQuantization=0
r.LightShaftQuality=0
r.Filter.SizeScale=0.7
r.Tonemapper.Quality=2

r.DOF.Gather.AccumulatorQuality=0        ; lower gathering accumulator quality
r.DOF.Gather.PostfilterMethod=2          ; Max3x3 postfilering method
r.DOF.Gather.EnableBokehSettings=0       ; no bokeh simulation when gathering
r.DOF.Gather.RingCount=3                 ; low number of samples when gathering
r.DOF.Scatter.ForegroundCompositing=0    ; no foreground scattering
r.DOF.Scatter.BackgroundCompositing=0    ; no foreground scattering
r.DOF.Recombine.Quality=0                ; no slight out of focus
r.DOF.TemporalAAQuality=0                ; faster temporal accumulation
r.DOF.Kernel.MaxForegroundRadius=0.006   ; required because low gathering and no scattering and not looking great at 1080p
r.DOF.Kernel.MaxBackgroundRadius=0.006   ; required because low gathering and no scattering and not looking great at 1080p

[PostProcessQuality@2]
r.MotionBlurQuality=3
r.AmbientOcclusionMipLevelFactor=0.6
r.AmbientOcclusionMaxQuality=100
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.5
r.DepthOfFieldQuality=2
r.RenderTargetPoolMin=400
r.LensFlareQuality=2
r.SceneColorFringeQuality=1
r.EyeAdaptationQuality=2
r.BloomQuality=5
r.FastBlurThreshold=3
r.Upscale.Quality=2
r.Tonemapper.GrainQuantization=1
r.LightShaftQuality=1
r.Filter.SizeScale=0.8
r.Tonemapper.Quality=5

r.DOF.Gather.AccumulatorQuality=0        ; lower gathering accumulator quality
r.DOF.Gather.PostfilterMethod=2          ; Max3x3 postfilering method
r.DOF.Gather.EnableBokehSettings=0       ; no bokeh simulation when gathering
r.DOF.Gather.RingCount=4                 ; medium number of samples when gathering
r.DOF.Scatter.ForegroundCompositing=1    ; additive foreground scattering
r.DOF.Scatter.BackgroundCompositing=1    ; no background occlusion
r.DOF.Scatter.EnableBokehSettings=0      ; no bokeh simulation when scattering
r.DOF.Scatter.MaxSpriteRatio=0.04        ; only a maximum of 4% of scattered bokeh
r.DOF.Recombine.Quality=0                ; no slight out of focus
r.DOF.TemporalAAQuality=0                ; faster temporal accumulation
r.DOF.Kernel.MaxForegroundRadius=0.012   ; required because of AccumulatorQuality=0
r.DOF.Kernel.MaxBackgroundRadius=0.012   ; required because of AccumulatorQuality=0

[PostProcessQuality@3]
r.MotionBlurQuality=4
r.AmbientOcclusionMipLevelFactor=0.4
r.AmbientOcclusionMaxQuality=100
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.0
r.DepthOfFieldQuality=2
r.RenderTargetPoolMin=400
r.LensFlareQuality=2
r.SceneColorFringeQuality=1
r.EyeAdaptationQuality=2
r.BloomQuality=5
r.FastBlurThreshold=100
r.Upscale.Quality=3
r.Tonemapper.GrainQuantization=1
r.LightShaftQuality=1
r.Filter.SizeScale=1
r.Tonemapper.Quality=5

r.DOF.Gather.AccumulatorQuality=1        ; higher gathering accumulator quality
r.DOF.Gather.PostfilterMethod=1          ; Median3x3 postfilering method
r.DOF.Gather.EnableBokehSettings=0       ; no bokeh simulation when gathering
r.DOF.Gather.RingCount=4                 ; medium number of samples when gathering
r.DOF.Scatter.ForegroundCompositing=1    ; additive foreground scattering
r.DOF.Scatter.BackgroundCompositing=2    ; additive background scattering
r.DOF.Scatter.EnableBokehSettings=1      ; bokeh simulation when scattering
r.DOF.Scatter.MaxSpriteRatio=0.1         ; only a maximum of 10% of scattered bokeh
r.DOF.Recombine.Quality=1                ; cheap slight out of focus
r.DOF.Recombine.EnableBokehSettings=0    ; no bokeh simulation on slight out of focus
r.DOF.TemporalAAQuality=1                ; more stable temporal accumulation
r.DOF.Kernel.MaxForegroundRadius=0.025
r.DOF.Kernel.MaxBackgroundRadius=0.025


[PostProcessQuality@Cine]
r.MotionBlurQuality=4
r.AmbientOcclusionMipLevelFactor=0.4
r.AmbientOcclusionMaxQuality=100
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.0
r.GTAO.Numangles=4
r.DepthOfFieldQuality=4
r.RenderTargetPoolMin=1000
r.LensFlareQuality=3
r.SceneColorFringeQuality=1
r.EyeAdaptationQuality=2
r.BloomQuality=5
r.FastBlurThreshold=100
r.Upscale.Quality=3
r.Tonemapper.GrainQuantization=1
r.LightShaftQuality=1
r.Filter.SizeScale=1
r.Tonemapper.Quality=5

r.DOF.Gather.AccumulatorQuality=1        ; higher gathering accumulator quality
r.DOF.Gather.PostfilterMethod=1          ; Median3x3 postfilering method
r.DOF.Gather.EnableBokehSettings=1       ; bokeh simulation when gathering
r.DOF.Gather.RingCount=5                 ; high number of samples when gathering
r.DOF.Scatter.ForegroundCompositing=1    ; additive foreground scattering
r.DOF.Scatter.BackgroundCompositing=2    ; background scattering occlusion
r.DOF.Scatter.EnableBokehSettings=1      ; no bokeh simulation when scattering
r.DOF.Scatter.MaxSpriteRatio=0.25        ; only a maximum of 10% of scattered bokeh
r.DOF.Recombine.Quality=2                ; highest slight out of focus
r.DOF.Recombine.EnableBokehSettings=1    ; bokeh simulation on slight out of focus
r.DOF.TemporalAAQuality=1                ; more stable temporal accumulation
r.DOF.Kernel.MaxForegroundRadius=0.025
r.DOF.Kernel.MaxBackgroundRadius=0.025




[TextureQuality@0]
r.Streaming.MipBias=16
r.Streaming.AmortizeCPUToGPUCopy=1
r.Streaming.MaxNumTexturesToStreamPerFrame=1
r.Streaming.Boost=0.3
r.MaxAnisotropy=0
r.VT.MaxAnisotropy=4
r.Streaming.LimitPoolSizeToVRAM=1
r.Streaming.PoolSize=400
r.Streaming.MaxEffectiveScreenSize=0

[TextureQuality@1]
r.Streaming.MipBias=1
r.Streaming.AmortizeCPUToGPUCopy=0
r.Streaming.MaxNumTexturesToStreamPerFrame=0
r.Streaming.Boost=1
r.MaxAnisotropy=2
r.VT.MaxAnisotropy=4
r.Streaming.LimitPoolSizeToVRAM=1
r.Streaming.PoolSize=600
r.Streaming.MaxEffectiveScreenSize=0

[TextureQuality@2]
r.Streaming.MipBias=0
r.Streaming.AmortizeCPUToGPUCopy=0
r.Streaming.MaxNumTexturesToStreamPerFrame=0
r.Streaming.Boost=1
r.MaxAnisotropy=4
r.VT.MaxAnisotropy=8
r.Streaming.LimitPoolSizeToVRAM=1
r.Streaming.PoolSize=800
r.Streaming.MaxEffectiveScreenSize=0

[TextureQuality@3]
r.Streaming.MipBias=0
r.Streaming.AmortizeCPUToGPUCopy=0
r.Streaming.MaxNumTexturesToStreamPerFrame=0
r.Streaming.Boost=1
r.MaxAnisotropy=8
r.VT.MaxAnisotropy=8
r.Streaming.LimitPoolSizeToVRAM=0
r.Streaming.PoolSize=1000
r.Streaming.MaxEffectiveScreenSize=0

[TextureQuality@Cine]
r.Streaming.MipBias=0
r.Streaming.AmortizeCPUToGPUCopy=0
r.Streaming.MaxNumTexturesToStreamPerFrame=0
r.Streaming.Boost=1
r.MaxAnisotropy=8
r.VT.MaxAnisotropy=8
r.Streaming.LimitPoolSizeToVRAM=0
r.Streaming.PoolSize=3000
r.Streaming.MaxEffectiveScreenSize=0


[EffectsQuality@0]
r.TranslucencyLightingVolumeDim=24
r.RefractionQuality=0
r.SSR.Quality=0
r.SSR.HalfResSceneColor=1
r.SceneColorFormat=3
r.DetailMode=0
r.TranslucencyVolumeBlur=0
r.MaterialQualityLevel=0 ; Low quality
r.AnisotropicMaterials=0
r.SSS.Scale=0
r.SSS.SampleSet=0
r.SSS.Quality=0
r.SSS.HalfRes=1
r.SSGI.Quality=0
r.EmitterSpawnRateScale=0.125
r.ParticleLightQuality=0
r.SkyAtmosphere.AerialPerspectiveLUT.FastApplyOnOpaque=1 ; Always have FastSkyLUT 1 in this case to avoid wrong sky
r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice=1
r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution=8.0
r.SkyAtmosphere.FastSkyLUT=1
r.SkyAtmosphere.FastSkyLUT.SampleCountMin=2.0
r.SkyAtmosphere.FastSkyLUT.SampleCountMax=16.0
r.SkyAtmosphere.SampleCountMin=2.0
r.SkyAtmosphere.SampleCountMax=16.0
r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat=1
r.SkyAtmosphere.TransmittanceLUT.SampleCount=10.0
r.SkyAtmosphere.MultiScatteringLUT.SampleCount=15.0
r.SkyLight.RealTimeReflectionCapture=0
fx.Niagara.QualityLevel=0

[EffectsQuality@1]
r.TranslucencyLightingVolumeDim=32
r.RefractionQuality=0
r.SSR.Quality=0
r.SSR.HalfResSceneColor=1
r.SceneColorFormat=3
r.DetailMode=1
r.TranslucencyVolumeBlur=0
r.MaterialQualityLevel=2 ; Medium quality
r.AnisotropicMaterials=0
r.SSS.Scale=0.75
r.SSS.SampleSet=0
r.SSS.Quality=0
r.SSS.HalfRes=1
r.SSGI.Quality=1
r.EmitterSpawnRateScale=0.25
r.ParticleLightQuality=0
r.SkyAtmosphere.AerialPerspectiveLUT.FastApplyOnOpaque=1 ; Always have FastSkyLUT 1 in this case to avoid wrong sky
r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice=1
r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution=16.0
r.SkyAtmosphere.FastSkyLUT=1
r.SkyAtmosphere.FastSkyLUT.SampleCountMin=4.0
r.SkyAtmosphere.FastSkyLUT.SampleCountMax=32.0
r.SkyAtmosphere.SampleCountMin=4.0
r.SkyAtmosphere.SampleCountMax=32.0
r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat=0
r.SkyAtmosphere.TransmittanceLUT.SampleCount=10.0
r.SkyAtmosphere.MultiScatteringLUT.SampleCount=15.0
r.SkyLight.RealTimeReflectionCapture=0
fx.Niagara.QualityLevel=1

[EffectsQuality@2]
r.TranslucencyLightingVolumeDim=48
r.RefractionQuality=2
r.SSR.Quality=2
r.SSR.HalfResSceneColor=1
r.SceneColorFormat=3
r.DetailMode=1
r.TranslucencyVolumeBlur=1
r.MaterialQualityLevel=1 ; High quality
r.AnisotropicMaterials=1
r.SSS.Scale=1
r.SSS.SampleSet=1
r.SSS.Quality=-1
r.SSS.HalfRes=1
r.SSGI.Quality=2
r.EmitterSpawnRateScale=0.5
r.ParticleLightQuality=1
r.SkyAtmosphere.AerialPerspectiveLUT.FastApplyOnOpaque=1 ; Always have FastSkyLUT 1 in this case to avoid wrong sky
r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice=2
r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution=16.0
r.SkyAtmosphere.FastSkyLUT=1
r.SkyAtmosphere.FastSkyLUT.SampleCountMin=4.0
r.SkyAtmosphere.FastSkyLUT.SampleCountMax=64.0
r.SkyAtmosphere.SampleCountMin=4.0
r.SkyAtmosphere.SampleCountMax=64.0
r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat=0
r.SkyAtmosphere.TransmittanceLUT.SampleCount=10.0
r.SkyAtmosphere.MultiScatteringLUT.SampleCount=15.0
fx.Niagara.QualityLevel=2

[EffectsQuality@3]
r.TranslucencyLightingVolumeDim=64
r.RefractionQuality=2
r.SSR.Quality=3
r.SSR.HalfResSceneColor=0
r.SceneColorFormat=4
r.DetailMode=2
r.TranslucencyVolumeBlur=1
r.MaterialQualityLevel=1 ; High quality
r.AnisotropicMaterials=1
r.SSS.Scale=1
r.SSS.SampleSet=2
r.SSS.Quality=1
r.SSS.HalfRes=0
r.SSGI.Quality=3
r.EmitterSpawnRateScale=1.0
r.ParticleLightQuality=2
r.SkyAtmosphere.AerialPerspectiveLUT.FastApplyOnOpaque=1 ; Always have FastSkyLUT 1 in this case to avoid wrong sky
r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice=4
r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution=16.0
r.SkyAtmosphere.FastSkyLUT=1
r.SkyAtmosphere.FastSkyLUT.SampleCountMin=4.0
r.SkyAtmosphere.FastSkyLUT.SampleCountMax=128.0
r.SkyAtmosphere.SampleCountMin=4.0
r.SkyAtmosphere.SampleCountMax=128.0
r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat=0
r.SkyAtmosphere.TransmittanceLUT.SampleCount=10.0
r.SkyAtmosphere.MultiScatteringLUT.SampleCount=15.0
fx.Niagara.QualityLevel=3

[EffectsQuality@Cine]
r.TranslucencyLightingVolumeDim=64
r.RefractionQuality=2
r.SSR.Quality=4
r.SSR.HalfResSceneColor=0
r.SceneColorFormat=4
r.DetailMode=2
r.TranslucencyVolumeBlur=1
r.MaterialQualityLevel=1 ; High quality
r.AnisotropicMaterials=1
r.SSS.Scale=1
r.SSS.SampleSet=2
r.SSS.Quality=1
r.SSS.HalfRes=0
r.SSGI.Quality=4
r.EmitterSpawnRateScale=1.0
r.ParticleLightQuality=2
r.SkyAtmosphere.AerialPerspectiveLUT.FastApplyOnOpaque=0
r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice=8
r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution=32.0
r.SkyAtmosphere.FastSkyLUT=0
r.SkyAtmosphere.FastSkyLUT.SampleCountMin=4.0
r.SkyAtmosphere.FastSkyLUT.SampleCountMax=256.0
r.SkyAtmosphere.SampleCountMin=8.0
r.SkyAtmosphere.SampleCountMax=256.0
r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat=0
r.SkyAtmosphere.TransmittanceLUT.SampleCount=30.0
r.SkyAtmosphere.MultiScatteringLUT.SampleCount=20.0
fx.Niagara.QualityLevel=4


[FoliageQuality@0]
foliage.DensityScale=0
grass.DensityScale=0

[FoliageQuality@1]
foliage.DensityScale=0.4
grass.DensityScale=0.4

[FoliageQuality@2]
foliage.DensityScale=0.8
grass.DensityScale=0.8

[FoliageQuality@3]
foliage.DensityScale=1.0
grass.DensityScale=1.0

[FoliageQuality@Cine]
foliage.DensityScale=1.0
grass.DensityScale=1.0


[ShadingQuality@0]
r.HairStrands.SkyLighting.IntegrationType=2
r.HairStrands.SkyAO.SampleCount=4
r.HairStrands.Visibility.MSAA.SamplePerPixel=1
r.HairStrands.Interpolation.UseSingleGuide=1

[ShadingQuality@1]
r.HairStrands.SkyLighting.IntegrationType=2
r.HairStrands.SkyAO.SampleCount=4
r.HairStrands.Visibility.MSAA.SamplePerPixel=1
r.HairStrands.Interpolation.UseSingleGuide=1

[ShadingQuality@2]
r.HairStrands.SkyLighting.IntegrationType=2
r.HairStrands.SkyAO.SampleCount=4
r.HairStrands.Visibility.MSAA.SamplePerPixel=4
r.HairStrands.Interpolation.UseSingleGuide=1

[ShadingQuality@3]
r.HairStrands.SkyLighting.IntegrationType=2
r.HairStrands.SkyAO.SampleCount=4
r.HairStrands.Visibility.MSAA.SamplePerPixel=4
r.HairStrands.Interpolation.UseSingleGuide=0

[ShadingQuality@Cine]
r.HairStrands.SkyLighting.IntegrationType=0
r.HairStrands.SkyAO.SampleCount=8
r.HairStrands.Visibility.MSAA.SamplePerPixel=8
r.HairStrands.Interpolation.UseSingleGuide=0