Normal From Height Node
Description
Creates a normal map from a height value defined by input Input.
Ports
Name | Direction | Type | Description |
---|---|---|---|
In | Input | Vector 1 | Input height value |
Out | Output | Vector 3 | Output value |
Controls
Name | Type | Options | Description |
---|---|---|---|
Output Space | Dropdown | Tangent, World | Sets the coordinate space of the output normal. |
Generated Code Example
The following example code represents one possible outcome of this node per Output Space mode.
Tangent
void Unity_NormalFromHeight_Tangent(float In, out float3 Out)
{
float3 worldDirivativeX = ddx(Position * 100);
float3 worldDirivativeY = ddy(Position * 100);
float3 crossX = cross(TangentMatrix[2].xyz, worldDirivativeX);
float3 crossY = cross(TangentMatrix[2].xyz, worldDirivativeY);
float3 d = abs(dot(crossY, worldDirivativeX));
float3 inToNormal = ((((In + ddx(In)) - In) * crossY) + (((In + ddy(In)) - In) * crossX)) * sign(d);
inToNormal.y *= -1.0;
Out = normalize((d * TangentMatrix[2].xyz) - inToNormal);
Out = TransformWorldToTangent(Out, TangentMatrix);
}
World
void Unity_NormalFromHeight_World(float In, out float3 Out)
{
float3 worldDirivativeX = ddx(Position * 100);
float3 worldDirivativeY = ddy(Position * 100);
float3 crossX = cross(TangentMatrix[2].xyz, worldDirivativeX);
float3 crossY = cross(TangentMatrix[2].xyz, worldDirivativeY);
float3 d = abs(dot(crossY, worldDirivativeX));
float3 inToNormal = ((((In + ddx(In)) - In) * crossY) + (((In + ddy(In)) - In) * crossX)) * sign(d);
inToNormal.y *= -1.0;
Out = normalize((d * TangentMatrix[2].xyz) - inToNormal);
}