- Home /
Shader error: incorrect number of arguments to numeric-type constructor
Here's the line with the error:
float3 normalDirection = normalize(float3(
mul(float4(input.normal, 0.0), modelMatrixInverse)));
I have no clue about anything shader related, I'm just trying to fix a broken asset from the asset store. If you guys could fix this one line for me or explain what's wrong that'd be awesome. Thanks.
Answer by Glurth · Dec 15, 2016 at 11:39 PM
mul(float4(input.normal, 0.0), modelMatrixInverse)
Assuming ModelMatrixInverse is a 4x4 matrix, the result of this operation is a float4. You cannot pass a float4 as a parameter to a float3() function.
Right, but you can simply grab the xyz components by using
mul(float4(input.normal, 0.0), model$$anonymous$$atrixInverse).xyz
The syntax allows even more strange combinations like:
.yzzx
which will put the y value in the x component, the z value into the y and z component and the x value into the w component.
In case you need a float2, just use two components for example:
.xz
Good solution, not sure why I left that point out! thanks @Bunny83
After going thru all the lines with the error and fixing it, there's no more errors but for some reason it just displays as black. Oh well, I don't know what I expected, this asset is pretty old. Thanks for the help.
Answer by Pangamini · Dec 16, 2016 at 09:00 AM
Normals are direction vectors, you don't want to apply translation to them. Using a 3x3 matrix is also faster Try this: float3 normalDirection = normalize( mul(input.normal, (float3x3) modelMatrixInverse));
Your answer
Follow this Question
Related Questions
Shader issue with a 170 upper angle 0 Answers
UnityObjectToClipPos is inverted? 0 Answers
post shader: reconstruct worldspace plane coordinates 1 Answer
Is it possible to avoid writing to certain g-buffers? 1 Answer
RimLight Shader 0 Answers