Rendering flat(solid) colors on genesis
Hi, all
I m running into a problem that's driving me crazy and I can't figure it out. Basically I have a genesis model that is used as a cutout filter. For that I have marked certain areas of the body with certain solid colors. I followed some tutorial which said to set specular and diffuse to 0, and amp the ambient to 100% and then assign ambient colors. And that works fine if I use the lowest quality rendering setting (I think that's software render or something) in DAZ3D 4.6. For the example refer to pic 1 - you can see how body is in solid white, head is in solid green.
The problem starts when I try to use the high quality render feature (3Delight) - that's when the whole model suddenly turns black. (picture 2) with green eyes. Does anyone have any ideas what could be causing this. No settings between two images were changed, only the bar on the render quality window being raised from 1 to 4
Comments
In 3delight Ambient and Diffuse are multiplied together (which is logical, if you think of the ambient as simulating ambient light - a black surface will stay black however brightly it is lit). For this you want Diffuse 100% and white.
Hm, that makes sense, but when I tried it , it just ended up rendering the whole thing in gray color with shading (as in the pic)....
For the Multi Zone Mat renders you wish to do there is NO reason to use the FULL 3Delight render engine unless you wish for the shading. If that is your goal only change the Diffuse in Surfaces Tab, then set to Matte as the Lighting Model in the Surfaces. This is what you get using the FULL render then.
Here is one Fully done closer to your First Image in the Full Render setting.
I think the problem is elsewhere. Normaly for surface calculation ambiant and diffuse are not multiplied but rather added
Color = Ambiant * ambiant strenght + Diffuse * Diffuse strenght + specular * specular stranght + reflection * reflection strenght and so on
So for what you want put everything at strenght 0 and ambiant at 100 %
Depending on the shader you use, the source of the problem may vary so it could be good to tell which shader is used
If it's Ubersurface then make sure you have Ambiant Active on all surface
The problem is - I need this filter to match pixel by pixel to the actual image that will be rendered. I have a post-processing app that will take the two images and use the filter one to cut out areas of the actual image. But it seems that there are small variations in pixels between the low-quality and high-quality render (probably due to different aliasing or something) that are enough to throw this off. (P.S. If you're wondering why I don't just hide the parts of the figure before rendering - I can't because that shows the inside of the part connected to it. For example, trying to hide forearm will show the inside hollow of the upper arm when the figure is facing you). So one thing I came up is with these masks for cutting the original image based on color and it works great as long as the renders match pixel-perfect between the mask and the actual image.
Yup, it's shader related... I just looked at the genesis model and it had "Multiple" as shaders. Then I looked at each of the surfaces and all of them except the eyes had some "onHumanSurface" shader. Eyes had dazDefault (and they are also the only thing in the original picture that actually had green color). If i change arms to dazDefault for example I can then get arms rendered in green , as the picture shows.
Unfortunately it doesn't seem I can simply switch everything to dzDefault because there again seems to be slight diff in generated pixels in the final image, so if i try to run dzDefault rendered mask vs unmodified Genesis render the generated cutout is wrong. And if I try to render actual image with dzDefault I get some weird artifacts around legs (like texture seams or somethign like that). So I need to figure out why this onHumanSurface shader that makes it behave differently. Any ideas where to look for clues ?
Just re-read this part of your post and this WAS it. What the heck... the surfaces did not have ambient active. But why does the low-quality render ignore this (and so does high-quality dzDefault) and renders my ambient color anyway, while onHumanSurface checks for it. Weird... But in any case this is resolved now - thanks everybody for your help !!!
The OpenGL render doesn't have access to uberSurface (which has only 3Delight code) so it substitutes the base shader instead (which does have a GLshaderLanguage version). As for the difference between the default shader and uberSurface, was there any displacement in use?
Takeo.Kensei, in the default shader the Ambient is multiplied with the Diffuse (but apparently colour, not colour and strength) - that's why Poser materials that use Ambient to create a glow often don't work without editing in DS.
Just re-read this part of your post and this WAS it. What the heck... the surfaces did not have ambient active. But why does the low-quality render ignore this (and so does high-quality dzDefault) and renders my ambient color anyway, while onHumanSurface checks for it. Weird... But in any case this is resolved now - thanks everybody for your help !!!
I never use the DS quality preset but my guess is that the low quality is opengl render which doesn't read parameters on/off switch but only standard basic surface values. On high quality the complete shaders and light are evaluated by the 3delight render engine
If you only need base ambiant color you can switch all your surface to DAZ default shader which doesn't have the switch and are enough to do the job
Ok didn't know that. I've just done the test and effectively the ambiant is multiplied by diffuse color but not diffuse strenght, so @v-man, if you use the default shader it may be good to put diffuse color at white (255,255,255) if getting the right diffuse color is important