You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.2 KiB
HLSL

/******************************************************************************/
/*
Project - MudBun
Publisher - Long Bunny Labs
http://LongBunnyLabs.com
Author - Ming-Lun "Allen" Chou
http://AllenChou.net
*/
/******************************************************************************/
#ifndef MUDBUN_MESH_COMMON
#define MUDBUN_MESH_COMMON
#ifdef MUDBUN_VALID
#include "../BrushDefs.cginc"
#include "../GenPointDefs.cginc"
#include "../Math/Codec.cginc"
#include "../Math/Vector.cginc"
#include "../NormalDefs.cginc"
#include "../RenderModeDefs.cginc"
#endif
void mudbun_mesh_vert
(
uint id,
out float4 vertexWs,
out float3 vertexLs,
out float3 normalWs,
out float3 normalLs,
out float3 tangentWs,
out float3 tangentLs,
out float4 color,
out float hash,
out float sdfValue,
out float3 normal2dLs,
out float3 normal2dWs
)
{
#if MUDBUN_VALID
if ((scaleSign < 0) ^ invertNormals)
id = 3 * (id / 3) + 2 - (id % 3);
vertexLs = aGenPoint[id].posNorm.xyz;
vertexWs = mul(localToWorld, float4(vertexLs, 1.0f));
normalLs = unpack_normal(aGenPoint[id].posNorm.w);
normal2dLs = unpack_normal(aGenPoint[id].norm2d);
if (should_quantize_normal())
{
normalLs = quantize_normal(normalLs);
normal2dLs = quantize_normal(normal2dLs);
}
normalWs = normalize(mul(localToWorldIt, float4(normalLs, 0.0f)).xyz);
normal2dWs = normalize(mul(localToWorldIt, float4(normal2dLs, 0.0f)).xyz);
tangentWs = compute_tangent(normalWs);
tangentLs = normalize(mul(worldToLocalIt, float4(tangentWs, 0.0f)).xyz);
color = unpack_rgba(aGenPoint[id].material.color);
if (!IsGammaSpace())
color.rgb = gamma_to_linear_space(color.rgb);
hash = aGenPoint[id].material.hash;
sdfValue = aGenPoint[id].sdfValue;
#endif
}
void mudbun_mesh_vert
(
uint id,
out float4 vertexWs,
out float3 vertexLs,
out float3 normalWs,
out float3 normalLs,
out float3 tangentWs,
out float3 tangentLs,
out float4 color,
out float4 emissionHash,
out float2 metallicSmoothness,
out float4 textureWeight,
out float sdfValue,
out float3 normal2dLs,
out float3 normal2dWs
)
{
#if MUDBUN_VALID
mudbun_mesh_vert(id, vertexWs, vertexLs, normalWs, normalLs, tangentWs, tangentLs, color, emissionHash.a, sdfValue, normal2dLs, normal2dWs);
if ((scaleSign < 0) ^ invertNormals)
id = 3 * (id / 3) + 2 - (id % 3);
emissionHash.rgb = unpack_rgba(aGenPoint[id].material.emissionTightness).rgb;
if (!IsGammaSpace())
emissionHash.rgb = gamma_to_linear_space(emissionHash.rgb);
metallicSmoothness = unpack_saturated(aGenPoint[id].material.metallicSmoothness);
textureWeight = unpack_rgba(aGenPoint[id].material.textureWeight);
#else
vertexWs = float4(0.0f, 0.0f, 0.0f, 1.0f);
vertexLs = float3(0.0f, 0.0f, 0.0f);
normalWs = float3(0.0f, 0.0f, 0.0f);
normalLs = float3(0.0f, 0.0f, 0.0f);
tangentWs = float3(0.0f, 0.0f, 0.0f);
tangentLs = float3(0.0f, 0.0f, 0.0f);
color = float4(0.0f, 0.0f, 0.0f, 1.0f);
emissionHash = float4(0.0f, 0.0f, 0.0f, 0.0f);
metallicSmoothness = float2(0.0f, 0.0f);
textureWeight = int4(1.0f, 0.0f, 0.0f, 0.0f);
sdfValue = 0.0f;
normal2dLs = float3(0.0f, 0.0f, 0.0f);
normal2dWs = float3(0.0f, 0.0f, 0.0f);
#endif
}
#endif