Howto:Aircraft reflection shader: Difference between revisions

Jump to navigation Jump to search
Overhaul: Remove references to reflect.eff and add information about the latest version of Fuselagereflect.eff
m (typo; add syntaxhighlight)
(Overhaul: Remove references to reflect.eff and add information about the latest version of Fuselagereflect.eff)
 
Line 1: Line 1:
{{stub}}
{{stub}}
{{forum|47|Effects & Shaders}}
{{forum|47|Effects & Shaders}}
{{caution|
The [[model-combined effect]] shader has '''replaced''' the separate reflection shaders.
The separate reflection shaders should be considered '''deprecated''' and '''should not be used for new development'''.}}


[[File:B29 shader.jpg|thumb|270px|Reflection Shader applied to the [[Boeing B-29 Superfortress|B-29]]. It shows a shiny, high-reflective blank metal.]]
[[File:B29 shader.jpg|thumb|270px|Reflection Shader applied to the [[Boeing B-29 Superfortress|B-29]]. It shows a shiny, high-reflective blank metal.]]
Line 11: Line 6:


== Reflection-Shaders - history and description ==
== Reflection-Shaders - history and description ==
We have currently different reflection shaders, which represents the different states of development process behind.
=== model-combined.eff and model-combined-deferred.eff ===  
 
You have now: reflections, normalmap and specularity map, dirt, lightmaps with 4 simulated lights per object in Default and [[Project Rembrandt|Rembrandt]]. In [[Atmospheric light scattering FAQ|ALS]] you will get in addition also a grain/ rain effect and the darkmap. This shader works only on UVmapped surfaces!
=== reflect.eff ===
{{caution|See caution at the top of the article}}
It all began with a simple ReflectionShader, which simply adds a spherical map on the surface of the object. This shader works on non UV-mapped surfaces. Ideal for simple chrome parts.
 
'''Example Aircraft:''' B29
 
=== reflect-bump-spec.eff ===
{{caution|See caution at the top of the article}}
 
Later it had been enhanced by a [[Howto: Use the normal map effect in aircraft|normal map]]. This makes the surface appear "bumpy" depending on the used normal map. The alpha channel of the normal map also defines the specularity of the surface. This shader works only on UV-mapped surfaces!
 
=== model-combined-deferred.eff and model-combined-transparent.eff ===  
These shaders had been enhanced even more. You have now: reflections, normalmap and specularity map, dirt, lightmaps with 4 simulated lights per object in Default and [[Project Rembrandt|Rembrandt]]. In [[Atmospheric light scattering FAQ|ALS]] you will get in addition also a grain/ rain effect and the darkmap. This shader works only on UVmapped surfaces!
This shader inherits from [[Model-combined_effect|model-combined.eff]], an effect which should never be directly used, since it holds only the definition of the common parts of the two effects.
This shader inherits from [[Model-combined_effect|model-combined.eff]], an effect which should never be directly used, since it holds only the definition of the common parts of the two effects.
The model-combined-transparent.eff has the same features but has the necessary changes to correctly support transparent objects which represents transparent surfaces like glass.
The model-combined-transparent.eff has the same features but has the necessary changes to correctly support transparent objects which represents transparent surfaces like glass.
Line 35: Line 16:
All of these effects use Cubemaps and Cubecrosses from data/Aircraft/Generic/Effects which contains the image of the environment which will be visible as Reflection. Depending on which you choose, the appearance of the model will later change dramatically.
All of these effects use Cubemaps and Cubecrosses from data/Aircraft/Generic/Effects which contains the image of the environment which will be visible as Reflection. Depending on which you choose, the appearance of the model will later change dramatically.


== How to implement the simple ReflectionShader: reflect.eff ==
== How to implement the simple ReflectionShader: ==
{{caution|See caution at the top of the article}}
 
