- Home /
Question by
Rs · Aug 26, 2014 at 02:27 PM ·
shaderconversionhlsl
Convert shader from DirectX 9 to DirectX 11
I have this shader that works when Unity is set to use DirectX 9. I am porting the project to DirectX 11 now and the shader doesn't work as expected. Not being an expert in HLSL I played around a bit not obtaining interesting results so I'd appreciate any help. The vertex deformation part works fine so you may ignore the myvert function. Thank you for your attention.
Shader "Flow" {
Properties {
_Color ("Diffuse Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
_BumpMap ("Bumpmap", 2D) = "bump" {}
_AlphaMask ("Alpha Mask", 2D) = "white" {}
_Speed ("Speed", range(0,2)) = 0.1
_VertexDeformation ("Vertex Deformation", range(0,.5)) = 0.05
}
SubShader {
Tags { "Queue"="Transparent" "RenderType"="Transparent" }
LOD 200
ZWrite On
Cull Off
Lighting On
// extra pass that renders to depth buffer only
Pass {
ZWrite On
ColorMask 0
}
// Set up alpha blending
Blend SrcAlpha OneMinusSrcAlpha
AlphaTest LEqual [_Cutoff]
CGPROGRAM
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a surface program or both vertex and fragment programs.
#pragma exclude_renderers gles
// #pragma surface surf Lambert finalcolor:mycolor vertex:myvert
#pragma surface surf Lambert alpha
#pragma vertex myvert
float4 _Color;
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _AlphaMask;
float _Speed;
float _VertexDeformation;
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
//float alpha;
};
void myvert (inout appdata_full v, out Input data) {
if(_VertexDeformation > 0.0)
{
v.vertex.z += _VertexDeformation * clamp(-v.vertex.y, 0 , 10) * sin(-v.vertex.y * 5 * cos(v.vertex.x) - _Time * 1000);
}
}
void mycolor (Input IN, SurfaceOutput o, inout fixed4 color) {
}
void surf (Input IN, inout SurfaceOutput o) {
half4 c = _Color * tex2D (_MainTex, IN.uv_MainTex + _Time.xy * _Speed );
o.Normal = UnpackNormal(tex2D( _BumpMap, IN.uv_BumpMap + _Time.xy * _Speed )).rgb * tex2D( _AlphaMask, IN.uv_BumpMap ).r;
o.Albedo = c.rgb * _Color.rgb;
o.Emission = o.Albedo * 0.75;
o.Alpha = tex2D (_AlphaMask, IN.uv_BumpMap) * c.a * _Color.a; //IN.alpha;
}
ENDCG
}
FallBack "Diffuse"
}
Comment
Your answer
Follow this Question
Related Questions
Fog shader 2 Answers
How to use Graphics.Blit with custom input textures 3 Answers
converting HLSL to GLSL. 0 Answers
How can I get correct lighting on a low poly water shader? 1 Answer
tangent space viewDir in a SurfaceShader 0 Answers