babbleon Posted January 30, 2018 Author Share Posted January 30, 2018 Hi Pryme8, Sorry for not replying sooner, I have been out. Will have a look at it this evening. Really looking forwarding to putting this code to use! Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted January 30, 2018 Share Posted January 30, 2018 s'all right, I have been working all day and have not had a chance to do much but start picking over some hacks to fix the lightness issue. *Edit* ANNNNNDDD fixed it... ill upload it to git here in the next 20. NasimiAsl 1 Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted January 30, 2018 Share Posted January 30, 2018 https://github.com/Pryme8/Pryme8.github.io/blob/master/shaderStuff/tri-plane-no-uv/index.html#L147 http://pryme8.github.io/shaderStuff/tri-plane-no-uv @babbleon what features do you need out of the standard material? NasimiAsl 1 Quote Link to comment Share on other sites More sharing options...
babbleon Posted January 30, 2018 Author Share Posted January 30, 2018 Well, basically I would need all the functionality of StandardMaterial but with the ability to specify that any particular texture uses the vertex colour for placement. See my first post for how I saw it could be used... and now thinking about it, the u & vScale could be passed as parameters: coordinatesIndex = vertexColor(XuScale, XvScale, YuScale, YvScale, ZuScale, Zvscale) I am not sure how much is involved with this... so if I said all the functionality of StandardMaterial... would you throw your laptop out of the window? However, if the above is completely out of the question, I would like to be able to specify the following textures using UVs for coordinates; bump, specular, ambient ... with vertex colour being used for bump and specular. Also would need ambientColor, diffuseColor, specularColor etc. None of this is helped by my lack of understanding how difficult this is or is not. Tell me how far you are willing to go with this and I can maybe finish this off myself if you're strapped for time. PS. This is tons better than a procedural wood texture! Quote Link to comment Share on other sites More sharing options...
NasimiAsl Posted January 30, 2018 Share Posted January 30, 2018 you can move your shader in custom material that have all standard material functions Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted January 30, 2018 Share Posted January 30, 2018 14 minutes ago, babbleon said: I am not sure how much is involved with this... so if I said all the functionality of StandardMaterial... would you throw your laptop out of the window? Nope, I would ping @NasimiAsl and have him use his shaderBuilder library to clone the standard material and then replace the diffuse function. NasimiAsl 1 Quote Link to comment Share on other sites More sharing options...
NasimiAsl Posted January 30, 2018 Share Posted January 30, 2018 i am on it my friend @Pryme8 Pryme8 1 Quote Link to comment Share on other sites More sharing options...
babbleon Posted January 30, 2018 Author Share Posted January 30, 2018 Thank you NasimiAsl Quote Link to comment Share on other sites More sharing options...
NasimiAsl Posted January 30, 2018 Share Posted January 30, 2018 https://www.babylonjs-playground.com/#F04MZ7#16 flat normal https://www.babylonjs-playground.com/#F04MZ7#17 normal https://www.babylonjs-playground.com/#F04MZ7#18 all is flat except blue color i am close but has a some work @babbleon @Pryme8 Pryme8 1 Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted January 30, 2018 Share Posted January 30, 2018 I bet I can get it from here. Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted January 30, 2018 Share Posted January 30, 2018 https://www.babylonjs-playground.com/#F04MZ7#19 Why does the texture load callback fire so many times? Quote Link to comment Share on other sites More sharing options...
NasimiAsl Posted January 30, 2018 Share Posted January 30, 2018 i dont know Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted January 30, 2018 Share Posted January 30, 2018 Hahaha, ok Ill get it workin thank you for you'r help. This will be the first time I have used your extension. Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted January 30, 2018 Share Posted January 30, 2018 So let me get this right... if I just set my fragment shader to be and quote: "#include<__decl__defaultFragment> #[Fragment_Begin] #extension GL_OES_standard_derivatives : enable #ifdef LOGARITHMICDEPTH #extension GL_EXT_frag_depth : enable #endif #define RECIPROCAL_PI2 0.15915494 uniform vec3 vEyePosition; uniform vec3 vAmbientColor; varying vec3 vPositionW; #ifdef NORMAL varying vec3 vNormalW_helper; varying vec3 localNormal; varying vec3 localPosition; vec3 vNormalW; #endif #ifdef VERTEXCOLOR varying vec4 vColor; #endif #include<helperFunctions> #include<__decl__lightFragment>[0..maxSimultaneousLights] #include<lightsFragmentFunctions> #include<shadowsFragmentFunctions> #ifdef DIFFUSE varying vec2 vDiffuseUV; uniform sampler2D diffuseSampler; #endif #ifdef AMBIENT varying vec2 vAmbientUV; uniform sampler2D ambientSampler; #endif #ifdef OPACITY varying vec2 vOpacityUV; uniform sampler2D opacitySampler; #endif #ifdef EMISSIVE varying vec2 vEmissiveUV; uniform sampler2D emissiveSampler; #endif #ifdef LIGHTMAP varying vec2 vLightmapUV; uniform sampler2D lightmapSampler; #endif #ifdef REFRACTION #ifdef REFRACTIONMAP_3D uniform samplerCube refractionCubeSampler; #else uniform sampler2D refraction2DSampler; #endif #endif #if defined(SPECULAR) && defined(SPECULARTERM) varying vec2 vSpecularUV; uniform sampler2D specularSampler; #endif #include<fresnelFunction> #ifdef REFLECTION #ifdef REFLECTIONMAP_3D uniform samplerCube reflectionCubeSampler; #else uniform sampler2D reflection2DSampler; #endif #ifdef REFLECTIONMAP_SKYBOX varying vec3 vPositionUVW; #else #if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED) varying vec3 vDirectionW; #endif #endif #include<reflectionFunction> #endif #include<imageProcessingDeclaration> #include<imageProcessingFunctions> #include<bumpFragmentFunctions> #include<clipPlaneFragmentDeclaration> #include<logDepthDeclaration> #include<fogFragmentDeclaration> #[Fragment_Definitions] void main(void) { vNormalW = vNormalW_helper; #[Fragment_MainBegin] #include<clipPlaneFragment> vec3 viewDirectionW=normalize(vEyePosition-vPositionW); vec4 baseColor=vec4(1.,1.,1.,1.); vec3 diffuseColor=vDiffuseColor.rgb; #[Fragment_Custom_Diffuse] float alpha=vDiffuseColor.a; #[Fragment_Custom_Alpha] #ifdef NORMAL vec3 normalW=normalize(vNormalW); #else vec3 normalW=vec3(1.0,1.0,1.0); #endif #include<bumpFragment> #ifdef TWOSIDEDLIGHTING normalW=gl_FrontFacing ? normalW : -normalW; #endif #ifdef DIFFUSE baseColor=texture2D(diffuseSampler,vDiffuseUV+uvOffset); #ifdef ALPHATEST if (baseColor.a<0.4) discard; #endif #ifdef ALPHAFROMDIFFUSE alpha*=baseColor.a; #endif baseColor.rgb*=vDiffuseInfos.y; #endif #ifdef VERTEXCOLOR baseColor.rgb*=vColor.rgb; #endif vec3 baseAmbientColor=vec3(1.,1.,1.); #ifdef AMBIENT baseAmbientColor=texture2D(ambientSampler,vAmbientUV+uvOffset).rgb*vAmbientInfos.y; #endif #ifdef SPECULARTERM float glossiness=vSpecularColor.a; vec3 specularColor=vSpecularColor.rgb; #ifdef SPECULAR vec4 specularMapColor=texture2D(specularSampler,vSpecularUV+uvOffset); specularColor=specularMapColor.rgb; #ifdef GLOSSINESS glossiness=glossiness*specularMapColor.a; #endif #endif #else float glossiness=0.; #endif vec3 diffuseBase=vec3(0.,0.,0.); lightingInfo info; #ifdef SPECULARTERM vec3 specularBase=vec3(0.,0.,0.); #endif float shadow=1.; #ifdef LIGHTMAP vec3 lightmapColor=texture2D(lightmapSampler,vLightmapUV+uvOffset).rgb*vLightmapInfos.y; #endif #include<lightFragment>[0..maxSimultaneousLights] vec3 refractionColor=vec3(0.,0.,0.); #ifdef REFRACTION vec3 refractionVector=normalize(refract(-viewDirectionW,normalW,vRefractionInfos.y)); #ifdef REFRACTIONMAP_3D refractionVector.y=refractionVector.y*vRefractionInfos.w; if (dot(refractionVector,viewDirectionW)<1.0) { refractionColor=textureCube(refractionCubeSampler,refractionVector).rgb*vRefractionInfos.x; } #else vec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0))); vec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z; refractionCoords.y=1.0-refractionCoords.y; refractionColor=texture2D(refraction2DSampler,refractionCoords).rgb*vRefractionInfos.x; #endif #endif vec3 reflectionColor=vec3(0.,0.,0.); #ifdef REFLECTION vec3 vReflectionUVW=computeReflectionCoords(vec4(vPositionW,1.0),normalW); #ifdef REFLECTIONMAP_3D #ifdef ROUGHNESS float bias=vReflectionInfos.y; #ifdef SPECULARTERM #ifdef SPECULAR #ifdef GLOSSINESS bias*=(1.0-specularMapColor.a); #endif #endif #endif reflectionColor=textureCube(reflectionCubeSampler,vReflectionUVW,bias).rgb*vReflectionInfos.x; #else reflectionColor=textureCube(reflectionCubeSampler,vReflectionUVW).rgb*vReflectionInfos.x; #endif #else vec2 coords=vReflectionUVW.xy; #ifdef REFLECTIONMAP_PROJECTION coords/=vReflectionUVW.z; #endif coords.y=1.0-coords.y; reflectionColor=texture2D(reflection2DSampler,coords).rgb*vReflectionInfos.x; #endif #ifdef REFLECTIONFRESNEL float reflectionFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,reflectionRightColor.a,reflectionLeftColor.a); #ifdef REFLECTIONFRESNELFROMSPECULAR #ifdef SPECULARTERM reflectionColor*=specularColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb; #else reflectionColor*=reflectionLeftColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb; #endif #else reflectionColor*=reflectionLeftColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb; #endif #endif #endif #ifdef REFRACTIONFRESNEL float refractionFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,refractionRightColor.a,refractionLeftColor.a); refractionColor*=refractionLeftColor.rgb*(1.0-refractionFresnelTerm)+refractionFresnelTerm*refractionRightColor.rgb; #endif #ifdef OPACITY vec4 opacityMap=texture2D(opacitySampler,vOpacityUV+uvOffset); #ifdef OPACITYRGB opacityMap.rgb=opacityMap.rgb*vec3(0.3,0.59,0.11); alpha*=(opacityMap.x+opacityMap.y+opacityMap.z)* vOpacityInfos.y; #else alpha*=opacityMap.a*vOpacityInfos.y; #endif #endif #ifdef VERTEXALPHA alpha*=vColor.a; #endif #ifdef OPACITYFRESNEL float opacityFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,opacityParts.z,opacityParts.w); alpha+=opacityParts.x*(1.0-opacityFresnelTerm)+opacityFresnelTerm*opacityParts.y; #endif vec3 emissiveColor=vEmissiveColor; #ifdef EMISSIVE emissiveColor+=texture2D(emissiveSampler,vEmissiveUV+uvOffset).rgb*vEmissiveInfos.y; #endif #ifdef EMISSIVEFRESNEL float emissiveFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,emissiveRightColor.a,emissiveLeftColor.a); emissiveColor*=emissiveLeftColor.rgb*(1.0-emissiveFresnelTerm)+emissiveFresnelTerm*emissiveRightColor.rgb; #endif #ifdef DIFFUSEFRESNEL float diffuseFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,diffuseRightColor.a,diffuseLeftColor.a); diffuseBase*=diffuseLeftColor.rgb*(1.0-diffuseFresnelTerm)+diffuseFresnelTerm*diffuseRightColor.rgb; #endif #ifdef EMISSIVEASILLUMINATION vec3 finalDiffuse=clamp(diffuseBase*diffuseColor+vAmbientColor,0.0,1.0)*baseColor.rgb; #else #ifdef LINKEMISSIVEWITHDIFFUSE vec3 finalDiffuse=clamp((diffuseBase+emissiveColor)*diffuseColor+vAmbientColor,0.0,1.0)*baseColor.rgb; #else vec3 finalDiffuse=clamp(diffuseBase*diffuseColor+emissiveColor+vAmbientColor,0.0,1.0)*baseColor.rgb; #endif #endif #ifdef SPECULARTERM vec3 finalSpecular=specularBase*specularColor; #ifdef SPECULAROVERALPHA alpha=clamp(alpha+dot(finalSpecular,vec3(0.3,0.59,0.11)),0.,1.); #endif #else vec3 finalSpecular=vec3(0.0); #endif #ifdef REFLECTIONOVERALPHA alpha=clamp(alpha+dot(reflectionColor,vec3(0.3,0.59,0.11)),0.,1.); #endif #ifdef EMISSIVEASILLUMINATION vec4 color=vec4(clamp(finalDiffuse*baseAmbientColor+finalSpecular+reflectionColor+emissiveColor+refractionColor,0.0,1.0),alpha); #else vec4 color=vec4(finalDiffuse*baseAmbientColor+finalSpecular+reflectionColor+refractionColor,alpha); #endif #ifdef LIGHTMAP #ifndef LIGHTMAPEXCLUDED #ifdef USELIGHTMAPASSHADOWMAP color.rgb*=lightmapColor; #else color.rgb+=lightmapColor; #endif #endif #endif #include<logDepthFragment> #include<fogFragment> // Apply image processing if relevant. As this applies in linear space, // We first move from gamma to linear. #ifdef IMAGEPROCESSINGPOSTPROCESS color.rgb = toLinearSpace(color.rgb); #else #ifdef IMAGEPROCESSING color.rgb = toLinearSpace(color.rgb); color = applyImageProcessing(color); #endif #endif #[Fragment_Before_FragColor] gl_FragColor=color; }" That it will compile correctly as the default material? I was looking at the FragmentStore on your material object, and just wondering how this works. I thought this was compiled by TypeScript, if this works in the DOM by just including the babylon.js script my mind is blown. But I'm pretty sure that's typescript stuff... This has nothing to do with what we are doing here but is just so I can understand your shaderbuilder more @NasimiAsl Quote Link to comment Share on other sites More sharing options...
NasimiAsl Posted January 30, 2018 Share Posted January 30, 2018 but it is extension Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted January 30, 2018 Share Posted January 30, 2018 https://www.babylonjs-playground.com/#F04MZ7#21 I mean the binding keeps firing which is odd... but it looks like its working here by changing the scope a little. Quote Link to comment Share on other sites More sharing options...
NasimiAsl Posted January 30, 2018 Share Posted January 30, 2018 you r good in shader Pryme8 1 Quote Link to comment Share on other sites More sharing options...
babbleon Posted February 1, 2018 Author Share Posted February 1, 2018 Thanks to @Pryme8 - this is now solved! https://www.babylonjs-playground.com/#F04MZ7#21 NasimiAsl 1 Quote Link to comment Share on other sites More sharing options...
Pryme8 Posted February 1, 2018 Share Posted February 1, 2018 and @NasimiAsl for his awesome Standard Material Extension! HE saved us from having to do a bunch of work! NasimiAsl 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.