=== The simple and quick method ===
=== The simple and quick method ===
This is a simple and quick method for the simple ReflectionShader, but gives not the freedom to change the later appearance of the aircraft like setting the strength of the reflection or choosing a different cubemap.
Inside the <tt>Aircraft/AircraftName/Models</tt> folder, there should be a main xml file, which usually is <tt>AircraftName.xml</tt>. This file should be the one holding all information on visuals used in the aircraft. As such, we need to indicate which are to be reflectable!
Inside the <tt>Aircraft/AircraftName/Models</tt> folder, there should be a main xml file, which usually is <tt>AircraftName.xml</tt>. This file should be the one holding all information on visuals used in the aircraft. As such, we need to indicate which are to be reflectable!


Inside the <tt>AircraftName.xml</tt>, we need to put the following lines of code, shortly after or before other <animation> tag entries:
Inside the aircraft model configuration file (<tt>AircraftName.xml)</tt>, we need to put the following lines of code, shortly after or before other <animation> tag entries:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
  <nowiki><!-- REFLECTION --></nowiki>
  <nowiki><!-- REFLECTION --></nowiki>
Line 67: Line 44:
Note that for each <object-name> tag, you need to indicate the aircraft's objects. If you are not the original aircraft author and do not know which parts to enter, or how they are named, use the other animations tags object names which indicate the pieces you require to be reflected (such as <object-name>fuselage</object-name> is an obvious one). Obviously do not enter things which you don't want to be reflected!
Note that for each <object-name> tag, you need to indicate the aircraft's objects. If you are not the original aircraft author and do not know which parts to enter, or how they are named, use the other animations tags object names which indicate the pieces you require to be reflected (such as <object-name>fuselage</object-name> is an obvious one). Obviously do not enter things which you don't want to be reflected!


To see them in sim, ensure your View > Rendering options > Effects & shaders options are checked.
As an example the C160 Transall by helijah makes use of this simple method.
=== a bit more difficult Method- but more freedom! ===


The next method describes how to add the effect of a customized simple ReflectionShader, which allows more freedom.
This method has a few parameters to influence how the reflection appears which can be set for every livery configuration:


You'll still need to use the code above in your file but this time, you'll use your own effect shader (below). The difference is you'll replace:
* sim/model/civilian - a boolean to enable or disable the reflection.
<syntaxhighlight lang="xml">
** Civilian aircraft are usually glossy but military aircraft are not.
<inherits-from>Aircraft/Generic/Effects/Fuselagereflect</inherits-from>
* sim/model/livery/shininess - a floating point value to specify the reflection factor.
</syntaxhighlight>
** The range is between -1.0 and 0.0
with
* sim/model/livery/fresnel - a floating point value to specify the Fresnel factor.
<syntaxhighlight lang="xml">
** The range is between 0.0 and 1.0
<inherits-from>Aircraft/YourAircraftName/Effects/foo_reflect</inherits-from>
</syntaxhighlight>
Now we'll create this foo_reflect file.


Create a Folder inside your Models-folder called "Effects".
These parameters can all be defined within a livery configuration file:<syntaxhighlight lang="xml">
Now you create a new .eff file named: foo_reflect.eff and save it to the "Effects" folder:
<syntaxhighlight lang="xml">
<!--foo_reflect.eff-->
<PropertyList>
<PropertyList>
  <name>Effects/foo_reflect</name>
   <sim>
  <inherits-from>Effects/reflect</inherits-from>
     <model>
  <parameters>
       <civilian type="bool">true</civilian>
    <texture n="5">
       <livery>
      <type>cubemap</type>
         <name type="string">Factory Demonstrator</name>
<!-- use this form for a cube cross
        <texture>Liveries/factory.png</texture>
      <image>Aircraft/Generic/Effects/CubeCrosses/real.blue_sky.png</image>-->
        <shininess type="float">-0.5</shininess>
