Update REMDER (Dx9)

This commit is contained in:
D4rkl1ght3r
2024-10-18 22:02:26 +02:00
parent a8c9ab7da6
commit 63b1d2c492
58 changed files with 4876 additions and 2 deletions

BIN
EXE/FLAR.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +1,4 @@
[APP]
[APP]
Force10BitFormat=0
ForceFullscreen=0
ForceResolution=0,0
@@ -30,10 +30,10 @@ KeyReload=0,0,0,0
KeyScreenshot=44,0,0,0
[OVERLAY]
AutoSavePreset=1
ClockFormat=0
FPSPosition=1
NoFontScaling=0
SavePresetOnModification=1
SaveWindowState=0
ShowClock=0
ShowForceLoadEffectsButton=1
@@ -75,3 +75,5 @@ ScrollbarRounding=0.000000
StyleIndex=2
TabRounding=4.000000
WindowRounding=0.000000

15
EXE/ReShade.log Normal file
View File

@@ -0,0 +1,15 @@
If you are reading this after launching the game at least once, it likely means ReShade was not loaded by the game.
In that event here are some steps you can try to resolve this:
1) Make sure this file and the related DLL are really in the same directory as the game executable.
If that is the case and it does not work regardless, check if there is a 'bin' directory, move them there and try again.
2) Try running the game with elevated user permissions by doing a right click on its executable and choosing 'Run as administrator'.
3) If the game crashes, try disabling all game overlays (like Origin), recording software (like Fraps), FPS displaying software,
GPU overclocking and tweaking software and other proxy DLLs (like ENB, Helix or Umod).
4) If none of the above helps, you can get support on the forums at https://reshade.me/forum. But search for your problem before
creating a new topic, as somebody else may have already found a solution.

Binary file not shown.

