2
$\begingroup$

I'm looking for a very realistic material for rice. I've tried just turning up the subsurf, transmission with various IOR settings, messed around with mixing translucent shaders, tried using layer weights, transparent shaders and whatnot but it just looks too rubbery.

Q: How would one create a raw white rice shader for cycles?

$\endgroup$
6
  • 2
    $\begingroup$ Please can you share the result you are getting with the rice ? $\endgroup$ Feb 25, 2021 at 5:40
  • 1
    $\begingroup$ Cycles or EEVEE? $\endgroup$ Feb 25, 2021 at 5:43
  • 3
    $\begingroup$ Consider enabling subsurface scattering, which helps quite a lot when rendering rice. $\endgroup$ Feb 25, 2021 at 7:44
  • $\begingroup$ @Aster17: I don't really have anything that I feel is even halfway there, but when I get back to my computer I'll share what I got. $\endgroup$ Feb 26, 2021 at 7:51
  • $\begingroup$ @Alexis King: as I said in the question, I've tried enabling sss but doesn't even look close to right, just looks rubbery $\endgroup$ Feb 26, 2021 at 7:53

1 Answer 1

3
$\begingroup$

To make this realistic you'll have to mix a couple of different methods. A key concept is that rice is a bunch of little individual grains and no two grains are exactly alike, even in terms of physical properties.

I started with this as a model for a grain of rice. It's an icosphere because I like to live dangerously.

enter image description here

I looked up the length of a grain of rice and scaled it down to around that size. I've measured the length here because we're going to use it as a reference for some scale values.

Shade smooth, subdiv 3. It's on a plane with a simple light blue texture, I turned the default point light into an area lamp with a strength of 1000w and scaled it up a bit to soften it.

I picked a slightly yellow base color, and a roughness value of .415.

enter image description here

Then I introduced some Subsurface Scattering. For the overall value I went with .0025 (half the model's length), and for radius I went heavily into red, a lot into green, and cut the blue out completely, in an attempt to bring out some orange. The reference I was using was a bit on the orange side, tweak to your preference. I think this worked -

enter image description here

but it's not really doing it for me because I don't think I'm capturing that slightly see-through quality of rice. So I decided to just start transmitting a large portion of the rays. I did a number of tests, my suspicion was that a Transmission Roughness of 1 would be necessary to avoid strange lighting and that turns out to be the case.

enter image description here

I think that .25 transmission is not an unreasonable look for a single grain of rice (rouse?). .35 is maybe getting a little rough looking but not outside the realm of possibility, where something like .1 is not that noticeable. So we've built kind of a default grain, and we can vary some of these values around their current levels to create variants.

To do this procedurally, we can introduce some microdisplacement, so we need to go to the material settings for the rice and enable Displacement and Bump under Settings.

enter image description here

And then we can run a Noise Texture into a Displacement node at a Scale comparable to part of the length of the model. I actually disabled the subdivision surface modifier for this, as I started thinking it was a bit too smooth. I scale the texture on the X axis here with a Mapping node, but basically I elongated the bumps along the length of the grain. Pick whatever axis is relevant for you.

enter image description here

And we've displaced the model just a bit. We can now do some math to randomize this displacement for every grain we generate. We can use several methods. If you are going to do this with Objects, Object Info > Random is your friend, if you are using particles there's a Particle Info node, and arrays can be randomized using Geometry > Random per island. I've set up a particle system here.

enter image description here

I just multiply the random value by some amount (don't go crazy) and throw it straight into the Location on the Mapping node. Sometimes you want to limit this to one or two axes, and you can do that with a Combine XYZ node.

We can use this Random value along with Color Ramps to further randomize the Base Color, Roughness, and the amount of Transmission. I used the values I already landed on as a guide for a new minimum and maximum value for the Color Ramps.

enter image description here

I cranked up the samples and did a render.

enter image description here

It's close, I went back and made the model a little skinnier, adjusted some of the values, and of course this was quite a close-up for rice. Here's a render after some time with it.

enter image description here

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .