mirror of
https://git.aaro.dev/VRCBoard/vrcboard-udon.git
synced 2026-03-17 06:09:46 +00:00
99 lines
3.7 KiB
GLSL
99 lines
3.7 KiB
GLSL
Shader "VRCBoard/VRCBoardAtlasShader"
|
|
{
|
|
Properties
|
|
{
|
|
// _MainTex
|
|
_MainTexAtlas("Albedo", 2D) = "white" {}
|
|
[HideInInspector] _MainTexAtlasSize("Atlas Size", int) = 1
|
|
[HideInInspector] _MainTexAtlasIndex("Atlas Position", int) = 0
|
|
[HideInInspector] _MainTexColor("Color", Color) = (1,1,1,1)
|
|
|
|
// _EmissionMap
|
|
_EmissionMapAtlas("Emission", 2D) = "black" {}
|
|
[HideInInspector] _EmissionMapAtlasSize("Emission Atlas Size", int) = 1
|
|
[HideInInspector] _EmissionMapAtlasIndex("Emission Atlas Position", int) = 0
|
|
[HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1)
|
|
|
|
// _NormalMap
|
|
_NormalMapAtlas("Normal", 2D) = "bump" {}
|
|
[HideInInspector] _NormalMapAtlasSize("Normal Atlas Size", int) = 1
|
|
[HideInInspector] _NormalMapAtlasIndex("Normal Atlas Position", int) = 0
|
|
[HideInInspector] _NormalMapScale("Normal Scale", float) = 1
|
|
|
|
}
|
|
SubShader
|
|
{
|
|
Tags { "RenderType"="Opaque" }
|
|
LOD 200
|
|
|
|
CGPROGRAM
|
|
#pragma surface surf Standard fullforwardshadows
|
|
|
|
#pragma target 3.0
|
|
|
|
sampler2D _MainTexAtlas;
|
|
sampler2D _EmissionMapAtlas;
|
|
sampler2D _NormalMapAtlas;
|
|
|
|
uint _MainTexAtlasSize;
|
|
uint _MainTexAtlasIndex;
|
|
float4 _MainTexColor;
|
|
|
|
|
|
uint _EmissionMapAtlasSize;
|
|
uint _EmissionMapAtlasIndex;
|
|
float4 _EmissionColor;
|
|
|
|
uint _NormalMapAtlasSize;
|
|
uint _NormalMapAtlasIndex;
|
|
float _NormalMapScale;
|
|
|
|
struct Input
|
|
{
|
|
float2 uv_MainTexAtlas;
|
|
float2 uv_EmissionMapAtlas;
|
|
float2 uv_NormalMapAtlas;
|
|
};
|
|
|
|
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
|
|
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
|
|
// #pragma instancing_options assumeuniformscaling
|
|
UNITY_INSTANCING_BUFFER_START(Props)
|
|
UNITY_INSTANCING_BUFFER_END(Props)
|
|
|
|
void surf (Input IN, inout SurfaceOutputStandard o)
|
|
{
|
|
_MainTexAtlasIndex = _MainTexAtlasIndex+_MainTexAtlasSize;
|
|
_EmissionMapAtlasIndex = _EmissionMapAtlasIndex+_EmissionMapAtlasSize;
|
|
_NormalMapAtlasIndex = _NormalMapAtlasIndex+_NormalMapAtlasSize;
|
|
|
|
float2 MainTexAtlasUV = float2(
|
|
(float(_MainTexAtlasIndex % _MainTexAtlasSize) + IN.uv_MainTexAtlas.x) / _MainTexAtlasSize,
|
|
1.0 - (float(_MainTexAtlasIndex / _MainTexAtlasSize) - IN.uv_MainTexAtlas.y) / _MainTexAtlasSize
|
|
);
|
|
|
|
float2 EmissionMapAtlasUV = float2(
|
|
(float(_EmissionMapAtlasIndex % _EmissionMapAtlasSize) + IN.uv_EmissionMapAtlas.x) / _EmissionMapAtlasSize,
|
|
1.0 - (float(_EmissionMapAtlasIndex / _EmissionMapAtlasSize) - IN.uv_EmissionMapAtlas.y) / _EmissionMapAtlasSize
|
|
);
|
|
|
|
float2 NormalMapAtlasUV = float2(
|
|
(float(_NormalMapAtlasIndex % _NormalMapAtlasSize) + IN.uv_NormalMapAtlas.x) / _NormalMapAtlasSize,
|
|
1.0 - (float(_NormalMapAtlasIndex / _NormalMapAtlasSize) - IN.uv_NormalMapAtlas.y) / _NormalMapAtlasSize
|
|
);
|
|
|
|
|
|
fixed4 c = tex2D (_MainTexAtlas, MainTexAtlasUV);
|
|
fixed4 e = tex2D (_EmissionMapAtlas, EmissionMapAtlasUV);
|
|
fixed4 n = tex2D (_NormalMapAtlas, NormalMapAtlasUV);
|
|
|
|
o.Albedo = c.rgb * _MainTexColor.rgb;
|
|
o.Emission = e.rgb * _EmissionColor.rgb;
|
|
o.Normal = UnpackNormal(n);
|
|
}
|
|
ENDCG
|
|
}
|
|
FallBack "Diffuse"
|
|
CustomEditor "VRCBoard.VRCBoardShaderEditor"
|
|
}
|