BIN
EXE/opengl32.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout" version="3.2.0">
<Widget type="Window" skin="WindowCS" position="0 0 285 345" align="Center" layer="Overlapped" name="WindowDeveloperOptions">
<Property key="Visible" value="true"/>
<Property key="Enabled" value="true"/>
<Property key="Caption" value="Developer Options"/>
<Widget type="ScrollView" skin="ScrollViewEmpty" position="0 0 275 310" align="Stretch">
<Property key="CanvasAlign" value="Left Top"/>
<Property key="CanvasSize" value="275 300"/>
<Widget type="Button" skin="Button" position="15 10 155 40" name="ButtonEditDefaultMat">
<Property key="Caption" value="Edit default material"/>
</Widget>
<Widget type="Button" skin="Button" position="20 70 180 40" name="ButtonPickMaterial">
<Property key="Caption" value="Pick material for editing"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="20 50 230 20">
<Property key="Caption" value="Note: Picking only works in space!"/>
</Widget>
<Widget type="Button" skin="Button" position="20 115 140 35" name="ButtonReloadTextures">
<Property key="Caption" value="Reload Textures"/>
</Widget>
<Widget type="Button" skin="Button" position="20 155 140 35" name="ButtonReloadMaterials">
<Property key="Caption" value="Reload Materials"/>
</Widget>
<Widget type="Button" skin="Button" position="20 195 140 35" name="ButtonReloadShader">
<Property key="Caption" value="Reload Shader"/>
</Widget>
<Widget type="Button" skin="Button" position="20 265 140 35" name="ButtonSaveMaterials">
<Property key="Caption" value="Save Materials"/>
</Widget>
<Widget type="EditBox" skin="TextBox" position="20 230 245 35" name="EditboxSaveMaterials">
<Property key="MultiLine" value="true"/>
<Property key="WordWrap" value="true"/>
<Property key="ReadOnly" value="true"/>
</Widget>
</Widget>
</Widget>
<CodeGeneratorSettings/>
</MyGUI>

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout" version="3.2.0">
<Widget type="Window" skin="WindowCS" position="0 0 440 315" layer="Overlapped" name="WindowEditMaterial">
<Property key="Visible" value="false"/>
<Property key="Enabled" value="true"/>
<Property key="Caption" value="Edit Material"/>
<Widget type="ScrollView" skin="ScrollViewEmpty" position="0 0 430 280" align="Stretch">
<Property key="CanvasSize" value="430 280"/>
<Property key="CanvasAlign" value="Left Top"/>
<Widget type="Button" skin="Button" position="-40 -85 110 45"/>
<Widget type="TextBox" skin="TextBox" position="15 10 105 20">
<Property key="Caption" value="Texture Name:"/>
</Widget>
<Widget type="EditBox" skin="EditBox" position="120 10 280 40" name="EditBoxTextureName">
<Property key="MultiLine" value="true"/>
<Property key="ReadOnly" value="true"/>
<Property key="WordWrap" value="true"/>
</Widget>
<Widget type="Widget" skin="PanelEmpty" position="10 55 415 55">
<Widget type="ScrollBar" skin="SliderH" position="105 30 270 20" name="SliderRoughness">
<Property key="MoveToClick" value="true"/>
<Property key="Range" value="101"/>
<Property key="Page" value="1"/>
<Property key="RangePosition" value="1"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="5 5 80 20">
<Property key="Caption" value="Roughness:"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="90 30 10 20">
<Property key="Caption" value="0"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="380 30 15 20">
<Property key="Caption" value="1"/>
</Widget>
<Widget type="EditBox" skin="EditBox" position="220 5 45 20" name="EditBoxRoughness">
<Property key="WordWrap" value="false"/>
<Property key="MultiLine" value="false"/>
<Property key="ReadOnly" value="false"/>
</Widget>
</Widget>
<Widget type="Widget" skin="PanelEmpty" position="10 115 415 55">
<Widget type="ScrollBar" skin="SliderH" position="105 30 270 20" name="SliderMetalness">
<Property key="MoveToClick" value="true"/>
<Property key="Range" value="101"/>
<Property key="Page" value="1"/>
<Property key="RangePosition" value="1"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="5 5 80 20">
<Property key="Caption" value="Metalness:"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="90 30 10 20">
<Property key="Caption" value="0"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="380 30 15 20">
<Property key="Caption" value="1"/>
</Widget>
<Widget type="EditBox" skin="EditBox" position="220 5 45 20" name="EditBoxMetalness">
<Property key="WordWrap" value="false"/>
<Property key="MultiLine" value="false"/>
<Property key="ReadOnly" value="false"/>
</Widget>
</Widget>
<Widget type="Widget" skin="PanelEmpty" position="10 175 415 55">
<Widget type="ScrollBar" skin="SliderH" position="105 30 270 20" name="SliderRoughnessTextureBias">
<Property key="MoveToClick" value="true"/>
<Property key="Range" value="201"/>
<Property key="Page" value="1"/>
<Property key="RangePosition" value="1"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="5 5 165 20">
<Property key="Caption" value="Roughness Texture Bias:"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="90 30 15 20">
<Property key="Caption" value="-1"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="380 30 15 20">
<Property key="Caption" value="1"/>
</Widget>
<Widget type="EditBox" skin="EditBox" position="220 5 45 20" name="EditBoxRoughnessTextureBias">
<Property key="WordWrap" value="false"/>
<Property key="MultiLine" value="false"/>
<Property key="ReadOnly" value="false"/>
</Widget>
</Widget>
<Widget type="Button" skin="Button" position="165 240 120 35" name="ButtonResetCurrentMaterial">
<Property key="Caption" value="Reset"/>
</Widget>
</Widget>
</Widget>
<CodeGeneratorSettings/>
</MyGUI>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceImageSet" name="MultiListButtonImage">
<Group name="Icons" texture="MyGUI_BlackBlueSkins.png" size="12 10">
<Index name="None">
<Frame point="74 185"/>
</Index>
<Index name="Up">
<Frame point="74 198"/>
</Index>
<Index name="Down">
<Frame point="74 211"/>
</Index>
</Group>
</Resource>
</MyGUI>

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,491 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource">
<Resource type="ResourceLayout" name="CheckBox" version="3.2.0">
<Widget type="Widget" skin="CheckBoxSkin" position="20 20 23 21" name="Root">
<Property key="TextAlign" value="Default"/>
<Property key="FontName" value="Default"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="RadioButton" version="3.2.0">
<Widget type="Widget" skin="RadioButtonSkin" position="20 20 21 20" name="Root">
<Property key="TextAlign" value="Default"/>
<Property key="FontName" value="Default"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ScrollBarH" version="3.2.0">
<Widget type="Widget" skin="ScrollPanelHSkin" position="25 50 125 15" name="Root">
<Property key="VerticalAlignment" value="false"/>
<UserString key="LE_TargetWidgetType" value="ScrollBar"/>
<Widget type="Widget" skin="PanelEmpty" position="14 0 98 15" align="Stretch" name="TrackPlace">
<Property key="NeedKey" value="false"/>
<Property key="InheritsPick" value="true"/>
<Widget type="Button" skin="ScrollTrackHSkin" position="35 1 19 14" align="Left VStretch" name="Track">
<UserString key="MinTrackSize" value="10"/>
</Widget>
<Widget type="Widget" skin="PanelEmpty" position="0 0 35 15" align="Left VStretch" name="FirstPart"/>
<Widget type="Widget" skin="PanelEmpty" position="54 0 44 15" align="Left VStretch" name="SecondPart"/>
</Widget>
<Widget type="Button" skin="ButtonLeftSkin" position="2 1 12 14" align="Left VCenter" name="Start"/>
<Widget type="Button" skin="ButtonRightSkin" position="112 1 12 14" align="Right VCenter" name="End"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ScrollBarV" version="3.2.0">
<Widget type="Widget" skin="ScrollPanelVSkin" position="25 50 15 125" name="Root">
<Property key="VerticalAlignment" value="true"/>
<UserString key="LE_TargetWidgetType" value="ScrollBar"/>
<Widget type="Widget" skin="PanelEmpty" position="0 14 15 99" align="Stretch" name="TrackPlace">
<Property key="NeedKey" value="false"/>
<Property key="InheritsPick" value="true"/>
<Widget type="Button" skin="ScrollTrackVSkin" position="1 25 14 19" align="HStretch Top" name="Track">
<UserString key="MinTrackSize" value="10"/>
</Widget>
<Widget type="Widget" skin="PanelEmpty" position="0 0 15 25" align="HStretch Top" name="FirstPart"/>
<Widget type="Widget" skin="PanelEmpty" position="0 44 15 55" align="HStretch Top" name="SecondPart"/>
</Widget>
<Widget type="Button" skin="ButtonUpSkin" position="1 2 14 11" align="HCenter Top" name="Start"/>
<Widget type="Button" skin="ButtonDownSkin" position="1 113 14 11" align="HCenter Bottom" name="End"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="SliderH" version="3.2.0">
<Widget type="Widget" skin="ScrollPanelHSkin" position="25 50 125 15" name="Root">
<Property key="MoveToClick" value="true"/>
<Property key="VerticalAlignment" value="false"/>
<UserString key="LE_TargetWidgetType" value="ScrollBar"/>
<Widget type="Widget" skin="PanelEmpty" position="2 0 122 15" align="Stretch" name="TrackPlace">
<Property key="NeedKey" value="false"/>
<Property key="InheritsPick" value="true"/>
<Widget type="Button" skin="SliderTrackHSkin" position="35 1 7 14" align="Left VStretch" name="Track"/>
<Widget type="Widget" skin="PanelEmpty" position="0 0 35 15" align="Left VStretch" name="FirstPart"/>
<Widget type="Widget" skin="PanelEmpty" position="42 0 80 15" align="Left VStretch" name="SecondPart"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="SliderV" version="3.2.0">
<Widget type="Widget" skin="ScrollPanelVSkin" position="20 20 15 125" name="Root">
<Property key="MoveToClick" value="true"/>
<Property key="VerticalAlignment" value="true"/>
<UserString key="LE_TargetWidgetType" value="ScrollBar"/>
<Widget type="Widget" skin="PanelEmpty" position="0 2 15 122" align="Stretch">
<Widget type="Button" skin="SliderTrackVSkin" position="1 25 14 7" align="HStretch Top" name="Track"/>
<Widget type="Widget" skin="PanelEmpty" position="0 0 15 25" align="HStretch Top" name="FirstPart"/>
<Widget type="Widget" skin="PanelEmpty" position="0 32 15 90" align="HStretch Top" name="SecondPart"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="SliderHEmpty" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="25 50 125 15" name="Root">
<Property key="MoveToClick" value="true"/>
<Property key="VerticalAlignment" value="false"/>
<UserString key="LE_TargetWidgetType" value="ScrollBar"/>
<Widget type="Widget" skin="PanelEmpty" position="2 0 122 15" align="Stretch" name="TrackPlace">
<Property key="NeedKey" value="false"/>
<Property key="InheritsPick" value="true"/>
<Widget type="Button" skin="SliderTrackHSkin" position="35 1 7 14" align="Left VStretch" name="Track"/>
<Widget type="Widget" skin="PanelEmpty" position="0 0 35 15" align="Left VStretch" name="FirstPart"/>
<Widget type="Widget" skin="PanelEmpty" position="42 0 80 15" align="Left VStretch" name="SecondPart"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="SliderVEmpty" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="20 20 15 125" name="Root">
<Property key="MoveToClick" value="true"/>
<Property key="VerticalAlignment" value="true"/>
<UserString key="LE_TargetWidgetType" value="ScrollBar"/>
<Widget type="Widget" skin="PanelEmpty" position="0 2 15 122" align="Stretch">
<Widget type="Button" skin="SliderTrackVSkin" position="1 25 14 7" align="HStretch Top" name="Track"/>
<Widget type="Widget" skin="PanelEmpty" position="0 0 15 25" align="HStretch Top" name="FirstPart"/>
<Widget type="Widget" skin="PanelEmpty" position="0 32 15 90" align="HStretch Top" name="SecondPart"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="Button" version="3.2.0">
<Widget type="Widget" skin="ButtonSkin" position="20 25 29 26" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ButtonImage" version="3.2.0">
<Widget type="Widget" skin="ButtonEmptySkin" position="20 20 16 16" name="Root">
<Property key="TextAlign" value="Center"/>
<Property key="FontName" value="Default"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
<Widget type="ImageBox" skin="ImageBox" position="0 0 16 16" align="Stretch" name="Image">
<Property key="NeedMouse" value="false"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="TextBox" version="3.2.0">
<Widget type="Widget" skin="TextBoxSkin" position="20 20 16 16" name="Root">
<Property key="TextAlign" value="Default"/>
<Property key="FontName" value="Default"/>
<Property key="TextColour" value="1 1 1"/>
<UserString key="LE_TargetWidgetType" value="TextBox"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="EditBox" version="3.2.0">
<Widget type="Widget" skin="EditBoxSkin" position="65 10 29 26" name="Root">
<UserString key="LE_TargetWidgetType" value="EditBox"/>
<Widget type="TextBox" skin="EditClientSkin" position="2 2 23 20" align="Stretch" name="Client">
<Property key="TextAlign" value="Left VCenter"/>
<Property key="FontName" value="Default"/>
<Property key="TextColour" value="1 1 1"/>
<Property key="Pointer" value="beam"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="EditBoxStretch" version="3.2.0">
<Widget type="Widget" skin="EditBoxSkin" position="25 10 55 55" name="Root">
<Property key="MultiLine" value="true"/>
<UserString key="LE_TargetWidgetType" value="EditBox"/>
<Widget type="TextBox" skin="EditClientSkin" position="2 3 33 32" align="Stretch" name="Client">
<Property key="TextAlign" value="Default"/>
<Property key="TextColour" value="1 1 1"/>
<Property key="FontName" value="Default"/>
<Property key="Pointer" value="beam"/>
</Widget>
<Widget type="ScrollBar" skin="ScrollBarH" position="2 36 34 15" align="HStretch Bottom" name="HScroll"/>
<Widget type="ScrollBar" skin="ScrollBarV" position="36 2 15 34" align="Right VStretch" name="VScroll"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="EditBoxEmpty" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="65 10 16 16" name="Root">
<UserString key="LE_TargetWidgetType" value="EditBox"/>
<Widget type="TextBox" skin="EditClientSkin" position="0 0 16 16" align="Stretch" name="Client">
<Property key="TextAlign" value="Default"/>
<Property key="FontName" value="Default"/>
<Property key="TextColour" value="1 1 1"/>
<Property key="Pointer" value="beam"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="WordWrapEmpty" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="65 10 16 16" name="Root">
<Property key="WordWrap" value="true"/>
<Property key="Static" value="true"/>
<Property key="MultiLine" value="true"/>
<UserString key="LE_TargetWidgetType" value="EditBox"/>
<Widget type="TextBox" skin="EditClientSkin" position="0 0 16 16" align="Stretch" name="Client">
<Property key="TextAlign" value="Default"/>
<Property key="FontName" value="Default"/>
<Property key="TextColour" value="1 1 1"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ComboBox" version="3.2.0">
<Widget type="Widget" skin="EditBoxSkin" position="65 10 100 26" name="Root">
<Property key="MaxListLength" value="200"/>
<Property key="SmoothShow" value="true"/>
<UserString key="LE_TargetWidgetType" value="ComboBox"/>
<Widget type="TextBox" skin="EditClientSkin" position="2 2 75 20" align="Stretch" name="Client">
<Property key="TextAlign" value="Left VCenter"/>
<Property key="TextColour" value="1 1 1"/>
<Property key="FontName" value="Default"/>
<Property key="Pointer" value="beam"/>
</Widget>
<Widget type="ListBox" skin="ListBox" position="65 38 100 200" style="Popup" layer="Popup" name="List">
<Property key="Visible" value="false"/>
</Widget>
<Widget type="Button" skin="ButtonDownSkin" position="79 7 14 11" align="Right VCenter" name="Button"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="Window" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="15 10 68 49" name="Root">
<Property key="Snap" value="true"/>
<Property key="Movable" value="false"/>
<UserString key="LE_TargetWidgetType" value="Window"/>
<Widget type="Widget" skin="CaptionEmptySkin" position="0 0 68 28" align="HStretch Top">
<Widget type="TextBox" skin="TextBox" position="2 3 62 24" align="HStretch Top" name="Caption">
<Property key="TextColour" value="0 0 0"/>
<Property key="TextAlign" value="Center"/>
<Property key="FontName" value="Default"/>
</Widget>
</Widget>
<Widget type="Widget" skin="WindowFrameSkin" position="0 28 68 20" align="Stretch">
<Widget type="Widget" skin="ClientTileSkin" position="4 2 58 12" align="Stretch" name="Client"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="WindowC" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="15 10 68 49" name="Root">
<Property key="Snap" value="true"/>
<UserString key="LE_TargetWidgetType" value="Window"/>
<Widget type="Widget" skin="CaptionSkin" position="0 0 68 28" align="HStretch Top">
<Widget type="TextBox" skin="TextBox" position="7 1 52 22" align="HStretch Top" name="Caption">
<Property key="TextColour" value="1 1 1"/>
<Property key="TextAlign" value="Center"/>
<Property key="FontName" value="Default"/>
</Widget>
</Widget>
<Widget type="Widget" skin="WindowFrameSkin" position="0 28 68 20" align="Stretch">
<Widget type="Widget" skin="ClientTileSkin" position="4 2 58 12" align="Stretch" name="Client"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="WindowCS" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="15 10 68 49" name="Root">
<Property key="Snap" value="true"/>
<UserString key="LE_TargetWidgetType" value="Window"/>
<Widget type="Widget" skin="CaptionSkin" position="0 0 68 28" align="HStretch Top">
<Widget type="TextBox" skin="TextBox" position="7 1 52 22" align="HStretch Top" name="Caption">
<Property key="TextColour" value="1 1 1"/>
<Property key="TextAlign" value="Center"/>
<Property key="FontName" value="Default"/>
</Widget>
</Widget>
<Widget type="Widget" skin="WindowFrameSkin" position="0 28 68 20" align="Stretch">
<Widget type="Widget" skin="ClientTileSkin" position="4 2 58 12" align="Stretch" name="Client"/>
<Widget type="Button" skin="WindowResizeRightDownSkin" position="57 9 9 9" align="Right Bottom" name="ResizeRightBottom">
<Property key="Pointer" value="size_left"/>
</Widget>
<Widget type="Button" skin="WindowResizeLeftDownSkin" position="0 9 9 9" align="Left Bottom" name="ResizeLeftBottom">
<Property key="Pointer" value="size_right"/>
</Widget>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="WindowCX" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="15 10 68 49" name="Root">
<Property key="Snap" value="true"/>
<UserString key="LE_TargetWidgetType" value="Window"/>
<Widget type="Widget" skin="WindowFrameSkin" position="0 28 68 20" align="Stretch">
<Widget type="Widget" skin="ClientTileSkin" position="4 2 58 12" align="Stretch" name="Client"/>
</Widget>
<Widget type="Widget" skin="CaptionWithButtonSkin" position="0 0 68 28" align="HStretch Top">
<Widget type="Button" skin="ButtonCloseSkin" position="44 6 18 17" align="Right Top" name="Button">
<UserString key="Event" value="close"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="7 1 29 22" align="HStretch Top" name="Caption">
<Property key="TextColour" value="1 1 1"/>
<Property key="TextAlign" value="Center"/>
<Property key="FontName" value="Default"/>
</Widget>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="WindowCSX" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="15 10 68 49" name="Root">
<Property key="Snap" value="true"/>
<UserString key="LE_TargetWidgetType" value="Window"/>
<Widget type="Widget" skin="WindowFrameSkin" position="0 28 68 20" align="Stretch">
<Widget type="Widget" skin="ClientTileSkin" position="4 2 58 12" align="Stretch" name="Client"/>
<Widget type="Button" skin="WindowResizeRightDownSkin" position="57 9 9 9" align="Right Bottom" name="ResizeRightBottom">
<Property key="Pointer" value="size_left"/>
</Widget>
<Widget type="Button" skin="WindowResizeLeftDownSkin" position="0 9 9 9" align="Left Bottom" name="ResizeLeftBottom">
<Property key="Pointer" value="size_right"/>
</Widget>
</Widget>
<Widget type="Widget" skin="CaptionWithButtonSkin" position="0 0 68 28" align="HStretch Top">
<Widget type="Button" skin="ButtonCloseSkin" position="44 6 18 17" align="Right Top" name="Button">
<UserString key="Event" value="close"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="7 1 29 22" align="HStretch Top" name="Caption">
<Property key="TextColour" value="1 1 1"/>
<Property key="TextAlign" value="Center"/>
<Property key="FontName" value="Default"/>
</Widget>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="MenuBar" version="3.2.0">
<Widget type="Widget" skin="MenuBarSkin" position="5 5 29 26" name="Root">
<Property key="VerticalAlignment" value="false"/>
<UserString key="LE_TargetWidgetType" value="MenuBar"/>
<UserString key="DistanceButton" value="6"/>
<UserString key="SubMenuLayer" value="Popup"/>
<UserString key="NormalSkin" value="MenuBarButton"/>
<UserString key="PopupSkin" value="MenuBarButton"/>
<UserString key="SeparatorSkin" value="MenuBarSeparator"/>
<UserString key="SubMenuSkin" value="PopupMenu"/>
<Widget type="Widget" skin="PanelEmpty" position="2 2 25 20" align="Stretch" name="Client"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="MenuBarButton" version="3.2.0">
<Widget type="Widget" skin="MenuItemSkin" position="20 25 25 20" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="MenuBarSeparator" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="20 20 10 10" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<UserString key="MinSize" value="10 10"/>
<Widget type="Widget" skin="SepDownVSkin" position="4 2 2 6" align="HCenter VStretch"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="PopupMenu" version="3.2.0">
<Widget type="Widget" skin="PanelSkin" position="5 5 29 26" name="Root">
<Property key="VerticalAlignment" value="true"/>
<UserString key="SubMenuLayer" value="Popup"/>
<UserString key="SubMenuSkin" value="PopupMenu"/>
<UserString key="LE_TargetWidgetType" value="PopupMenu"/>
<UserString key="SeparatorSkin" value="PopupMenuSeparator"/>
<UserString key="NormalSkin" value="PopupMenuNormal"/>
<UserString key="PopupSkin" value="PopupMenuPopup"/>
<Widget type="Widget" skin="PanelEmpty" position="3 4 21 16" align="Stretch" name="Client"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="PopupMenuSeparator" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="20 20 10 10" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<UserString key="MinSize" value="10 10"/>
<Widget type="Widget" skin="SepDownHSkin" position="2 4 6 2" align="HStretch VCenter"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="PopupMenuNormal" version="3.2.0">
<Widget type="Widget" skin="MenuItemNormalSkin" position="20 25 43 14" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Left VCenter"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
<Widget type="Widget" skin="MenuItemCheckButtonSkin" position="1 0 15 13" align="Left VCenter" name="Check"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="PopupMenuPopup" version="3.2.0">
<Widget type="Widget" skin="MenuItemNormalSkin" position="20 25 43 14" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Left VCenter"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
<Widget type="Widget" skin="MenuItemPopupButtonSkin" position="31 1 10 12" align="Right VCenter">
<Property key="NeedMouse" value="false"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ProgressBar" version="3.2.0">
<Widget type="Widget" skin="ScrollPanelHSkin" position="25 50 125 15" name="Root">
<Property key="MoveToClick" value="true"/>
<UserString key="LE_TargetWidgetType" value="ProgressBar"/>
<UserString key="TrackWidth" value="7"/>
<UserString key="TrackFill" value="false"/>
<UserString key="TrackSkin" value="SliderTrackHSkin"/>
<Widget type="Widget" skin="PanelEmpty" position="2 1 122 14" align="Stretch" name="TrackPlace">
<Property key="NeedKey" value="false"/>
<Property key="InheritsPick" value="true"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ProgressBarFill" version="3.2.0">
<Widget type="Widget" skin="ScrollPanelHSkin" position="25 50 125 15" name="Root">
<Property key="MoveToClick" value="true"/>
<UserString key="LE_TargetWidgetType" value="ProgressBar"/>
<UserString key="TrackFill" value="true"/>
<UserString key="TrackSkin" value="ProgressBarTrackHSkin"/>
<UserString key="TrackWidth" value="6"/>
<Widget type="Widget" skin="PanelEmpty" position="2 1 122 14" align="Stretch" name="TrackPlace">
<Property key="NeedKey" value="false"/>
<Property key="InheritsPick" value="true"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ListBoxItem" version="3.2.0">
<Widget type="Widget" skin="ListBoxItemSkin" position="20 20 43 13" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Left VCenter"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ListBox" version="3.2.0">
<Widget type="Widget" skin="PanelSkin" position="5 5 55 55" name="Root">
<UserString key="LE_TargetWidgetType" value="ListBox"/>
<UserString key="HeightLine" value="21"/>
<UserString key="SkinLine" value="ListBoxItem"/>
<Widget type="Widget" skin="PanelEmpty" position="3 3 32 47" align="Stretch" name="Client"/>
<Widget type="ScrollBar" skin="ScrollBarV" position="35 3 15 47" align="Right VStretch" name="VScroll"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ItemBox" version="3.2.0">
<Widget type="Widget" skin="PanelSkin" position="5 5 55 55" name="Root">
<UserString key="LE_TargetWidgetType" value="ItemBox"/>
<UserString key="DragLayer" value="DragAndDrop"/>
<Widget type="Widget" skin="PanelEmpty" position="3 3 32 32" align="Stretch" name="Client"/>
<Widget type="ScrollBar" skin="ScrollBarV" position="35 3 15 32" align="Right VStretch" name="VScroll"/>
<Widget type="ScrollBar" skin="ScrollBarH" position="3 35 32 15" align="HStretch Bottom" name="HScroll"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ItemBoxEmpty" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="7 7 48 48" name="Root">
<UserString key="LE_TargetWidgetType" value="ItemBox"/>
<UserString key="DragLayer" value="DragAndDrop"/>
<Widget type="Widget" skin="PanelEmpty" position="1 1 32 32" align="Stretch" name="Client"/>
<Widget type="ScrollBar" skin="ScrollBarV" position="33 1 15 32" align="Right VStretch" name="VScroll"/>
<Widget type="ScrollBar" skin="ScrollBarH" position="1 33 32 15" align="HStretch Bottom" name="HScroll"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ScrollView" version="3.2.0">
<Widget type="Widget" skin="PanelSkin" position="5 5 55 55" name="Root">
<UserString key="LE_TargetWidgetType" value="ScrollView"/>
<Widget type="Widget" skin="PanelEmpty" position="3 3 32 32" align="Stretch" name="Client"/>
<Widget type="ScrollBar" skin="ScrollBarV" position="35 3 15 32" align="Right VStretch" name="VScroll"/>
<Widget type="ScrollBar" skin="ScrollBarH" position="3 35 32 15" align="HStretch Bottom" name="HScroll"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="ScrollViewEmpty" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="8 8 47 47" name="Root">
<UserString key="LE_TargetWidgetType" value="ScrollView"/>
<Widget type="Widget" skin="PanelEmpty" position="0 0 32 32" align="Stretch" name="Client"/>
<Widget type="ScrollBar" skin="ScrollBarV" position="32 0 15 32" align="Right VStretch" name="VScroll"/>
<Widget type="ScrollBar" skin="ScrollBarH" position="0 32 32 15" align="HStretch Bottom" name="HScroll"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="TabHeaderButton" version="3.2.0">
<Widget type="Widget" skin="TabHeaderButtonSkin" position="20 25 52 23" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="TabControl" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="5 5 89 60" name="Root">
<UserString key="LE_TargetWidgetType" value="TabControl"/>
<UserString key="ButtonSkin" value="TabHeaderButton"/>
<Widget type="Widget" skin="TabPanelSkin" position="0 21 89 39" align="Stretch">
<Widget type="Widget" skin="PanelEmpty" position="2 3 83 32" align="Stretch" name="TabItem"/>
</Widget>
<Widget type="Widget" skin="PanelEmpty" position="7 0 78 23" align="HStretch Top" name="HeaderPlace">
<Widget type="Widget" skin="TabHeaderEmptySkin" position="52 0 26 23" name="Controls">
<Widget type="Button" skin="ButtonRightSkin" position="14 4 12 14" name="Right"/>
<Widget type="Button" skin="ButtonLeftSkin" position="1 4 12 14" name="Left"/>
</Widget>
<Widget type="Widget" skin="TabHeaderEmptySkin" position="0 0 52 23" name="Empty"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="MultiListBox" version="3.2.0">
<Widget type="Widget" skin="PanelSkin" position="5 5 55 55" name="Root">
<UserString key="LE_TargetWidgetType" value="MultiListBox"/>
<UserString key="SkinButton" value="MultiListButton"/>
<UserString key="SkinList" value="MultiSubListBox"/>
<Widget type="Widget" skin="PanelEmpty" position="3 24 47 26" align="Stretch" name="Client"/>
<Widget type="Widget" skin="PanelEmpty" position="3 3 47 21" align="HStretch Top" name="HeaderPlace">
<Widget type="Widget" skin="MultiListButtonSkin" position="0 0 47 21" name="Empty"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="MultiListButton" version="3.2.0">
<Widget type="Widget" skin="MultiListButtonSkin" position="20 25 45 21" name="Root">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<UserString key="LE_TargetWidgetType" value="Button"/>
<Widget type="ImageBox" skin="ImageBox" position="29 4 12 10" align="Right VCenter" name="Image">
<Property key="ImageResource" value="MultiListButtonImage"/>
<Property key="ImageGroup" value="Icons"/>
<Property key="ImageName" value="Down"/>
<Property key="NeedMouse" value="false"/>
</Widget>
</Widget>
</Resource>
<Resource type="ResourceLayout" name="MultiSubListBox" version="3.2.0">
<Widget type="Widget" skin="PanelEmpty" position="8 8 47 47" name="Root">
<UserString key="LE_TargetWidgetType" value="ListBox"/>
<UserString key="HeightLine" value="21"/>
<UserString key="SkinLine" value="ListBoxItem"/>
<Widget type="Widget" skin="PanelEmpty" position="0 0 32 47" align="Stretch" name="Client"/>
<Widget type="ScrollBar" skin="ScrollBarV" position="32 0 15 47" align="Right VStretch" name="VScroll"/>
</Widget>
</Resource>
</MyGUI>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="List">
<List file="MyGUI_BlackBlueImages.xml"/>
<List file="MyGUI_BlackBlueSkins.xml"/>
<List file="MyGUI_BlackBlueTemplates.xml"/>
</MyGUI>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceSkin" name="PanelEmpty" size="16 16"/>
<Resource type="ResourceSkin" name="RotatingSkin" size="16 16">
<BasisSkin type="RotatingSkin" offset="0 0 16 16" align="Stretch"/>
</Resource>
<Resource type="ResourceSkin" name="TextBoxSkin" size="16 16">
<BasisSkin type="SimpleText" offset="0 0 16 16" align="Stretch"/>
</Resource>
<Resource type="ResourceSkin" name="ImageBox" size="16 16">
<BasisSkin type="MainSkin" offset="0 0 16 16"/>
</Resource>
<Resource type="ResourceSkin" name="Canvas" size="16 16">
<BasisSkin type="MainSkin" offset="0 0 16 16"/>
</Resource>
<Resource type="ResourceSkin" name="EditClientSkin" size="16 16">
<BasisSkin type="EditText" offset="0 0 16 16" align="Stretch"/>
</Resource>
</MyGUI>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="List">
<List file="MyGUI_GeneratedFonts.xml"/>
<List file="MyGUI_Fonts.xml"/>
<List file="MyGUI_CommonSkins.xml"/>
<List file="MyGUI_BlackBlueTheme.xml"/>
<List file="MyGUI_PointerImages.xml"/>
<List file="MyGUI_Pointers.xml"/>
<List file="MyGUI_Layers.xml"/>
<List file="MyGUI_Settings.xml"/>
</MyGUI>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceTrueTypeFont" name="DejaVuSansFont_15">
<Property key="Source" value="DejaVuSans.ttf"/>
<Property key="Size" value="10"/>
<Property key="Hinting" value="use_native"/>
<Property key="Resolution" value="96"/>
<Property key="Antialias" value="false"/>
<Property key="TabWidth" value="8"/>
<Property key="OffsetHeight" value="0"/>
<Property key="SubstituteCode" value="0"/>
<Codes>
<Code range="32 126"/>
<Code range="1025 1105"/>
<Code range="8470 8470"/>
</Codes>
</Resource>
</MyGUI>

View File

