Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
water [2020/01/10 09:05] – [Refraction] admin | water [2020/06/02 14:52] – [Example] admin | ||
---|---|---|---|
Line 2: | Line 2: | ||
A water surface is not seldomly a popular game component. We do not provide directly a water surface component, but it is quite easy to setup one. | A water surface is not seldomly a popular game component. We do not provide directly a water surface component, but it is quite easy to setup one. | ||
+ | |||
+ | {{ : | ||
Water rendering is based on: | Water rendering is based on: | ||
Line 8: | Line 10: | ||
* reflection computation | * reflection computation | ||
* and the water shader itself | * and the water shader itself | ||
- | |||
===== Components ===== | ===== Components ===== | ||
Line 22: | Line 23: | ||
Create an instance of TGorillaRenderPassRefraction and apply the viewport and camera to it. | Create an instance of TGorillaRenderPassRefraction and apply the viewport and camera to it. | ||
- | Because we don't want to appear the water surface (would be black) in this image data, we should ignore it while refraction computation. This can be done very easily, by: | + | Because we don't want to appear the water surface |
<file pascal> | <file pascal> | ||
FRefraction.IgnoreControl(FWaterPlane); | FRefraction.IgnoreControl(FWaterPlane); | ||
Line 53: | Line 54: | ||
==== Water Material ==== | ==== Water Material ==== | ||
- | Finally of course we need a material shader (TGorillaWaterMaterialSource), | + | Finally of course we need a material shader (TGorillaWaterMaterialSource), |
For computing waves, riffles and foam the shader needs a few textures: | For computing waves, riffles and foam the shader needs a few textures: | ||
Line 62: | Line 63: | ||
* FoamTexture | * FoamTexture | ||
- | The different | + | The different |
{{: | {{: | ||
Line 81: | Line 82: | ||
In the end do not forget to link water plane with water material source. | In the end do not forget to link water plane with water material source. | ||
+ | <file pascal> | ||
+ | FWaterPlane.MaterialSource := FWaterMaterial; | ||
+ | </ | ||
+ | |||
+ | === Properties === | ||
+ | |||
+ | Besides the textures, the water material source provides a few configuration properties to influence water look. | ||
+ | |||
+ | ^ Property ^ Description ^ | ||
+ | | Diffuse | The material shader uses this color as main color for water. | | ||
+ | | Specular | The specular color interacts with the applied specular color map and configurates its intensity. | | ||
+ | | WaveSpeed | Defines how fast waves are moving. | | ||
+ | | WaveSize | Defines the amplitude of waves, which means how high or low waves are simulated. This value do not manipulate mesh vertices (only by displacement mapping). | | ||
+ | | Displacement | Defines the factor of vertex displacement based on the displacement map or normal map. | | ||
+ | | ReflCorrection | By this value you can modify the color of reflection, default value: Vector3D(1.0, | ||
+ | | RefrCorrection | By this value you can modify the color of refraction on water surface, default value: Vector3D(1.1, | ||
===== Example ===== | ===== Example ===== | ||
+ | |||
+ | {{youtube> | ||
Take a look at this example code for a complex water surface setup. | Take a look at this example code for a complex water surface setup. | ||
Line 131: | Line 150: | ||
FWaterMaterial := TGorillaWaterMaterialSource.Create(FWaterPlane); | FWaterMaterial := TGorillaWaterMaterialSource.Create(FWaterPlane); | ||
FWaterMaterial.Parent := FWaterPlane; | FWaterMaterial.Parent := FWaterPlane; | ||
- | FWaterMaterial.NormalTexture.LoadFromFile(LTexPath + ' | + | FWaterMaterial.NormalMap.LoadFromFile(LTexPath + ' |
FWaterMaterial.DUDVTexture.LoadFromFile(LTexPath + ' | FWaterMaterial.DUDVTexture.LoadFromFile(LTexPath + ' | ||
- | FWaterMaterial.DisplacementTexture.LoadFromFile(LTexPath + ' | + | FWaterMaterial.DisplacementMap.LoadFromFile(LTexPath + ' |
- | FWaterMaterial.SpecularTexture.LoadFromFile(LTexPath + ' | + | FWaterMaterial.SpecularMap.LoadFromFile(LTexPath + ' |
FWaterMaterial.FoamTexture.LoadFromFile(LTexPath + ' | FWaterMaterial.FoamTexture.LoadFromFile(LTexPath + ' | ||
Line 144: | Line 163: | ||
end; | end; | ||
</ | </ | ||
+ | |||
+ | Next step: [[bokeh|Bokeh]] |