<!-- use this form for a 6 image cube map -->
        <fresnel type="float">0.7</fresnel>
      <images>
       </livery>
        <positive-x>Aircraft/Generic/Effects/CubeMaps/real.blue-sky/fair-sky_px.png</positive-x>
     </model>
        <negative-x>Aircraft/Generic/Effects/CubeMaps/real.blue-sky/fair-sky_nx.png</negative-x>
   </sim>
        <positive-y>Aircraft/Generic/Effects/CubeMaps/real.blue-sky/fair-sky_py.png</positive-y>
  </PropertyList>
        <negative-y>Aircraft/Generic/Effects/CubeMaps/real.blue-sky/fair-sky_ny.png</negative-y>
        <positive-z>Aircraft/Generic/Effects/CubeMaps/real.blue-sky/fair-sky_pz.png</positive-z>
        <negative-z>Aircraft/Generic/Effects/CubeMaps/real.blue-sky/fair-sky_nz.png</negative-z>
      </images>
    </texture>
    <texture n="6">
      <image>Aircraft/Generic/Effects/Rainbow.png</image>
      <filter>linear-mipmap-linear</filter>
      <wrap-s>repeat</wrap-s>
      <wrap-t>repeat</wrap-t>
      <internal-format>normalized</internal-format>
    </texture>
    <texture n="7">
      <image>Aircraft/Generic/Effects/FresnelLookUp.png</image>
      <filter>linear-mipmap-linear</filter>
      <wrap-s>repeat</wrap-s>
      <wrap-t>repeat</wrap-t>
      <internal-format>normalized</internal-format>
    </texture>
      <texture n="8">
      <image>Aircraft/foo/Models/Effects/greymap.png</image>
      <filter>linear-mipmap-linear</filter>
      <wrap-s>repeat</wrap-s>
      <wrap-t>repeat</wrap-t>
      <internal-format>normalized</internal-format>
    </texture>
    <rendering-hint>transparent</rendering-hint>
    <shade-model>smooth</shade-model>
    <rainbowiness type="float">0.01</rainbowiness>
    <fresneliness>0.0</fresneliness>
    <noisiness>0.0</noisiness>
    <refl_correction>0.0</refl_correction>
    <ambient_correction>0.0</ambient_correction>
    <reflect_map>1</reflect_map>
  </parameters>
</PropertyList>
</syntaxhighlight>
</syntaxhighlight>
'''Explanation:'''


The tags at the bottom:
==== Adding a normal-map ====
It is also quite simple to to add a normal-map texture by expanding the section in the aircraft model configuration file:<syntaxhighlight lang="xml">
  <effect>
    <name>Effects/normalmap-reflection</name>
    <inherits-from>Aircraft/Generic/Effects/Fuselagereflect</inherits-from>
    <object-name>fuselage</object-name>
    <object-name>wing</object-name>
    <parameters>
      <texture n="2">
        <image>Aircraft/AircraftName/Models/normalmap.png</image>
      </texture>
    </parameters>
  </effect>
</syntaxhighlight>To see them in sim, ensure your View > Rendering options > Effects & shaders options are checked.


* <rainbowiness> = adds a nice Rainbow-effect to the reflection. Perfect for the modern Airliner-windows or modern coatings.
As an example the C160 Transall by helijah makes use of this simple method.
* <fresneliness> = adds some black stripes to the reflection.
* <noisiness> = adds noise to the reflection. Usefull for dirt etc...
* <ambient_correction> = correct the appearance of the reflection at shadowed parts.
* <reflect_map> = enables the use of a greymap. If enabled the greymap will controll the strength of the reflection. Black = zero reflection, White = full reflection. For modern aircraft coatings a grey of 75-90% is usefull, for chromish parts about 10-25%.
* <refl_correction> = another parameter for controlling the strength of the reflection. Reflect_map and refl_correction are working together.
* ''"texture= n5"'' is the path to the image wich will be later the reflection. You can choose between cubemaps with 6 single images or a cubecross. You can take the one included in ''data/Aircraft/Generic/Effects'' or you can use your own.
* ''"texture= n6"'' is the path to the rainbow-texture.
* ''"texture= n7"'' path to the fresnel-texture.
* ''"texture= n8"''is the path to the greymap.  


==== Customizing the reflection shader ====
To further customize the reflection shader take a look at the [[ALS technical notes]]
[[Category:Shaders]]
[[Category:Shaders]]
[[Category:Aircraft enhancement|Aircraft Reflection Shader]]
[[Category:Aircraft enhancement|Aircraft Reflection Shader]]
[[Category:Howto|Aircraft Reflection Shader]]
[[Category:Howto|Aircraft Reflection Shader]]
160

edits

Navigation menu