@@ -0,0 +1,191 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceManualFont" name="DejaVuSansFontGenerated_15">
<Property key="Source" value="DejaVuSansFontGenerated_15.png"/>
<Property key="DefaultHeight" value="17"/>
<Codes>
<Code index="9" advance="8"/>
<Code index="32" bearing="0 13" advance="4"/>
<Code index="33" coord="112 16 1 9" bearing="2 4" advance="3"/>
<Code index="34" coord="21 0 3 4" bearing="1 4" advance="4"/>
<Code index="35" coord="49 76 9 10" bearing="1 3" advance="10"/>
<Code index="36" coord="8 88 8 11" bearing="1 4" advance="7"/>
<Code index="37" coord="114 16 11 9" bearing="0 4" advance="12"/>
<Code index="38" coord="0 26 9 9" bearing="1 4" advance="10"/>
<Code index="39" coord="25 0 1 4" bearing="1 4" advance="2"/>
<Code index="40" coord="13 100 3 12" bearing="1 2" advance="4"/>
<Code index="41" coord="17 100 3 12" bearing="1 2" advance="4"/>
<Code index="42" coord="54 0 7 6" bearing="0 4"/>
<Code index="43" coord="10 26 9 9" bearing="1 4" advance="10"/>
<Code index="44" coord="18 0 2 3" bearing="1 11" advance="3"/>
<Code index="45" coord="0 0 3 1" bearing="1 9" advance="4"/>
<Code index="46" coord="12 0 1 2" bearing="2 11" advance="2"/>
<Code index="47" coord="17 88 4 11" bearing="0 4"/>
<Code index="48" coord="20 26 6 9" bearing="1 4" advance="7"/>
<Code index="49" coord="27 26 5 9" bearing="2 4" advance="6"/>
<Code index="50" coord="33 26 7 9" bearing="1 4"/>
<Code index="51" coord="41 26 6 9" bearing="1 4" advance="7"/>
<Code index="52" coord="48 26 6 9" bearing="1 4" advance="7"/>
<Code index="53" coord="55 26 6 9" bearing="1 4" advance="7"/>
<Code index="54" coord="62 26 6 9" bearing="1 4" advance="7"/>
<Code index="55" coord="69 26 6 9" bearing="1 4" advance="7"/>
<Code index="56" coord="76 26 6 9" bearing="1 4" advance="7"/>
<Code index="57" coord="83 26 6 9" bearing="1 4" advance="7"/>
<Code index="58" coord="62 0 1 7" bearing="2 6" advance="2"/>
<Code index="59" coord="109 16 2 8" bearing="1 6" advance="3"/>
<Code index="60" coord="64 0 8 7" bearing="1 5" advance="10"/>
<Code index="61" coord="27 0 8 4" bearing="1 7" advance="10"/>
<Code index="62" coord="73 0 8 7" bearing="1 5" advance="10"/>
<Code index="63" coord="90 26 5 9" bearing="1 4" advance="6"/>
<Code index="64" coord="22 88 11 11" bearing="1 4" advance="12"/>
<Code index="65" coord="96 26 9 9" bearing="0 4"/>
<Code index="66" coord="106 26 7 9" bearing="1 4" advance="8"/>
<Code index="67" coord="114 26 7 9" bearing="1 4" advance="8"/>
<Code index="68" coord="0 36 8 9" bearing="1 4" advance="9"/>
<Code index="69" coord="9 36 6 9" bearing="1 4" advance="7"/>
<Code index="70" coord="16 36 5 9" bearing="1 4" advance="6"/>
<Code index="71" coord="22 36 8 9" bearing="1 4" advance="9"/>
<Code index="72" coord="31 36 8 9" bearing="1 4" advance="9"/>
<Code index="73" coord="40 36 1 9" bearing="1 4" advance="2"/>
<Code index="74" coord="21 100 3 12" bearing="-1 4" advance="4"/>
<Code index="75" coord="42 36 7 9" bearing="1 4"/>
<Code index="76" coord="50 36 6 9" bearing="1 4"/>
<Code index="77" coord="57 36 9 9" bearing="1 4" advance="10"/>
<Code index="78" coord="67 36 8 9" bearing="1 4" advance="9"/>
<Code index="79" coord="76 36 8 9" bearing="1 4" advance="9"/>
<Code index="80" coord="85 36 6 9" bearing="1 4" advance="7"/>
<Code index="81" coord="34 88 8 11" bearing="1 4" advance="9"/>
<Code index="82" coord="92 36 7 9" bearing="1 4"/>
<Code index="83" coord="100 36 7 9" bearing="1 4" advance="8"/>
<Code index="84" coord="108 36 7 9" bearing="0 4"/>
<Code index="85" coord="116 36 8 9" bearing="1 4" advance="9"/>
<Code index="86" coord="0 46 11 9" bearing="-1 4" advance="10"/>
<Code index="87" coord="12 46 13 9" bearing="-1 4" advance="12"/>
<Code index="88" coord="26 46 8 9" bearing="0 4"/>
<Code index="89" coord="35 46 7 9" bearing="0 4"/>
<Code index="90" coord="43 46 8 9" bearing="1 4" advance="9"/>
<Code index="91" coord="25 100 3 12" bearing="1 3" advance="4"/>
<Code index="92" coord="43 88 4 11" bearing="0 4"/>
<Code index="93" coord="29 100 3 12" bearing="1 3" advance="4"/>
<Code index="94" coord="36 0 8 4" bearing="1 4" advance="10"/>
<Code index="95" coord="4 0 7 1" bearing="0 15"/>
<Code index="96" coord="14 0 3 2" bearing="1 3" advance="6"/>
<Code index="97" coord="82 0 6 7" bearing="1 6" advance="7"/>
<Code index="98" coord="48 88 6 11" bearing="1 2" advance="7"/>
<Code index="99" coord="89 0 5 7" bearing="1 6" advance="6"/>
<Code index="100" coord="55 88 6 11" bearing="1 2" advance="7"/>
<Code index="101" coord="95 0 6 7" bearing="1 6" advance="7"/>
<Code index="102" coord="62 88 4 11" bearing="0 2"/>
<Code index="103" coord="59 76 6 10" bearing="1 6" advance="7"/>
<Code index="104" coord="67 88 6 11" bearing="1 2" advance="7"/>
<Code index="105" coord="66 76 1 10" bearing="1 3" advance="2"/>
<Code index="106" coord="109 100 2 13" bearing="0 3" advance="3"/>
<Code index="107" coord="74 88 6 11" bearing="1 2"/>
<Code index="108" coord="81 88 1 11" bearing="1 2" advance="2"/>
<Code index="109" coord="102 0 11 7" bearing="1 6" advance="12"/>
<Code index="110" coord="114 0 6 7" bearing="1 6" advance="7"/>
<Code index="111" coord="121 0 6 7" bearing="1 6" advance="7"/>
<Code index="112" coord="68 76 6 10" bearing="1 6" advance="7"/>
<Code index="113" coord="75 76 6 10" bearing="1 6" advance="7"/>
<Code index="114" coord="0 8 4 7" bearing="1 6"/>
<Code index="115" coord="5 8 6 7" bearing="1 6"/>
<Code index="116" coord="52 46 4 9" bearing="0 4" advance="5"/>
<Code index="117" coord="12 8 6 7" bearing="1 6" advance="7"/>
<Code index="118" coord="19 8 9 7" bearing="-1 6" advance="8"/>
<Code index="119" coord="29 8 9 7" bearing="0 6"/>
<Code index="120" coord="39 8 7 7" bearing="0 6"/>
<Code index="121" coord="82 76 8 10" bearing="0 6" advance="7"/>
<Code index="122" coord="47 8 5 7" bearing="1 6" advance="6"/>
<Code index="123" coord="33 100 5 12" bearing="2 3" advance="6"/>
<Code index="124" coord="112 100 1 13" bearing="2 3" advance="2"/>
<Code index="125" coord="39 100 5 12" bearing="2 3" advance="6"/>
<Code index="126" coord="45 0 8 4" bearing="1 7" advance="10"/>
<Code index="1025" coord="83 88 6 11" bearing="1 2" advance="7"/>
<Code index="1026" coord="45 100 9 12" bearing="0 4" advance="10"/>
<Code index="1027" coord="55 100 6 12" bearing="1 1"/>
<Code index="1028" coord="57 46 8 9" bearing="1 4" advance="9"/>
<Code index="1029" coord="66 46 7 9" bearing="1 4" advance="8"/>
<Code index="1030" coord="74 46 1 9" bearing="1 4" advance="2"/>
<Code index="1031" coord="90 88 3 11" bearing="0 2" advance="4"/>
<Code index="1032" coord="62 100 3 12" bearing="-1 4" advance="4"/>
<Code index="1033" coord="76 46 13 9" bearing="1 4"/>
<Code index="1034" coord="90 46 12 9" bearing="1 4" advance="13"/>
<Code index="1035" coord="103 46 9 9" bearing="0 4" advance="10"/>
<Code index="1036" coord="66 100 8 12" bearing="1 1"/>
<Code index="1037" coord="75 100 8 12" bearing="1 1" advance="9"/>
<Code index="1038" coord="84 100 7 12" bearing="0 1"/>
<Code index="1039" coord="94 88 7 11" bearing="1 4" advance="8"/>
<Code index="1040" coord="113 46 9 9" bearing="0 4"/>
<Code index="1041" coord="0 56 7 9" bearing="1 4" advance="8"/>
<Code index="1042" coord="8 56 7 9" bearing="1 4" advance="8"/>
<Code index="1043" coord="16 56 6 9" bearing="1 4"/>
<Code index="1044" coord="102 88 9 11" bearing="1 4" advance="10"/>
<Code index="1045" coord="23 56 6 9" bearing="1 4" advance="7"/>
<Code index="1046" coord="30 56 13 9" bearing="0 4" advance="14"/>
<Code index="1047" coord="44 56 7 9" bearing="1 4" advance="8"/>
<Code index="1048" coord="52 56 8 9" bearing="1 4" advance="9"/>
<Code index="1049" coord="92 100 8 12" bearing="1 1" advance="9"/>
<Code index="1050" coord="61 56 8 9" bearing="1 4"/>
<Code index="1051" coord="70 56 8 9" bearing="1 4" advance="9"/>
<Code index="1052" coord="79 56 9 9" bearing="1 4" advance="10"/>
<Code index="1053" coord="89 56 8 9" bearing="1 4" advance="9"/>
<Code index="1054" coord="98 56 8 9" bearing="1 4" advance="9"/>
<Code index="1055" coord="107 56 7 9" bearing="1 4" advance="8"/>
<Code index="1056" coord="115 56 6 9" bearing="1 4" advance="7"/>
<Code index="1057" coord="0 66 7 9" bearing="1 4" advance="8"/>
<Code index="1058" coord="8 66 7 9" bearing="0 4"/>
<Code index="1059" coord="16 66 7 9" bearing="0 4"/>
<Code index="1060" coord="24 66 9 9" bearing="1 4" advance="10"/>
<Code index="1061" coord="34 66 8 9" bearing="0 4"/>
<Code index="1062" coord="112 88 8 11" bearing="1 4" advance="9"/>
<Code index="1063" coord="43 66 7 9" bearing="1 4" advance="8"/>
<Code index="1064" coord="51 66 11 9" bearing="1 4" advance="12"/>
<Code index="1065" coord="0 100 12 11" bearing="1 4" advance="13"/>
<Code index="1066" coord="63 66 9 9" bearing="1 4" advance="10"/>
<Code index="1067" coord="73 66 9 9" bearing="1 4" advance="10"/>
<Code index="1068" coord="83 66 7 9" bearing="1 4" advance="8"/>
<Code index="1069" coord="91 66 8 9" bearing="1 4" advance="9"/>
<Code index="1070" coord="100 66 12 9" bearing="1 4" advance="13"/>
<Code index="1071" coord="113 66 7 9" bearing="1 4" advance="8"/>
<Code index="1072" coord="53 8 6 7" bearing="1 6" advance="7"/>
<Code index="1073" coord="101 100 7 12" bearing="0 1" advance="8"/>
<Code index="1074" coord="60 8 6 7" bearing="1 6" advance="7"/>
<Code index="1075" coord="67 8 5 7" bearing="1 6" advance="6"/>
<Code index="1076" coord="0 76 8 9" bearing="1 6" advance="9"/>
<Code index="1077" coord="73 8 6 7" bearing="1 6" advance="7"/>
<Code index="1078" coord="80 8 11 7" bearing="0 6" advance="12"/>
<Code index="1079" coord="92 8 5 7" bearing="1 6" advance="6"/>
<Code index="1080" coord="98 8 6 7" bearing="1 6" advance="7"/>
<Code index="1081" coord="91 76 6 10" bearing="1 3" advance="7"/>
<Code index="1082" coord="105 8 6 7" bearing="1 6" advance="7"/>
<Code index="1083" coord="112 8 7 7" bearing="0 6" advance="8"/>
<Code index="1084" coord="120 8 7 7" bearing="1 6" advance="8"/>
<Code index="1085" coord="0 16 6 7" bearing="1 6" advance="7"/>
<Code index="1086" coord="7 16 6 7" bearing="1 6" advance="7"/>
<Code index="1087" coord="14 16 6 7" bearing="1 6" advance="7"/>
<Code index="1088" coord="98 76 6 10" bearing="1 6" advance="7"/>
<Code index="1089" coord="21 16 5 7" bearing="1 6" advance="6"/>
<Code index="1090" coord="27 16 7 7" bearing="1 6" advance="8"/>
<Code index="1091" coord="105 76 8 10" bearing="0 6" advance="7"/>
<Code index="1092" coord="114 100 9 14" bearing="1 2" advance="10"/>
<Code index="1093" coord="35 16 7 7" bearing="0 6"/>
<Code index="1094" coord="9 76 7 9" bearing="1 6" advance="8"/>
<Code index="1095" coord="43 16 6 7" bearing="1 6" advance="7"/>
<Code index="1096" coord="50 16 9 7" bearing="1 6" advance="10"/>
<Code index="1097" coord="17 76 10 9" bearing="1 6" advance="11"/>
<Code index="1098" coord="60 16 9 7" bearing="0 6" advance="10"/>
<Code index="1099" coord="70 16 8 7" bearing="1 6" advance="9"/>
<Code index="1100" coord="79 16 6 7" bearing="1 6" advance="7"/>
<Code index="1101" coord="86 16 5 7" bearing="1 6" advance="6"/>
<Code index="1102" coord="92 16 9 7" bearing="1 6" advance="10"/>
<Code index="1103" coord="102 16 6 7" bearing="1 6" advance="7"/>
<Code index="1104" coord="114 76 6 10" bearing="1 3" advance="7"/>
<Code index="1105" coord="28 76 6 9" bearing="1 4" advance="7"/>
<Code index="8470" coord="35 76 13 9" bearing="0 4" advance="14"/>
<Code index="selected" coord="124 100 0 17"/>
<Code index="selected_back" coord="126 100 0 17"/>
<Code index="cursor" coord="0 118 2 17" advance="0"/>
<Code index="substitute" coord="0 88 7 11" bearing="1 4"/>
</Codes>
</Resource>
</MyGUI>

View File

@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layer" version="1.2">
<Layer type="SharedLayer" name="Wallpaper">
<Property key="Pick" value="false"/>
</Layer>
<Layer type="SharedLayer" name="Back">
<Property key="Pick" value="true"/>
</Layer>
<Layer type="OverlappedLayer" name="Overlapped">
<Property key="Pick" value="true"/>
</Layer>
<Layer type="SharedLayer" name="Middle">
<Property key="Pick" value="true"/>
</Layer>
<Layer type="OverlappedLayer" name="Modal">
<Property key="Pick" value="true"/>
</Layer>
<Layer type="SharedLayer" name="Main">
<Property key="Pick" value="true"/>
</Layer>
<Layer type="OverlappedLayer" name="Popup">
<Property key="Pick" value="true"/>
</Layer>
<Layer type="SharedLayer" name="FadeMiddle">
<Property key="Pick" value="false"/>
</Layer>
<Layer type="OverlappedLayer" name="Info">
<Property key="Pick" value="true"/>
</Layer>
<Layer type="SharedLayer" name="ToolTip">
<Property key="Pick" value="false"/>
</Layer>
<Layer type="SharedLayer" name="DragAndDrop">
<Property key="Pick" value="false"/>
</Layer>
<Layer type="SharedLayer" name="FadeBusy">
<Property key="Pick" value="false"/>
</Layer>
<Layer type="SharedLayer" name="Pointer">
<Property key="Pick" value="false"/>
</Layer>
<Layer type="SharedLayer" name="Fade">
<Property key="Pick" value="false"/>
</Layer>
<Layer type="SharedLayer" name="Statistic">
<Property key="Pick" value="false"/>
</Layer>
</MyGUI>

View File

@@ -0,0 +1,8 @@
#version 130
in vec4 Color;
in vec2 TexCoord;
uniform sampler2D Texture;
void main(void)
{
gl_FragColor = texture2D(Texture, TexCoord) * Color;
}

View File

