 	const aten::GeomParameter* __restrict__ shapes, int geomnum,
 	const aten::MaterialParameter* __restrict__ mtrls,
 	const aten::LightParameter* __restrict__ lights, int lightnum,
-	cudaTextureObject_t* nodes,
 	const aten::PrimitiveParamter* __restrict__ prims,
 	cudaTextureObject_t vtxPos,
 	cudaTextureObject_t vtxNml,

	}
	AT_NAME::material::applyNormalMap(normalMap, orienting_normal, orienting_normal, rec.u, rec.v);

#ifdef SEPARATE_SHADOWRAY_HITTEST
	shShadowRays[threadIdx.x].isActive = false;
#endif

	auto albedo = AT_NAME::sampleTexture(shMtrls[threadIdx.x].albedoMap, rec.u, rec.v, aten::vec3(1), bounce);



		int curaov = getCurAovs();

		bool isFirstBounce = (bounce == 0);

		shade << <blockPerGrid, threadPerBlock >> > (
			isFirstBounce,
			m_aovNormalDepth[curaov].ptr(),
			m_aovTexclrTemporalWeight[curaov].ptr(),
			m_aovMomentMeshid[curaov].ptr(),
			mtxW2C,
			width, height,
			m_paths.ptr(),
			m_hitidx.ptr(), hitcount,
			m_isects.ptr(),
			m_rays.ptr(),
			m_frame,
			bounce, rrBounce,
			m_shapeparam.ptr(), m_shapeparam.num(),
			m_mtrlparam.ptr(),
			m_lightparam.ptr(), m_lightparam.num(),
			m_primparams.ptr(),
			texVtxPos, texVtxNml,
			m_mtxparams.ptr(),
			m_tex.ptr(),
			m_random.ptr(),
			m_shadowRays.ptr());

		checkCudaKernel(shade);

		hitShadowRay << <blockPerGrid, threadPerBlock >> > (
			m_paths.ptr(),
			m_hitidx.ptr(), hitcount,
