Use the following mod detection code in your ModPlugin class. If you want to make calls to GraphicsLib functions or use GraphicsLib objects, you must first check to see that hasGraphicsLib is true before calling/referencing them! Note that some scenarios may make this arrangement difficult, requiring GraphicsLib for resolving class links. Note that "shaderLib" is intentional here; the mod ID has remained the same to ensure backwards-compatibility.
Material Map: This texture determines the reflectivity of the sprite. Internally, the lighting engine uses a minimum function (i.e. reflectivity = the darker of the pixel on screen and the corresponding pixel on the material map), so there are limitations on what you can do with a material map. In general, you want to begin with the original ship sprite and then darken areas that should not reflect as much light. You can also darken individual color channels to allow interesting effects like having reflected shines being a different color than the hull. Remember that the material map must have an alpha channel that matches the original sprite's alpha channel. For implementation, see the example in GraphicsLib. If a sprite lacks a material map, the default is the original sprite (i.e. identical to previous lighting versions).
Normal Map: This texture is difficult to make properly, but the results can be well worth it. There are many tutorials for making normal maps elsewhere on the Internet, if you are interested in making them for vanilla sprites or your own ships. However, if you want an easy way out, an adequate normal map can be generated automatically through Photoshop, Crazy Bump, or similar programs, which takes far less time than making a normal map from the ground up. Remember that the normal map must have an alpha channel that matches the original sprite's alpha channel. For implementation, see the example in GraphicsLib. If a sprite lacks a normal map, the lighting engine will default to using the old lighting model for that sprite rather than the new Blinn-Phong model.
Surface Map: This texture is completely optional (even more so than the other two). Surface maps enhance the normal map of the object by influencing how the specularity looks. The red channel corresponds to luminosity and will cause the ship to appear to glow wherever the red channel is nonzero. The green channel determines the specular intensity of the object; a value of zero is totally matte while a high value will be very shiny. The blue channel determines specular hardness, so a value of zero is cartoonishly shiny while a high value is very glossy; a value of 0.2 (or 51 on the integer scale) corresponds to the default behavior. Remember that the surface map must have an alpha channel that matches the original sprite's alpha channel. If a sprite lacks a surface map, the lighting engine will substitute red = 0, green = (derived from material map), blue = 0.2.
Version 1.4.4 (December 25, 2020):
- Possible surface map transparency fix?
- Fixed version file HTTPS redirect
- Overload EMP colors now match the default overlay (or any special overload colors that might be scripted in)
* Added "useVentColorsForOverloadArcs" option for old behavior
Version 1.4.3 (September 28, 2020):
- Fixed the Benchmark progress indicator
- Fixed normal map scaling when flipped
- Migrated version file to custom host (sigh)
Version 1.4.2 (July 8, 2020):
- Added global function suppressEffects() to ShipDestructionEffects to suppress spawning effects for a particular ship
- Migrated version file to BitBucket
Version 1.4.1 (September 8, 2019):
- Render order fix for layered modules
Version 1.4.0 (May 17, 2019):
- Updated for Starsector 0.9.1a
- Added shader maps for new Starsector 0.9.1a sprites
- Support for alternative ship textures
- Minor fix for light fade-in logic
- Minor fix for automatic distortion fade-out logic
- Render order update
Version 1.3.1 (February 15, 2019):
- Fixed lighting for plasma burn system
- Rendering order fix for lighting
Version 1.3.0 (November 17, 2018):
- Added a bunch of shader maps for new/updated Starsector 0.9a sprites
- Updated lighting settings where applicable for new/updated Starsector 0.9a content
- Fixed rendering order for station modules
- Added lighting support for mine explosions
- Works in Starsector 0.9a
Version 1.2.1 (June 10, 2017)
- Improved various effects for certain edge cases with sprites that are significantly smaller than the collision radius
Version 1.2.0 (June 4, 2017)
- Now works on Starsector 0.8.1a
- Additional LazyLib check
- Fixed some misc. bugs that nobody noticed
- Tweaked ship destruction effects for ship pieces to avoid fx spam
- Updated even more sprites
Version 1.1.0 (April 23, 2017)
- Now works on Starsector 0.8a
- Supports lighting on destroyed ship pieces
- New maps for the new ships/weapons, and updated maps for a large number of existing ships/weapons
Version 1.0.4 (March 26, 2017)
- Adjusted ripple intensity for ship deaths
- Disable bloom automatically on Intel IGPs
Version 1.0.3 (January 8, 2017)
- Nvidia post processing bug is fixed
Version 1.0.2 (May 21, 2016)
- General compatibility update
Version 1.0.1 (April 22, 2016)
- Added sun/hyperspace lighting from SS+
Version 1.0.0 (April 15, 2016)
- Renamed GraphicsLib
- shaderSettings.json renamed to GRAPHICS_OPTIONS.ini
- Added graphical effects plugins previously in Starsector+
- Added data/config/no_self_destruct.csv in case you want your mod-added missiles to not explode automatically