@@ -0,0 +1,15 @@
#version 130
out vec4 Color;
out vec2 TexCoord;
in vec3 VertexPosition;
in vec4 VertexColor;
in vec2 VertexTexCoord;
uniform float YScale;
void main()
{
TexCoord = VertexTexCoord;
Color = VertexColor;
vec4 vpos = vec4(VertexPosition,1.0);
vpos.y *= YScale;
gl_Position = vpos;
}

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceImageSet" name="ArrowPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer" rate="0.15">
<Frame point="13 11" count="30"/>
<Frame point="13 52"/>
<Frame point="56 52"/>
<Frame point="91 52"/>
<Frame point="56 52"/>
<Frame point="13 52"/>
</Index>
</Group>
</Resource>
<Resource type="ResourceImageSet" name="BeamPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer">
<Frame point="45 8"/>
</Index>
</Group>
</Resource>
<Resource type="ResourceImageSet" name="SizeLeftPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer">
<Frame point="122 48"/>
</Index>
</Group>
</Resource>
<Resource type="ResourceImageSet" name="SizeRightPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer">
<Frame point="160 48"/>
</Index>
</Group>
</Resource>
<Resource type="ResourceImageSet" name="SizeHorzPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer">
<Frame point="123 87"/>
</Index>
</Group>
</Resource>
<Resource type="ResourceImageSet" name="SizeVertPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer">
<Frame point="164 90"/>
</Index>
</Group>
</Resource>
<Resource type="ResourceImageSet" name="HandPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer">
<Frame point="154 11"/>
</Index>
</Group>
</Resource>
<Resource type="ResourceImageSet" name="LinkPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer">
<Frame point="91 11"/>
</Index>
</Group>
</Resource>
</MyGUI>

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceImageSetPointer" name="arrow">
<Property key="Point" value="1 1"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="ArrowPointerImage"/>
</Resource>
<Resource type="ResourceImageSetPointer" name="beam">
<Property key="Point" value="16 16"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="BeamPointerImage"/>
</Resource>
<Resource type="ResourceImageSetPointer" name="size_left">
<Property key="Point" value="16 16"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="SizeLeftPointerImage"/>
</Resource>
<Resource type="ResourceImageSetPointer" name="size_right">
<Property key="Point" value="16 16"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="SizeRightPointerImage"/>
</Resource>
<Resource type="ResourceImageSetPointer" name="size_horz">
<Property key="Point" value="16 16"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="SizeHorzPointerImage"/>
</Resource>
<Resource type="ResourceImageSetPointer" name="size_vert">
<Property key="Point" value="16 16"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="SizeVertPointerImage"/>
</Resource>
<Resource type="ResourceImageSetPointer" name="hand">
<Property key="Point" value="16 16"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="HandPointerImage"/>
</Resource>
<Resource type="ResourceImageSetPointer" name="link">
<Property key="Point" value="1 1"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="LinkPointerImage"/>
</Resource>
</MyGUI>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI>
<MyGUI type="Font">
<Property key="Default" value="DejaVuSansFont_15"/>
<Property key="DefaultGenerated" value="DejaVuSansFontGenerated_15"/>
</MyGUI>
<MyGUI type="Pointer">
<Property key="Default" value="arrow"/>
<Property key="Layer" value="Pointer"/>
</MyGUI>
</MyGUI>

View File

@@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout" version="3.2.0">
<Widget type="Window" skin="WindowCS" position="0 0 590 825" layer="Overlapped" name="SettingsWindow">
<Property key="Caption" value="Settings"/>
<Property key="MinSize" value="200 200"/>
<Property key="Snap" value="true"/>
<Widget type="ScrollView" skin="ScrollViewEmpty" position="0 0 580 790" align="Stretch" name="ScrollView">
<Property key="CanvasSize" value="580 780"/>
<Property key="VisibleHScroll" value="true"/>
<Property key="VisibleVScroll" value="true"/>
<Property key="CanvasAlign" value="Default"/>
<Widget type="Button" skin="CheckBox" position="15 145 380 20" name="CheckboxNewLighting">
<Property key="Caption" value="Enable New Lighting (Old Lighting Not Exactly Like FL)"/>
<Property key="Enabled" value="true"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="15 170 360 20" name="CheckboxEnvironmentMaps">
<Property key="Caption" value="Enable Environment Maps (Starsphere Reflection)"/>
<Property key="Enabled" value="true"/>
</Widget>
<Widget type="Button" skin="Button" position="350 745 115 35" name="ButtonSave">
<Property key="Caption" value="Save Settings"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="15 490 130 20" name="CheckboxShadows">
<Property key="Caption" value="Enable Shadows"/>
<Property key="Enabled" value="true"/>
<Property key="Depth" value="-1"/>
<Property key="Alpha" value="1"/>
</Widget>
<Widget type="Widget" skin="PanelSkin" position="5 500 570 170" name="GroupBoxShadows">
<Property key="Enabled" value="true"/>
<Property key="Depth" value="0"/>
<Widget type="ComboBox" skin="ComboBox" position="175 35 100 25" name="ComboBoxShadowSplitPlanes">
<Property key="ModeDrop" value="true"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="10 40 150 15">
<Property key="Caption" value="Number of Split Planes:"/>
</Widget>
<Widget type="ComboBox" skin="ComboBox" position="175 60 100 25" name="ComboBoxShadowMapSize">
<Property key="ModeDrop" value="true"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="10 65 125 15">
<Property key="Caption" value="Shadow Map Size:"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="10 90 155 15">
<Property key="Caption" value="Shadow Casting Lights:"/>
</Widget>
<Widget type="ComboBox" skin="ComboBox" position="175 85 60 25" name="ComboBoxShadowLightCount">
<Property key="ModeDrop" value="true"/>
<Property key="AddItem" value="1"/>
<Property key="AddItem" value="2"/>
</Widget>
<Widget type="ComboBox" skin="ComboBox" position="175 10 100 25" name="ComboBoxShadowQuality">
<Property key="ModeDrop" value="true"/>
<Property key="AddItem" value="Custom"/>
<Property key="AddItem" value="Very Low"/>
<Property key="AddItem" value="Low"/>
<Property key="AddItem" value="Medium"/>
<Property key="AddItem" value="High"/>
<Property key="AddItem" value="Very High"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="10 15 115 15">
<Property key="Caption" value="Shadow Quality:"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="10 135 195 20" name="CheckboxAsteroidShadows">
<Property key="Caption" value="Enable Asteroid Shadows"/>
<Property key="Enabled" value="true"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="10 110 245 20" name="CheckboxShadowPCF">
<Property key="Caption" value="Enable Shadow Antialiasing (PCF)"/>
<Property key="Enabled" value="true"/>
</Widget>
</Widget>
<Widget type="Button" skin="CheckBox" position="15 275 175 20" name="CheckboxPostpocessing">
<Property key="Caption" value="Enable Postprocessing"/>
<Property key="Depth" value="-1"/>
</Widget>
<Widget type="Widget" skin="PanelSkin" position="5 285 570 110" name="GroupBoxPostprocessing">
<Property key="Enabled" value="true"/>
<Widget type="Button" skin="CheckBox" position="10 35 400 20" name="CheckBoxAutomaticExposure">
<Property key="Caption" value="Enable Automatic Camera Exposure (Early Version)"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="10 60 350 20" name="CheckboxLightScattering">
<Property key="Caption" value="Enable Light Scattering (Nebula + Asteroid Fields)"/>
</Widget>
<Widget type="ComboBox" skin="ComboBox" position="110 10 195 25" name="ComboBoxTonemapping">
<Property key="ModeDrop" value="true"/>
<Property key="AddItem" value="GT Sport (More Realistic)"/>
<Property key="AddItem" value="ACES (More Contrast)"/>
<Property key="Caption" value="GT Sport (More Realistic)"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="10 15 95 15">
<Property key="Caption" value="Tonemapping:"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="10 85 170 15">
<Property key="Caption" value="Light Scattering Sun limit:"/>
</Widget>
<Widget type="ComboBox" skin="ComboBox" position="180 80 60 25" name="ComboBoxLightScatteringSunLimit">
<Property key="ModeDrop" value="true"/>
</Widget>
</Widget>
<Widget type="Button" skin="CheckBox" position="15 195 195 20" name="CheckboxParallaxMaps">
<Property key="Caption" value="Enable Parallax Mapping"/>
<Property key="Enabled" value="true"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="15 220 395 20" name="CheckboxHQDiffuse">
<Property key="Caption" value="Enable High Quality Diffuse Lighting (Planets, Rocks etc.)"/>
<Property key="Enabled" value="true"/>
</Widget>
<Widget type="EditBox" skin="WordWrapEmpty" position="15 55 560 35">
<Property key="Caption" value="Warning: Main menu background scene does not use correct rendering yet (do not use for settings testing)"/>
<Property key="WordWrap" value="true"/>
<Property key="TextColour" value="1 0.187135 0.187135"/>
</Widget>
<Widget type="ComboBox" skin="ComboBox" position="310 90 60 25" name="ComboBoxMSAA">
<Property key="AddItem" value="Off"/>
<Property key="AddItem" value="2x"/>
<Property key="AddItem" value="4x"/>
<Property key="AddItem" value="8x"/>
<Property key="ModeDrop" value="true"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="15 95 280 20">
<Property key="Caption" value="Antialiasing (MSAA, Needs Game Restart):"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="15 120 290 20">
<Property key="Caption" value="Anisotropic Filtering (Needs Game Restart):"/>
</Widget>
<Widget type="ComboBox" skin="ComboBox" position="310 115 60 25" name="ComboBoxAnistropicFiltering">
<Property key="ModeDrop" value="true"/>
<Property key="AddItem" value="Off"/>
<Property key="AddItem" value="2x"/>
<Property key="AddItem" value="4x"/>
<Property key="AddItem" value="8x"/>
<Property key="AddItem" value="16x"/>
</Widget>
<Widget type="Button" skin="Button" position="110 745 115 35" name="ButtonUndoChanges">
<Property key="Caption" value="Undo Changes"/>
</Widget>
<Widget type="Widget" skin="PanelSkin" position="5 680 570 60">
<Widget type="Button" skin="CheckBox" position="10 10 415 25" name="CheckBoxDisableGUI">
<Property key="Caption" value="Disable FL GUI Rendering (for Videos etc.)"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="10 35 105 20" name="CheckBoxShowFPS">
<Property key="Caption" value="Show FPS"/>
</Widget>
</Widget>
<Widget type="TextBox" skin="TextBox" position="15 670 175 15">
<Property key="Caption" value="Miscellaneous"/>
</Widget>
<Widget type="EditBox" skin="WordWrapEmpty" position="175 20 400 35" name="WordWrapGraphicsCard">
<Property key="WordWrap" value="true"/>
<Property key="TextColour" value="0.959064 0.916189 0.381382"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="15 20 160 20">
<Property key="Caption" value="Selected Graphics Card:"/>
<Property key="TextColour" value="0.959064 0.916189 0.381382"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="15 0 120 20">
<Property key="Caption" value="Renderer Version: "/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="135 0 440 20" name="TextBoxRendererVersion"/>
<Widget type="Widget" skin="PanelSkin" position="5 415 570 75" name="GroupBoxClusteredShading">
<Widget type="ComboBox" skin="ComboBox" position="180 5 60 30" name="ComboBoxMaxLights">
<Property key="ModeDrop" value="true"/>
</Widget>
<Widget type="TextBox" skin="TextBox" position="10 10 155 20">
<Property key="Caption" value="Max. Number of Lights:"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="10 35 550 25" name="CheckBoxReplaceFakeLights">
<Property key="Caption" value="Replace Fake Lights with Real Lights (Needs Postprocessing + At Least 4x MSAA)"/>
</Widget>
</Widget>
<Widget type="Button" skin="CheckBox" position="10 405 210 20" name="CheckBoxClusteredShading">
<Property key="Caption" value="Enable Clustered Shading"/>
</Widget>
<Widget type="Button" skin="CheckBox" position="15 245 530 25" name="CheckBoxPreciseSRGB">
<Property key="Caption" value="Always Use Accurate SRGB Color Conversion (Slower, But Better Colors)"/>
</Widget>
</Widget>
</Widget>
<CodeGeneratorSettings/>
</MyGUI>

View File

@@ -0,0 +1,59 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//
//Color conversion include shader for FLAR by Schmackbolzen
vec3 ToLinearAccurate(vec3 inColor)
{
vec3 treshold=step(vec3(0.04045),inColor);
return mix(inColor / 12.92,pow ((inColor + 0.055) / 1.055, vec3(2.4)),treshold);
}
vec3 ToGammaCorrectedAccurate(vec3 inColor)
{
vec3 treshold=step(vec3(0.0031308),inColor);
return mix(inColor * 12.92,pow (inColor, vec3(1.0/2.4)) * 1.055 - 0.055,treshold);
}
vec3 ToLinearFast(vec3 inColor)
{
return pow(inColor,vec3(2.2));
}
vec3 ToGammaCorrectedFast(vec3 inColor)
{
return pow(inColor.rgb,1./vec3(2.2));
}
$SRGB_CONVERSION_DEFINE
#ifdef ALWAYS_USE_FAST_SRGB_CONVERSION
vec3 ToLinear(vec3 inColor)
{
return ToLinearFast(inColor);
}
vec3 ToGammaCorrected(vec3 inColor)
{
return ToGammaCorrectedFast(inColor);
}
#endif
#ifdef ALWAYS_USE_ACCURATE_SRGB_CONVERSION
vec3 ToLinear(vec3 inColor)
{
return ToLinearAccurate(inColor);
}
vec3 ToGammaCorrected(vec3 inColor)
{
return ToGammaCorrectedAccurate(inColor);
}
#endif
//Works on gamma compressed and linear values (note that the values are not identical)
//Values are from https://en.wikipedia.org/wiki/Luma_(video)
float ToLuma(vec3 color)
{
return dot(color, vec3(0.2126, 0.7152f, 0.0722f));
}

View File

@@ -0,0 +1,47 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on https://learnopengl.com/PBR/IBL/Specular-IBL
#version 330
#include "ColorConversion.inc"
in vec3 WorldPos;
uniform samplerCube environmentMap;
uniform bool convertToLinear;
const float PI = 3.14159265359;
void main()
{
vec3 N = normalize(WorldPos);
vec3 irradiance = vec3(0.0);
// tangent space calculation from origin point
vec3 up = vec3(0.0, 1.0, 0.0);
vec3 right = normalize(cross(up, N));
up = normalize(cross(N, right));
float sampleDelta = 0.025;
float nrSamples = 0.0f;
for(float phi = 0.0; phi < 2.0 * PI; phi += sampleDelta)
{
for(float theta = 0.0; theta < 0.5 * PI; theta += sampleDelta)
{
// spherical to cartesian (in tangent space)
vec3 tangentSample = vec3(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta));
// tangent space to world
vec3 sampleVec = tangentSample.x * right + tangentSample.y * up + tangentSample.z * N;
vec3 texColor=texture(environmentMap, sampleVec).rgb;
if(convertToLinear)
texColor=ToLinear(texColor);
irradiance += texColor * cos(theta) * sin(theta);
nrSamples++;
}
}
irradiance = PI * irradiance * (1.0 / float(nrSamples));
gl_FragColor = vec4(ToGammaCorrected(irradiance), 1.0);
}

View File

@@ -0,0 +1,81 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//
//PBR bloom downsample shader for FLAR by Schmackbolzen based on code from https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom
//The code has been modified to be more like the original presentation and also blog article from the original
//authors of the technique (referenced in the link above).
#version 330
#include "ColorConversion.inc"
uniform sampler2D srcTexture;
uniform vec2 srcTexelSize[$NUM_MIPS];
uniform int mipLevel;
in vec2 texCoord;
layout (location = 0) out vec3 downsample;
float KarisAverage(vec3 col)
{
// Formula is 1 / (1 + luma)
float luma = ToLuma(col);
return 1.0f / (1.0f + luma);
}
void main()
{
vec2 texelSize = srcTexelSize[mipLevel];
float x = texelSize.x;
float y = texelSize.y;
// Take 13 samples around current texel:
// a - b - c
// - j - k -
// d - e - f
// - l - m -
// g - h - i
// === ('e' is the current texel) ===
vec3 a = texture(srcTexture, vec2(texCoord.x - 2*x, texCoord.y + 2*y)).rgb;
vec3 b = texture(srcTexture, vec2(texCoord.x, texCoord.y + 2*y)).rgb;
vec3 c = texture(srcTexture, vec2(texCoord.x + 2*x, texCoord.y + 2*y)).rgb;
vec3 d = texture(srcTexture, vec2(texCoord.x - 2*x, texCoord.y)).rgb;
vec3 e = texture(srcTexture, vec2(texCoord.x, texCoord.y)).rgb;
vec3 f = texture(srcTexture, vec2(texCoord.x + 2*x, texCoord.y)).rgb;
vec3 g = texture(srcTexture, vec2(texCoord.x - 2*x, texCoord.y - 2*y)).rgb;
vec3 h = texture(srcTexture, vec2(texCoord.x, texCoord.y - 2*y)).rgb;
vec3 i = texture(srcTexture, vec2(texCoord.x + 2*x, texCoord.y - 2*y)).rgb;
vec3 j = texture(srcTexture, vec2(texCoord.x - x, texCoord.y + y)).rgb;
vec3 k = texture(srcTexture, vec2(texCoord.x + x, texCoord.y + y)).rgb;
vec3 l = texture(srcTexture, vec2(texCoord.x - x, texCoord.y - y)).rgb;
vec3 m = texture(srcTexture, vec2(texCoord.x + x, texCoord.y - y)).rgb;
vec3 groups[5];
const float factor1=0.125f/4.f;
const float factor2=0.5f/4.f;
groups[0] = (a+b+d+e) * factor1;
groups[1] = (b+c+e+f) * factor1;
groups[2] = (d+e+g+h) * factor1;
groups[3] = (e+f+h+i) * factor1;
groups[4] = (j+k+l+m) * factor2;
if (mipLevel == 0)
{
float avg1=KarisAverage(groups[0]);
float avg2=KarisAverage(groups[1]);
float avg3=KarisAverage(groups[2]);
float avg4=KarisAverage(groups[3]);
float avg5=KarisAverage(groups[4]);
float normalization=avg1+avg2+avg3+avg4+avg5+0.0001;
downsample = (groups[0]*avg1+groups[1]*avg2+groups[2]*avg3+groups[3]*avg4+groups[4]*avg5)/normalization;
downsample = max(downsample, 0.0001f);
}
else
{
downsample = (groups[0]+groups[1]+groups[2]+groups[3]+groups[4]);
}
}

