LayerShader

From Unify Community Wiki
Revision as of 19:50, 12 November 2009 by Jessy (Talk | contribs)

Jump to: navigation, search

Original Author: Bill Vinton (Sync1B)
Updated version for 2-texture cards, and doubled lighting version: Jessy

Contents

Description

Terrain using the shader

This shader is good for making terrains where you need to tile textures but still want paths. Basically it blends between two textures using alpha from the third (Path Mask) texture.

This shader requires a 4-texture video card (GeForce3 and up, Radeon 8500 and up) to be rendered in one pass.

See also: TerrainFourLayer, which blends four terrain textures, and TerrainTwoLayerBumped shader, which adds bumpmapping.


Usage

Terrains, Tile masking

Path Mask texture's alpha channel is used to blend between Main and Path textures.

This first, original version, does not use "doubled" lighting. (Doubling the lighting seems to be the standard with built-in Unity shaders). Because the strength of the Ambient light in the Render Setting is halved, you will only be able to achieve half the brightness of your textures with ambient light alone, unless you script the Ambient light to have color components above 1. The second shader below doubles the lighting calculation, which means that if you set Ambient light to be white, and have no other lights in your scene, the terrain (or whatever else you use this on) will show up with the textures exactly as you painted them. It is also possible to achieve overblown highlights with this latter version.

ShaderLab - TerrainTwoLayer.shader

<shaderlab>Shader "MyShaders/TerrainTwoLayer" {


Properties { _Color ("Main Color", Color) = (1,1,1) _MainTex ("Main Texture (RGB)", 2D) = "" _PathTex ("Path Texture (RGB)", 2D) = "" _PathMask ("Path Mask (A)", 2D) = "" }

SubShader { Lighting On

Material { Ambient [_Color] Diffuse [_Color] }

Pass { SetTexture [_MainTex]

SetTexture [_PathMask] { combine previous, texture }

SetTexture [_PathTex] { combine texture lerp(previous) previous }

SetTexture [_MainTex] { combine previous * primary } } }

SubShader { Lighting On

Material { Ambient [_Color] Diffuse [_Color] }

Pass { SetTexture [_MainTex] { combine texture * primary } }

Pass { Blend SrcAlpha OneMinusSrcAlpha

SetTexture [_PathTex] { combine texture * primary }

SetTexture [_PathMask] { combine previous, texture } } }

Fallback "Diffuse"


}</shaderlab>

ShaderLab - Two Layer Terrain DOUBLE.shader

<shaderlab>Shader "Two Layer Terrain DOUBLE" {


Properties { _Color ("Main Color", Color) = (1,1,1) _MainTex ("Main Texture (RGB)", 2D) = "" _PathTex ("Path Texture (RGB)", 2D) = "" _PathMask ("Path Mask (A)", 2D) = "" }

SubShader { Lighting On

Material { Ambient [_Color] Diffuse [_Color] }

Pass { SetTexture [_MainTex]

SetTexture [_PathMask] { combine previous, texture }

SetTexture [_PathTex] { combine texture lerp(previous) previous }

SetTexture [_MainTex] { combine previous * primary DOUBLE } } }

SubShader { Lighting On

Material { Ambient [_Color] Diffuse [_Color] }

Blend AppSrcAdd AppDstAdd

Pass { SetTexture [_MainTex] { combine texture * primary }

SetTexture [_PathMask] { combine previous * one - texture alpha DOUBLE } }

Pass { SetTexture [_PathTex] { combine texture * primary }

SetTexture [_PathMask] { combine previous * texture alpha DOUBLE } } }

Fallback "Diffuse"


}</shaderlab>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox