 	const auto lcp1 = computeLongestCommonPrefix(sortedKeys, numOfElems, i, i + 1, key1);
 	const auto lcp2 = computeLongestCommonPrefix(sortedKeys, numOfElems, i, i - 1, key1);
 
+	// ǂɒTĂ߂.
+	// CommonPrefix ȂɒT.
 	auto d = (lcp1 - lcp2) < 0 ? -1 : 1;
 
 	// Compute upper bound for the length of the range
+	// T͈͂̏߂. {XɍLĂA LongestCommonPrefix ȂʒuT͈͂̏Ƃ.
+
+	// Common Prefix ȂƂ͂P΂ LogestCommonPrefix vZ.
+	// ȂƂ͂P = LogestCommonPrefix ̉.
 	const auto minLcp = computeLongestCommonPrefix(sortedKeys, numOfElems, i, i - d, key1);
 	int lMax = 2;
 	while (computeLongestCommonPrefix(sortedKeys, numOfElems, i, i + lMax * d, key1) > minLcp)

	}

	// Find other end using binary search
	int l = 0;
	int t = lMax;
	while (t > 1)
	{
		t = t / 2;
		auto lcp = computeLongestCommonPrefix(sortedKeys, numOfElems, i, i + (l + t) * d, key1);
		if (lcp > minLcp)
		{
			l += t;
		}
	}
	const auto j = i + l * d;

	// Find the split position using binary search
	const auto nodeLcp = computeLongestCommonPrefix(sortedKeys, numOfElems, i, j, key1);
	int s = 0;
	int divisor = 2;
	t = l;
	while (t > 1)
	{
		t = (l + divisor - 1) / divisor;
		auto lcp = computeLongestCommonPrefix(sortedKeys, numOfElems, i, i + (s + t) * d, key1);
		if (lcp > nodeLcp)
		{
			s += t;
		}
		divisor *= 2;
	}

	const auto splitPosition = i + s * d + min(d, 0);

	auto* node = nodes + i;
	if (i == 0) {


		// Radix sort.
		m_sort.sort(
			numberOfTris,
			m_mortonCodes,
			m_indices,
			m_sortedMortonCode,
			m_sortedIndices);

		uint32_t numInternalNode = numberOfTris - 1;
		uint32_t numLeaves = numberOfTris;

		// Build tree.
		{
			dim3 block(256, 1, 1);
			dim3 grid((numberOfTris + block.x - 1) / block.x, 1, 1);

			buildTree << <grid, block >> > (
				numberOfTris,
				m_sortedMortonCode.ptr(),
				m_nodesLbvh.ptr());