View File

@@ -0,0 +1,18 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//
//PBR bloom downsample shader for FLAR by Schmackbolzen based on code from https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom
#version 330
layout (location = 0) in vec2 aPosition;
layout (location = 1) in vec2 aTexCoord;
out vec2 texCoord;
void main()
{
gl_Position = vec4(aPosition.x, aPosition.y, 0.0, 1.0);
texCoord = aTexCoord;
}

View File

@@ -0,0 +1,46 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//
//PBR bloom upsample shader for FLAR by Schmackbolzen based on code from https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom
//The only bug fix is using different filter radii for each direction since the texture is not square
#version 330
uniform sampler2D srcTexture;
uniform float filterRadiusX;
uniform float filterRadiusY;
in vec2 texCoord;
layout (location = 0) out vec3 upsample;
void main()
{
float x = filterRadiusX;
float y = filterRadiusY;
// Take 9 samples around current texel:
// a - b - c
// d - e - f
// g - h - i
// === ('e' is the current texel) ===
vec3 a = texture(srcTexture, vec2(texCoord.x - x, texCoord.y + y)).rgb;
vec3 b = texture(srcTexture, vec2(texCoord.x, texCoord.y + y)).rgb;
vec3 c = texture(srcTexture, vec2(texCoord.x + x, texCoord.y + y)).rgb;
vec3 d = texture(srcTexture, vec2(texCoord.x - x, texCoord.y)).rgb;
vec3 e = texture(srcTexture, vec2(texCoord.x, texCoord.y)).rgb;
vec3 f = texture(srcTexture, vec2(texCoord.x + x, texCoord.y)).rgb;
vec3 g = texture(srcTexture, vec2(texCoord.x - x, texCoord.y - y)).rgb;
vec3 h = texture(srcTexture, vec2(texCoord.x, texCoord.y - y)).rgb;
vec3 i = texture(srcTexture, vec2(texCoord.x + x, texCoord.y - y)).rgb;
// Apply weighted distribution, by using a 3x3 tent filter:
// 1 | 1 2 1 |
// -- * | 2 4 2 |
// 16 | 1 2 1 |
upsample = e*4.0;
upsample += (b+d+f+h)*2.0;
upsample += (a+c+g+i);
upsample *= 1.0 / 16.0;
}

View File

@@ -0,0 +1,18 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//
//PBR bloom upsample shader for FLAR by Schmackbolzen based on code from https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom
#version 330
layout (location = 0) in vec2 aPosition;
layout (location = 1) in vec2 aTexCoord;
out vec2 texCoord;
void main()
{
gl_Position = vec4(aPosition.x, aPosition.y, 0.0, 1.0);
texCoord = aTexCoord;
}

128
FLARDATA/Shader/brdf.fp Normal file
View File

@@ -0,0 +1,128 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on https://learnopengl.com/PBR/IBL/Specular-IBL
#version 330
in vec2 TexCoords;
const float PI = 3.14159265359;
// ----------------------------------------------------------------------------
// http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html
// efficient VanDerCorpus calculation.
float RadicalInverse_VdC(uint bits)
{
bits = (bits << 16u) | (bits >> 16u);
bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
return float(bits) * 2.3283064365386963e-10; // / 0x100000000
}
// ----------------------------------------------------------------------------
vec2 Hammersley(uint i, uint N)
{
return vec2(float(i)/float(N), RadicalInverse_VdC(i));
}
// ----------------------------------------------------------------------------
vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughnessSquared)
{
//float a = roughness*roughness;
float a = roughnessSquared;
float phi = 2.0 * PI * Xi.x;
float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a*a - 1.0) * Xi.y));
float sinTheta = sqrt(1.0 - cosTheta*cosTheta);
// from spherical coordinates to cartesian coordinates - halfway vector
vec3 H;
H.x = cos(phi) * sinTheta;
H.y = sin(phi) * sinTheta;
H.z = cosTheta;
// from tangent-space H vector to world-space sample vector
vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
vec3 tangent = normalize(cross(up, N));
vec3 bitangent = cross(N, tangent);
vec3 sampleVec = tangent * H.x + bitangent * H.y + N * H.z;
return normalize(sampleVec);
}
// ----------------------------------------------------------------------------
float GeometrySchlickGGX(float NdotV, float roughness)
{
// note that we use a different k for IBL
float a = roughness;
float k = (a * a) / 2.0;
float nom = NdotV;
float denom = NdotV * (1.0 - k) + k + 0.00001; // 0.00001 to prevent divide by zero.
return nom / denom;
}
// ----------------------------------------------------------------------------
float GeometrySmith(float NdotV, float NdotL, float roughness)
{
float ggx2 = GeometrySchlickGGX(NdotV, roughness);
float ggx1 = GeometrySchlickGGX(NdotL, roughness);
return ggx1 * ggx2;
}
//"PBR Diffuse Lighting for GGX+Smith Microsurfaces", Earl Hammon, Jr.
float GeometrySmithG2Hammon(float NdotV, float NdotL, float roughnessSquared)
{
float nom = 2*NdotL*NdotV;
float denom = mix(2*NdotL*NdotV,NdotL+NdotV,roughnessSquared) + 0.00001; // 0.00001 to prevent divide by zero.
return nom/denom;
}
// ----------------------------------------------------------------------------
vec2 IntegrateBRDF(float NdotV, float roughness)
{
vec3 V;
V.x = sqrt(1.0 - NdotV*NdotV);
V.y = 0.0;
V.z = NdotV;
float A = 0.0;
float B = 0.0;
vec3 N = vec3(0.0, 0.0, 1.0);
float roughnessSquared = roughness*roughness;
const uint SAMPLE_COUNT = 1024u;
for(uint i = 0u; i < SAMPLE_COUNT; ++i)
{
// generates a sample vector that's biased towards the
// preferred alignment direction (importance sampling).
vec2 Xi = Hammersley(i, SAMPLE_COUNT);
vec3 H = ImportanceSampleGGX(Xi, N, roughnessSquared);
vec3 L = normalize(2.0 * dot(V, H) * H - V);
float NdotL = max(L.z, 0.0);
if(NdotL > 0.0)
{
float NdotH = max(H.z, 0.0);
float VdotH = max(dot(V, H), 0.0);
//float G = GeometrySmith(NdotV, NdotL, roughness);
float G = GeometrySmithG2Hammon(NdotV, NdotL, roughnessSquared);
float G_Vis = (G * VdotH) / (NdotH * NdotV);
float Fc = pow(1.0 - VdotH, 5.0);
A += (1.0 - Fc) * G_Vis;
B += Fc * G_Vis;
}
}
A /= float(SAMPLE_COUNT);
B /= float(SAMPLE_COUNT);
return vec2(A, B);
}
// ----------------------------------------------------------------------------
void main()
{
vec2 integratedBRDF = IntegrateBRDF(TexCoords.x, TexCoords.y);
gl_FragColor.rg = integratedBRDF;
}

17
FLARDATA/Shader/brdf.vs Normal file
View File

@@ -0,0 +1,17 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on https://learnopengl.com/PBR/IBL/Specular-IBL
#version 330
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoords;
out vec2 TexCoords;
void main()
{
TexCoords = aTexCoords;
gl_Position = vec4(aPos, 1.0);
}

View File

@@ -0,0 +1,18 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on https://learnopengl.com/PBR/IBL/Specular-IBL
#version 330
layout (location = 0) in vec3 aPos;
out vec3 WorldPos;
uniform mat4 projectionMat;
uniform mat4 viewMat;
void main()
{
WorldPos = aPos;
gl_Position = projectionMat * viewMat * vec4(WorldPos, 1.0);
}

View File

@@ -0,0 +1,20 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Depth only shader for FLAR by Schmackbolzen
#version 330
uniform sampler2D texture;
uniform float alphaTestValue;
in vec2 outTexCoords;
void main()
{
if (alphaTestValue > 0)
{
if (texture2D(texture, outTexCoords).a < alphaTestValue)
discard;
}
gl_FragColor = vec4(1,0,0,1);
}

View File

@@ -0,0 +1,30 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on "Parallel-Split Shadow Maps on Programmable GPUs" GPU Gems 3 (2005)
#version 330
const int g_iNumSplits = $NUM_SPLITS;
layout (triangles) in;
layout (triangle_strip, max_vertices = 3) out;
flat in int splitIndex[];
in vec2 inTexCoords[];
uniform mat4 mvpMat[g_iNumSplits];
out vec2 outTexCoords;
void main()
{
for(int iVertex = 0; iVertex < 3; iVertex++)
{
int iSplit = splitIndex[iVertex];
gl_Layer = iSplit;
gl_Position = mvpMat[iSplit]*gl_in[iVertex].gl_Position;
outTexCoords = inTexCoords[iVertex];
EmitVertex();
}
EndPrimitive();
}

View File

@@ -0,0 +1,46 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on "Parallel-Split Shadow Maps on Programmable GPUs" GPU Gems 3 (2005)
#version 330
layout (location = 0) in vec4 inPosition;
layout (location = 4) in vec2 inTexCoord0;
layout (location = 6) in mat4 inMVPMatInstanced;
layout (location = 10) in int inSplitIndexInstanced;
out vec2 inTexCoords;
flat out int splitIndex;
const int g_iNumSplits = $NUM_SPLITS;
uniform mat4 worldMat;
uniform bool isInstanced;
uniform bool isInstancedSplits;
uniform float alphaTestValue;
uniform int firstSplit;
void main(){
mat4 mvp;
if(!isInstanced)
mvp=worldMat;
else
{
mvp=inMVPMatInstanced;
}
if(!isInstancedSplits)
{
splitIndex = firstSplit + gl_InstanceID;
}
else
{
splitIndex = inSplitIndexInstanced;
}
gl_Position = mvp * inPosition;
if (alphaTestValue > 0)
inTexCoords = inTexCoord0.st;
}

View File

@@ -0,0 +1,401 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Fixed function shader for FLAR by Schmackbolzen
#version 330
#define TEXTURESTAGE_COUNT 2
#include "ColorConversion.inc"
struct Light{
vec3 ambient;
vec3 diffuse;
vec4 position;
vec3 spotDirection;
float spotExponent;
float spotCosPhi;
float spotCosTheta;
float constantAttenuation;
float linearAttenuation;
float quadraticAttenuation;
float range;
};
struct glFogParameters
{
vec3 color;
float density;
float start;
float end;
};
uniform Light glLightSource[8];
uniform glFogParameters glFog;
uniform sampler2D textures[TEXTURESTAGE_COUNT];
uniform samplerCube cubemap;
uniform int colorOp[TEXTURESTAGE_COUNT];
uniform int alphaOp[TEXTURESTAGE_COUNT];
uniform int colorArg1[TEXTURESTAGE_COUNT];
uniform int colorArg2[TEXTURESTAGE_COUNT];
uniform int alphaArg1[TEXTURESTAGE_COUNT];
uniform int alphaArg2[TEXTURESTAGE_COUNT];
uniform bool textureBound[TEXTURESTAGE_COUNT];
uniform vec3 ambientColor;
uniform vec3 matAmbientColor;
uniform vec4 matDiffuseColor;
uniform vec3 matEmissiveColor;
uniform vec4 matSpecularColor;
uniform float alphaTestValue;
uniform int alphaTestCompareMethod;
uniform int lightCount;
uniform int texture1Index;
uniform int fogMode;
uniform bool enableVertexColor;
uniform bool vertexColorAvailable;
uniform bool specularVertexColorAvailable;
uniform bool enableLighting;
uniform bool enableAlphaTest;
uniform bool enableCubemap;
uniform bool enableRHWCoordinates;
uniform bool enableAccurateSRGB;
in vec3 N;
in vec3 v;
in float RHWdepth;
in vec2 texCoords[2];
in vec4 vertexColor;
in vec4 vertexColorSecondary;
in float fogEnd;
in float fogScale;
#define D3DTA_DIFFUSE 0x00000000 // select diffuse color (read only)
#define D3DTA_CURRENT 0x00000001 // select stage destination register (read/write)
#define D3DTA_TEXTURE 0x00000002 // select texture color (read only)
#define D3DTA_TFACTOR 0x00000003 // select D3DRS_TEXTUREFACTOR (read only)
#define D3DTA_SPECULAR 0x00000004 // select specular color (read only)
#define D3DTA_TEMP 0x00000005 // select temporary register color (read/write)
#define D3DTA_COMPLEMENT 0x00000010 // take 1.0 x (read modifier)
#define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components (read modifier)
#define D3DTOP_DISABLE 1 // disables stage
#define D3DTOP_SELECTARG1 2 // the default
#define D3DTOP_SELECTARG2 3
// Modulate
#define D3DTOP_MODULATE 4 // multiply args together
#define D3DTOP_MODULATE2X 5 // multiply and << 1 bit
#define D3DTOP_MODULATE4X 6 // multiply and << 2 bits
// Add
#define D3DTOP_ADD 7 // add arguments together
#define D3DTOP_ADDSIGNED 8 // add with -0.5 bias
#define D3DTOP_ADDSIGNED2X 9 // as above but left << 1 bit
vec3 ToLinear(vec3 inColor)
{
if (enableAccurateSRGB)
return ToLinearAccurate(inColor);
else
return ToLinearFast(inColor);
}
vec3 ToGammaCorrected(vec3 inColor)
{
if (enableAccurateSRGB)
return ToGammaCorrectedAccurate(inColor);
else
return ToGammaCorrectedFast(inColor);
}
vec4 GetColorForStage(const int stage, int colorArg, int alphaArg, vec4 previousColor, vec4 gouradDiffuseColor, vec4 specularColor, vec2 texCoords, vec3 cubeMapTexCoords)
{
vec4 color;
vec4 textureColor;
if(colorArg == D3DTA_TEXTURE || alphaArg == D3DTA_TEXTURE)
if(textureBound[stage])
//Use if because some glsl compilers can not propagate the constant stage even though it has a constant value
//when the function gets called (0 or 1) and complain about missing glsl compliance for texture lookup (no constant index)
if (stage==0)
textureColor=texture2D(textures[0],texCoords);
else
if (!enableCubemap)
textureColor=texture2D(textures[1],texCoords);
else
textureColor=texture(cubemap,cubeMapTexCoords);
else
textureColor=vec4(1);
//textureColor.rgb=ToLinear(textureColor.rgb);
if(colorArg == D3DTA_DIFFUSE)
color.rgb=gouradDiffuseColor.rgb;
else if(colorArg == D3DTA_CURRENT)
color.rgb=previousColor.rgb;
else if(colorArg == D3DTA_TEXTURE)
color.rgb=textureColor.rgb;
else if(colorArg == D3DTA_SPECULAR)
color.rgb =specularColor.rgb;
else
color=vec4(1,0,0,1);
if(alphaArg == D3DTA_DIFFUSE)
color.a=gouradDiffuseColor.a;
else if(alphaArg == D3DTA_CURRENT)
color.a=previousColor.a;
else if(alphaArg == D3DTA_TEXTURE)
color.a=textureColor.a;
else if(alphaArg == D3DTA_SPECULAR)
color.a =specularColor.a;
else
color=vec4(1,0,0,1);
return color;
}
vec4 ApplyFunctionForStage(const int stage, vec4 previousColor, vec4 gouradDiffuseColor, vec4 specularColor, vec2 texCoords, vec3 cubeMapTexCoords)
{
vec4 color1=GetColorForStage(stage,colorArg1[stage],alphaArg1[stage], previousColor, gouradDiffuseColor, specularColor, texCoords, cubeMapTexCoords);
vec4 color2=GetColorForStage(stage,colorArg2[stage],alphaArg2[stage], previousColor, gouradDiffuseColor, specularColor, texCoords, cubeMapTexCoords);
if (colorOp[stage]==D3DTOP_SELECTARG2)
{
color1.rgb = color2.rgb;
}
else if (colorOp[stage]==D3DTOP_MODULATE)
{
color1.rgb*=color2.rgb;
}
else if (colorOp[stage]==D3DTOP_MODULATE2X)
{
color1.rgb=color1.rgb*color2.rgb*4.6; //2^2.2 since rendering is gamma correct
}
else if (colorOp[stage]==D3DTOP_MODULATE4X)
{
color1.rgb=color1.rgb*color2.rgb*21.11; //4^2.2 since rendering is gamma correct
}
else if (colorOp[stage]==D3DTOP_ADD)
{
color1.rgb=color1.rgb+color2.rgb;
}
else if (colorOp[stage]==D3DTOP_ADDSIGNED)
{
color1.rgb=color1.rgb+color2.rgb-0.5;
}
else if (colorOp[stage]==D3DTOP_ADDSIGNED2X)
{
color1.rgb=(color1.rgb+color2.rgb-0.5)*4.6; //2^2.2 since rendering is gamma correct
}
if (alphaOp[stage]==D3DTOP_SELECTARG2)
{
color1.a = color2.a;
}
else if (alphaOp[stage]==D3DTOP_MODULATE)
{
color1.a*=color2.a;
}
else if (alphaOp[stage]==D3DTOP_MODULATE2X)
{
color1.a=(color1.a*color2.a)*4.6; //2^2.2 since rendering is gamma correct
}
else if (alphaOp[stage]==D3DTOP_MODULATE4X)
{
color1.a=(color1.a*color2.a)*21.11; //4^2.2 since rendering is gamma correct
}
else if (alphaOp[stage]==D3DTOP_ADD)
{
color1.a=(color1.a+color2.a);
}
else if (alphaOp[stage]==D3DTOP_ADDSIGNED)
{
color1.a=color1.a+color2.a-0.5;
}
else if (alphaOp[stage]==D3DTOP_ADDSIGNED2X)
{
color1.a=(color1.a+color2.a-0.5)*4.6; //2^2.2 since rendering is gamma correct
}
color1.a=pow(color1.a,1.2);
return color1;
}
void main()
{
vec4 gouradDiffuseColor;
vec4 specularColor;
vec3 vertexAmbientColor;
if (enableLighting)
{
if(enableVertexColor)
{
float alpha = vertexColorAvailable ? vertexColor.a : matDiffuseColor.a;
if (specularVertexColorAvailable)
{
vertexAmbientColor=ToLinear(vertexColorSecondary.rgb);
gouradDiffuseColor=vec4(ambientColor*vertexAmbientColor,alpha);
}
else
{
vertexAmbientColor=matAmbientColor.rgb;
gouradDiffuseColor=vec4(ambientColor*vertexAmbientColor,alpha);
}
}
else
{
vertexAmbientColor=matAmbientColor.rgb;
gouradDiffuseColor=vec4(ambientColor*vertexAmbientColor,matDiffuseColor.a);
}
//FL never has specular lighting enabled
specularColor=vec4(0,0,0,0);
}
else
{
if(vertexColorAvailable)
{
//gouradDiffuseColor=vec4(ToLinear(vertexColor.rgb),vertexColor.a);
//TODO: Weird bug with MSAA and float16 render target
vec4 vertexColorAboveZero=max(vertexColor,0);
gouradDiffuseColor=vec4(ToLinear(vertexColorAboveZero.rgb),vertexColorAboveZero.a);
}
else
gouradDiffuseColor=vec4(1,1,1,1);
if(specularVertexColorAvailable)
specularColor=vec4(ToLinear(vertexColorSecondary.rgb),vertexColor.a);
else
specularColor=vec4(0,0,0,0);
}
vec3 normal=normalize(N);
if (enableLighting)
{
gouradDiffuseColor.rgb+=matEmissiveColor;
vec3 vertexDiffuseColor=vertexColorAvailable&&enableVertexColor ? ToLinear(vertexColor.rgb): matDiffuseColor.rgb;
for (int index = 0; index < lightCount; index++)
{
vec3 lightDir;
float attenFactor;
// attenuation and light direction
if(glLightSource[index].spotCosTheta != -1.)
{
lightDir = normalize(glLightSource[index].position.xyz - v);
float angle = max(dot(normalize(glLightSource[index].spotDirection), -lightDir),0);
if (angle > glLightSource[index].spotCosPhi)
{
float spotAtten;
if (angle < glLightSource[index].spotCosTheta)
spotAtten = (angle-glLightSource[index].spotCosPhi)/(glLightSource[index].spotCosTheta-glLightSource[index].spotCosPhi);
else
spotAtten = 1;
if(glLightSource[index].spotExponent != 1.0)
spotAtten = pow(spotAtten, glLightSource[index].spotExponent);
float dist = distance(glLightSource[index].position.xyz, v);
attenFactor = spotAtten * min(1.0/ (glLightSource[index].constantAttenuation +
glLightSource[index].linearAttenuation * dist +
glLightSource[index].quadraticAttenuation * dist * dist),1);
}
else
attenFactor = 0.;
}
else if (glLightSource[index].position.w != 0.0)
{
// positional light source
float dist = distance(glLightSource[index].position.xyz, v);
if (dist <= glLightSource[index].range )
{
attenFactor = min(1.0/( glLightSource[index].constantAttenuation +
glLightSource[index].linearAttenuation * dist +
glLightSource[index].quadraticAttenuation * dist * dist ),1);
lightDir = normalize(glLightSource[index].position.xyz - v);
}
else
attenFactor = 0;
}
else
{
attenFactor = 1;
lightDir = normalize(glLightSource[index].position.xyz);
}
if(attenFactor > 0)
{
float intensity = max(dot(normal,lightDir),0.0);
vec3 lightColorAmbient = glLightSource[index].ambient.rgb*vertexAmbientColor;
vec3 lightColorDiffuse = glLightSource[index].diffuse.rgb*vertexDiffuseColor*intensity;
gouradDiffuseColor.rgb += (lightColorAmbient + lightColorDiffuse)*attenFactor;
}
}
}
vec4 finalColor=gouradDiffuseColor;
if (colorOp[0]!=D3DTOP_DISABLE)
{
vec3 cubeMapTexCoords;
finalColor=ApplyFunctionForStage(0,finalColor,gouradDiffuseColor,specularColor,texCoords[0], cubeMapTexCoords);
if (colorOp[1]!=D3DTOP_DISABLE)
{
if(enableCubemap)
cubeMapTexCoords=reflect(v,normal);
finalColor=ApplyFunctionForStage(1,finalColor,gouradDiffuseColor,specularColor,texCoords[1], cubeMapTexCoords);
}
}
else
finalColor=gouradDiffuseColor;
if (enableAlphaTest)
if(alphaTestCompareMethod==5)
{
if( finalColor.a <= alphaTestValue)
discard;
}
else if(alphaTestCompareMethod==2)
{
if( finalColor.a > alphaTestValue)
discard;
}
else
finalColor =vec4(1,0,0,1);
if (fogMode > 0)
{
float z;
if(enableRHWCoordinates)
z = RHWdepth;
else
//Radial fog
z = length(v);
const float LOG2E = 1.442695;
float fogFactor;
if (fogMode == 3)
{
fogFactor = (fogEnd - z) * fogScale;
}
else if (fogMode == 1)
{
fogFactor =exp(-glFog.density * z);
}
else if (fogMode == 2)
{
fogFactor = exp2(-glFog.density * glFog.density * z * z * LOG2E);
}
else
fogFactor = 1;
fogFactor = clamp(fogFactor, 0.0, 1.0);
finalColor.rgb = mix(glFog.color.rgb,finalColor.rgb, fogFactor);
}
gl_FragColor = vec4(ToGammaCorrected(finalColor.rgb), finalColor.a);
//gl_FragColor = finalColor;
}

View File

@@ -0,0 +1,109 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Fixed function shader for FLAR by Schmackbolzen
#version 330
out vec2 texCoords[2];
out vec3 N;
out vec3 v;
out float RHWdepth;
out vec4 vertexColor;
out vec4 vertexColorSecondary;
out float fogEnd;
out float fogScale;
struct glFogParameters
{
vec3 color;
float density;
float start;
float end;
};
uniform glFogParameters glFog;
uniform bool enableRHWCoordinates;
uniform mat4 modelViewMat;
uniform mat4 projectionMat;
uniform mat3 normalMat;
uniform vec2 projCorrection;
uniform mat4 textureMatrix[2];
uniform bool isInstanced;
uniform bool isInstancedTransparent;
uniform bool isInstancedFog;
uniform bool enableTextureTransform0;
uniform bool enableTextureTransform1;
uniform int texture1Index;
layout (location = 0) in vec4 inPosition;
layout (location = 1) in vec3 inNormal;
layout (location = 2) in vec4 inColor;
layout (location = 3) in vec4 inSecondColor;
layout (location = 4) in vec4 inTexCoord0;
layout (location = 6) in mat4 inModelViewMatInstanced;
layout (location = 10) in float inAlphaValue;
layout (location = 11) in vec2 inFogStartEndInstanced;
void main()
{
mat4 mv;
if(!isInstanced)
mv=modelViewMat;
else
mv=inModelViewMatInstanced;
vertexColor.rgba = (inColor).bgra;
vertexColorSecondary.rgba=inSecondColor.bgra;
if(isInstancedTransparent)
{
vertexColor.a = inAlphaValue;
}
if(!isInstancedFog)
{
fogEnd = glFog.end;
fogScale = 1.0f / (glFog.end - glFog.start);
}
else
{
fogEnd = inFogStartEndInstanced.y;
fogScale = 1.0f / (inFogStartEndInstanced.y - inFogStartEndInstanced.x);
}
v = vec3(mv * inPosition);
N = normalize(mat3(mv) * inNormal);
if (!enableRHWCoordinates)
gl_Position = projectionMat * mv * inPosition;
else
{
gl_Position = vec4((inPosition.x+63.0f / 128.0f)*projCorrection[0]-1,-(inPosition.y+63.0f / 128.0f)*projCorrection[1]+1,inPosition.z*2-1,1);
RHWdepth = inPosition.z/inPosition.w;
}
if(enableTextureTransform0)
{
vec4 texCoords0=vec4(inTexCoord0.xy,0,1);
texCoords[0] = (textureMatrix[0]*texCoords0).xy;
}
else
texCoords[0] = inTexCoord0.xy;
if (texture1Index == 0)
if(enableTextureTransform1)
{
vec4 texCoords0=vec4(inTexCoord0.xy,0,1);
texCoords[1] = (textureMatrix[1]*texCoords0).xy;
}
else
texCoords[1] = inTexCoord0.xy;
else if (texture1Index == 1)
if(enableTextureTransform1)
{
vec4 texCoords1=vec4(inTexCoord0.zw,0,1);
texCoords[1] = (textureMatrix[1]*texCoords1).xy;
}
else
texCoords[1] = inTexCoord0.zw;
}

View File

@@ -0,0 +1,25 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//
//Simple histogram shader for FLAR by Schmackbolzen
#version 330
#include "ColorConversion.inc"
#define NUM_LIMITS $NUM_LIMITS
in vec2 TexCoords;
uniform sampler2D scene;
uniform vec2 limits[NUM_LIMITS];
uniform int index;
void main()
{
float luma = clamp(ToLuma(texture2D(scene, TexCoords).rgb),limits[0].x,limits[NUM_LIMITS-1].x);
vec2 currentLimits=limits[index];
bool withinLimits;
withinLimits = (luma >= currentLimits.x) && (luma < currentLimits.y);
if (!withinLimits)
discard;
gl_FragDepth= 0;
}

722
FLARDATA/Shader/lighting.fp Normal file
View File

@@ -0,0 +1,722 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//PBR lighting shader for FLAR by Schmackbolzen
//Sources are either mentioned in the comments below,
//from https://learnopengl.com/PBR/Lighting or https://learnopengl.com/PBR/IBL/Specular-IBL
//or "Parallel-Split Shadow Maps on Programmable GPUs" GPU Gems 3 (2005)
#version 330
#include "ColorConversion.inc"
#define MAX_SHADOWS $MAX_SHADOWS
#define NUM_SPLITS $NUM_SPLITS
#define USE_PCF $USE_PCF
#define USE_HQ_DIFFUSE $USE_HQ_DIFFUSE
#define USE_PARALLAX_MAPS $USE_PARALLAX_MAPS
#define USE_CLUSTERED_SHADING $USE_CLUSTERED_SHADING
//#define SIMPLE_KD
#define IBL_MULTIPLE_SCATTERING
#if USE_CLUSTERED_SHADING == 1
#define NUM_POSSIBLE_LIGHTS $NUM_POSSIBLE_LIGHTS
#define LIGHT_GRID_TILE_DIM_X $LIGHT_GRID_TILE_DIM_X
#define LIGHT_GRID_TILE_DIM_Y $LIGHT_GRID_TILE_DIM_Y
#define LIGHT_GRID_MAX_DIM_X $LIGHT_GRID_MAX_DIM_X
#define LIGHT_GRID_MAX_DIM_Y $LIGHT_GRID_MAX_DIM_Y
#endif
const float PBR_FACTOR = 2;
const float PBR_FACTOR_ENV = 1.5;
in vec3 eyeVec;
in vec3 v,vWorld,worldNormal;
in vec3 N;
in mat3 tbnMatrix,tbnMatrixObj;
in vec4 shadowCoord[MAX_SHADOWS*NUM_SPLITS];
in vec4 texCoords;
in mat3 worldRotMat;
in float alphaValue;
in float fogEnd;
in float fogScale;
struct Light{
vec3 ambient;
vec3 diffuse;
vec4 position;
vec3 spotDirection;
float spotExponent;
float spotCosPhi;
float spotCosTheta;
float constantAttenuation;
float linearAttenuation;
float quadraticAttenuation;
};
struct glFogParameters
{
vec3 color;
float density;
float start;
float end;
};
#if USE_CLUSTERED_SHADING == 1
//Has to be 16 byte aligned (otherwise it will be padded)
struct ClusteredLight{
vec4 position;
vec4 diffuse;
};
layout (std140) uniform LightSourceClustered
{
ClusteredLight clusteredLights[NUM_POSSIBLE_LIGHTS];
};
uniform isamplerBuffer clusterLightIndexListsTex;
uniform usamplerBuffer clusterGridTex;
#endif
uniform glFogParameters glFog;
uniform Light glLightSource[8];
uniform sampler2D tex;
uniform sampler2D tex2;
uniform sampler2D heightMap;
uniform sampler2D normalMap;
uniform sampler2D roughnessMap;
uniform sampler2D metalnessMap;
uniform sampler2D reflectionMap;
uniform sampler2D brdfLUT;
uniform sampler2DArrayShadow shadowMap[MAX_SHADOWS];
uniform float splitPlanes[NUM_SPLITS];
uniform samplerCube envMap;
uniform samplerCube irradianceMap;
uniform vec2 texture1Size;
uniform vec2 textureShadowSize;
uniform int lightCount;
uniform int shadowCount;
uniform int tex2Mode;
uniform int fogMode;
uniform float metalnessConst;
uniform float roughnessConst;
uniform float roughnessTextureBias;
uniform mat4 invWorldView;
uniform vec3 camPos;
uniform vec3 ambientColor;
uniform vec3 matAmbientColor;
uniform vec3 matDiffuseColor;
uniform vec3 matEmissiveColor;
uniform int alphaTestCompareMethod;
uniform float alphaTestValue;
uniform bool enableNormalMaps;
uniform bool enableParallaxMaps;
uniform bool enableFirstTexture;
uniform bool enableSecondTexture;
uniform bool enableFog;
uniform bool enableEnvMap;
uniform bool enableTex2Modulate2X;
uniform bool enableRoughnessMap;
uniform bool enableMetalnessMap;
uniform bool enableAlphaTest;
#if USE_CLUSTERED_SHADING == 1
uniform bool enableClusteredShading;
uniform float recNear; /**< 1.0f / g_near */
uniform float recLogSD1; /**< 1.0f / logf(sD + 1.0f), used to compute cluster index. */
#endif
float HEIGHT_SCALE = 0.01;
const float PI = 3.141592654;
out vec4 diffuseColorOut;
float ShadowCalculation(const float bias, const int shadowMapIndex, const int lightIndex, const sampler2DArrayShadow shadowSampler)
{
vec4 fragPosLightSpace = shadowCoord[lightIndex*NUM_SPLITS+shadowMapIndex];
vec3 projCoords = fragPosLightSpace.xyz / fragPosLightSpace.w;
#if USE_PCF == 1
float currentDepth = clamp(projCoords.z,0,1);
// Check whether current frag pos is in shadow
//if(projCoords.z <= 1.0)
{
float shadow = 0.0;
vec2 texelSize = 1.0 / vec2(textureShadowSize);
for(int x = -1; x <= 1; ++x)
{
for(int y = -1; y <= 1; ++y)
{
float pcfDepth = clamp(texture(shadowSampler, vec4(projCoords.xy + vec2(x, y) * texelSize, shadowMapIndex, projCoords.z - bias)),0,1);
shadow += pcfDepth;
}
}
shadow *= 1.0/9.0;
return shadow;
}
//else
//return 1;
#else
return texture(shadowSampler, vec4(projCoords.xy, shadowMapIndex, projCoords.z - bias));
#endif
}
float ShadowCalculationForAllSplitPlanes(const int lightIndex, const vec3 lightDirViewSpace, const vec3 normal, float lightIntensity, const sampler2DArrayShadow shadowSampler)
{
float distance = v.z;
float bias = max(0.001 * (1.0 - dot(normal, lightDirViewSpace)), 0.0003);
bool applied = false;
for (int i = 0; i < NUM_SPLITS; i++)
if(!applied && (distance < splitPlanes[i]))
{
//bias = ((i+1)*0.1)*0.001;
lightIntensity *= ShadowCalculation(bias, i, lightIndex, shadowSampler);
applied=true;
//Graphics cards hate break (SLOW), hence boolean value above
//break;
}
return lightIntensity;
}
//Parallax mapping with offset limiting
//You can try different parallax mapping techniques, but they all have problems with steep angles so I decided this is something for later
vec2 ParallaxMapping(vec3 V, vec2 T)
{
// get depth for this fragment
float initialHeight = texture2D(heightMap, T).r-0.5;
// calculate amount of offset for Parallax Mapping With Offset Limiting
vec2 texCoordOffset = HEIGHT_SCALE * V.xy * initialHeight;
// return modified texture coordinates
return T + texCoordOffset;
}
float DistributionGGX(float NdotH, float roughnessSquared)
{
float a = roughnessSquared;
float a2 = a*a;
float NdotH2 = NdotH*NdotH;
float nom = a2;
float denom = NdotH2 * (a2 - 1.0) + 1.0;
denom = PI * denom * denom + 0.0001;
return nom / denom;
}
//"PBR Diffuse Lighting for GGX+Smith Microsurfaces", Earl Hammon, Jr.
float GeometrySmithG2HammonDenom(float NdotL, float NdotV, float roughnessSquared)
{
float denom = mix(2*NdotL*NdotV,NdotL+NdotV,roughnessSquared);
return denom;
}
vec3 fresnelSchlick(float cosTheta, vec3 F0)
{
return F0 + (1.0 - F0) * pow(max(1.0 - cosTheta,0), 5.0);
}
vec3 fresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness)
{
return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(max(1.0 - cosTheta, 0.0), 5.0);
}
struct LightValues
{
vec3 lightVec;
vec3 lightDir;
vec3 lightDirViewSpace;
float attenFactor;
float lightDist;
};
LightValues CalculateLightValues(const int index)
{
LightValues result;
if(glLightSource[index].spotCosTheta != -1.)
{
result.lightVec = glLightSource[index].position.xyz - v;
result.lightDirViewSpace=normalize(result.lightVec);
result.lightDist = length(result.lightVec);
result.lightDir = normalize(result.lightVec);
float angle = max(dot(normalize(glLightSource[index].spotDirection), -result.lightDir),0);
if (angle > glLightSource[index].spotCosPhi)
{
float spotAtten;
if (angle < glLightSource[index].spotCosTheta)
spotAtten = (angle-glLightSource[index].spotCosPhi)/(glLightSource[index].spotCosTheta-glLightSource[index].spotCosPhi);
else
spotAtten = 1;
if(glLightSource[index].spotExponent != 1.0)
spotAtten = pow(spotAtten, glLightSource[index].spotExponent);
result.attenFactor = spotAtten * min(1.0/ (glLightSource[index].constantAttenuation +
glLightSource[index].linearAttenuation * result.lightDist +
glLightSource[index].quadraticAttenuation * result.lightDist * result.lightDist),1);
}
else
result.attenFactor = 0.;
}
else if (glLightSource[index].position.w != 0.0)
{
result.lightVec = glLightSource[index].position.xyz - v;
result.lightDirViewSpace=normalize(result.lightVec);
result.lightDist = length(result.lightVec);
if (enableNormalMaps)
result.lightVec = tbnMatrix*result.lightVec;
result.lightDir = normalize(result.lightVec);
// positional light source
result.attenFactor = clamp(1.0/( glLightSource[index].constantAttenuation +
glLightSource[index].linearAttenuation * result.lightDist +
glLightSource[index].quadraticAttenuation * result.lightDist * result.lightDist ),0,1);
}
else
{
// directional light source
result.attenFactor = 1.0;
if (enableNormalMaps)
{
result.lightDirViewSpace=normalize(glLightSource[index].position.xyz);
result.lightVec = tbnMatrix*glLightSource[index].position.xyz;
result.lightDir = normalize(result.lightVec);
}
else
{
result.lightVec = glLightSource[index].position.xyz;
result.lightDir = normalize(result.lightVec);
result.lightDirViewSpace = result.lightDir;
}
result.lightDist = length(result.lightVec);
}
return result;
}
#if USE_CLUSTERED_SHADING == 1
LightValues CalculateLightValuesClustered(const int index)
{
LightValues result;
result.lightVec = clusteredLights[index].position.xyz - v;
result.lightDirViewSpace=normalize(result.lightVec);
result.lightDist = length(result.lightVec);
if (enableNormalMaps)
result.lightVec = tbnMatrix*result.lightVec;
result.lightDir = normalize(result.lightVec);
// positional light source
float inner = 0.0;
float att = max(1.0 - max(0.0, (result.lightDist - inner) / (clusteredLights[index].position.w - inner)), 0.0);
result.attenFactor = att;
return result;
}
#endif
vec3 ApplyAmbientLight(const int index,const vec3 firstTexture, const float intensity, vec3 lightSum)
{
vec3 IAmbient = (matAmbientColor)*(PBR_FACTOR*glLightSource[index].ambient)*firstTexture;
lightSum.rgb += IAmbient*intensity;
return lightSum;
}
vec3 ApplyPBRLight(vec3 lightDiffuseColor, const LightValues lightValues, const vec3 mapNormal, const vec3 eyeV, const vec3 F0, const float roughness, const vec3 IDiffuse, const vec3 firstTexture, vec3 lightSum, const float metalness)
{
float visible = 1.0;
float intensity = lightValues.attenFactor;
//vec3 IAmbient = (matAmbientColor.rgb)*(PBR_FACTOR*glLightSource[index].ambient)*firstTexture;
//lightSum.rgb += IAmbient*intensity;
vec3 L = lightValues.lightDir;
vec3 V = normalize(eyeV);
vec3 H = normalize(L + V);
vec3 reflected;
vec3 N = mapNormal;
float HdotV = max(dot(H, V), 0.0);
float NdotL = max(dot(N, L), 0.0);
float NdotV = max(dot(N, V), 0.0001);
float NdotH = max(dot(N, H), 0.0001);
vec3 F = fresnelSchlick(HdotV, F0);
// Cook-Torrance BRDF
float roughnessSquared = roughness*roughness;
float NDF = DistributionGGX(NdotH, roughnessSquared);
vec3 nominator = NDF * F;
float denominator = 2.0 * GeometrySmithG2HammonDenom(NdotV, NdotL, roughnessSquared) + 0.00001; // 0.00001 to prevent divide by zero.
vec3 specular = nominator/denominator;
#ifndef SIMPLE_KD
vec3 kD=mix(vec3(1.0)-F,vec3(0.0),metalness);
#else
float kD = 1.0 - metalness;
#endif
#if USE_HQ_DIFFUSE == 1
//GGX Diffuse Approximation from
//"PBR Diffuse Lighting for GGX+Smith Microsurfaces, Earl Hammon, Jr."
float LdotV = dot(L, V);
float facing = 0.5+0.5*LdotV;
float rough = facing*(0.9-0.4*facing)*(.5/(NdotH+0.05) + 1); //+0.05 to prevent too large values
float smooth_ = 1.05*(1-pow(1-NdotL,5))*(1-pow(1-NdotV,5));
float single = 1./PI*mix(smooth_, rough, roughnessSquared);
float multi = 0.1159*roughnessSquared;
vec3 diffuse = kD*IDiffuse.rgb*(single+IDiffuse.rgb*multi);
#else
vec3 diffuse = kD*IDiffuse.rgb/PI;
#endif
lightSum+= PBR_FACTOR*lightDiffuseColor*(diffuse + specular)*intensity*NdotL;
return lightSum;
}
vec3 ApplyLight(const int index, const LightValues lightValues, const vec3 mapNormal, const vec3 eyeV, const vec3 F0, const float roughness, const vec3 IDiffuse, const vec3 firstTexture, vec3 lightSum, const float metalness)
{
lightSum=ApplyAmbientLight(index, firstTexture, lightValues.attenFactor, lightSum);
lightSum=ApplyPBRLight(glLightSource[index].diffuse.rgb, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse, firstTexture, lightSum, metalness);
return lightSum;
}
#if USE_CLUSTERED_SHADING == 1
//Clustered shading code partially from
//"Demo code implementing Clustered Forward Shading, accompanying the talk
//'Tiled and Clustered Forward Shading' presented at Siggraph 2012."
/**
* Computes the {i,j,k} integer index into the cluster grid. For details see our paper:
* 'Clustered Deferred and Forward Shading'
* http://www.cse.chalmers.se/~olaolss/main_frame.php?contents=publication&id=clustered_shading
*/
ivec3 calcClusterLoc(vec2 fragPos, float viewSpaceZ)
{
// i and j coordinates are just the same as tiled shading, and based on screen space position.
ivec2 l = ivec2(int(fragPos.x) / LIGHT_GRID_TILE_DIM_X, int(fragPos.y) / LIGHT_GRID_TILE_DIM_Y);
// k is based on the log of the view space Z coordinate.
float gridLocZ = log(viewSpaceZ * recNear) * recLogSD1;
return ivec3(l, int(gridLocZ));
}
/**
* Linearlizes the 3D cluster location into an offset, which can be used as an
* address into a linear buffer.
*/
int calcClusterOffset(ivec3 clusterLoc)
{
return (clusterLoc.z * LIGHT_GRID_MAX_DIM_Y + clusterLoc.y) * LIGHT_GRID_MAX_DIM_X + clusterLoc.x;
}
/**
* Convenience shorthand function, see above...
*/
int calcClusterOffset(vec2 fragPos, float viewSpaceZ)
{
return calcClusterOffset(calcClusterLoc(fragPos, viewSpaceZ));
}
vec3 ApplyClusteredLights(const vec3 mapNormal, const vec3 eyeV, const vec3 F0, const float roughness, const vec3 IDiffuse, const vec3 firstTexture, vec3 lightSum, const float metalness)
{
// fetch cluster data (i.e. offset to light indices, and numer of lights) from grid buffer.
uvec2 offsetCount = texelFetch(clusterGridTex, calcClusterOffset(gl_FragCoord.xy, v.z)).xy;
int lightOffset = int(offsetCount.x);
int lightCount = int(offsetCount.y);
for (int i = 0; i < lightCount; ++i)
{
// fetch light index from list of lights for the cluster.
int lightIndex = texelFetch(clusterLightIndexListsTex, lightOffset + i).x;
LightValues lightValues = CalculateLightValuesClustered(lightIndex);
// compute and accumulate shading.
lightSum = ApplyPBRLight(clusteredLights[lightIndex].diffuse.rgb*2, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse, firstTexture, lightSum, metalness);
}
return lightSum;
}
#endif
void main(void)
{
float fogFactor = 0;
if (enableFog && fogMode > 0)
{
//Radial fog
float z = length(v);
if (fogMode == 3)
{
fogFactor = (fogEnd - z) * fogScale;
}
else if (fogMode == 1)
{
fogFactor = 1.0/exp(glFog.density * z);
}
else if (fogMode == 2)
{
fogFactor = 1.0 /exp( (z * glFog.density)* (z * glFog.density));
}
fogFactor = clamp(fogFactor, 0.0, 1.0);
}
vec3 eyeV=normalize(eyeVec);
vec3 normal=normalize(N);
vec2 texCoordsProcessed;
#if USE_PARALLAX_MAPS == 1
if (enableParallaxMaps)
texCoordsProcessed = ParallaxMapping(eyeV, texCoords.st);
else
#endif
texCoordsProcessed = texCoords.st;
vec4 firstTexture;
vec4 lightSum = vec4(0);
if (enableFirstTexture)
{
firstTexture = texture2D(tex, texCoordsProcessed);
if (enableSecondTexture)
{
if(tex2Mode == 0)
{
firstTexture *= texture2D(tex2, texCoords.pq);
if (enableTex2Modulate2X)
firstTexture.rgb*=4.6; //2^2.2 since rendering is gamma correct
}
else
{
lightSum.rgb += texture2D(tex2, texCoords.pq).rgb;
}
}
}
else{
firstTexture = vec4(1,1,1,1);
}
float alpha = alphaValue*firstTexture.a;
if (enableAlphaTest)
if(alphaTestCompareMethod==5)
{
if( alpha <= alphaTestValue)
discard;
}
else if(alphaTestCompareMethod==2)
{
if( alpha > alphaTestValue)
discard;
}
else
firstTexture =vec4(1,0,0,1);
vec3 mapNormal;
if (enableNormalMaps)
{
vec3 textureNormal = texture2D(normalMap, texCoordsProcessed).rgb;
textureNormal.xy = (textureNormal.rg * 2.0 - 1.0);
textureNormal.z = sqrt(1.0-dot(textureNormal.xy,textureNormal.xy));
mapNormal = normalize(textureNormal.xyz);
}
else
mapNormal = normal;
lightSum+=vec4(((matEmissiveColor.rgb))* firstTexture.rgb, alpha);
float metalness;
if (enableMetalnessMap)
{
metalness=texture2D(metalnessMap, texCoordsProcessed.st).r;
}
else
{
metalness=metalnessConst;
}
vec3 IDiffuse = (matDiffuseColor)*firstTexture.rgb;
float roughness;
if (enableRoughnessMap)
{
roughness=clamp(roughnessTextureBias+texture2D(roughnessMap, texCoordsProcessed.st).r,0.0,1.0);
}
else
{
roughness=roughnessConst;
}
#define DIELECTRIC_SPECULAR 0.04
vec3 F0 = mix(vec3(DIELECTRIC_SPECULAR), IDiffuse, metalness);
if (enableEnvMap)
{
vec3 n;
if (enableNormalMaps)
n=normalize( worldRotMat * (tbnMatrixObj * mapNormal ));
else
n=normalize(worldNormal);
vec3 v = normalize( camPos - vWorld);
vec3 reflectDir = reflect(-v, n);
const float MAX_REFLECTION_LOD = 7;
float lod = roughness * (2.0 - roughness) * MAX_REFLECTION_LOD;
vec3 irradiance;
vec3 radiance;
if (enableFog)
{
vec3 ambientTint=PBR_FACTOR_ENV*glFog.color.rgb;
irradiance = vec3(texture(irradianceMap, n).r)*ambientTint;
radiance = vec3(textureLod(envMap, reflectDir, lod).r)*ambientTint;
}
else
{
irradiance = texture(irradianceMap, n).rgb*PBR_FACTOR_ENV;
radiance = textureLod(envMap, reflectDir, lod).rgb*PBR_FACTOR_ENV;
}
float NdotV = max(dot(n,v),0.0);
vec2 brdf = texture(brdfLUT, vec2(NdotV, roughness)).rg;
#ifdef IBL_MULTIPLE_SCATTERING
vec3 diffuseColor = mix(IDiffuse.rgb, vec3(0), metalness);
// Multiple scattering, from:
//"A Multiple-Scattering Microfacet Model for Real-Time Image-based Lighting", Carmelo J. Fdez-Agüera
vec3 kS = F0;
vec3 FssEss = kS * brdf.x + brdf.y;
float Ess = brdf.x + brdf.y;
float Ems = 1.0-Ess;
vec3 Favg = F0 + (1.0-F0)/21.0;
vec3 Fms = FssEss*Favg/(1.0-Ems*Favg);
vec3 FmsEms = Fms * Ems;
// Dielectrics
vec3 Edss = 1.0 - (FssEss + FmsEms);
vec3 kD = diffuseColor * Edss;
// Composition
lightSum.rgb += FssEss * radiance + (FmsEms+kD) * irradiance;
#else
vec3 diffuse = irradiance * IDiffuse;
vec3 F = fresnelSchlickRoughness(NdotV, F0, roughness);
#ifndef SIMPLE_KD
vec3 kD=mix(vec3(1.0)-F,vec3(0.0),metalness);
#else
float kD = 1.0 - metalness;
#endif
vec3 specular = radiance * (F0 * brdf.x + brdf.y);
lightSum.rgb += kD*diffuse + specular;
#endif
}
else
{
if (enableNormalMaps)
{
vec3 dir = vec3(0,0,1);
float ambientIntensity = dot(dir,mapNormal);
lightSum.rgb+=matAmbientColor.rgb * ambientColor.rgb* ambientIntensity*IDiffuse.rgb;
}
else
lightSum.rgb+=matAmbientColor.rgb * ambientColor.rgb* IDiffuse.rgb;
}
//Unrolled loop and a separated shadow pass to help some glsl compilers. Also some glsl compilers need a constant value (not variable!) for sampler arrays.
if(lightCount > 0)
{
const int lightIndex = 0;
LightValues lightValues = CalculateLightValues(lightIndex);
#if MAX_SHADOWS > 0
if (shadowCount > 0)
lightValues.attenFactor = ShadowCalculationForAllSplitPlanes(lightIndex, lightValues.lightDirViewSpace, normal, lightValues.attenFactor, shadowMap[0]);
#endif
lightSum.rgb = ApplyLight(lightIndex, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
}
if(lightCount > 1)
{
const int lightIndex = 1;
LightValues lightValues = CalculateLightValues(lightIndex);
#if MAX_SHADOWS > 1
if (shadowCount > 1)
lightValues.attenFactor = ShadowCalculationForAllSplitPlanes(lightIndex, lightValues.lightDirViewSpace, normal, lightValues.attenFactor, shadowMap[1]);
#endif
lightSum.rgb = ApplyLight(lightIndex, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
}
if (lightCount > 2)
{
const int lightIndex = 2;
LightValues lightValues = CalculateLightValues(lightIndex);
lightSum.rgb = ApplyLight(lightIndex, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
}
if (lightCount > 3)
{
const int lightIndex = 3;
LightValues lightValues = CalculateLightValues(lightIndex);
lightSum.rgb = ApplyLight(lightIndex, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
}
if (lightCount > 4)
{
const int lightIndex = 4;
LightValues lightValues = CalculateLightValues(lightIndex);
lightSum.rgb = ApplyLight(lightIndex, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
}
if (lightCount > 5)
{
const int lightIndex = 5;
LightValues lightValues = CalculateLightValues(lightIndex);
lightSum.rgb = ApplyLight(lightIndex, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
}
if (lightCount > 6)
{
const int lightIndex = 6;
LightValues lightValues = CalculateLightValues(lightIndex);
lightSum.rgb = ApplyLight(lightIndex, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
}
if (lightCount > 7)
{
const int lightIndex = 7;
LightValues lightValues = CalculateLightValues(lightIndex);
lightSum.rgb = ApplyLight(lightIndex, lightValues, mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
}
#if USE_CLUSTERED_SHADING == 1
if(enableClusteredShading)
lightSum.rgb = ApplyClusteredLights(mapNormal, eyeV, F0, roughness, IDiffuse.rgb, firstTexture.rgb, lightSum.rgb, metalness);
#endif
vec4 finalColor = lightSum;
if (enableFog && fogMode > 0)
{
finalColor = mix(vec4(glFog.color,1.0),finalColor, fogFactor);
}
diffuseColorOut=vec4(ToGammaCorrected(finalColor.rgb),finalColor.a);
}

145
FLARDATA/Shader/lighting.vs Normal file
View File

@@ -0,0 +1,145 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//PBR lighting shader for FLAR by Schmackbolzen
#version 330
#define MAX_SHADOWS $MAX_SHADOWS
#define NUM_SPLITS $NUM_SPLITS
out vec3 eyeVec;
out vec3 v,vWorld,worldNormal;
out mat3 tbnMatrix,tbnMatrixObj;
out vec3 N;
out vec4 shadowCoord[MAX_SHADOWS*NUM_SPLITS];
out vec4 texCoords;
out mat3 worldRotMat;
out float alphaValue;
out float fogEnd;
out float fogScale;
struct glFogParameters
{
vec3 color;
float density;
float start;
float end;
};
uniform glFogParameters glFog;
uniform mat4 depthBiasMVP[MAX_SHADOWS*NUM_SPLITS];
uniform mat4 modelViewMat;
uniform mat4 projectionMat;
uniform mat4 invViewMat;
uniform mat4 textureMatrix[2];
uniform bool enableNormalMaps;
uniform int shadowCount;
uniform bool enableEnvMap;
uniform bool isInstanced;
uniform bool isInstancedTransparent;
uniform bool isInstancedFog;
uniform float matDiffuseAlpha;
uniform int tex2Mode;
uniform int texture1Index;
layout (location = 0) in vec4 inPosition;
layout (location = 1) in vec3 inNormal;
layout (location = 2) in vec4 inColor;
layout (location = 3) in vec4 inSecondColor;
layout (location = 4) in vec4 inTexCoord0;
layout (location = 5) in vec4 inTexCoord2;
layout (location = 6) in mat4 inModelViewMatInstanced;
layout (location = 10) in float inAlphaValueInstanced;
layout (location = 11) in vec2 inFogStartEndInstanced;
const mat4 biasMatrix = mat4(0.5f, 0.0f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
0.5f, 0.5f, 0.5f, 1.0f);
void main(void)
{
mat4 mv;
if(!isInstanced)
mv=modelViewMat;
else
mv=inModelViewMatInstanced;
if(!isInstancedTransparent)
{
alphaValue = matDiffuseAlpha;
}
else
{
alphaValue = inAlphaValueInstanced;
}
if(!isInstancedFog)
{
fogEnd = glFog.end;
fogScale = 1 / (glFog.end - glFog.start);
}
else
{
fogEnd = inFogStartEndInstanced.y;
fogScale = 1 / (inFogStartEndInstanced.y - inFogStartEndInstanced.x);
}
mat3 normalMat = mat3(mv);
v = vec3(mv * inPosition);
mat4 worldMat = invViewMat*mv;
if(enableEnvMap)
{
vWorld = vec3(worldMat * inPosition);
worldRotMat = mat3(worldMat);
worldNormal = worldRotMat * inNormal;
}
if (shadowCount > 0)
{
for(int i=0;i<NUM_SPLITS;i++)
shadowCoord[i] = biasMatrix*depthBiasMVP[i] * worldMat * inPosition;
if (shadowCount > 1)
for(int i=0;i<NUM_SPLITS;i++)
shadowCoord[NUM_SPLITS+i] = biasMatrix*depthBiasMVP[NUM_SPLITS+i] * worldMat * inPosition;
}
N = normalize(normalMat*inNormal);
if (enableNormalMaps)
{
vec3 TO = normalize(vec3(inTexCoord2.s,inTexCoord2.t,inTexCoord2.p));
//TO = normalize(TO - dot(TO, inNormal) * inNormal);
vec3 BO = normalize(cross(inNormal,TO)*(inTexCoord2.q));
vec3 TA=normalMat*TO;
vec3 BA=normalMat*BO;
vec3 T=normalize(TA);
vec3 B=normalize(BA);
tbnMatrix = mat3(T.x, B.x, N.x,
T.y, B.y, N.y,
T.z, B.z, N.z);
tbnMatrixObj = mat3(TO,BO,inNormal.xyz);
eyeVec = tbnMatrix*(-v);
}
else
eyeVec = -v;
gl_Position = projectionMat * mv * inPosition;
vec4 texCoords0=vec4(inTexCoord0.xy,0,1);
vec4 texCoords1=vec4(inTexCoord0.zw,0,1);
texCoords.xy = (textureMatrix[0]*texCoords0).xy;
//texCoords.zw = (textureMatrix[1]*vec4(inTexCoord0.zw,0,1)).zw;
if (texture1Index == 0)
texCoords.zw = (textureMatrix[1]*texCoords0).xy;
else if (texture1Index == 1)
texCoords.zw = (textureMatrix[1]*texCoords1).zw;
}

View File

@@ -0,0 +1,13 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//No material shader for FLAR by Schmackbolzen
#version 330
uniform vec3 color;
void main()
{
gl_FragColor = vec4(color,1);
}

View File

@@ -0,0 +1,23 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//No material shader for FLAR by Schmackbolzen
#version 330
uniform mat4 modelViewMat;
uniform mat4 projectionMat;
uniform bool isInstanced;
layout (location = 0) in vec4 inPosition;
layout (location = 6) in mat4 inModelViewMatInstanced;
void main()
{
mat4 mv;
if(!isInstanced)
mv=modelViewMat;
else
mv=inModelViewMatInstanced;
gl_Position = projectionMat * mv * inPosition;
}

View File

@@ -0,0 +1,130 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Post processing shader for FLAR by Schmackbolzen
//Sources are mentioned in the comments
#version 330
#include "ColorConversion.inc"
#define USE_ACES_CURVE $USE_ACES_CURVE
#define USE_PBR_BLOOM $USE_PBR_BLOOM
in vec2 TexCoords;
uniform sampler2D scene;
#if USE_PBR_BLOOM == 1
uniform sampler2D bloomtex;
#endif
uniform float exposure;
uniform float exposureLowerLimit;
//https://github.com/TheRealMJP/BakingLab/blob/master/BakingLab/ACES.hlsl
//ACES fit by Steven Hill
// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT
const mat3 ACESInputMat = mat3(
0.59719, 0.07600, 0.02840,
0.35458, 0.90834, 0.13383,
0.04823, 0.01566, 0.83777);
// ODT_SAT => XYZ => D60_2_D65 => sRGB
const mat3 ACESOutputMat = mat3(
1.60475, -0.10208, -0.00327,
-0.53108, 1.10813, -0.07276,
-0.07367, -0.00605, 1.07602
);
vec3 RRTAndODTFit(vec3 v)
{
vec3 a = v * (v + 0.0245786f) - 0.000090537f;
vec3 b = v * (0.983729f * v + 0.4329510f) + 0.238081f;
return a / b;
}
vec3 ACESFitted(vec3 color)
{
color = ACESInputMat * color;
// Apply RRT and ODT
color = RRTAndODTFit(color);
color = ACESOutputMat * color;
// Clamp to [0, 1]
color = clamp(color,0.,1.);
return color;
}
// Uchimura 2017, "HDR theory and practice"
// Math: https://www.desmos.com/calculator/gslcdxvipg
// Source: https://www.slideshare.net/nikuque/hdr-theory-and-practicce-jp
// Used in "Gran Turismo Sport" game
vec3 uchimura(vec3 x, float P, float a, float m, float l, float c, float b) {
float l0 = ((P - m) * l) / a;
float L0 = m - m / a;
float L1 = m + (1.0 - m) / a;
float S0 = m + l0;
float S1 = m + a * l0;
float C2 = (a * P) / (P - S1);
float CP = -C2 / P;
vec3 w0 = vec3(1.0 - smoothstep(0.0, m, x));
vec3 w2 = vec3(step(m + l0, x));
vec3 w1 = vec3(1.0 - w0 - w2);
vec3 T = vec3(m * pow(x / m, vec3(c)) + b);
vec3 S = vec3(P - (P - S1) * exp(CP * (x - S0)));
vec3 L = vec3(m + a * (x - m));
return T * w0 + L * w1 + S * w2;
}
vec3 uchimura(vec3 x) {
const float P = 1.0; // max display brightness
const float a = 1.0; // contrast
const float m = 0.22; // linear section start
const float l = 0.4; // linear section length
const float c = 1.33; // black
const float b = 0.0; // pedestal
return uchimura(x, P, a, m, l, c, b);
}
#if USE_PBR_BLOOM == 1
const float bloomStrength = 0.2f;
vec4 bloom_new()
{
vec4 hdrColor = texture(scene, TexCoords);
//hdrColor.rgb=vec3(0);
vec3 bloomColor = texture(bloomtex, TexCoords).rgb;
//Blend in linear space
/*hdrColor.rgb=ToLinear(hdrColor.rgb);
bloomColor=ToLinear(bloomColor);*/
vec4 blended=vec4(mix(hdrColor.rgb, bloomColor, bloomStrength),hdrColor.a); // linear interpolation
//Blend in gamma corrected space
blended.rgb=ToLinear(blended.rgb);
return blended;
}
#endif
void main()
{
#if USE_PBR_BLOOM == 0
vec4 color = texture2D(scene, TexCoords);
//Not a nice solution to convert two times (ideally there would be none), but not easily solvable currently
color.rgb = ToLinear(color.rgb);
#else
vec4 color = bloom_new();
#endif
//Exposure is chosen so that both curves have about the same brightness and the look is fine with very bright starspheres like in Tau-37
#if USE_ACES_CURVE == 1
color.rgb=ACESFitted((exposure)*color.rgb);
#else
color.rgb=uchimura((exposure)*color.rgb);
#endif
color.rgb=ToGammaCorrected(color.rgb);
gl_FragColor = color;
}

View File

@@ -0,0 +1,16 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Post processing shader for FLAR by Schmackbolzen
#version 330
layout (location = 0) in vec4 vertex;
out vec2 TexCoords;
void main()
{
gl_Position = vec4(vertex.xy, 1.0f, 1.0f);
vec2 texture = vertex.zw;
TexCoords = texture;
}

View File

@@ -0,0 +1,46 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on https://fabiensanglard.net/lightScattering/index.php which is based on
//"Volumetric Light Scattering as a Post-Process" GPU Gems 3 (2005) and
//"Light Shaft Rendering" ShadersX3 (2004).
#version 330
#define MAX_NUM_LIGHTS $MAX_NUM_LIGHTS
in vec2 TexCoords;
uniform float exposure;
uniform float decay;
uniform float density;
uniform float weight;
uniform vec2 lightPositionOnScreen[MAX_NUM_LIGHTS];
uniform sampler2D myTexture;
uniform int numActiveLights;
const int NUM_SAMPLES = 75;
void main()
{
vec4 result = vec4(0);
for (int lightIndex = 0; lightIndex < MAX_NUM_LIGHTS && lightIndex < numActiveLights; lightIndex++ )
{
vec2 deltaTextCoord = vec2( TexCoords.st - lightPositionOnScreen[lightIndex].xy );
vec2 textCoord = TexCoords.st;
deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density;
float illuminationDecay = 1.0;
for(int i=0; i < NUM_SAMPLES ; i++)
{
textCoord -= deltaTextCoord;
vec4 sample = texture2D(myTexture, textCoord );
sample *= illuminationDecay * weight;
result += sample;
illuminationDecay *= decay;
}
}
result=min(result,vec4(NUM_SAMPLES*weight));
result *= exposure;
gl_FragColor = result;
}

View File

@@ -0,0 +1,18 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on https://fabiensanglard.net/lightScattering/index.php which is based on
//"Volumetric Light Scattering as a Post-Process" GPU Gems 3 (2005) and
//"Light Shaft Rendering" ShadersX3 (2004).
#version 330
layout (location = 0) in vec4 vertex;
out vec2 TexCoords;
void main()
{
gl_Position = vec4(vertex.xy, 0.0f, 1.0f);
vec2 texture = vertex.zw;
TexCoords = texture;
}

View File

@@ -0,0 +1,129 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Code based on https://learnopengl.com/PBR/IBL/Specular-IBL
#version 330
in vec3 WorldPos;
uniform samplerCube environmentMap;
uniform float roughness;
uniform bool convertToLinear;
uniform bool copyOnly;
const float PI = 3.14159265359;
vec3 ToGammaCorrected(vec3 inColor){
return pow(inColor.rgb,1./vec3(2.2));
}
vec3 ToLinear(vec3 inColor){
return pow(inColor,vec3(2.2));
}
// ----------------------------------------------------------------------------
float DistributionGGX(vec3 N, vec3 H, float roughness)
{
float a = roughness*roughness;
float a2 = a*a;
float NdotH = max(dot(N, H), 0.0);
float NdotH2 = NdotH*NdotH;
float nom = a2;
float denom = (NdotH2 * (a2 - 1.0) + 1.0);
denom = PI * denom * denom + 0.0001;
return nom / denom;
}
// ----------------------------------------------------------------------------
// http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html
// efficient VanDerCorpus calculation.
float RadicalInverse_VdC(uint bits)
{
bits = (bits << 16u) | (bits >> 16u);
bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
return float(bits) * 2.3283064365386963e-10; // / 0x100000000
}
// ----------------------------------------------------------------------------
vec2 Hammersley(uint i, uint N)
{
return vec2(float(i)/float(N), RadicalInverse_VdC(i));
}
// ----------------------------------------------------------------------------
vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)
{
float a = roughness*roughness;
float phi = 2.0 * PI * Xi.x;
float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a*a - 1.0) * Xi.y));
float sinTheta = sqrt(1.0 - cosTheta*cosTheta);
// from spherical coordinates to cartesian coordinates - halfway vector
vec3 H;
H.x = cos(phi) * sinTheta;
H.y = sin(phi) * sinTheta;
H.z = cosTheta;
// from tangent-space H vector to world-space sample vector
vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
vec3 tangent = normalize(cross(up, N));
vec3 bitangent = cross(N, tangent);
vec3 sampleVec = tangent * H.x + bitangent * H.y + N * H.z;
return normalize(sampleVec);
}
// ----------------------------------------------------------------------------
void main()
{
vec3 N = normalize(WorldPos);
// make the simplyfying assumption that V equals R equals the normal
vec3 R = N;
vec3 V = R;
if (!copyOnly)
{
const uint SAMPLE_COUNT = 1024u;
vec3 prefilteredColor = vec3(0.0);
float totalWeight = 0.0;
for(uint i = 0u; i < SAMPLE_COUNT; ++i)
{
// generates a sample vector that's biased towards the preferred alignment direction (importance sampling).
vec2 Xi = Hammersley(i, SAMPLE_COUNT);
vec3 H = ImportanceSampleGGX(Xi, N, roughness);
vec3 L = normalize(2.0 * dot(V, H) * H - V);
float NdotL = max(dot(N, L), 0.0);
if(NdotL > 0.0)
{
// sample from the environment's mip level based on roughness/pdf
float D = DistributionGGX(N, H, roughness);
float NdotH = max(dot(N, H), 0.0);
float HdotV = max(dot(H, V), 0.0);
float pdf = D * NdotH / (4.0 * HdotV + 0.0001);
float resolution = 1024.0; // resolution of source cubemap (per face)
float saTexel = 4.0 * PI / (6.0 * resolution * resolution);
float saSample = 1.0 / (float(SAMPLE_COUNT) * pdf + 0.0001);
float mipLevel = roughness == 0.0 ? 0.0 : 0.5 * log2(saSample / saTexel);
vec3 texColor=textureLod(environmentMap, L, mipLevel).rgb;
if(convertToLinear)
texColor=ToLinear(texColor);
prefilteredColor += texColor * NdotL;
totalWeight += NdotL;
}
}
prefilteredColor = prefilteredColor / totalWeight;
gl_FragColor = vec4(ToGammaCorrected(prefilteredColor), 1.0);
//gl_FragColor = vec4(prefilteredColor, 1.0);
}
else
gl_FragColor = vec4(textureLod(environmentMap, V, 0).rgb, 1.0);
}

View File

@@ -0,0 +1,14 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//
//Simple color shader for FLAR by Schmackbolzen
#version 330
in vec3 currentColor;
void main()
{
gl_FragColor = vec4(currentColor,1);
}

View File

@@ -0,0 +1,36 @@
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//
//Simple color shader for FLAR by Schmackbolzen
#version 330
uniform mat4 modelViewMat;
uniform mat4 projectionMat;
uniform vec3 position;
uniform vec3 color;
uniform float size;
uniform bool isInstanced;
layout (location = 0) in vec3 inVertex;
layout (location = 1) in vec3 inPositionInstanced;
layout (location = 2) in float inSizeInstanced;
layout (location = 3) in vec3 inColorInstanced;
out vec3 currentColor;
void main()
{
vec3 worldSpacePos;
if(!isInstanced)
{
currentColor=color;
worldSpacePos=size * inVertex + position;
}
else
{
currentColor=inColorInstanced;
worldSpacePos=inSizeInstanced * inVertex + inPositionInstanced;
}
gl_Position = projectionMat * modelViewMat * vec4(worldSpacePos,1);
}

Binary file not shown.

22
FLARDATA/config.cfg Normal file
View File

@@ -0,0 +1,22 @@
MSAAMode=3
AnisotropicFilteringMode=4
ToneMappingType=0
ShadowNumSplits=5
ShadowmapSize=4096
ShadowCastingLights=2
EnableNewLighting=1
EnableShadows=1
EnableEnvMaps=1
EnablePostProcessing=1
EnableLightScattering=1
EnableParallaxMaps=1
EnableHQDiffuse=1
EnableShadowPCF=1
EnableAsteroidShadows=1
LightScatteringSunLimit=8
EnableClusteredShading=1
MaxNumberOfLightsIndex=3
ReplaceFakeLights=1
EnablePointLights=0
EnableAutomaticExposure=1
AlwaysUseAccurateSRGBConversion=1

102
FLARDATA/materials.json Normal file

File diff suppressed because one or more lines are too long